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