📄 ui_stop.s01
字号:
NAME ui_stop(17)
RSEG AP_UI_STP(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
EXTERN ChangeMusic
EXTERN CheckMusicType
EXTERN ClearTimePara
EXTERN GetBattery
EXTERN GetInformation
EXTERN PlayStatus
EXTERN RefreshMainScreen
EXTERN SetBackgdColor
EXTERN SetContrast
EXTERN ShowNowTime
EXTERN Totaltime
EXTERN UpdateFileSelector
EXTERN VMRead
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN ap_message_init
EXTERN ap_sleep
EXTERN fselGetLocation
EXTERN fselGetNextFile
EXTERN fselGetNo
EXTERN fselGetPrevFile
EXTERN fselGetTotal
EXTERN fselSetMode
EXTERN g_BatteryType
EXTERN g_TagInfoBuf
EXTERN g_TagInfoBuf1
EXTERN g_amv_vars
EXTERN g_autoswitch_counter
EXTERN g_changevolume
EXTERN g_comval
EXTERN g_currentMusicType
PUBLIC g_firstplay_flag
EXTERN g_from_browser
EXTERN g_langid
EXTERN g_menu_active
EXTERN g_musicamount
EXTERN g_musicsequence
PUBLIC g_rSetPlayStatus
EXTERN g_result
PUBLIC g_volcounter
EXTERN main_ResShowPic
EXTERN make_dirname
EXTERN need_draw
PUBLIC time_cmp
EXTERN ui_play
EXTERN ui_run_realtime
EXTERN ui_show_batt
EXTERN ui_show_msg
EXTERN ui_show_vol
PUBLIC ui_stop
PUBLIC ui_stop_loop
EXTERN ui_stop_menu
EXTERN vol_callback
EXTERN ?CLZ80B_4_04_L00
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG AP_UI_STP
time_cmp:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * This program demostrates how to build an AP
; 5. *
; 6. * (c) Copyright Actions Co,Ld.
; 7. *
; 8. * $Id: ui_stop.c,v 1.1.1.1 2006/05/22 03:24:02 selina Exp $
; 9. *******************************************************************************
; 10. */
; 11. #include "ap_amv.h"
; 12. #include "define.h"
; 13.
; 14. bool g_firstplay_flag = TRUE;
; 15. extern comval_t g_comval; //系统变量,ap不能更改
; 16. extern bool ActiveDriveOK;
; 17. extern bool g_menu_active; //为1进入MENU菜单,主要用来丢掉从目录选择时长按mode键返回
; 18. int ui_stop_loop(void);
; 19. extern void make_dirname(void);
; 20. extern int g_autoswitch_counter;
; 21.
; 22. char g_volcounter=0;
; 23. bool g_rSetPlayStatus = FALSE;
; 24. //======================================================================================
; 25. //RESULT_CURR_UI: 还要处在当前界面
; 26. //RESULT_UI_STOP: 到UI_STOP界面(因现在就是UI_STOP界面,所以同上)
; 27. //RESULT_LAST_UI: 到上一级界面
; 28. //--------------------------------------------------------------------------------------
; 29. #pragma codeseg(AP_UI_STP)
; 30.
; 31. int time_cmp(const AmvFileBreakPntInfor *time1, const time_t *time2)
; 32. {
PUSH IY
PUSH IX
PUSH DE
POP IX
PUSH BC
POP IY
; 33. if(time1->TimeHou == time2->hour)
LD A,(BC)
LD B,A
LD HL,6
ADD HL,DE
LD A,(HL)
CP B
JR NZ,?0003
?0002:
; 34. {
; 35. if(time1->TimeMin == time2->minute)
LD A,(IX+5)
CP (IY+1)
JR NZ,?0005
?0004:
; 36. {
; 37. if(time1->TimeSec == time2->second)
LD A,(IX+4)
CP (IY+2)
JR NZ,?0007
?0006:
; 38. {
; 39. return 0;
LD HL,0
; 40. }
JR ?0008
?0007:
; 41. else
; 42. {
; 43. return ((int)(time1->TimeSec) - time2->second);
LD C,(IY+2)
LD B,0
LD L,(IX+4)
JR ?0098
; 44. }
?0005:
; 45. }
; 46. else
; 47. {
; 48. return ((int)(time1->TimeMin) - time2->minute);
LD C,(IY+1)
LD B,0
LD L,(IX+5)
JR ?0098
; 49. }
?0003:
; 50. }
; 51. else
; 52. {
; 53. return ((int)(time1->TimeHou) - time2->hour);
LD C,(IY+0)
LD B,0
LD L,(IX+6)
?0098:
LD H,B
AND A
SBC HL,BC
; 54. }
?0008:
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
; 55. }
ui_stop:
; 56.
; 57. int ui_stop(void)
; 58. {
PUSH BC
PUSH DE
; 59. ap_message_init(NULL);//开始算STANDBY 时间
CALL LWRD ?0122
; 60. g_menu_active=TRUE;
LD A,1
LD (g_menu_active),A
?0011:
; 61. do
; 62. {
; 63. if (UpdateFileSelector() == 0)
LD A,BYTE3 UpdateFileSelector
LD HL,LWRD UpdateFileSelector
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
OR H
JP Z,?0101
?0012:
; 64. {
; 65. return 0;
; 66. }
?0013:
; 67.
; 68.
; 69. g_musicamount = FSELGetTotal();
LD A,BYTE3 fselGetTotal
LD HL,LWRD fselGetTotal
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_musicamount),A
; 70. if(g_musicamount==0)
OR A
JR NZ,?0015
?0014:
?0017:
; 71. {
; 72. // ui_show_msg (MFILEOUT, MFILEOUT, g_comval.langid);
; 73. while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
CALL LWRD ap_get_message
OR A
JR NZ,?0014
?0018:
?0016:
; 74. return ui_show_msg (DFILEOUT, DFILEOUT, g_langid);
LD BC,(g_langid)
LD B,A
PUSH BC
LD BC,628
LD E,C
LD D,B
LD A,BYTE3 ui_show_msg
LD HL,LWRD ui_show_msg
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 75. }
JP LWRD ?0022
?0015:
; 76.
; 77. g_musicsequence = FSELGetNo();
LD A,BYTE3 fselGetNo
LD HL,LWRD fselGetNo
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_musicsequence),A
; 78. FSELSetMode(FSEL_ALL_REPEATALL);
LD E,4
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
; 79. fselGetLocation(& g_amv_vars.location); //add by ybfu 2004-12-22 15:26
CALL LWRD ?0128
; 80. make_dirname();
LD A,BYTE3 make_dirname
LD HL,LWRD make_dirname
CALL LWRD ?BANK_CALL_DIRECT_L08
; 81. g_currentMusicType = CheckMusicType(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 CheckMusicType
LD HL,LWRD CheckMusicType
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
LD (g_currentMusicType),A
; 82.
; 83. g_result = FSELGetNext(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 fselGetNextFile
LD HL,LWRD fselGetNextFile
CALL LWRD ?BANK_CALL_DIRECT_L08
LD H,0
; 84. fselGetLocation(& g_amv_vars.location);
CALL LWRD ?0129
; 85. GetInformation(); //取文件信息
CALL LWRD ?0124
; 86. memcpy(g_TagInfoBuf1, g_TagInfoBuf, 20);
; 87. //g_TagInfoBuf1[18]=0;
; 88. g_TagInfoBuf1[20]=0;
; 89. g_result = FSELGetPrev(g_amv_vars.location.filename);
LD DE,g_amv_vars+31
LD A,BYTE3 fselGetPrevFile
LD HL,LWRD fselGetPrevFile
CALL LWRD ?BANK_CALL_DIRECT_L08
LD H,B
; 90. fselGetLocation(& g_amv_vars.location);
CALL LWRD ?0129
; 91. GetInformation(); //取文件信息
CALL LWRD ?0125
; 92.
; 93. PlayStatus = StopSta;
XOR A
LD (PlayStatus),A
; 94. need_draw = TRUE;
LD A,1
LD (need_draw),A
; 95. FSELSetMode(g_amv_vars.repeat_mode);
LD DE,(g_amv_vars+3)
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
; 96. g_result = ui_stop_loop();
LD A,BYTE3 ui_stop_loop
LD HL,LWRD ui_stop_loop
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_result),HL
; 97.
; 98. }while( (g_result == RESULT_CURR_UI)
; 99. || (g_result == RESULT_UI_STOP)
; 100. || (g_result == RESULT_UI_STOP2) );//还保持在ui_stop界面
LD A,L
OR H
JP Z,?0011
LD A,102
XOR L
OR H
JP Z,?0011
LD A,103
XOR L
OR H
JP Z,?0011
?0009:
; 101. if (g_result == RESULT_LAST_UI)
LD A,101
XOR L
OR H
JR NZ,?0022
?0021:
; 102. {
; 103. return NULL;//不带参数回到上一级
?0101:
LD HL,0
; 104. }
?0022:
; 105. return g_result;//带参数回到上一级
; 106. }
?0023:
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0122:
LD DE,0
?0123:
LD A,BYTE3 ap_message_init
LD HL,LWRD ap_message_init
JP LWRD ?BANK_CALL_DIRECT_L08
?0124:
LD A,BYTE3 GetInformation
LD HL,LWRD GetInformation
CALL LWRD ?BANK_CALL_DIRECT_L08
LD BC,20
LD DE,g_TagInfoBuf1
LD HL,g_TagInfoBuf
LDIR
XOR A
LD (g_TagInfoBuf1+20),A
RET
?0126:
LD E,4
?0127:
LD A,BYTE3 ChangeMusic
LD HL,LWRD ChangeMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
LD H,0
LD (g_result),HL
?0125:
LD A,BYTE3 GetInformation
LD HL,LWRD GetInformation
JP LWRD ?BANK_CALL_DIRECT_L08
?0129:
LD (g_result),HL
?0128:
LD DE,g_amv_vars+5
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
JP LWRD ?BANK_CALL_DIRECT_L08
ui_stop_loop:
; 107. //======================================================================================
; 108.
; 109. int ui_stop_loop()
; 110. {
PUSH BC
PUSH DE
PUSH AF
; 111. char key;
; 112. int result;
; 113.
; 114. if(time_cmp(&g_amv_vars.amvfilebreakpoint,
; 115. &Totaltime) > 0)
LD BC,Totaltime
LD DE,g_amv_vars+48
LD A,BYTE3 time_cmp
LD HL,LWRD time_cmp
CALL LWRD ?BANK_CALL_DIRECT_L08
LD C,L
LD B,H
LD HL,0
OR 128
SBC HL,BC
JP PO,?0113
XOR H
?0113:
JP P,?0025
?0024:
; 116. {
; 117. ClearTimePara();//时间断点参数从0开始
LD A,BYTE3 ClearTimePara
LD HL,LWRD ClearTimePara
CALL LWRD ?BANK_CALL_DIRECT_L08
?0025:
?0027:
; 118. }
; 119.
; 120. while (1)
; 121. {
; 122. if (need_draw)
LD A,(need_draw)
OR A
JR Z,?0030
?0029:
; 123. {
; 124. RefreshMainScreen();
LD A,BYTE3 RefreshMainScreen
LD HL,LWRD RefreshMainScreen
CALL LWRD ?BANK_CALL_DIRECT_L08
; 125. need_draw = FALSE;
XOR A
LD (need_draw),A
?0030:
; 126. }
; 127.
; 128. key = ap_get_message();
CALL LWRD ap_get_message
LD HL,0
ADD HL,SP
LD (HL),A
; 129. if(g_from_browser)
LD A,(g_from_browser)
OR A
JR Z,?0032
?0031:
; 130. {
; 131. key = (AP_KEY_PLAY | AP_KEY_UP);
; 132. g_from_browser = FALSE;
XOR A
LD (g_from_browser),A
LD (HL),33
?0032:
; 133. }
; 134.
; 135. switch (key)
LD E,(HL)
CALL LWRD ?C_V_SWITCH_L06
DEFW 16
DEFB 3
DEFB 4
DEFB 5
DEFB 6
DEFB 16
DEFB 27
DEFB 28
DEFB 33
DEFB 37
DEFB 38
DEFB 48
DEFB 67
DEFB 68
DEFB 69
DEFB 70
DEFB 129
DEFW ?0088
DEFW ?0034
DEFW ?0067
DEFW ?0057
DEFW ?0077
DEFW ?0071
DEFW ?0046
DEFW ?0063
DEFW ?0053
DEFW ?0035
DEFW ?0083
DEFW ?0083
DEFW ?0048
DEFW ?0067
DEFW ?0057
DEFW ?0077
DEFW ?0071
?0034:
; 136. {
; 137. case AP_KEY_PLAY | AP_KEY_LONG:
; 138. return RESULT_STANDBY;
LD HL,2
; 139. break;
JP LWRD ?0094
?0035:
; 140.
; 141. case AP_KEY_PLAY | AP_KEY_UP:
; 142. ui_run_realtime = TRUE;
LD A,1
LD (ui_run_realtime),A
; 143. #ifdef EAR_PROTECT
; 144. if (g_firstplay_flag)
LD A,(g_firstplay_flag)
OR A
JR Z,?0037
?0036:
; 145. {
; 146. g_autoswitch_counter = 0;
LD HL,0
LD (g_autoswitch_counter),HL
; 147. g_firstplay_flag = FALSE;
XOR A
LD (g_firstplay_flag),A
?0037:
; 148. }
; 149. #endif
; 150. //LightOnOff(1);
; 151.
; 152. //byte tempReg4f;
; 153. VMRead(& g_comval, VM_SYSTEM, sizeof(g_comval));
LD HL,32
PUSH HL
LD BC,512
LD DE,g_comval
CALL LWRD VMRead
POP HL
; 154. g_comval.LightTime = 0;
XOR A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -