?? main.s01
字號:
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
EXTERN ResClose
EXTERN ResOpen
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SearchHandle
EXTERN ShowFreqInFM
PUBLIC TimeCount
EXTERN UpdateScreen
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
EXTERN m_FMPlaystatus
PUBLIC main
PUBLIC menu
PUBLIC pic_active
PUBLIC pic_inactive
PUBLIC radio_param
EXTERN res_fp
PUBLIC slider
PUBLIC string
EXTERN ui_auto_update
EXTERN ui_function_menu
EXTERN ui_show_batt
EXTERN ui_slider
PUBLIC volmuteflag
PUBLIC volume_callback
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_DIV_L02
EXTERN ?S_MUL_L02
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. *******************************************************************************
; 10. */
; 11. #include "ap_radio.h"
; 12. //#include "mem.h"
; 13. #include "actos.h"
; 14.
; 15. #define OpenFMPower1() output8(0xc0,(input8(0xc0)|0x01)) //enable output a0
; 16. #define OpenFMPower2() output8(0xc1,(input8(0xc1)&0xfe)) //disable a0 input
; 17. #define OpenFMPower3() output8(0xc2,input8(0xc2)&0xfe)
; 18. #define CloseFMPower1() output8(0xc2,((input8(0xc2)|0x01))) //disable output a0
; 19. #define CloseFMPower2() output8(0xc2,((input8(0xc2)|0x01)))
; 20.
; 21. extern fm_play_status_t m_FMPlaystatus;
; 22.
; 23. int TimeCount;
; 24. FMRADIO_param_t radio_param;
; 25. slider_t slider;
; 26. region_t clrregion;
; 27. function_menu_t menu; //菜單結(jié)構(gòu)體
; 28. comval_t F_comval;
; 29. //電臺頻率對照表(注:頻率范圍87M-108M(US)或76M-90M(Japan),以K為精度要三位數(shù),但由于最高位都是1,所以就可不記錄,只記中低位就可以了).
; 30. WORD FMStationTab[40];
; 31. fm_play_status_t FMStatus; //當(dāng)前電臺信息,8 bytes
; 32. fm_play_status_t FMStatusUS; //US電臺信息暫存,8 bytes
; 33. fm_play_status_t FMStatusJP; //Japan電臺信息暫存,8bytes
; 34. char fmdataflag[3]; //第一次進(jìn)FM標(biāo)志,3 bytes
; 35. char Freqtab[10];
; 36.
; 37. //WORD SearchFreq;
; 38. //WORD SetFreq;
; 39.
; 40. const int pic_inactive[] =
; 41. { RA_SAVE, MICIN, DELL, DELALL, AUTOSEL, RA_US, RA_JP, EXIT }; //MICIN: for FM record by ccm
; 42. const int pic_active[] =
; 43. { RA_SAVEA, MICINA, DELLA, DELALLA, AUTOSELA, RA_USA, RA_JPA, EXITA };//MICINA:for FM record by ccm
; 44. const int string[] =
; 45. { FMENU1, FMENU15, FMENU2, FMENU3, FMENU16, FMENU4, FMENU5, FMENU6 }; //FMENU15:電臺錄音 by ccm
; 46. //函數(shù)定義
; 47. int SearchHandle(BYTE Direct); //自動搜索處理,Direct=10,NEXT,=20,LAST
; 48. int AutoSearchHandle(BYTE Direct);
; 49. int FMdeal(int test); //FM應(yīng)用的處理
; 50. void ShowFreqInFM(void); //FM主界面顯示
; 51. bool Search_Show(FM_direct_t Direct); //自動搜臺時的顯示
; 52. bool volmuteflag = 1; //靜音標(biāo)志
; 53. void volume_callback(int Vol) //音量設(shè)置的CALLBACK函數(shù)
; 54. {
PUSH BC
PUSH IX
PUSH DE
POP IX
; 55. //實時改變音量的值
; 56. FMStatus.vol_display = Vol;
LD A,E
LD (FMStatus+8),A
; 57. FMStatus.volume = Vol * 31 / g_comval.VolumeMax;
LD BC,(g_comval+31)
LD B,0
PUSH BC
LD DE,31
PUSH IX
POP BC
CALL LWRD ?S_MUL_L02
POP BC
CALL LWRD ?0166
; 58. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
LD C,A
LD B,0
LD E,64
CALL LWRD ?0167
; 59.
; 60. if (FMStatus.volume == 0)
LD A,(FMStatus+6)
OR A
JR NZ,?0003
?0002:
; 61. fmSendCommand(MC_MUTE, SetMUTE);
LD BC,1
JR ?0131
; 62. else
?0003:
; 63. fmSendCommand(MC_MUTE, releaseMUTE);
LD BC,0
?0131:
CALL LWRD ?0168
?0004:
; 64.
; 65.
; 66.
; 67. }
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0166:
CALL LWRD ?SS_DIV_L02
LD A,E
LD (FMStatus+6),A
RET
?0169:
LD BC,1
?0168:
LD E,12
?0167:
LD A,BYTE3 fmSendCommand
?0170:
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
main:
; 68. #if 0
; 69. //對第一進(jìn)FM進(jìn)行降噪
; 70. void volume_init()
; 71. {
; 72. uchar i,j;
; 73. for(i=0;i<FMStatus.volume;i++)
; 74. {
; 75. fmSendCommand(MC_SETVOLUME, i);
; 76. output8(WATCHDOG, input8(WATCHDOG) | 0x8);
; 77. for(j=0;j<100;j++);
; 78. }
; 79. }
; 80. #endif
; 81.
; 82. #define OpenFM()
; 83. int main(int param)
; 84. {
PUSH BC
PUSH IY
PUSH IX
PUSH DE
PUSH AF
PUSH AF
PUSH AF
PUSH AF
; 85. int result;
; 86.
; 87. //Open VCCOUT for FM Module. by ccm
; 88. int i, j;
; 89. char buffer_f3;
; 90.
; 91. OpenFMPower1();
IN A,(192)
SET 0,A
OUT (192),A
; 92. OpenFMPower2();
IN A,(193)
RES 0,A
OUT (193),A
; 93. OpenFMPower3();
IN A,(194)
RES 0,A
OUT (194),A
; 94. if (param == 0xfe)
LD A,254
XOR E
OR D
JR NZ,?0006
?0005:
; 95. {
; 96.
; 97. fmSendCommand(MC_MUTE, SetMUTE);
CALL LWRD ?0169
; 98. fmSendCommand(MC_CLOSE, 0);
LD BC,0
LD E,2
CALL LWRD ?0167
; 99. CloseFMPower2();
IN A,(194)
SET 0,A
OUT (194),A
; 100. CloseFMPower1();
IN A,(194)
SET 0,A
OUT (194),A
; 101.
; 102. return 0;
LD HL,0
; 103. }
JP LWRD ?0029
?0006:
; 104.
; 105.
; 106. TimeCount = 0;
LD HL,0
LD (TimeCount),HL
; 107. ///////////////////////////////
; 108. // buffer_f3=input8(0xf3); //由于外部rtc時間需要用到c0和c1口需要將其使能關(guān)閉
; 109. // output8(0xf3,0x00);
; 110. //////////////////////////////
; 111. for (i = 0; i < 599; i++)
INC HL
INC HL
ADD HL,SP
XOR A
LD (HL),A
INC HL
LD (HL),A
?0008:
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,?0007
?0009:
; 112. {
; 113. j = 50;
LD IX,50
?0012:
; 114. for (; j > 0; j--)
PUSH IX
POP BC
LD HL,0
OR 128
SBC HL,BC
JP PO,?0134
XOR H
?0134:
JP P,?0011
?0013:
; 115. {
; 116. ;
; 117. }
; 118. }
DEC IX
JR ?0012
?0011:
LD HL,2
ADD HL,SP
INC (HL)
INC HL
JR NZ,?0008
INC (HL)
JR ?0008
?0007:
?0016:
; 119. //if(!DRV_Install("I2C_SLA.DRV",0)) while(1) {;}
; 120.
; 121. //clear message queue for make sure delay 0.5s
; 122. while (ap_get_message() != 0)
CALL LWRD ap_get_message
OR A
JR NZ,?0007
?0017:
?0015:
; 123. {
; 124. ;
; 125. }
; 126. ap_sleep(1);
LD DE,1
LD A,BYTE3 ap_sleep
LD HL,LWRD ap_sleep
CALL LWRD ?BANK_CALL_DIRECT_L08
; 127.
; 128. res_fp = ResOpen("ui30.res"); //打開資源
LD DE,?0018
LD A,BYTE3 ResOpen
LD HL,LWRD ResOpen
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (res_fp),HL
; 129. ASSERT(res_fp != NULL); //問題報錯,DEBUG時有效
; 130. //-------安裝ud驅(qū)動------------
; 131. DRV_ActiveUD(0x00, MODE_SLOW);
LD C,1
LD E,0
CALL LWRD DRV_ActiveUD
; 132.
; 133. result = VMRead(&F_comval, VM_SYSTEM, sizeof(F_comval)); //讀系統(tǒng)變量
LD HL,32
PUSH HL
LD BC,512
LD DE,g_comval
CALL LWRD VMRead
POP HL
; 134. ASSERT(result);
; 135. //check if valid
; 136. if (F_comval.magic != MAGIC_COMVAL) //第一次讀,初始化
LD HL,57005
LD BC,(g_comval)
AND A
SBC HL,BC
JR Z,?0020
?0019:
; 137. {
; 138. DUMP_STRING("F_comval init-ed!");
; 139. //COMVAL_INIT(F_comval);
; 140. GetDefaultComval(&F_comval);
LD DE,g_comval
CALL LWRD GetDefaultComval
?0020:
; 141. }
; 142. ap_message_init(&F_comval); //系統(tǒng)消息(如RTC COUNTER)初始化
LD DE,g_comval
LD A,BYTE3 ap_message_init
LD HL,LWRD ap_message_init
CALL LWRD ?BANK_CALL_DIRECT_L08
; 143. result = VMRead(FMStationTab, VM_AP_RADIO, 80 + sizeof(fm_play_status_t) * 3 + 3); //長度重新計算
LD HL,110
PUSH HL
LD BC,8192
LD DE,FMStationTab
CALL LWRD VMRead
POP HL
; 144. ASSERT(result);
; 145. // BatValue=GetBattery();
; 146. {
; 147. BYTE KeyTone_bak;
; 148. KeyTone_bak = F_comval.KeyTone;
LD A,(g_comval+29)
LD HL,7
ADD HL,SP
LD (HL),A
; 149. if (F_comval.KeyTone)
OR A
JR Z,?0022
?0021:
; 150. {
; 151. F_comval.KeyTone = 0;
XOR A
LD (g_comval+29),A
?0022:
; 152. //sKY_Beep(F_comval.KeyTone);
; 153. }
; 154. result = FMdeal(param);
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD A,BYTE3 FMdeal
LD HL,LWRD FMdeal
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 155. F_comval.KeyTone = KeyTone_bak;
LD HL,7
ADD HL,SP
LD A,(HL)
LD (g_comval+29),A
; 156. }
; 157. //保存變量
; 158. fmSendCommand(MC_BACKUP, (int) &radio_param);
LD BC,radio_param
LD E,68
CALL LWRD ?0167
; 159. if (result == RESULT_RECORD) //截獲FM中所有Rec熱鍵錄音。
PUSH IY
POP HL
LD A,51
XOR L
OR H
JR NZ,?0024
?0023:
; 160. result = RESULT_FMREC_START;
LD IY,34
?0024:
; 161. if ((result != RESULT_FMREC_NOSTART) && (result != RESULT_FMREC_START)) //非電臺錄音退出!for FM record by ccm
PUSH IY
POP HL
LD A,35
XOR L
OR H
JR Z,?0026
LD A,34
XOR L
OR H
JR Z,?0026
?0028:
?0027:
?0025:
; 162. {
; 163. fmSendCommand(MC_CLOSE, 0);
LD BC,0
LD E,2
CALL LWRD ?0167
; 164. //Close VCCOUT. by ccm
; 165. // CloseFMPower();
; 166. CloseFMPower2();
IN A,(194)
SET 0,A
OUT (194),A
; 167. CloseFMPower1();
IN A,(194)
SET 0,A
OUT (194),A
?0026:
; 168. }
; 169. ///////////////////////////////
; 170. //由于外部rtc時間需要用到c0和c1口,需要將其使能恢復(fù)
; 171. // output8(0xf3,buffer_f3);
; 172. //////////////////////////////
; 173. VMWrite(FMStationTab, VM_AP_RADIO);
LD BC,8192
LD DE,FMStationTab
CALL LWRD VMWrite
; 174. ResClose(res_fp); //資源關(guān)閉
LD DE,(res_fp)
LD A,BYTE3 ResClose
LD HL,LWRD ResClose
CALL LWRD ?BANK_CALL_DIRECT_L08
; 175.
; 176. return result;
PUSH IY
POP HL
; 177. }
?0029:
EX DE,HL
LD HL,10
ADD HL,SP
LD SP,HL
EX DE,HL
?0165:
POP IX
POP IY
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
FMdeal:
; 178.
; 179. int FMdeal(int test)
; 180. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH DE
LD HL,65524
ADD HL,SP
LD SP,HL
; 181. int result = 0, key;
; 182. char FMBand[3], buf[4] =
; 183. { "FM" };
LD HL,6
ADD HL,SP
EX DE,HL
LD HL,?0030
LD BC,4
LDIR
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -