searchhandle.s01
来自「MP3 整个 SDK」· S01 代码 · 共 1,070 行 · 第 1/2 页
S01
1,070 行
NAME searchhandle(17)
RSEG CODE_1(0)
RSEG CSTR(0)
EXTERN FMStatus
EXTERN Freqtab
EXTERN GetBattery
EXTERN ResShowPic
PUBLIC SearchHandle
PUBLIC Search_Show
PUBLIC ShowFreqInFM
EXTERN ShowStationCount
EXTERN Updateflag
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fmSendCommand
EXTERN g_comval
EXTERN itoa_2
EXTERN itoa_3
EXTERN main_ResShowPic
EXTERN radio_param
PUBLIC ui_show_FMdata
EXTERN ui_show_batt
PUBLIC ui_show_data
PUBLIC ui_show_volfm
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?SL_DIV_L03
EXTERN ?SL_MOD_L03
EXTERN ?SL_CMP_L03
EXTERN ?SL_DIVASG_L03
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRCPY_L11
EXTERN ?STRCAT_L11
RSEG CODE_1
ui_show_data:
; 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: SearchHandle.c,v 1.1.1.1 2006/05/22 03:24:00 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12.
; 13. #pragma codeseg(CODE_1)
; 14.
; 15. #include "ap_radio.h"
; 16. #include "actos.h"
; 17. extern comval_t g_comval;
; 18. extern fm_play_status_t FMStatus;
; 19. extern FMRADIO_param_t radio_param;
; 20. extern char Freqtab[10];
; 21. extern char Updateflag;
; 22. void ShowFreqInFM(); //FM主界面显示
; 23. bool Search_Show(FM_direct_t Direct); //自动搜台时的显示
; 24. void ui_show_data(char *buf, uchar x, uchar y) //zxs add for show CH number
; 25. {
PUSH IX
PUSH BC
PUSH DE
POP IX
?0003:
; 26. while(1)
; 27. {
; 28. if(*buf!=0)main_ResShowPic(CHNUM0+*buf-0x30, x, y);
XOR A
OR (IX+0)
JR Z,?0002
?0005:
LD HL,8
ADD HL,SP
LD C,(HL)
PUSH BC
LD HL,2
ADD HL,SP
LD C,(HL)
LD E,(IX+0)
LD D,0
LD HL,65521
CALL LWRD ?0138
POP AF
; 29. else
?0006:
; 30. break;
?0007:
; 31. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 32. *buf++;
; 33. x+=6;
LD HL,0
ADD HL,SP
LD A,(HL)
ADD A,6
LD (HL),A
; 34. }
; 35. }
INC IX
JR ?0003
?0002:
POP HL
POP IX
JP LWRD ?BANK_FAST_LEAVE_L08
?0139:
LD E,(HL)
LD D,0
LD HL,193
?0138:
ADD HL,DE
EX DE,HL
LD A,BYTE3 main_ResShowPic
LD HL,LWRD main_ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
ui_show_volfm:
; 36.
; 37.
; 38. void ui_show_volfm(BYTE volume) //显示音量信息 zxs add for show fm vol
; 39. {
PUSH BC
PUSH DE
PUSH AF
PUSH AF
; 40. char temp[3];
; 41. itoa_2(volume, temp);
LD HL,0
ADD HL,SP
LD C,L
LD B,H
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 42. main_ResShowPic(TVNUM0+temp[0]-0x30,25,162);
LD C,162
PUSH BC
LD C,25
LD HL,2
ADD HL,SP
CALL LWRD ?0139
POP AF
; 43. main_ResShowPic(TVNUM0+temp[1]-0x30,25+9,162);
LD C,162
PUSH BC
LD C,34
LD HL,3
ADD HL,SP
CALL LWRD ?0139
POP AF
; 44. }
POP HL
POP HL
POP HL
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
SearchHandle:
; 45.
; 46. int SearchHandle(BYTE Direct)
; 47. {
PUSH BC
PUSH IX
PUSH DE
PUSH AF
; 48. int key;
; 49. bool need_draw=TRUE;
; 50. BYTE Searchflag=1;
LD HL,0
ADD HL,SP
LD (HL),1
LD D,1
?0009:
; 51. while(1)
; 52. {
; 53. if(Direct!=0)
LD HL,2
ADD HL,SP
XOR A
OR (HL)
JP Z,?0044
?0011:
; 54. {
; 55. if(Direct==10) //NEXT搜索处理
CP 10
JR NZ,?0014
?0013:
; 56. {
; 57. if(((FMStatus.freq+100)>0xa5e0)&&(FMStatus.mode==0))FMStatus.freq=0x53d8;
LD HL,(FMStatus+1)
LD BC,100
ADD HL,BC
LD C,L
LD B,H
LD HL,42464
AND A
SBC HL,BC
JR NC,?0016
LD A,(FMStatus+5)
OR A
JR NZ,?0016
?0018:
?0017:
?0015:
LD HL,21464
JR ?0123
?0016:
; 58. else if(((FMStatus.freq+100)>0x5f90)&&(FMStatus.mode==1))FMStatus.freq=0x28e0;
LD HL,(FMStatus+1)
LD BC,100
ADD HL,BC
LD C,L
LD B,H
LD HL,24464
AND A
SBC HL,BC
JR NC,?0021
LD A,(FMStatus+5)
DEC A
JR NZ,?0021
?0023:
?0022:
?0020:
LD HL,10464
?0123:
LD (FMStatus+1),HL
; 59. else
JR ?0122
?0021:
; 60. FMStatus.freq+=100;
LD HL,FMStatus+1
LD A,(HL)
ADD A,100
LD (HL),A
JR NC,?0122
INC HL
INC (HL)
?0122:
?0024:
?0019:
; 61. if(Search_Show(UP))return 0;
PUSH DE
LD E,1
LD A,BYTE3 Search_Show
LD HL,LWRD Search_Show
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
POP DE
JR Z,?0044
?0025:
JR ?0126
; 62. }
?0026:
?0014:
; 63. else if(Direct==20) //LAST搜索处理
CP 20
JR NZ,?0029
?0028:
; 64. {
; 65. if(((FMStatus.freq-100)<0x53d8)&&(FMStatus.mode==0))FMStatus.freq=0xa5e0;
LD HL,(FMStatus+1)
LD BC,65436
ADD HL,BC
LD BC,21464
AND A
SBC HL,BC
JR NC,?0031
LD A,(FMStatus+5)
OR A
JR NZ,?0031
?0033:
?0032:
?0030:
LD HL,42464
JR ?0124
?0031:
; 66. else if(((FMStatus.freq-100)<0x28e0)&&(FMStatus.mode==1))FMStatus.freq=0x5f90;
LD HL,(FMStatus+1)
LD BC,65436
ADD HL,BC
LD BC,10464
AND A
SBC HL,BC
JR NC,?0036
LD A,(FMStatus+5)
DEC A
JR NZ,?0036
?0038:
?0037:
?0035:
LD HL,24464
?0124:
LD (FMStatus+1),HL
; 67. else
JR ?0039
?0036:
; 68. FMStatus.freq-=100;
LD HL,FMStatus+1
LD A,(HL)
ADD A,156
LD (HL),A
INC HL
LD A,(HL)
ADC A,255
LD (HL),A
?0039:
?0034:
; 69. if(Search_Show(DOWN))return 0;
PUSH DE
LD E,0
LD A,BYTE3 Search_Show
LD HL,LWRD Search_Show
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
POP DE
JR Z,?0044
?0040:
JR ?0126
; 70. }
?0041:
?0029:
; 71. else if(Direct==50)
CP 50
JR NZ,?0044
?0043:
; 72. {
; 73. Direct=0;
; 74. return 0;
?0126:
LD HL,0
; 75. }
JP LWRD ?0071
?0044:
?0042:
?0027:
?0012:
; 76. }
; 77. if(need_draw) //显示
LD HL,0
ADD HL,SP
XOR A
OR (HL)
JR Z,?0046
?0045:
; 78. {
; 79. ShowFreqInFM();
LD A,BYTE3 ShowFreqInFM
LD HL,LWRD ShowFreqInFM
CALL LWRD ?BANK_CALL_DIRECT_L08
; 80. need_draw=FALSE;
LD HL,0
ADD HL,SP
LD (HL),0
?0046:
; 81. }
; 82. key=ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD B,0
PUSH BC
POP IX
; 83. switch(key)
LD A,29
XOR C
JP Z,?0009
LD A,49
XOR C
JP Z,?0009
?0048:
; 84. {
; 85. case AP_MSG_STANDBY:
; 86. case AP_KEY_AB | AP_KEY_UP: //搜索时不响音REC
; 87. //do nothing
; 88. break;
?0049:
LD A,38
XOR C
JR NZ,?0057
; 89. case AP_KEY_NEXT|AP_KEY_UP: //NEXT搜索时按NEXT键,停止搜索
; 90. if(Searchflag==1)
LD B,D
DEC B
JR Z,?0128
?0050:
; 91. {
; 92. Searchflag=0;
?0051:
; 93. }
; 94. else if(Direct==10)
LD HL,2
ADD HL,SP
LD A,(HL)
CP 10
JP NZ,?0009
?0053:
; 95. {
; 96. Direct=50;
LD (HL),50
; 97. if(FMStatus.volume)
LD A,(FMStatus+6)
OR A
JP Z,?0009
?0055:
; 98. fmSendCommand(MC_MUTE,releaseMUTE);
JR ?0127
?0056:
?0054:
?0052:
; 99. }
; 100. break;
?0057:
LD A,37
XOR C
JR NZ,?0065
; 101. case AP_KEY_PREV|AP_KEY_UP: //LAST搜索时按LAST键,停止搜索
; 102. if(Searchflag==1)
LD B,D
DEC B
JR NZ,?0059
?0058:
; 103. {
; 104. Searchflag=0;
?0128:
LD D,0
JP LWRD ?0009
?0059:
; 105. }
; 106. else if(Direct==20)
LD HL,2
ADD HL,SP
LD A,(HL)
CP 20
JP NZ,?0009
?0061:
; 107. {
; 108. Direct=50;
LD (HL),50
; 109. if(FMStatus.volume)
LD A,(FMStatus+6)
OR A
JP Z,?0009
?0063:
; 110. fmSendCommand(MC_MUTE,releaseMUTE);
?0127:
PUSH DE
CALL LWRD ?0140
POP DE
?0064:
?0062:
?0060:
; 111. }
; 112. break;
JP LWRD ?0009
?0065:
; 113. default: //热键处理
; 114. key=ap_handle_hotkey(key);
PUSH DE
PUSH IX
POP HL
LD E,L
CALL LWRD ap_handle_hotkey
LD C,A
PUSH BC
POP IX
POP DE
; 115. if(key == RESULT_REDRAW)need_draw=TRUE;
LD A,50
XOR C
JR NZ,?0067
?0066:
LD L,B
LD H,B
ADD HL,SP
LD (HL),1
JP LWRD ?0009
?0067:
; 116. else if(key!=0)
PUSH IX
POP HL
LD A,L
OR H
JP Z,?0009
?0069:
; 117. {
; 118. return key;
; 119. }
?0071:
POP AF
POP AF
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0140:
LD BC,0
?0141:
LD E,12
?0142:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
?0070:
?0068:
?0047:
; 120. }
; 121. }
; 122. }
Search_Show:
; 123.
; 124.
; 125. bool Search_Show(FM_direct_t Direct)
; 126. {
PUSH BC
PUSH IX
PUSH DE
PUSH AF
; 127. bool Search_Flag;
; 128. int i;
; 129. FMStatus.stereo_status=1;
LD A,1
LD (FMStatus+7),A
; 130. FMStatus.station=0;
XOR A
LD (FMStatus+3),A
; 131. fmSendCommand(MC_MUTE,SetMUTE);
LD BC,1
CALL LWRD ?0141
; 132. fmSendCommand(MC_SETVOLUME,FMStatus.volume);
LD BC,(FMStatus+6)
LD B,0
LD E,64
CALL LWRD ?0142
; 133. fmSendCommand(MC_RESTORE,(int)&radio_param);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?