Files
player/Project/Src/MyWinApp/mywin_user_debug.c
2025-06-28 22:15:49 +08:00

250 lines
4.7 KiB
C

#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