ui_play.s01
来自「MP3 整个 SDK」· S01 代码 · 共 1,532 行 · 第 1/3 页
S01
1,532 行
NAME ui_play(17)
RSEG AP_UI_PLY(0)
PUBLIC BackupCurrentTime
EXTERN CaltimeFlag
PUBLIC DealForABGap
EXTERN DealKeyForPlayStatus
EXTERN DealMusicFileEnd
EXTERN Deal_Error_Playing
EXTERN DisInFBHead
PUBLIC FadeOut
EXTERN GetBattery
EXTERN PlayStatus
EXTERN RePlayStatus
PUBLIC RealDisplay
EXTERN RefreshMainScreen
EXTERN Scroll
EXTERN SelectCurMusic
EXTERN SetBackgdColor
EXTERN SetPenColor
PUBLIC ShowNowTime
PUBLIC Show_Bitrate
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
EXTERN g_result
EXTERN ifSelBuffToltalTimeFlag
EXTERN itoa_1
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 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
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.
; 14. #define IntCntValDef 10
; 15. extern bool g_FCexitflag;
; 16. extern char return_to_play;
; 17.
; 18. //char test_play;
; 19. void ErrReport(Play_status_t status);
; 20.
; 21. #pragma codeseg(AP_UI_PLY)
; 22.
; 23. #pragma memory=constseg(APC_UI_PLY)
; 24.
; 25.
; 26. #pragma memory=default
; 27.
; 28. extern struct TimeRateData_sav;
; 29. extern BYTE Bitrate_sav [];
; 30. extern BYTE g_OldSecTempBackup;
; 31. extern BYTE g_introCNT;
; 32.
; 33. extern const char mychar [];
; 34.
; 35. extern bool g_introCntMode; //是从头开始还是从中途开始,TRUE 为从头开始
; 36.
; 37. void FadeOut( bool DisMod );
; 38.
; 39.
; 40. int main_ResShowPic( WORD id, uchar x, uchar y );
; 41.
; 42. int DealKeyForPlayStatus( char key);
; 43. void DisInFBHead(char DisMod);//快退到头显示
; 44. int DealForDRMsong(void);
; 45. extern void Deal_Error_Playing(void);
; 46.
; 47. /*
; 48. ********************************************************************************
; 49. * int ui_play( void )
; 50. *
; 51. * Description : 显示时间,滚屏,AB闪
; 52. *
; 53. * Arguments : void
; 54. *
; 55. * Returns : void
; 56. *
; 57. * Notes :
; 58. *
; 59. ********************************************************************************
; 60. */
; 61. int ui_play( void )
; 62. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65526
; 63. //int key;
; 64. char key;
; 65. BYTE result;
; 66. //int i;
; 67. music_play_status_t status_buf;
; 68. PlayStatus = PlaySta;
LD A,2
LD (PlayStatus),A
; 69. RePlayStatus = NormalPlay;/* 播放状态 */
XOR A
LD (RePlayStatus),A
; 70. need_draw = TRUE;/* 需要画screen */
LD A,1
LD (need_draw),A
; 71. SetStopToPlayInterface();
XOR A
LD (ui_auto_update),A
LD HL,UpDisplayFlag
SET 7,(HL)
INC HL
LD A,(HL)
OR 252
LD (HL),A
; 72. g_FadeInStepFlag = FALSE;
XOR A
LD (g_FadeInStepFlag),A
?0003:
; 73.
; 74. while (1)
; 75. {
; 76. if (need_draw)
LD A,(need_draw)
OR A
JR Z,?0006
?0005:
; 77. {
; 78. RefreshMainScreen();
LD A,BYTE3 RefreshMainScreen
LD HL,LWRD RefreshMainScreen
CALL LWRD ?BANK_CALL_DIRECT_L08
; 79. need_draw = FALSE;
XOR A
LD (need_draw),A
?0006:
?0009:
; 80. }
; 81. do
; 82. {
; 83. // output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
; 84. key = ap_get_message(); //读键值
CALL LWRD ap_get_message
LD (IX-10),A
; 85. //这里是处理快退大文件时可能丢掉KEYUP键的问题
; 86. }while(((PlayStatus == FFPlaySta) || (PlayStatus == FBPlaySta))
; 87. &&(key!=0)
; 88. &&(key!=(AP_KEY_PREV | AP_KEY_UP))
; 89. &&(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:
; 90. 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 ?0022
DEFW ?0015
DEFW ?0015
DEFW ?0015
DEFW ?0015
DEFW ?0015
DEFW ?0015
DEFW ?0014
?0015:
; 91. {
; 92. case MSG_RTC2HZ://rtc
; 93. case AP_MSG_RTC:
; 94. // case MSG_BAT_V_CHG://charging & rtc
; 95. case AP_MSG_WAIT_TIMEOUT:
; 96. case AP_KEY_PLAY://当按下PLAY键时先不处理,可减少停止时的杂音
; 97. case AP_KEY_NEXT://当按下NEXT键时先不处理,可减少选下一首时的杂音
; 98. case AP_KEY_PREV://当按下PREV键时先不处理,可减少选上一首时的杂音
; 99.
; 100. // FlashMotived(PowerValue);
; 101.
; 102. key = ap_handle_hotkey(key);
CALL LWRD ap_handle_hotkey
LD (IX-10),A
; 103. if (key == RESULT_REDRAW)
CP 50
JR NZ,?0017
?0016:
; 104. {
; 105. SetFullInterface();
XOR A
LD (ui_auto_update),A
LD HL,UpDisplayFlag
LD A,(HL)
OR 193
LD (HL),A
INC HL
LD (HL),255
; 106. need_draw = TRUE;
LD A,1
LD (need_draw),A
JR ?0014
?0017:
; 107. }
; 108. else if (key != 0)
XOR A
OR (IX-10)
JR Z,?0014
?0019:
; 109. {
; 110. return key;
JR ?0026
; 111. }
?0020:
?0018:
; 112. break;
?0021:
; 113.
; 114. case AP_KEY_NULL://没按键
; 115. break;
?0022:
; 116.
; 117. default:
; 118. //调用其他按键处理,只有对应的键按了后才进入(此函数在别的BANK)
; 119. key = DealKeyForPlayStatus(key);
LD A,BYTE3 DealKeyForPlayStatus
LD HL,LWRD DealKeyForPlayStatus
CALL LWRD ?BANK_CALL_DIRECT_L08
; 120. //g_result = 0;
; 121. if (key != NULL)
INC L
DEC L
JR Z,?0014
?0023:
; 122. {
; 123. if (key == RESULT_UI_STOP)
LD A,L
CP 102
JP Z,?0153
?0025:
; 124. {
; 125. return NULL;
; 126. }
?0026:
; 127. else
; 128. {
; 129. return key;
LD L,A
LD H,0
; 130. }
JP LWRD ?0055
?0024:
; 131. }
; 132. break;
?0014:
; 133. }
; 134.
; 135. musicpSendCommand(MC_GETSTATUS, (int)(& status_buf));
LD HL,2
ADD HL,SP
CALL LWRD ?0170
; 136. //FlashMotived(PowerValue);
; 137.
; 138. 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
; 139.
; 140. if (status_buf.status == PLAYING_ERROR)
LD A,(IX-8)
CP 12
JR NZ,?0028
?0027:
; 141. {
; 142. Deal_Error_Playing();
LD A,BYTE3 Deal_Error_Playing
LD HL,LWRD Deal_Error_Playing
CALL LWRD ?BANK_CALL_DIRECT_L08
; 143. // wma_inf_t drminfbuff;
; 144. // if (musicpSendCommand(MC_GETINF, (int)&drminfbuff))
; 145. // {
; 146. //
; 147. // if (drminfbuff.drmmode == INF_DRMNOLICENSE)
; 148. // {
; 149. // DisplayErrMsg1(NOLICENS);//显示无licens
; 150. // }
; 151. // }
; 152. //
; 153. // else if ( (g_music_vars.location.disk == 'H')
; 154. // && (DRV_DetectUD(1) != 0x20) )
; 155. // {
; 156. // DisplayErrMsg(CARDPULL);//显示卡拔出
; 157. // }
; 158. // else
; 159. // {
; 160. // DisplayErrMsg(MFMTERR);//显示格式错
; 161. // }
; 162. // musicpSendCommand(MC_STOP, NULL);
; 163. // musicpSendCommand(MC_CLOSE, NULL);
; 164. // SetFullInterface();
; 165. return NULL;
JP LWRD ?0153
; 166. }
?0028:
; 167.
; 168.
; 169. if (status_buf.status == PLAYING_REACH_END)
CP 6
JR NZ,?0032
?0029:
; 170. {
; 171. g_result = DealMusicFileEnd(0);
CALL LWRD ?0169
LD (g_result),HL
; 172. if ( g_result != NULL )
LD A,L
OR H
JR NZ,?0156
?0031:
; 173. {
; 174. return g_result;
; 175. }
?0032:
?0030:
; 176. }
; 177.
; 178. //注,下面是为解决一种特殊情况而做出的特殊处理,在一般情况下可不分到头,到尾
; 179. // 标志,统一用 PLAYING_REACH_END 标志就可以了,因为可通过 PlayStatus
; 180. // 这个标志判断是快进还是快退,就可知道是到了文件头还是文件尾,但如果在
; 181. // 快退到差不多到头时停止快退,这时已发停止命令,但由于模块层在接收这个
; 182. // 命令后到真正停止快退要有一个时间差,如在这个时间差中到文件头,如还是
; 183. // 用 PLAYING_REACH_END 标志那就分不清是到头还是到尾,所以要加一个标志
; 184. // PLAYING_REACH_HEAD 表示是到头。
; 185. if (status_buf.status == PLAYING_REACH_HEAD)
LD A,(IX-8)
CP 14
JR NZ,?0039
?0033:
; 186. {
; 187. if (PlayStatus == PlaySta)
LD A,(PlayStatus)
DEC A
DEC A
JR NZ,?0036
?0035:
; 188. {
; 189. DisInFBHead( 0 );//到头显示
LD E,A
LD A,BYTE3 DisInFBHead
LD HL,LWRD DisInFBHead
CALL LWRD ?BANK_CALL_DIRECT_L08
; 190. SelectCurMusic();
LD A,BYTE3 SelectCurMusic
LD HL,LWRD SelectCurMusic
CALL LWRD ?BANK_CALL_DIRECT_L08
; 191. }
; 192. else
JR ?0039
?0036:
; 193. {
; 194. g_result = DealMusicFileEnd(0);
CALL LWRD ?0169
LD (g_result),HL
; 195. if ( g_result != NULL )
LD A,L
OR H
JR Z,?0039
?0038:
; 196. {
; 197. return g_result;
?0156:
; 198. }
JR ?0055
?0039:
?0037:
?0034:
; 199. }
; 200. }
; 201.
; 202. if (RePlayStatus == WaitSetBPointForAB)
LD A,(RePlayStatus)
DEC A
DEC A
JR NZ,?0049
?0040:
; 203. {
; 204. if (g_comval.ReplayMode)
LD A,(g_comval+13)
OR A
JR Z,?0049
?0042:
; 205. {
; 206. if ( (status_buf.signal == SIGNAL_REACH_V)
; 207. && (g_ABMinTimeCNT == 0) )//要大于AB最小时间
LD B,(IX-7)
DEC B
JR NZ,?0049
LD A,(g_ABMinTimeCNT)
OR A
JR NZ,?0049
?0047:
?0046:
?0044:
; 208. {
; 209. if ( musicpSendCommand(MC_SETA_B, SetBPoint) ) //set_v
LD C,2
LD E,65
CALL LWRD ?0171
INC L
DEC L
JR Z,?0049
?0048:
; 210. {
; 211. g_AVSetFlag = TRUE;//标志是用AV的方式设置B点的
LD A,1
LD (g_AVSetFlag),A
?0049:
?0045:
?0043:
?0041:
; 212. }
; 213. }
; 214. }
; 215. }
; 216.
; 217. if(return_to_play==0)
LD A,(return_to_play)
OR A
JR NZ,?0051
?0050:
; 218. g_result = RealDisplay();
LD A,BYTE3 RealDisplay
LD HL,LWRD RealDisplay
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_result),HL
; 219. else
JR ?0052
?0051:
; 220. return_to_play=0;
XOR A
LD (return_to_play),A
?0052:
; 221.
; 222. if(g_result == RESULT_UI_STOP)
LD HL,(g_result)
LD A,102
XOR L
OR H
JR NZ,?0054
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?