⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_clockdrm.c

📁 可实炬力方案2004—2042无误差农历显示
💻 C
字号:
/*
*******************************************************************************
*                ACTOS AP
*        system setting ap of sdk 3.0, ui part,
*    this function is too big to fit in a bank with others
*
*        (c) Copyright, Actions Co,Ld.
*             All Right Reserved
*
*  $Id: ui_clockdrm.c,v 1.1.1.1 2006/04/21 08:22:43 selina Exp $
*******************************************************************************
*/
#include "actos.h"
#include "enhanced.h"
#include "ap_common.h"
#include "ap_setting.h"

#define POSITION_CLOCK_BGDRM    30
extern comval_t g_comval;
extern const region_t clock_region;
extern unsigned long systemtime;
extern unsigned long gwtime;
extern uchar  fday(WORD year,uchar month);

#define	P_DRM_CLOCK_X	0
#define	P_DRM_CLOCK_Y	0
#define	P_DRM_Ck_YEAR		P_DRM_CLOCK_X+15,P_DRM_CLOCK_Y+84
#define	P_DRM_Ck_MOUTH	P_DRM_CLOCK_X+60,P_DRM_CLOCK_Y+84
#define	P_DRM_Ck_DATE		P_DRM_CLOCK_X+90,P_DRM_CLOCK_Y+84
#define	P_DRM_Ck_HOUR		P_DRM_CLOCK_X+15,P_DRM_CLOCK_Y+44
#define	P_DRM_Ck_MIN		P_DRM_CLOCK_X+53,P_DRM_CLOCK_Y+44
#define	P_DRM_Ck_SEC		P_DRM_CLOCK_X+90,P_DRM_CLOCK_Y+44
    
char CpTime(time_t *time1,time_t *time2)
{
	if( (time1->hour) > (time2->hour) )
	{
		return 1;
	}
	if( (time1->hour) < (time2->hour) )
	{
		return 0xff;
	}
	
	if( (time1->minute) > (time2->minute) )
	{
		return 1;
	}
	
	if( (time1->minute) < (time2->minute) )
	{
		return 0xff;
	}
	
	if( (time1->second) > (time2->second) )
	{
		return 1;
	}
	
	if( (time1->second) < (time2->second) )
	{
		return 0xff;
	}
	
	return 0;
}

char CpDate(date_t *date1,date_t *date2)
{
	if( (date1->year) > (date2->year) )
	{
		return 1;
	}
	if( (date1->year) < (date2->year) )
	{
		return 0xff;
	}
	
	if( (date1->month) > (date2->month) )
	{
		return 1;
	}
	
	if( (date1->month) < (date2->month) )
	{
		return 0xff;
	}
	
	if( (date1->day) > (date2->day) )
	{
		return 1;
	}
	
	if( (date1->day) < (date2->day) )
	{
		return 0xff;
	}
	
	return 0;
}

int MessageBox( WORD strMul, int string_id, char * key )
{
	int delflag;
	char key1,need_draw=TRUE;
	char timeout = 0;
	
	delflag=0;
	while(1)
	{
		output8(0x4e,input8(0x4e)|0x08);
		if (need_draw)
		{
			ResShowPic(PRO_BK,(128-96)/2,(128-64)/2);
			SetAsciiFont(FONT_TYPE_LARGE);
			SetPenColor(Color_BLACK_def);
			//SetTextOutMode(0x0f);	//Tommy 070519
			SetBackgdColor(Color_PRO_BK_def);
			ResShowMultiString(strMul, string_id, 255, 52+32,-1);
			//SetTextOutMode(0x00);
			if (delflag)
			{
				ResShowPic(TEL_YES,16+16,16+32);
				ResShowPic(TEL_NOA,62+16,16+32);
			}
			else
			{
				ResShowPic(TEL_YA,10+16,16+32);
				ResShowPic(TEL_NO,62+16,16+32);
			}
			need_draw=FALSE;
		}
		key1 = ap_get_message();                          //获取消息
		switch( key1 )
		{
		case AP_KEY_NEXT:                            //YES和NO之间切换
		case AP_KEY_PREV:
		case AP_KEY_NEXT | AP_KEY_HOLD:
		case AP_KEY_PREV | AP_KEY_HOLD:
			if(delflag==0)
				delflag=1;
			else
				delflag=0;
			need_draw=TRUE;
			break;
			
		case AP_KEY_MODE | AP_KEY_UP:
			return delflag;
			//break;
			
		case AP_MSG_WAIT_TIMEOUT:                        //8秒退出
			timeout++;
			if ( timeout > 1 )
				return 0;
			break;
			
		case AP_KEY_PLAY | AP_KEY_UP:
			return 0;
			break;
			
		default:
			key1 = ap_handle_hotkey(key1);
			if(key1 == RESULT_REDRAW)
			{
				need_draw=TRUE;
			}
			else if( key1 != 0 )
			{
				*key = key1;        //热键回传
				return 0;
			}
			break;
		}    //end switch(key)
	}   //end while(1)
	
	return 0;
}
/*
********************************************************************************
* Description : 录音时间设定界面
*
* Arguments   :
*
* Returns     :
*
* Notes       :
*
********************************************************************************
*/
void DRM_clock_sub(BOOL onoff,char *buf,char x,char y)
{
	if (onoff)
	{
		SetPenColor(Color_RED_def);
		SetBackgdColor(0x0000945f);
	}
	else
	{
		SetPenColor(Color_BLACK_def);
		//SetBackgdColor(Color_WHITE_def);
		SetBackgdColor(0x0000975c);
		
	}
	SetTextPos(x,y);
	PutS(buf, -1);
}
int show_clockdrm(void)
{
	char    bIsSet=0;
	char    bTimeAdd=0xff;
	char    msgTimeout=0;
	char    bDateTSmall;
	date_t  date={2006, 6, 6},date1;
	time_t  time={12, 00, 00},time1;
	char    buf[11];    //date &  time
	char    key;
	char    set_what=0;    //0, 非设定状态, 1,year, 2,month...
	BOOL    show_what=TRUE;    //true, 显示, false, 不显示
	bool    result;
	BOOL    need_draw=TRUE;
	BOOL    need_draw_backgroud=TRUE;
	BOOL    set_ok=FALSE;    //设置完成
	BOOL    adjusting=FALSE;        //正在设置,不要闪烁
	kval_t  kval;
	
	//read date & time
	result = TM_GetGWDate(&date, 0);
	//DUMP("get date ok!", 0);
	//    ASSERT(result);
	result = TM_GetGWTime(&time);
	//DUMP("get time ok!", 0);
	//    ASSERT(result);
	result = TM_GetGWDate(&date1, 0);
	//DUMP("get date ok!", 0);
	//    ASSERT(result);
	result = TM_GetGWTime(&time1);  //修改前一刻的时间备份,用于修改后比较
	
	bIsSet=0;
	bTimeAdd=0xff;
	msgTimeout=0;
	while(1)
	{
		output8(0x4e,input8(0x4e)|0x08);
		//显示背景
		if(need_draw_backgroud)
		{
		/*
			ResShowPic(FMHEAD,0,107);
			ResShowPic(CLKBCK,0,0);
			SetPenColor(Color_BULE1_def);
			SetTextOutMode(0x0f);
			//  SetBackgdColor(Color_BULE1_def);
			ResShowMultiString(DRMTIMEM,g_comval.langid,4,90);
			SetTextOutMode(NOCLARITY);
			SetPenColor(Color_WHITE_def);
			SetBackgdColor(Color_BLACK_def);
			output8(0x4e,input8(0x4e)|0x08);
			need_draw_backgroud = FALSE;
		*/
			//SetBackgdColor(Color_BLACK_def);
			//ClearScreen(NULL);
			SetAsciiFont(FONT_TYPE_LARGE);
			ResShowPic(CLOCK_BK,P_DRM_CLOCK_X,P_DRM_CLOCK_Y);
			SetBackgdColor(Color_CLOCK_BK_def);
			//SetTextOutMode(0x0f);	//Tommy 070519
			SetPenColor(Color_BLACK_def);
			ResShowMultiString(DRMTIMEM,g_comval.langid,-1,P_DRM_CLOCK_Y+(160-3-18),-1);
			//SetTextOutMode(0x00);
			CLEAR_WATCHDOG();
			need_draw_backgroud = FALSE;
		}
		
		//显示时钟
		if(need_draw)
		{
			if(bTimeAdd==0xff)
			{
				result = TM_GetGWDate(&date, 0);
				
				result = TM_GetGWTime(&time);
				
				result = TM_GetGWDate(&date1, 0);   //修改前一刻的时间备份,用于修改后比较
				
				result = TM_GetGWTime(&time1);      //修改前一刻的时间备份,用于修改后比较
				
				//系统时间没作2098限制,ap层限制
				if ( date.year >= 2200 )    //2000~2098
				{
					date.year = 1900;
					TM_SetGWDate(&date, 0);
				}
			}
			
			SetAsciiFont(FONT_TYPE_LARGE);			
			itoa_4(date.year, buf);
			if(set_what == 1)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_YEAR);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_YEAR);
				
			itoa_2(date.month, buf);
			if(set_what == 2)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_MOUTH);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_MOUTH);
				
			itoa_2(date.day, buf);
			if(set_what == 3)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_DATE);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_DATE);
				
			itoa_2(time.hour, buf);
			if(set_what == 4)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_HOUR);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_HOUR);
				
				
			itoa_2(time.minute, buf);
			if(set_what == 5)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_MIN);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_MIN);
				
				
			itoa_2(time.second, buf);
			if(set_what == 6)
				DRM_clock_sub(TRUE,buf, P_DRM_Ck_SEC);
			else
				DRM_clock_sub(FALSE,buf,P_DRM_Ck_SEC);


			
			output8(0x4e,input8(0x4e)|0x08);
			need_draw = FALSE;
			
		}
		
		
		//handle msg
		key = ap_get_message();
		switch( key )
		{
		case AP_MSG_CHARGING:
		case AP_MSG_RTC:
			if(adjusting)
				show_what = TRUE;
			else
				show_what = !show_what;
			//show_what = !show_what;
			
			need_draw = TRUE;
			
			break;
			
		case AP_MSG_WAIT_TIMEOUT:        //子菜单界面在8秒后返回系统功能菜单,
			bIsSet=0;
		case AP_KEY_MODE | AP_KEY_UP:
			key = 0;
			set_ok = TRUE;
			
			break;
		default:
			key = ap_handle_hotkey(key);
			if(key == RESULT_REDRAW)
			{
				need_draw_backgroud = TRUE;
				need_draw = TRUE;
			}
			else if( key != 0 )
			{
				set_ok = TRUE;
			}
		} //switch(key)
		if(set_ok)
			break;
	}//while(1)
	if( bIsSet == 0 )
	{
		return key;
	}
	else if ( key != 0 )    //不是按mode退出的都不保存设置,如USB线插上等
	{
		return key;
	}
	
	SetAsciiFont(FONT_TYPE_DEFAULT);
	
	if(date.day > fday(date.year,date.month))
		date.day = fday(date.year,date.month);
	
	bDateTSmall=CpDate(&date,&date1);
	if(bDateTSmall==0xff)
	{
		bDateTSmall=1;
	}
	else if( bDateTSmall==1)
	{
		bDateTSmall=0;
	}
	else
	{
		bDateTSmall=CpTime(&time,&time1);
		if ( bDateTSmall==0xff)
		{
			bDateTSmall=1;
		}
		else if (bDateTSmall==0)
		{
			bDateTSmall=5;
		}
		else
		{
			bDateTSmall=0;
		}
	}
	
	if(bDateTSmall==5)
	{
		return key;
	}
	
	
	VMRead(&kval, VM_KERNEL, sizeof(kval_t));
	
	if( (kval.rtcresetflag == 0) && (bDateTSmall==0) )
	{
		ClearScreen(NULL);
		ResShowMultiString(SETTIME1,g_comval.langid,255,0,-1);
		ResShowMultiString(SETTIME2,g_comval.langid,255,16,-1);
		output8(0x4e,input8(0x4e)|0x08);
		do
		{
			output8(0x4e,input8(0x4e)|0x08);
			if( (key = ap_get_message()) == AP_MSG_RTC )
			{
				msgTimeout++;
			}
			
			key = ap_handle_hotkey(key);
			if(key == RESULT_REDRAW)
			{
				ClearScreen(NULL);
				ResShowMultiString(SETTIME1,g_comval.langid,255,0,-1);
				ResShowMultiString(SETTIME2,g_comval.langid,255,16,-1);
			}
			else if(key != 0 )
			{
				return key;
			}
		}
		while(msgTimeout<6);
		if( MessageBox(SETDRMT, g_comval.langid, &key) == 0 )
			return key;
	}
	else if(bDateTSmall==1)
	{
		msgTimeout=0;
		ClearScreen(NULL);
		ResShowMultiString(TIMESML1,g_comval.langid,255,0,-1);
		ResShowMultiString(TIMESML2,g_comval.langid,255,16,-1);
		output8(0x4e,input8(0x4e)|0x08);
		do
		{
			output8(0x4e,input8(0x4e)|0x08);
			if( (key = ap_get_message()) == AP_MSG_RTC )
			{
				msgTimeout++;
			}
			
			key = ap_handle_hotkey(key);
			if(key == RESULT_REDRAW)
			{
				ClearScreen(NULL);
				ResShowMultiString(TIMESML1,g_comval.langid,255,0,-1);
				ResShowMultiString(TIMESML2,g_comval.langid,255,16,-1);
			}
			else if( key != 0 )
			{
				return key;
			}
		}
		while(msgTimeout<6);
		
		msgTimeout=0;
		ClearScreen(NULL);
		ResShowMultiString(TIMESML3,g_comval.langid,255,0,-1);
		ResShowMultiString(TIMESML4,g_comval.langid,255,16,-1);
		output8(0x4e,input8(0x4e)|0x08);
		do
		{
			output8(0x4e,input8(0x4e)|0x08);
			if( (key = ap_get_message()) == AP_MSG_RTC )
			{
				msgTimeout++;
			}
			
			key = ap_handle_hotkey(key);
			if(key == RESULT_REDRAW)
			{
				ClearScreen(NULL);
				ResShowMultiString(TIMESML3,g_comval.langid,255,0,-1);
				ResShowMultiString(TIMESML4,g_comval.langid,255,16,-1);
			}
			else if( key != 0 )
			{
				return key;
			}
		}
		while(msgTimeout<6);
		
		if( MessageBox(SETDRMT, g_comval.langid, &key)==0 )
			return key;
	}
	
	result = TM_SetGWDate(&date, 0);
	//DUMP("set date", 0);
	ASSERT(result);
	result = TM_SetGWTime(&time);
	//DUMP("set time", 0);
	ASSERT(result);
	
	//将systemtime 和 gwtime写回到VRAM中,并清掉电标志位
	kval.systemtime = systemtime;   //全局变量
	kval.gwtime = gwtime;           //全局变量
	kval.rtcresetflag=0x0;
	VMWrite(&kval, VM_KERNEL);
	
	return key;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -