📄 ap_message2.lst
字号:
289 else return 0;
290 }
\ 021C ?0059:
291 else if(condition == AP_EVENT_ANY)
\ 021C FDE5 PUSH IY
\ 021E E1 POP HL
\ 021F 7D LD A,L
\ 0220 B4 OR H
\ 0221 2013 JR NZ,?0063
\ 0223 ?0062:
292 {
293 if( (g_ap_event & event) != 0) return g_ap_event;
\ 0223 2A0900 LD HL,(g_ap_event)
\ 0226 DDE5 PUSH IX
\ 0228 C1 POP BC
\ 0229 7D LD A,L
\ 022A A1 AND C
\ 022B 57 LD D,A
\ 022C 7C LD A,H
\ 022D A0 AND B
\ 022E B2 OR D
\ 022F 2805 JR Z,?0063
\ 0231 ?0064:
\ 0231 ?0103:
\ 0231 2A0900 LD HL,(g_ap_event)
\ 0234 1803 JR ?0066
\ 0236 ?0065:
294 else return 0;
295 }
\ 0236 ?0063:
296 else return 0;
\ 0236 210000 LD HL,0
297 }
\ 0239 ?0066:
\ 0239 DDE1 POP IX
\ 023B FDE1 POP IY
\ 023D C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0240 ap_del_event:
298
299 /*
300 ********************************************************************************
301 * Description : 清除事件发生标志
302 *
303 * Arguments : event, 事件集合
304 *
305 * Returns :
306 *
307 * Notes :
308 *
309 ********************************************************************************
310 */
311 void ap_del_event(WORD event)
312 {
\ 0240 C5 PUSH BC
\ 0241 D5 PUSH DE
313 g_ap_event &= (~event);
\ 0242 7B LD A,E
\ 0243 42 LD B,D
\ 0244 2F CPL
\ 0245 4F LD C,A
\ 0246 78 LD A,B
\ 0247 2F CPL
\ 0248 47 LD B,A
\ 0249 210900 LD HL,g_ap_event
\ 024C 7E LD A,(HL)
\ 024D A1 AND C
\ 024E 77 LD (HL),A
\ 024F 23 INC HL
\ 0250 7E LD A,(HL)
\ 0251 A0 AND B
\ 0252 77 LD (HL),A
314 }
\ 0253 E1 POP HL
\ 0254 C1 POP BC
\ 0255 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0258 ap_sleep:
315
316 /*
317 ********************************************************************************
318 * Description : 睡眠指定的时间
319 *
320 * Arguments : half_sec, 时间, 0.5秒为单位
321 *
322 * Returns : 如果指定的时间内没有其他消息产生, 返回0
323 如果指定的时间内有其他消息产生, 返回该消息
324 * Notes : 如果指定的时间内有其他消息产生, 睡眠的时间将< 指定的时间
325 *
326 ********************************************************************************
327 */
328 char ap_sleep(int half_sec)
329 {
\ 0258 C5 PUSH BC
\ 0259 FDE5 PUSH IY
\ 025B DDE5 PUSH IX
\ 025D F5 PUSH AF
\ 025E D5 PUSH DE
\ 025F FDE1 POP IY
330 int n=0; //rtc counter
\ 0261 DD210000 LD IX,0
\ 0265 ?0068:
331 char key;
332
333 while(1)
334 {
335 key = ap_get_message();
\ 0265 CD0000 CALL LWRD ap_get_message
\ 0268 210000 LD HL,0
\ 026B 39 ADD HL,SP
\ 026C 77 LD (HL),A
336 if(key == AP_MSG_RTC ||
337 key == AP_MSG_CHARGING ||
338 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 026D FE1C CP 28
\ 026F 2808 JR Z,?0072
\ 0271 FE1B CP 27
\ 0273 2804 JR Z,?0072
\ 0275 FE1E CP 30
\ 0277 2017 JR NZ,?0071
\ 0279 ?0072:
\ 0279 ?0073:
\ 0279 ?0070:
339 {
340 n++;
341 if(n >= half_sec) return 0;
\ 0279 FDE5 PUSH IY
\ 027B C1 POP BC
\ 027C DD23 INC IX
\ 027E DDE5 PUSH IX
\ 0280 E1 POP HL
\ 0281 F680 OR 128
\ 0283 ED42 SBC HL,BC
\ 0285 E28902 JP PO,?0105
\ 0288 AC XOR H
\ 0289 ?0105:
\ 0289 FA6502 JP M,?0068
\ 028C ?0074:
\ 028C 2E00 LD L,0
342 }
\ 028E 1811 JR ?0081
\ 0290 ?0075:
\ 0290 ?0071:
343 else if(key == AP_KEY_NULL ||
344 key == AP_MSG_LOCK ||
345 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 0290 AF XOR A
\ 0291 B6 OR (HL)
\ 0292 28D1 JR Z,?0068
\ 0294 FE19 CP 25
\ 0296 28CD JR Z,?0068
\ 0298 FE39 CP 57
\ 029A 28C9 JR Z,?0068
\ 029C ?0079:
\ 029C ?0080:
\ 029C ?0077:
346 {
347 continue;
\ 029C ?0078:
348 }
349 else
350 {
351 //here maybe hotkey
352 return ap_handle_hotkey(key);
\ 029C 5F LD E,A
\ 029D CD0000 CALL LWRD ap_handle_hotkey
\ 02A0 6F LD L,A
353 }
\ 02A1 ?0081:
\ 02A1 F1 POP AF
\ 02A2 DDE1 POP IX
\ 02A4 FDE1 POP IY
\ 02A6 C1 POP BC
\ 02A7 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 02AA ?0076:
354 }
355
356 }
\ 02AA ap_handle_hotkey_core:
357
358 /*
359 ********************************************************************************
360 * Description : 处理热键消息, 返回结果消息
361 *
362 * Arguments : key, 按键消息
363 *
364 * Returns : 如果有可识别的热键消息, 返回结果消息
365 如果没有可识别的热键消息, 返回0
366 *
367 * Notes :
368 *
369 ********************************************************************************
370 */
371 char ap_handle_hotkey_core(char key)
372 {
\ 02AA D5 PUSH DE
373 switch( key )
\ 02AB CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 02AE 0700 DEFW 7
\ 02B0 19 DEFB 25
\ 02B1 1A DEFB 26
\ 02B2 1D DEFB 29
\ 02B3 1F DEFB 31
\ 02B4 31 DEFB 49
\ 02B5 81 DEFB 129
\ 02B6 90 DEFB 144
\ 02B7 0903 DEFW ?0090
\ 02B9 D102 DEFW ?0084
\ 02BB C702 DEFW ?0083
\ 02BD DB02 DEFW ?0085
\ 02BF C702 DEFW ?0083
\ 02C1 C702 DEFW ?0083
\ 02C3 E502 DEFW ?0086
\ 02C5 EF02 DEFW ?0087
\ 02C7 ?0083:
374 {
375 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
376 case AP_MSG_STANDBY: //自动关机
377 //case AP_MSG_SLEEP: //睡眠
378 //case AP_MSG_LOW_POWER: //低电自动关机
379 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
380 ap_set_event(AP_EVENT_STANDBY);
\ 02C7 110200 LD DE,2
\ 02CA CD0F03 CALL LWRD ?0108
381 return RESULT_STANDBY;
\ 02CD 2E02 LD L,2
382 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 02CF 183A JR ?0091
\ 02D1 ?0084:
383 ap_set_event(AP_EVENT_MAIN);
\ 02D1 110100 LD DE,1
\ 02D4 CD0F03 CALL LWRD ?0108
384 return RESULT_MAIN;
\ 02D7 2E0A LD L,10
385
386 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 02D9 1830 JR ?0091
\ 02DB ?0085:
387 ap_set_event(AP_EVENT_RECORD);
\ 02DB 110400 LD DE,4
\ 02DE CD0F03 CALL LWRD ?0108
388 return RESULT_RECORD;
\ 02E1 2E09 LD L,9
389 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 02E3 1826 JR ?0091
\ 02E5 ?0086:
390 ap_set_event(AP_EVENT_UDISK);
\ 02E5 110800 LD DE,8
\ 02E8 CD0F03 CALL LWRD ?0108
391 return RESULT_UDISK;
\ 02EB 2E04 LD L,4
392 case AP_MSG_LOCK: //locked
\ 02ED 181C JR ?0091
\ 02EF ?0087:
393 if(ui_run_realtime) //实时模式不显示lock
\ 02EF 3A0000 LD A,(ui_run_realtime)
\ 02F2 B7 OR A
\ 02F3 2014 JR NZ,?0090
\ 02F5 ?0088:
394 {
395 //TODO: send lock message to message queue
396 return 0;
397 }
\ 02F5 ?0089:
398 else
399 {
400 ui_show_lock(1); //这里不处理热键,防止嵌套
\ 02F5 1E01 LD E,1
\ 02F7 3E00 LD A,BYTE3 ui_show_lock
\ 02F9 210000 LD HL,LWRD ui_show_lock
\ 02FC CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
401 ap_set_event(AP_EVENT_REDRAW);
\ 02FF 111000 LD DE,16
\ 0302 CD0F03 CALL LWRD ?0108
402 return RESULT_REDRAW;
\ 0305 2E32 LD L,50
403 }
\ 0307 1802 JR ?0091
\ 0309 ?0090:
404 default:
405 //here just drop the key
406 return 0;
\ 0309 2E00 LD L,0
407 }
\ 030B ?0091:
\ 030B F1 POP AF
\ 030C C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 030F ?0108:
\ 030F 3E00 LD A,BYTE3 ap_set_event
\ 0311 21E701 LD HL,LWRD ap_set_event
\ 0314 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 0317 ?0082:
408 }
409
\ 0000 RSEG IDATA0
\ 0000 g_light_time:
\ 0001 DEFS 1
\ 0001 g_light_mode:
\ 0002 DEFS 1
\ 0002 g_contrast_num:
\ 0003 DEFS 1
\ 0003 g_sleep_time:
\ 0005 DEFS 2
\ 0005 g_standby_time:
\ 0007 DEFS 2
\ 0007 g_rtc_counter:
\ 0009 DEFS 2
\ 0009 g_ap_event:
\ 000B DEFS 2
\ 000B g_light_flag:
\ 000C DEFS 1
\ 000C ?0012:
\ 000E DEFS 2
\ 000E ?0013:
\ 000F DEFS 1
\ 0000 RSEG CDATA0
\ 0000 00 DEFB 0
\ 0001 00 DEFB 0
\ 0002 00 DEFB 0
\ 0003 0000 DEFW 0
\ 0005 0000 DEFW 0
\ 0007 0000 DEFW 0
\ 0009 0000 DEFW 0
\ 000B 01 DEFB 1
\ 000C 0000 DEFW 0
\ 000E 00 DEFB 0
\ 000F END
Errors: none
Warnings: none
Code size: 791
Constant size: 15
Static variable size: Data(15) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -