vfd_drv_nec16312.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:23k
源码类别:

DVD

开发平台:

C/C++

  1. /*
  2. history:
  3. 2004-7-19 14:43
  4.          wanghaoying move the following functions for nec16312 here
  5. 2004-7-7 14:25  
  6.         lijd
  7.         Process 16312sw use for:
  8.         1. extern pannel key
  9.         2. volume button 
  10.         note: need define NEC16312SW in cust_def.h
  11. */
  12. /*
  13. ** FUNCTION
  14. ** reset_vfd
  15. **
  16. ** DESCRIPTION
  17. ** setup VFD.  Should only called at power-up or emergency.
  18. */
  19. void reset_vfd(void)
  20. {
  21. UINT16 nIndex = 0;
  22. init_vfd_clear();
  23. /* display mode ? 13d15s or 6d16s add by chichang 2001/6/6 */
  24. #ifndef TEST_VFD //shawn modify at 910131
  25. regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | VFD_DISPLAY_MODE; //2001/10/23
  26. #else
  27. regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | COMMAND_MODE; //2002/01/31
  28. #endif
  29. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  30. (FUN_VFD_WRITE | VFD_DAT_LEN0);
  31. //erase_vfd_mem();
  32. WaitIopFunRdy(IOP_RDY_WAIT);
  33. #ifdef USE_VFD_LED_POWER
  34.     #if defined(USE_VFD_LED_POWER_LOW)&&!defined(VFD_SHOW_LOAD_TOGGLE)
  35. write_vfd_led(0x0f);
  36.     #elif defined(PROVIEW_DV_509)
  37. write_vfd_led(4);
  38.     #else
  39.     write_vfd_led(0);
  40.     #endif
  41. #endif
  42. #ifdef TONIC_DVD//20040206
  43. write_vfd_led(0);
  44. #endif//TONIC_DVD
  45. vfd_set_idle_state(nIndex);
  46. WaitIopFunRdy(IOP_RDY_WAIT);
  47. }
  48. //
  49. //    LED: 
  50. //
  51. //    MSB   LSB
  52. //    ---- 0000  turn on all led
  53. //    ---- 1111  turn off all led
  54. //
  55. void write_vfd_led(UINT8 led_id)
  56. {
  57. regs0->iop_data[VFD_CMD] = 0x41;
  58. regs0->iop_data[VFD_DAT0] = 0xff00 | led_id;
  59. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN1);
  60. WaitIopFunRdy(IOP_RDY_WAIT);
  61. }
  62. #ifdef NEC16312SW
  63. #define USE_16312SW_EXTEND_KEY
  64. //#define USE_16312SW_VOLUME_BUTTON
  65. #ifdef  USE_16312SW_EXTEND_KEY
  66. #define SW_KEY1     31
  67. #define SW_KEY2     35
  68. #endif
  69. #ifdef USE_16312SW_VOLUME_BUTTON
  70.     #define VFD_SW_SPEED 3
  71. #endif
  72. void polling_vfdsw(void)
  73. {
  74. #ifdef  USE_16312SW_EXTEND_KEY   
  75.     BYTE key_datasw;
  76. #ifdef THAKRAL_USE_SW_KEY
  77. static BYTE flag=0;
  78. static BYTE pre_key_datasw;
  79.     key_datasw= (BYTE)regs0->iop_data[7];
  80. //    psprintf(RegionValStr[REGION1], "KEY %02x ", key_datasw);
  81. //    PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  82.     
  83.     #ifdef VFD_KEY_TEST
  84.     if(key_datasw != 0xF0)
  85.     {
  86.         key_datasw>>=4;
  87.         key_datasw+=24;
  88.         {
  89.   printf("data=%dn",key_datasw);
  90.   psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_datasw,
  91.   vfd_keycode[key_datasw - 1]);
  92.   PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  93.         }
  94.         regs0->iop_data[7] = 0xF0;            
  95.      } 
  96.     #endif
  97.     
  98.     if(key_datasw != 0xf0)
  99.     {
  100.         pre_key_datasw = key_datasw;
  101.         flag = 1;
  102.     }
  103.     
  104.     if((key_datasw==0xf0)&&(flag==1))
  105.     {
  106.         flag = 0;
  107.         //pre_key_datasw>>=4;
  108.         //pre_key_datasw+=24;
  109.         save_srn_start_t = get_rtc_val();
  110.         
  111.         #if defined(SW1_POWER)
  112.         if(pre_key_datasw==0x70)
  113.             call_ir_func(IRC_POWER);
  114.         else if(pre_key_datasw==0xb0)
  115.             call_ir_func(IRC_EJECT);
  116.         #elif defined(SW4_POWER)
  117.         if(pre_key_datasw==0x70)
  118.             call_ir_func(IRC_ONLY_PAUSE);
  119.         else if(pre_key_datasw==0xb0)
  120.             call_ir_func(IRC_PLAY_RESUME);
  121.         else if(pre_key_datasw==0xd0)
  122.             call_ir_func(IRC_STOP);
  123.         else if(pre_key_datasw==0xe0)
  124.             call_ir_func(IRC_POWER);
  125.         #else
  126.         call_ir_func(vfd_keycode[key_datasw-1]);
  127.         #endif 
  128. //        pre_key_datasw = key_datasw;
  129.     }
  130.     
  131. // if((key_datasw&0x80)==0)
  132. //    { 
  133. // flag=1;
  134. // }
  135. // if(((key_datasw&0x80)==0x80)&&(flag==1))
  136. // {
  137. // flag=0;
  138. // //call_ir_func(vfd_keycode[key_datasw - 1]);
  139. // call_ir_func(IRC_POWER);
  140. // }
  141. #else
  142.     key_datasw= (BYTE)regs0->iop_data[7];
  143.     
  144.     if(key_datasw != 0xF0)
  145.     {
  146.         key_datasw>>=4;
  147.         key_datasw+=24;
  148. #ifdef FUSS_SW
  149.         if( (key_datasw == SW_KEY1) || (key_datasw == SW_KEY2) )
  150.     #endif
  151.         {
  152.     #ifdef VFD_KEY_TEST
  153.   printf("data=%dn",key_datasw);
  154.   psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_datasw,
  155.   vfd_keycode[key_datasw - 1]);
  156.   PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  157.     #else
  158.   save_srn_start_t = get_rtc_val();
  159.   call_ir_func(vfd_keycode[key_datasw - 1]);
  160.     #endif
  161.         }
  162.         regs0->iop_data[7] = 0xF0;            
  163.      } 
  164. #endif    //#ifdef THAKRAL_USE_SW_KEY
  165. #endif    //#ifdef  USE_16312SW_EXTEND_KEY   
  166. #ifdef USE_16312SW_VOLUME_BUTTON
  167.     BYTE key_datasw;
  168.     static BYTE prev = 0;
  169.     BYTE updown = 0;
  170.     static BYTE up_cnt = 0;
  171.     static BYTE down_cnt = 0;
  172.     
  173.     key_datasw= (BYTE)regs0->iop_data[7];  
  174.     
  175.     if(prev != key_datasw)
  176.     {
  177.     
  178.         switch(prev)
  179.         {
  180.         case 0x00:
  181.             if (key_datasw == 0x80)
  182.                 updown = 2;    
  183.             else if(key_datasw == 0x40)
  184.                 updown = 1;    
  185.             break;
  186.     
  187.         case 0x80:
  188.             if(key_datasw == 0xc0)
  189.                 updown = 2;
  190.             else if (key_datasw == 0x00)
  191.                 updown = 1;    
  192.             break;
  193.         
  194.         case 0xc0:
  195.             if(key_datasw == 0x40)
  196.                 updown = 2;
  197.             else if (key_datasw == 0x80)
  198.                 updown = 1;    
  199.             break;
  200.         
  201.         case 0x40: 
  202.             if(key_datasw == 0x00)
  203.                 updown = 2;
  204.             else if (key_datasw == 0xc0)
  205.                 updown = 1;    
  206.             break;   
  207.        
  208.        default:
  209.             updown = 0;
  210.             break;     
  211.         }
  212.         
  213.         if(updown == 1)
  214.         {
  215.             down_cnt++;
  216.             up_cnt = 0;     
  217.             if(down_cnt >VFD_SW_SPEED )
  218.             {
  219.                 down_cnt = 0;               
  220.                 ircmd_volume_up();   
  221.             }
  222.         }
  223.         
  224.         if(updown == 2)
  225.         {
  226.             up_cnt++;
  227.             down_cnt = 0;    
  228.             if(up_cnt >VFD_SW_SPEED )
  229.             {
  230.                 up_cnt = 0;               
  231.                 ircmd_volume_down(); 
  232.             }
  233.     
  234.         }
  235.         prev = key_datasw;  
  236.     }
  237. #endif      //#ifdef USE_16312SW_VOLUME_BUTTON
  238. }
  239. #endif      //#ifdef NEC16312SW
  240. /*
  241. ** FUNCTION
  242. ** polling_vfdr
  243. **
  244. ** DESCRIPTION
  245. ** check if polling-ready
  246. */
  247. #ifdef QISHENG_DVD
  248. int standby_cnt=0;
  249. #endif 
  250. #ifdef AUTO_INTO_STANDBY    //oujx for tonic dvd//20040206
  251. int auto_standby_timer=0;
  252. #endif
  253. #ifdef SUPPORT_GPIO_P_SCAN
  254. BYTE PscanPortStatus=0;
  255. BYTE PscanStatus=0;
  256. BYTE PscanCount=0;
  257. #endif
  258. #if defined(TWO_FUN_IN_ONE_VFD_KEY) || defined(TWO_FUNC_IN_LEFT_RIGHT_KEY)//xyy add for Oritron 2004-11-10 
  259. BYTE num_add_flag = 0;
  260. BYTE command_flag = 1;
  261. #endif
  262. void polling_vfdr(void)  //nec16321 type vfd
  263. {
  264.     
  265. #ifdef SUPPORT_SPI_QSI
  266.   //not use
  267. #endif
  268. #ifndef  SUPPORT_SPI_QSI
  269.   
  270.     
  271. #ifdef SUPPORT_VFD
  272. UINT8   i;
  273. UINT32  temp;
  274. UINT32  key_data;
  275. static UINT8 count = 0;
  276. static UINT32 key_previ = 0;
  277. static BYTE bWriteState=0;
  278. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  279. static UINT32 key_previ_temp = 0;
  280. static UINT16 key_press_time_count = 0;
  281. #endif //TWO_FUN_IN_ONE_VFD_KEY
  282. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY//xyy add for Oritron 2004-11-10
  283. static UINT32 uPrevKey = 0;
  284. static UINT16 uTimeCount = 0;
  285. #endif
  286.     #ifdef KENLOON_PANEL3
  287. write_vfd_led(0xe);
  288. #endif
  289. #if defined(SUPPORT_VFD_SHOW_P_SCAN)&&defined(TONIC_DVD)//20040206
  290. if(vfd_intr_timer)
  291.     vfd_intr_timer--;
  292. #endif
  293. UINT32 *VfdReadData;
  294. #ifdef  SUPPORT_SPI
  295.     return;
  296. #endif
  297.     #ifdef SUPPORT_GPIO_P_SCAN    //oujx for tonic only
  298.     if(full_scrn==0&&(system_state==SYSTEM_READ_TITLE||system_state==SYSTEM_SETUP_BROWSER||system_state==SYSTEM_BROWSE||system_state==SYSTEM_OPEN||play_state==VCD_STATE_STOP||system_state==SYSTEM_NODISC))
  299.     {
  300.      if(PscanStatus==0)
  301.      {
  302.     
  303.      if(GPIO_I_GET(36)==0)
  304.          PscanPortStatus=0;
  305.      else
  306.          PscanPortStatus=1;
  307.          
  308.      PscanCount=0;
  309.      PscanStatus=1;
  310.      }
  311.      else
  312.      if(PscanStatus==1)
  313.      {
  314.      PscanCount++;
  315.      if(PscanCount>50)
  316.      {
  317.      if(GPIO_I_GET(36)==PscanPortStatus)
  318.      {
  319.      if(PscanPortStatus==0)
  320.                  ircmd_p_scan_only();
  321.              else
  322.                  ircmd_yuv_only();
  323.     
  324.              }
  325.      PscanStatus=0;
  326.      }
  327.      }
  328.     }
  329. #endif//#ifdef SUPPORT_GPIO_P_SCAN    //oujx for tonic only
  330. if(regs0->iop_data[0] & FUN_MASK)
  331. return;
  332.        
  333. if(vfd_state == VFD_READ)
  334. {
  335. #ifndef USE_C_IOP//2004-2-12 12:08 lijd
  336. //update_vfd_data();//nono 2003-7-24 0:41 mark
  337. #ifdef  SUPPORT_RECEIVER  //huziqin 2004-4-27
  338. VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));
  339. #elif defined( SPHE8202)
  340. VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));//for 8202 2004-3-31 16:47 lijd
  341. #elif defined(XINGQIU_RECEIVER_PANNEL)
  342. VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));
  343. #else
  344. VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x5b8)); //gerry,2004-3-24 12:53
  345. #endif
  346. //current is read 3 byte on io
  347. key_data = *VfdReadData & 0x00ffffff;
  348. *VfdReadData = 0; // Robert 030313
  349. #else//USE_C_IOP
  350. key_data =(regs0->iop_data[3]);
  351. #endif//USE_C_IOP
  352. if(key_data == 0xffffff)
  353. return;
  354.         #ifdef USE_VFD_LED_TO_KEY_SOUND_INDICATE //gerry for PANDA6950,3-8-23 17:17
  355. write_vfd_led(0xf);
  356.         #elif defined(USE_VFD_LED_TO_KEY_SOUND_INDICATE_HI_ON) //NONO 2003-10-15 16:14
  357. write_vfd_led(0x0);
  358.         #endif
  359. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  360. if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_NEXT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_PREV))
  361. {
  362. key_press_time_count++;
  363.     printf("key_press_time_count= %d n",key_press_time_count);   
  364. }
  365.     
  366. if(key_press_time_count>=15)
  367. {
  368. if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_NEXT)
  369. {
  370. call_ir_func(IRC_VFD_NEXT);
  371.     key_press_time_count=0;
  372.     num_add_flag = 1;
  373. }
  374. else if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_PREV)
  375. {
  376. call_ir_func(IRC_VFD_PREV);
  377.     key_press_time_count=0;
  378.     num_add_flag = 1;
  379. }
  380. }
  381. #endif //TWO_FUN_IN_ONE_VFD_KEY 
  382. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY//xyy add for Oritron 2004-11-10
  383. if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_LEFT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_RIGHT))
  384. {
  385. uTimeCount++;
  386.     printf("uTimeCount= %d n",uTimeCount);   
  387. }
  388.     
  389. if(uTimeCount>=20)
  390. {
  391. if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_LEFT)
  392. {
  393. call_ir_func(IRC_VFD_LEFT);
  394.     uTimeCount=0;
  395.     num_add_flag = 1;
  396. }
  397. else if(vfd_keycode[keycode_to_num(key_data)-1]==IRC_RIGHT)
  398. {
  399. call_ir_func(IRC_VFD_RIGHT);
  400.     uTimeCount=0;
  401.     num_add_flag = 1;
  402. }
  403. }
  404. #endif
  405. if(key_data != key_previ)
  406. {
  407. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  408.             //num_add_flag = 0;   //dingzhy 
  409. key_previ_temp = key_previ;
  410. #endif //TWO_FUN_IN_ONE_VFD_KEY
  411. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY  //xyy add for Oritron 2004-11-10
  412. uPrevKey = key_previ;
  413. #endif
  414. key_previ = key_data;
  415. if(key_data != 0)
  416. {
  417. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  418. //key_press_time_count=0;
  419. if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_NEXT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_PREV))
  420.         {
  421.             key_press_time_count++;
  422.         }
  423. #endif //TWO_FUN_IN_ONE_VFD_KEY
  424. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY //xyy add for Oritron 2004-11-10
  425. if((vfd_keycode[keycode_to_num(key_data)-1]==IRC_LEFT)||(vfd_keycode[keycode_to_num(key_data)-1]==IRC_RIGHT))
  426. {
  427. uTimeCount++;
  428. }
  429. #endif
  430. #ifdef XINGQIU_RECEIVER_PANNEL
  431. if(key_data == 0x111111)     //xulf 2004-3-9
  432. return;
  433. key_data -= 0x111111;  
  434. #endif
  435. for(i = 0; i < 24; i++)
  436. {
  437. temp = 0x01 << i;
  438. if(key_data & temp)
  439. {
  440. if (key_data > temp) // Robert 030224 for preventing illegal key_data
  441. {
  442. key_data = 0;
  443. return;
  444. }
  445. else
  446. {
  447. key_data = i + 1;
  448. break;
  449. }
  450. }
  451. }
  452. save_srn_start_t = get_rtc_val();
  453. #if defined(TONIC_DVD)//20040206
  454. if(KeyLockStatus==1)
  455. {
  456. extern const char *const KeyLockString[4][10];
  457.      //psprintf(RegionValStr[REGION1],"KEY LOCK ON");
  458.     
  459.      //PrintOsdMsg(STR_OS_SPACE,REGION1,1,1);
  460.      psprintf(RegionValStr[REGION1],KeyLockString[osd_font_mode][0]);
  461.      PrintOsdMsg(STR_OS_SPACE,REGION1,1,1);
  462.      vfd_state = VFD_WRITE;
  463.      return;
  464. }
  465. #endif//defined(TONIC_DVD)
  466. #ifdef VFD_KEY_TEST
  467. psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_data,vfd_keycode[key_data - 1]);
  468. PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  469. #else
  470. if((Is_JPEG_SlideMode()) && (vfd_keycode[key_data - 1] == IRC_PAUSE))
  471. {
  472. //Jeff 20020523
  473. bJpgVFDPause = 1;
  474. }
  475. else if((Is_JPEG_SlideMode()) &&
  476. ((vfd_keycode[key_data - 1] == IRC_PLAY) ||
  477. (vfd_keycode[key_data - 1] == IRC_PLAY_SELECT) ||
  478. (vfd_keycode[key_data - 1] == IRC_PLAY_RESUME)))
  479. {
  480. //bJpgVFDPause=0;
  481. bJpgVFDPause = 2; //Jeff 20020525
  482. PrintOsdMsg(STR_OS_PLAY,REGION1,1,0);//nono 20030804
  483. ircmd_play();//nono 20031210
  484. }
  485. else if((Is_JPEG_SlideMode()) && //Jeff 20020527
  486. (vfd_keycode[key_data - 1] == IRC_PAUSEPLAY))
  487. {
  488. if(bJpgVFDPause == 0)
  489. {
  490. //bJpgVFDPause = 1;
  491. if(play_state == VCD_STATE_PAUSE) //nono 2-6-28 14:00
  492. //bJpgVFDPause = 2;
  493. {
  494. bJpgVFDPause = 2;
  495. PrintOsdMsg(STR_OS_PLAY,REGION1,1,0);//nono 20030804
  496. ircmd_play();//nono 20031210
  497. }
  498. else
  499. bJpgVFDPause = 1;
  500. }
  501. else if(bJpgVFDPause == 1)
  502. {
  503. bJpgVFDPause = 2;
  504. }
  505. }
  506. else if(key_data<40)
  507. {
  508. extern UINT8 power_on;
  509. #ifdef QISHENG_DVD
  510.             standby_cnt=0;
  511.                     if((vfd_keycode[key_data - 1])==IRC_STOP)
  512.                      standby_cnt=1;
  513. #endif//#ifdef QISHENG_DVD
  514. #ifdef NEXT_FORWARD_IN_A_KEY
  515. key_data_flag = 1;
  516. #endif//#ifdef NEXT_FORWARD_IN_A_KEY
  517. if(power_on == 2) //2-6-18 13:36 to avoid accepting a VFD_key in the beginning. 
  518. {
  519. power_on--;
  520. if(key_data != 1)
  521. {
  522. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  523.                             if((vfd_keycode[key_data-1]!=IRC_NEXT) && (vfd_keycode[key_data-1]!=IRC_PREV))
  524. #endif //TWO_FUN_IN_ONE_VFD_KEY
  525. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY //xyy add for Oritron 2004-11-10
  526.                             if((vfd_keycode[key_data-1]!=IRC_LEFT) && (vfd_keycode[key_data-1]!=IRC_RIGHT))
  527. #endif
  528. //save_srn_start_t = get_rtc_val();//axel moved to top 2004/2/4 06:13PM
  529. call_ir_func(vfd_keycode[key_data - 1]);
  530. }
  531. }
  532. else
  533. {
  534. //save_srn_start_t = get_rtc_val(); //axel moved to top 2004/2/4 06:13PM
  535.                         #ifdef USE_VFD_LED_TO_KEY_SOUND_INDICATE //gerry for PANDA6950,3-8-23 17:19
  536. write_vfd_led(0);
  537.                         #elif defined(USE_VFD_LED_TO_KEY_SOUND_INDICATE_HI_ON) //NONO 2003-10-15 16:14
  538. write_vfd_led(0xf);
  539.                         #endif
  540. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  541.                         if((vfd_keycode[key_data-1]!=IRC_NEXT) && (vfd_keycode[key_data-1]!=IRC_PREV))
  542. #endif //TWO_FUN_IN_ONE_VFD_KEY
  543. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY //xyy add for Oritron 2004-11-10
  544.                             if((vfd_keycode[key_data-1]!=IRC_LEFT) && (vfd_keycode[key_data-1]!=IRC_RIGHT))
  545. #endif
  546. call_ir_func(vfd_keycode[key_data - 1]);
  547. }
  548. #ifdef NEXT_FORWARD_IN_A_KEY
  549. key_data_flag = 0;
  550. #endif//#ifdef NEXT_FORWARD_IN_A_KEY
  551. }
  552. #endif
  553.     }
  554.     else{
  555. #ifdef TWO_FUN_IN_ONE_VFD_KEY
  556.     if((key_press_time_count>0)&&(key_press_time_count<15)&&(num_add_flag==0)&&(command_flag))
  557.     {
  558.      if(vfd_keycode[keycode_to_num(key_previ_temp)-1]==IRC_NEXT)
  559.      {
  560.      call_ir_func(IRC_NEXT);
  561.      command_flag=0;
  562.      }
  563.          
  564.      else if(vfd_keycode[keycode_to_num(key_previ_temp)-1]==IRC_PREV)
  565.          {
  566.      call_ir_func(IRC_PREV);
  567.      command_flag=0;
  568.          }
  569.          }
  570.      key_press_time_count=0;  
  571.      num_add_flag = 0;
  572.     
  573. #endif //TWO_FUN_IN_ONE_VFD_KEY
  574. #ifdef TWO_FUNC_IN_LEFT_RIGHT_KEY //xyy add for Oritron 2004-11-10 9:58
  575.     if((uTimeCount>0)&&(uTimeCount<20)&&(num_add_flag==0)&&(command_flag))
  576.     {
  577.      if(vfd_keycode[keycode_to_num(uPrevKey)-1]==IRC_LEFT)
  578.      {
  579.      call_ir_func(IRC_LEFT);
  580.      command_flag=0;
  581.      }
  582.          
  583.      else if(vfd_keycode[keycode_to_num(uPrevKey)-1]==IRC_RIGHT)
  584.          {
  585.      call_ir_func(IRC_RIGHT);
  586.      command_flag=0;
  587.          }
  588.          }
  589.      uTimeCount=0;  
  590.      num_add_flag = 0;
  591. #endif
  592. #ifdef QISHENG_DVD      
  593.         standby_cnt = 0;
  594. #endif 
  595.     }
  596. }
  597. #ifdef QISHENG_DVD
  598.         else if ((key_data!=0))
  599.         {
  600.          if(standby_cnt)
  601.          {
  602.          standby_cnt++;
  603.          printf("*");
  604.          if(standby_cnt==50)
  605.          {
  606.          vfd_state = VFD_WRITE;
  607.          call_ir_func(IRC_POWER);
  608.          }
  609.          }
  610.         }
  611. #endif
  612. #if defined(TWO_FUN_IN_ONE_VFD_KEY) || defined(TWO_FUNC_IN_LEFT_RIGHT_KEY)//xyy add for Oritron 2004-11-10
  613. else
  614. {
  615.     command_flag=1;
  616. }
  617. #endif
  618. vfd_state = VFD_WRITE;
  619. }
  620. else
  621. {
  622. update_vfd_data();
  623. #if defined(SUPPORT_APOGEE_AMP) && defined(AMPVOL_ADJUST_TYPE1)//xyy 2004-4-14
  624.      if(full_scrn==APOGEEAMPVOL && timeout_osd[REGION1] == 0)
  625.      {
  626.      full_scrn = 0;
  627.      erase_vfd_mem();
  628.      }
  629. #endif
  630.         //int i;
  631. #ifdef AUTO_INTO_STANDBY   //for tonic dvd//20040206
  632.      //if(play_state==VCD_STATE_STOP||system_state==SYSTEM_NODISC)
  633.     if(system_state==SYSTEM_STOP||system_state==SYSTEM_NODISC||play_state==VCD_STATE_STOP)
  634.         {
  635.          //auto_standby_timer++;
  636.      //if(auto_standby_timer==100*60*30)
  637.      if(auto_standby_timer==100*60*25)
  638.          ircmd_power();
  639.         }
  640.         else
  641.         auto_standby_timer=0;
  642. #endif
  643. switch (bWriteState)
  644. {
  645. case 0:
  646. //update to reset mode
  647. #ifndef TEST_VFD
  648. regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | VFD_DISPLAY_MODE;
  649. #else
  650. regs0->iop_data[VFD_CMD] = VFDC_SET_DISP | COMMAND_MODE;
  651. #endif
  652. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN0);
  653. bWriteState++;
  654. break;
  655. case 1:
  656. regs0->iop_data[VFD_CMD] =
  657. VFDC_DISP_CTRL | VFDC_DISP_CTRL_ON | VFDC_DISP_CTRL_10_16;
  658. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  659. (FUN_VFD_WRITE | VFD_DAT_LEN0);
  660. bWriteState++;
  661. break;
  662. #ifdef  SM1623_DRIVER_VFD
  663. case 2:
  664. //update in one polling
  665.             for(i=0;i<VFD_DISPLAY_SIZE;i+=4)       // fengjl upload  3-11-23 17:33
  666.             {
  667.      regs0->iop_data[VFD_CMD] = (0xc0 | i);   // transfer  address   
  668.      if((VFD_DISPLAY_SIZE-i)<=4)//modefied by wangfeng,2003-11-24 10:41
  669.      {
  670.          regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
  671.          regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  672.      (FUN_VFD_WRITE | VFD_DAT_LEN2);
  673.      }
  674.      else
  675.      {
  676.          regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
  677.          regs0->iop_data[VFD_DAT1] = vfd_mem[i + 3] << 8 | vfd_mem[i + 2];
  678.      regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  679.      (FUN_VFD_WRITE | VFD_DAT_LEN4);
  680.      }
  681.     
  682.      WaitIopFunRdy(IOP_RDY_WAIT);
  683.             }
  684. vfd_state = VFD_READ;
  685. bWriteState=0;
  686. break;
  687. #elif defined(GBM_LED6961_PANEL)||defined(ET6201_PANNEL)||defined(GBM_PBCY_8202_PANNEL)            //gerry for GBM_LED_PANEL,2004-2-4 22:41
  688. case 2:
  689. for(i=0;i<VFD_DISPLAY_SIZE;i+=2)
  690. {
  691. regs0->iop_data[VFD_CMD] = (0xc0 | i);
  692. regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
  693. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN2);
  694. WaitIopFunRdy(IOP_RDY_WAIT);
  695. }
  696. vfd_state = VFD_READ;
  697. bWriteState=0;
  698. break;
  699. #else//GBM_LED6961_PANEL
  700. case 2:
  701. #if !defined(TP6311_DRIVER_VFD) && !defined(XINGQIU_RECEIVER_PANNEL)&& !defined(KENLOON_PANEL3) && !defined(ORITRON_PANEL)//xyy
  702. regs0->iop_data[VFD_CMD] = (0xc0 | count);
  703. regs0->iop_data[VFD_DAT0] = vfd_mem[count + 1] << 8 | vfd_mem[count];
  704. regs0->iop_data[VFD_DAT1] = vfd_mem[count + 3] << 8 | vfd_mem[count + 2];
  705. #ifndef SKYWORTH_DVD
  706. regs0->iop_data[VFD_DAT2] = vfd_mem[count + 5] << 8 | vfd_mem[count + 4];
  707. #endif
  708. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  709. #ifndef SKYWORTH_DVD
  710. (FUN_VFD_WRITE | VFD_DAT_LEN6);
  711. /* transfer data size add by chichang 2001 6/6 */
  712. count += 6;
  713. #else
  714. (FUN_VFD_WRITE | VFD_DAT_LEN4);
  715. /* transfer data size add by chichang 2001 6/6 */
  716. count += 4;
  717. #endif
  718. if(count == VFD_DISPLAY_SIZE)
  719. {
  720. count = 0;
  721. vfd_state = VFD_READ;
  722. }
  723. #else//#ifndef TP6311_DRIVER_VFD                                              //marked by xyy 2003-10-31 19:42
  724.      for(i = 0; i < VFD_DISPLAY_SIZE; i += 6)    //xyy 2003-10-31 19:42
  725.      {
  726.      regs0->iop_data[VFD_CMD] = (0xc0 | i);
  727.      regs0->iop_data[VFD_DAT0] = vfd_mem[i + 1] << 8 | vfd_mem[i];
  728.      regs0->iop_data[VFD_DAT1] = vfd_mem[i + 3] << 8 | vfd_mem[i + 2];
  729.      regs0->iop_data[VFD_DAT2] = vfd_mem[i + 5] << 8 | vfd_mem[i + 4];
  730.     
  731.      regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  732.      (FUN_VFD_WRITE | VFD_DAT_LEN6);
  733.     
  734.      WaitIopFunRdy(IOP_RDY_WAIT);
  735.      }
  736. vfd_state = VFD_READ;
  737. #endif//#ifndef TP6311_DRIVER_VFD
  738. bWriteState=0;
  739. break;
  740. #endif//#ifdef  SM1623_DRIVER_VFD
  741. }//write state control
  742. }
  743. #elif defined(GPIO_KEY_LIGHT)//SUPPORT_VFD nono 3-8-18 14:41
  744.     check_gpio_keylight_status();
  745. #elif defined(USE_VFDPORT_TRANDATA)
  746.     Communication_And_MCU4051();    
  747. #endif//SUPPORT_VFD
  748. #endif //support spi qsi
  749. }
  750. #ifdef TP6317_PANNEL   //yaowh add 04-10-25
  751. BYTE Read_SW(void)
  752. {
  753.    BYTE key_datasw ;
  754.    key_datasw= (BYTE)regs0->iop_data[7] ;   
  755.    //regs0->iop_data[7] = 0xF0 ;            
  756.    return  key_datasw ;
  757. }
  758. void write_vfd_data(BYTE bAddr, BYTE bData)
  759. {
  760. regs0->iop_data[VFD_CMD] = 0x40;//Writes data to display memory
  761. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN0);
  762. regs0->iop_data[VFD_CMD] = (0xc0 | bAddr);//Assress setting command
  763. regs0->iop_data[VFD_DAT0] = 0xff00 | bData;
  764. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN1);
  765. WaitIopFunRdy(IOP_RDY_WAIT);
  766. }
  767. void define_standbykey(void)
  768. {
  769.     write_vfd_data(0x16,IR_USER_CODE_LOW8 & 0xff);
  770.     write_vfd_data(0x17,IR_USER_CODE_HIGHT8 & 0xff);
  771.     write_vfd_data(0x18,TP6317_IR_CODE1 & 0xff);
  772.     write_vfd_data(0x19,TP6317_IR_CODE2 & 0xff);
  773.     write_vfd_data(0x1a,TP6317_IR_CODE3 & 0xff);
  774.     write_vfd_data(0x1b,TP6317_IR_CODE4 & 0xff);
  775.     write_vfd_data(0x1c,TP6317_IR_CODE5 & 0xff);
  776.     write_vfd_data(0x1d,TP6317_IR_CODE6 & 0xff);
  777.     write_vfd_data(0x1e,TP6317_IR_CODE7 & 0xff);
  778.     write_vfd_data(0x1f,TP6317_IR_CODE8 & 0xff);
  779.     write_vfd_data(0x20,TP6317_VFD_KEY_CODE1 & 0xff);
  780.     write_vfd_data(0x21,TP6317_VFD_KEY_CODE2 & 0xff);
  781.     write_vfd_data(0x22,TP6317_VFD_KEY_CODE3 & 0xff);
  782.     
  783. }
  784. void  Power_off_define_TP6317_standbykey(void) 
  785. {
  786.     define_standbykey();
  787. }
  788. void TP6317_int(void)
  789. {
  790.     define_standbykey();
  791. }
  792. #endif