📄 ap_message2.s01
字号:
NAME ap_message2(17)
RSEG COM_MSG(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
EXTERN LightOnOff
PUBLIC Lightmodeset
EXTERN SetContrast
PUBLIC ap_del_event
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_ap_event
PUBLIC g_contrast_num
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 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. BYTE g_light_time=0; //关背光时间,0.5秒为单位
; 18. BYTE g_light_mode=0; //关亮度模式,0:变暗,1:变黑
; 19. BYTE g_contrast_num=0; //对比度
; 20. WORD g_sleep_time=0; //睡眠时间,0.5秒为单位
; 21. WORD g_standby_time=0; //自动关机时间,0.5秒为单位
; 22. WORD g_rtc_counter=0; //rtc 消息计数
; 23. //BYTE charge_flag;
; 24. extern int DealPlayKey(void);
; 25. extern bool g_Pausetostop;
; 26. extern comval_t g_comval;
; 27. WORD g_ap_event=0; //事件标志
; 28. /*
; 29. char g_ap_message[4]={0, 0, 0, 0}; //ap 消息队列
; 30. char g_ap_message_index=0; //ap 消息队列的读写指针
; 31. */
; 32. bool g_light_flag = TRUE;//背景灯开关标志。
; 33. /*
; 34. * 对于普通按键的处理存在隐患,如果os把普通按键的值定义到0x20 以上,
; 35. * ap_get_message() 将不能正确处理, 正确的做法是用9个case, 不用default
; 36. */
; 37. #if Msg_KeyEQ > 0x20 || Msg_KeyMenu > 0x20 || \
; 38. Msg_KeyNext > 0x20 || Msg_KeyLast > 0x20 || \
; 39. Msg_KeyVolAdd > 0x20 || Msg_KeyVolSub > 0x20 || \
; 40. Msg_KeyPlayPause > 0x20 || Msg_KeyREC > 0x20 || Msg_KeyLoop > 0x20
; 41.
; 42. #error os define key greater than 0x20
; 43. #endif
; 44. void Lightmodeset(bool OnOff)
; 45. {
PUSH DE
; 46.
; 47. if(g_light_mode==1)
LD A,(g_light_mode)
DEC A
JR NZ,?0005
?0004:
; 48. {
; 49. LightOnOff(OnOff);
CALL LWRD LightOnOff
; 50. }
; 51. else
JR ?0009
?0005:
; 52. {
; 53. if(!OnOff)SetContrast(0);
XOR A
OR E
JR Z,?0093
?0007:
; 54. else
?0008:
; 55. SetContrast(g_contrast_num);
LD DE,(g_contrast_num)
?0093:
CALL LWRD SetContrast
?0009:
?0006:
; 56.
; 57. }
; 58.
; 59. }
POP HL
JP LWRD ?BANK_FAST_LEAVE_L08
ap_message_init:
; 60.
; 61. /*
; 62. ********************************************************************************
; 63. * Description : 初始化消息处理
; 64. *
; 65. * Arguments : comval, 系统设定值, =null 表示只初始化内部计数器
; 66. *
; 67. * Returns :
; 68. *
; 69. * Notes :
; 70. *
; 71. ********************************************************************************
; 72. */
; 73. void ap_message_init(const comval_t *comval)
; 74. {
PUSH BC
PUSH IX
PUSH DE
POP IX
; 75.
; 76. if(comval != NULL)
LD A,E
OR D
JR Z,?0011
?0010:
; 77. {
; 78. g_light_time = comval->LightTime * 2;
LD A,(IX+9)
ADD A,A
LD (g_light_time),A
; 79. g_light_mode = comval->Lightmode;
LD A,(IX+22)
LD (g_light_mode),A
; 80. 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
; 81.
; 82. g_standby_time = comval->StandbyTime * 2;
LD L,(IX+10)
LD H,B
ADD HL,HL
LD (g_standby_time),HL
; 83. g_contrast_num = comval->DisplayContrast;
LD A,(IX+8)
LD (g_contrast_num),A
?0011:
; 84. }
; 85.
; 86. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 87. // g_light_flag = TRUE;
; 88. }
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
ap_get_message_core:
; 89.
; 90.
; 91. /*
; 92. ********************************************************************************
; 93. * Description : 处理系统消息, 返回按键消息, 同时负责开/关背光
; 94. *
; 95. * Arguments : key, 系统消息
; 96. *
; 97. * Returns : 返回ap能够识别的消息, 如果没有系统消息, 返回 AP_KEY_NULL
; 98. *
; 99. * Notes :
; 100.
; 101. * 按键时序:
; 102. * 0.....1.2....1.5........... (s)
; 103. * key long hold up (>1.2s)
; 104. * key up (<1.2s)
; 105. *
; 106. * key rate: 0.3s
; 107. *
; 108. ********************************************************************************
; 109. */
; 110. char ap_get_message_core(char key)
; 111. {
PUSH BC
PUSH IX
LD IX,0
ADD IX,SP
PUSH DE
; 112. static WORD key_count=0; //当前按键消息发生的次数
; 113. static char key_value=Msg_KeyNull; //当前按键的值
; 114.
; 115.
; 116. //和上次的一样
; 117. if(key == key_value)
LD A,(?0013)
LD B,A
LD A,E
CP B
JR NZ,?0015
?0014:
; 118. {
; 119. //开背光
; 120. if (!g_light_flag)
LD A,(g_light_flag)
OR A
JR NZ,?0017
?0016:
; 121. {
; 122. //如背灯没开,不理按键
; 123. key_count = 0;
LD L,A
LD H,A
LD (?0012),HL
; 124. g_rtc_counter = 0;
LD (g_rtc_counter),HL
; 125. return NULL;
JP LWRD ?0096
; 126. }
?0017:
; 127.
; 128. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 129. key_count++;
LD HL,(?0012)
INC HL
LD (?0012),HL
; 130. //key rate: ...0.3...0.3...0.3...0.3
; 131. if(key_count == 4) key |= AP_KEY_LONG; //=1.2s
LD A,4
XOR L
OR H
JR NZ,?0019
?0018:
SET 7,(IX-2)
JP LWRD ?0056
?0019:
; 132. else if(key_count > 4) key |= AP_KEY_HOLD;
LD C,L
LD B,H
LD HL,4
SBC HL,BC
JP NC,?0056
?0021:
SET 6,(IX-2)
?0022:
?0020:
; 133. return key;
JP LWRD ?0056
; 134. }
?0015:
; 135.
; 136. switch( key )
CALL LWRD ?C_V_SWITCH_L06
DEFW 12
DEFB 0
DEFB 34
DEFB 36
DEFB 48
DEFB 49
DEFB 128
DEFB 129
DEFB 130
DEFB 145
DEFB 146
DEFB 176
DEFB 177
DEFW ?0054
DEFW ?0053
DEFW ?0052
DEFW ?0050
DEFW ?0045
DEFW ?0049
DEFW ?0027
DEFW ?0027
DEFW ?0024
DEFW ?0024
DEFW ?0050
DEFW ?0051
DEFW ?0050
?0024:
; 137. {
; 138. case Msg_KeyLongUp:
; 139. case Msg_KeyShortUp:
; 140. key_count = 0;
LD HL,0
LD (?0012),HL
; 141. g_rtc_counter = 0;
LD (g_rtc_counter),HL
; 142. if (!g_light_flag)
LD A,(g_light_flag)
OR A
JR NZ,?0026
?0025:
; 143. {
; 144. Lightmodeset(TRUE);//开关背光(TRUE: 开, FALSE:关)
LD E,1
LD A,BYTE3 Lightmodeset
LD HL,LWRD Lightmodeset
CALL LWRD ?BANK_CALL_DIRECT_L08
; 145. g_light_flag = TRUE;
LD A,1
LD (g_light_flag),A
; 146. return NULL;
JP LWRD ?0096
; 147. }
?0026:
; 148. key = key_value | AP_KEY_UP;
LD A,B
SET 5,A
JP LWRD ?0097
; 149. break;
?0027:
; 150.
; 151.
; 152. case MSG_RTC2HZ: //rtc
; 153. case MSG_BAT_V_CHG: //charging & rtc
; 154. g_rtc_counter++;
LD HL,(g_rtc_counter)
INC HL
LD (g_rtc_counter),HL
; 155.
; 156. if((g_light_time != 0) && (g_rtc_counter >= g_light_time)&&((input8(0x57) & 0x02)==0)) //自动关背光
LD A,(g_light_time)
OR A
JR Z,?0029
LD C,A
LD B,0
SBC HL,BC
JR C,?0029
IN A,(87)
BIT 1,A
JR NZ,?0029
?0031:
?0030:
?0028:
; 157. {
; 158. //关背光
; 159. 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
; 160. g_light_flag = FALSE;
XOR A
LD (g_light_flag),A
?0029:
; 161. }
; 162. if(g_sleep_time != 0 && g_rtc_counter == g_sleep_time) //睡眠
LD HL,(g_sleep_time)
LD A,L
OR H
JR Z,?0033
LD BC,(g_rtc_counter)
SBC HL,BC
JR NZ,?0033
?0035:
?0034:
?0032:
; 163. {
; 164. return AP_MSG_SLEEP;
LD L,31
; 165. }
JP LWRD ?0057
?0033:
; 166.
; 167. if(g_standby_time != 0 && g_rtc_counter == g_standby_time) //自动关机
LD HL,(g_standby_time)
LD A,L
OR H
JR Z,?0037
LD BC,(g_rtc_counter)
SBC HL,BC
JR NZ,?0037
?0039:
?0038:
?0036:
; 168. {
; 169. return AP_MSG_STANDBY;
LD L,29
; 170. }
JP LWRD ?0057
?0037:
; 171.
; 172. if( (g_rtc_counter % 16) == 0 )
LD HL,(g_rtc_counter)
LD A,L
AND 15
JR NZ,?0041
?0040:
; 173. {
; 174.
; 175. return AP_MSG_WAIT_TIMEOUT; //8 sec timeout
LD L,30
; 176. }
JP LWRD ?0057
?0041:
; 177.
; 178. if(key == MSG_RTC2HZ) key = AP_MSG_RTC;
LD B,(IX-2)
DEC B
JP PO,?0043
?0042:
LD (IX-2),28
JR ?0056
?0043:
; 179. else key = AP_MSG_CHARGING;
LD (IX-2),27
?0044:
; 180.
; 181. break;
JR ?0056
?0045:
; 182.
; 183.
; 184. case MSG_USB_STICK: //usb plugin, 等同按键
; 185. output8(0xf4,input8(0x0f4)&0xF7); //set gio_c3 to low to cut battery
IN A,(244)
RES 3,A
OUT (244),A
; 186. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 187. key_count = 1;
INC HL
LD (?0012),HL
; 188. key = AP_MSG_USB_PLUGIN;
LD (IX-2),26
; 189.
; 190. //开背光
; 191. if(g_light_time != 0)
LD A,(g_light_time)
OR A
JR Z,?0056
?0046:
; 192. {
; 193. Lightmodeset(TRUE);//开关背光(TRUE: 开, FALSE:关)
LD E,L
LD A,BYTE3 Lightmodeset
LD HL,LWRD Lightmodeset
CALL LWRD ?BANK_CALL_DIRECT_L08
; 194. g_light_flag = FALSE;
XOR A
LD (g_light_flag),A
; 195. }
; 196. else
?0047:
?0048:
; 197. {
; 198. }
; 199. break;
JR ?0056
?0049:
; 200.
; 201. //#ifndef DEBUG
; 202. case MSG_LOW_POWER: //low power, nmi 0.98v
; 203. DUMP("low power", 0);
; 204. key = AP_MSG_LOW_POWER;
LD (IX-2),31
; 205. break;
JR ?0056
?0050:
; 206. //#endif
; 207.
; 208. case MSG_USB_UNSTICK: //ap 不识别的消息
; 209.
; 210. case Msg_KeyNull: //没有按键
; 211.
; 212. case Msg_KeyUnHold:
; 213. key = AP_KEY_NULL;
LD (IX-2),0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -