led.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:16k
源码类别:

DVD

开发平台:

C/C++

  1. /****************************************************************************
  2. ** Notice: Copyright (c) 2007 Keybridge Co.Ltd. - All Rights Reserved
  3. **
  4. ** File Name: led.C
  5. **
  6. **
  7. **
  8. **
  9. ** Description:
  10. ** GPIO Driver source file.
  11. **
  12. ****************************************************************************/
  13. #include "stpio.h"
  14. #include "sti5105.h"
  15. #include "stddefs.h"
  16. #include "gendef.h"
  17. #include "rckeymap.h"
  18. #include "timeclk.h"
  19. #include "Sr_time.h"
  20. #include "led.h"
  21. #include "kb_machblue_client_task.h"
  22. static volatile unsigned int *PIO0_BASE = (volatile unsigned int *)0x20820000;
  23. static volatile unsigned int *PIO1_BASE = (volatile unsigned int *)0x20821000;
  24. static volatile unsigned int *PIO2_BASE = (volatile unsigned int *)0x20822000;
  25. static volatile unsigned int *PIO3_BASE = (volatile unsigned int *)0x20823000;
  26. #define PIO_OUT 0 
  27. #define PIO_OUT_SET (1 << 2)
  28. #define PIO_OUT_CLR (2 << 2)
  29. #define PIO_IN (4 << 2)
  30. #define PIO_BIT_0    1
  31. #define PIO_BIT_1    2
  32. #define PIO_BIT_2    4
  33. #define PIO_BIT_3    8
  34. #define PIO_BIT_4    16
  35. #define PIO_BIT_5    32
  36. #define PIO_BIT_6    64
  37. #define PIO_BIT_7    128
  38. #define PIO0(x, value)
  39. {
  40. if (value)
  41. PIO0_BASE[PIO_OUT_CLR] &= ~(1 << x);
  42. else
  43. PIO0_BASE[PIO_OUT_CLR] |= (1 << x);
  44. }
  45. #define PIO1(x, value)
  46. {
  47. if (value)
  48. PIO1_BASE[PIO_OUT_CLR] &= ~(1 << x);
  49. else
  50. PIO1_BASE[PIO_OUT_CLR] |= (1 << x);
  51. }
  52. #define PIO2(x, value)
  53. {
  54. if (value)
  55. PIO2_BASE[PIO_OUT_CLR] &= ~(1 << x);
  56. else
  57. PIO2_BASE[PIO_OUT_CLR] |=(1 << x);
  58. }
  59. #define PIO3(x, value)
  60. {
  61. if (value)
  62. PIO3_BASE[PIO_OUT_CLR] &= ~(1 << x);
  63. else
  64. PIO3_BASE[PIO_OUT_CLR] |= (1 << x);
  65. }
  66. #define FPIO_CLK(value) PIO2(7, value)
  67. #define FPIO_DATA(value) PIO0(1, value)
  68. #define FPIO_COM0(value) PIO2(2, value)
  69. #define FPIO_COM1(value) PIO2(3, value)
  70. #define FPIO_COM2(value) PIO2(5, value)
  71. #define FPIO_COM3(value) PIO2(6, value)
  72. #define FPIO_LOCK(value) PIO3(4, value)
  73. //#define FPIO_POWER(value)        PIO3(4, value)
  74. //#define FPIO_KYESCAN PIO_BIT_7
  75. //#define READ_KEY_BITS (*(PIO3_BASE + PIO_IN) & FPIO_KYESCAN)
  76. #define READ_KEY_BITS (*(PIO0_BASE + 4) & PIO_BIT_6)
  77. #define KEYBOARD_BOUNCE_SETTLE_TIME  (ST_GetClocksPerSecond()/ 10) /* 100 mSec */
  78. #define KEYBOARD_SCAN_LINE_SETTLE_TIME  (ST_GetClocksPerSecond() / 1000) /* 1 mSec */
  79. #define KEYBOARD_SCAN_FREQ 100 /*** 1000s/(5ms*100) = 2Hz ***/
  80. static UINT32 LED_TaskID;
  81. void FP_KeyCheck(void);
  82. //static char iLedData[4] = {0xBF, 0xBF, 0xBF, 0xBF};
  83. static char iLedData[4] = {0xC0, 0xC0, 0xC0, 0xC0};
  84. unsigned short KeyBuffer = 0;
  85. #define LED_DISP_CHAR_MAX 32
  86. T_LED_CODE LED_CODE[LED_DISP_CHAR_MAX] = 
  87. {
  88. {'M', 0xff}, /* 00 */  
  89. {'1', 0xF9}, /* 01 */  
  90. {'2', 0xA4}, /* 02 */  
  91. {'3', 0xB0}, /* 03 */  
  92. {'4', 0x99}, /* 04 */  
  93. {'5', 0x92}, /* 05 */  
  94. {'6', 0x82}, /* 06 */  
  95. {'7', 0xD8}, /* 07 */  
  96. {'8', 0x80}, /* 08 */  
  97. {'9', 0x90}, /* 09 */  
  98. {'0', 0xC0}, /* 10 */  
  99. {'A', 0x88}, /* 11 */  
  100. {'b', 0x83}, /* 12 */  
  101. {'C', 0xC6}, /* 13 */  
  102. {'c', 0xA7}, /* 14 */  
  103. {'d', 0xA1}, /* 15 */  
  104. {'E', 0x86}, /* 16 */  
  105. {'F', 0x8e}, /* 17 */  
  106. {'H', 0x89}, /* 18 */  
  107. {'h', 0x8B}, /* 19 */  
  108. {'J', 0xf0}, /* 20 */  
  109. {'L', 0xc7}, /* 21 */  
  110. {'n', 0xAB}, /* 22 */  
  111. {'O', 0xc0}, /* 23 */  
  112. {'o', 0xA3}, /* 24 */  
  113. {'P', 0x8C}, /* 25 */  
  114. {'q', 0x98}, /* 26 */ 
  115. {'r', 0xaf}, /* 27 */  
  116. {'t', 0x87}, /* 28 */  
  117. {'U', 0xc1}, /* 29 */  
  118. {'v', 0xE3}, /* 30 */  
  119. {'-', 0xBF} /* 31 */
  120. };
  121. void LED_PioComSet(UINT8 comNum, char value)
  122. {
  123. switch (comNum)
  124. {
  125. case 0:
  126. FPIO_COM0(value);
  127. break;
  128. case 1:
  129. FPIO_COM1(value);
  130. break;
  131. case 2:
  132. FPIO_COM2(value);
  133. break;
  134. case 3:
  135. FPIO_COM3(value);
  136. break;
  137. default:
  138. break;
  139. }
  140. }
  141. /*========================================================================= 
  142.  * PROTOTYPE :  
  143.  * void LED_LedGreen(int flag)
  144.  * 
  145.  * PURPOSE:
  146.  * on/of the green led
  147.  *==========================================================================*/
  148. void LED_LedGreen(int flag)
  149. {
  150. if (flag)
  151. {
  152. /* 亮*/
  153. FPIO_LOCK(1);
  154.      //PIO3_BASE[8]  |= 4; 
  155. }
  156. else
  157. {
  158. /* 灭*/
  159. FPIO_LOCK(0);
  160. //PIO3_BASE[8]  &= ~4;
  161. }
  162. }
  163. /*========================================================================= 
  164.  * PROTOTYPE :  
  165.  * void LED_DispDataSet(char *dispStr)
  166.  * 
  167.  * PURPOSE:
  168.  * get the ASC2 value.
  169.  *==========================================================================*/
  170. void LED_DispDataSet(char *dispStr)
  171. {
  172. unsigned char ucLEDData ;
  173. unsigned char i, iLedNo;
  174. for (iLedNo=0; iLedNo<4; iLedNo++)
  175. {
  176. ucLEDData = dispStr[iLedNo];
  177. i = 0;
  178. while (1)
  179. {
  180. if (LED_CODE[i].show_code == ucLEDData)
  181. {
  182. iLedData[iLedNo] = LED_CODE[i].led_code;
  183. break;
  184. }
  185. if (i++ >= LED_DISP_CHAR_MAX)
  186. {
  187. //printf("nr===the char not found:%d ,error!!!", ucLEDData);
  188. iLedData[iLedNo] = 0xff;
  189. break;
  190. }
  191. }
  192. }
  193. }
  194. /*========================================================================= 
  195.  * PROTOTYPE :  
  196.  * void LED_ShowNum(int i )
  197.  * 
  198.  * PURPOSE:
  199.  * Show Number
  200.  *==========================================================================*/
  201. void LED_ShowNum(int i)
  202. {
  203. char str[10];
  204. //str[3] = (i)%10;
  205. //str[2] = (i/10)%10;
  206. //str[1] = (i/100)%10;
  207. //str[0] = (i/1000)%10;
  208. memset(str, 0x00, 10);
  209. sprintf(str, "%d", i);
  210. LED_DispDataSet(str);
  211. }
  212. /*========================================================================= 
  213.  * PROTOTYPE :  
  214.  * void LED_ShowString(char *str)
  215.  * 
  216.  * PURPOSE:
  217.  * Show String
  218.  *==========================================================================*/
  219. void LED_ShowString(char *str)
  220. {
  221. LED_DispDataSet(str);
  222. }
  223. /*========================================================================= 
  224.  * PROTOTYPE :  
  225.  * void LED_ShowTime()
  226.  * 
  227.  * PURPOSE:
  228.  * Display system time
  229.  *==========================================================================*/
  230. void LED_ShowTime()
  231. {
  232. time_t  plTime;
  233. char out[8];
  234. char dispStr[4];
  235. U8 i;
  236. KB_TimeGetCurTime(&plTime);
  237. ConvertTimeStampToTimeString((U32)plTime, out);
  238. dispStr[0] = out[0];
  239. dispStr[1] = out[1];
  240. dispStr[2] = out[3];
  241. dispStr[3] = out[4];
  242. LED_DispDataSet(dispStr);
  243. for (i=0; i<4; i++)
  244. {
  245. iLedData[i] &= 0x7F;
  246. }
  247. }
  248. /*========================================================================= 
  249.  * PROTOTYPE :  
  250.  * void LEDProcess(void)
  251.  * 
  252.  * PURPOSE:
  253.  * Led driver & display process
  254.  *==========================================================================*/
  255. #if 1//ndef IO_USE_API
  256. void LEDProcess(void)
  257. {
  258. static U8 DigitSelected = 0;
  259. static U8 oldDigitSelected = 0;
  260. static U16 LedDotShineCount = 0;
  261. static U8 LedDotFlag = 0;
  262. U8 i=0;
  263. U8 ledCode;
  264. #if 1
  265. ledCode = iLedData[DigitSelected];
  266. if((ledCode & 0x80) == 0) /* disp. time */
  267. {
  268. LedDotShineCount++;
  269. if(LedDotShineCount == 250)
  270. {
  271. LedDotShineCount = 0;
  272. LedDotFlag = 1-LedDotFlag;
  273. }
  274. }
  275. if (LedDotFlag)
  276. {
  277. ledCode |= 0x80;
  278. }
  279. /* 1. clear the led display */
  280. LED_PioComSet(oldDigitSelected, 0);
  281. if (ledCode != 0xff)
  282. {
  283. /* 2. send the data to segment */
  284. FPIO_CLK(1);
  285. for (i=0; i<8; i++)
  286. {
  287. if (((0x80>>i) & ledCode) != 0)
  288. {
  289. FPIO_DATA(1);
  290. FPIO_CLK(0);
  291. FPIO_CLK(1);
  292. }
  293. else
  294. {
  295. FPIO_DATA(0);
  296. FPIO_CLK(0);
  297. FPIO_CLK(1);
  298. }
  299. task_delay(1); /* Very important here, can't be deleted */
  300. }
  301. /* 3. Display it */
  302. LED_PioComSet(DigitSelected, 1);
  303. }
  304. oldDigitSelected = DigitSelected;
  305. if (++DigitSelected > 3)
  306. {
  307. DigitSelected = 0 ;
  308. }
  309. #else
  310. /*1. clear all the led display*/
  311. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_2; 
  312. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_3; 
  313. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_5; 
  314. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_6; 
  315. if (++ucLEDNo > 3)
  316. {
  317. ucLEDNo = 0 ;
  318. }
  319. ucLEDData = LED_font[iLedData[ucLEDNo]] ;
  320. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_7; 
  321. for(i=0;i<8;i++)
  322. {
  323. if(((test_value>>i)&ucLEDData)!=0)
  324. {
  325. PIO0_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_1; 
  326. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_7; 
  327. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_7; 
  328. }
  329. else
  330. {
  331. PIO0_BASE[PIO_OUT_CLR]  |= PIO_BIT_1; 
  332.              PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_7; 
  333.              PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_7; 
  334. }
  335. task_delay(1);
  336. }
  337. /*3.Display it*/
  338. switch (ucLEDNo)
  339. {
  340. case 0:
  341. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_2; 
  342. break;
  343. case 1:
  344. PIO2_BASE[PIO_OUT_CLR]  &= ~ PIO_BIT_3; 
  345. break;
  346. case 2:
  347. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_5; 
  348. break;
  349. case 3:
  350. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_6; 
  351. break;
  352. }
  353. #endif
  354. }
  355. #else
  356. STPIO_Handle_t   PIO0Handle = (STPIO_Handle_t)NULL ; /*PIO0Handle STPCM_ResetCIchip*/
  357. STPIO_Handle_t     PIO1Handle = (STPIO_Handle_t)NULL ; /*Flash Protect*/
  358. STPIO_Handle_t     PIO3Handle = (STPIO_Handle_t)NULL ; /*Led data and clock*/
  359. STPIO_Handle_t     PIO2Handle = (STPIO_Handle_t)NULL ; /*Led data and clock*/
  360. STPIO_Handle_t     PIO4Handle = (STPIO_Handle_t)NULL ; /*led select bit,Diseqc,LNB Over,LNB On/Off,H/V*/
  361. STPIO_Handle_t     PIO5Handle = (STPIO_Handle_t)NULL ; /*led select bit,Diseqc,LNB Over,LNB On/Off,H/V*/
  362. void LEDProcess(void)
  363. {
  364. ST_ErrorCode_t   error ;
  365. static BYTE      ucLEDNo = 1 ;
  366. BYTE             ucLEDData ;
  367. int              iLED_Bit_Count ;
  368. const unsigned char LED_font [ 39 ] =
  369. 0x18, 0xdb, 0x2a, 0x4a, 0xc9,
  370. 0x4c, 0x0c, 0xda, 0x08, 0x48,
  371. 0xa8, 0xef, 0x7f, 0xff,
  372. 0xef,0xad,0x2c,0x8f,0x0b,0x09,0x88,0xbc,0xac,
  373. 0xfe,  0xef, 0x7f, 0xbd, 0xdb, 0xf7, 
  374. 0x18&0xf7, 0xdb&0xf7, 0x2a&0xf7, 0x4a&0xf7, 0xc9&0xf7,
  375. 0x4c&0xf7, 0x0c&0xf7, 0xda&0xf7, 0x08&0xf7, 0x48&0xf7,
  376. };
  377. error =  STPIO_Set(PIO3Handle, PIO_BIT_2);
  378. printf("STPIO_Set========n");
  379. task_delay(30000000);
  380. STPIO_Clear( PIO3Handle, PIO_BIT_2);
  381. #if 0
  382. /*1. clear all the led display*/
  383. error =  STPIO_Set( PIO4Handle, FP_SELECT0 );
  384. error |= STPIO_Set( PIO4Handle, FP_SELECT1 );
  385. error |= STPIO_Set( PIO4Handle, FP_SELECT2 );
  386. error |= STPIO_Set( PIO4Handle, FP_SELECT3 );
  387. if ( error != ST_NO_ERROR )
  388. {
  389. STTBX_Print(("STPIO_Set errorn"));
  390. }
  391. if( ++ucLEDNo > 3 )
  392. ucLEDNo = 0 ;
  393. ucLEDData = LED_font[ iLedData[ ucLEDNo ] ] ;
  394. for(iLED_Bit_Count = 8;iLED_Bit_Count > 0;iLED_Bit_Count--) 
  395. {
  396. error  =  STPIO_Set( PIO2Handle, FP_DATA );
  397. error |=  STPIO_Set( PIO2Handle, FP_CLK );
  398. error |=  STPIO_Clear(PIO2Handle, FP_CLK );
  399. }
  400. for( iLED_Bit_Count = 8; iLED_Bit_Count > 0; iLED_Bit_Count--)
  401. {
  402. if ( ucLEDData & 0x80 )
  403. error =  STPIO_Set( PIO2Handle, FP_DATA );
  404. else
  405. error =  STPIO_Clear(PIO2Handle, FP_DATA );
  406. error  =  STPIO_Set( PIO2Handle,  FP_CLK );
  407. error |=  STPIO_Clear(PIO2Handle, FP_CLK );
  408. ucLEDData <<= 1;
  409. }
  410. /*3.Display it*/
  411. switch ( ucLEDNo )
  412. {
  413. case 0:
  414. error =  STPIO_Clear( PIO4Handle, FP_SELECT2 );
  415. break;
  416. case 1:
  417. error =  STPIO_Clear( PIO4Handle, FP_SELECT0 );
  418. break;
  419. case 2:
  420. error =  STPIO_Clear( PIO4Handle, FP_SELECT1 );
  421. break;
  422. case 3:
  423. error =  STPIO_Clear( PIO4Handle, FP_SELECT3 );
  424. break;
  425. }
  426. #endif
  427. }
  428. void SEGInit(void)
  429. {
  430. ST_ErrorCode_t        error;
  431. STPIO_OpenParams_t OpenParams;
  432. OpenParams.ReservedBits = PIO_BIT_2; 
  433. OpenParams.BitConfigure[2] = STPIO_BIT_OUTPUT; 
  434. OpenParams.IntHandler = NULL;
  435.    error = STPIO_Open("PIO3", &OpenParams, &PIO3Handle) ;
  436.    if ( error != ST_NO_ERROR )
  437.    {
  438.    printf("ERROR: SEGInitn");
  439.    }
  440.   
  441. }
  442. #endif
  443. #if 0 //WT, test pio STAPI
  444. #define PIO_NUM              3       /*PIO3 */
  445. #define PIO_BIT                 PIO_BIT_2        /*pin 2 */
  446. #define PIO_TYPE             STPIO_BIT_OUTPUT
  447. extern ST_DeviceName_t PIO_DeviceName[] ;
  448. static ST_ErrorCode_t PIO_TestHL(void)
  449. {
  450. ST_ErrorCode_t error;
  451. static STPIO_Handle_t TnrResetHandle;
  452. STPIO_OpenParams_t OpenParams;
  453. ///ST_DeviceName_t PIO_DeviceName[] = {"PIO0","PIO1","PIO2","PIO3"};
  454. static int init_flag=0;
  455. if (init_flag == 0)
  456. {
  457. OpenParams.ReservedBits = PIO_BIT;
  458. OpenParams.BitConfigure[3] = PIO_TYPE;
  459. OpenParams.IntHandler = NULL;
  460. error = STPIO_Open(PIO_DeviceName[PIO_NUM], &OpenParams, &TnrResetHandle);
  461. if(error != ST_NO_ERROR)
  462. {
  463. STTBX_Print(("Error!! STPIO_Open: %dn", (error)));
  464. return error;
  465. }
  466. init_flag = 1;
  467.          }
  468. printf("nr Green led  PIO_TestHL  nr");
  469. STPIO_Clear(TnrResetHandle, PIO_BIT);
  470. task_delay(10000);
  471. task_delay(10000000);
  472. STPIO_Set(TnrResetHandle, PIO_BIT);
  473. task_delay(10000);
  474. task_delay(10000000);
  475.  
  476.          return ST_NO_ERROR;
  477. }
  478. #endif
  479. void LED_TEST_SegdispProcess (void)
  480. {
  481. #if 0//test green led
  482. Led_Green(1);
  483. task_delay(30000000);
  484. Led_Green(0);
  485. task_delay(30000000);
  486. #endif 
  487. printf("-2x-xx----n");
  488. #if 0
  489. //pio_init_led();
  490. while (1)
  491. {
  492. pio_SetORClear(1);
  493. task_delay(ST_GetClocksPerSecond()/460);
  494. pio_SetORClear(0);
  495. task_delay(ST_GetClocksPerSecond()/460);
  496. }
  497. #endif
  498. while(1)
  499. {
  500. #if 1
  501. PIO3_BASE[PIO_OUT_CLR]  |= PIO_BIT_4; 
  502. PIO3_BASE[PIO_OUT_CLR]  |= PIO_BIT_3; 
  503. PIO3_BASE[PIO_OUT_CLR]  |= PIO_BIT_2; 
  504. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_5; 
  505. PIO0_BASE[PIO_OUT_CLR]  |= PIO_BIT_1; 
  506. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_6; 
  507. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_7; 
  508. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_2; 
  509. PIO2_BASE[PIO_OUT_CLR]  |= PIO_BIT_3; 
  510. //printf("-x-xx----n");
  511. task_delay(ST_GetClocksPerSecond()/460);
  512. PIO3_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_4; 
  513. PIO3_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_3;  
  514. PIO3_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_2; 
  515. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_5; 
  516. PIO0_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_1; 
  517. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_6; 
  518. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_7; 
  519. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_2; 
  520. PIO2_BASE[PIO_OUT_CLR]  &= ~PIO_BIT_3; 
  521. task_delay(ST_GetClocksPerSecond()/460);
  522. #else
  523. LEDProcess(); 
  524. //printf("-1x-xx----n");
  525. //task_delay(500);
  526. //wt_test();
  527. #endif
  528. task_delay(ST_GetClocksPerSecond()/460);
  529. //printf("-x-----n");
  530. }
  531. }
  532. /*========================================================================= 
  533.  * PROTOTYPE :  
  534.  * static void LED_SegmentProcess(void)
  535.  * 
  536.  * PURPOSE:
  537.  * Led task created
  538.  *==========================================================================*/
  539. static void LED_SegmentProcess(void)
  540. {
  541. U8 fKeyCheck;
  542. LED_LedGreen(1);
  543. while (1) 
  544. {
  545. if(fKeyCheck++ >= 100)
  546. {
  547. fKeyCheck = 0;
  548. FP_KeyCheck();
  549. task_delay(10);
  550. }
  551. LEDProcess(); 
  552. task_delay(ST_GetClocksPerSecond()/300);
  553. }
  554. }
  555. /*========================================================================= 
  556.  * PROTOTYPE :  
  557.  * void LED_Init(void)
  558.  * 
  559.  * PURPOSE:
  560.  * Led init
  561.  *==========================================================================*/
  562. void LED_Init(void)
  563. {
  564.     //setup_pio();
  565.     KB_OSPTaskInit("LED", 1024, (void (*)(void*))LED_SegmentProcess, MENU_PRIORITY, NULL, &LED_TaskID);
  566. }
  567. /*========================================================================= 
  568.  * PROTOTYPE :  
  569.  * void FP_KeyCheck(void)
  570.  * 
  571.  * PURPOSE:
  572.  * Front panel key check
  573.  *==========================================================================*/
  574. void FP_KeyCheck(void)
  575. {
  576. unsigned char i, j;
  577. unsigned char fp_key_data[7] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF};
  578. unsigned char Key_Value;
  579. BYTE ucKeyRead;
  580. for (j = 0; j < 7; j++)
  581. {
  582. FPIO_CLK(1);
  583. for (i = 0; i < 8; i++)
  584. {
  585. if (((0x80 >> i) & fp_key_data[j]) != 0)
  586. {
  587. FPIO_DATA(1);
  588. FPIO_CLK(0);
  589. FPIO_CLK(1);
  590. }
  591. else
  592. {
  593. FPIO_DATA(0);
  594. FPIO_CLK(0);
  595. FPIO_CLK(1);
  596. }
  597. task_delay(1);
  598. }
  599. Key_Value = READ_KEY_BITS;
  600. if (Key_Value == 0)
  601. {
  602. switch (j)
  603. {
  604. case 0:
  605. ucKeyRead = rc_KeyRight;
  606. break;
  607. case 1:
  608. ucKeyRead = rc_KeyDown;
  609. break;
  610. case 2:
  611. ucKeyRead = rc_KeyLeft;
  612. break;
  613. case 3:
  614. ucKeyRead = rc_KeyUp;
  615. break;
  616. case 4:
  617. ucKeyRead = rc_KeyMenu;
  618. break;
  619. case 5:
  620. ucKeyRead = rc_KeyOK;
  621. break;
  622. case 6:
  623. ucKeyRead = rc_KeyPower;
  624. break;   
  625. }  /* END SWITCH */
  626. {
  627. KB_OSPMsgNode movie_msg;
  628. movie_msg.Word1=KB_MOVIE_KEY_REQUEST;
  629. movie_msg.Word2=ucKeyRead;
  630. kb_machblue_task_post(&movie_msg);
  631. }
  632. }
  633. }
  634. }