tryplaying.s01
来自「MP3 整个 SDK」· S01 代码 · 共 488 行
S01
488 行
NAME tryplaying(17)
RSEG CODE_2(0)
EXTERN AutoTabNum
EXTERN FMAutoTab
EXTERN FMStatus
EXTERN ResShowPic
PUBLIC TryPlayingHandle
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN fmSendCommand
EXTERN radio_param
EXTERN ui_show_volfm
PUBLIC volume_callback2
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?S_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG CODE_2
volume_callback2:
; 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: TryPlaying.c,v 1.1.1.1 2006/05/22 03:24:00 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12.
; 13. #pragma codeseg(CODE_2)
; 14.
; 15. #include "ap_radio.h"
; 16. #include "actos.h"
; 17.
; 18. //extern slider_t slider;
; 19. extern comval_t F_comval;
; 20. extern WORD FMStationTab[40]; // 前20个是US, 后20个是JP.
; 21. extern fm_play_status_t FMStatus;
; 22. extern FMRADIO_param_t radio_param;
; 23.
; 24. extern WORD FMAutoTab[20]; // 全自动收台,预存台.
; 25. extern BYTE AutoTabNum; // 预存台数.
; 26.
; 27. void volume_callback2(int Vol) //音量设置的CALLBACK函数
; 28. {
PUSH BC
PUSH DE
; 29. //实时改变音量的值
; 30. fmSendCommand(MC_SETVOLUME,Vol);
LD C,E
LD B,D
CALL LWRD ?0050
; 31. }
POP HL
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0050:
LD E,64
?0051:
LD A,BYTE3 fmSendCommand
LD HL,LWRD fmSendCommand
JP LWRD ?BANK_CALL_DIRECT_L08
TryPlayingHandle:
; 32. /*
; 33. ********************************************************************************
; 34. * Description : 试播放5秒钟
; 35. *
; 36. * Arguments :
; 37. *
; 38. * Returns : RESULT_RADIO:PLAY和MODE键, RESULT_IGNORE:NEXT和LAST键
; 39. 其它为热键
; 40. *
; 41. * Notes :
; 42. *
; 43. ********************************************************************************
; 44. */
; 45. int TryPlayingHandle(void)
; 46. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65526
ADD HL,SP
LD SP,HL
; 47. int key, play_time = 12;
; 48. int flash_point = 1;
; 49. bool loop = TRUE;
; 50. int k,i;
; 51. if(FMStatus.mode==0)
LD (IX-4),12
LD (IX-3),0
LD (IX-6),1
LD (IX-5),0
LD (IX-2),1
LD A,(FMStatus+5)
OR A
LD HL,(FMStatus+1)
JR NZ,?0003
?0002:
; 52. {
; 53. k = (FMStatus.freq-0x53d8)/127;
LD BC,44072
ADD HL,BC
EX DE,HL
LD BC,127
JR ?0044
; 54. }
; 55. else
?0003:
; 56. {
; 57. k=(FMStatus.freq-0x28e0)/105;
LD BC,55072
ADD HL,BC
EX DE,HL
LD BC,105
?0044:
CALL LWRD ?US_DIV_L02
LD (IX-10),E
LD (IX-9),D
?0004:
; 58. }
; 59. fmSendCommand(MC_PLAY,0);
LD C,B
LD E,4
CALL LWRD ?0051
; 60. fmSendCommand(MC_SETVOLUME,FMStatus.volume);
?0049:
LD BC,(FMStatus+6)
LD B,0
CALL LWRD ?0050
?0006:
; 61.
; 62. while(loop)
XOR A
OR (IX-2)
JP Z,?0005
?0007:
; 63. {
; 64. key=ap_get_message();
CALL LWRD ap_get_message
LD C,A
LD B,0
PUSH BC
POP IY
; 65. switch(key)
LD E,C
LD D,B
CALL LWRD ?S_V_SWITCH_L06
DEFW 10
DEFW 3
DEFW 4
DEFW 28
DEFW 29
DEFW 33
DEFW 37
DEFW 38
DEFW 48
DEFW 67
DEFW 68
DEFW ?0032
DEFW ?0024
DEFW ?0028
DEFW ?0011
DEFW ?0010
DEFW ?0010
DEFW ?0011
DEFW ?0006
DEFW ?0012
DEFW ?0024
DEFW ?0028
?0009:
; 66. {
; 67. case AP_MSG_STANDBY:
; 68. //do nothing
; 69. break;
?0010:
; 70. case AP_KEY_NEXT|AP_KEY_UP:
; 71. case AP_KEY_PREV|AP_KEY_UP: // 停止试播
; 72. return RESULT_IGNORE;
LD HL,52
; 73. case AP_KEY_PLAY | AP_KEY_UP:
JP LWRD ?0041
?0011:
; 74. case AP_KEY_MODE|AP_KEY_UP: // 保存电台, 返回播放界面.
; 75. loop = FALSE;
; 76. key = RESULT_RADIO;
LD (IX-2),B
LD IY,7
; 77. break;
JR ?0006
?0012:
; 78. case AP_MSG_RTC: // 时间记数,闪烁箭头.
; 79. play_time--;
LD L,(IX-4)
LD H,(IX-3)
DEC HL
LD (IX-4),L
LD (IX-3),H
; 80. if(play_time <= 0)
LD C,L
LD B,H
LD L,D
LD H,D
OR 128
SBC HL,BC
JP PO,?0042
XOR H
?0042:
JP M,?0014
?0013:
; 81. {
; 82. loop = FALSE;
; 83. key = 0;
LD (IX-2),D
LD IY,0
?0014:
; 84. }
; 85. if(flash_point) // 箭头闪烁
LD A,(IX-6)
OR (IX-5)
LD A,(FMStatus+5)
JR Z,?0016
?0015:
; 86. {
; 87. if(FMStatus.mode==0)
OR A
LD C,53
PUSH BC
LD A,(IX-10)
JR NZ,?0018
?0017:
; 88. {
; 89. ResShowPic(SLIDPTR,25+k,53); //显示箭头
ADD A,25
CALL LWRD ?0052
POP AF
; 90. ResShowPic(FMBARBG,0,47); //显示US频率条
LD C,47
PUSH BC
LD C,0
LD DE,51
JR ?0045
; 91. }
; 92. else
?0018:
; 93. {
; 94. ResShowPic(SLIDPTR,40+k,53); //显示箭头
ADD A,40
CALL LWRD ?0052
POP AF
; 95. ResShowPic(FMJPBAR,0,47); //显示JP频率条
LD C,47
PUSH BC
LD C,0
LD DE,55
?0045:
CALL LWRD ?0053
POP AF
?0019:
; 96. }
; 97. flash_point = 0;
XOR A
LD (IX-6),A
LD (IX-5),A
; 98. }
; 99. else // 清除箭头
JP LWRD ?0006
?0016:
; 100. {
; 101.
; 102. if(FMStatus.mode==0)
OR A
LD C,47
PUSH BC
JR NZ,?0022
?0021:
; 103. {
; 104. ResShowPic(FMBARBG,0,47);
LD C,A
LD E,51
JR ?0046
; 105. }
; 106. else
?0022:
; 107. {
; 108. ResShowPic(FMJPBAR,0,47);
LD C,D
LD E,55
?0046:
CALL LWRD ?0053
POP AF
?0023:
; 109. }
; 110.
; 111. flash_point = 1;
LD (IX-6),1
LD (IX-5),0
?0020:
; 112.
; 113. }
; 114. // UpdateScreen(NULL);
; 115. break;
JP LWRD ?0006
?0024:
; 116. case AP_KEY_VOLADD:
; 117. case AP_KEY_VOLADD | AP_KEY_HOLD:
; 118. if (FMStatus.volume ++ <31)
LD HL,FMStatus+6
LD A,(HL)
INC (HL)
CP 31
JR C,?0048
?0025:
; 119. {
; 120. ui_show_volfm(FMStatus.volume); //显示音量
; 121. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
; 122. }
; 123. else
?0026:
; 124. {
; 125. FMStatus.volume = 31;
LD A,31
JR ?0047
?0027:
; 126. }
; 127. break;
?0028:
; 128.
; 129. // 音量调节. zxs==
; 130. case AP_KEY_VOLSUB:
; 131. case AP_KEY_VOLSUB | AP_KEY_HOLD:
; 132. if (FMStatus.volume-- > 0)
LD HL,FMStatus+6
LD B,(HL)
DEC (HL)
INC B
DEC B
JR Z,?0030
?0029:
; 133. {
; 134. ui_show_volfm(FMStatus.volume); //显示音量
?0048:
LD DE,(FMStatus+6)
LD A,BYTE3 ui_show_volfm
LD HL,LWRD ui_show_volfm
CALL LWRD ?BANK_CALL_DIRECT_L08
; 135. fmSendCommand(MC_SETVOLUME, FMStatus.volume);
JP LWRD ?0049
; 136. }
; 137. else
?0030:
; 138. {
; 139. FMStatus.volume = 0;
XOR A
?0047:
LD (FMStatus+6),A
?0031:
; 140. }
; 141. break;
JP LWRD ?0006
?0032:
; 142.
; 143.
; 144. default: //热键处理
; 145. key=ap_handle_hotkey(key);
PUSH IY
POP HL
LD E,L
CALL LWRD ap_handle_hotkey
LD C,A
PUSH BC
POP IY
; 146. if(key!=0)
LD A,C
OR A
JP Z,?0006
?0033:
; 147. {
; 148. loop = FALSE;
LD (IX-2),B
?0034:
?0008:
JP LWRD ?0006
?0005:
; 149. }
; 150. }
; 151. }
; 152. //fmSendCommand(MC_MUTE,SetMUTE);
; 153. fmSendCommand(MC_GETFREQ, (int)&k); // 保存电台
LD L,A
LD H,A
ADD HL,SP
LD C,L
LD B,H
LD E,17
CALL LWRD ?0051
; 154. FMAutoTab[AutoTabNum] = k;
LD HL,(AutoTabNum)
LD H,0
ADD HL,HL
LD BC,FMAutoTab
ADD HL,BC
LD C,(IX-10)
LD (HL),C
LD B,(IX-9)
INC HL
LD (HL),B
; 155. AutoTabNum++;
LD HL,AutoTabNum
INC (HL)
; 156. for(i = AutoTabNum;i < 20;i++)
LD BC,(AutoTabNum)
LD B,0
LD (IX-8),C
LD (IX-7),B
?0036:
LD BC,32788
LD L,(IX-8)
LD H,(IX-7)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0035
?0037:
; 157. {
; 158. if(radio_param.param1[i] == k) // 删除重复的电台.
LD L,(IX-8)
LD H,(IX-7)
ADD HL,HL
LD BC,(radio_param)
ADD HL,BC
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD C,(IX-10)
LD B,(IX-9)
AND A
SBC HL,BC
JR NZ,?0040
?0039:
; 159. {
; 160. radio_param.param1[i] =0;
LD L,(IX-8)
LD H,(IX-7)
ADD HL,HL
LD BC,(radio_param)
ADD HL,BC
XOR A
LD (HL),A
INC HL
LD (HL),A
?0040:
INC (IX-8)
JR NZ,?0036
INC (IX-7)
JR ?0036
?0035:
; 161. // FMStatus.station_count--;
; 162. }
; 163. }
; 164. return key;
PUSH IY
POP HL
; 165. }
?0041:
LD SP,IX
POP IX
POP IY
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0052:
LD C,A
LD E,220
?0053:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?