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

📄 ap_message2.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ap_message2(17)
	RSEG	COM_MSG(0)
	RSEG	UDATA0(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	PUBLIC	EarProtectThreshold
	EXTERN	LightOnOff
	PUBLIC	Lightmodeset
	EXTERN	SetContrast
	PUBLIC	ap_get_event
	EXTERN	ap_get_message
	PUBLIC	ap_get_message_core
	EXTERN	ap_handle_hotkey
	PUBLIC	ap_handle_hotkey_core
	PUBLIC	ap_message_init
	PUBLIC	ap_set_event
	PUBLIC	ap_sleep
	PUBLIC	g_EarProtect_flag
	PUBLIC	g_autoswitch_counter
	PUBLIC	g_autoswitch_time
	EXTERN	g_comval
	PUBLIC	g_contrast_num
	PUBLIC	g_decrease_time
	PUBLIC	g_half_hour_counter
	PUBLIC	g_light_flag
	PUBLIC	g_light_mode
	PUBLIC	g_light_time
	PUBLIC	g_rtc_counter
	PUBLIC	g_sleep_time
	PUBLIC	g_standby_time
	EXTERN	sKY_Beep
	EXTERN	ui_run_realtime
	EXTERN	ui_show_lock
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?S_MUL_L02
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_MSG
Lightmodeset:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib message file
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.
; 7.	*             All Right Reserved
; 8.	*
; 9.	*  $Id: ap_message2.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10.	*******************************************************************************
; 11.	*/
; 12.	#pragma codeseg(COM_MSG)
; 13.	
; 14.	#include "ap_common.h"
; 15.	//#define DEBUG
; 16.	
; 17.	#ifdef EAR_PROTECT
; 18.	    #define     EarProctetTimeTick     60    //30 seconds
; 19.	    byte g_decrease_time = 0;
; 20.	    int g_half_hour_counter = 0;
; 21.	    int g_autoswitch_counter = 0;
; 22.	    byte g_EarProtect_flag;
; 23.	    byte EarProtectThreshold;
; 24.	    int g_autoswitch_time;
; 25.	#endif
; 26.	BYTE g_light_time=0;    //关背光时间,0.5秒为单位
; 27.	BYTE g_light_mode=0;    //关亮度模式,0:变暗,1:变黑
; 28.	BYTE g_contrast_num=0;  //对比度
; 29.	WORD g_sleep_time=0;    //睡眠时间,0.5秒为单位
; 30.	WORD g_standby_time=0;    //自动关机时间,0.5秒为单位
; 31.	WORD g_rtc_counter=0;    //rtc 消息计数
; 32.	//BYTE charge_flag;
; 33.	extern  int DealPlayKey(void);
; 34.	extern bool g_Pausetostop;
; 35.	extern comval_t g_comval;
; 36.	//WORD g_ap_event=0;    //事件标志
; 37.	bool g_light_flag = TRUE;//背景灯开关标志。
; 38.	/*
; 39.	  * 对于普通按键的处理存在隐患,如果os把普通按键的值定义到0x20 以上,
; 40.	  * ap_get_message() 将不能正确处理, 正确的做法是用9个case, 不用default
; 41.	  */
; 42.	#if  Msg_KeyEQ > 0x20  || Msg_KeyMenu > 0x20 || \
; 43.	    Msg_KeyNext > 0x20 || Msg_KeyLast > 0x20 || \
; 44.	    Msg_KeyVolAdd > 0x20 || Msg_KeyVolSub > 0x20 || \
; 45.	    Msg_KeyPlayPause > 0x20 || Msg_KeyREC > 0x20 || \
; 46.	    Msg_KeyLoop > 0x20 || Msg_KeyVol > 0x20
; 47.	
; 48.	#error os define key greater than 0x20
; 49.	#endif
; 50.	void Lightmodeset(bool OnOff)
; 51.	{
	PUSH	DE
; 52.	
; 53.	    if(g_light_mode==1)
	LD	A,(g_light_mode)
	DEC	A
	JR	NZ,?0005
?0004:
; 54.	    {
; 55.	        LightOnOff(OnOff);
	CALL	LWRD LightOnOff
; 56.	    }
; 57.	    else
	JR	?0009
?0005:
; 58.	    {
; 59.	        if(!OnOff)SetContrast(0);
	XOR	A
	OR	E
	JR	Z,?0104
?0007:
; 60.	        else
?0008:
; 61.	            SetContrast(g_contrast_num);
	LD	DE,(g_contrast_num)
?0104:
	CALL	LWRD SetContrast
?0009:
?0006:
; 62.	
; 63.	    }
; 64.	
; 65.	}
	POP	HL
	JP	LWRD ?BANK_FAST_LEAVE_L08
ap_message_init:
; 66.	
; 67.	/*
; 68.	********************************************************************************
; 69.	* Description : 初始化消息处理
; 70.	*
; 71.	* Arguments   : comval, 系统设定值, =null 表示只初始化内部计数器
; 72.	*
; 73.	* Returns     :
; 74.	*
; 75.	* Notes       :
; 76.	*
; 77.	********************************************************************************
; 78.	*/
; 79.	void ap_message_init(const comval_t *comval)
; 80.	{
	PUSH	BC
	PUSH	IX
	PUSH	DE
	POP	IX
; 81.	
; 82.	    if(comval != NULL)
	LD	A,E
	OR	D
	JR	Z,?0011
?0010:
; 83.	    {
; 84.	        g_light_time = comval->LightTime * 2;
	LD	A,(IX+9)
	ADD	A,A
	LD	(g_light_time),A
; 85.	        g_light_mode = comval->Lightmode;
	LD	A,(IX+20)
	LD	(g_light_mode),A
; 86.	        g_sleep_time = comval->SleepTime * 60 * 2;
	LD	C,(IX+11)
	LD	B,0
	LD	DE,60
	CALL	LWRD ?S_MUL_L02
	EX	DE,HL
	ADD	HL,HL
	LD	(g_sleep_time),HL
; 87.	
; 88.	        g_standby_time = comval->StandbyTime * 2;
	LD	L,(IX+10)
	LD	H,B
	ADD	HL,HL
	LD	(g_standby_time),HL
; 89.	        g_contrast_num =  comval->DisplayContrast;
	LD	A,(IX+8)
	LD	(g_contrast_num),A
; 90.	        #ifdef EAR_PROTECT
; 91.	        g_EarProtect_flag = comval->EarProtect_flag;
	LD	A,(IX+24)
	LD	(g_EarProtect_flag),A
; 92.	        EarProtectThreshold = comval->EarProtectThreshold;
	LD	A,(IX+25)
	LD	(EarProtectThreshold),A
; 93.	        g_autoswitch_time = comval->auto_switchoff_time * 60 * 2;
	LD	C,(IX+27)
	LD	B,(IX+28)
	LD	DE,60
	CALL	LWRD ?S_MUL_L02
	EX	DE,HL
	ADD	HL,HL
	LD	(g_autoswitch_time),HL
?0011:
; 94.	        #endif
; 95.	    }
; 96.	
; 97.	    g_rtc_counter = 0;
	LD	HL,0
	LD	(g_rtc_counter),HL
; 98.	//    g_light_flag = TRUE;
; 99.	}
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
ap_get_message_core:
; 100.	
; 101.	
; 102.	/*
; 103.	********************************************************************************
; 104.	* Description : 处理系统消息, 返回按键消息, 同时负责开/关背光
; 105.	*
; 106.	* Arguments   : key, 系统消息
; 107.	*
; 108.	* Returns     : 返回ap能够识别的消息, 如果没有系统消息, 返回 AP_KEY_NULL
; 109.	*
; 110.	* Notes       :
; 111.	
; 112.	* 按键时序:
; 113.	 *  0.....1.2....1.5........... (s)
; 114.	 *  key    long   hold    up    (>1.2s)
; 115.	 *  key  up            (<1.2s)
; 116.	 *
; 117.	 * key rate: 0.3s
; 118.	*
; 119.	********************************************************************************
; 120.	*/
; 121.	char ap_get_message_core(char key)
; 122.	{
	PUSH	BC
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
; 123.	    static WORD key_count=0;        //当前按键消息发生的次数
; 124.	    static char key_value=Msg_KeyNull;        //当前按键的值
; 125.	    #ifdef EAR_PROTECT
; 126.	        char tempVolume;
; 127.	        bool counter_flag = FALSE;
; 128.	        
; 129.	        tempVolume = input8(0x87)&0x1f;
	IN	A,(135)
	AND	31
	LD	(IX-4),A
; 130.	        if (tempVolume > EarProtectThreshold)
	LD	B,A
	LD	A,(EarProtectThreshold)
	CP	B
	JR	NC,?0015
?0014:
; 131.	        {                  
; 132.	                   counter_flag = TRUE;
	LD	(IX-3),1
; 133.	        }
; 134.	        else
	JR	?0016
?0015:
; 135.	        {
; 136.	            counter_flag = FALSE;
	LD	(IX-3),0
?0016:
; 137.	        }
; 138.	                
; 139.	        if ( g_EarProtect_flag && (tempVolume > EarProtectThreshold) && (g_decrease_time == EarProctetTimeTick) )
	LD	A,(g_EarProtect_flag)
	OR	A
	JR	Z,?0018
	LD	A,(EarProtectThreshold)
	CP	B
	JR	NC,?0018
	LD	A,(g_decrease_time)
	CP	60
	JR	NZ,?0018
?0020:
?0019:
?0017:
; 140.	        {
; 141.	            output8(0x87, tempVolume-1);
	LD	A,B
	ADD	A,255
	OUT	(135),A
; 142.	            g_decrease_time = 0;
	XOR	A
	LD	(g_decrease_time),A
?0018:
; 143.	        }
; 144.	        if ( g_EarProtect_flag && (g_half_hour_counter == 7200) )
	LD	A,(g_EarProtect_flag)
	OR	A
	JR	Z,?0022
	LD	HL,7200
	LD	BC,(g_half_hour_counter)
	SBC	HL,BC
	JR	NZ,?0022
?0024:
?0023:
?0021:
; 145.	        {
; 146.	                  if (tempVolume > 10)
	LD	A,10
	CP	(IX-4)
	JR	NC,?0026
?0025:
; 147.	                  {
; 148.	                output8(0x87, tempVolume-1);
	LD	A,(IX-4)
	ADD	A,255
	OUT	(135),A
?0026:
; 149.	            }
; 150.	            g_half_hour_counter = 0;
	LD	(g_half_hour_counter),HL
?0022:
; 151.	        }
; 152.	    #endif
; 153.	
; 154.	    //和上次的一样
; 155.	    if(key == key_value)
	LD	A,(?0013)
	LD	B,A
	LD	A,E
	CP	B
	JR	NZ,?0028
?0027:
; 156.	    {
; 157.	        //开背光
; 158.	        if (!g_light_flag)
	LD	A,(g_light_flag)
	OR	A
	JR	NZ,?0030
?0029:
; 159.	        {
; 160.	            //如背灯没开,不理按键
; 161.	            key_count = 0;
	LD	L,A
	LD	H,A
	LD	(?0012),HL
; 162.	            g_rtc_counter = 0;
	LD	(g_rtc_counter),HL
; 163.	            return NULL;
	JP	LWRD ?0107
; 164.	        }
?0030:
; 165.	
; 166.	        g_rtc_counter = 0;
	LD	HL,0
	LD	(g_rtc_counter),HL
; 167.	        key_count++;
	LD	HL,(?0012)
	INC	HL
	LD	(?0012),HL
; 168.	        //key rate: ...0.3...0.3...0.3...0.3
; 169.	        if(key_count == 4) key |= AP_KEY_LONG;    //=1.2s
	LD	A,4
	XOR	L
	OR	H
	JR	NZ,?0032
?0031:
	SET	7,(IX-2)
	JP	LWRD ?0075
?0032:
; 170.	        else if(key_count > 4) key |= AP_KEY_HOLD;
	LD	C,L
	LD	B,H
	LD	HL,4
	SBC	HL,BC
	JP	NC,?0075
?0034:
	SET	6,(IX-2)
?0035:
?0033:
; 171.	        return key;
	JP	LWRD ?0075
; 172.	    }
?0028:
; 173.	
; 174.	    switch( key )
	CALL	LWRD ?C_V_SWITCH_L06
	DEFW	10
	DEFB	0
	DEFB	34
	DEFB	36
	DEFB	48
	DEFB	49
	DEFB	128
	DEFB	129
	DEFB	139
	DEFB	145
	DEFB	146
	DEFW	?0071
	DEFW	?0068
	DEFW	?0064
	DEFW	?0067
	DEFW	?0040
	DEFW	?0040
	DEFW	?0037
	DEFW	?0037
	DEFW	?0069
	DEFW	?0070
	DEFW	?0068
?0037:
; 175.	    {
; 176.	    case Msg_KeyLongUp:
; 177.	    case Msg_KeyShortUp:
; 178.	        key_count = 0;
	LD	HL,0
	LD	(?0012),HL
; 179.	        g_rtc_counter = 0;
	LD	(g_rtc_counter),HL
; 180.	        if (!g_light_flag)
	LD	A,(g_light_flag)
	OR	A
	JR	NZ,?0039
?0038:
; 181.	        {
; 182.	            Lightmodeset(TRUE);//开关背光(TRUE: 开, FALSE:关)
	LD	E,1
	LD	A,BYTE3 Lightmodeset
	LD	HL,LWRD Lightmodeset
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 183.	            g_light_flag = TRUE;
	LD	A,1
	LD	(g_light_flag),A
; 184.	            return NULL;
	JP	LWRD ?0107
; 185.	        }
?0039:
; 186.	        key = key_value | AP_KEY_UP;
	LD	A,B
	SET	5,A
	LD	(IX-2),A
; 187.	                    key_value=key;                                                              //add by mzh 2007.3.14
	LD	(?0013),A
; 188.	        break;
	JP	LWRD ?0075
?0040:
; 189.	
; 190.	
; 191.	    case MSG_RTC2HZ:        //rtc
; 192.	    case MSG_BAT_V_CHG:        //charging & rtc
; 193.	        g_rtc_counter++;
	LD	HL,(g_rtc_counter)
	INC	HL
	LD	(g_rtc_counter),HL
; 194.	        #ifdef EAR_PROTECT
; 195.	            if (counter_flag)
	XOR	A
	OR	(IX-3)
	JR	Z,?0042
?0041:
; 196.	            {
; 197.	                g_decrease_time++;
	LD	HL,g_decrease_time
	INC	(HL)
?0042:
; 198.	            }
; 199.	            g_half_hour_counter++;
	LD	HL,(g_half_hour_counter)
	INC	HL
	LD	(g_half_hour_counter),HL
; 200.	            g_autoswitch_counter++;
	LD	HL,(g_autoswitch_counter)
	INC	HL
	LD	(g_autoswitch_counter),HL
; 201.	        #endif
; 202.	
; 203.	        if((g_light_time != 0) && (g_rtc_counter >= g_light_time)&&((input8(0x57) & 0x02)==0))    //自动关背光
	LD	A,(g_light_time)
	OR	A
	JR	Z,?0044
	LD	C,A
	LD	B,0
	LD	HL,(g_rtc_counter)
	SBC	HL,BC
	JR	C,?0044
	IN	A,(87)
	BIT	1,A
	JR	NZ,?0044
?0046:
?0045:
?0043:
; 204.	        {
; 205.	            //关背光
; 206.	            Lightmodeset(FALSE);                         //开关背光(true: 开, false:关)       //zxs add for test
	LD	E,B
	LD	A,BYTE3 Lightmodeset
	LD	HL,LWRD Lightmodeset
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 207.	            g_light_flag = FALSE;
	XOR	A
	LD	(g_light_flag),A
?0044:
; 208.	        }
; 209.	        if(g_sleep_time != 0 && g_rtc_counter == g_sleep_time) //睡眠
	LD	HL,(g_sleep_time)
	LD	A,L
	OR	H
	JR	Z,?0048
	LD	BC,(g_rtc_counter)
	SBC	HL,BC
	JR	Z,?0108
?0050:
?0049:
?0047:
; 210.	        {
; 211.	            return AP_MSG_SLEEP;
; 212.	        }
?0048:
; 213.	
; 214.	        if(g_standby_time != 0 && g_rtc_counter == g_standby_time) //自动关机
	LD	HL,(g_standby_time)
	LD	A,L
	OR	H
	JR	Z,?0052
	LD	BC,(g_rtc_counter)
	SBC	HL,BC
	JR	NZ,?0052
?0054:
?0053:
?0051:
; 215.	        {
; 216.	            return AP_MSG_STANDBY;
	LD	L,29
; 217.	        }
	JP	LWRD ?0076
?0052:
; 218.	        #ifdef EAR_PROTECT
; 219.	            if(g_autoswitch_time != 0 && g_autoswitch_counter == g_autoswitch_time) //自动关机
	LD	HL,(g_autoswitch_time)
	LD	A,L
	OR	H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -