📄 mmitoolkit_timer.c
字号:
/*******************************************************************************
CONDAT (UK)
********************************************************************************
This software product is the property of Condat (UK) Ltd and may not be
disclosed to any third party without the express permission of the owner.
********************************************************************************
$Project name: Basic MMI
$Project code: BMI (6349)
$Module: timer
$File: Mmitoolkit_timer.c
$Revision: 1.0
$Author: Condat(UK)
$Date: 25/10/00
********************************************************************************
Description
This provides the timer functionality
********************************************************************************
$History: MmiToolkit.c
25/10/00 Original Condat(UK) BMI version.
27/08/02 gdy add
$End
*******************************************************************************/
/******************************************************************************
Include Files
*******************************************************************************/
#define ENTITY_MFW
/* includes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#if defined (NEW_FRAME)
#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"
#else
#include "stddefs.h"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"
#endif
#include "MmiBookShared.h"
#include "MmiEditor.h"
#include "Mfw_edt.h"
#include "MmiDialogs.h"
#include "p_sim.h"
#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_edt.h"
#include "mfw_tim.h"
#include "mfw_phb.h"
#include "ksd.h"
#include "psa.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_lng.h"
#include "mfw_sat.h"
#include "mfw_kbd.h"
#include "mfw_nm.h"
#include "mfw_sms.h"
#include "dspl.h"
#include "MmiMmi.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"
#include "MmiIdle.h"
#include "MmiSoftkeys.h"
#include "MmiIcons.h"
#include "MmiMenu.h"
#include "MmiMain.h"
#include "MmiStart.h"
#include "MmiPins.h"
#include "MmiSettings.h"
#include "GameDisplay.h"
#include "MmiEditor.h"
#include "MmiBookShared.h"
#include "MmiSmsMenu.h"
//#include "MmiStopwatch.h"
#include "Mmieditor.h"
#include "Mmieditor_i.h"
#include "Mmisounds.h"
#include "Mmilists.h"
#include "Mmitoolkit.h"
#include "Mmitimedate.h"
#include "Mmiicons.h"
#include "gdi.h"
#include "Audio.h"
#include "MmiSounds.h"
#include "MmiResources.h"
#include "cus_aci.h"
#include "p_sim.h"
#include "pcm.h"
#include "mmiouterIdle.h"
#include "Mmitoolkit_timer.h"
//wyj 2003.11.12
#include "TdDisplay.h"
//2004.08.02 Added by Cathy for Camera
#ifdef CAMERA_ENABLED
#include "mmicamera.h"
#endif
/******************************************************************************
*******************************************************************************/
typedef struct
{
T_MMI_CONTROL mmi_control;
T_MFW_HND parent_win;
T_MFW_HND win;
T_MFW_HND info_tim;
T_MFW_HND kbd;
char timebuffer[10];
char timer_string[10];
// char string[10];
int index;
BOOL LeftKey;
}timer_data;
typedef enum
{
TIMER_EDT=0,
TIMER_COUNT,
TIMER_END
}timer_event;
BOOL timer_flag = FALSE;
BOOL over_flag = FALSE;
int timer_counter = 0;
int timer_status = TIMER_EDT;
MfwHnd info_timer_Hnd = NULL;
MfwHnd timer_win = NULL;
T_MFW_HND timer_alarm_win = NULL;
T_MFW_HND info_window = NULL;
extern VOS_Idle_Win;
extern T_call call_data;
extern T_MFW_HND alarm_win;
static char timer_string[10];
static int timer_afterCall = 0;
extern MfwHnd timer_Hnd;
static BOOL timer_start = FALSE;
extern const unsigned char TimerBit[];
static T_MFW_HND toolkit_timer_create(MfwHnd parent_window);
static int timer_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
static void timer_DialogCB(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int timer_kbd_cb (MfwEvt e, MfwKbd *kc);
void timerdestroy (T_MFW_HND own_window);
T_MFW_CB timer_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc);
int toolkitTimer(MfwMnu* m, MfwMnuItem* i);
T_MFW_CB timerEnd_tim_cb(T_MFW_EVENT event, T_MFW_TIM *tc);
void timer_dialog_cb(T_MFW_HND win, USHORT event, UBYTE reason);
T_MFW_CB TimerAlarm_tim_cb(MfwEvt e, MfwTim *tc);
void timer_alarm();
void drawSolidRectangle(int x1,int y1,int x2,int y2,int type,int fillcolor,int color);
static int chartoint(char* str);
T_MFW_CB info_timer_tim_cb(MfwEvt e, MfwTim *tc);
/* 2003.10.16 wyj 加入对定时器设置输入框的检查 */
static void checkTimerNumInput(timer_data *data, U8 keynum);
static void checkTimerLeftInput(timer_data *data);
static void checkTimerRightInput(timer_data *data);
/* 定时器 */
extern const TD_Rect TM_input_rect;
extern const TD_Attri TM_input_attr;
extern const TD_Line TM_index_l;
extern const Color TM_index_c;
/* icon */
extern const MfwIcnAttr idl_AttrMask[];
T_MFW_HND tooltimerstart(T_MFW_HND parent_win)
{
T_MFW_HND win = toolkit_timer_create(parent_win);
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
// timer_data * timer_data = (timer_data *)win_data->user;
if (win NEQ NULL)
{
SEND_EVENT (win, timer_status, 0, 0);
}
return win;
}
/* "定时器"菜单项响应函数 */
int toolkitTimer(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND parent_win = mfwParent( mfw_header());
T_MFW_HND win = toolkit_timer_create(parent_win);
if(win NEQ NULL)
{
SEND_EVENT(win, timer_status, 0, 0);
}
}
static T_MFW_HND toolkit_timer_create(MfwHnd parent_window)
{
timer_data * data = (timer_data *)ALLOC_MEMORY (sizeof (timer_data ));
T_MFW_WIN * win;
TRACE_EVENT("timer_create");
if (data EQ NULL)
{
return NULL;
}
// Create window handler
data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)timer_win_cb);
if (data->win EQ NULL)
{
return NULL;
}
// connect the dialog data to the MFW-window
data->mmi_control.dialog = (T_DIALOG_FUNC)timer_DialogCB;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->win)->data;
win->user = (void *)data;
data->parent_win = parent_window;
timer_win = data->win;
return data->win;
}
/* 2003.11.11 WYJ 修改定时器界面显示函数 */
static int timer_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
timer_data *data = (timer_data *)win->user;//tida edt data
int old_color;
game_Line line;
game_Rectangle rectangle;
char str[4];
TD_Line l;
TRACE_EVENT("timer_win_cb");
if (event EQ MfwWinVisible)
{
U8 uMode = 0;
uMode = dspl_Enable(0);
dspl_ClearAll();
if(timer_status==TIMER_EDT) //编辑界面
{
/* background display */
TD_drawBkg(BG_rect, BG_attr);//黄色背景
/* 2004/05/18 yhf modify */
/* title display */
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON(ICON_MENUUP);
/*
dspl_BitBlt( menuup[FlashSettingData.theme].area.px,menuup[FlashSettingData.theme].area.py,
menuup[FlashSettingData.theme].area.sx,menuup[FlashSettingData.theme].area.sy,
menuup[FlashSettingData.theme].nIcons,menuup[FlashSettingData.theme].icons,0);
*/
#if(MAIN_LCD_SIZE==4)
dspl_colorTextOut(16+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtSettime),0x0);
#elif(MAIN_LCD_SIZE==3)
dspl_colorTextOut(28+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtSettime),0x0);
#endif
/*input rect display */
if(!timer_counter)
{
strcpy(data->timebuffer,"00:00:00");
}
TD_drawSolidRectangle(TM_input_rect, TM_input_attr);
#if(MAIN_LCD_SIZE==4)
dspl_TextOut(28+EX, 65, DSPL_TXTATTR_TRANSPARENT, data->timebuffer);
l = TM_index_l;
l.x1 = TM_index_l.x1 + data->index*8;
l.x2 = TM_index_l.x2 + data->index*8;
#elif (MAIN_LCD_SIZE==3)
dspl_TextOut(27+EX, 19, DSPL_TXTATTR_TRANSPARENT, data->timebuffer);
l = TM_index_l;
l.x1 = TM_index_l.x1 + data->index*8;
l.x2 = TM_index_l.x2 + data->index*8;
#endif
TD_drawLine(l, TM_index_c);
/* icon display */
/* 2004/06 sunsj modify for picture manage */
#if(MAIN_LCD_SIZE==3)
DRAW_ICON_ATTRIBUTE(ICON_IDLESTATE, 3+EX, 20, iconIdTimer, ICON_MASK|ICON_LOCATION);
#elif (MAIN_LCD_SIZE==4)
DRAW_ICON_ATTRIBUTE(ICON_IDLESTATE, 18+EX, 45, iconIdTimer, ICON_MASK|ICON_LOCATION);
#endif
//dspl_BitBlt(5+EX, 30, idl_Attr[iconIdTimer].area.sx, idl_Attr[iconIdTimer].area.sy, 0, idl_Attr[iconIdTimer].icons, DSPL_BMPXOR);
//dspl_BitBlt(5+EX, 30, idl_AttrMask[iconIdTimer].area.sx, idl_AttrMask[iconIdTimer].area.sy, 0, idl_AttrMask[iconIdTimer].icons, DSPL_BMPAND);
//dspl_BitBlt(5+EX, 30, idl_Attr[iconIdTimer].area.sx, idl_Attr[iconIdTimer].area.sy, 0, idl_Attr[iconIdTimer].icons, DSPL_BMPXOR);
displaySoftKeys(TxtStart,TxtSoftBack);
}
else if(timer_status==TIMER_COUNT) //计时界面
{
/* background display */
#if(MAIN_LCD_SIZE==3)
TD_drawBkg(BG_rect, BG_attr);
#endif
/* 2004/06 sunsj modify for picture manage */
DRAW_ICON(ICON_MENUUP);
/*
dspl_BitBlt( menuup[FlashSettingData.theme].area.px,menuup[FlashSettingData.theme].area.py,
menuup[FlashSettingData.theme].area.sx,menuup[FlashSettingData.theme].area.sy,
menuup[FlashSettingData.theme].nIcons,menuup[FlashSettingData.theme].icons,0);
*/
#if(MAIN_LCD_SIZE==4)
dspl_colorTextOut(8+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtLefttime),0x0);
#elif(MAIN_LCD_SIZE==3)
dspl_colorTextOut(22+EX,0,DSPL_TXTATTR_TRANSPARENT,MmiRsrcGetText(TxtLefttime),0x0);
#endif
/* icon display */
#if(MAIN_LCD_SIZE==3)
TD_drawSolidRectangle(TM_input_rect, TM_input_attr);
DRAW_ICON_ATTRIBUTE(ICON_IDLESTATE, 3+EX, 15, iconIdTimer, ICON_MASK|ICON_LOCATION);
dspl_colorTextOut(27+EX, 17, DSPL_TXTATTR_TRANSPARENT, (char *)timer_string,0x000000);
#elif (MAIN_LCD_SIZE==4)
drawSolidRectangle(28+EX, 69, 110, 88, 1,0xDBFFFF,0x95668A);
DRAW_ICON_ATTRIBUTE(ICON_IDLESTATE, 9+EX, 72, iconIdTimer, ICON_MASK|ICON_LOCATION);
dspl_colorTextOut(36+EX, 72, DSPL_TXTATTR_TRANSPARENT, (char *)timer_string,0x000000);
#endif
/* Print softkeys */
displaySoftKeys(TxtStop, TxtSoftBack);
}
dspl_Enable(uMode );
return 1;
}
return 0;
}
static void timer_DialogCB(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data;
timer_data* data = (timer_data *) win_data->user;
TRACE_EVENT("timer_DialogCB");
data->kbd = kbd_create(win,KEY_ALL,(T_MFW_CB)timer_kbd_cb);
switch(event)
{
case TIMER_EDT:
TRACE_EVENT("TIMER_EDT");
//data->LeftKey=TRUE;
timer_counter=0;
//memset(data->timebuffer,0,sizeof(data->timebuffer));
memset(timer_string,0,10);
sprintf(timer_string,"00:00:00");
//sprintf(data->timebuffer,"00:00:00");
winShow(win);
break;
case TIMER_COUNT:
TRACE_EVENT("TIMER_COUNT");
if(!timer_start)
{
timStart(timer_Hnd);
timer_start=TRUE;
}
winShow(win);
break;
}
}
/* 定时器回调函数 间隔1s 如果有电话等,就启动定时器timer_alarm_win */
T_MFW_CB timer_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc)
{
T_MFW_HND win = mfwParent( mfw_header());
// T_MFW_HND timer_tim_win=NULL;
int old_color;
T_DISPLAY_DATA display_info;
if (timer_counter!=0)
{
/* 2003.11.19 WYJ 修正电话进来时窗口显示的bug */
/*
if(call_win_flag)
{
timer_status=TIMER_EDT;
tim_stop(timer_Hnd);
timer_start=FALSE;
//tim_delete(timer_Hnd);
//timer_Hnd=NULL;
iconsDeleteState(iconIdTimer);
}
*/
timer_counter--;
sprintf(timer_string,"%02d:%02d:%02d",timer_counter/3600,(timer_counter%3600)/60,(timer_counter%3600)%60);
timStart (timer_Hnd);
}
else //定时器溢出
{
// if(timer_win!=NULL)
// {
// timerdestroy(timer_win);
// }
TRACE_EVENT("timer_counter==0");
if((int)call_data.win_incoming||(int)call_data.win_calling||call_win_flag||alarm_win)
{
timer_alarm_win=timCreate(win, 1000, (T_MFW_CB)TimerAlarm_tim_cb);
timStart(timer_alarm_win);
}
else
{
timer_alarm(); //显示
#if 0
timDelete(timer_Hnd);
timer_flag=FALSE;
timer_tim_win=0;
timer_status=TIMER_EDT;
StartPlayByReason(ALARMPLAY,0);
iconsDeleteState(iconIdTimer);
//dspl_colorTextOut(20,40,0,(char*)MmiRsrcGetText(TxtTimeup),0x0000ff);
dialog_info_init(&display_info);
display_info.KeyEvents = KEY_RIGHT |KEY_LEFT|KEY_HUP|KEY_F4;
display_info.TextId2 = TxtTimeup;
display_info.Time = 30*ONE_SECS;
display_info.iconindex = REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)timer_dialog_cb;
/*
* Call Info Screen
*/
info_dialog (win, &display_info);
#endif
}
}
if((timer_win NEQ NULL)&&winIsFocussed(timer_win))
winShow(timer_win);
return 0;
}
T_MFW_CB info_timer_tim_cb(MfwEvt e, MfwTim *tc)
{
T_DISPLAY_DATA display_info;
TRACE_EVENT("info_timer_tim_cb");
if(call_data.win_incoming||call_data.win_calling||call_win_flag)
{
TRACE_EVENT("call_data.win_incoming!=NULL");
if(info_window)
{
SEND_EVENT(info_window, DIALOG_DESTROY, 0, 0);
}
}
else
{
if(!info_window)
{
if(timer_afterCall==2)
{
TRACE_EVENT("info_window==NULL");
timDelete(info_timer_Hnd);
timer_start=FALSE;
StartPlayByReason(ALARMPLAY,0);
dialog_info_init(&display_info);
display_info.KeyEvents = KEY_RIGHT |KEY_LEFT|KEY_HUP|KEY_F4;
display_info.TextId2 = TxtTimeup;
display_info.Time = 10*ONE_SECS;
display_info.iconindex = REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)timer_dialog_cb;
/*
* Call Info Screen
*/
info_dialog (0, &display_info);
}
else
{
timer_afterCall++;
}
}
}
timStart(info_timer_Hnd);
}
/* 等到没有电话时 显示定时器溢出 */
T_MFW_CB TimerAlarm_tim_cb(MfwEvt e, MfwTim *tc)
{
if(call_data.win_incoming||call_data.win_calling||call_win_flag||alarm_win)
timStart(timer_alarm_win);
else
{
if(timer_afterCall==2)
{
timDelete(timer_alarm_win);
timer_start=FALSE;
timer_alarm();
timer_afterCall=0;
}
else
{
timer_afterCall++;
timStart(timer_alarm_win);
}
}
}
//显示定时器到期
void timer_alarm()
{
T_DISPLAY_DATA display_info;
//2004.08.02 Added by Cathy for Camera
#ifdef CAMERA_ENABLED
CamExit();
#endif
// MI18800000348 wyj
LedLightnessAdjust(200);
timStart(gtVibator);
TRACE_EVENT("timer_alarm");
// timDelete(timer_Hnd);
timStop(timer_Hnd);
timer_start=FALSE;
// timer_Hnd=NULL;
timer_flag=FALSE;
timer_status=TIMER_EDT;
StartPlayByReason(ALARMPLAY,0);
iconsDeleteState(iconIdTimer);
dialog_info_init(&display_info);
display_info.LeftSoftKey = TxtSoftOK;//2004-04-16 Sunny add
display_info.KeyEvents = KEY_RIGHT |KEY_LEFT|KEY_HUP|KEY_F4;
display_info.TextId2 = TxtTimeup;
display_info.Time = 30*ONE_SECS;
display_info.iconindex = REMIND_NORECORD;
display_info.Callback = (T_VOID_FUNC)timer_dialog_cb;
setOuterState(OUTERIDLESTATE_ALERT,1,0);//2004-04-23 Sunny add
/*
* Call Info Screen
*/
info_dialog (0, &display_info);
// info_timer_Hnd=tim_create(0, 1000, (T_MFW_CB)info_timer_tim_cb);
// timStart(info_timer_Hnd);
}
T_MFW_CB timerEnd_tim_cb(T_MFW_EVENT event, T_MFW_TIM *tc)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -