📄 ap_message2.lst
字号:
\ 01BE ?0055:
\ 01BE ?0091:
\ 01BE 2A0700 LD HL,(g_ap_event)
\ 01C1 1803 JR ?0057
\ 01C3 ?0056:
285 else return 0;
286 }
\ 01C3 ?0054:
287 else return 0;
\ 01C3 210000 LD HL,0
288 }
\ 01C6 ?0057:
\ 01C6 DDE1 POP IX
\ 01C8 FDE1 POP IY
\ 01CA C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 01CD ap_del_event:
289
290 /*
291 ********************************************************************************
292 * Description : 清除事件发生标志
293 *
294 * Arguments : event, 事件集合
295 *
296 * Returns :
297 *
298 * Notes :
299 *
300 ********************************************************************************
301 */
302 void ap_del_event(WORD event)
303 {
\ 01CD C5 PUSH BC
\ 01CE D5 PUSH DE
304 g_ap_event &= (~event);
\ 01CF 7B LD A,E
\ 01D0 42 LD B,D
\ 01D1 2F CPL
\ 01D2 4F LD C,A
\ 01D3 78 LD A,B
\ 01D4 2F CPL
\ 01D5 47 LD B,A
\ 01D6 210700 LD HL,g_ap_event
\ 01D9 7E LD A,(HL)
\ 01DA A1 AND C
\ 01DB 77 LD (HL),A
\ 01DC 23 INC HL
\ 01DD 7E LD A,(HL)
\ 01DE A0 AND B
\ 01DF 77 LD (HL),A
305 }
\ 01E0 E1 POP HL
\ 01E1 C1 POP BC
\ 01E2 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 01E5 ap_sleep:
306
307 /*
308 ********************************************************************************
309 * Description : 睡眠指定的时间
310 *
311 * Arguments : half_sec, 时间, 0.5秒为单位
312 *
313 * Returns : 如果指定的时间内没有其他消息产生, 返回0
314 如果指定的时间内有其他消息产生, 返回该消息
315 * Notes : 如果指定的时间内有其他消息产生, 睡眠的时间将< 指定的时间
316 *
317 ********************************************************************************
318 */
319 char ap_sleep(int half_sec)
320 {
\ 01E5 C5 PUSH BC
\ 01E6 FDE5 PUSH IY
\ 01E8 DDE5 PUSH IX
\ 01EA F5 PUSH AF
\ 01EB D5 PUSH DE
\ 01EC FDE1 POP IY
321 int n=0; //rtc counter
\ 01EE DD210000 LD IX,0
\ 01F2 ?0059:
322 char key;
323
324 while(1)
325 {
326 key = ap_get_message();
\ 01F2 CD0000 CALL LWRD ap_get_message
\ 01F5 210000 LD HL,0
\ 01F8 39 ADD HL,SP
\ 01F9 77 LD (HL),A
327 if(key == AP_MSG_RTC ||
328 key == AP_MSG_CHARGING ||
329 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 01FA FE1C CP 28
\ 01FC 2808 JR Z,?0063
\ 01FE FE1B CP 27
\ 0200 2804 JR Z,?0063
\ 0202 FE1E CP 30
\ 0204 2017 JR NZ,?0062
\ 0206 ?0063:
\ 0206 ?0064:
\ 0206 ?0061:
330 {
331 n++;
332 if(n >= half_sec) return 0;
\ 0206 FDE5 PUSH IY
\ 0208 C1 POP BC
\ 0209 DD23 INC IX
\ 020B DDE5 PUSH IX
\ 020D E1 POP HL
\ 020E F680 OR 128
\ 0210 ED42 SBC HL,BC
\ 0212 E21602 JP PO,?0093
\ 0215 AC XOR H
\ 0216 ?0093:
\ 0216 FAF201 JP M,?0059
\ 0219 ?0065:
\ 0219 2E00 LD L,0
333 }
\ 021B 1811 JR ?0072
\ 021D ?0066:
\ 021D ?0062:
334 else if(key == AP_KEY_NULL ||
335 key == AP_MSG_LOCK ||
336 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 021D AF XOR A
\ 021E B6 OR (HL)
\ 021F 28D1 JR Z,?0059
\ 0221 FE19 CP 25
\ 0223 28CD JR Z,?0059
\ 0225 FE39 CP 57
\ 0227 28C9 JR Z,?0059
\ 0229 ?0070:
\ 0229 ?0071:
\ 0229 ?0068:
337 {
338 continue;
\ 0229 ?0069:
339 }
340 else
341 {
342 //here maybe hotkey
343 return ap_handle_hotkey(key);
\ 0229 5F LD E,A
\ 022A CD0000 CALL LWRD ap_handle_hotkey
\ 022D 6F LD L,A
344 }
\ 022E ?0072:
\ 022E F1 POP AF
\ 022F DDE1 POP IX
\ 0231 FDE1 POP IY
\ 0233 C1 POP BC
\ 0234 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0237 ?0067:
345 }
346
347 }
\ 0237 ap_handle_hotkey_core:
348
349 /*
350 ********************************************************************************
351 * Description : 处理热键消息, 返回结果消息
352 *
353 * Arguments : key, 按键消息
354 *
355 * Returns : 如果有可识别的热键消息, 返回结果消息
356 如果没有可识别的热键消息, 返回0
357 *
358 * Notes :
359 *
360 ********************************************************************************
361 */
362 char ap_handle_hotkey_core(char key)
363 {
\ 0237 D5 PUSH DE
364 switch( key )
\ 0238 CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 023B 0700 DEFW 7
\ 023D 19 DEFB 25
\ 023E 1A DEFB 26
\ 023F 1D DEFB 29
\ 0240 1F DEFB 31
\ 0241 31 DEFB 49
\ 0242 81 DEFB 129
\ 0243 90 DEFB 144
\ 0244 9602 DEFW ?0081
\ 0246 5E02 DEFW ?0075
\ 0248 5402 DEFW ?0074
\ 024A 6802 DEFW ?0076
\ 024C 5402 DEFW ?0074
\ 024E 5402 DEFW ?0074
\ 0250 7202 DEFW ?0077
\ 0252 7C02 DEFW ?0078
\ 0254 ?0074:
365 {
366 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
367 case AP_MSG_STANDBY: //自动关机
368 //case AP_MSG_SLEEP: //睡眠
369 //case AP_MSG_LOW_POWER: //低电自动关机
370 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
371 ap_set_event(AP_EVENT_STANDBY);
\ 0254 110200 LD DE,2
\ 0257 CD9C02 CALL LWRD ?0096
372 return RESULT_STANDBY;
\ 025A 2E02 LD L,2
373 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 025C 183A JR ?0082
\ 025E ?0075:
374 ap_set_event(AP_EVENT_MAIN);
\ 025E 110100 LD DE,1
\ 0261 CD9C02 CALL LWRD ?0096
375 return RESULT_MAIN;
\ 0264 2E0A LD L,10
376 //break;
377 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 0266 1830 JR ?0082
\ 0268 ?0076:
378 ap_set_event(AP_EVENT_RECORD);
\ 0268 110400 LD DE,4
\ 026B CD9C02 CALL LWRD ?0096
379 return RESULT_RECORD;
\ 026E 2E09 LD L,9
380 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 0270 1826 JR ?0082
\ 0272 ?0077:
381 ap_set_event(AP_EVENT_UDISK);
\ 0272 110800 LD DE,8
\ 0275 CD9C02 CALL LWRD ?0096
382 return RESULT_UDISK;
\ 0278 2E04 LD L,4
383 case AP_MSG_LOCK: //locked
\ 027A 181C JR ?0082
\ 027C ?0078:
384 if(ui_run_realtime) //实时模式不显示lock
\ 027C 3A0000 LD A,(ui_run_realtime)
\ 027F B7 OR A
\ 0280 2014 JR NZ,?0081
\ 0282 ?0079:
385 {
386 //TODO: send lock message to message queue
387 return 0;
388 }
\ 0282 ?0080:
389 else
390 {
391 ui_show_lock(1); //这里不处理热键,防止嵌套
\ 0282 1E01 LD E,1
\ 0284 3E00 LD A,BYTE3 ui_show_lock
\ 0286 210000 LD HL,LWRD ui_show_lock
\ 0289 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
392 ap_set_event(AP_EVENT_REDRAW);
\ 028C 111000 LD DE,16
\ 028F CD9C02 CALL LWRD ?0096
393 return RESULT_REDRAW;
\ 0292 2E32 LD L,50
394 }
\ 0294 1802 JR ?0082
\ 0296 ?0081:
395 // case AP_KEY_UNLOCK:
396 // return ui_show_lock(0);
397 default:
398 //here just drop the key
399 return 0;
\ 0296 2E00 LD L,0
400 }
\ 0298 ?0082:
\ 0298 F1 POP AF
\ 0299 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 029C ?0096:
\ 029C 3E00 LD A,BYTE3 ap_set_event
\ 029E 217401 LD HL,LWRD ap_set_event
\ 02A1 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 02A4 ?0073:
401 }
402
\ 0000 RSEG IDATA0
\ 0000 g_light_time:
\ 0001 DEFS 1
\ 0001 g_sleep_time:
\ 0003 DEFS 2
\ 0003 g_standby_time:
\ 0005 DEFS 2
\ 0005 g_rtc_counter:
\ 0007 DEFS 2
\ 0007 g_ap_event:
\ 0009 DEFS 2
\ 0009 ?0006:
\ 000B DEFS 2
\ 000B ?0007:
\ 000C DEFS 1
\ 0000 RSEG CDATA0
\ 0000 00 DEFB 0
\ 0001 0000 DEFW 0
\ 0003 0000 DEFW 0
\ 0005 0000 DEFW 0
\ 0007 0000 DEFW 0
\ 0009 0000 DEFW 0
\ 000B 00 DEFB 0
\ 000C END
Errors: none
Warnings: none
Code size: 676
Constant size: 12
Static variable size: Data(12) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -