📄 ap_message2.lst
字号:
374 /*
375 ********************************************************************************
376 * Description : 睡眠指定的时间
377 *
378 * Arguments : half_sec, 时间, 0.5秒为单位
379 *
380 * Returns : 如果指定的时间内没有其他消息产生, 返回0
381 如果指定的时间内有其他消息产生, 返回该消息
382 * Notes : 如果指定的时间内有其他消息产生, 睡眠的时间将< 指定的时间
383 *
384 ********************************************************************************
385 */
386 char ap_sleep(int half_sec)
387 {
\ 029B C5 PUSH BC
\ 029C DDE5 PUSH IX
\ 029E F5 PUSH AF
\ 029F D5 PUSH DE
\ 02A0 DDE1 POP IX
388 unsigned char n=0; //rtc counter
\ 02A2 210100 LD HL,1
\ 02A5 39 ADD HL,SP
\ 02A6 3600 LD (HL),0
\ 02A8 ?0078:
389 char key;
390
391 while(1)
392 {
393 key = ap_get_message();
\ 02A8 CD0000 CALL LWRD ap_get_message
\ 02AB 210000 LD HL,0
\ 02AE 39 ADD HL,SP
\ 02AF 77 LD (HL),A
394 if(key == AP_MSG_RTC ||
395 key == AP_MSG_CHARGING ||
396 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 02B0 FE1C CP 28
\ 02B2 2808 JR Z,?0082
\ 02B4 FE1B CP 27
\ 02B6 2804 JR Z,?0082
\ 02B8 FE1E CP 30
\ 02BA 2017 JR NZ,?0081
\ 02BC ?0082:
\ 02BC ?0083:
\ 02BC ?0080:
397 {
398 n++;
\ 02BC 23 INC HL
\ 02BD 34 INC (HL)
399 if(n >= half_sec) return 0;
\ 02BE 6E LD L,(HL)
\ 02BF 2600 LD H,0
\ 02C1 DDE5 PUSH IX
\ 02C3 C1 POP BC
\ 02C4 F680 OR 128
\ 02C6 ED42 SBC HL,BC
\ 02C8 E2CC02 JP PO,?0111
\ 02CB AC XOR H
\ 02CC ?0111:
\ 02CC FAA802 JP M,?0078
\ 02CF ?0084:
\ 02CF 2E00 LD L,0
400 }
\ 02D1 1819 JR ?0091
\ 02D3 ?0085:
\ 02D3 ?0081:
401 else if(key == AP_KEY_NULL ||
402 key == AP_MSG_UNLOCK ||
403 key == (AP_MSG_UNLOCK | AP_KEY_UP) ||
404 key == AP_MSG_LOCK ||
405 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 02D3 AF XOR A
\ 02D4 B6 OR (HL)
\ 02D5 28D1 JR Z,?0078
\ 02D7 FE18 CP 24
\ 02D9 28CD JR Z,?0078
\ 02DB FE38 CP 56
\ 02DD 28C9 JR Z,?0078
\ 02DF FE19 CP 25
\ 02E1 28C5 JR Z,?0078
\ 02E3 FE39 CP 57
\ 02E5 28C1 JR Z,?0078
\ 02E7 ?0089:
\ 02E7 ?0090:
\ 02E7 ?0087:
406 {
407 continue;
\ 02E7 ?0088:
408 }
409 else
410 {
411 //here maybe hotkey
412 return ap_handle_hotkey(key);
\ 02E7 5F LD E,A
\ 02E8 CD0000 CALL LWRD ap_handle_hotkey
\ 02EB 6F LD L,A
413 }
\ 02EC ?0091:
\ 02EC F1 POP AF
\ 02ED DDE1 POP IX
\ 02EF C1 POP BC
\ 02F0 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 02F3 ?0086:
414 }
415
416 }
\ 02F3 ap_handle_hotkey_core:
417
418 /*
419 ********************************************************************************
420 * Description : 处理热键消息, 返回结果消息
421 *
422 * Arguments : key, 按键消息
423 *
424 * Returns : 如果有可识别的热键消息, 返回结果消息
425 如果没有可识别的热键消息, 返回0
426 *
427 * Notes :
428 *
429 ********************************************************************************
430 */
431 char ap_handle_hotkey_core(char key)
432 {
\ 02F3 D5 PUSH DE
433 switch( key )
\ 02F4 CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 02F7 0900 DEFW 9
\ 02F9 18 DEFB 24
\ 02FA 19 DEFB 25
\ 02FB 1A DEFB 26
\ 02FC 1D DEFB 29
\ 02FD 1F DEFB 31
\ 02FE 31 DEFB 49
\ 02FF 81 DEFB 129
\ 0300 8B DEFB 139
\ 0301 90 DEFB 144
\ 0302 4003 DEFW ?0101
\ 0304 1E03 DEFW ?0095
\ 0306 1603 DEFW ?0093
\ 0308 1A03 DEFW ?0094
\ 030A 2203 DEFW ?0096
\ 030C 1A03 DEFW ?0094
\ 030E 1A03 DEFW ?0094
\ 0310 2603 DEFW ?0097
\ 0312 2A03 DEFW ?0098
\ 0314 2A03 DEFW ?0098
\ 0316 ?0093:
434 {
435 case AP_MSG_LOW_POWER_MY:
436 return RESULT_STANDBYY;
\ 0316 2ECA LD L,202
437
438 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
\ 0318 1828 JR ?0102
\ 031A ?0094:
439 case AP_MSG_STANDBY: //自动关机
440 //case AP_MSG_SLEEP: //睡眠
441 //case AP_MSG_LOW_POWER: //低电自动关机
442 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
443 return RESULT_STANDBY;
\ 031A 2E02 LD L,2
444 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 031C 1824 JR ?0102
\ 031E ?0095:
445 return RESULT_MAIN;
\ 031E 2E0A LD L,10
446
447 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 0320 1820 JR ?0102
\ 0322 ?0096:
448 return RESULT_RECORD;
\ 0322 2E09 LD L,9
449 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 0324 181C JR ?0102
\ 0326 ?0097:
450 return RESULT_UDISK;
\ 0326 2E04 LD L,4
451 case AP_MSG_LOCK: //locked
\ 0328 1818 JR ?0102
\ 032A ?0098:
452 case AP_MSG_UNLOCK: //unlocked
453 if(ui_run_realtime) //实时模式不显示lock
\ 032A 3A0000 LD A,(ui_run_realtime)
\ 032D B7 OR A
\ 032E 2010 JR NZ,?0101
\ 0330 ?0099:
454 {
455 //TODO: send lock message to message queue
456 return 0;
457 }
\ 0330 ?0100:
458 else
459 {
460 ///-ui_show_lock(1); //这里不处理热键,防止嵌套
461 ui_show_lock(key - AP_MSG_UNLOCK);
\ 0330 7B LD A,E
\ 0331 C6E8 ADD A,232
\ 0333 5F LD E,A
\ 0334 3E00 LD A,BYTE3 ui_show_lock
\ 0336 210000 LD HL,LWRD ui_show_lock
\ 0339 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
462 return RESULT_REDRAW;
\ 033C 2E32 LD L,50
463 }
\ 033E 1802 JR ?0102
\ 0340 ?0101:
464 default:
465 //here just drop the key
466 return 0;
\ 0340 2E00 LD L,0
467 }
\ 0342 ?0102:
\ 0342 F1 POP AF
\ 0343 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0346 ?0092:
468 }
\ 0000 RSEG UDATA0
\ 0000 g_EarProtect_flag:
\ 0001 DEFS 1
\ 0001 EarProtectThreshold:
\ 0002 DEFS 1
\ 0002 g_autoswitch_time:
\ 0004 DEFS 2
\ 0000 RSEG IDATA0
\ 0000 g_decrease_time:
\ 0001 DEFS 1
\ 0001 g_half_hour_counter:
\ 0003 DEFS 2
\ 0003 g_autoswitch_counter:
\ 0005 DEFS 2
\ 0005 g_light_time:
\ 0006 DEFS 1
\ 0006 g_light_mode:
\ 0007 DEFS 1
\ 0007 g_contrast_num:
\ 0008 DEFS 1
\ 0008 g_sleep_time:
\ 000A DEFS 2
\ 000A g_standby_time:
\ 000C DEFS 2
\ 000C g_rtc_counter:
\ 000E DEFS 2
\ 000E g_light_flag:
\ 000F DEFS 1
\ 000F ?0012:
\ 0011 DEFS 2
\ 0011 ?0013:
\ 0012 DEFS 1
\ 0000 RSEG CDATA0
\ 0000 00 DEFB 0
\ 0001 0000 DEFW 0
\ 0003 0000 DEFW 0
\ 0005 00 DEFB 0
\ 0006 00 DEFB 0
\ 0007 00 DEFB 0
\ 0008 0000 DEFW 0
\ 000A 0000 DEFW 0
\ 000C 0000 DEFW 0
\ 000E 01 DEFB 1
\ 000F 0000 DEFW 0
\ 0011 00 DEFB 0
\ 0012 END
Errors: none
Warnings: none
Code size: 838
Constant size: 18
Static variable size: Data(22) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -