📄 ap_message2.lst
字号:
355 //}
356
357 /*
358 ********************************************************************************
359 * Description : 清除事件发生标志
360 *
361 * Arguments : event, 事件集合
362 *
363 * Returns :
364 *
365 * Notes :
366 *
367 ********************************************************************************
368 */
369 //void ap_del_event(WORD event)
370 //{
371 // g_ap_event &= (~event);
372 //}
373
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 {
\ 0277 C5 PUSH BC
\ 0278 FDE5 PUSH IY
\ 027A DDE5 PUSH IX
\ 027C F5 PUSH AF
\ 027D D5 PUSH DE
\ 027E FDE1 POP IY
388 int n=0; //rtc counter
\ 0280 DD210000 LD IX,0
\ 0284 ?0092:
389 char key;
390
391 while(1)
392 {
393 key = ap_get_message();
\ 0284 CD0000 CALL LWRD ap_get_message
\ 0287 210000 LD HL,0
\ 028A 39 ADD HL,SP
\ 028B 77 LD (HL),A
394 if(key == AP_MSG_RTC ||
395 key == AP_MSG_CHARGING ||
396 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 028C FE1C CP 28
\ 028E 2808 JR Z,?0096
\ 0290 FE1B CP 27
\ 0292 2804 JR Z,?0096
\ 0294 FE1E CP 30
\ 0296 2017 JR NZ,?0095
\ 0298 ?0096:
\ 0298 ?0097:
\ 0298 ?0094:
397 {
398 n++;
399 if(n >= half_sec) return 0;
\ 0298 FDE5 PUSH IY
\ 029A C1 POP BC
\ 029B DD23 INC IX
\ 029D DDE5 PUSH IX
\ 029F E1 POP HL
\ 02A0 F680 OR 128
\ 02A2 ED42 SBC HL,BC
\ 02A4 E2A802 JP PO,?0121
\ 02A7 AC XOR H
\ 02A8 ?0121:
\ 02A8 FA8402 JP M,?0092
\ 02AB ?0098:
\ 02AB 2E00 LD L,0
400 }
\ 02AD 1811 JR ?0105
\ 02AF ?0099:
\ 02AF ?0095:
401 else if(key == AP_KEY_NULL ||
402 key == AP_MSG_LOCK ||
403 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 02AF AF XOR A
\ 02B0 B6 OR (HL)
\ 02B1 28D1 JR Z,?0092
\ 02B3 FE19 CP 25
\ 02B5 28CD JR Z,?0092
\ 02B7 FE39 CP 57
\ 02B9 28C9 JR Z,?0092
\ 02BB ?0103:
\ 02BB ?0104:
\ 02BB ?0101:
404 {
405 continue;
\ 02BB ?0102:
406 }
407 else
408 {
409 //here maybe hotkey
410 return ap_handle_hotkey(key);
\ 02BB 5F LD E,A
\ 02BC CD0000 CALL LWRD ap_handle_hotkey
\ 02BF 6F LD L,A
411 }
\ 02C0 ?0105:
\ 02C0 F1 POP AF
\ 02C1 DDE1 POP IX
\ 02C3 FDE1 POP IY
\ 02C5 C1 POP BC
\ 02C6 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 02C9 ?0100:
412 }
413
414 }
\ 02C9 ap_handle_hotkey_core:
415
416 /*
417 ********************************************************************************
418 * Description : 处理热键消息, 返回结果消息
419 *
420 * Arguments : key, 按键消息
421 *
422 * Returns : 如果有可识别的热键消息, 返回结果消息
423 如果没有可识别的热键消息, 返回0
424 *
425 * Notes :
426 *
427 ********************************************************************************
428 */
429 char ap_handle_hotkey_core(char key)
430 {
\ 02C9 D5 PUSH DE
431 switch( key )
\ 02CA CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 02CD 0700 DEFW 7
\ 02CF 19 DEFB 25
\ 02D0 1A DEFB 26
\ 02D1 1D DEFB 29
\ 02D2 1F DEFB 31
\ 02D3 28 DEFB 40
\ 02D4 81 DEFB 129
\ 02D5 87 DEFB 135
\ 02D6 0A03 DEFW ?0114
\ 02D8 EA02 DEFW ?0108
\ 02DA E602 DEFW ?0107
\ 02DC EE02 DEFW ?0109
\ 02DE E602 DEFW ?0107
\ 02E0 E602 DEFW ?0107
\ 02E2 F202 DEFW ?0110
\ 02E4 F602 DEFW ?0111
\ 02E6 ?0107:
432 {
433 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
434 case AP_MSG_STANDBY: //自动关机
435 //case AP_MSG_SLEEP: //睡眠
436 //case AP_MSG_LOW_POWER: //低电自动关机
437 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
438 //ap_set_event(AP_EVENT_STANDBY);
439 return RESULT_STANDBY;
\ 02E6 2E16 LD L,22
440 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 02E8 1822 JR ?0115
\ 02EA ?0108:
441 //ap_set_event(AP_EVENT_MAIN);
442 return RESULT_MAIN;
\ 02EA 2E19 LD L,25
443 //break;
444 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 02EC 181E JR ?0115
\ 02EE ?0109:
445 //ap_set_event(AP_EVENT_RECORD);
446 return RESULT_RECORD;
\ 02EE 2E33 LD L,51
447 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 02F0 181A JR ?0115
\ 02F2 ?0110:
448 //ap_set_event(AP_EVENT_UDISK);
449 return RESULT_UDISK;
\ 02F2 2E18 LD L,24
450 case AP_MSG_LOCK: //locked
\ 02F4 1816 JR ?0115
\ 02F6 ?0111:
451 if(ui_run_realtime) //实时模式不显示lock
\ 02F6 3A0000 LD A,(ui_run_realtime)
\ 02F9 B7 OR A
\ 02FA 200E JR NZ,?0114
\ 02FC ?0112:
452 {
453 //TODO: send lock message to message queue
454 return 0;
455 }
\ 02FC ?0113:
456 else
457 {
458 ui_show_lock(1); //这里不处理热键,防止嵌套
\ 02FC 1E01 LD E,1
\ 02FE 3E00 LD A,BYTE3 ui_show_lock
\ 0300 210000 LD HL,LWRD ui_show_lock
\ 0303 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
459 //ap_set_event(AP_EVENT_REDRAW);
460 return RESULT_REDRAW;
\ 0306 2E2E LD L,46
461 }
\ 0308 1802 JR ?0115
\ 030A ?0114:
462 // case AP_KEY_UNLOCK:
463 // return ui_show_lock(0);
464 default:
465 //here just drop the key
466 return 0;
\ 030A 2E00 LD L,0
467 }
\ 030C ?0115:
\ 030C F1 POP AF
\ 030D C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0310 ?0106:
468 }
469
\ 0000 RSEG UDATA0
\ 0000 g_EarProtect_flag:
\ 0001 DEFS 1
\ 0001 EarProtectThreshold:
\ 0002 DEFS 1
\ 0000 RSEG IDATA0
\ 0000 g_decrease_time:
\ 0001 DEFS 1
\ 0001 g_half_hour_counter:
\ 0003 DEFS 2
\ 0003 g_light_time:
\ 0004 DEFS 1
\ 0004 g_sleep_time:
\ 0006 DEFS 2
\ 0006 g_standby_time:
\ 0008 DEFS 2
\ 0008 g_rtc_counter:
\ 000A DEFS 2
\ 000A g_charge_counter:
\ 000B DEFS 1
\ 000B ?0006:
\ 000D DEFS 2
\ 000D ?0007:
\ 000E DEFS 1
\ 0000 RSEG CDATA0
\ 0000 00 DEFB 0
\ 0001 0000 DEFW 0
\ 0003 00 DEFB 0
\ 0004 0000 DEFW 0
\ 0006 0000 DEFW 0
\ 0008 0000 DEFW 0
\ 000A 00 DEFB 0
\ 000B 0000 DEFW 0
\ 000D 00 DEFB 0
\ 000E END
Errors: none
Warnings: none
Code size: 784
Constant size: 14
Static variable size: Data(16) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -