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

DVD

开发平台:

C/C++

  1. /*
  2. ** FUNCTION
  3. ** polling_vfdr
  4. **
  5. ** DESCRIPTION
  6. ** check if polling-ready
  7. ** 
  8. ** history:
  9. ** 2004-7-19 15:17
  10. ** wanghaoying move the following functio for ht1621 here
  11. */
  12. void reset_vfd(void)
  13. {
  14. init_vfd_clear();
  15. regs0->iop_data[VFD_CMD]=(SPL10_DUTY_BIAS);
  16. //regs0->iop_data[VFD_CMD]
  17. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  18. (FUN_VFD_WRITE | VFD_DAT_LEN0);
  19. WaitIopFunRdy(IOP_RDY_WAIT);
  20. regs0->iop_data[VFD_CMD]=(SPL10_KEY_MODE);
  21. //regs0->iop_data[VFD_CMD]
  22. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  23. (FUN_VFD_WRITE | VFD_DAT_LEN0); 
  24. WaitIopFunRdy(IOP_RDY_WAIT);
  25. }
  26. void polling_vfdr(void)  //HC164 type vfd
  27. {
  28. #ifdef SUPPORT_SPI_QSI
  29.   //not use
  30. #endif
  31. #ifndef  SUPPORT_SPI_QSI
  32. #ifdef SUPPORT_VFD
  33. UINT8   i;
  34. UINT32  temp;
  35. UINT32  key_data;
  36. static UINT8 count = 0;
  37. static UINT32 key_previ = 0;
  38. static BYTE bWriteState=0;
  39. UINT32 *VfdReadData;
  40. if(regs0->iop_data[0] & FUN_MASK)
  41. return;
  42. if(vfd_state == VFD_READ)
  43. {
  44. //read key data 
  45. VfdReadData = ((UINT32 *) (SDRAM_BASE_UNCACHED + regs0->iopya * 1024 + 0x588));
  46. //current is read 3 byte on io
  47. key_data = *VfdReadData & 0x000000ff;
  48. //if vfd is no connect, summer 20020912
  49. if(key_data != 0x0000ff)
  50. *VfdReadData = 0; //clear key value            
  51. if(key_data != key_previ)
  52. {
  53. key_previ = key_data;
  54. if(key_data != 0)
  55. {
  56. #ifdef VFD_KEY_TEST
  57. psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_data,
  58. vfd_keycode[key_data - 1]);
  59. PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  60. #else
  61. if((Is_JPEG_SlideMode()) && (vfd_keycode[key_data - 1] == IRC_PAUSE))
  62. {
  63. //Jeff 20020523
  64. bJpgVFDPause = 1;
  65. }
  66. else if((Is_JPEG_SlideMode()) &&
  67. ((vfd_keycode[key_data - 1] == IRC_PLAY) ||
  68. (vfd_keycode[key_data - 1] == IRC_PLAY_SELECT) ||
  69. (vfd_keycode[key_data - 1] == IRC_PLAY_RESUME)))
  70. {
  71. //bJpgVFDPause=0;
  72. bJpgVFDPause = 2; //Jeff 20020525
  73. }
  74. else if((Is_JPEG_SlideMode()) && //Jeff 20020527
  75. (vfd_keycode[key_data - 1] == IRC_PAUSEPLAY))
  76. {
  77. if(bJpgVFDPause == 0)
  78. {
  79. //bJpgVFDPause = 1;
  80. if(play_state == VCD_STATE_PAUSE) //nono 2-6-28 14:00
  81. bJpgVFDPause = 2;
  82. else
  83. bJpgVFDPause = 1;
  84. }
  85. else if(bJpgVFDPause == 1)
  86. {
  87. bJpgVFDPause = 2;
  88. }
  89. }
  90. else if(key_data<40)
  91. {
  92. extern UINT8 power_on;
  93. if(power_on == 2) //2-6-18 13:36 to avoid accepting a VFD_key in the beginning. 
  94. {
  95. power_on--;
  96. if(key_data != 1)
  97. {
  98. save_srn_start_t = get_rtc_val();
  99. call_ir_func(vfd_keycode[key_data - 1]);
  100. }
  101. }
  102. else
  103. {
  104. save_srn_start_t = get_rtc_val();
  105. call_ir_func(vfd_keycode[key_data - 1]);
  106. }
  107. }
  108. #endif
  109. }
  110. }
  111. vfd_state = VFD_WRITE;
  112. update_vfd_data();
  113. }
  114. else
  115. {
  116. switch (bWriteState)
  117. {
  118. case 2:
  119. regs0->iop_data[VFD_CMD] = (0xa0 | count);
  120. regs0->iop_data[VFD_DAT0] = vfd_mem[count + 1] << 8 | vfd_mem[count];
  121. regs0->iop_data[VFD_DAT1] = vfd_mem[count + 3] << 8 | vfd_mem[count + 2];
  122. regs0->iop_data[VFD_DAT2] = vfd_mem[count + 5] << 8 | vfd_mem[count + 4];
  123. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) | (FUN_VFD_WRITE | VFD_DAT_LEN6);
  124. /* transfer data size add by chichang 2001 6/6 */
  125. count += 6;
  126. if(count == VFD_DISPLAY_SIZE)
  127. {
  128. count = 0;
  129. vfd_state = VFD_READ;
  130. }
  131. bWriteState=2;
  132. break;
  133. default :
  134. bWriteState=2;
  135. }//write state control
  136. }
  137. #endif
  138. #endif  //spi qsi
  139. }