UiFm.c
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:51k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiCommon.c
  4. content: user interface for FM module
  5. History: Created by TNE 2004/8/17
  6. ==========================================================================*/
  7. #define _UI_FM_H_
  8. #include <DP8051XP.H>
  9. #include "TypeDef.h"
  10. #include "Const.h"
  11. #include "Reg5661.h"
  12. #include "Common.h"
  13. #include "Key.h"
  14. #include "NandFlash.h"
  15. #include "FileSystem.h"
  16. #include "SaveSetting.h"
  17. //Dennis Shih 2006/01/17
  18. //#include "FmChip.h"
  19. #include "I2C.h"
  20. #include "FmChipDrv.h"
  21. //Walace060126#2
  22. /*
  23. #include "FmM5181.h"
  24. #include "FmTEA5767.h"
  25. */
  26. //#include "Codec.h"
  27. //Renshuo050312#1
  28. #include "ExtCodec.h"
  29. #include "IntCodec.h"
  30. #include "IconDefine.h"
  31. #include "OLED.h"
  32. #include "UiCommon.h"
  33. #include "SysStrDef.h"
  34. #include "UiSysStr.h" //Walace060217#1
  35. #include "OledString.h"
  36. #include "UiFm.h"
  37. #if(USE_RDS_INF)
  38. #include "UiRDS.h" //WHH0322
  39. #include "RDS.h" //WHH0322
  40. #endif
  41. // Walace060126#2 only used by UiFm.c
  42. #define FM_INIT_DELAY_TIME 0x15
  43. #define FM_SEARCH_UP 1
  44. #define FM_SEARCH_DOWN 0
  45. //extern void IntCdcSetPaGain(BYTE bVol); //Renshuo041125#A //tne 2006/12/26 #1
  46. //XBYTE xbFmShowFreqNum[10]; //Show FM Freq Number(EX 103.9 MHz) //Dennis060517#1 //tne 2007/01/11 #1
  47. //bit gfFmRealSteroSts; //Walace060217#1 //Walace060714#2
  48. //vicky050131
  49. //BOOL  gfMuteSts;
  50. XBYTE  gfMuteSts; //Walace061219#1 //NandRestore
  51. XBYTE gxbMuteTime;
  52. XDWORD   gxdwKeepTime;
  53. XBYTE gxbFmRecPreset; //tne 2006/05/10 #1 (Last Saving Preset Num 1~FM_MAX_PRESET)
  54. XBYTE gxbFmMaxRecPreset; //tne 2007/01/11 #1 (How many preset have saved 1~FM_MAX_PRESET, 0 mean no preset saveing)
  55. //tne 2007/01/11 #1 start
  56. XWORD gxwUiFmSearchDelay;
  57. XBYTE gxbTotalMenuItemNum;
  58. xdata PCWORD pcwFmMenuStringPoint;
  59. //tne 2007/01/11 #1 end
  60. //================add by Rojam 070117=======================
  61. #if(FM_MODULE==2)
  62. extern XWORD FMseekChannels[FMCHANNELSMAX];    //kitty 070103
  63. #endif
  64. //========================end============================
  65. XBYTE gxbTemp; //Walace070106#1 
  66. XBYTE gxbLastUiMenuMain; // modify by Rojam 2007-04-03 09:23
  67. void UiShowFreq();
  68. void UiReDrawFM() large;
  69. void UiShowStereo() large;
  70. void UiShowPreset(BYTE bPage,BYTE bColNum,BYTE bPresetNum) large; //tne 2006/05/10 #1
  71. void UiScrollPrset(BYTE bPresetNum) large; //tne 2006/05/10 #1
  72. void UiFmDelay(BYTE bDelay1,WORD bDelay2) large;
  73. void UiGoVolMenu(void);
  74. void UiRedrawStero() large;
  75. void UiErrHandle(void) large;
  76. void UiGoFMMute(void); //vicky050131 
  77. void UiGoStereoSetMenu(void); //Walace060217#1
  78. void UiFmFadeOut(void);  //Walace060217#1
  79. //Dennis Shih 20060309
  80. void UiShowFreqNum() large;
  81. BYTE FMFreqSearch(XWORD StartFreq, XWORD EndFreq, BOOL CountUp) large;
  82. void FMFadeOutVol(BYTE bVol, BYTE Nms) large; //Dennis060511#1
  83. #if(FM_PRESET_PRESAVE)
  84. void SaveFmPresetSetting() large; //Walace060714#1
  85. #endif
  86. //tne 2007/01/11 #1 start
  87. void UiShowPresetStateIcon(void);
  88. BOOL UiFmCheckBreakAutoSearchKey(BYTE bKey) large;
  89. void UiFmSwapNextMode(void);
  90. BYTE UiFmAutoSearchFreq(BOOL fSearchUp, BOOL fSaveScanMode) large;
  91. void UiFmNormalCtrl(BYTE bKey) large;
  92. void UiSelPresetCtrl(BYTE bKey) large;
  93. void UiFmVolMenuCtrl(BYTE bKey) large;
  94. void UiFmNormalMenuCtrl(BYTE bKey) large;
  95. void UiFmPresetMenuCtrl(BYTE bKey) large;
  96. void UiFmShowFmChNum(BYTE bNum,BYTE bCol,BYTE bRow, BYTE bType) large;
  97. //tne 2007/01/11 #1 end
  98. ////////////////////////////////////////////////////////////////////////////////////
  99. /////////////////////////////////  Ui Header End ///////////////////////////////////
  100. ////////////////////////////////////////////////////////////////////////////////////
  101. /*--------------------------------------------------------------------------
  102. Description:
  103. Main program for TARGET Fm
  104. Arguments:
  105. Global arguments:
  106. Returns: 
  107. --------------------------------------------------------------------------*/
  108. main(void)
  109. {
  110. BYTE bKey; 
  111. //BYTE btemp; //Walace070106#1 
  112. //tne 2005/08/24 //use bKey for temp variable to get RTC counter
  113. //bKey=obDCV_INT_FLAG; //tne 2006/08/08 #1
  114. #if(ENABLE_SD_FUNCTION&&SD_DET_USE_INT1) //Nick060808
  115. gbDdmCheck = obGPIO_INT_FLAG&obGPIO_INT_MASK;//use gbDdmCheck as temp, ok la
  116. if(gbDdmCheck&0x20)//gpiod5 // sd init flase anyway, even SD/MMC plug in
  117. gfSDinit = FALSE;
  118. #endif
  119. #if(UI_USE_MAIN_MENU|SETTING_FOR_ICE_START|UI_USE_ALARM_DISPLAY) //vicky050131 
  120. EX0=1;
  121. #endif
  122. EA=1;
  123. bKey=obDCV_INT_FLAG; //tne 2006/08/08 #1 //Walace061219#1 //NandRestore
  124. SetSysSpeed(SYS_SPEED_NORMAL); //Walace070106#2
  125. if((gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //NandRestore
  126. {
  127. gxbModuleState=MODULE_FM;
  128. goto RETURN_FROM_NANDRESTORE;
  129. }
  130.        OLED_DISP_MASK_INIT();
  131. OLED_CLEAR_ALL() ;
  132. //vicky050131 
  133. //Save code size, use gxbFmPreset (D0: FM init status)
  134. gxbTemp=gxbFmPreset; //Walace070106#1 
  135. //end
  136. #if(_PM_FM_&FM_MODULE==0) //060809Patrick
  137. gfFmsetfreqjudge=FALSE; //060809Patrick
  138. #endif
  139. //DCV_SET_PWM(); //David050817#2
  140. //add by tne 2005/01/07 #2
  141. #define bPresetIdx bKey
  142. #if(SETTING_FOR_ICE_START)
  143. gxwFmFreq=FM_DEFAULT_FREQ;
  144. gxbFmPreset=0;
  145. for(bPresetIdx=0;bPresetIdx<FM_MAX_PRESET;bPresetIdx++)
  146. {
  147. gxwPresetData[bPresetIdx]=FM_DEFAULT_FREQ;
  148. }
  149. gxbFmRecPreset=FM_MAX_PRESET;
  150. gxbFmMaxRecPreset=FM_MAX_PRESET;
  151. #else
  152. NandPrivateEn();
  153. ReadSettingData(FS_DATA_0_0);
  154. NandPrivateDis();
  155. gxbFmRecPreset=0; //tne 2007/01/11 #1
  156. gxbFmMaxRecPreset=0; //tne 2007/01/11 #1
  157. #if(FM_STEP_100K) //Dennis060517#1 start
  158. gxwFmFreq=gxbFsData[SRAM_FM_FREQ+gxwOffsetDataSec]+FM_FREQ_MIN;
  159. #else
  160.                                 //Walace060931#1
  161. gxwFmFreq = *((PWORD)(gxbFsData+SRAM_FM_FREQ+gxwOffsetDataSec)) + FM_FREQ_MIN;
  162. //gxwFmFreq=gxbFsData[SRAM_FM_FREQ+gxwOffsetDataSec]+((((WORD)(gxbFsData[SRAM_FM_FREQ_HIGH+gxwOffsetDataSec]))<<8)&0xFF00)+FM_FREQ_MIN;
  163. #endif //Dennis060517#1 end
  164. gxbFmPreset=gxbFsData[SRAM_FM_PRESET_NUM+gxwOffsetDataSec];
  165. gxbFmState = gxbFsData[SRAM_FM_STATE+gxwOffsetDataSec]; //Walace060217#1
  166. for(bPresetIdx=0;bPresetIdx<FM_MAX_PRESET;bPresetIdx++)
  167. {
  168. //Walace060931#1 start
  169. #if(FM_STEP_100K) //Dennis060517#1 start
  170. gxwPresetData[bPresetIdx]=gxbFsData[SRAM_FM_PRESET_START+bPresetIdx+gxwOffsetDataSec]+FM_FREQ_MIN;
  171. #else
  172. gxwPresetData[bPresetIdx]=
  173. (*((PWORD)(gxbFsData+SRAM_FM_PRESET_START+gxwOffsetDataSec)+bPresetIdx))+FM_FREQ_MIN;
  174. //gxwPresetData[bPresetIdx]=((WORD)(gxbFsData[SRAM_FM_PRESET_START+bPresetIdx+gxwOffsetDataSec]))+(((WORD)gxbFsData[SRAM_FM_PRESET_16+bPresetIdx+gxwOffsetDataSec])<<8)+FM_FREQ_MIN;
  175. #endif //Dennis060517#1 end
  176. //Walace060931#1 end
  177. //tne 2007/01/11 #1
  178. if(gxwPresetData[bPresetIdx]!=FM_INVALID_FREQ_NUM)
  179. gxbFmRecPreset=(bPresetIdx+1);
  180. }
  181. gxbFmMaxRecPreset=gxbFmRecPreset;
  182. if( (gxbFmPreset>gxbFmMaxRecPreset) || (gxbFmPreset==0) )
  183. gxbFmPreset=gxbFmMaxRecPreset;
  184. #endif
  185. #undef bPresetIdx
  186. // set default common value
  187. #if(USE_SYS_STR_UNICODE)
  188. gxfSourceUnicode=STRING_TYPE_UNICODE;
  189. #else
  190. gxfSourceUnicode=STRING_TYPE_ASCII;
  191. #endif
  192. #if(SYS_USE_KEY_HOLD)
  193. gfLastKeyLocked=KEY_UNLOCK;
  194. #endif
  195. UI_SET_DEFAULT();
  196. #if(USE_ERR_MSG_DISPLAY)
  197. UiCheckIniErr();
  198. #endif
  199. //vicky050131 
  200. //gfMuteMenu=FALSE;
  201. gxbMuteTime=2; //Mute time (unit=Sec)    //vicky050131 #1
  202. #if(1)//FM_MODULE!=2)  //del by Rojam 070117
  203. if(!(gxbTemp&0x01)) //Walace070106#1 
  204. {
  205. //WHH070309#2(start)
  206. ClkCdcEn();
  207. MCU_ACCESS_CODEC_I2S_EN();
  208. //obALGPAREG = ((obALGPAREG&0x07)|0xB8);//PA Gain=Min_Vol
  209. obALGPAREG |= 0x04; //power down PDY
  210. obALGPAREG |= 0x01; //power down PD
  211. obALGPAREG |= 0x02; //power down PDX
  212. MCU_ACCESS_CODEC_I2S_DIS(); //Renshuo050216#A  //Ren050312#1
  213. ClkCdcDis();
  214. //WHH070309#2(end)
  215.        // WHH070322(start)
  216. #if(FM_MODULE==2) 
  217. //obSYSSOFTRSTCTRL &= 0xFE; //reset I2C for use GPIOH5 and GPIOH6    // WHH070417#1
  218. obMODSEL2&=~0x08;   //reset I2C for use GPIOH5 and GPIOH6   // WHH070417#1
  219. FmInit();
  220. #if(USE_RDS_INF) 
  221. FMsi4700RdsEn();
  222. #endif
  223. gxbPreSattion=gxwFmFreq;
  224. #else
  225. FmInit();
  226. gfMuteSts=TRUE;
  227. FmSetMute();
  228. #endif
  229. // WHH070322(end)
  230. }
  231. else
  232. {
  233.                 //tne 2006/06/16 #2 start
  234. gfCdcAlreadyInit=TRUE;
  235. #if(FM_MODULE==1)
  236. //FmEnd();
  237.         //FmInit();
  238. FmSetMute();
  239. #endif
  240.                 //tne 2006/06/16 #2 end
  241. gfMuteSts=FALSE; 
  242. FmDataInit();
  243. }
  244. #endif
  245. //FmSetStereo(gxbFmState&FM_STATE_STEREO_SET);  //Walace060217#1  //mark by tne 2006/11/17 #1
  246. /* //tne 2007/01/11 #1
  247. #if(FM_STEP_100K) //Dennis060517#1 start
  248. xbFmShowFreqNum[5]=' ';
  249. xbFmShowFreqNum[6]='M';
  250. xbFmShowFreqNum[7]='H';
  251. xbFmShowFreqNum[8]='z';
  252. xbFmShowFreqNum[9]=' ';//[8]='z';
  253. // gfFmRealSteroSts=FALSE; //Walace060217#1
  254. #else
  255. xbFmShowFreqNum[6]=' ';//[6]='M';
  256. xbFmShowFreqNum[7]='M';//[6]='M';
  257. xbFmShowFreqNum[8]='H';//[7]='H';
  258. xbFmShowFreqNum[9]='z';//[8]='z';
  259. #endif //Dennis060517#1 end
  260. */
  261. gxwUiFmSearchDelay=0;
  262. //xbFmShowFreqNum[3]='.';
  263. //LCD_CTRL_EN();
  264. UiReDrawFM();
  265. gxbLastUiMenuMain=UI_NO_MENU; // modify by Rojam 2007-04-03 09:26
  266. //vicky050131
  267. //if(gfMuteSts) //Walace060516#2 //tne 2006/06/16 #2
  268. {
  269. //OledClearArea(SEG0,OLED_FM_FREQ1_PAGE,OLED_MAX_COL-SEG0,LINE1) ;
  270. //StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,OLED_FM_FREQ1_PAGE+PAGE2);
  271. }
  272. ClkSdDis();
  273. ClkSmDis();
  274. ClkMsDis();
  275. ClkDspDis();
  276. ClkI2S1Dis();
  277. ClkI2S2Dis();
  278. //delay for wait FM ready
  279. gxbLcdCounter=0;
  280. //while(gxbLcdCounter<FM_INIT_DELAY_TIME) { };
  281. //CdcCtrl(CDC_INIT);
  282. //CdcCtrl(CDC_FM_START);
  283. //vicky050131
  284. // if(gfMuteSts) //Walace060516#2
  285. // UiGoFMMute(); 
  286. {
  287. #if(FM_MODULE!=2)
  288. UiGoFMMute();
  289. #endif
  290. if(gfMuteSts) //tne 2006/06/16 #2
  291. {
  292. CdcCtrl(CDC_INIT);         //711Ted
  293. CdcCtrl(CDC_FM_START);
  294. }
  295. }
  296.        
  297. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  298. FMFadeOutVol(0,50); //Dennis060511#1
  299. #endif
  300. // modify by tne 2004/11/17 BL
  301. //UiFirstBackLight();
  302. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 tne 2006/12/06 #1
  303. CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
  304. #endif
  305. #if(FM_MODULE==2)
  306. //UiReDrawFM();
  307. gxbUiMenuMainStates=UI_NO_MENU;
  308. if(gxwFmFreq!=0xffff) 
  309. FmSetFreq();
  310. #endif
  311. //bKey=obDCV_INT_FLAG; //tne 2006/08/08 #1 //Walace061219#1 //NandRestore
  312. while(1)
  313. {
  314. RETURN_FROM_NANDRESTORE:  //Walace061219#1
  315. KeyGet(bKey);
  316. //vicky060810 start
  317. if(gxbModuleState==(MODULE_INITIAL|MODULE_PRC_REC_KEY_END))
  318. {
  319. if(bKey&KEY_BREAK)
  320. {
  321. bKey=KEY_INVALID;
  322. gxbModuleState=MODULE_INITIAL;
  323. }
  324. else
  325. {
  326. bKey=KEY_INVALID;
  327. }
  328. }
  329. //vicky060810 end
  330. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14  //Walace060217#1 //tne 2006/12/06 #1
  331. //Set vol 0 before system power off
  332. if(gxbPwOffCounter>UI_PW_OFF_KEY_DELAY_TIME)
  333. UiFmFadeOut();
  334. #endif
  335. UiCheckBackLight(bKey);
  336. //Renshuo050322#A    
  337. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  338. //IntCdcSetPaGainTask(FALSE); //Renshuo041203#A //Ren050312#1
  339. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  340. #endif
  341. //tne 2007/01/11 #1 start
  342. UiNormalCheck();
  343. if(gxwUiFmSearchDelay>0)
  344. gxwUiFmSearchDelay--;
  345. //WHH070322(start)
  346. #if(USE_RDS_INF)
  347. if((gxbUiMenuMainStates==UI_NO_MENU)||(gxbUiMenuMainStates==UI_SEL_PRESET_MENU)||(gxbUiMenuMainStates==UI_VOL_MENU))
  348. UiShowRdsInf( );
  349. else
  350. {
  351. RdsValInit();
  352. }
  353. #endif
  354. //WHH070322(end)
  355. //UiFmShowFmChNum(gxbFmChip,90,107,TRUE); // modify by Rojam for test  2007-04-23-10:51
  356. switch(gxbUiMenuMainStates)
  357. {
  358. case UI_NO_MENU:  
  359. UiFmNormalCtrl(bKey);
  360. break;
  361. case UI_VOL_MENU:
  362. UiFmVolMenuCtrl(bKey);
  363. break;
  364. case UI_SEL_PRESET_MENU:
  365. UiSelPresetCtrl(bKey);
  366. break;
  367. case UI_FM_NORMAL_FUN_MENU:
  368. UiFmNormalMenuCtrl(bKey);
  369. break;
  370. case UI_FM_PRESET_FUN_MENU:
  371. UiFmPresetMenuCtrl(bKey);
  372. break;
  373. }
  374. //tne 2007/01/11 #1 end
  375. #if(0) //test debug
  376. if(bKey==KEY_VOL_BREAK)
  377. {
  378. OledShowNumber(gxwPresetData[0],0,0,5);
  379. OledShowNumber(gxwPresetData[1],40,0,5);
  380. OledShowNumber(gxwPresetData[2],80,0,5);
  381. OledShowNumber(gxwPresetData[3],120,0,5);
  382. OledShowNumber(gxwPresetData[4],0,PAGE2,5);
  383. OledShowNumber(gxwPresetData[5],40,PAGE2,5);
  384. OledShowNumber(gxwPresetData[6],80,PAGE2,5);
  385. OledShowNumber(gxwPresetData[7],120,PAGE2,5);
  386. OledShowNumber(gxwPresetData[8],0,PAGE4,5);
  387. OledShowNumber(gxwPresetData[9],40,PAGE4,5);
  388. OledShowNumber(gxbFmRecPreset,80,PAGE4,2);
  389. OledShowNumber(gxbFmMaxRecPreset,96,PAGE4,2);
  390. OledShowNumber(gxbFmPreset,112,PAGE4,2);
  391. }
  392. #endif
  393. //add by tne 2004/12/29 #1
  394. #if(UI_USE_AUTO_POWER_OFF)
  395. if(gxwAutoOff&SYS_PLAY_NOT_OFF_EN) // not power save when playback
  396. gxwAutoOffCounter=0;
  397. #endif
  398. //Nick061120 start //NandRestore start  //Walace061219#1
  399. #if(NAND_ECC_DEBUG)//vicky070105#3
  400. if( (gxwTimeToScanPM > SCAN_PM_DURATION)&&gfMLCMode) //Nick061204
  401. #else
  402. if((gxbRestoreBlkNum || (gxwTimeToScanPM > SCAN_PM_DURATION))&&gfMLCMode) //Nick061204
  403. #endif
  404. {
  405. //LCD_CTRL_DIS(); //Walace061126#1
  406. gxbModuleState=MODULE_FM;
  407. if(gxwTimeToScanPM > SCAN_PM_DURATION)
  408. gxbRestoreCMD |= PM_SCAN;
  409. else
  410. gxbRestoreCMD = FullStep;
  411. LoadProgram(PM_PLAY_DATA_RTN_RESTORE, BASIC_CODE_ONLY);
  412. }
  413. //Nick061120 end //NandRestore end //Walace061219#1
  414. }
  415. }
  416. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:34
  417. void UiFmFadeOut(void)
  418. {
  419. /*
  420. BYTE bTemp;
  421. for(bTemp=gxbVolume;bTemp>=0;bTemp--)
  422. {
  423. IntCdcSetPaGain(bTemp); 
  424. IntCdcSetPaGainTask(TRUE);
  425. CommonDelay(100);
  426. }
  427. */
  428. CdcSetPaGain(0);  //tne 2006/12/26 #1
  429. //IntCdcSetPaGainTask(TRUE);
  430. CdcSetPaGainTask(PA_TASK_IMMEDIATE);  //Walace060525#4 //tne 2006/12/26 #1
  431. }
  432. #endif
  433. /*--------------------------------------------------------------------------
  434. Description:
  435. User Interface for TARGET Fm
  436. Arguments:
  437. Global arguments:
  438. Returns: 
  439. --------------------------------------------------------------------------*/
  440. API void UiDispCtrl(BYTE bStatus) reentrant //Tne051228#reentrant
  441. {
  442. //Dennis Shih 20060309 start 
  443. #if (FM_MODULE==1)
  444. //BYTE bKey;
  445. //WORD SearchOver;
  446. #endif
  447. //Dennis Shih 20060309 end
  448. //BYTE bI;
  449. //static bit bShowSearch;
  450. //#if(FM_MODULE==1) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  451. /* //tne 2007/01/11 #1
  452. if(bStatus != UI_FM_SEARCH_UP && bStatus != UI_FM_SEARCH_DOWN)
  453. {
  454. FMFadeOutVol(0,150); //Dennis060511#1
  455. CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
  456. }
  457. */
  458. //#endif
  459. switch(bStatus)
  460. {
  461. case UI_FM_SEARCHING:
  462. /* //tne 2007/01/11 #1
  463. if(gxbLcdCounter>=UI_FM_SEARCH_REFLASH_TIME)
  464. {
  465. //fix by tne 2004/12/18 #1
  466. if(gxbUiMenuMainStates==UI_NO_MENU)
  467. bI=UI_FM_FREQ1_PAGE;
  468. else
  469. bI=UI_FM_FREQ2_PAGE;
  470. if(bShowSearch)
  471. OledClearArea(SEG0,PAGE2PIXEL(bI),OLED_MAX_COL-SEG0,LINE1) ;
  472. else
  473. StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,PAGE2PIXEL(bI));
  474. bShowSearch^=1;
  475. gxbLcdCounter=0;
  476. }
  477. */
  478. break;
  479. /* //remove by tne 2007/01/11 #1
  480. case UI_SEL_PRESET_START:
  481. OledClearArea(SEG0,LINE1,OLED_MAX_COL-SEG0,OLED_MAX_ROW-LINE1) ;
  482. StrShowSysString(SYS_STR_FM_SELECT_PRESET,LCD_AUTO_CENTER_COL,OLED_FM_PRESET_START_PAGE-PAGE2);
  483. gxwFmFreq=gxwPresetData[gxbFmPreset];
  484. UiShowFreq();
  485. UiShowPreset(UI_FM_PRESET_START_PAGE,UI_FM_PRESET_START_COLUMN,gxbFmPreset); //tne 2006/05/10 #1
  486. FmSetFreq();
  487. UiRedrawStero(); //Walace060217#1
  488. gxbLcdCounter=0;
  489. break;
  490. case UI_SEL_PRESET_SELECT:
  491. gxbFmPreset++;
  492. if(gxbFmPreset>FM_MAX_PRESET) gxbFmPreset=0;
  493. UiScrollPrset(gxbFmPreset); //tne 2006/05/10 #1
  494. gxwFmFreq=gxwPresetData[gxbFmPreset];
  495. UiShowFreq();
  496. FmSetFreq();
  497. gxbLcdCounter=0;
  498. break;
  499. case UI_SAVE_PRESET_START:
  500. gxbFmRecPreset=gxbFmPreset; //tne 2006/05/10 #1
  501. OledClearArea(SEG0,LINE1,OLED_MAX_COL-SEG0,OLED_MAX_ROW-LINE1) ;
  502. StrShowSysString(SYS_STR_FM_SAVE_PRESET,LCD_AUTO_CENTER_COL,OLED_FM_PRESET_START_PAGE-PAGE2);
  503. UiShowFreq();
  504. UiShowPreset(UI_FM_PRESET_START_PAGE,UI_FM_PRESET_START_COLUMN,gxbFmRecPreset);  //tne 2006/05/10 #1
  505. break;
  506. case UI_SAVE_PRESET_SAVE:
  507. OledClearArea(SEG0,OLED_FM_PRESET_START_PAGE-PAGE2, OLED_MAX_COL-SEG0,LINE1) ;
  508. StrShowSysString(SYS_STR_FM_SAVING,LCD_AUTO_CENTER_COL,OLED_FM_PRESET_START_PAGE-PAGE2);
  509. for(bI=0;bI<6;bI++)
  510. {
  511. OledReverse(33,UI_FM_PRESET_BLOCK_PAGE<<3,16,16);
  512. UiFmDelay(2,UI_FM_PRESET_SAVE_TIME);
  513. }
  514. gxwPresetData[gxbFmRecPreset] = gxwFmFreq; //tne 2006/05/10 #1
  515. //modify by tne 2005/01/07 #2
  516. bI=gxwFmFreq-FM_FREQ_MIN;
  517. //SramWrite(SRAM_FM_PRESET_1+gxbFmPreset, &bI); //Walace060309#1
  518. StrShowSysString(SYS_STR_FM_SAVE_PRESET,LCD_AUTO_CENTER_COL,OLED_FM_PRESET_START_PAGE-PAGE2);
  519. gxbFmPreset=gxbFmRecPreset; //tne 2006/05/10 #1
  520. #if(FM_PRESET_PRESAVE) //Walace060714#1
  521. SaveFmPresetSetting();
  522. #endif
  523. case UI_SAVE_PRESET_SELECT:
  524. //tne 2006/05/10 #1
  525. gxbFmRecPreset++;
  526. if(gxbFmRecPreset>FM_MAX_PRESET) gxbFmRecPreset=0;
  527. UiScrollPrset(gxbFmRecPreset);
  528. break;
  529. case UI_FM_SEARCH_UP:
  530. case UI_FM_SEARCH_DOWN:
  531. bShowSearch=TRUE;
  532. //fix by tne 2004/12/18 #1
  533. if(gxbUiMenuMainStates==UI_NO_MENU)
  534. {
  535. OledClearArea(SEG0,OLED_FM_FREQ1_PAGE,OLED_MAX_COL-SEG0,OLED_MAX_ROW-OLED_FM_FREQ1_PAGE) ;
  536. StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,OLED_FM_FREQ1_PAGE);
  537. }
  538. else
  539. {
  540. OledClearArea(SEG0,OLED_FM_FREQ2_PAGE,OLED_MAX_COL-SEG0,OLED_MAX_ROW-OLED_FM_FREQ2_PAGE) ;
  541. StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,OLED_FM_FREQ2_PAGE);
  542. }
  543. UiFmDelay(1,0xFFFF);
  544. bI = (bStatus&0x01); // Get search up or search down
  545. gxbLcdCounter=0;
  546. OledClearArea(SEG0,OLED_FM_FREQ1_PAGE,OLED_MAX_COL-SEG0,OLED_MAX_ROW-OLED_FM_FREQ1_PAGE) ; //Dennis Shih 2006/03/06
  547. */
  548. }
  549. }
  550. #if(USE_ERR_MSG_DISPLAY)
  551. void UiShowErrMsg(WORD wErrMsg) large
  552. {
  553. //if(gxbUiMenuMainStates==UI_NO_MENU) //tne 2007/01/11 #1
  554. {
  555. OledShowIconNew(2,IM_RADIO_FREQ_CLEAR_BAR,UI_FM_FREQ_COL,UI_FM_FREQ_ROW);
  556. StrShowSysString(wErrMsg,LCD_AUTO_CENTER_COL,UI_FM_FREQ_ROW);
  557. }
  558. /* //tne 2007/01/11 #1
  559. else
  560. {
  561. OledClearArea(SEG0,OLED_FM_FREQ2_PAGE,OLED_MAX_COL-SEG0,LINE1) ;
  562. StrShowSysString(wErrMsg,LCD_AUTO_CENTER_COL,UI_FM_FREQ2_PAGE);
  563. }
  564. */
  565. }
  566. #endif
  567. void UiErrHandle(void) large
  568. {
  569. #if(USE_ERR_MSG_DISPLAY)
  570. BYTE bErrCode;
  571. /* //tne 2007/01/13 #3
  572. if(gxbErrCode==ERR_NO_ERROR)
  573. return;
  574. else
  575. gxbLastErrCode=gxbErrCode;
  576. */
  577. //LCD_CTRL_EN();
  578. switch(gxbErrCode)
  579. {
  580. case ERR_FM_SEARCH_ERROR:
  581. UiShowErrMsg(SYS_STR_NO_STATION);
  582. break;
  583. case ERR_FM_NO_PRESET: 
  584. UiShowErrMsg(SYS_STR_NO_FM_PRESET);
  585. break;
  586. default:
  587. bErrCode=(((gxbErrCode&0xF0)>>4)*10)+(gxbErrCode&0x0F);
  588. UiShowErrMsg(SYS_STR_ERR_CODE);
  589. //fix by tne 2004/12/18 #1
  590. OledShowNumber(bErrCode,UI_ERR_MSG_NUM_COLNUM,OLED_FM_FREQ1_PAGE,2);
  591. }
  592. gxbLcdCounter=0;
  593. while(gxbLcdCounter<UI_SHW_FM_ERR_DELAY_TIME) { };
  594. OledShowIconNew(2,IM_RADIO_FREQ_CLEAR_BAR,UI_FM_FREQ_COL,UI_FM_FREQ_ROW);
  595. UiShowFreqNum();
  596. //LCD_CTRL_DIS();
  597. #else
  598. return;
  599. #endif
  600. }
  601. API void UiGoNoMenu(void)
  602. {
  603. gxbUiMenuMainStates=UI_NO_MENU;
  604. UiReDrawFM();
  605. }
  606. //function modify by tne 2007/01/11 #1
  607. void UiDrawFreqBar()
  608. {
  609. BYTE bColNum;
  610. bColNum=( ((DWORD)(gxwFmFreq-FM_FREQ_MIN)*UI_FM_FREQ_BAR_WIDTH) / (FM_FREQ_MAX-FM_FREQ_MIN+1) ) + UI_FM_FREQ_BAR_COL+6;
  611. OledShowIconNew(2,IM_RADIO_PROG_BAR,UI_FM_FREQ_BAR_COL,UI_FM_FREQ_BAR_ROW);
  612. OledShowIconNew(2,IM_RADIO_BAR_BLOCK,bColNum,UI_FM_FREQ_BAR_ROW);
  613. }
  614. //function modify by tne 2007/01/07 #1
  615. void UiShowFreqNum() large
  616. {
  617. BYTE bI;
  618. WORD wDispNum;
  619. OledShowIconNew(2,IM_RADIO_NUMBER_FULLSTOP,UI_FM_FREQ_DOT_COL,UI_FM_FREQ_ROW);
  620. #if(FM_MODULE==2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  621. wDispNum=gxwFmFreq*10;
  622. #else
  623. wDispNum=gxwFmFreq;
  624. #endif
  625. for(bI=2;bI>=1;bI--)
  626. {
  627. OledShowIconNew(2,
  628. IM_RADIO_NUMBER_0+((wDispNum%10)*FM_FREQNUM_ICON_OFFSET),
  629. UI_FM_LOW_FREQ_NUM_COL+((bI-1)*(UI_FM_FREQ_NUM_WIDTH+UI_FM_FREQ_SPACE)),
  630. UI_FM_FREQ_ROW);
  631. wDispNum /= 10;
  632. }
  633. for(bI=3;bI>=1;bI--)
  634. {
  635. OledShowIconNew(2,
  636. IM_RADIO_NUMBER_0+((wDispNum%10)*FM_FREQNUM_ICON_OFFSET),
  637. UI_FM_FREQ_COL+((bI-1)*(UI_FM_FREQ_NUM_WIDTH+UI_FM_FREQ_SPACE)),
  638. UI_FM_FREQ_ROW);
  639. wDispNum /= 10;
  640. }
  641. }
  642. void UiShowFreq()
  643. {
  644. UiShowFreqNum();
  645. UiDrawFreqBar();
  646. }
  647. //tne 2007/01/11 #1
  648. void UiReDrawFM() large
  649. {
  650. if(gxbLastErrCode!=ERR_NO_ERROR)
  651. {
  652. gxbErrCode=gxbLastErrCode;
  653. UiErrHandle();
  654. }
  655. OledShowIconNew(2,IM_RADIO_BG,0,0);
  656. UiShowNormalTitleInfo();
  657. UiRedrawStero();
  658. UiShowFreq();
  659. UiShowPresetStateIcon();
  660. if(gxbUiMenuMainStates==UI_SEL_PRESET_MENU)
  661. UiFmShowFmChNum(gxbFmPreset,51,107,TRUE);
  662. /*
  663. OLED_CLEAR_ALL();
  664. OledShowIcon(ICON_LAB_FM,SEG0,PAGE0) ; //Show FM Icon
  665. UiShowAlarmPic();
  666. UiRedrawStero();
  667. UiShowFreq();
  668. UI_SHOW_BATTERY();
  669. UiShowStorageSts();
  670. if(gxbLastErrCode!=ERR_NO_ERROR)
  671. {
  672. gxbErrCode=gxbLastErrCode;
  673. UiErrHandle();
  674. }
  675. #if(SYS_USE_KEY_HOLD)
  676. UiShowKeyHold();
  677. #endif
  678. */
  679. }
  680. /* //Walace060217#1
  681. void UiShowStereo() large
  682. {
  683. bit fFmNowSteroSts=FmCheckStereo();
  684. if(gxbUiMenuMainStates==UI_QTY_MENU) return; //not check when select qty
  685. if(fFmNowSteroSts!=gfFmSteroLastSts)
  686. {
  687. gfFmSteroLastSts=fFmNowSteroSts;
  688. UiRedrawStero();
  689. }
  690. }
  691. */
  692. //Walace060217#1
  693. /* //tne 2007/01/11 #1
  694. void UiGoStereoSetMenu(void)
  695. {
  696. UI_CLEAR_MENU_TAG_AREA(); //Nick060504
  697. StrShowSysString(cwStringOffOnList[gxbUiMenuSubStates],LCD_AUTO_CENTER_COL,PAGE4);
  698. UiShowSubMenuNum(gxbUiMenuSubStates+1,2);
  699. }
  700. */
  701. //tne 2007/01/11 #1
  702. void UiRedrawStero(void) large
  703. {
  704. if(gxbFmState&FM_STATE_STEREO_SET)
  705. //OledShowIcon(ICON_STERO,36,8) ; //Stereo Icon
  706. OledShowIconNew(2,IM_RADIO_STEREO,UI_FM_STEREO_ICON_COL,UI_FM_STEREO_ICON_ROW);
  707. else
  708. OledShowIconNew(2,IM_RADIO_MONO,UI_FM_STEREO_ICON_COL,UI_FM_STEREO_ICON_ROW);
  709. //OledClearArea(36,8,ICON_STERO_W,ICON_STERO_H) ;
  710. }
  711. //tne 2006/05/10 #1
  712. /* //tne 2007/01/11 #1
  713. void UiShowPreset(BYTE bPage,BYTE bColNum,BYTE bPresetNum) large
  714. {
  715. BYTE bI,bJ;
  716. //tne 2006/05/10 #1
  717. if(bPresetNum<2)
  718. bI = bPresetNum + FM_MAX_PRESET - 1;
  719. else
  720. bI=bPresetNum-2;
  721. OledClearArea(SEG0,LINE2,OLED_MAX_COL-SEG0,LINE1) ;
  722. gxwFGColor = OLED_BLUE;
  723. for(bJ=0;bJ<6;bJ++)
  724. {
  725. //modify by tne 2004/11/12
  726. OledShowNumber(bI,bColNum+bJ*UI_FM_PRESET_WIDTH_SPACE,PAGE2PIXEL(bPage),2);
  727. bI++;
  728. if(bI>FM_MAX_PRESET) bI=0;
  729. }
  730. gxwFGColor = OLED_WHITE;
  731. OledReverse(34,PAGE2PIXEL(UI_FM_PRESET_BLOCK_PAGE),13,PAGE1);
  732. UI_SHOW_BATTERY();
  733. }
  734. */
  735. //tne 2006/05/10 #1
  736. /* //tne 2007/01/11 #1
  737. void UiScrollPrset(BYTE bPresetNum) large
  738. {
  739. UiShowPreset(UI_FM_PRESET_START_PAGE,UI_FM_PRESET_START_COLUMN,bPresetNum);
  740. return ;
  741. }
  742. void UiFmDelay(BYTE bDelay1,WORD wDelay2) large
  743. {
  744. WORD wI;
  745. for(;bDelay1>0;bDelay1--)
  746. {
  747. for(wI=wDelay2;wI>0;wI--) { };
  748. }
  749. }
  750. */
  751. //vicky050131
  752. void UiGoFMMute(void) 
  753. {
  754. BOOL fShowSearch;
  755. BYTE bKey;
  756. gxdwKeepTime=gxdwNowTime; //vicky050131
  757. FmSetMute();
  758. //Renshuo050322#A    
  759. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  760. CdcSetPaGain(0); //Ren050312#1 //tne 2006/12/26 #1
  761. #endif
  762. while(1)
  763. {
  764. KeyGet(bKey);
  765. //vicky060810 start
  766. if(gxbModuleState==(MODULE_INITIAL|MODULE_PRC_REC_KEY_END))
  767. {
  768. if(bKey&KEY_BREAK)
  769. {
  770. bKey=KEY_INVALID;
  771. gxbModuleState=MODULE_INITIAL;
  772. }
  773. else
  774. {
  775. bKey=KEY_INVALID;
  776. }
  777. }
  778. //vicky060810 end
  779. UiCheckBackLight(bKey);
  780. #if(UI_USE_MODE_KEY)
  781. //if(bKey==KEY_MODE_BREAK)
  782. if(bKey==KEY_FUNC_LONG) //tne 2007/01/11 #1
  783. {
  784. //#if(FM_MODULE==1) //Dennis Shih 2006/02/14 //Walace060217#1
  785. //UiFmFadeOut();
  786. //#endif
  787. UiFmSwapNextMode();
  788. }
  789. #endif
  790. //Renshuo050322#A    
  791. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  792. //IntCdcSetPaGainTask(FALSE); //Ren050312#1
  793. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  794. #endif
  795. if(gxbLcdCounter>=UI_FM_SEARCH_REFLASH_TIME)
  796. {
  797. if(fShowSearch)
  798. //OledClearArea(SEG0,OLED_FM_FREQ1_PAGE,OLED_MAX_COL-SEG0,LINE1);
  799. OledShowIconNew(2,IM_RADIO_FREQ_CLEAR_BAR,UI_FM_FREQ_COL,UI_FM_FREQ_ROW);
  800. else
  801. //StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,OLED_FM_FREQ1_PAGE);
  802. //StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,OLED_FM_FREQ1_PAGE+PAGE2);
  803. UiShowFreqNum();
  804. fShowSearch^=1;
  805. gxbLcdCounter=0;
  806. }
  807. #if(!SETTING_FOR_ICE_START)
  808. if(gxdwNowTime-gxdwKeepTime >gxbMuteTime)
  809. #endif
  810. {
  811. #if(FM_MODULE!=2)
  812. FmSetStereo(gxbFmState&FM_STATE_STEREO_SET); //tne 2006/11/17 #1
  813. #endif
  814. UiShowFreqNum(); //tne 2007/01/11 #1
  815. break;
  816. }
  817. }
  818. FmSetFreq();
  819. //Renshuo050322#A    
  820. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  821. CdcSetPaGain(gxbVolume); //Ren050312#1 //tne 2006/12/26 #1
  822. #endif
  823. }
  824. //end
  825. #if(UI_USE_ALARM_DISPLAY)
  826. /* //tne 2007/01/15 #1 move to UiCommon.c
  827. API void UiShowWakeUp(void) large
  828. */
  829. #endif
  830. //Dennis Shih 20060309 start
  831. #if(FM_MODULE==0)
  832. //for Cenix second requset, the function is modified from FMFreqCount()
  833. //StartRreq: the freq is that count start point 
  834. //EndFreq: the freq is that count end point
  835. //CountUp = 1: count up ; countup =0: count down
  836. BYTE FMFreqSearch(XWORD StartFreq, XWORD EndFreq, BOOL CountUp) large
  837. {
  838. BYTE bKey;
  839. XWORD TempCounter=0;
  840. gxwFmFreq=StartFreq;
  841. // UiShowFreq(FALSE);
  842. //tne 2007/01/12 #3 //FM debug mode
  843. #if(FM_DEBUG_SEARCH_MODE==0)
  844. if(CountUp)
  845. {
  846. do
  847. {
  848. TempCounter++;
  849. KeyGet(bKey);
  850. UiCheckBackLight(bKey);
  851. // LcdBackLightControl(LCD_BACKLIGHT_OFF);
  852. UiNormalCheck();
  853. if(TempCounter>0x0F50)
  854. {
  855. #if(FM_STEP_100K) //Dennis060517#1 start
  856. gxwFmFreq+=1;
  857. #else
  858. gxwFmFreq+=FM_SEARCH_STEP;
  859. #endif //Dennis060517#1 end
  860.                             UiShowFreq();
  861. //tne 2005/07/26
  862. if(gxwFmFreq>=EndFreq)
  863. return FALSE;
  864. // if(gxbUiMenuMainStates!=UI_KEY_HOLD_MENU)
  865. // UiShowFreq(FALSE);
  866. if(FmFreqCheck())
  867. return TRUE;
  868. TempCounter=0;
  869. }
  870. if(UiFmCheckBreakAutoSearchKey(bKey))
  871. return FM_SEARCH_USER_BREAK; //tne 2007/01/12 #3
  872. }while(1);
  873. }
  874. else
  875. {
  876. do
  877. {
  878. TempCounter++;
  879. KeyGet(bKey);
  880. UiCheckBackLight(bKey);
  881. // LcdBackLightControl(LCD_BACKLIGHT_OFF);
  882. UiNormalCheck();
  883. if(TempCounter>0x0F50)
  884. {
  885. #if(FM_STEP_100K) //Dennis060517#1 start
  886. gxwFmFreq-=1;
  887. #else
  888. gxwFmFreq-=FM_SEARCH_STEP;
  889. #endif //Dennis060517#1 end
  890.                             UiShowFreq();
  891. //tne 2005/07/26
  892. if(gxwFmFreq<=EndFreq)
  893. return FALSE;
  894. // if(gxbUiMenuMainStates!=UI_KEY_HOLD_MENU)
  895. // UiShowFreq(FALSE);
  896. if(FmFreqCheck())
  897. return TRUE;
  898. TempCounter=0;
  899. }
  900. if(UiFmCheckBreakAutoSearchKey(bKey))
  901. return FM_SEARCH_USER_BREAK; //tne 2007/01/12 #3
  902. }while(1);
  903. }
  904. #elif(FM_DEBUG_SEARCH_MODE==1)
  905. while(1)
  906. {
  907. KeyGet(bKey);
  908. UiCheckBackLight(bKey);
  909. UiNormalCheck();
  910. if(CountUp)
  911. {
  912. gxwFmFreq+=FM_SEARCH_STEP;
  913. if(gxwFmFreq>=EndFreq)
  914. break;
  915. }
  916. else
  917. {
  918. gxwFmFreq-=FM_SEARCH_STEP;
  919. if(gxwFmFreq<=EndFreq)
  920. break;
  921. }
  922. if(UiFmCheckBreakAutoSearchKey(bKey))
  923. return FM_SEARCH_USER_BREAK;
  924. }
  925. return FALSE;
  926. #elif(FM_DEBUG_SEARCH_MODE==2)
  927. while(1)
  928. {
  929. KeyGet(bKey);
  930. UiCheckBackLight(bKey);
  931. UiNormalCheck();
  932. UiShowFreq();
  933. CommonDelay(0x4000);
  934. if(CountUp)
  935. {
  936. gxwFmFreq+=FM_SEARCH_STEP;
  937. if(gxwFmFreq>=EndFreq)
  938. break;
  939. }
  940. else
  941. {
  942. gxwFmFreq-=FM_SEARCH_STEP;
  943. if(gxwFmFreq<=EndFreq)
  944. break;
  945. }
  946. for(TempCounter=0;TempCounter<sizeof(gcwSimFmStation);TempCounter++)
  947. {
  948. if(gxwFmFreq==gcwSimFmStation[TempCounter])
  949. return TRUE;
  950. }
  951. if(UiFmCheckBreakAutoSearchKey(bKey))
  952. return FM_SEARCH_USER_BREAK;
  953. }
  954. return FALSE;
  955. #endif
  956. }
  957. #endif
  958. //Dennis Shih 20060309 end
  959. //Dennis060511#2 start
  960. /*--------------------------------------------------------------------------
  961. Desciption:
  962. The "Fade In/Out" assistance in M5181 Project
  963. Arguments:
  964. bVol :  "X"  Fad Out Volume to "X"
  965. Nms :  "N" Fade Out with "N" mS.
  966. Global arguments:
  967. gxbTargetVolume
  968. gxbLastVolume
  969. Returns:
  970. void
  971. --------------------------------------------------------------------------*/
  972. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:41
  973. void FMFadeOutVol(BYTE bVol, BYTE Nms) large
  974. {
  975. XWORD i;
  976. gxbTargetVolume=gxbLastVolume;
  977. while(gxbTargetVolume!=bVol)
  978. {
  979. for(i=1;i<(17*Nms);i++) {;}   //2550/150
  980. gxbTargetVolume--;
  981. //IntCdcSetPaGainTask(TRUE);
  982. CdcSetPaGainTask(PA_TASK_IMMEDIATE);  //Walace060525#4 //tne 2006/12/26 #1
  983. }
  984. }
  985. #endif
  986. //Dennis060511#2 end
  987. #if(FM_PRESET_PRESAVE) //Walace060714#1
  988. void SaveFmPresetSetting() large 
  989. {
  990. BYTE bI,bKeepStorType;
  991. bKeepStorType=gxbStorage;
  992. NandPrivateEn();
  993. ReadSettingData(FS_DATA_0_0);
  994. for(bI=0;bI<=FM_MAX_PRESET;bI++)
  995. {
  996. //Walace060931#1 start
  997. #if(FM_STEP_100K)  
  998. gxbFsData[SRAM_FM_PRESET_START+bI+gxwOffsetDataSec]=((BYTE)((gxwPresetData[bI]-FM_FREQ_MIN)&0x00FF));
  999. #else
  1000. *((PWORD)(gxbFsData+SRAM_FM_PRESET_START+gxwOffsetDataSec)+bI) = (gxwPresetData[bI]-FM_FREQ_MIN); //tne 2006/11/17 #2
  1001. //gxbFsData[SRAM_FM_PRESET_1+bI+gxwOffsetDataSec]=((BYTE)((gxwPresetData[bI]-FM_FREQ_MIN)&0x00FF));
  1002. //gxbFsData[SRAM_FM_PRESET_16+bI+gxwOffsetDataSec]=((BYTE)((gxwPresetData[bI]-FM_FREQ_MIN)>>8));
  1003. #endif 
  1004. //Walace060931#1 end
  1005. }
  1006. #if(FM_STEP_100K)
  1007. gxbFsData[SRAM_FM_FREQ+gxwOffsetDataSec]=((BYTE)((gxwFmFreq-FM_FREQ_MIN)&0x00FF));
  1008. #else
  1009. //Walace060931#1
  1010. *(PWORD)(gxbFsData+SRAM_FM_FREQ+gxwOffsetDataSec)=gxwFmFreq-FM_FREQ_MIN;
  1011. //gxbFsData[SRAM_FM_FREQ_HIGH+gxwOffsetDataSec]=((BYTE)((gxwFmFreq-FM_FREQ_MIN)>>8));
  1012. #endif
  1013.                 
  1014.                 
  1015. gxbFsData[SRAM_FM_PRESET_NUM+gxwOffsetDataSec]=gxbFmPreset;
  1016. gxbFsData[SRAM_FM_STATE+gxwOffsetDataSec]=gxbFmState; 
  1017. FsWrite(SAVE_SETTING_NAND_ADD,1,FS_DATA_0_0);
  1018. NandPrivateDis();
  1019. NandFinishJob();
  1020. gxbStorType=bKeepStorType;
  1021. gxbStorage=bKeepStorType;
  1022. gxbFmPreset = gxbFmRecPreset;
  1023. }
  1024. #endif
  1025. //tne 2007/01/11 #1 start
  1026. void UiShowPresetStateIcon(void)
  1027. {
  1028. switch(gxbUiMenuMainStates)
  1029. {
  1030. case UI_NO_MENU:
  1031. OledShowIconNew(2,IM_RADIO_NORMAL,UI_PRESET_ICON_COL,UI_PRESET_ICON_ROW);
  1032. OledShowIconNew(2,IM_RADIO_CH_BAR_BG_CLEAR,0,102);
  1033. break;
  1034. case UI_SEL_PRESET_MENU:
  1035. OledShowIconNew(2,IM_RADIO_PRESET,UI_PRESET_ICON_COL,UI_PRESET_ICON_ROW);
  1036. OledShowIconNew(2,IM_RADIO_CH_BAR_BG,0,102);
  1037. OledShowIconNew(2,IM_RADIO_CH_ARROW_LEFT, 36, 111);
  1038. OledShowIconNew(2,IM_RADIO_CH_ARROW_RIGHT, 76, 111);
  1039. break;
  1040. }
  1041. }
  1042. void UiFmSwapNextMode(void)
  1043. {
  1044. #if(_PEDOMETER_Mode_)
  1045. DisableTimer1(); // modify by Rojam 2007-04-02 14:50
  1046. #endif
  1047. FmEnd();
  1048. gxbSettingBuffer[SETTING_NEXT_MODE]=SAVE_AND_SEL_MODE;
  1049. gxbSettingBuffer[SETTING_DISPLAY_SWAPING]=TRUE;
  1050. gxbLastErrCode=ERR_NO_ERROR;
  1051. SaveSetting();
  1052. }
  1053. BOOL UiFmCheckBreakAutoSearchKey(BYTE bKey) large
  1054. {
  1055. switch(bKey)
  1056. {
  1057. case KEY_UP_BREAK:
  1058. case KEY_LEFT_BREAK:
  1059. case KEY_RIGHT_BREAK:
  1060. case KEY_FUNC_BREAK:
  1061. return TRUE;
  1062. case KEY_FUNC_LONG:
  1063. UiFmSwapNextMode();
  1064. break;
  1065. }
  1066. return FALSE;
  1067. }
  1068. //tne 2007/01/12 #3
  1069. //fSaveScanMode: For auto scan and save preset mode
  1070. //Return Value: TRUE - Find a Station
  1071. // FALSE - No Station
  1072. // FM_SEARCH_USER_BREAK - User Break
  1073. BYTE UiFmAutoSearchFreq(BOOL fSearchUp, BOOL fSaveScanMode) large
  1074. {
  1075. BYTE bRetVal;
  1076. #if(FM_MODULE==1) //Dennis Shih 2006/03/06 
  1077. WORD wSearchOver;
  1078. wSearchOver=0;
  1079. bRetVal=TRUE;
  1080. while(FmSearch(fSearchUp)==FALSE)
  1081. {
  1082. KeyGet(bKey);
  1083. UiCheckBackLight(bKey);
  1084. UiNormalCheck();
  1085. UiShowFreq();
  1086. if(UiFmCheckBreakAutoSearchKey(bKey))
  1087. {
  1088. bRetVal=FM_SEARCH_USER_BREAK;
  1089. break;
  1090. }
  1091. if(wSearchOver==(FM_FREQ_MAX-FM_FREQ_MIN))
  1092. {
  1093. bRetVal=FALSE;
  1094. break;
  1095. }
  1096. else
  1097. {
  1098. wSearchOver++;
  1099. }
  1100. if( (fSaveScanMode) && (gxwFmFreq>=FM_FREQ_MAX) )
  1101. {
  1102. bRetVal=FALSE;
  1103. break;
  1104. }
  1105. }
  1106. #elif(FM_MODULE==2)
  1107. #if(0) //modify by Rojam 2007-05-18 14:27
  1108. bAutoNum=0;
  1109. FmAutoSeek(&bAutoNum); //Kitty 061101
  1110. if(bAutoNum)
  1111. {         
  1112. for(bIndex=0;bIndex<bAutoNum;bIndex++)          //kitty 061110
  1113. {
  1114. gxwPresetData[bIndex]=FmChanToFreq(FMseekChannels[bIndex]);
  1115. }
  1116. bRetVal=2;
  1117. gxbFmPreset=1;
  1118. gxbFmRecPreset=bAutoNum;
  1119. gxbFmMaxRecPreset=bAutoNum;
  1120. return bRetVal;
  1121. #else
  1122. BYTE bKey;
  1123. BOOL fShowSearch;
  1124. fShowSearch=TRUE;
  1125. bRetVal=FALSE;
  1126. if(fSaveScanMode==FM_FREQ_SEARCH_NORMAL_MODE)
  1127. {
  1128. OledShowIconNew(2,IM_RADIO_FREQ_CLEAR_BAR,UI_FM_FREQ_COL,UI_FM_FREQ_ROW);
  1129. StrShowSysString(SYS_STR_FM_SEARCHING,LCD_AUTO_CENTER_COL,UI_FM_FREQ_ROW);
  1130. }
  1131. KeyGet(bKey);
  1132. UiCheckBackLight(bKey);
  1133. UiNormalCheck();
  1134. if(UiFmCheckBreakAutoSearchKey(bKey))
  1135. {
  1136. bRetVal=FM_SEARCH_USER_BREAK;
  1137. return bRetVal;
  1138. }
  1139. if(!FmSearch(fSearchUp))
  1140. {
  1141. bRetVal=FALSE;
  1142. return bRetVal;
  1143. }
  1144. else
  1145. {
  1146. if(fSaveScanMode==FM_FREQ_SEARCH_NORMAL_MODE)
  1147. {
  1148. bRetVal=TRUE;
  1149. }
  1150. else
  1151. {
  1152. if(gxwFmFreq< gxbPreSattion)
  1153. {
  1154. bRetVal=FALSE;
  1155. return bRetVal;
  1156. }
  1157. else
  1158. {
  1159. gxbPreSattion=gxwFmFreq;
  1160. bRetVal=TRUE;
  1161. }
  1162. }
  1163. }
  1164. if(fSaveScanMode==FM_FREQ_SEARCH_NORMAL_MODE)
  1165. {
  1166. gxbLcdCounter=0;
  1167. while(gxbLcdCounter<7)
  1168. {
  1169. }
  1170. OledShowIconNew(2,IM_RADIO_FREQ_CLEAR_BAR,UI_FM_FREQ_COL,UI_FM_FREQ_ROW);
  1171. }
  1172. #endif
  1173. #else //Dennis Shih 2006/03/09
  1174. WORD wStartFreq;
  1175. wStartFreq=gxwFmFreq;
  1176. if(fSearchUp)
  1177. {
  1178. #if(FM_MODULE==2) //modify by Rojam 2007-04-18 14:10
  1179. bRetVal=FmSearch(fSearchUp);
  1180. #else
  1181. bRetVal=FMFreqSearch(wStartFreq,FM_FREQ_MAX,1);
  1182. #endif
  1183. if( (fSaveScanMode) && (gxwFmFreq>=FM_FREQ_MAX) )
  1184. {
  1185. //...Do Nothing
  1186. }
  1187. else
  1188. {
  1189. #if(FM_MODULE==2)
  1190. if(bRetVal==FALSE)
  1191. bRetVal=FmSearch(fSearchUp);
  1192. #else
  1193. if(bRetVal==FALSE)
  1194. bRetVal=FMFreqSearch(FM_FREQ_MIN,wStartFreq,1);
  1195. #endif
  1196. }
  1197. }
  1198. else
  1199. {
  1200. #if(FM_MODULE==2)
  1201. bRetVal=FmSearch(fSearchUp);
  1202. if(bRetVal==FALSE)
  1203. bRetVal=FmSearch(fSearchUp);
  1204. #else
  1205. bRetVal=FMFreqSearch(wStartFreq,FM_FREQ_MIN,0);
  1206. if(bRetVal==FALSE)
  1207. bRetVal=FMFreqSearch(FM_FREQ_MAX,wStartFreq,0);
  1208. #endif
  1209. }
  1210. #endif
  1211. UiShowFreq();
  1212. FmSetFreq();
  1213. return bRetVal;
  1214. //Dennis Shih 20060309 end
  1215. }
  1216. void UiShowFmMenu(void) large
  1217. {
  1218. UiShowLargeBackground(5,IM_BROWSER_BG_03_S1);
  1219. StrShowSysString(SYS_STR_MENU, LCD_AUTO_CENTER_COL,ITEM_START_ROW-ITEM_ROW_OFF);
  1220. UiShowNormalTitleInfo();
  1221. UiClearAllMenuItem();
  1222. }
  1223. void UiShowFmMenuText(void) large
  1224. {
  1225. #define TOTAL_DISP_ITEM_NUM (ITEM_NUM_OPAGE)
  1226. BYTE bJ;
  1227. /*
  1228. if(gxbTotalMenuItemNum>=TOTAL_DISP_ITEM_NUM)
  1229. {
  1230. if((gxbUiMenuSubStates+TOTAL_DISP_ITEM_NUM)>gxbTotalMenuItemNum) //Last page
  1231. gxbMenuDispLine=TOTAL_DISP_ITEM_NUM-(gxbTotalMenuItemNum-gxbUiMenuSubStates);
  1232. else
  1233. gxbMenuDispLine=0;
  1234. }
  1235. else
  1236. */
  1237. {
  1238. gxbMenuDispLine=gxbUiMenuSubStates;
  1239. }
  1240. for(bJ=0;( (bJ<TOTAL_DISP_ITEM_NUM) && (bJ<gxbTotalMenuItemNum) );bJ++)
  1241. {
  1242. UiShowMenuItem( bJ,
  1243. IM_EXPLORE_BUTTON_CLEAR_STRING,
  1244. IM_ITEM_UNSELECT,
  1245. pcwFmMenuStringPoint[gxbUiMenuSubStates-gxbMenuDispLine+bJ]);
  1246. }
  1247. UiShowMenuItem(gxbMenuDispLine,IM_EXPLORE_BUTTON_01,IM_ITEM_SELECT,pcwFmMenuStringPoint[gxbUiMenuSubStates-gxbMenuDispLine]);
  1248. #undef TOTAL_DISP_ITEM_NUM
  1249. }
  1250. void UiFmScanAndAddPreset(void) large
  1251. {
  1252. BYTE bRecPreset; //One Base, Last Saved Preset Num, 0 mean no station found
  1253. WORD wKeptFmFreq;
  1254. BYTE bKey;
  1255. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:40
  1256. FMFadeOutVol(0,50);
  1257. #endif
  1258. wKeptFmFreq=gxwFmFreq;
  1259. bRecPreset=0;
  1260. gxwFmFreq=FM_FREQ_MIN;
  1261. #if(FM_MODULE==2) // WHH070322
  1262. gxbPreSattion=FM_FREQ_MIN;
  1263. #endif
  1264. UiShowFreq();
  1265. FmSetFreq();
  1266. while(1)
  1267. {
  1268. switch(UiFmAutoSearchFreq(FM_FREQ_SEARCH_UP,FM_FREQ_SEARCH_SAVE_PRESET_MODE))
  1269. {
  1270. case TRUE:
  1271. if(bRecPreset<FM_MAX_PRESET)  // Patrick070307#1
  1272. {
  1273. bRecPreset++;
  1274. gxwPresetData[bRecPreset-1]=gxwFmFreq;
  1275. }
  1276. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1277. CdcSetPaGain(gxbVolume);
  1278. #endif
  1279. gxbLcdCounter=0;
  1280. while(gxbLcdCounter<FM_AUTO_SCAN_PREST_DELAY_TIME)
  1281. {
  1282. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  1283. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);
  1284. #endif
  1285. }
  1286. if(gxwFmFreq<FM_FREQ_MAX)
  1287. {
  1288. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:40
  1289. FMFadeOutVol(0,50);
  1290. #endif
  1291. break;
  1292. }
  1293. case FALSE:
  1294. CommonDelay(0xFFFF);
  1295. CommonDelay(0xFFFF); //Delay let user watch last freq
  1296. gxwFmFreq=wKeptFmFreq;
  1297. UiShowFreq();
  1298. FmSetFreq();
  1299. case FM_SEARCH_USER_BREAK:
  1300. #if(0)//FM_MODULE==2) //modify by Rojam 2007-04-20 19:24
  1301. bRecPreset=bAutoNum;
  1302. #endif
  1303. goto SCAN_FINISH;
  1304. }
  1305. }
  1306. SCAN_FINISH:
  1307. if(bRecPreset>0)
  1308. {
  1309. if(gxbFmRecPreset<bRecPreset)
  1310. gxbFmRecPreset=bRecPreset;
  1311. if(gxbFmMaxRecPreset<bRecPreset)
  1312. gxbFmMaxRecPreset=bRecPreset;
  1313. #if(FM_PRESET_PRESAVE)
  1314. SaveFmPresetSetting();
  1315. #endif
  1316. }
  1317. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1318. CdcSetPaGain(gxbVolume);
  1319. #endif
  1320. }
  1321. //tne 2007/01/13 #1
  1322. void UiFmSetFreqFromPreset(void) large
  1323. {
  1324. UiFmShowFmChNum(gxbFmPreset,51,107,TRUE);
  1325. gxwFmFreq = gxwPresetData[gxbFmPreset-1];
  1326. FmSetFreq();
  1327. UiShowFreq();
  1328. }
  1329. void UiFmVolMenuCtrl(BYTE bKey) large
  1330. {
  1331. switch(bKey)
  1332. {
  1333. /*============Del by Rojam  2007-04-02 09:13===============
  1334. #if(FIVEKEY)
  1335. case KEY_RIGHT_BREAK:
  1336. case KEY_RIGHT_LONG:
  1337. #else
  1338. case KEY_VOL_UP_BREAK:
  1339. case KEY_VOL_UP_LONG:
  1340. #endif
  1341. =========================== end Del ========================*/
  1342. case KEY_RIGHT_BREAK:
  1343. case KEY_RIGHT_LONG:
  1344. if(gxbVolume<MAX_VOL_NUM)
  1345. {
  1346. gxbVolume++;
  1347. CdcCtrl(CDC_VOL_UP);
  1348. }
  1349. UiGoVolMenu();
  1350. break;
  1351. /*============Del by Rojam  2007-04-02 09:13===============
  1352. #if(FIVEKEY)
  1353. case KEY_LEFT_BREAK:
  1354. case KEY_LEFT_LONG:
  1355. #else
  1356. case KEY_VOL_DOWN_BREAK:
  1357. case KEY_VOL_DOWN_LONG:
  1358. #endif
  1359. =========================== end Del ========================*/
  1360. case KEY_LEFT_BREAK:
  1361. case KEY_LEFT_LONG:
  1362. if(gxbVolume>MIN_VOL_NUM)
  1363. {
  1364. gxbVolume--;
  1365. #ifdef UI_VOL_DISPLAY_FIX_MODE
  1366. //if(gxbVolume==15) gxbVolume=7;  //2004.11.11 Renshuo
  1367. if(gxbVolume==16) gxbVolume=8;
  1368. #endif
  1369. CdcCtrl(CDC_VOL_DOWN);
  1370. }
  1371. UiGoVolMenu();
  1372. break;
  1373. /*============Del by Rojam  2007-04-02 09:14===============
  1374. #if(FIVEKEY)
  1375. case KEY_LEFT:
  1376. case KEY_RIGHT:
  1377. #else
  1378. case KEY_VOL_UP:
  1379. case KEY_VOL_DOWN:
  1380. #endif
  1381. =========================== end Del ========================*/
  1382. case KEY_LEFT:
  1383. case KEY_RIGHT:
  1384. if(gxbUiMenuMainStates==UI_VOL_MENU)
  1385. gxbVolCount=0;
  1386. break;
  1387. default:
  1388. if(gxbVolCount>=UI_VOLUME_DELAY_TIME)
  1389. {
  1390. #if(1)//FIVEKEY) // modify by Rojam 2007-04-02 09:15
  1391. UI_SHOW_VOLUME();  
  1392. UI_SHOW_VOLUME_NUM_1(); //TONY070301
  1393. UI_SHOW_VOLUME_NUM_2();
  1394. #endif
  1395. gxbUiMenuMainStates=gxbLastUiMenuMain;
  1396. }
  1397. }
  1398. }
  1399. void UiFmNormalCtrl(BYTE bKey) large
  1400. {
  1401. #if(FM_MODULE==2)
  1402. BOOL fSeek;
  1403. #endif
  1404. switch(bKey)
  1405. {
  1406. case KEY_RIGHT_BREAK:
  1407. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  1408. {
  1409. FMFadeOutVol(0,50); //Dennis060511#1
  1410. }
  1411. #endif
  1412. #if(FM_STEP_100K) //Dennis060517#1 start 
  1413. gxwFmFreq++;
  1414. #else
  1415. gxwFmFreq+=FM_SEARCH_STEP;
  1416. #endif //Dennis060517#1 end
  1417. if(gxwFmFreq>FM_FREQ_MAX)
  1418. gxwFmFreq=FM_FREQ_MIN;
  1419. UiShowFreq();
  1420. FmSetFreq();
  1421. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  1422. CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
  1423. #endif
  1424. break;
  1425. case KEY_LEFT_BREAK:
  1426. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  1427. {
  1428. FMFadeOutVol(0,50); //Dennis060511#1
  1429. }
  1430. #endif
  1431. #if(FM_STEP_100K) //Dennis060517#1 start 
  1432. gxwFmFreq--;
  1433. #else
  1434. gxwFmFreq-=FM_SEARCH_STEP;
  1435. #endif //Dennis060517#1 end
  1436. if(gxwFmFreq<FM_FREQ_MIN) 
  1437. gxwFmFreq=FM_FREQ_MAX;
  1438. UiShowFreq();
  1439. FmSetFreq();
  1440. #if(FM_MODULE!=2) //Dennis Shih 2006/02/14 //tne 2006/12/06 #1
  1441. CdcSetPaGain(gxbVolume); //tne 2006/12/26 #1
  1442. #endif
  1443. break;
  1444. case KEY_RIGHT_LONG:
  1445. case KEY_LEFT_LONG:
  1446. #if(0)//FM_MODULE==2) // modify by Rojam 2007-05-18 14:26
  1447. if(gxwUiFmSearchDelay==0)
  1448. {
  1449. if(bKey==KEY_RIGHT_LONG)
  1450. fSeek=1; //UP
  1451. else
  1452. fSeek=0; //DOWN
  1453. FmSearch(fSeek);
  1454. /*============Del by Rojam  2007-04-20 17:54===============
  1455. if(!FmSearch(fSeek))
  1456. {
  1457. gxbErrCode=ERR_FM_SEARCH_ERROR;
  1458. UiErrHandle();
  1459. }
  1460. =========================== end Del ========================*/
  1461. UiShowFreq();
  1462. gxwUiFmSearchDelay=0x5000;
  1463. }
  1464. #else
  1465. if(gxwUiFmSearchDelay==0)
  1466. {
  1467. #if(FM_MODULE!=2) // modify by Rojam 2007-05-18 14:26
  1468. FMFadeOutVol(0,50); //Dennis060511#2
  1469. #endif
  1470. if(bKey==KEY_RIGHT_LONG) //Use bKey for temp variable
  1471. bKey=FM_FREQ_SEARCH_UP;
  1472. else
  1473. bKey=FM_FREQ_SEARCH_DOWN;
  1474. if(!UiFmAutoSearchFreq(bKey,FM_FREQ_SEARCH_NORMAL_MODE)) //tne 2007/01/11 #1
  1475. {
  1476. gxbErrCode=ERR_FM_SEARCH_ERROR;
  1477. UiErrHandle();
  1478. }
  1479. //Dennis Shih 2006/02/14 //Walace060217#1
  1480. #if(FM_MODULE!=2)  // modify by Rojam 2007-05-18 14:26
  1481. CdcSetPaGain(gxbVolume);  //tne 2006/12/26 #1
  1482. #endif
  1483. gxwUiFmSearchDelay=0x1700;
  1484. }
  1485. #endif
  1486. break;
  1487. case KEY_UP_BREAK:
  1488. if(gxbFmMaxRecPreset==0)
  1489. {
  1490. gxbErrCode=ERR_FM_NO_PRESET;
  1491. UiErrHandle();
  1492. }
  1493. else
  1494. {
  1495. gxbUiMenuMainStates=UI_SEL_PRESET_MENU;
  1496. UiShowPresetStateIcon();
  1497. UiFmSetFreqFromPreset();
  1498. }
  1499. break;
  1500. case KEY_FUNC_BREAK:
  1501. gxbUiMenuMainStates=UI_FM_NORMAL_FUN_MENU;
  1502. gxbUiMenuSubStates=UI_NORMAL_ADD_PRESET_MENU;
  1503. gxbTotalMenuItemNum=UI_FM_NORMAL_MENU_MAX_ITEM;
  1504. pcwFmMenuStringPoint=cwStringFmNormalMenuList;
  1505. UiShowFmMenu();
  1506. UiShowFmMenuText();
  1507. break;
  1508. case KEY_FUNC_LONG:
  1509. UiFmSwapNextMode();
  1510. break;
  1511. case KEY_REC_BREAK: // modify by Rojam 2007-04-02 09:9
  1512. gxbLastUiMenuMain=gxbUiMenuMainStates;
  1513. gxbUiMenuMainStates=UI_VOL_MENU;
  1514. UI_SHOW_VOLUME_SELECT();
  1515. gxbVolCount=0;
  1516. break;
  1517. /*============Del by Rojam  2007-04-02 09:7===============
  1518. #if(FIVEKEY)
  1519. case KEY_VOL_LONG:
  1520. // case KEY_VOL_BREAK:
  1521. UiGoVolMenu();
  1522. break;
  1523. #else
  1524. case KEY_VOL_UP:
  1525. case KEY_VOL_DOWN:
  1526. UiGoVolMenu();
  1527. break;
  1528. #endif
  1529. #if(!FIVEKEY)
  1530. case KEY_REC_BREAK:
  1531. #else
  1532. case KEY_VOL_BREAK:
  1533. #endif
  1534. =========================== end Del ========================*/
  1535. case KEY_REC_LONG: // modify by Rojam 2007-04-02 09:8
  1536. case KEY_REC_LONG_BREAK: // modify by Rojam 2007-04-02 09:8
  1537. //obDCVARRD=0x0C; //David050817#2
  1538. //obDCVWRDATA=0x46;
  1539. //Walace060710#1 start
  1540. if(BattCheck()>BATTERY_LV_LOW_FOR_REC)
  1541. {
  1542. //swap to record module
  1543. #if(!SETTING_FOR_ICE_START)
  1544. if(!gbFsUnableUse) //Walace060629#2 start
  1545. {
  1546. //LCD_CTRL_DIS();
  1547. //modify bt tne 2005/01/07 #2
  1548. gxbLastErrCode=ERR_NO_ERROR;
  1549. gxbSettingBuffer[SETTING_NEXT_MODE]=SAVE_AND_REC;
  1550. gxbSettingBuffer[SETTING_DISPLAY_SWAPING]=FALSE;
  1551. SaveSetting();
  1552. } //Walace060629#2 end
  1553. #endif
  1554. }
  1555. else
  1556. {
  1557. OLED_CLEAR_ALL();
  1558. OledShowIconNew(1,ICON_BATT_WARRING,(OLED_MAX_COL-48)/2,(OLED_MAX_ROW-48)/2);
  1559. #if(SHOW_BATT_VALUE)
  1560. OledShowNumber(BattCheck(),0,0,3);
  1561. #endif
  1562. gxbLcdCounter=0;
  1563. while(gxbLcdCounter<UI_SHW_WAKE_UP_DELAY_TIME) { };
  1564. UiGoNoMenu();
  1565. }
  1566. //Walace060710#1 end
  1567. break;
  1568. }
  1569. }
  1570. void UiSelPresetCtrl(BYTE bKey) large
  1571. {
  1572. switch(bKey)
  1573. {
  1574. case KEY_RIGHT_BREAK:
  1575. case KEY_RIGHT_LONG:
  1576. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:40
  1577. FMFadeOutVol(0,50); //Dennis060511#1
  1578. #endif
  1579. if(gxbFmPreset < gxbFmMaxRecPreset)
  1580. gxbFmPreset++;
  1581. else
  1582. gxbFmPreset = 1;
  1583. UiFmSetFreqFromPreset();
  1584. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1585. CdcSetPaGain(gxbVolume);
  1586. #endif
  1587. break;
  1588. case KEY_LEFT_BREAK:
  1589. case KEY_LEFT_LONG:
  1590. #if(FM_MODULE!=2) //modify by Rojam 2007-04-20 14:39
  1591. FMFadeOutVol(0,50); //Dennis060511#1
  1592. #endif
  1593. if(gxbFmPreset>1)
  1594. gxbFmPreset--;
  1595. else
  1596. gxbFmPreset  = gxbFmMaxRecPreset;
  1597. UiFmSetFreqFromPreset();
  1598. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1599. CdcSetPaGain(gxbVolume);
  1600. #endif
  1601. break;
  1602. case KEY_UP_BREAK:
  1603. gxbUiMenuMainStates=UI_NO_MENU;
  1604. UiShowPresetStateIcon();
  1605. break;
  1606. case KEY_FUNC_BREAK:
  1607. gxbUiMenuMainStates=UI_FM_PRESET_FUN_MENU;
  1608. gxbUiMenuSubStates=UI_PRESET_DEL_PRESET_MENU;
  1609. gxbTotalMenuItemNum=UI_FM_PRESET_MENU_MAX_ITEM;
  1610. pcwFmMenuStringPoint=cwStringFmPresetMenuList;
  1611. UiShowFmMenu();
  1612. UiShowFmMenuText();
  1613. break;
  1614. case KEY_FUNC_LONG:
  1615. UiFmSwapNextMode();
  1616. break;
  1617. case KEY_REC_BREAK: // modify by Rojam 2007-04-02 09:9
  1618. gxbLastUiMenuMain=gxbUiMenuMainStates;
  1619. gxbUiMenuMainStates=UI_VOL_MENU;
  1620. UI_SHOW_VOLUME_SELECT();
  1621. gxbVolCount=0;
  1622. break;
  1623. /*============Del by Rojam  2007-04-02 09:8===============
  1624. #if(!FIVEKEY)
  1625. case KEY_REC_BREAK:
  1626. #else
  1627. case KEY_VOL_BREAK:
  1628. #endif
  1629. =========================== end Del ========================*/
  1630. case KEY_REC_LONG: // modify by Rojam 2007-04-02 09:8
  1631. case KEY_REC_LONG_BREAK: // modify by Rojam 2007-04-02 09:8
  1632. //obDCVARRD=0x0C; //David050817#2
  1633. //obDCVWRDATA=0x46;
  1634. //Walace060710#1 start
  1635. if(BattCheck()>BATTERY_LV_LOW_FOR_REC)
  1636. {
  1637. //swap to record module
  1638. #if(!SETTING_FOR_ICE_START)
  1639. if(!gbFsUnableUse) //Walace060629#2 start
  1640. {
  1641. //LCD_CTRL_DIS();
  1642. //modify bt tne 2005/01/07 #2
  1643. gxbLastErrCode=ERR_NO_ERROR;
  1644. gxbSettingBuffer[SETTING_NEXT_MODE]=SAVE_AND_REC;
  1645. gxbSettingBuffer[SETTING_DISPLAY_SWAPING]=FALSE;
  1646. SaveSetting();
  1647. } //Walace060629#2 end
  1648. #endif
  1649. }
  1650. else
  1651. {
  1652. OLED_CLEAR_ALL();
  1653. OledShowIconNew(1,ICON_BATT_WARRING,(OLED_MAX_COL-48)/2,(OLED_MAX_ROW-48)/2);
  1654. #if(SHOW_BATT_VALUE)
  1655. OledShowNumber(BattCheck(),0,0,3);
  1656. #endif
  1657. gxbLcdCounter=0;
  1658. while(gxbLcdCounter<UI_SHW_WAKE_UP_DELAY_TIME) { };
  1659. UiGoNoMenu();
  1660. }
  1661. //Walace060710#1 end
  1662. break;
  1663. }
  1664. }
  1665. //NOTE: This function don't work 2 page menu now...
  1666. void UiFmSelectPrevNextMenuItem(BOOL fSelUp)
  1667. {
  1668. #if( FM_MODULE!=2)  // modify by Rojam 2007-04-20 14:39
  1669. FMFadeOutVol(0,50);
  1670. #endif
  1671. UiShowMenuItem( gxbMenuDispLine,
  1672. IM_EXPLORE_BUTTON_CLEAR_STRING,
  1673. IM_ITEM_UNSELECT,
  1674. pcwFmMenuStringPoint[gxbUiMenuSubStates]);
  1675. if(fSelUp)
  1676. {
  1677. if(gxbUiMenuSubStates==0)
  1678. gxbUiMenuSubStates=(gxbTotalMenuItemNum-1);
  1679. else
  1680. gxbUiMenuSubStates--;
  1681. }
  1682. else
  1683. {
  1684. if(gxbUiMenuSubStates>=(gxbTotalMenuItemNum-1))
  1685. gxbUiMenuSubStates=0;
  1686. else
  1687. gxbUiMenuSubStates++;
  1688. }
  1689. gxbMenuDispLine=gxbUiMenuSubStates;
  1690. UiShowMenuItem( gxbMenuDispLine,
  1691. IM_EXPLORE_BUTTON_01,
  1692. IM_ITEM_SELECT,
  1693. pcwFmMenuStringPoint[gxbUiMenuSubStates]);
  1694. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1695. CdcSetPaGain(gxbVolume);
  1696. #endif
  1697. }
  1698. //tne 2007/01/13 #2
  1699. //bPresetNum is One Base
  1700. void UiFmRemovePreset(BYTE bPresetNum) large
  1701. {
  1702. gxbFmMaxRecPreset--;
  1703. if(gxbFmMaxRecPreset==0)
  1704. {
  1705. gxbFmRecPreset=0;
  1706. gxbFmPreset=0;
  1707. }
  1708. else
  1709. {
  1710. if(gxbFmRecPreset>bPresetNum)
  1711. gxbFmRecPreset--;
  1712. else if(gxbFmRecPreset>gxbFmMaxRecPreset)
  1713. gxbFmRecPreset=gxbFmMaxRecPreset;
  1714. if(gxbFmPreset>bPresetNum)
  1715. gxbFmPreset--;
  1716. else if(gxbFmPreset>gxbFmMaxRecPreset)
  1717. gxbFmPreset=gxbFmMaxRecPreset;
  1718. }
  1719. while(bPresetNum<FM_MAX_PRESET)
  1720. {
  1721. gxwPresetData[bPresetNum-1]=gxwPresetData[bPresetNum];
  1722. bPresetNum++;
  1723. }
  1724. gxwPresetData[FM_MAX_PRESET-1]=FM_INVALID_FREQ_NUM;
  1725. }
  1726. void UiFmNormalMenuCtrl(BYTE bKey) large
  1727. {
  1728. switch(bKey)
  1729. {
  1730. case KEY_RIGHT_BREAK:
  1731. UiFmSelectPrevNextMenuItem(FALSE);
  1732. break;
  1733. case KEY_LEFT_BREAK:
  1734. UiFmSelectPrevNextMenuItem(TRUE);
  1735. break;
  1736. case KEY_UP_BREAK:
  1737. switch(gxbUiMenuSubStates)
  1738. {
  1739. case UI_NORMAL_ADD_PRESET_MENU:
  1740. if(gxbFmRecPreset<FM_MAX_PRESET)
  1741. gxbFmRecPreset++;
  1742. else
  1743. gxbFmRecPreset=1;
  1744. if(gxbFmMaxRecPreset<FM_MAX_PRESET)
  1745. gxbFmMaxRecPreset++;
  1746. gxwPresetData[gxbFmRecPreset-1]=gxwFmFreq;
  1747. #if(FM_PRESET_PRESAVE) //Walace060714#1
  1748. SaveFmPresetSetting();
  1749. #endif
  1750. break;
  1751. case UI_NORMAL_SCAN_PRESET_MENU:
  1752. UiGoNoMenu();
  1753. UiFmScanAndAddPreset();
  1754. return;
  1755. }
  1756. case KEY_FUNC_BREAK:
  1757. UiGoNoMenu();
  1758. break;
  1759. case KEY_FUNC_LONG:
  1760. UiFmSwapNextMode();
  1761. break;
  1762. }
  1763. }
  1764. void UiFmPresetMenuCtrl(BYTE bKey) large
  1765. {
  1766. switch(bKey)
  1767. {
  1768. case KEY_RIGHT_BREAK:
  1769. UiFmSelectPrevNextMenuItem(FALSE);
  1770. break;
  1771. case KEY_LEFT_BREAK:
  1772. UiFmSelectPrevNextMenuItem(TRUE);
  1773. break;
  1774. case KEY_UP_BREAK:
  1775. gxbUiMenuMainStates=UI_SEL_PRESET_MENU;
  1776. UiReDrawFM();
  1777. switch(gxbUiMenuSubStates)
  1778. {
  1779. case UI_PRESET_DEL_PRESET_MENU:
  1780. //tne 2007/01/13 #2
  1781. #if(FM_MODULE!=2)  // modify by Rojam 2007-04-20 14:39
  1782. FMFadeOutVol(0,50); //WHH070310#1
  1783. #endif
  1784. UiFmRemovePreset(gxbFmPreset);
  1785. #if(FM_PRESET_PRESAVE) //Walace060714#1
  1786. SaveFmPresetSetting();
  1787. #endif
  1788. if(gxbFmMaxRecPreset==0) //All Removed
  1789. {
  1790. gxbErrCode=ERR_FM_NO_PRESET;
  1791. UiErrHandle();
  1792. gxbUiMenuMainStates=UI_NO_MENU;
  1793. UiShowPresetStateIcon();
  1794. }
  1795. else
  1796. {
  1797. UiFmSetFreqFromPreset();
  1798. }
  1799. #if(FM_MODULE!=2)  //modify by Rojam 2007-04-20 14:40
  1800. CdcSetPaGain(gxbVolume);
  1801. #endif
  1802. break;
  1803. case UI_NORMAL_SCAN_PRESET_MENU:
  1804. UiFmScanAndAddPreset();
  1805. break;
  1806. }
  1807. break;
  1808. case KEY_FUNC_BREAK:
  1809. gxbUiMenuMainStates=UI_SEL_PRESET_MENU;
  1810. UiReDrawFM();
  1811. break;
  1812. case KEY_FUNC_LONG:
  1813. UiFmSwapNextMode();
  1814. break;
  1815. }
  1816. }
  1817. void UiFmShowFmChNum(BYTE bNum,BYTE bCol,BYTE bRow, BYTE bType) large
  1818. {
  1819. if(bType)
  1820. {
  1821. OledShowIconNew(2,
  1822. IM_RADIO_CH_NUMBER_SELECT_0+(bNum/10)*(IM_RADIO_CH_NUMBER_SELECT_1-IM_RADIO_CH_NUMBER_SELECT_0),
  1823. bCol,bRow);
  1824. OledShowIconNew(2,
  1825. IM_RADIO_CH_NUMBER_SELECT_0+(bNum%10)*(IM_RADIO_CH_NUMBER_SELECT_1-IM_RADIO_CH_NUMBER_SELECT_0),
  1826. bCol+8,bRow);
  1827. }
  1828. else
  1829. {
  1830. OledShowIconNew(2,
  1831. IM_RADIO_CH_NUMBER_0+(bNum/10)*(IM_RADIO_CH_NUMBER_1-IM_RADIO_CH_NUMBER_0),
  1832. bCol,bRow);
  1833. OledShowIconNew(2,
  1834. IM_RADIO_CH_NUMBER_0+(bNum%10)*(IM_RADIO_CH_NUMBER_1-IM_RADIO_CH_NUMBER_0),
  1835. bCol+8,bRow);
  1836. }
  1837. }
  1838. //tne 2007/01/11 #1 end