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 + -
显示快捷键?