📄 ap_message2.s01
字号:
JR Z,?0056
LD BC,(g_autoswitch_counter)
SBC HL,BC
JR NZ,?0056
?0058:
?0057:
?0055:
; 220. {
; 221. return AP_MSG_FORCE_STANDBY;
?0108:
LD L,31
; 222. }
JP LWRD ?0076
?0056:
; 223. #endif
; 224.
; 225. if( (g_rtc_counter % 16) == 0 )
LD HL,(g_rtc_counter)
LD A,L
AND 15
JR NZ,?0060
?0059:
; 226. {
; 227.
; 228. return AP_MSG_WAIT_TIMEOUT; //8 sec timeout
LD L,30
; 229. }
JP LWRD ?0076
?0060:
; 230.
; 231. if(key == MSG_RTC2HZ) key = AP_MSG_RTC;
LD B,(IX-2)
DEC B
JP PO,?0062
?0061:
LD (IX-2),28
JP LWRD ?0075
?0062:
; 232. else key = AP_MSG_CHARGING;
LD (IX-2),27
?0063:
; 233.
; 234. break;
JR ?0075
?0064:
; 235.
; 236.
; 237. case MSG_USB_STICK: //usb plugin, 等同按键
; 238. //output8(0xf4,input8(0x0f4)&0xF7); //set gio_c3 to low to cut battery
; 239. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 240. key_count = 1;
INC HL
LD (?0012),HL
; 241. key = AP_MSG_USB_PLUGIN;
LD (IX-2),26
; 242.
; 243. //开背光
; 244. if(g_light_time != 0)
LD A,(g_light_time)
OR A
JR Z,?0075
?0065:
; 245. {
; 246. Lightmodeset(TRUE);//开关背光(TRUE: 开, FALSE:关)
LD E,L
LD A,BYTE3 Lightmodeset
LD HL,LWRD Lightmodeset
CALL LWRD ?BANK_CALL_DIRECT_L08
; 247. g_light_flag = FALSE;
XOR A
LD (g_light_flag),A
?0066:
; 248. }
; 249. break;
JR ?0075
?0067:
; 250.
; 251. //#ifndef DEBUG
; 252. case MSG_LOW_LOPOWER: //low power, nmi 0.98v
; 253. DUMP("low power", 0);
; 254. key = AP_MSG_LOW_POWER_MY;
LD (IX-2),139
; 255. break;
JR ?0075
?0068:
; 256. //#endif
; 257.
; 258. case MSG_USB_UNSTICK: //ap 不识别的消息
; 259. case Msg_KeyNull: //没有按键
; 260. key = AP_KEY_NULL;
LD (IX-2),0
; 261. break;
JR ?0075
?0069:
; 262.
; 263. case Msg_KeyUnHold:
; 264. key = AP_MSG_UNLOCK;
; 265. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 266. key_count = 1;
INC HL
LD (?0012),HL
; 267. key_value = key;
LD A,24
JR ?0109
; 268. break;
?0070:
; 269.
; 270. case Msg_KeyHold:
; 271. //lock 后还会有up消息
; 272. key = AP_MSG_LOCK;
; 273. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 274. key_count = 1;
INC HL
LD (?0012),HL
; 275. key_value = key;
LD A,25
?0109:
LD (?0013),A
LD (IX-2),A
; 276. break;
JR ?0075
?0071:
; 277.
; 278. //
; 279. // case MSG_SD_IN:/*插卡状态*/
; 280. // key = AP_MSG_SD_IN;
; 281. // break;
; 282. //
; 283. // case MSG_SD_OUT:/*拨卡状态*/
; 284. // key = AP_MSG_SD_OUT;
; 285. // break;
; 286. //
; 287. default: //新的按键
; 288. g_rtc_counter = 0;
LD HL,0
LD (g_rtc_counter),HL
; 289. key_count = 1;
INC HL
LD (?0012),HL
; 290. key_value = key;
LD A,E
LD (?0013),A
; 291.
; 292. //开背光
; 293. if (!g_light_flag)
LD A,(g_light_flag)
OR A
JR NZ,?0073
?0072:
; 294. {
; 295. //如背灯没开,不理按键
; 296. key_count = 0;
DEC HL
LD (?0012),HL
; 297. g_rtc_counter = 0;
; 298. return NULL;
?0107:
LD L,0
; 299. }
JR ?0076
?0073:
; 300.
; 301. if(g_comval.KeyTone) //key tone add by mzh 2007.3.14
LD A,(g_comval+29)
OR A
JR Z,?0075
?0074:
; 302. sKY_Beep(g_comval.KeyTone);
LD DE,(g_comval+29)
CALL LWRD sKY_Beep
?0075:
?0036:
; 303. } //switch()
; 304. return key;
LD L,(IX-2)
; 305. }
?0076:
LD SP,IX
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
ap_set_event:
; 306.
; 307.
; 308. /*
; 309. ********************************************************************************
; 310. * Description : 设置事件发生标志
; 311. *
; 312. * Arguments : event, 事件集合
; 313. *
; 314. * Returns :
; 315. *
; 316. * Notes :
; 317. *
; 318. ********************************************************************************
; 319. */
; 320. void ap_set_event(WORD event)
; 321. {
PUSH DE
; 322. // g_ap_event |= event;
; 323. }
POP HL
JP LWRD ?BANK_FAST_LEAVE_L08
ap_get_event:
; 324.
; 325. /*
; 326. ********************************************************************************
; 327. * Description : 检测事件是否发生
; 328. *
; 329. * Arguments : event, 需要检测的事件集合
; 330. condition:
; 331. AP_EVENT_ALL: 所有事件发生,返回event,否则返回0
; 332. AP_EVENT_ANY: 任意事件发生,返回event,否则返回0
; 333. * Returns : event 按照 condition 指定的条件发生,返回系统事件的集合
; 334. 不满足条件, 返回0
; 335. *
; 336. * Notes :
; 337. *
; 338. ********************************************************************************
; 339. */
; 340. WORD ap_get_event(WORD event, WORD condition)
; 341. {
PUSH BC
PUSH DE
; 342. /*
; 343. if(condition == AP_EVENT_ALL)
; 344. {
; 345. if( (g_ap_event & event) == event) return g_ap_event;
; 346. else return 0;
; 347. }
; 348. else if(condition == AP_EVENT_ANY)
; 349. {
; 350. if( (g_ap_event & event) != 0) return g_ap_event;
; 351. else return 0;
; 352. }
; 353. else return 0;
; 354. */
; 355. }
POP HL
POP HL
JP LWRD ?BANK_FAST_LEAVE_L08
ap_sleep:
; 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. {
PUSH BC
PUSH IX
PUSH AF
PUSH DE
POP IX
; 388. unsigned char n=0; //rtc counter
LD HL,1
ADD HL,SP
LD (HL),0
?0078:
; 389. char key;
; 390.
; 391. while(1)
; 392. {
; 393. key = ap_get_message();
CALL LWRD ap_get_message
LD HL,0
ADD HL,SP
LD (HL),A
; 394. if(key == AP_MSG_RTC ||
; 395. key == AP_MSG_CHARGING ||
; 396. key == AP_MSG_WAIT_TIMEOUT) //sleep 时不管timeout
CP 28
JR Z,?0082
CP 27
JR Z,?0082
CP 30
JR NZ,?0081
?0082:
?0083:
?0080:
; 397. {
; 398. n++;
INC HL
INC (HL)
; 399. if(n >= half_sec) return 0;
LD L,(HL)
LD H,0
PUSH IX
POP BC
OR 128
SBC HL,BC
JP PO,?0111
XOR H
?0111:
JP M,?0078
?0084:
LD L,0
; 400. }
JR ?0091
?0085:
?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
XOR A
OR (HL)
JR Z,?0078
CP 24
JR Z,?0078
CP 56
JR Z,?0078
CP 25
JR Z,?0078
CP 57
JR Z,?0078
?0089:
?0090:
?0087:
; 406. {
; 407. continue;
?0088:
; 408. }
; 409. else
; 410. {
; 411. //here maybe hotkey
; 412. return ap_handle_hotkey(key);
LD E,A
CALL LWRD ap_handle_hotkey
LD L,A
; 413. }
?0091:
POP AF
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0086:
; 414. }
; 415.
; 416. }
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. {
PUSH DE
; 433. switch( key )
CALL LWRD ?C_V_SWITCH_L06
DEFW 9
DEFB 24
DEFB 25
DEFB 26
DEFB 29
DEFB 31
DEFB 49
DEFB 129
DEFB 139
DEFB 144
DEFW ?0101
DEFW ?0095
DEFW ?0093
DEFW ?0094
DEFW ?0096
DEFW ?0094
DEFW ?0094
DEFW ?0097
DEFW ?0098
DEFW ?0098
?0093:
; 434. {
; 435. case AP_MSG_LOW_POWER_MY:
; 436. return RESULT_STANDBYY;
LD L,202
; 437.
; 438. case AP_KEY_PLAY | AP_KEY_LONG: //长按play发standby
JR ?0102
?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;
LD L,2
; 444. case AP_KEY_MODE | AP_KEY_LONG: //长按menu进入main
JR ?0102
?0095:
; 445. return RESULT_MAIN;
LD L,10
; 446.
; 447. case AP_KEY_AB | AP_KEY_UP: //进入录音
JR ?0102
?0096:
; 448. return RESULT_RECORD;
LD L,9
; 449. case AP_MSG_USB_PLUGIN: //进入udisk 模式
JR ?0102
?0097:
; 450. return RESULT_UDISK;
LD L,4
; 451. case AP_MSG_LOCK: //locked
JR ?0102
?0098:
; 452. case AP_MSG_UNLOCK: //unlocked
; 453. if(ui_run_realtime) //实时模式不显示lock
LD A,(ui_run_realtime)
OR A
JR NZ,?0101
?0099:
; 454. {
; 455. //TODO: send lock message to message queue
; 456. return 0;
; 457. }
?0100:
; 458. else
; 459. {
; 460. ///-ui_show_lock(1); //这里不处理热键,防止嵌套
; 461. ui_show_lock(key - AP_MSG_UNLOCK);
LD A,E
ADD A,232
LD E,A
LD A,BYTE3 ui_show_lock
LD HL,LWRD ui_show_lock
CALL LWRD ?BANK_CALL_DIRECT_L08
; 462. return RESULT_REDRAW;
LD L,50
; 463. }
JR ?0102
?0101:
; 464. default:
; 465. //here just drop the key
; 466. return 0;
LD L,0
; 467. }
?0102:
POP AF
JP LWRD ?BANK_FAST_LEAVE_L08
?0092:
; 468. }
RSEG UDATA0
g_EarProtect_flag:
DEFS 1
EarProtectThreshold:
DEFS 1
g_autoswitch_time:
DEFS 2
RSEG IDATA0
g_decrease_time:
DEFS 1
g_half_hour_counter:
DEFS 2
g_autoswitch_counter:
DEFS 2
g_light_time:
DEFS 1
g_light_mode:
DEFS 1
g_contrast_num:
DEFS 1
g_sleep_time:
DEFS 2
g_standby_time:
DEFS 2
g_rtc_counter:
DEFS 2
g_light_flag:
DEFS 1
?0012:
DEFS 2
?0013:
DEFS 1
RSEG CDATA0
DEFB 0
DEFW 0
DEFW 0
DEFB 0
DEFB 0
DEFB 0
DEFW 0
DEFW 0
DEFW 0
DEFB 1
DEFW 0
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -