250 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			4.6 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
 | |
| 
 | |
| 
 |