ui_play.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 1,535 行 · 第 1/3 页
S01
1,535 行
NAME ui_play(17)
RSEG AP_UI_PLY(0)
RSEG CSTR(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
PUBLIC BackupCurrentTime
EXTERN CaltimeFlag
PUBLIC DealForABGap
EXTERN DealKeyForPlayStatus
EXTERN DealMusicFileEnd
EXTERN Deal_Error_Playing
EXTERN DisInFBHead
EXTERN GetBattery
EXTERN MusicEditSelStatus
EXTERN MusicEditStatus
EXTERN PlayStatus
EXTERN RePlayStatus
PUBLIC RealDisplay
EXTERN RefreshMainScreen
EXTERN Scroll
EXTERN SelectCurMusic
EXTERN SetBackgdColor
EXTERN SetPenColor
PUBLIC ShowNowTime
EXTERN TimeRateData_sav
EXTERN UpDisplayFlag
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN apepSendCommand
EXTERN g_2HZFlag
EXTERN g_2HZ_CNT
EXTERN g_ABMinTimeCNT
EXTERN g_AVSetFlag
EXTERN g_FCexitflag
EXTERN g_FadeInStepFlag
EXTERN g_OldSecTempBackup
EXTERN g_ReplayTimeCNT
EXTERN g_ScrollFlag
EXTERN g_TagInfoBuf
EXTERN g_comval
EXTERN g_currentMusicType
EXTERN g_introCNT
EXTERN g_introCntMode
EXTERN g_music_vars
PUBLIC g_rSetPlayStatus
EXTERN g_result
EXTERN g_volcounter
EXTERN ifSelBuffToltalTimeFlag
EXTERN itoa_2
EXTERN main_ResShowPic
EXTERN mp3pSendCommand
PUBLIC musicpSendCommand
EXTERN musicpSendCommand_bank
EXTERN need_draw
EXTERN oggpSendCommand
EXTERN return_to_play
EXTERN savenum
EXTERN temp_buffer
EXTERN ui_auto_update
PUBLIC ui_play
EXTERN ui_show_batt
EXTERN ui_show_d
EXTERN ui_show_vol
EXTERN wmapSendCommand
EXTERN ?CLZ80B_4_04_L00
EXTERN ?S_MUL_L02
EXTERN ?SS_CMP_L02
EXTERN ?L_MUL_L03
EXTERN ?SL_DIV_L03
EXTERN ?C_S_SWITCH_L06
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_PARM_DIRECT_L09
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?STRCAT_L11
RSEG AP_UI_PLY
ui_play:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * voice player stop program.
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_play.c,v 1.2 2006/06/26 01:14:24 tangwh Exp $
; 10. *******************************************************************************
; 11. */
; 12. #include "ap_music.h"
; 13. #include "define.h"
; 14.
; 15. #define IntCntValDef 10
; 16. extern bool g_FCexitflag;
; 17. extern char return_to_play;
; 18. void ErrReport(Play_status_t status);
; 19.
; 20. #pragma codeseg(AP_UI_PLY)
; 21.
; 22. extern struct TimeRateData_sav;
; 23. extern BYTE Bitrate_sav [];
; 24. extern BYTE g_OldSecTempBackup;
; 25. extern BYTE g_introCNT;
; 26.
; 27. extern const char mychar [];
; 28.
; 29. extern bool g_introCntMode; //是从头开始还是从中途开始,TRUE 为从头开始
; 30.
; 31. extern EMU_MusicEditSelStatus MusicEditSelStatus; //music edit add by mzh 2007.1.19
; 32. extern EMU_MusicEditStatus MusicEditStatus; //music edit add by mzh 2007.1.19
; 33. void FadeOut( bool DisMod );
; 34.
; 35.
; 36. int main_ResShowPic( WORD id, uchar x, uchar y );
; 37.
; 38. int DealKeyForPlayStatus( char key);
; 39. void DisInFBHead(char DisMod);//快退到头显示
; 40. int DealForDRMsong(void);
; 41. extern void Deal_Error_Playing(void);
; 42.
; 43. bool g_rSetPlayStatus = FALSE;
; 44. extern char g_volcounter;
; 45. /*
; 46. ********************************************************************************
; 47. * int ui_play( void )
; 48. *
; 49. * Description : 显示时间,滚屏,AB闪
; 50. *
; 51. * Arguments : void
; 52. *
; 53. * Returns : void
; 54. *
; 55. * Notes :
; 56. *
; 57. ********************************************************************************
; 58. */
; 59. int ui_play( void )
; 60. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65526
; 61. //int key;
; 62. char key;
; 63. BYTE result;
; 64. //int i;
; 65. music_play_status_t status_buf;
; 66. PlayStatus = PlaySta;
LD A,2
LD (PlayStatus),A
; 67. RePlayStatus = NormalPlay;/* 播放状态 */
XOR A
LD (RePlayStatus),A
; 68. need_draw = TRUE;/* 需要画screen */
LD A,1
LD (need_draw),A
; 69. SetStopToPlayInterface();
XOR A
LD (ui_auto_update),A
LD HL,UpDisplayFlag
SET 7,(HL)
INC HL
LD A,(HL)
OR 252
LD (HL),A
; 70. g_FadeInStepFlag = FALSE;
XOR A
LD (g_FadeInStepFlag),A
?0003:
; 71.
; 72. while (1)
; 73. {
; 74. if (need_draw)
LD A,(need_draw)
OR A
JR Z,?0006
?0005:
; 75. {
; 76. RefreshMainScreen();
LD A,BYTE3 RefreshMainScreen
LD HL,LWRD RefreshMainScreen
CALL LWRD ?BANK_CALL_DIRECT_L08
; 77. need_draw = FALSE;
XOR A
LD (need_draw),A
?0006:
?0009:
; 78. }
; 79.
; 80. do
; 81. {
; 82. //output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
; 83. key = ap_get_message(); //读键值
CALL LWRD ap_get_message
LD (IX-10),A
; 84.
; 85. #ifndef __6KEYMODE__
; 86. if(g_volcounter > 0) //Jerry Xie Add for test
; 87. break;
; 88. #endif
; 89.
; 90. //这里是处理快退大文件时可能丢掉KEYUP键的问题
; 91. }while(((PlayStatus == FFPlaySta) || (PlayStatus == FBPlaySta))
; 92. &&(key!=0)
; 93. &&(key!=(AP_KEY_PREV | AP_KEY_UP))
; 94. &&(key!=(AP_KEY_NEXT | AP_KEY_UP)));
LD A,(PlayStatus)
CP 3
JR Z,?0010
CP 4
JR NZ,?0007
?0010:
?0011:
XOR A
OR (IX-10)
JR Z,?0007
CP 37
JR Z,?0007
CP 38
JR NZ,?0006
?0007:
; 95. switch (key)
LD E,(IX-10)
CALL LWRD ?C_V_SWITCH_L06
DEFW 7
DEFB 0
DEFB 1
DEFB 5
DEFB 6
DEFB 28
DEFB 30
DEFB 128
DEFW ?0029
DEFW ?0015
DEFW ?0021
DEFW ?0015
DEFW ?0021
DEFW ?0021
DEFW ?0021
DEFW ?0014
?0015:
; 96. {
; 97. case MSG_RTC2HZ://rtc
; 98. case AP_MSG_RTC:
; 99. if(g_volcounter>0)
LD A,(g_volcounter)
OR A
JR Z,?0019
?0016:
; 100. {
; 101. g_volcounter--;
LD HL,g_volcounter
DEC (HL)
; 102. if(g_volcounter==0)
LD A,(g_volcounter)
OR A
JR NZ,?0019
?0018:
; 103. g_rSetPlayStatus = TRUE;
LD A,1
LD (g_rSetPlayStatus),A
?0019:
?0017:
; 104. }
; 105. if(g_comval.EarProtect_flag)
LD A,(g_comval+24)
OR A
JR Z,?0021
?0020:
; 106. {
; 107. g_music_vars.volume = input8(0x87)&0x1f;
IN A,(135)
AND 31
LD (g_music_vars),A
; 108. ui_show_vol(g_music_vars.volume);
LD DE,(g_music_vars)
LD A,BYTE3 ui_show_vol
LD HL,LWRD ui_show_vol
CALL LWRD ?BANK_CALL_DIRECT_L08
?0021:
?0022:
; 109. }
; 110. case AP_MSG_WAIT_TIMEOUT:
; 111. case AP_KEY_PLAY://当按下PLAY键时先不处理,可减少停止时的杂音
; 112. case AP_KEY_NEXT://当按下NEXT键时先不处理,可减少选下一首时的杂音
; 113. case AP_KEY_PREV://当按下PREV键时先不处理,可减少选上一首时的杂音
; 114.
; 115. key = ap_handle_hotkey(key);
LD E,(IX-10)
CALL LWRD ap_handle_hotkey
LD (IX-10),A
; 116. if (key == RESULT_REDRAW)
CP 50
JR NZ,?0024
?0023:
; 117. {
; 118. SetFullInterface();
XOR A
LD (ui_auto_update),A
LD HL,UpDisplayFlag
LD A,(HL)
OR 193
LD (HL),A
INC HL
LD (HL),255
; 119. need_draw = TRUE;
LD A,1
LD (need_draw),A
JR ?0014
?0024:
; 120. }
; 121. else if (key != 0)
XOR A
OR (IX-10)
JR Z,?0014
?0026:
; 122. {
; 123. return key;
JR ?0033
; 124. }
?0027:
?0025:
; 125. break;
?0028:
; 126.
; 127. case AP_KEY_NULL://没按键
; 128. break;
?0029:
; 129.
; 130. default:
; 131. //调用其他按键处理,只有对应的键按了后才进入(此函数在别的BANK)
; 132. key = DealKeyForPlayStatus(key);
LD A,BYTE3 DealKeyForPlayStatus
LD HL,LWRD DealKeyForPlayStatus
CALL LWRD ?BANK_CALL_DIRECT_L08
; 133. if (key != NULL)
INC L
DEC L
JR Z,?0014
?0030:
; 134. {
; 135. if (key == RESULT_UI_STOP || key == RESULT_LIST) //test
LD A,L
CP 102
JR Z,?0034
CP 105
JR NZ,?0033
?0034:
?0035:
?0032:
; 136. {
; 137. return NULL;
JP LWRD ?0162
; 138. }
?0033:
; 139. else
; 140. {
; 141. return key;
LD L,A
LD H,0
; 142. }
JP LWRD ?0064
?0031:
; 143. }
; 144. break;
?0014:
; 145. }
; 146.
; 147. musicpSendCommand(MC_GETSTATUS, (int)(& status_buf));
LD HL,2
ADD HL,SP
CALL LWRD ?0186
; 148.
; 149. DealForABGap(& status_buf);
LD HL,2
ADD HL,SP
EX DE,HL
LD A,BYTE3 DealForABGap
LD HL,LWRD DealForABGap
CALL LWRD ?BANK_CALL_DIRECT_L08
; 150.
; 151. if (status_buf.status == PLAYING_ERROR)
LD A,(IX-8)
CP 12
JR NZ,?0037
?0036:
; 152. {
; 153. Deal_Error_Playing();
LD A,BYTE3 Deal_Error_Playing
LD HL,LWRD Deal_Error_Playing
CALL LWRD ?BANK_CALL_DIRECT_L08
; 154. return NULL;
JP LWRD ?0162
; 155. }
?0037:
; 156.
; 157.
; 158. if (status_buf.status == PLAYING_REACH_END)
CP 6
JR NZ,?0041
?0038:
; 159. {
; 160. MusicEditSelStatus=MusicEditSelSta_NoSel;
XOR A
LD (MusicEditSelStatus),A
; 161. MusicEditStatus=MusicEditSta_NoFun;
LD (MusicEditStatus),A
; 162. g_result = DealMusicFileEnd(0);
LD E,A
CALL LWRD ?0184
LD (g_result),HL
; 163. if ( g_result != NULL )
LD A,L
OR H
JR NZ,?0165
?0040:
; 164. {
; 165. return g_result;
; 166. }
?0041:
?0039:
; 167. }
; 168.
; 169. //注,下面是为解决一种特殊情况而做出的特殊处理,在一般情况下可不分到头,到尾
; 170. // 标志,统一用 PLAYING_REACH_END 标志就可以了,因为可通过 PlayStatus
; 171. // 这个标志判断是快进还是快退,就可知道是到了文件头还是文件尾,但如果在
; 172. // 快退到差不多到头时停止快退,这时已发停止命令,但由于模块层在接收这个
; 173. // 命令后到真正停止快退要有一个时间差,如在这个时间差中到文件头,如还是
; 174. // 用 PLAYING_REACH_END 标志那就分不清是到头还是到尾,所以要加一个标志
; 175. // PLAYING_REACH_HEAD 表示是到头。
; 176. if (status_buf.status == PLAYING_REACH_HEAD)
LD A,(IX-8)
CP 14
JR NZ,?0048
?0042:
; 177. {
; 178. if (PlayStatus == PlaySta)
LD A,(PlayStatus)
DEC A
DEC A
JR NZ,?0045
?0044:
; 179. {
; 180. DisInFBHead( 0 );//到头显示
LD E,A
LD A,BYTE3 DisInFBHead
LD HL,LWRD DisInFBHead
CALL LWRD ?BANK_CALL_DIRECT_L08
; 181. SelectCurMusic();
LD A,BYTE3 SelectCurMusic
LD HL,LWRD SelectCurMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
; 182. }
; 183. else
JR ?0048
?0045:
; 184. {
; 185. g_result = DealMusicFileEnd(0);
CALL LWRD ?0185
LD (g_result),HL
; 186. if ( g_result != NULL )
LD A,L
OR H
JR Z,?0048
?0047:
; 187. {
; 188. return g_result;
?0165:
; 189. }
JR ?0064
?0048:
?0046:
?0043:
; 190. }
; 191. }
; 192.
; 193. if (RePlayStatus == WaitSetBPointForAB)
LD A,(RePlayStatus)
DEC A
DEC A
JR NZ,?0058
?0049:
; 194. {
; 195. if (g_comval.ReplayMode)
LD A,(g_comval+13)
OR A
JR Z,?0058
?0051:
; 196. {
; 197. if ( (status_buf.signal == SIGNAL_REACH_V)
; 198. && (g_ABMinTimeCNT == 0) )//要大于AB最小时间
LD B,(IX-7)
DEC B
JR NZ,?0058
LD A,(g_ABMinTimeCNT)
OR A
JR NZ,?0058
?0056:
?0055:
?0053:
; 199. {
; 200. if ( musicpSendCommand(MC_SETA_B, SetBPoint) ) //set_v
LD C,2
LD E,65
CALL LWRD ?0187
INC L
DEC L
JR Z,?0058
?0057:
; 201. {
; 202. g_AVSetFlag = TRUE;//标志是用AV的方式设置B点的
LD A,1
LD (g_AVSetFlag),A
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?