📄 autosearchhandle.s01
字号:
NAME autosearchhandle(17)
RSEG CODE_2(0)
RSEG CSTR(0)
RSEG CONST(0)
RSEG UDATA0(0)
PUBLIC AutoSearchHandle
PUBLIC AutoTabNum
PUBLIC CleanStationCount
EXTERN ClearScreen
PUBLIC FMAutoTab
EXTERN FMStatus
EXTERN Freqtab
EXTERN GetBattery
EXTERN PutS
EXTERN ResShowPic
PUBLIC RestartSearch
PUBLIC Search_Show2
EXTERN SetTextPos
PUBLIC ShowFreqInFM2
PUBLIC ShowStationCount
EXTERN TryPlayingHandle
EXTERN UpdateScreen
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fmSendCommand
EXTERN g_comval
EXTERN itoa_1
EXTERN itoa_2
EXTERN itoa_3
EXTERN radio_param
EXTERN ui_show_batt
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?SS_DIV_L02
EXTERN ?SS_MOD_L02
EXTERN ?S_MUL_L02
EXTERN ?SL_CMP_L03
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRCPY_L11
EXTERN ?STRCAT_L11
RSEG CODE_2
ShowStationCount:
; 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.
; 12. #pragma codeseg(CODE_2)
; 13.
; 14. #include "ap_radio.h"
; 15. #include "actos.h"
; 16.
; 17. extern slider_t slider;
; 18. extern comval_t F_comval;
; 19. extern WORD FMStationTab[40]; // 前20个是US, 后20个是JP.
; 20. extern fm_play_status_t FMStatus;
; 21. extern FMRADIO_param_t radio_param;
; 22. extern char Freqtab[10];
; 23.
; 24. WORD FMAutoTab[20]; // 全自动收台,预存台.
; 25. BYTE AutoTabNum; // 预存台数.
; 26.
; 27. extern int TryPlayingHandle(void);
; 28. /*
; 29. ********************************************************************************
; 30. * Description : 显示电台号.
; 31. *
; 32. * Arguments :
; 33. *
; 34. * Returns :
; 35. *
; 36. * Notes :
; 37. *
; 38. ********************************************************************************
; 39. */
; 40. void ShowStationCount(int count)
; 41. {
PUSH BC
PUSH IX
LD HL,65524
ADD HL,SP
LD SP,HL
PUSH DE
POP IX
; 42. char buf[4];
; 43. char FMTab[7];
; 44.
; 45. SetTextPos(46, 0); //SetTextPos(128/2-6*3,0);
LD C,0
LD E,46
CALL LWRD SetTextPos
; 46. if (count > 0) //显示电台号
PUSH IX
POP BC
LD HL,0
OR 128
SBC HL,BC
JP PO,?0157
XOR H
?0157:
JP P,?0003
?0002:
; 47. {
; 48. strcpy(FMTab, "[");
LD DE,?0004
LD HL,0
ADD HL,SP
CALL LWRD ?STRCPY_L11
; 49. strcat(FMTab, "CH");
LD DE,?0005
LD HL,0
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 50. *itoa_2(count, buf);
LD HL,8
ADD HL,SP
LD C,L
LD B,H
PUSH IX
POP HL
LD E,L
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 51. strcat(FMTab, buf);
LD HL,8
ADD HL,SP
EX DE,HL
LD HL,0
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 52. strcat(FMTab, "]");
LD DE,?0006
LD HL,0
ADD HL,SP
CALL LWRD ?STRCAT_L11
; 53. PutS(FMTab, -1);
LD C,255
LD HL,0
ADD HL,SP
EX DE,HL
CALL LWRD PutS
?0003:
; 54. }
; 55. UpdateScreen(NULL);
LD DE,0
CALL LWRD UpdateScreen
; 56. }
LD HL,12
ADD HL,SP
LD SP,HL
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
CleanStationCount:
; 57. /*
; 58. ********************************************************************************
; 59. * Description : 清除电台号
; 60. *
; 61. * Arguments :
; 62. *
; 63. * Returns :
; 64. *
; 65. * Notes :
; 66. *
; 67. ********************************************************************************
; 68. */
; 69. void CleanStationCount(void)
; 70. {
PUSH BC
PUSH DE
PUSH AF
PUSH AF
PUSH AF
PUSH AF
; 71. char FMTab[] = " ";
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,?0007
LD BC,7
LDIR
; 72. SetTextPos(46, 0); //SetTextPos(128/2-6*3,0);
LD E,46
CALL LWRD SetTextPos
; 73. PutS(FMTab, -1);
LD C,255
LD HL,0
ADD HL,SP
EX DE,HL
CALL LWRD PutS
; 74. UpdateScreen(NULL);
LD DE,0
CALL LWRD UpdateScreen
; 75. }
POP HL
POP HL
POP HL
POP HL
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
ShowFreqInFM2:
; 76. /*
; 77. ********************************************************************************
; 78. * Description : 显示全自动搜台界面
; 79. *
; 80. * Arguments :
; 81. *
; 82. * Returns :
; 83. *
; 84. * Notes :
; 85. *
; 86. ********************************************************************************
; 87. */
; 88. void ShowFreqInFM2(void)
; 89. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65526
ADD HL,SP
LD SP,HL
; 90. char buf[4] =
; 91. { "FM" };
EX DE,HL
LD HL,?0008
LD BC,4
LDIR
; 92. long i;
; 93. int k, h;
; 94. char FMTab[5];
; 95.
; 96. ClearScreen(NULL);
LD E,C
LD D,B
CALL LWRD ClearScreen
; 97. ResShowPic(RA_FM, 16, 0); //fm 标志显示
PUSH BC
LD C,16
LD DE,433
CALL LWRD ?0189
POP AF
; 98. if (FMStatus.stereo_status == 0)
LD A,(FMStatus+7)
OR A
JR NZ,?0010
?0009:
; 99. {
; 100. ResShowPic(RA_STERE, 98, 0); //显示立体声 ResShowPic(RA_STERE,128-30,0);
LD C,A
PUSH BC
LD C,98
LD DE,440
CALL LWRD ?0189
POP AF
?0010:
; 101. }
; 102. //k=GetBattery();
; 103.
; 104. //ui_show_batt(GetBattery()); //电池电量显示
; 105. ui_show_batt(GetBattery(), F_comval.BatteryType); //电池电量显示
LD BC,(g_comval+15)
CALL LWRD GetBattery
LD E,A
LD D,0
LD A,BYTE3 ui_show_batt
LD HL,LWRD ui_show_batt
CALL LWRD ?BANK_CALL_DIRECT_L08
; 106. strcpy(Freqtab, "<");
LD DE,?0011
LD HL,Freqtab
CALL LWRD ?STRCPY_L11
; 107. strcat(Freqtab, "FM");
LD DE,?0012
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 108. //频率换算及转换成ASCII码
; 109. k = FMStatus.freq;
LD IY,(FMStatus+1)
; 110. if(FMStatus.mode==0)
LD A,(FMStatus+5)
OR A
LD BC,10
PUSH IY
POP DE
CALL LWRD ?SS_DIV_L02
JR NZ,?0014
?0013:
; 111. i=k/10 + 87;
LD HL,87
JR ?0158
LD A,H
JR ?0160
SBC A,A
JR ?0162
LD B,C
JR ?0163
LD (IX-5),H
JR ?0164
LD (IX-3),B
; 112. else
JR ?0015
?0014:
; 113. i=k/10 + 76;
LD HL,76
?0158:
ADD HL,DE
LD A,H
?0160:
RLCA
SBC A,A
?0162:
LD C,A
LD B,C
?0163:
LD (IX-6),L
LD (IX-5),H
?0164:
LD (IX-4),C
LD (IX-3),B
?0015:
; 114.
; 115. h=k%10;
LD BC,10
PUSH IY
POP DE
CALL LWRD ?SS_MOD_L02
LD (IX-2),E
; 116.
; 117.
; 118. if (i < 100)
LD L,B
LD H,B
PUSH HL
LD L,100
PUSH HL
LD C,(IX-4)
LD B,(IX-3)
LD L,(IX-6)
LD H,(IX-5)
CALL LWRD ?SL_CMP_L03
LD HL,0
JR NC,?0017
?0016:
; 119. *itoa_2(i, buf);
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-6)
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 120. else
JR ?0018
?0017:
; 121. *itoa_3(i, buf);
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-6)
LD D,(IX-5)
LD A,BYTE3 itoa_3
LD HL,LWRD itoa_3
CALL LWRD ?BANK_CALL_DIRECT_L08
?0018:
; 122. strcat(Freqtab, buf);
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 123. strcat(Freqtab, ".");
LD DE,?0019
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 124. *itoa_1(h, buf);
LD HL,0
ADD HL,SP
LD C,L
LD B,H
LD E,(IX-2)
LD A,BYTE3 itoa_1
LD HL,LWRD itoa_1
CALL LWRD ?BANK_CALL_DIRECT_L08
; 125. //buf[1] = 0;
; 126. //buf[2] = 0;
; 127. strcat(Freqtab, buf);
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 128. strcat(Freqtab, ">");
LD DE,?0020
LD HL,Freqtab
CALL LWRD ?STRCAT_L11
; 129. SetTextPos(40, 8); //SetTextPos((128-6*8)/2,8);
LD C,8
LD E,40
CALL LWRD SetTextPos
; 130. PutS(Freqtab, -1); //显示电台频率
LD C,255
LD DE,Freqtab
CALL LWRD PutS
; 131. if (FMStatus.mode == 0)
LD A,(FMStatus+5)
OR A
LD BC,(FMStatus+1)
LD DE,100
CALL LWRD ?S_MUL_L02
LD BC,200
CALL LWRD ?US_DIV_L02
LD C,16
PUSH BC
LD A,E
JR NZ,?0022
?0021:
; 132. {
; 133. k = (FMStatus.freq )*100/200;
; 134.
; 135. ResShowPic(DWNARROW, 6 + k, 16); //显示箭头ResShowPic(DWNARROW,11-5+k,16);
ADD A,6
CALL LWRD ?0190
POP AF
; 136. ResShowPic(FQBAR, 0, 24); //显示US频率条
LD C,24
PUSH BC
LD C,0
LD DE,167
JR ?0159
LD HL,LWRD ResShowPic
JR ?0161
POP AF
; 137. }
; 138. else
JR ?0023
?0022:
; 139. {
; 140. k = (FMStatus.freq )*100/200;
; 141. ResShowPic(DWNARROW, 24 + k, 16); //显示箭头 ResShowPic(DWNARROW,30-6+k,16);
ADD A,24
CALL LWRD ?0190
POP AF
; 142. ResShowPic(FQBAR2, 0, 24); //显示JP频率条
LD C,24
PUSH BC
LD C,0
LD DE,168
?0159:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
?0161:
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0023:
; 143. }
; 144. UpdateScreen(NULL); //刷新
LD DE,0
CALL LWRD UpdateScreen
; 145. }
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0190:
LD C,A
LD DE,94
?0189:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
Search_Show2:
; 146. /*
; 147. ********************************************************************************
; 148. * Description : 搜索下一个在电台表中没有的新电台.
; 149. *
; 150. * Arguments : Direct,Next或Last搜索.
; 151. *
; 152. * Returns : TRUE:搜到下一个新电台,FALSE:没有搜到.
; 153. *
; 154. * Notes :
; 155. *
; 156. ********************************************************************************
; 157. */
; 158. bool Search_Show2(FM_direct_t Direct)
; 159. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH DE
PUSH AF
PUSH AF
; 160. bool Search_Flag;
; 161. int i;
; 162. WORD temp;
; 163.
; 164. FMStatus.stereo_status = 1;
LD A,1
LD (FMStatus+7),A
; 165. FMStatus.station = 0;
XOR A
LD (FMStatus+3),A
; 166. fmSendCommand(MC_MUTE, SetMUTE);
LD BC,1
LD E,12
CALL LWRD ?0191
; 167. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
CALL LWRD ?0192
; 168. fmSendCommand(MC_RESTORE, (int) &radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0191
; 169. Search_Flag = fmSendCommand(MC_SEARCH, Direct);
LD C,(IX-2)
LD B,0
LD E,10
CALL LWRD ?0191
LD (IX-6),L
; 170. if (Search_Flag) //搜台成功后,MUTE释放
INC L
DEC L
JR Z,?0033
?0024:
; 171. {
; 172. fmSendCommand(MC_GETFREQ, (int) &temp);
LD HL,2
ADD HL,SP
LD C,L
LD B,H
LD E,17
CALL LWRD ?0191
; 173. for (i = 0; i < AutoTabNum; i++) // 检查是否在电台表中
LD IY,0
?0027:
LD BC,(AutoTabNum)
LD B,0
PUSH IY
POP HL
OR 128
SBC HL,BC
JP PO,?0174
XOR H
?0174:
JP P,?0026
?0028:
; 174. {
; 175. if (FMAutoTab[i] == temp)
PUSH IY
POP HL
ADD HL,HL
LD BC,FMAutoTab
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD C,(IX-4)
LD B,(IX-3)
AND A
SBC HL,BC
JR NZ,?0031
?0030:
; 176. {
; 177. Search_Flag = FALSE;
LD (IX-6),0
; 178. break;
JR ?0026
?0031:
INC IY
JR ?0027
?0026:
; 179. }
; 180. }
; 181. if (Search_Flag)
XOR A
OR (IX-6)
JR Z,?0033
?0032:
; 182. {
; 183. if (FMStatus.volume)
LD A,(FMStatus+6)
OR A
JR Z,?0035
?0034:
; 184. fmSendCommand(MC_MUTE, releaseMUTE);
LD BC,0
LD E,12
CALL LWRD ?0191
?0035:
; 185. fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
LD BC,FMStatus
LD E,131
CALL LWRD ?0191
?0033:
?0025:
; 186. }
; 187. }
; 188. ShowFreqInFM2();
LD A,BYTE3 ShowFreqInFM2
LD HL,LWRD ShowFreqInFM2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 189. for (i = 0; i < 0x3999; i++)
LD IY,0
?0037:
LD BC,47513
PUSH IY
POP HL
LD A,128
XOR H
LD H,A
SBC HL,BC
JR NC,?0036
?0038:
INC IY
JR ?0037
?0036:
; 190. {
; 191. }
; 192. return Search_Flag;
LD L,(IX-6)
; 193. }
?0188:
LD SP,IX
POP IX
POP IY
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0192:
LD BC,(FMStatus+6)
LD B,0
LD E,64
?0191:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
RestartSearch:
; 194. /*
; 195. ********************************************************************************
; 196. * Description : 设置门限值,重新开始搜索.
; 197. *
; 198. * Arguments : 门限值
; 199. *
; 200. * Returns : TRUE:继续搜索,FALSE:中断搜索,正常结束.
; 201. *
; 202. * Notes :
; 203. *
; 204. ********************************************************************************
; 205. */
; 206. bool RestartSearch(byte level)
; 207. {
PUSH BC
PUSH DE
; 208. if (level <= 2)
LD A,2
CP E
JR C,?0041
?0040:
; 209. return FALSE;
LD L,0
JR ?0042
?0041:
; 210. //fmSendCommand(MC_SETVOLUME,0);
; 211. //fmSendCommand(MC_CLOSE,0);
; 212. //fmSendCommand(MC_OPEN,level);
; 213. fmSendCommand(MC_MUTE, SetMUTE);
LD BC,1
LD E,12
CALL LWRD ?0191
; 214. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
CALL LWRD ?0192
; 215. fmSendCommand(MC_RESTORE, (int) &radio_param);
LD BC,radio_param
LD E,69
CALL LWRD ?0191
; 216. return TRUE;
LD L,1
; 217. }
?0042:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -