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