#include "mywin_inc.h" #include "mywin_user_debug.h" #include "date.h" #include "math.h" #include "tools.h" #include "system_file.h" #include "mywin_user_filder.h" #include "mywin_user_animation.h" #include "tools.h" #include "mylua.h" #define MODULE(s) DEBUG_##s void MODULE(Delete)(WIN_DebugStruct *lock); WIN_DebugStruct *WIN_CreatDebug (WIN_WindowStruct *base, void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg), int x,int y,int x_size,int y_size) { //重设消息循环 if (msgLoop==0) { msgLoop=(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))MODULE(DefaultMsgLoop); } WIN_DebugStruct *ret=mymalloc (sizeof ( WIN_DebugStruct)); //调用父类的构造函数 if (ret) { mymemset (ret,0,sizeof ( WIN_DebugStruct)); if (0==WIN_CreatTouchEx((WIN_TouchWinStruct *)ret,base,msgLoop,x,y,x_size,y_size)) { //创建失败 myfree (ret); ret=0; } else { //构造一个 ((WIN_WindowStruct *)ret)->winType="WIN_DebugStruct"; ((WIN_WindowStruct *)ret)->deleteWindow=(void (*)(struct _WIN_WindowStruct *win))MODULE(Delete); //((WIN_WindowStruct *)ret)->intercept=1;//不发送按键消息到父窗口 ((WIN_WindowStruct *)ret)->bkcolor=0x008080; ((WIN_WindowStruct *)ret)->color=0xd7c1ac; } } ret->time_id1=WIN_CreatTimer ((WIN_WindowStruct *)ret,50); freopen("lcd","r+",stdout); return ret; } void MODULE(Delete)(WIN_DebugStruct *lock) { freopen("usart","r+",stdout); //调用父类的销毁函数 WIN_DeleteWindow ( (WIN_WindowStruct *)lock); } static int draw_char_at(int c,int x,int y) { char ch[3]={0}; if(c>0x80) {ch[0]=c>>8;ch[1]=c;} else ch[0]=c; WIN_DrawTxtAt(ch,x,y); return 8; } //默认绘制函数 void MODULE(DefaultPaint) (WIN_DebugStruct *home) { int x=0; int y=0; int x_size=((WIN_WindowStruct *)home)->x_size; int y_size=((WIN_WindowStruct *)home)->y_size; WIN_PaintBackGround ((WIN_WindowStruct *)home); u32 font_type=WIN_SetFontSize(16); u32 color_bk=((WIN_WindowStruct *)home)->bkcolor; u32 color=((WIN_WindowStruct *)home)->color; WIN_SetLcdColor(color); tools_dbg_print(draw_char_at); WIN_SetFontSize(font_type); } void MODULE(Exit)(WIN_DebugStruct *op) { if(op->work==0) ((WIN_WindowStruct *)op)->deleteWindow((WIN_WindowStruct *)op); else { MSGBOX_TipsTime((WIN_WindowStruct *)op,"提示","任务正在运行\n无法退出","确定",5000); } } //默认消息处理函数 void MODULE(DefaultMsgLoop) (WIN_DebugStruct *home,WIN_MsgStruct *msg) { WIN_KeyStruct *k=0; WIN_MoveStruct *m; switch (msg->msg) { case WIN_MSG_PAINT: MODULE(DefaultPaint)(home); break; case WIN_MSG_INIT: { } break; case WIN_MSG_TIMER: //定时器时间到 if (msg->data.v==home->time_id1) { if (WIN_GetExWorkFunStat(home->work)) { //工作已经完成, WIN_ExWorkFunClear (home->work); home->work=0; } WIN_SetInvalidWhenTop((WIN_WindowStruct *)home); } break; case WIN_MSG_CHID: break; case WIN_MSG_KEY: k=msg->data.p; if(k->shortPress&KEY_VALUE_DOWN) { } else if(k->shortPress&KEY_VALUE_UP) { } else if(k->shortPress&KEY_VALUE_ENTER) { } else if(k->shortPress&KEY_VALUE_HOME) { MODULE(Exit)(home); } WIN_SetInvalid((WIN_WindowStruct *)home); break;//case WIN_MSG_KEY: case WIN_MSG_MOVE: m=msg->data.p; switch(m->moveType) { case MOVE_DATA_SHORT: WIN_SetInvalid((WIN_WindowStruct *)home); break; case MOVE_DATA_LONG: { MODULE(Exit)(home); } default: break; } break; default: WIN_DefaultMsgLoop((WIN_WindowStruct *)home,msg); break; } } // 进入调试 void DEBUG_EnterPrint(void) { WIN_DebugStruct *home=0; WIN_WindowStruct *win=0; if(win=WIN_GetWinByTitle(0,"debug"),win==0) { WIN_WindowStruct *base=0; if(base==0) base=WIN_GetBaseWindow(); home=WIN_CreatDebug (base,0,0,0,base->x_size,base->y_size); WIN_SetWinTitle((WIN_WindowStruct*)home,"debug"); WIN_ShowWindow((WIN_WindowStruct*)home); } else { WIN_SetChidWinTop(win->baseWin,win); WIN_ShowWindow(win); } } static int cb_run_lua(void *ptr) { char *argv[]={ "lua", (char *)ptr, }; // lua_main(2,argv); return 0; } // 进入调试 void DEBUG_EnterPrintCmd(char *cmd) { WIN_DebugStruct *w=0; WIN_WindowStruct *base=0; if(base==0) base=WIN_GetBaseWindow(); w=WIN_CreatDebug (base,0,0,0,base->x_size,base->y_size); mymemcpy(w->cmd,cmd,strlen(cmd)+1); //创建工作线程 w->work=WIN_CreatThreadPro (cb_run_lua,w->cmd,&w->ret,18); WIN_ShowWindow((WIN_WindowStruct*)w); } #undef MODULE