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

📄 winclockevent.c

📁 AMLOGIC DPF source code
💻 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 + -