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

📄 mmitoolkit_timer.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************

					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 + -