📄 ap_message2_standby.lst
字号:
\ 0222 ?0063:
288 else return 0;
289 }
\ 0222 ?0061:
290 else if(condition == AP_EVENT_ANY)
\ 0222 FDE5 PUSH IY
\ 0224 E1 POP HL
\ 0225 7D LD A,L
\ 0226 B4 OR H
\ 0227 2013 JR NZ,?0065
\ 0229 ?0064:
291 {
292 if( (g_ap_event & event) != 0) return g_ap_event;
\ 0229 2A0900 LD HL,(g_ap_event)
\ 022C DDE5 PUSH IX
\ 022E C1 POP BC
\ 022F 7D LD A,L
\ 0230 A1 AND C
\ 0231 57 LD D,A
\ 0232 7C LD A,H
\ 0233 A0 AND B
\ 0234 B2 OR D
\ 0235 2805 JR Z,?0065
\ 0237 ?0066:
\ 0237 ?0104:
\ 0237 2A0900 LD HL,(g_ap_event)
\ 023A 1803 JR ?0068
\ 023C ?0067:
293 else return 0;
294 }
\ 023C ?0065:
295 else return 0;
\ 023C 210000 LD HL,0
296 }
\ 023F ?0068:
\ 023F DDE1 POP IX
\ 0241 FDE1 POP IY
\ 0243 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0246 ap_del_event:
297
298 /*
299 ********************************************************************************
300 * Description : 清除事件发生标志
301 *
302 * Arguments : event, 事件集合
303 *
304 * Returns :
305 *
306 * Notes :
307 *
308 ********************************************************************************
309 */
310 void ap_del_event(WORD event)
311 {
\ 0246 C5 PUSH BC
\ 0247 D5 PUSH DE
312 g_ap_event &= (~event);
\ 0248 7B LD A,E
\ 0249 42 LD B,D
\ 024A 2F CPL
\ 024B 4F LD C,A
\ 024C 78 LD A,B
\ 024D 2F CPL
\ 024E 47 LD B,A
\ 024F 210900 LD HL,g_ap_event
\ 0252 7E LD A,(HL)
\ 0253 A1 AND C
\ 0254 77 LD (HL),A
\ 0255 23 INC HL
\ 0256 7E LD A,(HL)
\ 0257 A0 AND B
\ 0258 77 LD (HL),A
313 }
\ 0259 E1 POP HL
\ 025A C1 POP BC
\ 025B C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 025E ap_sleep:
314
315 /*
316 ********************************************************************************
317 * Description : 睡眠指定的时间
318 *
319 * Arguments : half_sec, 时间, 0.5秒为单位
320 *
321 * Returns : 如果指定的时间内没有其他消息产生, 返回0
322 如果指定的时间内有其他消息产生, 返回该消息
323 * Notes : 如果指定的时间内有其他消息产生, 睡眠的时间将< 指定的时间
324 *
325 ********************************************************************************
326 */
327 char ap_sleep(int half_sec)
328 {
\ 025E C5 PUSH BC
\ 025F FDE5 PUSH IY
\ 0261 DDE5 PUSH IX
\ 0263 F5 PUSH AF
\ 0264 D5 PUSH DE
\ 0265 FDE1 POP IY
329 int n=0; //rtc counter
\ 0267 DD210000 LD IX,0
\ 026B ?0070:
330 char key;
331
332 while(1)
333 {
334 key = ap_get_message();
\ 026B CD0000 CALL LWRD ap_get_message
\ 026E 210000 LD HL,0
\ 0271 39 ADD HL,SP
\ 0272 77 LD (HL),A
335 if(key == AP_MSG_RTC ||
336 key == AP_MSG_CHARGING ||
337 key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
\ 0273 FE1C CP 28
\ 0275 2808 JR Z,?0074
\ 0277 FE1B CP 27
\ 0279 2804 JR Z,?0074
\ 027B FE1E CP 30
\ 027D 2017 JR NZ,?0073
\ 027F ?0074:
\ 027F ?0075:
\ 027F ?0072:
338 {
339 n++;
340 if(n >= half_sec) return 0;
\ 027F FDE5 PUSH IY
\ 0281 C1 POP BC
\ 0282 DD23 INC IX
\ 0284 DDE5 PUSH IX
\ 0286 E1 POP HL
\ 0287 F680 OR 128
\ 0289 ED42 SBC HL,BC
\ 028B E28F02 JP PO,?0106
\ 028E AC XOR H
\ 028F ?0106:
\ 028F FA6B02 JP M,?0070
\ 0292 ?0076:
\ 0292 2E00 LD L,0
341 }
\ 0294 1811 JR ?0083
\ 0296 ?0077:
\ 0296 ?0073:
342 else if(key == AP_KEY_NULL ||
343 key == AP_MSG_LOCK ||
344 key == (AP_MSG_LOCK | AP_KEY_UP)) //lock 只有up, 没有long/hold
\ 0296 AF XOR A
\ 0297 B6 OR (HL)
\ 0298 28D1 JR Z,?0070
\ 029A FE19 CP 25
\ 029C 28CD JR Z,?0070
\ 029E FE39 CP 57
\ 02A0 28C9 JR Z,?0070
\ 02A2 ?0081:
\ 02A2 ?0082:
\ 02A2 ?0079:
345 {
346 continue;
\ 02A2 ?0080:
347 }
348 else
349 {
350 //here maybe hotkey
351 return ap_handle_hotkey(key);
\ 02A2 5F LD E,A
\ 02A3 CD0000 CALL LWRD ap_handle_hotkey
\ 02A6 6F LD L,A
352 }
\ 02A7 ?0083:
\ 02A7 F1 POP AF
\ 02A8 DDE1 POP IX
\ 02AA FDE1 POP IY
\ 02AC C1 POP BC
\ 02AD C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 02B0 ?0078:
353 }
354
355 }
\ 02B0 ap_handle_hotkey_core:
356
357 /*
358 ********************************************************************************
359 * Description : 处理热键消息, 返回结果消息
360 *
361 * Arguments : key, 按键消息
362 *
363 * Returns : 如果有可识别的热键消息, 返回结果消息
364 如果没有可识别的热键消息, 返回0
365 *
366 * Notes :
367 *
368 ********************************************************************************
369 */
370 char ap_handle_hotkey_core(char key)
371 {
\ 02B0 D5 PUSH DE
372 switch( key )
\ 02B1 CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 02B4 0700 DEFW 7
\ 02B6 19 DEFB 25
\ 02B7 1A DEFB 26
\ 02B8 1D DEFB 29
\ 02B9 1F DEFB 31
\ 02BA 31 DEFB 49
\ 02BB 81 DEFB 129
\ 02BC 90 DEFB 144
\ 02BD 0F03 DEFW ?0092
\ 02BF D702 DEFW ?0086
\ 02C1 CD02 DEFW ?0085
\ 02C3 E102 DEFW ?0087
\ 02C5 CD02 DEFW ?0085
\ 02C7 CD02 DEFW ?0085
\ 02C9 EB02 DEFW ?0088
\ 02CB F502 DEFW ?0089
\ 02CD ?0085:
373 {
374 case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
375 case AP_MSG_STANDBY: //自动关机
376 //case AP_MSG_SLEEP: //睡眠
377 //case AP_MSG_LOW_POWER: //低电自动关机
378 case AP_MSG_FORCE_STANDBY: //使用上两个会报label duplicate
379 ap_set_event(AP_EVENT_STANDBY);
\ 02CD 110200 LD DE,2
\ 02D0 CD1503 CALL LWRD ?0109
380 return RESULT_STANDBY;
\ 02D3 2E02 LD L,2
381 case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
\ 02D5 183A JR ?0093
\ 02D7 ?0086:
382 ap_set_event(AP_EVENT_MAIN);
\ 02D7 110100 LD DE,1
\ 02DA CD1503 CALL LWRD ?0109
383 return RESULT_MAIN;
\ 02DD 2E0A LD L,10
384
385 case AP_KEY_AB | AP_KEY_UP: //进入录音
\ 02DF 1830 JR ?0093
\ 02E1 ?0087:
386 ap_set_event(AP_EVENT_RECORD);
\ 02E1 110400 LD DE,4
\ 02E4 CD1503 CALL LWRD ?0109
387 return RESULT_RECORD;
\ 02E7 2E09 LD L,9
388 case AP_MSG_USB_PLUGIN: //进入udisk 模式
\ 02E9 1826 JR ?0093
\ 02EB ?0088:
389 ap_set_event(AP_EVENT_UDISK);
\ 02EB 110800 LD DE,8
\ 02EE CD1503 CALL LWRD ?0109
390 return RESULT_UDISK;
\ 02F1 2E04 LD L,4
391 case AP_MSG_LOCK: //locked
\ 02F3 181C JR ?0093
\ 02F5 ?0089:
392 if(ui_run_realtime) //实时模式不显示lock
\ 02F5 3A0000 LD A,(ui_run_realtime)
\ 02F8 B7 OR A
\ 02F9 2014 JR NZ,?0092
\ 02FB ?0090:
393 {
394 //TODO: send lock message to message queue
395 return 0;
396 }
\ 02FB ?0091:
397 else
398 {
399 ui_show_lock(1); //这里不处理热键,防止嵌套
\ 02FB 1E01 LD E,1
\ 02FD 3E00 LD A,BYTE3 ui_show_lock
\ 02FF 210000 LD HL,LWRD ui_show_lock
\ 0302 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
400 ap_set_event(AP_EVENT_REDRAW);
\ 0305 111000 LD DE,16
\ 0308 CD1503 CALL LWRD ?0109
401 return RESULT_REDRAW;
\ 030B 2E32 LD L,50
402 }
\ 030D 1802 JR ?0093
\ 030F ?0092:
403 default:
404 //here just drop the key
405 return 0;
\ 030F 2E00 LD L,0
406 }
\ 0311 ?0093:
\ 0311 F1 POP AF
\ 0312 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0315 ?0109:
\ 0315 3E00 LD A,BYTE3 ap_set_event
\ 0317 21ED01 LD HL,LWRD ap_set_event
\ 031A C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 031D ?0084:
407 }
\ 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: 797
Constant size: 15
Static variable size: Data(15) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -