📄 winclockevent.c
字号:
/*******************************************************************
*
* Copyright C 2007 by Amlogic, Inc. All Rights Reserved.
*
* Description:
*
* Author: Amlogic Software
* Created:
*
*******************************************************************/
#include "../menu.h"
#include "user.h"
#include "../rtc.h"
#include <os/extend/avtimer.h>
#include "WinClockEvent.h"
#include "WinPicInfoBarEvent.h"
AVTimer_t Clock_Timer = 0;
_TIME_DATA_ Time_Para;
_TIME_DATA_ alarmtime_data;
_ALARM_DATA_ Alarm_Para={8,0,0,0,0};
_ALARM_DATA_ Alarm_Ring_Para={8,0,0,0,0};
static INT8U settimeclock=0;//0 :none select 1:timeclockselect 2:alarmclockselect
static INT32U hint_infobar_time=0;
INT8U alarmonoffflg=0;
extern INT8U Music_Pic_mix_flag;
extern INT8U onshowbar;
#ifdef ENABLE_CLOCK
extern AVTimer_t AlarmClockTimer;
const unsigned char *NumIcon[10] = {
ICON_0_CALENDAR,
ICON_1_CALENDAR,
ICON_2_CALENDAR,
ICON_3_CALENDAR,
ICON_4_CALENDAR,
ICON_5_CALENDAR,
ICON_6_CALENDAR,
ICON_7_CALENDAR,
ICON_8_CALENDAR,
ICON_9_CALENDAR,
};
const unsigned char *NumIconSelect[10] = {
ICON_0_CALENDAR_SELECT,
ICON_1_CALENDAR_SELECT,
ICON_2_CALENDAR_SELECT,
ICON_3_CALENDAR_SELECT,
ICON_4_CALENDAR_SELECT,
ICON_5_CALENDAR_SELECT,
ICON_6_CALENDAR_SELECT,
ICON_7_CALENDAR_SELECT,
ICON_8_CALENDAR_SELECT,
ICON_9_CALENDAR_SELECT,
};
const unsigned char *AlarmNumIcon[10] = {
ICON_0_ALARM,
ICON_1_ALARM,
ICON_2_ALARM,
ICON_3_ALARM,
ICON_4_ALARM,
ICON_5_ALARM,
ICON_6_ALARM,
ICON_7_ALARM,
ICON_8_ALARM,
ICON_9_ALARM,
};
const unsigned char *AlarmNumIconSelect[10] = {
ICON_0_ALARM_SELECT,
ICON_1_ALARM_SELECT,
ICON_2_ALARM_SELECT,
ICON_3_ALARM_SELECT,
ICON_4_ALARM_SELECT,
ICON_5_ALARM_SELECT,
ICON_6_ALARM_SELECT,
ICON_7_ALARM_SELECT,
ICON_8_ALARM_SELECT,
ICON_9_ALARM_SELECT,
};
static void ClockChange24hTo12h(void)
{
_TIME_DATA_ time_data;
RdRTCClk(&time_data);
if(time_data.hour>11){
if(time_data.hour==12)
Time_Para.hour = 12;
else
Time_Para.hour = time_data.hour - 12 ;
Time_Para.ampm = 1;
}else{
if(time_data.hour==0)
Time_Para.hour = 12;
Time_Para.ampm = 0;
}
}
static void AlarmChange24hTo12h(void)
{
if(Alarm_Para.hour>11){
if(Alarm_Para.hour==12)
alarmtime_data.hour = 12;
else
alarmtime_data.hour = Alarm_Para.hour - 12 ;
Alarm_Para.ampm = 1;
}else{
if(Alarm_Para.hour==0)
alarmtime_data.hour = 12;
else
alarmtime_data.hour = Alarm_Para.hour;
Alarm_Para.ampm = 0;
}
alarmtime_data.min = Alarm_Para.min;
}
//RefreshClock_Timer every 1/3 sec called in 1/3 Timer
TIMER_CB_t RefreshClock_Timer(void)
{
_TIME_DATA_ time_data;
unsigned char i;
static unsigned char FlickCount = 0;
static unsigned char PreBckAlarmRunning = 0;
FlickCount %= 2;
if (!(RdRTCClk(&time_data)))
return;
PHWND hwnd = AWFindWinCtrlByName("WinTimeClock");
if (!hwnd)
return;
ClockChange24hTo12h();
if(Time_Para.ampm==1){
if(settimeclock==1)
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_PM_SELECT;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_PM;
}else{
if(settimeclock==1)
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_AM_SELECT;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_AM;
}
if(settimeclock==1){
hwnd->draw_info[1].draw_data = (INT32U) NumIconSelect[Time_Para.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) NumIconSelect[Time_Para.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) NumIconSelect[Time_Para.min/10];
hwnd->draw_info[5].draw_data = (INT32U) NumIconSelect[Time_Para.min%10];
}else{
hwnd->draw_info[1].draw_data = (INT32U) NumIcon[Time_Para.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) NumIcon[Time_Para.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) NumIcon[Time_Para.min/10];
hwnd->draw_info[5].draw_data = (INT32U) NumIcon[Time_Para.min%10];
}
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 0);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 1);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 2);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 4);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 5);
AWPostMessage(hwnd, WM_PAINT_FINISH, 0);
RdRTCClk(&time_data);
Time_Para.sec = time_data.sec;
Time_Para.min = time_data.min;
Time_Para.hour = time_data.hour;
return 0;
}
static void UpdateClockTime(void)
{
_TIME_DATA_ time_data;
PHWND hwnd = AWFindWinCtrlByName("WinTimeClock");
WrRTCClk(Time_Para);
ClockChange24hTo12h();
if(settimeclock==1){
if(Time_Para.ampm)
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_PM_SELECT;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_AM_SELECT;
hwnd->draw_info[1].draw_data = (INT32U) NumIconSelect[Time_Para.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) NumIconSelect[Time_Para.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) NumIconSelect[Time_Para.min/10];
hwnd->draw_info[5].draw_data = (INT32U) NumIconSelect[Time_Para.min%10];
hwnd->draw_info[3].draw_data = (INT32U)ICON_P_SELECT;
}else{
if(Time_Para.ampm)
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_PM;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_CALENDAR_AM;
hwnd->draw_info[1].draw_data = (INT32U) NumIcon[Time_Para.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) NumIcon[Time_Para.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) NumIcon[Time_Para.min/10];
hwnd->draw_info[5].draw_data = (INT32U) NumIcon[Time_Para.min%10];
hwnd->draw_info[3].draw_data = (INT32U)ICON_P;
}
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 0);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 1);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 2);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 3);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 4);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 5);
AWPostMessage(hwnd, WM_PAINT_FINISH, 0);
RdRTCClk(&time_data);
Time_Para.sec = time_data.sec;
Time_Para.min = time_data.min;
Time_Para.hour = time_data.hour;
}
static void UpdateAlarmTime(void)
{
PHWND hwnd = AWFindWinCtrlByName("WinAlarmClock");
AlarmChange24hTo12h();
if(settimeclock==2){
if(Alarm_Para.ampm)
hwnd->draw_info[0].draw_data = (INT32U) ICON_ALARM_PM_SELECT;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_ALARM_AM_SELECT;
hwnd->draw_info[1].draw_data = (INT32U) AlarmNumIconSelect[alarmtime_data.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) AlarmNumIconSelect[alarmtime_data.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) AlarmNumIconSelect[alarmtime_data.min/10];
hwnd->draw_info[5].draw_data = (INT32U) AlarmNumIconSelect[alarmtime_data.min%10];
hwnd->draw_info[3].draw_data = (INT32U) ICON_ALARM_P_SELECT;
}else{
if(Alarm_Para.ampm)
hwnd->draw_info[0].draw_data = (INT32U) ICON_ALARM_PM;
else
hwnd->draw_info[0].draw_data = (INT32U) ICON_ALARM_AM;
hwnd->draw_info[1].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.min/10];
hwnd->draw_info[5].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.min%10];
hwnd->draw_info[3].draw_data = (INT32U) ICON_ALARM_P;
}
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 0);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 1);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 2);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 3);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 4);
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 5);
AWPostMessage(hwnd, WM_PAINT_FINISH, 0);
Alarm_Ring_Para.hour=Alarm_Para.hour;
Alarm_Ring_Para.min=Alarm_Para.min;
Alarm_Ring_Para.ring=Alarm_Para.ring;
Alarm_Ring_Para.alarm_mode=Alarm_Para.alarm_mode;
Alarm_Ring_Para.ampm=Alarm_Para.ampm;
}
static void SetAlarmOnOff(void)
{
PHWND hwnd = AWFindWinCtrlByName("WinAlarm");
alarmonoffflg = alarmonoffflg ^ 1;
if(alarmonoffflg==1){
hwnd->draw_info[0].draw_data = (INT32U) ALARM_ON_ICON;
AVTimerEnable(AlarmClockTimer);
}else{
hwnd->draw_info[0].draw_data = (INT32U) ALARM_OFF_ICON;
AVTimerDisable(AlarmClockTimer);
}
AWPostMessage(hwnd, WM_PAINT_DRAW_INFO, 0);
AWPostMessage(hwnd, WM_PAINT_FINISH, 0);
}
INT32S WinClockOnShow(PHWND hwnd, INT32S lpParam)
{
if (!Clock_Timer)
{
Clock_Timer = AVTimerCreateFlag(OS_TICKS_PER_SEC>>1, (TIMER_CB_t)RefreshClock_Timer, NULL, AVTIMER_FLAG_PERIODIC);
}
else
{
AVTimerEnable(Clock_Timer);
}
PHWND Hint_hwnd = AWFindWinCtrlByName("WinClockKeyHint");
Hint_hwnd->style = WS_CHILDWINDOW ;
hint_infobar_time=0;
UpdateClockTime();
return 0;
}
INT32S WinClockOnKeyPress(PHWND hwnd, INT32S lpParam)
{
INT32U *key_value = (INT32U *)lpParam;
PHWND hint_hwnd = AWFindWinCtrlByName("WinClockKeyHint");
if(*key_value!=UOP_NOP){
if(!AWIsVisibleWinControl(hint_hwnd))
AWShowWinControl(hint_hwnd,1);
hint_infobar_time=0;
}
switch (*key_value){
case UOP_UP:
if(Music_Pic_mix_flag==0)
break;
if((Music_Pic_mix_flag & 1) == 1)
onshowbar=0;
else
onshowbar=1;
GUIHideWindow("WinClock");
*key_value = UOP_NOP;
break;
case UOP_DOWN://alarm on/off
SetAlarmOnOff();
break;
case UOP_LEFT://set alarm
if(!AVTimerIsEnabled(Clock_Timer))
AVTimerEnable(Clock_Timer);
if(settimeclock==2){
settimeclock=0;
UpdateAlarmTime();
}else{
settimeclock=2;
UpdateAlarmTime();
UpdateClockTime();
}
break;
case UOP_RIGHT://minute +
switch(settimeclock){
case 1:
if(Time_Para.min==59)
Time_Para.min=0;
else
Time_Para.min++;
UpdateClockTime();
break;
case 2:
if(Alarm_Para.min==59)
Alarm_Para.min=0;
else
Alarm_Para.min++;
UpdateAlarmTime();
break;
default:
break;
}
break;
case UOP_END_PAUSE://hour +
switch(settimeclock){
case 1:
if(Time_Para.hour==23)
Time_Para.hour=0;
else
Time_Para.hour++;
UpdateClockTime();
break;
case 2:
if(Alarm_Para.hour==23)
Alarm_Para.hour=0;
else
Alarm_Para.hour++;
UpdateAlarmTime();
break;
default:
break;
}
break;
case UOP_ANGLE://set clock
if(settimeclock==1){
AVTimerEnable(Clock_Timer);
settimeclock=0;
UpdateClockTime();
}else{
// AVTimerDisable(Clock_Timer);
settimeclock=1;
UpdateClockTime();
UpdateAlarmTime();
}
default:
break;
}
return 0;
}
INT32S WinAlarmOnShow(PHWND hwnd, INT32S lpParam)
{
if(alarmonoffflg==1){
hwnd->draw_info[0].draw_data = (INT32U) ALARM_ON_ICON;
AVTimerEnable(AlarmClockTimer);
}else{
hwnd->draw_info[0].draw_data = (INT32U) ALARM_OFF_ICON;
AVTimerDisable(AlarmClockTimer);
}
UpdateAlarmTime();
return 0;
}
INT32S WinAlarmClockOnShow(PHWND hwnd, INT32S lpParam)
{
AlarmChange24hTo12h();
hwnd->draw_info[1].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.min/10];
hwnd->draw_info[5].draw_data = (INT32U) AlarmNumIcon[alarmtime_data.min%10];
return 0;
}
INT32S WinTimeClockOnShow(PHWND hwnd, INT32S lpParam)
{
_TIME_DATA_ time_data;
ClockChange24hTo12h();
hwnd->draw_info[1].draw_data = (INT32U) NumIcon[Time_Para.hour/10];
hwnd->draw_info[2].draw_data = (INT32U) NumIcon[Time_Para.hour%10];
hwnd->draw_info[4].draw_data = (INT32U) NumIcon[Time_Para.min/10];
hwnd->draw_info[5].draw_data = (INT32U) NumIcon[Time_Para.min%10];
RdRTCClk(&time_data);
Time_Para.sec = time_data.sec;
Time_Para.min = time_data.min;
Time_Para.hour = time_data.hour;
return 0;
}
INT32S WinClockKeyHintOnOtherEvent(PHWND hwnd, INT32U msg_type, INT32S lpParam)
{
switch(msg_type){
case WM_SECOND_TIMEOUT:
hint_infobar_time++;
PHWND hwnd = AWFindWinCtrlByName("WinClockKeyHint");
if(hint_infobar_time > 5) {
AWHideWinControl(hwnd);
hint_infobar_time=0;
}
break;
}
return 0 ;
}
void Init_Clock_Parameter(void)
{
_TIME_DATA_ timevalue = {2007,6,28,12,59,0,4,0,0,0};
memcpy(&Time_Para, &timevalue, sizeof(timevalue));
WrRTCClk(Time_Para);
}
TIMER_CB_t AlarmTimerFunc(void)
{
if (RdRTC_AlarmInt(Alarm_Ring_Para)){
if(CheckMediaPlaybackApp()){
CloseMediaPlaybackApp(0xff);
if(AWGetTopWindow(gpFocusWin) == AWFindWinCtrlByName("WinPicInfoBar")){
if(onshowbar)
Setcurwindow(2);
else
Setcurwindow(1);
}else
if(AWGetTopWindow(gpFocusWin) == AWFindWinCtrlByName("WinClock")){
Setcurwindow(3);
}else{
Setcurwindow(0);
}
}
AWGUISendNMMessage(MEDIA_TONE, NM_PLAY_GENERAL, (INT32U)Alarm_Para.ring);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -