radio_new_ui.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:59k
源码类别:

DVD

开发平台:

C/C++

  1. /* note: this program is for self tuned radio MV114, MV014, MV011 */
  2. /* PLL IC: LC72131, TUNER IC: LA1844 */
  3. /* state=FM AM mode */
  4. #include "regmap.h"
  5. #include "global.h"
  6. #include "func.h"
  7. #include "radio_mv114_kst.h"
  8. #include "radio_rds.h"
  9. #include "ircode.h" 
  10. #include "osd.h"
  11. #include "dsp3_if.h"
  12. #include "set.h"
  13. #include "audctrl.h"
  14. #include "util.h"
  15. #ifdef SUPPORT_Radio_NEW_UI  //wuzhj 2004/12/10
  16. #include "setup_def.h"
  17. #endif
  18. extern UINT16 check_sum(BYTE *data,BYTE len); 
  19. #define NEW_AUTO_SEARCH_ALL
  20. #define TUNER_DBG
  21. /*
  22. #ifdef SUPPORT_TUNER_DBG
  23. #define  TUNER_DBG
  24. #endif 
  25. */ 
  26. /*
  27. #ifndef DVDRELEASE
  28. #define TUNER_DBG
  29. #endif
  30. #ifndef   TUNER_DBG
  31. #undef printf
  32. #undef print_block
  33. #define printf(f, a...) do {} while (0)
  34. #define print_block(x,y) do {} while (0)
  35. #endif
  36. */
  37. #ifndef  SUPPORT_OSD
  38. #undef   PrintOsdMsg(x,y,z,w)
  39. #define  PrintOsdMsg(x,y,z,w)
  40. #endif
  41. /*
  42. * declare extern function
  43. */
  44. extern void init_ir_num(void);
  45. extern void  polling_vfdr(void);
  46. /*from lc72131.c*/
  47. extern void tuner_mute( BYTE );
  48. extern void set_band(BYTE);
  49. extern void set_mono_stereo(BYTE);
  50. extern void set_station(BYTE i);
  51. extern BYTE is_station();
  52. extern void init_tuner();
  53. extern BYTE test_tuner();
  54. extern void set_freq(UINT16 freq);
  55. extern BYTE is_stereo(void);
  56. BYTE search_station=0;
  57. static BYTE   search_dir=0;
  58. BYTE write2mem=0;
  59. extern int rep_ir_times;
  60. #ifdef SUPPORT_Radio_NEW_UI  //wuzhj 2004/12/10
  61. // color setup
  62. #define SBGCOLOR 11   //bule
  63. BYTE rds_radio_flag=0;
  64. BYTE radio_down_flag=0;
  65. BYTE radio_right_flag=0;
  66. BYTE am_radio_right_flag=0;
  67. extern BYTE prologic_val;
  68. #endif
  69. #include ".\Customers\Sunplus\vfd_gbmsample_l.h"  
  70. #include "vfdfunc.h"
  71. extern void  vfd_set_str();
  72. /*/////////////////////////
  73. Creator: xyy 2004-3-12 
  74. Function:Auto search all station and save the station to e2prom
  75. //////////////////////////*/
  76. #ifndef NEW_AUTO_SEARCH_ALL
  77. void auto_search_all()
  78. {
  79. int i=0;
  80. search_dir = 1;
  81. if(tuner.bandswitch)//am
  82. {
  83. tuner.ambak=AM_FREQ_MIN+0x30;
  84. while(1)
  85. {
  86. if(tuner.ambak == AM_FREQ_MIN)
  87. {
  88. i = 0;
  89. search_station = 0;
  90. save_tuner_E2PROM();
  91. tuner.am_ch = 1;
  92. set_station(tuner.am_ch);
  93.     break;
  94. }
  95. Amautosearch(AUTOSEARCHUP);
  96. if(search_station==1)
  97. {
  98. tuner.amfreq[i] = tuner.ambak;
  99. i++;
  100. //save station
  101. search_station = 0;
  102. search_dir = 1;
  103. }
  104. }
  105. }
  106. else //fm*/
  107. {
  108. tuner.fmbak=FM_FREQ_MIN+1;
  109. while(1)
  110. {
  111. if(tuner.fmbak == FM_FREQ_MIN)
  112. {
  113. i = 0;
  114. search_station = 0;
  115. save_tuner_E2PROM();
  116. tuner.fm_ch = 1;
  117. set_station(tuner.fm_ch);
  118.     break;
  119. }
  120. Fmautosearch(AUTOSEARCHUP);
  121. if(search_station==1)
  122. {
  123. tuner.fmfreq[i] = tuner.fmbak;
  124. i++;
  125. //save station
  126. search_station = 0;
  127. search_dir = 1;
  128. }
  129. }
  130. }
  131. }
  132. #endif//NEW_AUTO_SEARCH_ALL
  133. #ifdef NEW_AUTO_SEARCH_ALL
  134. void auto_search_all_am()
  135. {
  136. BYTE ch;
  137. if(tuner.bandswitch  == 0)
  138. {
  139. tuner.bandswitch=(!tuner.bandswitch);
  140. set_band(tuner.bandswitch);
  141. }
  142. //now is am
  143. tuner.ambak = AM_FREQ_MIN;
  144. tuner.am_ch = 0;
  145. for(ch = 0;ch < MAX_MEM_BAND;ch++)
  146. {
  147. while(1)
  148. {       
  149. tuner.ambak = (tuner.ambak + 0x30); // 3*3k step
  150. if(tuner.ambak>AM_FREQ_MAX)  //am max
  151. {
  152. break;
  153. }
  154. tuner.amfreq[tuner.am_ch] = tuner.ambak;
  155. disfreq();
  156. if(is_station())
  157. {
  158. break; 
  159. }        
  160.        }
  161. if(tuner.ambak>AM_FREQ_MAX)  //am max
  162. {
  163. break;
  164. }
  165. if(tuner.am_ch < (MAX_MEM_BAND-1))
  166. tuner.am_ch++;
  167. else
  168. tuner.am_ch = 0;
  169. }
  170. }
  171. void auto_search_all_fm()
  172. {
  173. BYTE ch;
  174. if(tuner.bandswitch  == 1)
  175. {
  176. tuner.bandswitch=(!tuner.bandswitch);
  177. set_band(tuner.bandswitch);
  178. }
  179. //now is fm
  180. tuner.fmbak = FM_FREQ_MIN;
  181. tuner.fm_ch = 0;
  182. tuner.bandswitch = 0;//fm
  183. for(ch = 0;ch < MAX_MEM_BAND;ch++)
  184. {
  185. while(1)
  186. {       
  187. tuner.fmbak=(tuner.fmbak+1); // 100K STEP, ref clock: 25k
  188. if(tuner.fmbak>FM_FREQ_MAX)  //fm max 107.8MHZ
  189. {
  190. break;
  191. }  
  192. tuner.fmfreq[tuner.fm_ch] =tuner.fmbak ;
  193. disfreq();
  194. if(is_station())
  195. break;
  196.        }
  197. if(tuner.fmbak >FM_FREQ_MAX)  //fm max 107.8MHZ
  198. {
  199. break;
  200. }
  201. if(tuner.fm_ch < (MAX_MEM_BAND-1))
  202. tuner.fm_ch++;
  203. else
  204. tuner.fm_ch = 0;
  205. }
  206. }
  207. #endif//NEW_AUTO_SEARCH_ALL
  208. /*
  209. char *capitalise(char *p)
  210. mode==0
  211. ----translate lowercase into capital
  212. mode==1
  213. ----translate capital into lowercase
  214. len ??????
  215. */
  216. void capitalize(char *p,BYTE mode,BYTE len)
  217. {
  218.     while(len)
  219.     {
  220.         if(*p>='a'&&*p<='z')
  221.         {
  222.             if(mode)
  223.                 *p+=0x20;
  224.             else
  225.                 *p-=0x20;
  226.         }
  227.         p++;
  228.         len--;
  229.     }
  230. }
  231. void str_filter(char *p,BYTE len)
  232. {
  233. //capitalize(p,len);
  234.     while(len)
  235.     {
  236.         if(*p>='A'&&*p<='Z')
  237.         {
  238.         }
  239.         else if((*p == '-')||(*p == ':'))
  240.         {
  241.         }
  242.         else if(*p>='0'&&*p<='9')
  243.         {
  244.         }
  245.         else
  246.         {
  247. *p = ' ';
  248.         }
  249.         p++;
  250.         len--;
  251.     }
  252. }
  253. #ifdef XINGQIU_DVD_RECEIVER//xyy 2004-5-24 9:06
  254. void tuner_key(BYTE key)
  255. {
  256.     static BYTE enter_flag=0;
  257. //return;
  258.     switch(key)
  259. {
  260. /* case IRC_0:
  261. case IRC_1:
  262. printf("========  hello hello =======n");
  263. tuner_oper_mode = RECALL_OR_STORE;
  264. break;*/
  265. case IRC_MUTE:
  266. int id;
  267. //rds_decoder_init();
  268. //return;
  269. //printf("size of :%dn",sizeof(tuner));
  270. user_mute=!user_mute;
  271. tuner_mute(user_mute);
  272. if(user_mute)
  273. {
  274. id=STR_OS_MUTE;
  275.      PrintOsdMsg(id,REGION1,0,0);
  276. }
  277. else
  278. //     id=STR_OS_SPACE;
  279.         OSD_OnOffRegion(OSD_OFF,1);//xyy 2003-10-13 17:15
  280. break;
  281. }     
  282. case IRC_GOTO:
  283. tuner_oper_mode = AUTO_SEARCH;
  284. timeout_vfd = 0;   
  285. if(tuner.bandswitch  == 1)
  286. {
  287. auto_search_all_am();
  288. tuner.am_ch = 0;
  289. set_station(tuner.am_ch);
  290. }
  291. else
  292. {
  293. auto_search_all_fm();
  294. tuner.fm_ch = 0;
  295. set_station(tuner.fm_ch);
  296. }
  297. save_tuner_E2PROM();
  298. tuner_oper_mode = NORMAL_TUNE;
  299. disfreq();
  300. break;
  301. case IRC_SETUP:
  302. search_station = 1;
  303. tuner_oper_mode = RECALL_OR_STORE;
  304. timeout_vfd = 6000;
  305. break;
  306. case IRC_AUD_LANGUAGE:
  307. if(!tuner.bandswitch)
  308. {
  309. tuner_st_mono();
  310. timeout_vfd = 4000;
  311. }
  312. break;
  313. case IRC_CLEAR:
  314. printf("======  clear ======n");
  315. break;
  316. case IRC_TITLEMENU:
  317. tuner_oper_mode = FREQ_DIRECT_CALL;
  318. timeout_vfd = 6000;
  319. erase_vfd_mem();
  320. if(tuner.bandswitch)
  321. {
  322. station_input_index = 1;
  323. psprintf(linebuf,"%02d   0000",tuner.am_ch); 
  324. }
  325. else
  326. {
  327. psprintf(linebuf,"%02d  00000",tuner.fm_ch); 
  328. vfd_set_dot(0x49);
  329. }
  330. vfd_set_str(0,0,0,linebuf);
  331. break;
  332. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 13:54
  333. case IRC_SELECT:
  334.     if(enter_flag == 0)
  335.     {
  336.              erase_vfd_mem();
  337.              if(psReadyFlag == 0x0f)
  338.              {
  339.               rds_func_flag = PS_FUNC; 
  340.               psprintf(RegionValStr[REGION1],"PS : %s",programServiceBuf);
  341.   PrintOsdMsg(0, REGION1, 0, 1);
  342.           }
  343.      else
  344.           {
  345.             //vfd_set_str(0,0,0,"  NO PS  "); 
  346.             psprintf(RegionValStr[REGION1],"NO PS");
  347.             PrintOsdMsg(0, REGION1, 0, 1);
  348.               rds_func_flag = 0;
  349.           }
  350.        enter_flag++;
  351.     }
  352.     else if(enter_flag == 1)
  353.     {
  354.             erase_vfd_mem();
  355.             if(ptyReadyFlag == 0xff)
  356.              {
  357.              rds_func_flag = PTY_FUNC;
  358. //printf( "PTY %s",programTypeBuf);
  359. //PrintOsdMsg(, y, z, w)
  360.  psprintf(RegionValStr[REGION1],"PYP : %s",programTypeBuf);
  361.  PrintOsdMsg(0, REGION1, 0, 1);
  362.             }
  363.          else
  364.          {
  365.              //vfd_set_str(0,0,0,"  NO PTY  "); 
  366.              psprintf(RegionValStr[REGION1],"NO PYP");
  367.  PrintOsdMsg(0, REGION1, 0, 1);
  368.              rds_func_flag = 0;
  369.          }
  370.         enter_flag++;
  371.     }
  372.     else if(enter_flag == 2)
  373. {
  374.             erase_vfd_mem();
  375.             if((txtBreadyFlag == 0xffff)||(txtAreadyFlag == 0xffff))
  376.              {
  377.              rds_func_flag = RT_FUNC;
  378. //printf("%sn",radioTextBufA[0]);
  379.              capitalize(radioTextBufA[radio_text_type], 0, 64);
  380.  str_filter(radioTextBufA[radio_text_type], 64);
  381.              //printf("%sn",radioTextBufA[0]);
  382.  psprintf(RegionValStr[REGION1],"RT : %s",radioTextBufA[radio_text_type]);
  383.  PrintOsdMsg(0, REGION1, 0, 1);
  384.             }
  385.          else
  386.          {
  387.              //vfd_set_str(0,0,0,"  NO RT  "); 
  388.              psprintf(RegionValStr[REGION1],"NO RT");
  389.  PrintOsdMsg(0, REGION1, 0, 1);
  390.              
  391.              rds_func_flag = 0;
  392.          }
  393.         enter_flag++;
  394.     }
  395.     else if(enter_flag == 3)
  396.             {
  397.             erase_vfd_mem();
  398.             if(ctReadyFlag == 0xff)
  399.              {
  400.              rds_func_flag = CT_FUNC;
  401.              //printf("CT %sn",clocktimeBuf);
  402.  psprintf(RegionValStr[REGION1],"%s",clocktimeBuf);
  403.  PrintOsdMsg(0, REGION1, 0, 1);
  404.        
  405.             }
  406.          else
  407.      {              
  408.              //vfd_set_str(0,0,0,"  NO CT  "); 
  409.              psprintf(RegionValStr[REGION1],"NO CT");
  410.  PrintOsdMsg(0, REGION1, 0, 1);
  411.           
  412.              rds_func_flag = 0;
  413.          }
  414.         enter_flag++;
  415.     }
  416.     else if(enter_flag == 4)
  417.      {
  418.       
  419.             erase_vfd_mem();
  420.             if(ptynReadyFlag == 0x0f)
  421.              {
  422.              rds_func_flag = PTYN_FUNC;
  423.              capitalize(programTypeNameBuf, 0, 9);
  424.              str_filter(programTypeNameBuf,9);
  425. psprintf(RegionValStr[REGION1],"PTYN:%s",programTypeNameBuf);
  426. PrintOsdMsg(0, REGION1, 0, 1);
  427.              }
  428.      else
  429.           {
  430.               //vfd_set_str(0,0,0," NO PTYN "); 
  431.               rds_func_flag = 0;
  432. psprintf(RegionValStr[REGION1],"NO PTYN");
  433.   PrintOsdMsg(0, REGION1, 0, 1);
  434.      }
  435.         enter_flag = 0;
  436.      }
  437.         rdsinfo_dispindex = 0;
  438.         timeout_vfd = 2000;
  439.     
  440.            break;
  441. #endif
  442. case IRC_FORWARD:/* auto search up */
  443. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  444.         rds_clear_var();
  445. #endif
  446. tuner_oper_mode = NORMAL_TUNE;    
  447. tuner.Istuning[tuner.bandswitch]=1;
  448. timeout_vfd = 0;
  449. // to avoid the noise when enter auto search mode
  450. tuner_mute_flag = 0;
  451. search_dir=1;
  452. break;
  453. case  IRC_BACKWARD:  /* auto search down */
  454. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  455.         rds_clear_var();
  456. #endif
  457. // to avoid the noise when enter auto search mode
  458. tuner_oper_mode = NORMAL_TUNE; 
  459. timeout_vfd = 0;   
  460. tuner_mute_flag = 0;
  461. search_dir=2;
  462. break;
  463. case IRC_LEFT:
  464. search_dir = 0;
  465. search(SEARCHDEC);
  466. break;
  467. case IRC_RIGHT:
  468. search_dir = 0;
  469. search(SEARCHADD);
  470. break;
  471. case IRC_PREV:
  472. //printf("leftn");
  473. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  474.         rds_clear_var();
  475. #endif
  476. if(tuner.bandswitch)//am
  477. {
  478. if(tuner.am_ch>1)
  479. tuner.am_ch--;
  480. else
  481. tuner.am_ch = 1;
  482. set_station(tuner.am_ch);
  483. }
  484. else //fm
  485. {
  486. if(tuner.fm_ch>=1)
  487. tuner.fm_ch--;
  488. else
  489. // tuner.fm_ch = 1;
  490. tuner.fm_ch = 0;
  491. set_station(tuner.fm_ch);
  492. }
  493. write2mem =1;
  494. break;
  495. case IRC_NEXT:
  496. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  497.         rds_clear_var();
  498. #endif
  499. if(tuner.bandswitch) //am
  500. {
  501. if(tuner.am_ch<MAX_MEM_BAND)
  502. tuner.am_ch++;
  503. else
  504. tuner.am_ch = MAX_MEM_BAND;
  505. set_station(tuner.am_ch);
  506. }
  507. else  //fm
  508. {
  509. if(tuner.fm_ch<MAX_MEM_BAND)
  510. tuner.fm_ch++;
  511. else
  512. tuner.fm_ch = MAX_MEM_BAND;
  513. set_station(tuner.fm_ch);
  514. }
  515. write2mem =1;
  516. break;
  517. case  IRC_RCVR_BAND:                             /* serach- */
  518. {
  519. search_dir=0;
  520. tuner.bandswitch=(!tuner.bandswitch);
  521. //printf("bandn");
  522. set_band(tuner.bandswitch);  
  523. write2mem=1;    
  524. break;
  525. }
  526. #ifdef SUPPORT_APOGEE_AMP
  527. case IRC_VOLUME_UP:
  528. //     ircmd_volume_up();
  529. // set_volume(1);
  530. break ;
  531. case IRC_VOLUME_DN:
  532. //     ircmd_volume_down();
  533. // set_volume(0);
  534. break ;
  535. #endif
  536. default:                                      
  537. break;
  538.       }       
  539. }
  540. #elif defined(ORITRON_DVD_RECEIVER)
  541. void tuner_key(BYTE key)
  542. {
  543.     static BYTE enter_flag=0;
  544. //return;
  545.     switch(key)
  546. {
  547. case IRC_MUTE:
  548. int id;
  549. user_mute=!user_mute;
  550. tuner_mute(user_mute);
  551. if(user_mute)
  552. {
  553. id=STR_OS_MUTE;
  554. PrintOsdMsg(id,REGION1,0,0);
  555.             
  556. }
  557. else
  558.             
  559.         OSD_OnOffRegion(OSD_OFF,1);//xyy 2003-10-13 17:15
  560. break;
  561. }     
  562. case IRC_GOTO:
  563. tuner_oper_mode = AUTO_SEARCH;
  564. timeout_vfd = 0;   
  565. if(tuner.bandswitch  == 1)
  566. {
  567. auto_search_all_am();
  568. tuner.am_ch = 0;
  569. set_station(tuner.am_ch);
  570. }
  571. else
  572. {
  573. auto_search_all_fm();
  574. tuner.fm_ch = 0;
  575. set_station(tuner.fm_ch);
  576. }
  577. save_tuner_E2PROM();
  578. tuner_oper_mode = NORMAL_TUNE;
  579. disfreq();
  580. break;
  581. case IRC_SETUP:
  582. search_station = 1;
  583. tuner_oper_mode = RECALL_OR_STORE;
  584. timeout_vfd = 6000;
  585. break;
  586. case IRC_AUD_LANGUAGE:
  587. if(!tuner.bandswitch)
  588. {
  589. tuner_st_mono();
  590. timeout_vfd = 4000;
  591. }
  592. break;
  593. case IRC_FORWARD:/* auto search up */
  594. tuner_oper_mode = NORMAL_TUNE;    
  595. tuner.Istuning[tuner.bandswitch]=1;
  596. timeout_vfd = 0;
  597. // to avoid the noise when enter auto search mode
  598. tuner_mute_flag = 0;
  599. search_dir=1;
  600. break;
  601. case  IRC_BACKWARD:  /* auto search down */
  602. // to avoid the noise when enter auto search mode
  603. tuner_oper_mode = NORMAL_TUNE; 
  604. timeout_vfd = 0;   
  605. tuner_mute_flag = 0;
  606. search_dir=2;
  607. break;
  608. case IRC_LEFT:
  609. search_dir = 0;
  610. search(SEARCHDEC);
  611. break;
  612. case IRC_RIGHT:
  613. search_dir = 0;
  614. search(SEARCHADD);
  615. break;
  616. case IRC_PREV:
  617. //printf("leftn");
  618. if(tuner.bandswitch)//am
  619. {
  620. if(tuner.am_ch>1)
  621. tuner.am_ch--;
  622. else
  623. tuner.am_ch = 1;
  624. set_station(tuner.am_ch);
  625. }
  626. else //fm
  627. {
  628. if(tuner.fm_ch>=1)
  629. tuner.fm_ch--;
  630. else
  631. // tuner.fm_ch = 1;
  632. tuner.fm_ch = 0;
  633. set_station(tuner.fm_ch);
  634. }
  635. write2mem =1;
  636. break;
  637. case IRC_NEXT:
  638. if(tuner.bandswitch) //am
  639. {
  640. if(tuner.am_ch<MAX_MEM_BAND)
  641. tuner.am_ch++;
  642. else
  643. tuner.am_ch = MAX_MEM_BAND;
  644. set_station(tuner.am_ch);
  645. }
  646. else  //fm
  647. {
  648. if(tuner.fm_ch<MAX_MEM_BAND)
  649. tuner.fm_ch++;
  650. else
  651. tuner.fm_ch = MAX_MEM_BAND;
  652. set_station(tuner.fm_ch);
  653. }
  654. write2mem =1;
  655. break;
  656. case  IRC_RCVR_BAND:                             /* serach- */
  657. {
  658. search_dir=0;
  659. tuner.bandswitch=(!tuner.bandswitch);
  660. //printf("bandn");
  661. set_band(tuner.bandswitch);  
  662. write2mem=1;    
  663. break;
  664. }
  665. default:                                      
  666. break;
  667.       }       
  668. }
  669. #elif defined(SUPPORT_Radio_NEW_UI)     //wuzhj add for new ui 2004/12/10
  670. void tuner_key(BYTE key)    //wuzhj 2004/12/10
  671. {
  672.     static BYTE enter_flag=0;
  673. //return;
  674.     switch(key)
  675. {
  676. case IRC_MUTE:
  677. user_mute=!user_mute;
  678. tuner_mute(user_mute);
  679. if(user_mute)
  680. {
  681.      psprintf(RegionValStr[1]," MUTE ");
  682.     osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-2, RegionValStr[1], SFONTCOLOR, SBGCOLOR);
  683. }
  684. else
  685. {
  686.                 osd_draw_rect(416, 4, 100, 26, 4);
  687.         if(tuner.st_mono == 1)
  688.             {
  689.             psprintf(RegionValStr[1],"  ST  ");
  690.             }
  691.             else
  692.             {
  693.             psprintf(RegionValStr[1]," MONO ");
  694.             }
  695.                 osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-2, RegionValStr[1], SFONTCOLOR, SBGCOLOR);  
  696. }
  697. break;
  698. }   
  699. case IRC_SELECT:
  700.         if(rds_radio_flag==0)
  701.         {
  702.             if(tuner.bandswitch) //am
  703.     {
  704.     if(am_radio_right_flag==0)
  705.         {
  706.     
  707.             tuner.am_ch=radio_down_flag;
  708.                     set_station(tuner.am_ch);
  709.             write2mem =1;
  710.             disfreq();
  711.         }
  712.         else
  713.         {
  714.             tuner.am_ch=radio_down_flag+10;
  715.                     set_station(tuner.am_ch);
  716.             write2mem =1;
  717.             disfreq();
  718.         }
  719.     }
  720.         else  //fm
  721.         {
  722.     if(radio_right_flag==0)
  723.         {
  724.     
  725.             tuner.fm_ch=radio_down_flag;
  726.                     set_station(tuner.fm_ch);
  727.             write2mem =1;
  728.             disfreq();
  729.         }
  730.         else
  731.         {
  732.             tuner.fm_ch=radio_down_flag+10;
  733.                     set_station(tuner.fm_ch);
  734.             write2mem =1;
  735.             disfreq();
  736.         }
  737.         }
  738.         }
  739.     break;
  740. case IRC_UP:
  741.     
  742.         if(rds_radio_flag==0)
  743.         {
  744.         if(radio_down_flag <= 0)
  745.     {
  746.     radio_down_flag = 9;
  747.     }
  748.     else
  749.     {
  750.     radio_down_flag--;
  751.     }
  752.             //osd_init_Radio();
  753.             DrawRadioup(radio_down_flag,radio_right_flag,am_radio_right_flag);
  754.         }        
  755. break;
  756. case  IRC_DOWN:
  757.     
  758.         if(rds_radio_flag==0)
  759.         {
  760.             if(radio_down_flag >= 9)
  761.     {
  762.     radio_down_flag = 0;
  763.     }
  764.     else
  765.     {
  766.     radio_down_flag++;
  767.     }
  768.             //osd_init_Radio();
  769.             DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);
  770.         }                 
  771. break;
  772. case IRC_LEFT:
  773.         if(rds_radio_flag==0)
  774.         {
  775.             if(tuner.bandswitch)
  776.             {    
  777.                 am_radio_right_flag=0;                       
  778.                 DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);            
  779.             }
  780.             else
  781.             {  
  782.                 radio_right_flag=0;                       
  783.                 DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);          
  784.             }  
  785.         }
  786.     break;
  787. case IRC_RIGHT:
  788.         if(rds_radio_flag==0)
  789.         {
  790.             if(tuner.bandswitch)
  791.             {    
  792.                 am_radio_right_flag=1;                       
  793.                 DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);          
  794.             }
  795.             else
  796.             {
  797.                 radio_right_flag=1;                       
  798.                 DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);          
  799.             }
  800.         }     
  801.     break;
  802. case  IRC_FORMAT:
  803.     if(tuner.st_mono == 1)
  804.      {
  805.         tuner.st_mono = 0;
  806.      }
  807.     else
  808.      {
  809.         tuner.st_mono = 1;
  810.      }
  811.     tuner_st_mono();
  812.     break;
  813. case  IRC_ZOOM:                             /* serach- */
  814. {
  815. search_dir=0;
  816. tuner.bandswitch=(!tuner.bandswitch);
  817. //printf("bandn");
  818. set_band(tuner.bandswitch);  
  819. write2mem=1; 
  820.             osd_init_Radio_fm();
  821. disfreq();   
  822. break;
  823. }
  824. case IRC_PROGRAM:
  825. #ifndef NEW_AUTO_SEARCH_ALL
  826. auto_search_all();
  827. #else
  828.        // osd_init_Radio_fm();
  829.         auto_search_all_am();
  830. auto_search_all_fm();
  831. //write2mem=1;
  832. tuner.fm_ch = 0;
  833. set_station(tuner.fm_ch);  //goto the 1st station
  834. #endif  //NEW_AUTO_SEARCH_ALL
  835. break;
  836. #ifdef SUPPORT_APOGEE_AMP
  837. case IRC_VOLUME_UP:
  838.         Radio_vol_up();
  839.         //subvol_time_out = 10;
  840.         osd_draw_rect(416, 35, 132, 26, 11);
  841.         osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-1, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  842. //     ircmd_volume_up();
  843. // set_volume(1);
  844. break ;
  845. case IRC_VOLUME_DN:
  846.         Radio_vol_down();
  847.         osd_draw_rect(416, 35, 132, 26, 11);
  848.         //subvol_time_out = 10;
  849.     osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-1, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  850. //     ircmd_volume_down();
  851. // set_volume(0);
  852. break ;
  853. #endif
  854.     case IRC_PROLOGIC:
  855.        {
  856.          BYTE buf[40];
  857.          AudioSetVolume(0);  // cmhuang, 2003/8/28 11:58PM
  858.         prologic_val++;
  859.         if(prologic_val>2) 
  860.         prologic_val=0;
  861.     
  862.     switch(prologic_val)
  863.     {
  864.     case 0:
  865.         //id=STR_OS_PL_MOVIE;
  866.         psprintf(buf," PROLOGIC:[MOVIE MODE]");
  867.         osd_draw_rect(14, 35, 360, 26, 11);
  868.         osd_DrawString(1, SETUP_MENU_YSTART-1, buf, SFONTCOLOR, SBGCOLOR);
  869.         break;
  870.     case 1:
  871.         //id=STR_OS_PL_MUSIC;
  872.         psprintf(buf," PROLOGIC:[MUSIC MODE]");
  873.         osd_draw_rect(14, 35, 360, 26, 11);
  874.         osd_DrawString(1, SETUP_MENU_YSTART-1, buf, SFONTCOLOR, SBGCOLOR);
  875.         break;
  876.     case 2:
  877.         //id=STR_OS_OFF;
  878.         psprintf(buf," PROLOGIC:[ OFF ] ");
  879.         osd_draw_rect(14, 35, 360, 26, 11);
  880.         osd_DrawString(1, SETUP_MENU_YSTART-1, buf, SFONTCOLOR, SBGCOLOR);
  881.         break;
  882.     }
  883.     //PrintOsdMsg(STR_OS_PROLOGIC|(id<<OSDSTR_ID_TOTL_BIT),REGION1,1,4);
  884.    
  885.     
  886.     set_prologic_val(prologic_val);
  887.     AudioDemute();  // cmhuang, 2003/8/28 11:58PM
  888.         break;
  889. }
  890.     case IRC_PAUSE:
  891.        
  892.         if(rds_radio_flag==0)
  893.         {
  894. osd_init_Radio_rds();
  895. disp_rds_func();    
  896.     osd_DrawString(1, SETUP_MENU_YSTART-2, RegionValStr[2], SFONTCOLOR, SBGCOLOR);
  897.         rds_radio_flag=1;
  898.         }
  899.         else
  900.         {
  901.          osd_init_Radio_fm();      
  902.          disfreq();
  903.          rds_radio_flag=0;
  904.         }
  905.       
  906.         break;
  907.     case IRC_NEXT:/* auto search down */
  908. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  909.         rds_clear_var();
  910. #endif
  911. {
  912. tuner.Istuning[tuner.bandswitch]=1;
  913. if(search_dir&&(rep_ir_times<INC_SPEED_TIMES))
  914. {
  915. search_dir=0;
  916. //tuner_mute( 0 ); //demute when auto search
  917. tuner_mute_flag = 1; // auto demute after 500ms
  918. }else
  919. {
  920. if(rep_ir_times<INC_SPEED_TIMES)              
  921. {
  922. #ifdef TUNER_DBG
  923. //printf("decn");
  924. #endif
  925. search(SEARCHDEC);
  926. }else
  927. {   
  928. // to avoid the noise when enter auto search mode
  929. tuner_mute_flag = 0;
  930. search_dir=2;
  931.         }
  932.      }
  933.         break;
  934. }       
  935.     case IRC_PREV:/* auto search up */
  936. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  937.         rds_clear_var();
  938. #endif
  939. {
  940. tuner.Istuning[tuner.bandswitch]=1;
  941. if(search_dir&&(rep_ir_times<INC_SPEED_TIMES))
  942. {                
  943. search_dir=0;
  944. //tuner_mute( 0 ); // demute when auto search
  945. tuner_mute_flag = 1; // auto demute after 500ms
  946. }else
  947. {
  948. if(rep_ir_times<INC_SPEED_TIMES)
  949. {
  950. #ifdef TUNER_DBG
  951. //printf("addn");
  952. #endif
  953. search(SEARCHADD);
  954. }else 
  955. {   
  956. // to avoid the noise when enter auto search mode
  957. tuner_mute_flag = 0;
  958. search_dir=1;
  959.               }
  960. }  
  961.         break;
  962. }
  963. default:                                      
  964. break;
  965.       }       
  966. }
  967. #else
  968. void tuner_key(BYTE key)
  969. {
  970.     static BYTE enter_flag=0;
  971. //return;
  972.     switch(key)
  973. {
  974. case IRC_MUTE:
  975. int id;
  976. //rds_decoder_init();
  977. //return;
  978. //printf("size of :%dn",sizeof(tuner));
  979. user_mute=!user_mute;
  980. tuner_mute(user_mute);
  981. if(user_mute)
  982. {
  983. id=STR_OS_MUTE;
  984.      PrintOsdMsg(id,REGION1,0,0);
  985. }
  986. else
  987. {
  988. //     id=STR_OS_SPACE;
  989.         OSD_OnOffRegion(OSD_OFF,1);//xyy 2003-10-13 17:15
  990. }
  991. break;
  992. }   
  993. #ifdef SUPPORT_RDS_FUNCTION
  994. case IRC_SELECT:
  995. if(rds_func_flag >= 4)
  996. {
  997. rds_func_flag = 0;
  998. }
  999. else
  1000. {
  1001. rds_func_flag++;
  1002. }
  1003. disp_rds_func(rds_func_flag);
  1004. break;
  1005. #endif /*SUPPORT_RDS_FUNCTION*/
  1006. case IRC_UP:/* auto search up */
  1007. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  1008.         rds_clear_var();
  1009. #endif
  1010. {
  1011. tuner.Istuning[tuner.bandswitch]=1;
  1012. if(search_dir&&(rep_ir_times<INC_SPEED_TIMES))
  1013. {                
  1014. search_dir=0;
  1015. //tuner_mute( 0 ); // demute when auto search
  1016. tuner_mute_flag = 1; // auto demute after 500ms
  1017. }else
  1018. {
  1019. if(rep_ir_times<INC_SPEED_TIMES)
  1020. {
  1021. #ifdef TUNER_DBG
  1022. //printf("addn");
  1023. #endif
  1024. search(SEARCHADD);
  1025. }else 
  1026. {   
  1027. // to avoid the noise when enter auto search mode
  1028. tuner_mute_flag = 0;
  1029. search_dir=1;
  1030.               }
  1031. }   
  1032. break;
  1033. }
  1034. case  IRC_DOWN:  /* auto search down */
  1035. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  1036.         rds_clear_var();
  1037. #endif
  1038. {
  1039. tuner.Istuning[tuner.bandswitch]=1;
  1040. if(search_dir&&(rep_ir_times<INC_SPEED_TIMES))
  1041. {
  1042. search_dir=0;
  1043. //tuner_mute( 0 ); //demute when auto search
  1044. tuner_mute_flag = 1; // auto demute after 500ms
  1045. }else
  1046. {
  1047. if(rep_ir_times<INC_SPEED_TIMES)              
  1048. {
  1049. #ifdef TUNER_DBG
  1050. //printf("decn");
  1051. #endif
  1052. search(SEARCHDEC);
  1053. }else
  1054. {   
  1055. // to avoid the noise when enter auto search mode
  1056. tuner_mute_flag = 0;
  1057. search_dir=2;
  1058.               }
  1059.           }
  1060. break;
  1061. }
  1062. case IRC_LEFT:
  1063. //printf("leftn");
  1064. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  1065.         rds_clear_var();
  1066. #endif
  1067. if(tuner.bandswitch)//am
  1068. {
  1069. if(tuner.am_ch>0)
  1070. tuner.am_ch--;
  1071. else
  1072. tuner.am_ch = 0;
  1073. set_station(tuner.am_ch);
  1074. }
  1075. else //fm
  1076. {
  1077. if(tuner.fm_ch>0)
  1078. tuner.fm_ch--;
  1079. else
  1080. tuner.fm_ch = 0;
  1081. set_station(tuner.fm_ch);
  1082. }
  1083. write2mem =1;
  1084. disfreq();
  1085. break;
  1086. case IRC_RIGHT:
  1087. #ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
  1088.         rds_clear_var();
  1089. #endif
  1090. if(tuner.bandswitch) //am
  1091. {
  1092. if(tuner.am_ch<(MAX_MEM_BAND-1))
  1093. tuner.am_ch++;
  1094. else
  1095. tuner.am_ch = (MAX_MEM_BAND-1);
  1096. set_station(tuner.am_ch);
  1097. }
  1098. else  //fm
  1099. {
  1100. if(tuner.fm_ch<(MAX_MEM_BAND-1))
  1101. tuner.fm_ch++;
  1102. else
  1103. tuner.fm_ch = (MAX_MEM_BAND-1);
  1104. set_station(tuner.fm_ch);
  1105. }
  1106. write2mem =1;
  1107. disfreq();
  1108. break;
  1109. case  IRC_FORMAT:
  1110. tuner_st_mono();
  1111. break;
  1112. case  IRC_ZOOM:                             /* serach- */
  1113. {
  1114. search_dir=0;
  1115. tuner.bandswitch=(!tuner.bandswitch);
  1116. //printf("bandn");
  1117. set_band(tuner.bandswitch);  
  1118. write2mem=1;    
  1119. break;
  1120. }
  1121. case IRC_PROGRAM:
  1122. #ifndef NEW_AUTO_SEARCH_ALL
  1123. auto_search_all();
  1124. #else
  1125. auto_search_all_am();
  1126. auto_search_all_fm();
  1127. tuner.fm_ch = 0;
  1128. set_station(tuner.fm_ch);  //goto the 1st station
  1129. #endif  //NEW_AUTO_SEARCH_ALL
  1130. break;
  1131. #ifdef SUPPORT_APOGEE_AMP
  1132. case IRC_VOLUME_UP:
  1133. //     ircmd_volume_up();
  1134. // set_volume(1);
  1135. break ;
  1136. case IRC_VOLUME_DN:
  1137. //     ircmd_volume_down();
  1138. // set_volume(0);
  1139. break ;
  1140. #endif
  1141. default:                                      
  1142. break;
  1143.       }       
  1144. }
  1145. #endif
  1146. #include "sysmain2_inc.h" 
  1147. #include "kernel.h"
  1148. #include "tvif.h"
  1149. //#include "radio_rds.h"//xyy 2003-12-1 13:28
  1150. void   tuner_main(void)
  1151. {
  1152.     #ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
  1153. osd_init();//xyy 2003-9-23 16:36
  1154.     #endif
  1155. #ifdef NEW_AUTO_SEARCH_ALL
  1156. //change_system_clock(19);
  1157. #endif
  1158. //disable_video();
  1159. //tv_dacoff(0x3f);
  1160.  
  1161.     load_tuner_E2PROM();//marked by xyy 2003-9-23 9:01 
  1162. tunerflag = 0;
  1163. station_input_index = 0;
  1164. tuner_oper_mode = NORMAL_TUNE;    
  1165.     
  1166. init_tuner();
  1167.     
  1168.     if(test_tuner())
  1169.     {
  1170. psprintf(RegionValStr[2],"TUNER NOT READY");
  1171. PrintOsdMsg(STR_OS_SPACE,0x2,0,1);
  1172. #ifdef XINGQIU_RECEIVER_PANNEL //xyy 2004-8-5
  1173. vfd_set_str(0,0,0,"NOT READY");
  1174. #endif
  1175. while (system_state != SYSTEM_OPEN)
  1176. {
  1177. polling();
  1178. }
  1179.     }
  1180.     else    //wuzhj 2005/01/18  debug not tuner bug 
  1181.    {
  1182.     erase_vfd_mem(); 
  1183.   #ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
  1184.     osd_init_Radio();   //wuzhj 2004/12/04
  1185.     disfreq();
  1186.     ShowRadioTitle();  //wuzhj 2004/12/04
  1187.   #else
  1188.     disfreq();
  1189.   
  1190.   #endif
  1191.     while (system_state != SYSTEM_OPEN)
  1192.     {
  1193. #ifdef SUPPORT_RDS_FUNCTION  //xyy
  1194. #ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
  1195. //rds display wuzhj 2004/12/06
  1196. if(rds_radio_flag==1)
  1197. {
  1198.     rds_collect_data();
  1199.     disp_rds();
  1200. #else
  1201.     rds_collect_data();
  1202.     disp_rds(rds_func_flag);
  1203. #endif 
  1204. #endif
  1205. polling();//i=keyscan()
  1206. #if 0
  1207. if(RDS_PS_RDY())
  1208. {
  1209. //printf("ps:%sn",rds_get_ps());
  1210. psprintf(RegionValStr[REGION1],"PS : %s",rds_get_ps());
  1211. PrintOsdMsg(0, REGION1, 1, 1);
  1212. RDS_PS_CLR_RDY();
  1213. }
  1214. #endif
  1215. #ifdef SUPPORT_STEREO_DETECT
  1216. if(is_stereo())
  1217.      {
  1218.          printf("stereon");    
  1219.      }
  1220.      else
  1221.      {
  1222.          printf("monon");
  1223.      }
  1224. #endif //SUPPORT_STEREO_DETECT
  1225. if(search_dir)
  1226. {
  1227. tuner_auto_search();
  1228. }
  1229. if(write2mem)
  1230. {
  1231. write2mem=0;
  1232. tuner.memory_status=MEM_MODE;
  1233. save_tuner_E2PROM();//xyy 2003-9-23 9:02
  1234. //printf("writen");
  1235. }
  1236.     }
  1237.    }
  1238. }
  1239. void tuner_auto_search( void )
  1240. {
  1241.     if( search_dir == 1 )  //auto search up
  1242.     {
  1243.         if( tuner.bandswitch )//am
  1244.         {//am auto search up
  1245.             //Amautosearchup();
  1246.             Amautosearch( AUTOSEARCHUP );
  1247.         }       else
  1248.         { // fm auto search up
  1249.             //Fmautosearchup();
  1250.             Fmautosearch( AUTOSEARCHUP );
  1251.         }
  1252.     } else // search_dir == 2, auto search down    
  1253.     {
  1254.         if( tuner.bandswitch )//am
  1255.         { //am auto search down
  1256.             //Amautosearchdown();
  1257.             Amautosearch( AUTOSEARCHDOWN );
  1258.         }       else
  1259.         {// fm auto search down
  1260.             //Fmautosearchdown();
  1261.             Fmautosearch( AUTOSEARCHDOWN );
  1262.         }
  1263.     }    
  1264.     
  1265. }   
  1266. void d_ms(BYTE ms)
  1267. {
  1268.     delay_1ms(ms);
  1269. }
  1270. #ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
  1271. void disfreq(void)
  1272. {
  1273.     if(tuner.bandswitch) 
  1274.     {
  1275. psprintf(RegionValStr[2]," AM CH:%d %03d KHZ ",tuner.am_ch+1,(tuner.ambak>>4)*3-450); //ITEM number
  1276.         if(tuner.am_ch<=9)
  1277.         {
  1278.             radio_down_flag=tuner.am_ch;
  1279.         }
  1280.         else
  1281.         {
  1282.             radio_down_flag=tuner.am_ch-10;
  1283.         }  
  1284.     }
  1285.     else
  1286.     {
  1287. //int x=tuner.fmbak*5-1070;
  1288. int x = tuner.fmfreq[tuner.fm_ch]*5-1070;
  1289. psprintf(RegionValStr[2]," FM CH:%d %d.%02d MHZ ",tuner.fm_ch+1,x/100,x%100); //ITEM number
  1290.         if(tuner.fm_ch<=9)
  1291.         {
  1292.             radio_down_flag=tuner.fm_ch;
  1293.         
  1294.         }
  1295.         else
  1296.         {
  1297.             radio_down_flag=tuner.fm_ch-10;
  1298.         
  1299.         }  
  1300.     }
  1301.    
  1302.    // osd_init_Radio();
  1303.     ShowRadioMsg();
  1304.    
  1305.     DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);
  1306.     vfd_set_power_state(0);
  1307. }
  1308. #else
  1309. void disfreq(void)
  1310. {
  1311.     if(tuner.bandswitch) 
  1312.     {
  1313. psprintf(RegionValStr[2],"AM CH:%d %03d KHZ",tuner.am_ch+1,(tuner.ambak>>4)*3-450); //ITEM number
  1314.     }
  1315.     else
  1316.     {
  1317. //int x=tuner.fmbak*5-1070;
  1318. int x = tuner.fmfreq[tuner.fm_ch]*5-1070;
  1319. psprintf(RegionValStr[2],"FM CH:%d %d.%02d MHZ",tuner.fm_ch+1,x/100,x%100); //ITEM number
  1320.     }
  1321.     PrintOsdMsg(STR_OS_SPACE,0x2,0,1);
  1322.     vfd_set_power_state(0);
  1323. }
  1324. #endif
  1325. void  search(BYTE search_status)
  1326.     tuner_mute(1);
  1327.     
  1328.     if(tuner.bandswitch)
  1329.     {
  1330. if(search_status==SEARCHADD)
  1331. {
  1332. tuner.ambak=(tuner.ambak+0x30);
  1333. if(tuner.ambak>AM_FREQ_MAX)  tuner.ambak=AM_FREQ_MIN;
  1334. }
  1335. else if(search_status==SEARCHDEC)
  1336. {
  1337. tuner.ambak=(tuner.ambak-0x30);
  1338. if(tuner.ambak<AM_FREQ_MIN)   tuner.ambak=AM_FREQ_MAX;
  1339. }
  1340. tuner.amfreq[tuner.am_ch] = tuner.ambak;
  1341. set_freq(tuner.ambak);
  1342.     }
  1343.     else
  1344.     {
  1345. if(search_status==SEARCHADD)
  1346. {
  1347. tuner.fmbak=(tuner.fmbak+1);
  1348. if(tuner.fmbak>FM_FREQ_MAX) tuner.fmbak=FM_FREQ_MIN;
  1349. }
  1350. else if(search_status==SEARCHDEC)
  1351. {
  1352. tuner.fmbak=(tuner.fmbak-1);
  1353. if(tuner.fmbak<FM_FREQ_MIN) tuner.fmbak=FM_FREQ_MAX;
  1354. }
  1355. tuner.fmfreq[tuner.fm_ch] = tuner.fmbak;
  1356. set_freq(tuner.fmbak);
  1357.     }
  1358.     disfreq();    
  1359.     tuner_mute_flag = 1; // auto demute after 500ms
  1360.     output_vfd_msg();
  1361.     write2mem = 1;
  1362. }
  1363. void output_vfd_msg(void)
  1364. {
  1365. int i;
  1366. polling();
  1367. #ifndef NEW_AUTO_SEARCH_ALL
  1368. for(i=0;i<10000;i++)
  1369. #endif
  1370. {
  1371. polling_vfdr();         
  1372. //polling_vfd();    
  1373. }
  1374. }
  1375. void Fmautosearch( BYTE autosearch_status )
  1376. {
  1377. #ifdef NEW_AUTO_SEARCH_ALL
  1378. psprintf(RegionValStr[1],"AUTO SCAN");
  1379.   #ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10 
  1380.      PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
  1381.   #endif    
  1382. #endif
  1383. if(!tuner.bandswitch)
  1384. {
  1385. while(1)
  1386. {                    
  1387. output_vfd_msg();
  1388. if( autosearch_status == AUTOSEARCHUP )
  1389. {
  1390. if(search_dir!=1)    //up
  1391. return;
  1392. tuner.fmbak=(tuner.fmbak+1); // 100K STEP, ref clock: 25k
  1393. if(tuner.fmbak>FM_FREQ_MAX)  //fm max 107.8MHZ
  1394. {
  1395. tuner.fmbak=FM_FREQ_MIN;//87.8Mhz,ref= 25khz
  1396. tuner_mute_flag=1;  // auto demute after 500 ms
  1397. break;
  1398. }
  1399. }else if( autosearch_status == AUTOSEARCHDOWN )
  1400. {
  1401. if(search_dir!=2)    //down
  1402. return;
  1403. tuner.fmbak=(tuner.fmbak-1);   //gap = 2. 100K STEP
  1404. if(tuner.fmbak<FM_FREQ_MIN)//fm min
  1405. {
  1406. tuner.fmbak=FM_FREQ_MAX;
  1407. tuner_mute_flag = 1;
  1408. break;
  1409. }
  1410. }  
  1411. tuner.fmfreq[tuner.fm_ch] = tuner.fmbak;
  1412. disfreq();
  1413. if(is_station())
  1414. {
  1415. write2mem = 1;
  1416. search_station = 1;//xyy 2004-3-12
  1417. #if defined(SUPPORT_STATION_INPUT)//xyy 2004-5-26
  1418. tuner_oper_mode = RECALL_OR_STORE;
  1419. timeout_vfd = 6000;
  1420. #endif
  1421. break;
  1422.             }
  1423.         }
  1424.   
  1425.       disfreq();
  1426.   }
  1427.   search_dir=0;
  1428. }  
  1429. void Amautosearch( BYTE autosearch_status )
  1430. {
  1431. #ifdef NEW_AUTO_SEARCH_ALL
  1432. psprintf(RegionValStr[1],"AUTO SCAN"); 
  1433. #ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
  1434.      PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
  1435. #endif   
  1436. #endif
  1437. if(tuner.bandswitch)//am
  1438. {
  1439. while(1)
  1440. {                    
  1441. output_vfd_msg();  
  1442. if( autosearch_status == AUTOSEARCHUP )
  1443. {
  1444. if(search_dir!=1)    //up
  1445. return;
  1446. tuner.ambak = (tuner.ambak + 0x30); // 3*3k step
  1447.                  if(tuner.ambak>AM_FREQ_MAX)  //am max
  1448. {
  1449. tuner.ambak=AM_FREQ_MIN;
  1450. tuner_mute_flag=1;  // auto demute after 500 ms
  1451. break;
  1452. }
  1453. }else if( autosearch_status == AUTOSEARCHDOWN )
  1454. {
  1455. if(search_dir!=2)    //down
  1456. return;
  1457. tuner.ambak=(tuner.ambak-0x30);   //gap = 3; 3*3K step
  1458. if(tuner.ambak<AM_FREQ_MIN)//Am min
  1459. {
  1460. tuner.ambak=AM_FREQ_MAX;
  1461. tuner_mute_flag=1;  // auto demute after 500 ms
  1462. break;
  1463. }
  1464. }  
  1465. tuner.amfreq[tuner.am_ch] = tuner.ambak;
  1466. disfreq();
  1467. if(is_station())
  1468. {
  1469. write2mem = 1;
  1470. search_station = 1;
  1471. #if defined(SUPPORT_STATION_INPUT)//xyy 2004-8-5
  1472. tuner_oper_mode = RECALL_OR_STORE;
  1473. timeout_vfd = 6000;
  1474. #endif
  1475. break; 
  1476. }        
  1477.       }
  1478.       disfreq();
  1479.   }
  1480.   search_dir=0;    
  1481. }
  1482.   
  1483.  
  1484. void save_tuner_E2PROM(void)
  1485. int test;
  1486. BYTE    *p;
  1487. #ifdef TUNER_DBG
  1488.     //printf("!!!run save_tuner_setup ,size:%dn",sizeof(t_tuner));
  1489. #endif
  1490.     
  1491.     p=(BYTE *)&tuner;    
  1492.     tuner.checksum = check_sum(p, (sizeof(tuner)-2));
  1493.     test=WriteToI2c(0xa0, TUNER_START,p, sizeof(t_tuner));
  1494.     
  1495. #ifdef TUNER_DBG
  1496. printf("save checksum %xn",tuner.checksum);
  1497. #endif      
  1498. }
  1499. void load_tuner_E2PROM(void)
  1500.     int     iRts;   
  1501.     BYTE    *p;
  1502.     
  1503.     //printf("load tuner e2promn");
  1504.     p=(BYTE *)&tuner;    
  1505.     iRts = ReadFromI2c(0xa0, TUNER_START,p, sizeof(t_tuner)); 
  1506.     if(iRts<0)
  1507.     {
  1508.      init_tuner_var();
  1509.      return;
  1510.     }
  1511.     if(tuner.checksum != check_sum(p, (sizeof(t_tuner)-2)))    
  1512.     {
  1513. #ifdef TUNER_DBG
  1514. //printf("checksum err! load defaultn");
  1515. #endif
  1516. init_tuner_var();
  1517. save_tuner_E2PROM();
  1518.     }
  1519. }
  1520. /*****************
  1521. Changed by xyy 2004-5-26
  1522. ******************/
  1523. #if defined(SUPPORT_STATION_INPUT)//xyy 2004-8-5
  1524. void init_tuner_var(void)
  1525. {
  1526.     int i;
  1527. printf("init varn");
  1528. for(i=0;i<MAX_MEM_BAND;i++)
  1529. {
  1530. tuner.fmfreq[i]=0x7de;
  1531. tuner.amfreq[i]=0x1470;
  1532. }
  1533. //tuner.memory_band_id[0]=1;
  1534. //tuner.memory_band_id[1]=1;
  1535. tuner.memory_status=NO_MEM_MODE;
  1536. tuner.bandswitch=0;    //0:fm, 1:am
  1537. tuner.Istuning[0]=1;
  1538. tuner.Istuning[1]=1;
  1539. tuner.ambak=0x1440;
  1540.     tuner.fmbak=0x7b2;
  1541. //    tuner.in2_data1=0x00;
  1542. //p = (BYTE *)&tuner;
  1543. //tuner.checksum = check_sum(p,sizeof(tuner));
  1544.     
  1545. #ifdef TUNER_DBG    
  1546.     //report_tuner_info();
  1547. #endif
  1548. }
  1549. #else
  1550. void init_tuner_var(void)
  1551. {
  1552.     const UINT16 fmfreq[MAX_MEM_BAND]={0x7de,0x802,0x86c,0x87e,0x91e,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922};// 90.0 91.8 97.1 98.0 106.0 106.2
  1553.     const UINT16 amfreq[MAX_MEM_BAND]={0x1470,0x15f0,0x1e30,0x26a0,0x2ac0,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20};//531 603 999 1404 1602 1620
  1554.     int i;
  1555.     //BYTE *p;
  1556. printf("init varn");
  1557. for(i=0;i<MAX_MEM_BAND;i++)
  1558. {
  1559. tuner.fmfreq[i]=fmfreq[i];
  1560. tuner.amfreq[i]=amfreq[i];
  1561. }
  1562. //tuner.memory_band_id[0]=1;
  1563. //tuner.memory_band_id[1]=1;
  1564. tuner.memory_status=NO_MEM_MODE;
  1565. tuner.bandswitch=0;    //0:fm, 1:am
  1566. tuner.Istuning[0]=1;
  1567. tuner.Istuning[1]=1;
  1568. tuner.ambak=0x1440;
  1569.     tuner.fmbak=0x7b2;
  1570. //    tuner.in2_data1=0x00;
  1571. //p = (BYTE *)&tuner;
  1572. //tuner.checksum = check_sum(p,sizeof(tuner));
  1573.     
  1574. #ifdef TUNER_DBG    
  1575.     //report_tuner_info();
  1576. #endif
  1577. }
  1578. #endif
  1579. #if defined(SUPPORT_STATION_INPUT)
  1580. /**********************
  1581. Changed by xyy 2004-5-24
  1582. **********************/
  1583. void tuner_func_input(void)     //xyy 2003-11-3 11:20
  1584. {
  1585. // if(tuner.memory_status==MEM_MODE)
  1586. if(tuner_oper_mode == RECALL_OR_STORE)
  1587. {
  1588. vfd_set_stationNm();
  1589. }
  1590. #if defined(SUPPORT_FREQ_DIRECT_CALL) 
  1591. else if(tuner_oper_mode == FREQ_DIRECT_CALL)//xyy 2004-7-28
  1592. {
  1593. if(tuner.bandswitch) 
  1594. vfd_set_amFreq_input();
  1595. else
  1596. vfd_set_fmFreq_input();
  1597. }
  1598. #endif
  1599. }
  1600. #endif
  1601. #ifdef SUPPORT_Radio_NEW_UI     //wuzhj add for new ui 2004/12/10
  1602. void tuner_st_mono(void) 
  1603. {
  1604. if(tuner.st_mono == 1)
  1605. {
  1606. psprintf(RegionValStr[1],"  ST  ");
  1607. }
  1608. else
  1609. {
  1610. psprintf(RegionValStr[1]," MONO ");
  1611. }
  1612. osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-2, RegionValStr[1], SFONTCOLOR, SBGCOLOR);
  1613. set_mono_stereo(tuner.st_mono);
  1614. write2mem=1;    
  1615. }
  1616. #else
  1617. void tuner_st_mono(void) 
  1618. {
  1619. if(tuner.st_mono == 1)
  1620. {
  1621. tuner.st_mono = 0;
  1622. psprintf(RegionValStr[1],"MONO");
  1623. }
  1624. else
  1625. {
  1626. tuner.st_mono = 1;
  1627. psprintf(RegionValStr[1],"ST");
  1628. }
  1629. PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
  1630. set_mono_stereo(tuner.st_mono);
  1631. write2mem=1;    
  1632. }
  1633. #endif
  1634. #ifdef SUPPORT_Radio_NEW_UI     //wuzhj add for new ui 2004/12/10
  1635. #ifdef SUPPORT_RDS_FUNCTION
  1636. void disp_rds_func(void)
  1637. {
  1638.              psprintf(RegionValStr[REGION1],"PS :");
  1639.   osd_DrawString(1, SETUP_MENU_YSTART, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1640.         
  1641.      psprintf(RegionValStr[REGION1],"PTY :");
  1642.   osd_DrawString(1, SETUP_MENU_YSTART+1, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1643.     
  1644.              psprintf(RegionValStr[REGION1],"RT :");
  1645.   osd_DrawString(1, SETUP_MENU_YSTART+2, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1646.        
  1647.         
  1648.        psprintf(RegionValStr[REGION1],"CT :");
  1649.   osd_DrawString(1, SETUP_MENU_YSTART+3, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1650.              psprintf(RegionValStr[REGION1],"PTYN :");
  1651. osd_DrawString(1, SETUP_MENU_YSTART+4, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1652.     
  1653. }
  1654. void disp_rds(BYTE enter_flag)
  1655. {
  1656.     enter_flag = enter_flag;
  1657. char rds_disp_buf[65];
  1658.             if(RDS_PS_RDY())
  1659.             {
  1660.              psprintf(RegionValStr[REGION1],"PS : %s",rds_get_ps());
  1661.   osd_DrawString(1, SETUP_MENU_YSTART, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1662.   RDS_PS_CLR_RDY();
  1663.          }
  1664.   
  1665.             if(RDS_PTY_RDY())
  1666.             {
  1667.      psprintf(RegionValStr[REGION1],"PTY : %s",rds_get_pty());
  1668.   osd_DrawString(1, SETUP_MENU_YSTART+1, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1669.   RDS_PTY_CLR_RDY();
  1670.             }
  1671.   
  1672.              if(RDS_RTA_RDY()||RDS_RTB_RDY())
  1673.             {
  1674.             memcpy(rds_disp_buf,rds_get_rt(RDS_RT_TYPE()),64);
  1675.              capitalize(rds_disp_buf, 0, 64);
  1676.   str_filter(rds_disp_buf, 64);
  1677.              psprintf(RegionValStr[REGION1],"RT : %s",rds_disp_buf);
  1678.                 osd_DrawString(1, SETUP_MENU_YSTART+2, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1679.   RDS_RTA_CLR_RDY();
  1680.   RDS_RTB_CLR_RDY();
  1681.             }
  1682.      
  1683.             if(RDS_CT_RDY())
  1684.             {
  1685.        psprintf(RegionValStr[REGION1],"%s",rds_get_ct());
  1686.   osd_DrawString(1, SETUP_MENU_YSTART+3, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1687.   RDS_CT_CLR_RDY();
  1688.             }
  1689.           if(RDS_PTYN_RDY())
  1690.             {
  1691.              psprintf(RegionValStr[REGION1],"PTYN:%s",rds_get_ptyn());
  1692. osd_DrawString(1, SETUP_MENU_YSTART+4, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1693. RDS_PTYN_CLR_RDY();
  1694.             }
  1695. }
  1696. #endif /*rds func*/
  1697. #else
  1698. #ifdef SUPPORT_RDS_FUNCTION
  1699. disp_rds_func(BYTE enter_flag)
  1700. {
  1701. printf("flag %dn",enter_flag);
  1702.     if(enter_flag == 0)
  1703.     {
  1704.              psprintf(RegionValStr[REGION1],"PS :");
  1705.   PrintOsdMsg(0, REGION1, 1, 1);
  1706.         }
  1707.    
  1708.     else if(enter_flag == 1)
  1709.     {
  1710.      psprintf(RegionValStr[REGION1],"PTY :");
  1711.   PrintOsdMsg(0, REGION1, 1, 1);
  1712.     }
  1713.     
  1714.     else if(enter_flag == 2)
  1715. {
  1716.              psprintf(RegionValStr[REGION1],"RT :");
  1717.   PrintOsdMsg(0, REGION1, 1, 1);
  1718.         }
  1719.       else if(enter_flag == 3)
  1720.         {
  1721.        psprintf(RegionValStr[REGION1],"CT :");
  1722.   PrintOsdMsg(0, REGION1, 1, 1);
  1723.     }
  1724.     else if(enter_flag == 4)
  1725.      {
  1726.              psprintf(RegionValStr[REGION1],"PTYN :");
  1727. PrintOsdMsg(0, REGION1, 1, 1);
  1728.     }
  1729. }
  1730. void disp_rds(BYTE enter_flag)
  1731. {
  1732. char rds_disp_buf[65];
  1733.     if(enter_flag == 0)
  1734.     {
  1735.             if(RDS_PS_RDY())
  1736.             {
  1737.              psprintf(RegionValStr[REGION1],"PS : %s",rds_get_ps());
  1738.   PrintOsdMsg(0, REGION1, 1, 1);
  1739.   RDS_PS_CLR_RDY();
  1740.          }
  1741.         }
  1742.    
  1743.     else if(enter_flag == 1)
  1744.     {
  1745.             if(RDS_PTY_RDY())
  1746.             {
  1747.      psprintf(RegionValStr[REGION1],"PTY : %s",rds_get_pty());
  1748.   PrintOsdMsg(0, REGION1, 1, 1);
  1749.   RDS_PTY_CLR_RDY();
  1750.             }
  1751.     }
  1752.     
  1753.     else if(enter_flag == 2)
  1754. {
  1755.             if(RDS_RTA_RDY()||RDS_RTB_RDY())
  1756.             {
  1757.             memcpy(rds_disp_buf,rds_get_rt(RDS_RT_TYPE()),64);
  1758.              capitalize(rds_disp_buf, 0, 64);
  1759.   str_filter(rds_disp_buf, 64);
  1760.              psprintf(RegionValStr[REGION1],"RT : %s",rds_disp_buf);
  1761.   PrintOsdMsg(0, REGION1, 1, 1);
  1762.   RDS_RTA_CLR_RDY();
  1763.   RDS_RTB_CLR_RDY();
  1764.             }
  1765.         }
  1766.       else if(enter_flag == 3)
  1767.         {
  1768.             if(RDS_CT_RDY())
  1769.             {
  1770.        psprintf(RegionValStr[REGION1],"%s",rds_get_ct());
  1771.   PrintOsdMsg(0, REGION1, 1, 1);
  1772.   RDS_CT_CLR_RDY();
  1773.             }
  1774.     }
  1775.     else if(enter_flag == 4)
  1776.      {
  1777.          if(RDS_PTYN_RDY())
  1778.             {
  1779.              psprintf(RegionValStr[REGION1],"PTYN:%s",rds_get_ptyn());
  1780. PrintOsdMsg(0, REGION1, 1, 1);
  1781. RDS_PTYN_CLR_RDY();
  1782.             }
  1783.     }
  1784.     
  1785. }
  1786. #endif /*rds func*/
  1787. #endif
  1788. #ifdef SUPPORT_Radio_NEW_UI     //wuzhj add for new ui 2004/12/10
  1789. void ShowRadioMsg(void)
  1790. {
  1791.     BYTE    buf[40];
  1792.     
  1793.     //Right leve1   wuzhj 2004/11/27
  1794.     
  1795.      
  1796.   int i;
  1797. for (i=0;i<10;i++)
  1798. {
  1799.     if(tuner.bandswitch) //show am all frqu
  1800.      {
  1801.      psprintf(buf,"CH:%d %03d KHZ",(1+i),(tuner.amfreq[i]>>4)*3-450);
  1802.      osd_DrawString(1, SETUP_MENU_YSTART+i, buf, SFONTCOLOR, SBGCOLOR);
  1803.      psprintf(buf,"CH:%d %03d KHZ",(11+i),(tuner.amfreq[10+i]>>4)*3-450);
  1804.      osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+i, buf, SFONTCOLOR, SBGCOLOR);
  1805.     }
  1806.     else    //show fm all frqu
  1807.     {
  1808.     // psprintf(linebuf,"               ");  
  1809.     //osd_DrawString(1, SETUP_MENU_YSTART, buf, SFONTCOLOR, 12);
  1810.     
  1811.      int xi = tuner.fmfreq[10+i]*5-1070;
  1812. psprintf(buf,"CH:%d %d.%02d MHZ",(11+i),xi/100,xi%100);
  1813.     osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+i, buf, SFONTCOLOR, SBGCOLOR);
  1814.     int yi = tuner.fmfreq[i]*5-1070;
  1815. psprintf(buf,"CH:%d %d.%02d MHZ",(1+i),yi/100,yi%100);
  1816.     osd_DrawString(1, SETUP_MENU_YSTART+i, buf, SFONTCOLOR, SBGCOLOR);
  1817.     }
  1818. }       
  1819.    
  1820. // show fm and am frqu
  1821.     osd_DrawString(1, SETUP_MENU_YSTART-2, RegionValStr[2], SFONTCOLOR, SBGCOLOR);
  1822. }
  1823. void ShowRadioTitle (void)
  1824. {
  1825.     BYTE    buf[40];
  1826. //show st and mono  
  1827.     if(tuner.st_mono == 1)
  1828. {
  1829. psprintf(RegionValStr[1]," MONO ");
  1830. }
  1831. else
  1832. {
  1833. psprintf(RegionValStr[1],"  ST  ");
  1834. }
  1835. osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-2, RegionValStr[1], SFONTCOLOR, SBGCOLOR);
  1836. //show prologic
  1837.     switch(prologic_val)
  1838.     {
  1839.     case 0:
  1840.         psprintf(buf," PROLOGIC:[MOVIE MODE]");      
  1841.         break;
  1842.     case 1:
  1843.         psprintf(buf," PROLOGIC:[MUSIC MODE]");
  1844.         break;
  1845.     case 2:
  1846.         psprintf(buf," PROLOGIC:[ OFF ] ");
  1847.         break;
  1848.     }       
  1849.      osd_draw_rect(14, 35, 360, 26, 11);
  1850.      osd_DrawString(1, SETUP_MENU_YSTART-1, buf, SFONTCOLOR, SBGCOLOR);
  1851. //show main vol
  1852.     //BYTE volum_list[0];
  1853.     Radio_main_vol();
  1854.    // psprintf(RegionValStr[REGION1], " MAIN %d",volum_list[0]);
  1855.     osd_draw_rect(416, 35, 132, 26, 11);
  1856.     osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-1, RegionValStr[REGION1], SFONTCOLOR, SBGCOLOR);
  1857. }
  1858. extern BYTE header_id;
  1859. void osd_init_Radio(void)
  1860. {
  1861. UINT16 screen_h,screen_w;
  1862.     __osd_init();
  1863.     #define RADIO_REGION_WIDTH 8*35
  1864.     #define RADIO_REGION_HEIGHT 12*32
  1865.     #define SETUP_BGCOLOR 9
  1866.     header_id = SETUP_HEADER;
  1867.     region[0].osd_w = RADIO_REGION_WIDTH;    //35 English Characters
  1868.     region[0].osd_h = RADIO_REGION_HEIGHT;   //12 lines
  1869.     if(TV_FORMAT_PAL==tv_format)
  1870.      {
  1871. screen_h=288;
  1872. screen_w=352;
  1873.      //screen_h=288;
  1874. //screen_w=352;
  1875.      }
  1876. else
  1877. {
  1878. screen_h=240;
  1879. screen_w=360;
  1880. }
  1881.     osd_create_region1(&region[0],(screen_w-RADIO_REGION_WIDTH)/2,(screen_h-RADIO_REGION_HEIGHT/2)/2, NULL, OSD_FORMAT_16COLOR, OSD_INTERLACED);
  1882.     //osd_create_region1(&region[SETUP_REGION], SETUP_REGION_X,  SETUP_REGION_Y, NULL, OSD_FORMAT_16COLOR, OSD_INTERLACED);
  1883. osd_draw_rect(0,0,RADIO_REGION_WIDTH<<1,RADIO_REGION_HEIGHT,SETUP_BGCOLOR);
  1884.     osd_draw_rect(0, 0, RADIO_REGION_WIDTH<<1, 32, 4);//ONE
  1885.     osd_draw_rect(0, 32, RADIO_REGION_WIDTH<<1, 32, 6);//TOW
  1886.    // osd_draw_rect(12, 68, 250, 26, 11);
  1887.     //osd_draw_rect(282, 68, 250, 26, 11);
  1888.     int i;
  1889.     for (i=0;i<10;i++)
  1890.         {
  1891.             osd_draw_rect(14, 68+32*i, 258, 26, 11);
  1892.             osd_draw_rect(288, 68+32*i, 258, 26, 11);
  1893.         }
  1894.     osd_draw_rect(278, 64, 4, 320, 12);//red vertical
  1895.    //osd_draw_rect(0, RADIO_REGION_HEIGHT, RADIO_REGION_WIDTH<<1,2, 12);
  1896.    // osd_draw_rect(560, SETUP_MENU_YSTART, 2, 560, 12);
  1897. osd_active_regions = 1;
  1898. ENABLE_OSD();
  1899. //for(screen_w=0;screen_w<16;screen_w++)
  1900.  //   {
  1901. //    psprintf(linebuf,"%02d",screen_w);
  1902. //    osd_DrawString(screen_w*2+2, 1, linebuf,16-screen_w,screen_w);
  1903. //    }
  1904. }
  1905. void osd_init_Radio_fm(void)
  1906. {
  1907.     //draw yellow icon
  1908.     osd_draw_rect(0,64,8*35<<1,12*32-64,SETUP_BGCOLOR);
  1909.     int i;
  1910.     for (i=0;i<10;i++)
  1911.         {
  1912.             osd_draw_rect(14, 68+32*i, 258, 26, 11);
  1913.             osd_draw_rect(288, 68+32*i, 258, 26, 11);
  1914.         }
  1915.     //draw fm and am blue icon
  1916.     osd_draw_rect(14, 3, 324, 26, 11);
  1917.     //draw red vertical
  1918.     osd_draw_rect(278, 64, 4, 320, 12);
  1919. }
  1920. void osd_init_Radio_rds(void)
  1921. {
  1922. osd_draw_rect(278, 64, 4, 320, SETUP_BGCOLOR);
  1923.     int i;
  1924.     for (i=0;i<9;i++)
  1925.         {
  1926.             osd_draw_rect(12, 68+32*i, 536, 26, 11);
  1927.            // osd_draw_rect(298, 68+32*i, 250, 26, 11);
  1928.         }
  1929.    
  1930.     osd_draw_rect(0, 32*11, (8*35)<<1, 32, 4);    //low 
  1931. }
  1932. void DrawRadiodown(BYTE radio_down_flag,BYTE radio_right_flag,BYTE am_radio_right_flag)
  1933. {
  1934.     BYTE    buf[40];
  1935. if(tuner.bandswitch) //am ui
  1936. {
  1937.     if(am_radio_right_flag==0)//left am ui
  1938.     {
  1939.         //draw vertical left blue icon
  1940.         if(radio_down_flag==0)
  1941.         {
  1942.             osd_draw_rect(14, 68+32*9, 258, 26, SBGCOLOR);
  1943.             psprintf(buf,"CH:%d %03d KHZ",10,(tuner.amfreq[9]>>4)*3-450);
  1944.             osd_DrawString(1, SETUP_MENU_YSTART+9, buf, SFONTCOLOR, SBGCOLOR);
  1945.         }
  1946.         else
  1947.         {
  1948.             osd_draw_rect(14, 68+32*(radio_down_flag-1), 258, 26, SBGCOLOR);
  1949.             psprintf(buf,"CH:%d %03d KHZ",(radio_down_flag),(tuner.amfreq[(radio_down_flag-1)]>>4)*3-450);
  1950.             osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag-1), buf, SFONTCOLOR, SBGCOLOR);
  1951.             
  1952.         }
  1953.         //draw level right blue icon    
  1954.         osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  1955.         psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)+10),(tuner.amfreq[(radio_down_flag)+10]>>4)*3-450);
  1956.         
  1957.         osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  1958.         //draw leve left red icon
  1959.         osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, 12);
  1960.         psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)),(tuner.amfreq[radio_down_flag]>>4)*3-450);
  1961.         
  1962.         osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  1963.        
  1964.     }
  1965.     else //right am ui
  1966.     {
  1967.         //draw vertical right blue icon
  1968.         if(radio_down_flag==0)
  1969.         {
  1970.             osd_draw_rect(12+276, 68+32*9, 258, 26, SBGCOLOR);
  1971.             psprintf(buf,"CH:%d %03d KHZ",(10+10),(tuner.amfreq[9+10]>>4)*3-450);
  1972.             
  1973.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+9, buf, SFONTCOLOR, SBGCOLOR);
  1974.         }
  1975.         else
  1976.         {
  1977.             osd_draw_rect(12+276, 68+32*(radio_down_flag-1), 258, 26, SBGCOLOR);
  1978.             psprintf(buf,"CH:%d %03d KHZ",(radio_down_flag+10),(tuner.amfreq[(radio_down_flag-1)+10]>>4)*3-450);
  1979.             
  1980.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag-1), buf, SFONTCOLOR, SBGCOLOR);
  1981.             
  1982.         }
  1983.      //draw level left blue icon   
  1984.      osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  1985.      psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)),(tuner.amfreq[(radio_down_flag)]>>4)*3-450);       
  1986.      
  1987.      osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  1988.      //draw level right red icon
  1989.      osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, 12);
  1990.      psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)+10),(tuner.amfreq[(radio_down_flag)+10]>>4)*3-450);        
  1991.      
  1992.      osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  1993.        
  1994.     }
  1995. }
  1996. else //fm ui
  1997. {
  1998.         
  1999.     if(radio_right_flag==0)//left fm ui
  2000.     {
  2001.         //draw left vertical blue icon
  2002.         if(radio_down_flag==0)
  2003.         {
  2004.             osd_draw_rect(14, 68+32*9, 258, 26, SBGCOLOR);
  2005.             int yi = tuner.fmfreq[9]*5-1070;
  2006.         psprintf(buf,"CH:%d %d.%02d MHZ",10,yi/100,yi%100);
  2007.             osd_DrawString(1, SETUP_MENU_YSTART+9, buf, SFONTCOLOR, SBGCOLOR);
  2008.         }
  2009.         else
  2010.         {
  2011.             osd_draw_rect(14, 68+32*(radio_down_flag-1), 258, 26, SBGCOLOR);
  2012.             int yi = tuner.fmfreq[(radio_down_flag-1)]*5-1070;
  2013.         psprintf(buf,"CH:%d %d.%02d MHZ",(radio_down_flag),yi/100,yi%100);
  2014.             osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag-1), buf, SFONTCOLOR, SBGCOLOR);
  2015.             
  2016.         }
  2017.         //draw level right blue icon    
  2018.         osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2019.         int xi = tuner.fmfreq[(radio_down_flag)+10]*5-1070;
  2020.     psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)+10),xi/100,xi%100);
  2021.         osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2022.         //draw level left red icon
  2023.         osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, 12);
  2024.         int zi = tuner.fmfreq[(radio_down_flag)]*5-1070;
  2025.     psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)),zi/100,zi%100);
  2026.         osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2027.        
  2028.     }
  2029.     else //right fm ui
  2030.     {
  2031.         //draw vertical right blue icon
  2032.         if(radio_down_flag==0)
  2033.         {
  2034.             osd_draw_rect(12+276, 68+32*9, 258, 26, SBGCOLOR);
  2035.             int yi = tuner.fmfreq[9+10]*5-1070;
  2036.         psprintf(buf,"CH:%d %d.%02d MHZ",10+10,yi/100,yi%100);
  2037.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+9, buf, SFONTCOLOR, SBGCOLOR);
  2038.         }
  2039.         else
  2040.         {
  2041.             osd_draw_rect(12+276, 68+32*(radio_down_flag-1), 258, 26, SBGCOLOR);
  2042.             int yi = tuner.fmfreq[(radio_down_flag-1)+10]*5-1070;
  2043.         psprintf(buf,"CH:%d %d.%02d MHZ",(radio_down_flag+10),yi/100,yi%100);
  2044.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag-1), buf, SFONTCOLOR, SBGCOLOR);
  2045.             
  2046.         }
  2047.      //draw level left blue icon   
  2048.      osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2049.      int xi = tuner.fmfreq[(radio_down_flag)]*5-1070;
  2050.  psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)),xi/100,xi%100);
  2051.      osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2052.      //draw level right red icon
  2053.      osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, 12);
  2054.      int zi = tuner.fmfreq[(radio_down_flag)+10]*5-1070;
  2055.  psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)+10),zi/100,zi%100);
  2056.      osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2057.        
  2058.     }
  2059. }   
  2060.    //show fm and am frqu 
  2061.     osd_DrawString(1, SETUP_MENU_YSTART-2, RegionValStr[2], SFONTCOLOR, SBGCOLOR);    
  2062. }
  2063. void DrawRadioup(BYTE radio_down_flag,BYTE radio_right_flag,BYTE am_radio_right_flag)
  2064. {
  2065.     BYTE    buf[40];
  2066. if(tuner.bandswitch) //am ui
  2067. {
  2068.     if(am_radio_right_flag==0)//left am ui
  2069.     {
  2070.         //draw level left red icon
  2071.         osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, 12);
  2072.         psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)),(tuner.amfreq[radio_down_flag]>>4)*3-450);
  2073.         
  2074.         osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2075.        
  2076.         //draw vertical left blue icon
  2077.         if(radio_down_flag==9)
  2078.         {
  2079.             osd_draw_rect(14, 68, 258, 26, SBGCOLOR);
  2080.             psprintf(buf,"CH:%d %03d KHZ",1,(tuner.amfreq[0]>>4)*3-450);
  2081.             osd_DrawString(1, SETUP_MENU_YSTART, buf, SFONTCOLOR, SBGCOLOR);
  2082.         }
  2083.         else
  2084.         {
  2085.             osd_draw_rect(14, 68+32*(radio_down_flag+1), 258, 26, SBGCOLOR);
  2086.             psprintf(buf,"CH:%d %03d KHZ",(radio_down_flag+2),(tuner.amfreq[(radio_down_flag+1)]>>4)*3-450);
  2087.             osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag+1), buf, SFONTCOLOR, SBGCOLOR);
  2088.             
  2089.         }
  2090.         //draw level right blue icon    
  2091.         osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2092.         psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)+10),(tuner.amfreq[(radio_down_flag)+10]>>4)*3-450);
  2093.         
  2094.         osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2095.         
  2096.     }
  2097.     else //right am ui
  2098.     {
  2099.         //draw level right red icon
  2100.         osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, 12);
  2101.         psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)+10),(tuner.amfreq[(radio_down_flag)+10]>>4)*3-450);        
  2102.      
  2103.         osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2104.         //draw vertical right blue icon
  2105.         if(radio_down_flag==9)
  2106.         {
  2107.             osd_draw_rect(12+276, 68, 258, 26, SBGCOLOR);
  2108.             psprintf(buf,"CH:%d %03d KHZ",(1+10),(tuner.amfreq[10]>>4)*3-450);
  2109.             
  2110.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART, buf, SFONTCOLOR, SBGCOLOR);
  2111.         }
  2112.         else
  2113.         {
  2114.             osd_draw_rect(12+276, 68+32*(radio_down_flag+1), 258, 26, SBGCOLOR);
  2115.             psprintf(buf,"CH:%d %03d KHZ",(radio_down_flag+2+10),(tuner.amfreq[(radio_down_flag+1)+10]>>4)*3-450);
  2116.             
  2117.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag+1), buf, SFONTCOLOR, SBGCOLOR);
  2118.             
  2119.         }
  2120.      //draw level left blue icon   
  2121.      osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2122.      psprintf(buf,"CH:%d %03d KHZ",(1+(radio_down_flag)),(tuner.amfreq[(radio_down_flag)]>>4)*3-450);       
  2123.      
  2124.      osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2125.      
  2126.        
  2127.     }
  2128. }
  2129. else    //fm ui
  2130. {
  2131.         
  2132.     if(radio_right_flag==0)//left fm ui
  2133.     {
  2134.         //draw level left red icon
  2135.         osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, 12);
  2136.         int z = tuner.fmfreq[(radio_down_flag)]*5-1070;
  2137.     psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)),z/100,z%100);
  2138.         osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2139.         //draw vertical left blue icon
  2140.         if(radio_down_flag==9)
  2141.         {
  2142.             osd_draw_rect(14, 68, 258, 26, SBGCOLOR);
  2143.             int y = tuner.fmfreq[0]*5-1070;
  2144.         psprintf(buf,"CH:%d %d.%02d MHZ",1,y/100,y%100);
  2145.             osd_DrawString(1, SETUP_MENU_YSTART, buf, SFONTCOLOR, SBGCOLOR);
  2146.         }
  2147.         else
  2148.         {
  2149.             osd_draw_rect(14, 68+32*(radio_down_flag+1), 258, 26, SBGCOLOR);
  2150.             int y = tuner.fmfreq[(radio_down_flag+1)]*5-1070;
  2151.         psprintf(buf,"CH:%d %d.%02d MHZ",(radio_down_flag+2),y/100,y%100);
  2152.             osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag+1), buf, SFONTCOLOR, SBGCOLOR);
  2153.             
  2154.         }
  2155.         //draw level right blue icon    
  2156.         osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2157.         int x = tuner.fmfreq[(radio_down_flag)+10]*5-1070;
  2158.     psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)+10),x/100,x%100);
  2159.         osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2160.         
  2161.        
  2162.     }
  2163.     else //right fm ui
  2164.     {
  2165.         //draw level right red icon
  2166.      osd_draw_rect(12+276, 68+32*(radio_down_flag), 258, 26, 12);
  2167.      int z = tuner.fmfreq[(radio_down_flag)+10]*5-1070;
  2168.  psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)+10),z/100,z%100);
  2169.      osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, 12);
  2170.         //draw vertical right blue icon
  2171.         if(radio_down_flag==9)
  2172.         {
  2173.             osd_draw_rect(12+276, 68, 258, 26, SBGCOLOR);
  2174.             int y = tuner.fmfreq[10]*5-1070;
  2175.         psprintf(buf,"CH:%d %d.%02d MHZ",10+1,y/100,y%100);
  2176.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART, buf, SFONTCOLOR, SBGCOLOR);
  2177.         }
  2178.         else
  2179.         {
  2180.             osd_draw_rect(12+276, 68+32*(radio_down_flag+1), 258, 26, SBGCOLOR);
  2181.             int y = tuner.fmfreq[(radio_down_flag+1)+10]*5-1070;
  2182.         psprintf(buf,"CH:%d %d.%02d MHZ",(2+radio_down_flag+10),y/100,y%100);
  2183.             osd_DrawString(SETUP_SUB_XSTART, SETUP_MENU_YSTART+(radio_down_flag+1), buf, SFONTCOLOR, SBGCOLOR);
  2184.             
  2185.         }
  2186.      //draw level left blue icon   
  2187.      osd_draw_rect(14, 68+32*(radio_down_flag), 258, 26, SBGCOLOR);
  2188.      int x = tuner.fmfreq[(radio_down_flag)]*5-1070;
  2189.  psprintf(buf,"CH:%d %d.%02d MHZ",(1+(radio_down_flag)),x/100,x%100);
  2190.      osd_DrawString(1, SETUP_MENU_YSTART+(radio_down_flag), buf, SFONTCOLOR, SBGCOLOR);
  2191.      
  2192.        
  2193.     }
  2194. }   
  2195.    //show fm and am frqu 
  2196.     osd_DrawString(1, SETUP_MENU_YSTART-2, RegionValStr[2], SFONTCOLOR, SBGCOLOR);    
  2197. }
  2198. #endif