📄 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; //菜单结构体
; 28. comval_t F_comval;
; 29. //电台频率对照表(注:频率范围87M-108M(US)或76M-90M(Japan),以K为精度要三位数,但由于最高位都是1,所以就可不记录,只记中低位就可以了).
; 30. WORD FMStationTab[40];
; 31. fm_play_status_t FMStatus; //当前电台信息,8 bytes
; 32. fm_play_status_t FMStatusUS; //US电台信息暂存,8 bytes
; 33. fm_play_status_t FMStatusJP; //Japan电台信息暂存,8bytes
; 34. char fmdataflag[3]; //第一次进FM标志,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. //函数定义
; 47. int SearchHandle(BYTE Direct); //自动搜索处理,Direct=10,NEXT,=20,LAST
; 48. int AutoSearchHandle(BYTE Direct);
; 49. int FMdeal(int test); //FM应用的处理
; 50. void ShowFreqInFM(void); //FM主界面显示
; 51. bool Search_Show(FM_direct_t Direct); //自动搜台时的显示
; 52. bool volmuteflag = 1; //静音标志
; 53. void volume_callback(int Vol) //音量设置的CALLBACK函数
; 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. //对第一进FM进行降噪
; 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口需要将其使能关闭
; 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驱动------------
; 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)); //读系统变量
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); //系统消息(如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口,需要将其使能恢复
; 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); //资源关闭
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -