main.s01

来自「MP3 整个 SDK」· S01 代码 · 共 1,338 行 · 第 1/2 页

S01
1,338
字号
	NAME	main(17)
	RSEG	CODE(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	UDATA0(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	EXTERN	AutoSearchHandle
	EXTERN	ClearScreen
	EXTERN	DRV_ActiveUD
	PUBLIC	FMStationTab
	PUBLIC	FMStatus
	PUBLIC	FMStatusJP
	PUBLIC	FMStatusUS
	PUBLIC	FMdeal
	PUBLIC	Freqtab
	EXTERN	GetBattery
	EXTERN	GetDefaultComval
	PUBLIC	MY_DUMP
	EXTERN	PutS
	EXTERN	ResClose
	EXTERN	ResOpen
	EXTERN	ResShowMultiString
	EXTERN	SearchHandle
	EXTERN	SetTextPos
	EXTERN	ShowFreqInFM
	PUBLIC	TimeCount
	EXTERN	UpdateScreen
	PUBLIC	Updateflag
	EXTERN	VMRead
	EXTERN	VMWrite
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	ap_message_init
	EXTERN	ap_sleep
	PUBLIC	clrregion
	EXTERN	fmSendCommand
	PUBLIC	fmdataflag
	PUBLIC	g_comval
	PUBLIC	g_list
	EXTERN	itoa_4
	PUBLIC	main
	PUBLIC	radio_param
	EXTERN	res_fp
	PUBLIC	string
	EXTERN	ui_popup_list
	EXTERN	ui_show_batt
	EXTERN	ui_show_volfm
	PUBLIC	volmuteflag
	PUBLIC	volume_callback
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?S_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?STRCPY_L11
	EXTERN	?MEMCMP_L11
	RSEG	CODE
volume_callback:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        main ap of sdk 3.0
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.
; 7.	*             All Right Reserved
; 8.	*
; 9.	*  $Id: main.c,v 1.1.1.1 2006/05/22 03:24:00 selina Exp $
; 10.	*******************************************************************************
; 11.	*/
; 12.	#include "ap_radio.h"
; 13.	//#include "mem.h"
; 14.	#include "actos.h"
; 15.	
; 16.	#define OpenFMPower1() output8(0xf8,input8(0xf8)|0x02)    //enable GPIO_E1
; 17.	#define CloseFMPower1() output8(0xf8,input8(0xf8)&0xfd)    //disable GPIO_E1
; 18.	#define OpenFMPower2() output8(0xfa,input8(0xfa)&0xfd)       //set GPIO_E1 o 0
; 19.	#define CloseFMPower2() output8(0xfa,input8(0xfa)|0x02)    //set GPIO_E1 to 1
; 20.	int TimeCount;
; 21.	FMRADIO_param_t radio_param;
; 22.	//slider_t     slider;
; 23.	region_t     clrregion;
; 24.	//function_menu_t     menu;                    //菜单结构体
; 25.	pop_up_list_t g_list;
; 26.	comval_t    g_comval;
; 27.	char    Updateflag;           //刷新标志
; 28.	    //电台频率对照表(注:频率范围87M-108M(US)或76M-90M(Japan),以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
; 29.	    WORD     FMStationTab[40];
; 30.	    fm_play_status_t    FMStatus;            //当前电台信息,8 bytes
; 31.	    fm_play_status_t    FMStatusUS;            //US电台信息暂存,8 bytes
; 32.	    fm_play_status_t    FMStatusJP;           //Japan电台信息暂存,8bytes
; 33.	    char    fmdataflag[3];                    //第一次进FM标志,3 bytes
; 34.	    char    Freqtab[10];
; 35.	
; 36.	
; 37.	
; 38.	    const WORD string[] = {FMENU1, FMENU15, FMENU2, FMENU3, FMENU16, FMENU4, FMENU5,FMENU6};   //FMENU15:电台录音 by ccm
; 39.	//函数定义
; 40.	int    SearchHandle(BYTE Direct);                //自动搜索处理,Direct=10,NEXT,=20,LAST
; 41.	int    AutoSearchHandle(BYTE Direct);
; 42.	int     FMdeal();                                //FM应用的处理
; 43.	void    ShowFreqInFM();                        //FM主界面显示
; 44.	bool     Search_Show(FM_direct_t Direct);    //自动搜台时的显示
; 45.	bool   volmuteflag=0;              //静音标志
; 46.	void    volume_callback(int Vol)            //音量设置的CALLBACK函数
; 47.	{
	PUSH	BC
	PUSH	DE
; 48.	//实时改变音量的值
; 49.	    fmSendCommand(MC_SETVOLUME,Vol);
	LD	C,E
	LD	B,D
	LD	E,64
	CALL	LWRD ?0169
; 50.	}
	POP	HL
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0170:
	LD	E,12
?0169:
	LD	A,BYTE3 fmSendCommand
?0171:
	LD	HL,LWRD fmSendCommand
	JP	LWRD ?BANK_CALL_DIRECT_L08
MY_DUMP:
; 51.	
; 52.	
; 53.	void MY_DUMP(char *string, int value)
; 54.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 55.	    char dump_buf[6];
; 56.	        dump_buf[0] = ',';
	LD	HL,0
	ADD	HL,SP
	LD	(HL),44
; 57.	        SetTextPos(0, 16);
	LD	C,16
	LD	E,0
	CALL	LWRD SetTextPos
; 58.	        PutS((string), -1);
	LD	C,255
	LD	HL,6
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD PutS
; 59.	        itoa_4((value), &dump_buf[1]);
	LD	HL,0
	ADD	HL,SP
	LD	BC,1
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,8
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 itoa_4
	LD	HL,LWRD itoa_4
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 60.	        dump_buf[5] = '>';
	LD	HL,5
	ADD	HL,SP
	LD	(HL),62
; 61.	
; 62.	        PutS(dump_buf, 6);
	LD	C,6
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD PutS
; 63.	        UpdateScreen(NULL);
	LD	DE,0
	CALL	LWRD UpdateScreen
?0003:
; 64.	        while( ap_get_message() != (AP_KEY_PLAY| AP_KEY_UP)) {;}
	CALL	LWRD ap_get_message
	CP	33
	JR	NZ,?0003
?0004:
; 65.	}
?0002:
	LD	HL,10
	ADD	HL,SP
	LD	SP,HL
	JP	LWRD ?BANK_FAST_LEAVE_L08
main:
; 66.	
; 67.	#define OpenFM()
; 68.	int main(int param)
; 69.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	PUSH	DE
	PUSH	AF
; 70.	    int    result;
; 71.	
; 72.	    //Open VCCOUT for FM Module. by ccm
; 73.	    int i,j;
; 74.	    TimeCount=0;
	LD	HL,0
	LD	(TimeCount),HL
; 75.	    OpenFMPower1();
	IN	A,(248)
	SET	1,A
	OUT	(248),A
; 76.	
; 77.	    OpenFMPower2();
	IN	A,(250)
	RES	1,A
	OUT	(250),A
; 78.	    for(i=0;i<599;i++)
	ADD	HL,SP
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
?0006:
	LD	BC,33367
	DEC	HL
	LD	D,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,D
	LD	A,128
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0005
?0007:
; 79.	    {
; 80.	        j = 50;
	LD	IX,50
?0010:
; 81.	        for(;j>0;j--) {;}
	PUSH	IX
	POP	BC
	LD	HL,0
	OR	128
	SBC	HL,BC
	JP	PO,?0124
	XOR	H
?0124:
	JP	P,?0009
?0011:
; 82.	    }
	DEC	IX
	JR	?0010
?0009:
	LD	HL,0
	ADD	HL,SP
	INC	(HL)
	INC	HL
	JR	NZ,?0006
	INC	(HL)
	JR	?0006
?0005:
?0014:
; 83.	   // if(!DRV_Install("I2C_SLA.DRV",0)) while(1) {;}
; 84.	    //clear message queue for make sure delay 0.5s
; 85.	    while(ap_get_message() != 0) {;}
	CALL	LWRD ap_get_message
	OR	A
	JR	NZ,?0005
?0015:
?0013:
; 86.	    ap_sleep(1);
	LD	DE,1
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 87.	
; 88.	    res_fp=ResOpen("ui30.res");                        //打开资源
	LD	DE,?0016
	LD	A,BYTE3 ResOpen
	LD	HL,LWRD ResOpen
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	(res_fp),HL
; 89.	    ASSERT(res_fp!=NULL);                             //问题报错,DEBUG时有效
; 90.	    //-------安装ud驱动------------
; 91.	    DRV_ActiveUD(0x00,MODE_SLOW);
	LD	C,1
	LD	E,0
	CALL	LWRD DRV_ActiveUD
; 92.	
; 93.	    result=VMRead(&F_comval,VM_SYSTEM,sizeof(F_comval));    //读系统变量
	LD	HL,32
	PUSH	HL
	LD	BC,512
	LD	DE,g_comval
	CALL	LWRD VMRead
	POP	HL
; 94.	    ASSERT(result);
; 95.	    //check if valid
; 96.	    if(F_comval.magic != MAGIC_COMVAL)                        //第一次读,初始化
	LD	HL,57005
	LD	BC,(g_comval)
	AND	A
	SBC	HL,BC
	JR	Z,?0018
?0017:
; 97.	    {
; 98.	        DUMP_STRING("F_comval init-ed!");
; 99.	        //COMVAL_INIT(F_comval);
; 100.	        GetDefaultComval(&F_comval);
	LD	DE,g_comval
	CALL	LWRD GetDefaultComval
?0018:
; 101.	    }
; 102.	    ap_message_init(&F_comval);                                //系统消息(如RTC COUNTER)初始化
	LD	DE,g_comval
	LD	A,BYTE3 ap_message_init
	LD	HL,LWRD ap_message_init
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 103.	    result=VMRead(FMStationTab,VM_AP_RADIO,80+8*3+3);            //长度重新计算
	LD	HL,107
	PUSH	HL
	LD	BC,8192
	LD	DE,FMStationTab
	CALL	LWRD VMRead
	POP	HL
; 104.	    ASSERT(result);
; 105.	    result=FMdeal();
	LD	A,BYTE3 FMdeal
	LD	HL,LWRD FMdeal
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	PUSH	HL
	POP	IY
; 106.	    //保存变量
; 107.	    fmSendCommand(MC_BACKUP,(int)&radio_param);
	LD	BC,radio_param
	LD	E,68
	CALL	LWRD ?0169
; 108.	    if (result == RESULT_RECORD)                            //截获FM中所有Rec热键录音。
	PUSH	IY
	POP	HL
	LD	A,9
	XOR	L
	OR	H
	JR	NZ,?0020
?0019:
; 109.	        result = RESULT_FMREC_START;
	LD	IY,13
?0020:
; 110.	    if ((result != RESULT_FMREC_NOSTART)&&(result != RESULT_FMREC_START)) //非电台录音退出!for FM record by ccm
	PUSH	IY
	POP	HL
	LD	A,14
	XOR	L
	OR	H
	JR	Z,?0022
	LD	A,13
	XOR	L
	OR	H
	JR	Z,?0022
?0024:
?0023:
?0021:
; 111.	    {
; 112.	        fmSendCommand(MC_CLOSE,0);
	LD	BC,0
	LD	E,2
	CALL	LWRD ?0169
; 113.	        //Close VCCOUT. by ccm
; 114.	        CloseFMPower();
	IN	A,(223)
	RES	1,A
	SET	0,A
	OUT	(223),A
; 115.	    CloseFMPower2();
	IN	A,(250)
	SET	1,A
	OUT	(250),A
; 116.	    CloseFMPower1();
	IN	A,(248)
	RES	1,A
	OUT	(248),A
?0022:
; 117.	    }
; 118.	    VMWrite(FMStationTab,VM_AP_RADIO);
	LD	BC,8192
	LD	DE,FMStationTab
	CALL	LWRD VMWrite
; 119.	    ResClose(res_fp);                                        //资源关闭
	LD	DE,(res_fp)
	LD	A,BYTE3 ResClose
	LD	HL,LWRD ResClose
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 120.	
; 121.	    return result;
	PUSH	IY
	POP	HL
; 122.	}
	POP	AF
	POP	AF
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
FMdeal:
; 123.	
; 124.	int FMdeal()
; 125.	{
	PUSH	BC
	PUSH	DE
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LD	HL,65524
	ADD	HL,SP
	LD	SP,HL
; 126.	    int result=0,key;
; 127.	    char FMBand[3],buf[4]={"FM"};
	LD	HL,4
	ADD	HL,SP
	EX	DE,HL
	LD	HL,?0025
	LD	BC,4
	LDIR
; 128.	//标志:need_draw,重画 BandSwitch,频段切换 FirstWait,刚进AP
; 129.	    bool need_draw=TRUE,BandSwitch=TRUE,FirstWait=TRUE;
; 130.	    long i;
; 131.	    int k,h;
; 132.	    static char active=0;            //进入菜单的选中号
; 133.	
; 134.	
; 135.	    //result=0;
; 136.	    if(memcmp(fmdataflag,buf,2)!=0)
	LD	IY,0
	LD	(IX-4),1
	LD	(IX-3),1
	LD	(IX-2),1
	INC	BC
	INC	BC
	LD	DE,fmdataflag
	LD	HL,4
	ADD	HL,SP
	CALL	LWRD ?MEMCMP_L11
	LD	A,L
	OR	H
	JR	Z,?0028
?0027:
; 137.	    {
; 138.	        for(k=0;k<40;k++)
	XOR	A
	LD	(IX-10),A
	LD	(IX-9),A
?0030:
	LD	BC,32808
	LD	L,(IX-10)
	LD	H,(IX-9)
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0029
?0031:
; 139.	        {
; 140.	            FMStationTab[k]=0;
	LD	L,(IX-10)
	LD	H,(IX-9)
	ADD	HL,HL
	LD	BC,FMStationTab
	ADD	HL,BC
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
	INC	(IX-10)
	JR	NZ,?0030
	INC	(IX-9)
	JR	?0030
?0029:
; 141.	        }
; 142.	        memcpy(fmdataflag,buf,3);        //FM BUFFER标志赋初值
	LD	BC,3
	LD	DE,fmdataflag
	LD	HL,4
	ADD	HL,SP
	LDIR
; 143.	        //US和JP暂存区赋初值
; 144.	//        FMStatusUS.freq=0x53d8;
; 145.	        FMStatusUS.freq=0x53d8;
	LD	HL,21464
	LD	(FMStatusUS+1),HL
; 146.	        FMStatusUS.mode=0;
	XOR	A
	LD	(FMStatusUS+5),A
; 147.	        FMStatusUS.volume=24;
	LD	A,24
	LD	(FMStatusUS+6),A
; 148.	        FMStatusUS.station=0;
	XOR	A
	LD	(FMStatusUS+3),A
; 149.	        FMStatusUS.station_count=0;
	LD	(FMStatusUS+4),A
; 150.	        FMStatusUS.stereo_status=1;
	LD	A,1
	LD	(FMStatusUS+7),A
; 151.	        FMStatusJP.freq=0x28E0;
	LD	HL,10464
	LD	(FMStatusJP+1),HL
; 152.	        FMStatusJP.mode=1;
	LD	(FMStatusJP+5),A
; 153.	        FMStatusJP.volume=24;
	LD	A,24
	LD	(FMStatusJP+6),A
; 154.	        FMStatusJP.station=0;
	XOR	A
	LD	(FMStatusJP+3),A
; 155.	        FMStatusJP.station_count=0;
	LD	(FMStatusJP+4),A
; 156.	        FMStatusJP.stereo_status=1;
	LD	A,1
	LD	(FMStatusJP+7),A
; 157.	        memcpy(&FMStatus,&FMStatusUS,sizeof(FMStatus));
	LD	C,8
	LD	DE,FMStatus
	LD	HL,FMStatusUS
	LDIR
?0028:
?0034:
; 158.	    }
; 159.	
; 160.	    //clear the message pool  清除“初始化...”过程中按下的键!
; 161.	    while(ap_get_message() != AP_KEY_NULL){;}
	CALL	LWRD ap_get_message
	OR	A
	JR	NZ,?0028
?0035:
; 162.	
; 163.	    while(1)
?0033:
?0037:
; 164.	    {
; 165.	        if(BandSwitch)        //初始化
	XOR	A
	OR	(IX-3)
	JP	Z,?0040
?0039:
; 166.	        {
; 167.	            //initial
; 168.	            if(FMStatus.mode==0)radio_param.param1=FMStationTab;
	LD	A,(FMStatus+5)
	OR	A
	JR	NZ,?0042
?0041:
	LD	HL,FMStationTab
	JR	?0129
; 169.	            else
	JR	?0043
?0042:
; 170.	                radio_param.param1=&FMStationTab[20];
	LD	HL,FMStationTab+40
?0129:
	LD	(radio_param),HL
?0043:
; 171.	            (fm_play_status_t *)radio_param.param2=&FMStatus;
	LD	HL,FMStatus
	LD	(radio_param+2),HL
; 172.	
; 173.	            if(!fmSendCommand(MC_OPEN,SearchLevel))            //硬件错误提示
	LD	BC,5
	LD	E,1
	CALL	LWRD ?0169
	INC	L
	DEC	L
	JR	NZ,?0045
?0044:
; 174.	            {
; 175.	                ClearScreen(NULL);
	LD	E,L
	LD	D,L
	CALL	LWRD ClearScreen
; 176.	                ResShowMultiString(FMERROR,F_comval.langid,-1,8);
	LD	C,8
	PUSH	BC
	LD	C,255
	PUSH	BC
	LD	BC,(g_comval+12)
	LD	DE,399
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 177.	                //UpdateScreen(NULL);
; 178.	                strcpy(fmdataflag,"  ");
	LD	DE,?0046
	LD	HL,fmdataflag
	CALL	LWRD ?STRCPY_L11
; 179.	                ap_sleep(3);
	LD	DE,3
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 180.	                return RESULT_MAIN;
	LD	HL,10
; 181.	            }
	JP	LWRD ?0121
?0045:
; 182.	            fmSendCommand(MC_MUTE,SetMUTE);
	LD	BC,1
	CALL	LWRD ?0170
; 183.	            fmSendCommand(MC_RESTORE,(int)&radio_param);
	LD	BC,radio_param
	LD	E,69
	CALL	LWRD ?0169
; 184.	            fmSendCommand(MC_PLAY,0);
	LD	BC,0
	LD	E,4
	CALL	LWRD ?0169
; 185.	            fmSendCommand(MC_SETVOLUME,FMStatus.volume);
	LD	BC,(FMStatus+6)
	LD	B,0
	LD	E,64
	CALL	LWRD ?0169
; 186.	
; 187.	            fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
	LD	BC,FMStatus
	LD	E,131
	CALL	LWRD ?0169
; 188.	            BandSwitch=FALSE;
; 189.	            FirstWait=TRUE;
	LD	(IX-3),0
	LD	(IX-2),1
?0040:
; 190.	        }
; 191.	
; 192.	        if(need_draw)            //屏幕重画
	XOR	A
	OR	(IX-4)
	JR	Z,?0048
?0047:
; 193.	        {
; 194.	            ShowFreqInFM();
	LD	A,BYTE3 ShowFreqInFM
	LD	HL,LWRD ShowFreqInFM
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 195.	            need_draw=FALSE;
	LD	(IX-4),0
?0048:
; 196.	        }
; 197.	        if(FirstWait)    //初次进入AP等待1.5S释放MUTE(静音)
	XOR	A
	OR	(IX-2)
	JR	Z,?0050
?0049:
; 198.	        {
; 199.	            FirstWait=FALSE;
; 200.	            ap_sleep(3);
	LD	DE,3
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 201.	//            if(FMStatus.volume)
; 202.	            fmSendCommand(MC_MUTE,releaseMUTE);
	LD	BC,0
	CALL	LWRD ?0170
	LD	(IX-2),0
?0050:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?