📄 ui_clockdrm.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 + -