📄 ap_message2.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 12/Apr/106 09:56:14 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d35f\ap\common\ap_message2.c #
# List file = d:\case_i_d35f\ap\ap_main\list\ap_message2.lst #
# Object file = d:\case_i_d35f\ap\ap_main\release\obj\ap_message2.r01#
# Command line = -v0 -mb -OD:\case_i_d35f\ap\ap_main\release\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d35f\ap\ap_main\List\ -q -t8 -X #
# -Id:\sdk_i_35f\inc\ -Id:\case_i_d35f\inc\ #
# d:\case_i_d35f\AP\COMMON\ap_message2.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ap_message2(17)
\ 0000 RSEG COM_MSG(0)
\ 0000 RSEG IDATA0(0)
\ 0000 RSEG CDATA0(0)
\ 0000 PUBLIC ap_del_event
\ 0000 PUBLIC ap_get_event
\ 0000 EXTERN ap_get_message
\ 0000 PUBLIC ap_get_message_core
\ 0000 EXTERN ap_handle_hotkey
\ 0000 PUBLIC ap_handle_hotkey_core
\ 0000 PUBLIC ap_message_init
\ 0000 PUBLIC ap_set_event
\ 0000 PUBLIC ap_sleep
\ 0000 PUBLIC g_ap_event
\ 0000 PUBLIC g_light_time
\ 0000 PUBLIC g_rtc_counter
\ 0000 PUBLIC g_sleep_time
\ 0000 PUBLIC g_standby_time
\ 0000 EXTERN sKY_CloseBacklight
\ 0000 EXTERN sKY_OpenBacklight
\ 0000 EXTERN ui_run_realtime
\ 0000 EXTERN ui_show_lock
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG COM_MSG
\ 0000 ap_message_init:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib message file
5 *
6 * (c) Copyright, Actions Co,Ld.
7 * All Right Reserved
8 *
9 *******************************************************************************
10 */
11 #pragma codeseg(COM_MSG)
12
13 #include "ap_common.h"
14
15 BYTE g_light_time=0; //关背光时间,0.5秒为单位
16 WORD g_sleep_time=0; //睡眠时间,0.5秒为单位
17 WORD g_standby_time=0; //自动关机时间,0.5秒为单位
18 WORD g_rtc_counter=0; //rtc 消息计数
19
20 WORD g_ap_event=0; //事件标志
21 /*
22 char g_ap_message[4]={0, 0, 0, 0}; //ap 消息队列
23 char g_ap_message_index=0; //ap 消息队列的读写指针
24 */
25
26 /*
27 * 对于普通按键的处理存在隐患,如果os把普通按键的值定义到0x20 以上,
28 * ap_get_message() 将不能正确处理, 正确的做法是用9个case, 不用default
29 */
30 #if Msg_KeyEQ > 0x20 || Msg_KeyMenu > 0x20 || \
31 Msg_KeyNext > 0x20 || Msg_KeyLast > 0x20 || \
32 Msg_KeyVolAdd > 0x20 || Msg_KeyVolSub > 0x20 || \
33 Msg_KeyPlayPause > 0x20 || Msg_KeyREC > 0x20 || Msg_KeyLoop > 0x20
34
35 #error os define key greater than 0x20
36 #endif
37
38 /*
39 ********************************************************************************
40 * Description : 初始化消息处理
41 *
42 * Arguments : comval, 系统设定值, =null 表示只初始化内部计数器
43 *
44 * Returns :
45 *
46 * Notes :
47 *
48 ********************************************************************************
49 */
50 void ap_message_init(const comval_t *comval)
51 {
\ 0000 C5 PUSH BC
\ 0001 DDE5 PUSH IX
\ 0003 D5 PUSH DE
\ 0004 DDE1 POP IX
52
53 if(comval != NULL)
\ 0006 7B LD A,E
\ 0007 B2 OR D
\ 0008 281F JR Z,?0005
\ 000A ?0004:
54 {
55 g_light_time = comval->LightTime * 2;
\ 000A DD7E09 LD A,(IX+9)
\ 000D 87 ADD A,A
\ 000E 320000 LD (g_light_time),A
56
57 g_sleep_time = comval->SleepTime * 60 * 2;
\ 0011 DD4E0B LD C,(IX+11)
\ 0014 0600 LD B,0
\ 0016 113C00 LD DE,60
\ 0019 CD0000 CALL LWRD ?S_MUL_L02
\ 001C EB EX DE,HL
\ 001D 29 ADD HL,HL
\ 001E 220100 LD (g_sleep_time),HL
58
59 g_standby_time = comval->StandbyTime * 2;
\ 0021 DD6E0A LD L,(IX+10)
\ 0024 60 LD H,B
\ 0025 29 ADD HL,HL
\ 0026 220300 LD (g_standby_time),HL
\ 0029 ?0005:
60 }
61
62 g_rtc_counter = 0;
\ 0029 210000 LD HL,0
\ 002C 220500 LD (g_rtc_counter),HL
63 }
\ 002F DDE1 POP IX
\ 0031 C1 POP BC
\ 0032 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0035 ap_get_message_core:
64
65
66 /*
67 ********************************************************************************
68 * Description : 处理系统消息, 返回按键消息, 同时负责开/关背光
69 *
70 * Arguments : key, 系统消息
71 *
72 * Returns : 返回ap能够识别的消息, 如果没有系统消息, 返回 AP_KEY_NULL
73 *
74 * Notes :
75
76 * 按键时序:
77 * 0.....1.2....1.5........... (s)
78 * key long hold up (>1.2s)
79 * key up (<1.2s)
80 *
81 * key rate: 0.3s
82 *
83 ********************************************************************************
84 */
85 char ap_get_message_core(char key)
86 {
\ 0035 C5 PUSH BC
\ 0036 DDE5 PUSH IX
\ 0038 DD210000 LD IX,0
\ 003C DD39 ADD IX,SP
\ 003E D5 PUSH DE
87 static WORD key_count=0; //当前按键消息发生的次数
88 static char key_value=Msg_KeyNull; //当前按键的值
89 //char key;
90 /*
91 //检查ap消息队列
92 key = g_ap_message[g_ap_message_index];
93 if(key != 0)
94 {
95 g_ap_message_index++;
96
97 //check if exeeds tail
98 if( g_ap_message_index >= sizeof(g_ap_message)) g_ap_message_index = 0;
99
100 return key;
101 }
102 */
103 //获取按键,没有即返回
104 //key = GetSysMsg();
105 //if(key == Msg_KeyNull) return AP_KEY_NULL;
106
107 //和上次的一样
108 if(key == key_value)
\ 003F 3A0B00 LD A,(?0007)
\ 0042 47 LD B,A
\ 0043 7B LD A,E
\ 0044 B8 CP B
\ 0045 2034 JR NZ,?0009
\ 0047 ?0008:
109 {
110 //开背光
111 if(g_light_time != 0) sKY_OpenBacklight();
\ 0047 3A0000 LD A,(g_light_time)
\ 004A B7 OR A
\ 004B 2803 JR Z,?0011
\ 004D ?0010:
\ 004D CD0000 CALL LWRD sKY_OpenBacklight
\ 0050 ?0011:
112
113 g_rtc_counter = 0;
\ 0050 210000 LD HL,0
\ 0053 220500 LD (g_rtc_counter),HL
114 key_count++;
\ 0056 2A0900 LD HL,(?0006)
\ 0059 23 INC HL
\ 005A 220900 LD (?0006),HL
115 //key rate: ...0.3...0.3...0.3...0.3
116 if(key_count == 4) key |= AP_KEY_LONG; //=1.2s
\ 005D 3E04 LD A,4
\ 005F AD XOR L
\ 0060 B4 OR H
\ 0061 2007 JR NZ,?0013
\ 0063 ?0012:
\ 0063 DDCBFEFE SET 7,(IX-2)
\ 0067 C36901 JP LWRD ?0047
\ 006A ?0013:
117 else if(key_count > 4) key |= AP_KEY_HOLD;
\ 006A 4D LD C,L
\ 006B 44 LD B,H
\ 006C 210400 LD HL,4
\ 006F ED42 SBC HL,BC
\ 0071 D26901 JP NC,?0047
\ 0074 ?0015:
\ 0074 DDCBFEF6 SET 6,(IX-2)
\ 0078 ?0016:
\ 0078 ?0014:
118 return key;
\ 0078 C36901 JP LWRD ?0047
119 }
\ 007B ?0009:
120
121 switch( key )
\ 007B CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 007E 0C00 DEFW 12
\ 0080 00 DEFB 0
\ 0081 22 DEFB 34
\ 0082 24 DEFB 36
\ 0083 30 DEFB 48
\ 0084 31 DEFB 49
\ 0085 80 DEFB 128
\ 0086 81 DEFB 129
\ 0087 82 DEFB 130
\ 0088 91 DEFB 145
\ 0089 92 DEFB 146
\ 008A B0 DEFB 176
\ 008B B1 DEFB 177
\ 008C 5201 DEFW ?0045
\ 008E 4C01 DEFW ?0044
\ 0090 4601 DEFW ?0043
\ 0092 2C01 DEFW ?0041
\ 0094 1001 DEFW ?0037
\ 0096 2601 DEFW ?0040
\ 0098 B500 DEFW ?0019
\ 009A B500 DEFW ?0019
\ 009C A600 DEFW ?0018
\ 009E A600 DEFW ?0018
\ 00A0 2C01 DEFW ?0041
\ 00A2 3201 DEFW ?0042
\ 00A4 2C01 DEFW ?0041
\ 00A6 ?0018:
122 {
123 case Msg_KeyLongUp:
124 /*
125 key_count = 0;
126 g_rtc_counter = 0;
127 // key = key_value | AP_KEY_LONG;
128 //这个版本不长按抬起功能
129 key = key_value | AP_KEY_UP;
130 break;
131 */
132
133 case Msg_KeyShortUp:
134 key_count = 0;
\ 00A6 210000 LD HL,0
\ 00A9 220900 LD (?0006),HL
135 g_rtc_counter = 0;
\ 00AC 220500 LD (g_rtc_counter),HL
136 key = key_value | AP_KEY_UP;
\ 00AF 78 LD A,B
\ 00B0 CBEF SET 5,A
\ 00B2 C34101 JP LWRD ?0085
137 break;
\ 00B5 ?0019:
138
139
140 case MSG_RTC2HZ: //rtc
141 case MSG_BAT_V_CHG: //charging & rtc
142 g_rtc_counter++;
\ 00B5 2A0500 LD HL,(g_rtc_counter)
\ 00B8 23 INC HL
\ 00B9 220500 LD (g_rtc_counter),HL
143
144 if(g_light_time != 0 && g_rtc_counter == g_light_time) //自动关背光
\ 00BC 3A0000 LD A,(g_light_time)
\ 00BF B7 OR A
\ 00C0 280A JR Z,?0021
\ 00C2 4F LD C,A
\ 00C3 0600 LD B,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -