536 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			536 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include "mywin_inc.h"
							 | 
						|||
| 
								 | 
							
								#include "mywin_user_menu.h"
							 | 
						|||
| 
								 | 
							
								#include "flash_manager.h"
							 | 
						|||
| 
								 | 
							
								#include "ff.h"
							 | 
						|||
| 
								 | 
							
								#include "mywin_user_set.h"
							 | 
						|||
| 
								 | 
							
								#include "mywin_user_tool.h"
							 | 
						|||
| 
								 | 
							
								#include "mywin_user_home.h"
							 | 
						|||
| 
								 | 
							
								#include "date.h"
							 | 
						|||
| 
								 | 
							
								#include "system_file.h"
							 | 
						|||
| 
								 | 
							
								#include "system_updata.h"
							 | 
						|||
| 
								 | 
							
								#include "mp3play.h"
							 | 
						|||
| 
								 | 
							
								#include "math.h"
							 | 
						|||
| 
								 | 
							
								#include "mywin_user_lock.h"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								#define WIN_HOME_TYPE "WIN_HomeStruct"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static WIN_TouchWinStruct *creat_menu(WIN_TouchWinStruct *base);
							 | 
						|||
| 
								 | 
							
								static WIN_TouchWinStruct *creat_tool(WIN_TouchWinStruct *base);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static	const char *g_week[7]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								WIN_HomeStruct *WIN_CreatHome (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))HOME_DefaultMsgLoop;  
							 | 
						|||
| 
								 | 
							
									} 
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									WIN_HomeStruct *ret=mymalloc (sizeof ( WIN_HomeStruct));
							 | 
						|||
| 
								 | 
							
									//调用父类的构造函数
							 | 
						|||
| 
								 | 
							
									if (ret)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										mymemset (ret,0,sizeof ( WIN_HomeStruct));
							 | 
						|||
| 
								 | 
							
								//		if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size))
							 | 
						|||
| 
								 | 
							
										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_HOME_TYPE;
							 | 
						|||
| 
								 | 
							
											((WIN_WindowStruct *)ret)->bkcolor=0;
							 | 
						|||
| 
								 | 
							
											((WIN_WindowStruct *)ret)->color=0xd7c1ac;
							 | 
						|||
| 
								 | 
							
											ret->color1=0x7d7064;
							 | 
						|||
| 
								 | 
							
											ret->timerId= WIN_CreatTimer ((WIN_WindowStruct *)ret,100);
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											WIN_TouchWinStruct *t=(WIN_TouchWinStruct *)ret;
							 | 
						|||
| 
								 | 
							
											WIN_WindowStruct *w=(WIN_WindowStruct *)ret;
							 | 
						|||
| 
								 | 
							
								//			TOUCHWIN_AddChild(t,TOUCH_CON_DOWN_PAR(w->x_size,w->y_size,creat_menu));
							 | 
						|||
| 
								 | 
							
								//			TOUCHWIN_AddChild(t,TOUCH_CON_LEFT_PAR(w->x_size,w->y_size,creat_tool));
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									return ret;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								int HOME_Updata (WIN_HomeStruct *home,HOME_DataStruct *data)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									if (data->structType==STRUCT_TYPE_HOME)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										mymemcpy (home->date,data->date,strlen(data->date)+1);
							 | 
						|||
| 
								 | 
							
										mymemcpy (home->time,data->time,strlen(data->time)+1);
							 | 
						|||
| 
								 | 
							
										return 1;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									return 0;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static WIN_TouchWinStruct *creat_menu(WIN_TouchWinStruct *base)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									WIN_WindowStruct *temp=0;
							 | 
						|||
| 
								 | 
							
									temp=(WIN_WindowStruct *)MENU_Setting ((WIN_WindowStruct *)base,&((WIN_WindowStruct *)base)->pic);
							 | 
						|||
| 
								 | 
							
									WIN_SetBkColor (temp,((WIN_WindowStruct *)base)->bkcolor);
							 | 
						|||
| 
								 | 
							
									WIN_SetColor (temp,((WIN_WindowStruct *)base)->color);
							 | 
						|||
| 
								 | 
							
									WIN_TouchWinStruct *t=(WIN_TouchWinStruct *)temp;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
								//	WIN_TouchWinStruct *t=(WIN_TouchWinStruct *)CreatPicSet((WIN_WindowStruct *)base);
							 | 
						|||
| 
								 | 
							
									return t;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static WIN_TouchWinStruct *creat_tool(WIN_TouchWinStruct *base)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									WIN_WindowStruct *temp=0;
							 | 
						|||
| 
								 | 
							
									temp=(WIN_WindowStruct *)MENU_Tool ((WIN_WindowStruct *)base,&((WIN_WindowStruct *)base)->pic);
							 | 
						|||
| 
								 | 
							
									WIN_SetBkColor (temp,((WIN_WindowStruct *)base)->bkcolor);
							 | 
						|||
| 
								 | 
							
									WIN_SetColor (temp,((WIN_WindowStruct *)base)->color);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									WIN_TouchWinStruct *t=(WIN_TouchWinStruct *)temp;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									return t;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//按键消息处理函数
							 | 
						|||
| 
								 | 
							
								/*
							 | 
						|||
| 
								 | 
							
								主页按键逻辑:
							 | 
						|||
| 
								 | 
							
									短按确定键,进入伞训
							 | 
						|||
| 
								 | 
							
									短按上键,应用检测
							 | 
						|||
| 
								 | 
							
									短按下键,快捷工具
							 | 
						|||
| 
								 | 
							
									长按确定键,设置
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
								*/
							 | 
						|||
| 
								 | 
							
								int HOME_KeyBord (WIN_HomeStruct *home,WIN_KeyStruct *k)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									if (k->shortPress&KEY_VALUE_ENTER)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										creat_menu((WIN_TouchWinStruct *)home);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									else if (k->shortPress&KEY_VALUE_UP)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									else if (k->shortPress&KEY_VALUE_HOME)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										creat_tool((WIN_TouchWinStruct *)home);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									else if (k->longPress&KEY_VALUE_ENTER)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									return 0;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//处理触屏消息
							 | 
						|||
| 
								 | 
							
								int HOME_TouchBord (WIN_HomeStruct *home,WIN_MsgStruct *msg)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									switch (msg->data.v)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										case CHID_DELETE:
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case CHID_USER:
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											if (msg->data2.v==BUTTON_PRESSED)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												if (msg->srcWin==home->key_menu)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													creat_menu((WIN_TouchWinStruct *)home);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
												else if (msg->srcWin==home->key_tool)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													creat_tool((WIN_TouchWinStruct *)home);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										default:
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									return 0;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//触屏移动消息
							 | 
						|||
| 
								 | 
							
								int HOME_TouchMove(WIN_HomeStruct *home,WIN_MoveStruct *m)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									WIN_WindowStruct *win=(WIN_WindowStruct *)home;
							 | 
						|||
| 
								 | 
							
									switch(m->moveType)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										case MOVE_DATA_MOVED:
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case MOVE_DATA_TOUCHIN:
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case MOVE_DATA_TOUCHOUT:
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									return 0;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//默认绘制函数
							 | 
						|||
| 
								 | 
							
								void HOME_DefaultPaint (WIN_HomeStruct *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(24);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//显示日期
							 | 
						|||
| 
								 | 
							
									WIN_SetLcdBkColor (((WIN_WindowStruct *)home)->bkcolor);
							 | 
						|||
| 
								 | 
							
									WIN_SetLcdColor (((WIN_WindowStruct *)home)->color);
							 | 
						|||
| 
								 | 
							
									WIN_SetFontMode (WIN_DRAWMODE_ALONE);
							 | 
						|||
| 
								 | 
							
									char txt_dat[20]={0};
							 | 
						|||
| 
								 | 
							
									int dat_x=156;
							 | 
						|||
| 
								 | 
							
									int dat_y=190+20;
							 | 
						|||
| 
								 | 
							
									mymemcpy (txt_dat,home->date,10);
							 | 
						|||
| 
								 | 
							
									WIN_DrawTxtHCenterAt (home->date,x_size/2,dat_y);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//显示时间
							 | 
						|||
| 
								 | 
							
									char txt_min[10]={0};
							 | 
						|||
| 
								 | 
							
									int time_x=0;
							 | 
						|||
| 
								 | 
							
									int time_y=60+20;
							 | 
						|||
| 
								 | 
							
									mymemcpy (txt_min,home->time,5);
							 | 
						|||
| 
								 | 
							
									WIN_SetFontSize(100);
							 | 
						|||
| 
								 | 
							
									int min_xsize=strlen(txt_min)*WIN_GetFontWidth()/2;
							 | 
						|||
| 
								 | 
							
									WIN_SetFontSize(35);
							 | 
						|||
| 
								 | 
							
									int sec_xsize=strlen(home->time+5)*WIN_GetFontWidth()/2;
							 | 
						|||
| 
								 | 
							
									time_x=x_size/2-(min_xsize+sec_xsize)/2;
							 | 
						|||
| 
								 | 
							
									WIN_SetFontSize(100);
							 | 
						|||
| 
								 | 
							
									WIN_DrawTxtAt(txt_min,time_x,time_y);
							 | 
						|||
| 
								 | 
							
									time_x+=min_xsize;
							 | 
						|||
| 
								 | 
							
									time_y+=WIN_GetFontHight();
							 | 
						|||
| 
								 | 
							
									WIN_SetFontSize(35);
							 | 
						|||
| 
								 | 
							
									time_y-=WIN_GetFontHight();
							 | 
						|||
| 
								 | 
							
									WIN_DrawTxtAt(home->time+5,time_x,time_y);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									WIN_SetFontSize(font_type);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//绘图测试
							 | 
						|||
| 
								 | 
							
								//	static int angle=0;
							 | 
						|||
| 
								 | 
							
								//	angle++;if(angle>=360) angle=0;
							 | 
						|||
| 
								 | 
							
								//	int p_x=sinf(angle*3.14159f/180.0f)*50;
							 | 
						|||
| 
								 | 
							
								//	int p_y=cosf(angle*3.14159f/180.0f)*50;
							 | 
						|||
| 
								 | 
							
								//	WIN_DrawLine(350+50,136,350+50+p_x,136+p_y);
							 | 
						|||
| 
								 | 
							
								//	WIN_DrawLineAA(350+50,136+50,350+50+p_x,136+50+p_y,4);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static const char *g_fileSaveItem[]=
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									"保存到系统空间",
							 | 
						|||
| 
								 | 
							
									"保存到SD卡",
							 | 
						|||
| 
								 | 
							
								};
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//文件复制到SD卡的工作函数
							 | 
						|||
| 
								 | 
							
								static int savefile_to_sd (void *ptr)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									SysFile_RecvedStruct *t=ptr;
							 | 
						|||
| 
								 | 
							
									int ret_int=0;
							 | 
						|||
| 
								 | 
							
									FIL *file=mymalloc (sizeof (FIL));
							 | 
						|||
| 
								 | 
							
									char *file_name=mymalloc (256);
							 | 
						|||
| 
								 | 
							
									FRESULT ret=FR_OK;
							 | 
						|||
| 
								 | 
							
									int file_name_len=strlen(t->name);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//只支持3个字符的尾缀
							 | 
						|||
| 
								 | 
							
									if(t->name[file_name_len-4]!='.')
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										myfree(file);
							 | 
						|||
| 
								 | 
							
										myfree(file_name);
							 | 
						|||
| 
								 | 
							
										return 0;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//根据文件类型选择文件夹
							 | 
						|||
| 
								 | 
							
									sprintf (file_name,"0:/%s/%s",&t->name[file_name_len-3],t->name);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									open:
							 | 
						|||
| 
								 | 
							
									ret=f_open (file,file_name,FA_CREATE_NEW|FA_WRITE);
							 | 
						|||
| 
								 | 
							
									if(ret==FR_NO_PATH)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										char path[20]={0};
							 | 
						|||
| 
								 | 
							
										sprintf(path,"0:/%s",&t->name[file_name_len-3]);
							 | 
						|||
| 
								 | 
							
										ret=f_mkdir(path);
							 | 
						|||
| 
								 | 
							
										if(ret==FR_OK) goto open;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									if (ret==FR_OK)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										UINT real=0;
							 | 
						|||
| 
								 | 
							
										ret=f_write (file,t->data,t->dataLen,&real);
							 | 
						|||
| 
								 | 
							
										if (ret!=FR_OK)
							 | 
						|||
| 
								 | 
							
											while (1);		
							 | 
						|||
| 
								 | 
							
										else ret_int=1;//返回1成功
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									else ret_int=0;
							 | 
						|||
| 
								 | 
							
									f_close (file);
							 | 
						|||
| 
								 | 
							
									myfree(file);
							 | 
						|||
| 
								 | 
							
									myfree(file_name);
							 | 
						|||
| 
								 | 
							
									return ret_int;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//保存文件到系统工作函数
							 | 
						|||
| 
								 | 
							
								static int savefile_to_sys (void *ptr)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									SysFile_RecvedStruct *r=ptr;
							 | 
						|||
| 
								 | 
							
									return FLASH_SaveFile(r->name,r->data,r->dataLen);
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								typedef struct
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									u8 *data;
							 | 
						|||
| 
								 | 
							
									u32 dataSize;
							 | 
						|||
| 
								 | 
							
								}DataInfo_Struct;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								static int g_alarmRingWork (void *ptr)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									DataInfo_Struct *dat=ptr;
							 | 
						|||
| 
								 | 
							
									return mp3_play_song (dat->data,dat->dataSize);
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//闹钟响起
							 | 
						|||
| 
								 | 
							
								void HOME_AlarmRun (WIN_HomeStruct *home)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									WIN_WindowStruct *win=(WIN_WindowStruct *)home;
							 | 
						|||
| 
								 | 
							
									char *txt_buff=mymalloc (256);
							 | 
						|||
| 
								 | 
							
									RTC_TimeTypeDef rtc_time={0};
							 | 
						|||
| 
								 | 
							
									RTC_DateTypeDef rtc_date={0};
							 | 
						|||
| 
								 | 
							
									RTC_GetTime (RTC_Format_BIN,&rtc_time);
							 | 
						|||
| 
								 | 
							
									RTC_GetDate (RTC_Format_BIN,&rtc_date);
							 | 
						|||
| 
								 | 
							
									sprintf (txt_buff,"%04d年%02d月%02d日 %s\n%02d:%02d",rtc_date.RTC_Year+2000,rtc_date.RTC_Month,rtc_date.RTC_Date,g_week[rtc_date.RTC_WeekDay-1],
							 | 
						|||
| 
								 | 
							
											rtc_time.RTC_Hours,rtc_time.RTC_Minutes);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									//打开闹铃
							 | 
						|||
| 
								 | 
							
									u32 size=0;
							 | 
						|||
| 
								 | 
							
									u8 *data=SysFile_GetFileByName(SysFile_GetSysFile()->alarmRing,&size);
							 | 
						|||
| 
								 | 
							
									WIN_WorkFunStruct *work;
							 | 
						|||
| 
								 | 
							
									int work_ret=0;
							 | 
						|||
| 
								 | 
							
									DataInfo_Struct mp3Data={0};
							 | 
						|||
| 
								 | 
							
									if (data)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										//创建工作线程
							 | 
						|||
| 
								 | 
							
										mp3Data.data=data;mp3Data.dataSize=size;
							 | 
						|||
| 
								 | 
							
										work=WIN_CreatThreadPro ((int (*)(void *))g_alarmRingWork,&mp3Data,&work_ret,17);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									MSGBOX_TipsTime ((WIN_WindowStruct *)win,"闹钟时间到",txt_buff,"确定",5*60*1000);
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									//关闭闹铃
							 | 
						|||
| 
								 | 
							
									if (data)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										if (WIN_GetExWorkFunStat(work))
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											WIN_ExWorkFunClear(work);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										else
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											mp3_stop();
							 | 
						|||
| 
								 | 
							
											while (1)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												if (WIN_GetExWorkFunStat(work)) break;
							 | 
						|||
| 
								 | 
							
												WIN_Delay_ms(100);
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											WIN_ExWorkFunClear(work);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										myfree(data);
							 | 
						|||
| 
								 | 
							
									}	
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									myfree(txt_buff);
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//接受到一个文件
							 | 
						|||
| 
								 | 
							
								void HOME_RecvFile (WIN_HomeStruct *home,SysFile_RecvedStruct *r)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									WIN_WindowStruct *win=(WIN_WindowStruct *)home;
							 | 
						|||
| 
								 | 
							
									if (r->recved)
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										char *txt=mymalloc (256);
							 | 
						|||
| 
								 | 
							
										sprintf (txt,"文件名:%s\n文件大小:%d Byte",r->name,r->dataLen);
							 | 
						|||
| 
								 | 
							
										if (MSGBOX_Inquiry ((WIN_WindowStruct *)win,"是否保存?",txt,"是","否")==0)
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											int index=MSGBOX_Select ((WIN_WindowStruct *)win,"文件保存位置",(char **)g_fileSaveItem,
							 | 
						|||
| 
								 | 
							
												2,"确定","取消");
							 | 
						|||
| 
								 | 
							
											if (index==0)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												if (WORKING_DoWork((WIN_WindowStruct *)win,"正在保存到系统。。。",savefile_to_sys,r)==0)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													MSGBOX_TipsTime ((WIN_WindowStruct *)win,"提示","文件已保存","确定",5000);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
												else	MSGBOX_TipsTime ((WIN_WindowStruct *)win,"提示","文件保存失败","确定",5000);
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (index==1)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												if (WORKING_DoWork((WIN_WindowStruct *)win,"正在保存到SD卡。。。",savefile_to_sd,r)==1)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													MSGBOX_TipsTime ((WIN_WindowStruct *)win,"提示","文件已保存","确定",5000);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
												else	MSGBOX_TipsTime ((WIN_WindowStruct *)win,"提示","文件保存失败","确定",5000);
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										myfree(txt);
							 | 
						|||
| 
								 | 
							
										myfree(r->data);
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									else
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										MSGBOX_Inquiry ((WIN_WindowStruct *)win,"接收失败!",r->name,"确定","返回");
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								//默认消息处理函数
							 | 
						|||
| 
								 | 
							
								void HOME_DefaultMsgLoop (WIN_HomeStruct *home,WIN_MsgStruct *msg)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
									HOME_DataStruct *d=0;
							 | 
						|||
| 
								 | 
							
									WIN_KeyStruct *k=0;
							 | 
						|||
| 
								 | 
							
									WIN_MoveStruct *m;
							 | 
						|||
| 
								 | 
							
									switch (msg->msg)
							 | 
						|||
| 
								 | 
							
									{	
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_PAINT:
							 | 
						|||
| 
								 | 
							
											HOME_DefaultPaint(home);
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_INIT:
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											int y_size=((WIN_WindowStruct *)home)->y_size;
							 | 
						|||
| 
								 | 
							
											int x_size=((WIN_WindowStruct *)home)->x_size;
							 | 
						|||
| 
								 | 
							
											home->key_menu=WIN_CreatButton(((WIN_WindowStruct *)home),0,0,y_size-30,65,30);
							 | 
						|||
| 
								 | 
							
											BUTTON_SetKeyString(home->key_menu,"菜单");
							 | 
						|||
| 
								 | 
							
											home->key_tool=WIN_CreatButton(((WIN_WindowStruct *)home),0,x_size-65,y_size-30,65,30);
							 | 
						|||
| 
								 | 
							
											BUTTON_SetKeyString(home->key_tool,"工具");
							 | 
						|||
| 
								 | 
							
								            LOCK_EnterLock("0:/PIC/3.pic");
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
								        case WIN_MSG_RUN:
							 | 
						|||
| 
								 | 
							
								            WIN_RunMsgFunction(msg);
							 | 
						|||
| 
								 | 
							
								        break;
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_TIMER:
							 | 
						|||
| 
								 | 
							
										if (msg->data.v==home->timerId)
							 | 
						|||
| 
								 | 
							
										{
							 | 
						|||
| 
								 | 
							
											RTC_TimeTypeDef rtc_time={0};
							 | 
						|||
| 
								 | 
							
											RTC_DateTypeDef rtc_date={0};
							 | 
						|||
| 
								 | 
							
											RTC_GetTime (RTC_Format_BIN,&rtc_time);
							 | 
						|||
| 
								 | 
							
											RTC_GetDate (RTC_Format_BIN,&rtc_date);
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if (home->sec!=rtc_time.RTC_Seconds)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												home->sec=rtc_time.RTC_Seconds;
							 | 
						|||
| 
								 | 
							
												if (home->hour!=rtc_time.RTC_Hours)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													home->hour=rtc_time.RTC_Hours;
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
												sprintf (home-> date,"%04d-%02d-%02d %s",rtc_date.RTC_Year+2000,rtc_date.RTC_Month,rtc_date.RTC_Date,g_week[rtc_date.RTC_WeekDay-1]);
							 | 
						|||
| 
								 | 
							
												sprintf (home->time,"%02d:%02d:%02d",rtc_time.RTC_Hours,rtc_time.RTC_Minutes,rtc_time.RTC_Seconds);
							 | 
						|||
| 
								 | 
							
												WIN_SetInvalidWhenTop ((WIN_WindowStruct *)home);
							 | 
						|||
| 
								 | 
							
												
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											//if (WIN_FindTopWin(WIN_GetBaseWindow())==(WIN_WindowStruct *)home)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												//查找是否有外部数据
							 | 
						|||
| 
								 | 
							
												u32 data_size=0;
							 | 
						|||
| 
								 | 
							
												void *data=WIN_GetExtData (&data_size);
							 | 
						|||
| 
								 | 
							
												if (data)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													SysFile_RecvedStruct *r=data;
							 | 
						|||
| 
								 | 
							
													if (r->structType==SYSFILE_TYPE_RECVFILE)
							 | 
						|||
| 
								 | 
							
													{
							 | 
						|||
| 
								 | 
							
														//接收到一个文件
							 | 
						|||
| 
								 | 
							
														HOME_RecvFile (home,r);
							 | 
						|||
| 
								 | 
							
													}
							 | 
						|||
| 
								 | 
							
													else if (r->structType==SYSFILE_TYPE_ALARM)
							 | 
						|||
| 
								 | 
							
													{
							 | 
						|||
| 
								 | 
							
														//闹钟
							 | 
						|||
| 
								 | 
							
														HOME_AlarmRun(home);
							 | 
						|||
| 
								 | 
							
													}
							 | 
						|||
| 
								 | 
							
													myfree (data);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_EXTMSG:
							 | 
						|||
| 
								 | 
							
											d=msg->data.p;
							 | 
						|||
| 
								 | 
							
											if (HOME_Updata (home,d)==1)
							 | 
						|||
| 
								 | 
							
											{
							 | 
						|||
| 
								 | 
							
												//有子窗口的时候不需要刷新
							 | 
						|||
| 
								 | 
							
												if (((WIN_WindowStruct *)home)->chidWinNum==0)
							 | 
						|||
| 
								 | 
							
												{
							 | 
						|||
| 
								 | 
							
													WIN_SetInvalid ((WIN_WindowStruct *)home);
							 | 
						|||
| 
								 | 
							
												}
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_CHID:
							 | 
						|||
| 
								 | 
							
											HOME_TouchBord (home,msg);
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_KEY:
							 | 
						|||
| 
								 | 
							
											k=msg->data.p;
							 | 
						|||
| 
								 | 
							
											HOME_KeyBord (home,k);
							 | 
						|||
| 
								 | 
							
										break;//case WIN_MSG_KEY:
							 | 
						|||
| 
								 | 
							
										case WIN_MSG_MOVE:
							 | 
						|||
| 
								 | 
							
											m=msg->data.p;
							 | 
						|||
| 
								 | 
							
											HOME_TouchMove(home,m);
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
										default:
							 | 
						|||
| 
								 | 
							
											WIN_DefaultMsgLoop((WIN_WindowStruct *)home,msg);
							 | 
						|||
| 
								 | 
							
										break;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 |