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

DVD

开发平台:

C/C++

  1.   
  2. /*
  3. ** FUNCTION
  4. ** polling_vfdr
  5. **
  6. ** DESCRIPTION
  7. ** check if polling-ready
  8. */
  9. void polling_vfdr(void)
  10. {
  11. #ifdef SUPPORT_SPI_QSI
  12.   //not use
  13. #endif
  14. #ifndef  SUPPORT_SPI_QSI
  15.     
  16. #ifdef SUPPORT_VFD
  17. UINT8   i;
  18. UINT32  temp;
  19. UINT32  key_data;
  20. static UINT8 key_state = 0, count = 0;
  21. static UINT32 key_previ = 0;
  22. if(regs0->iop_data[0] & FUN_MASK)
  23. return;
  24. if(vfd_state == VFD_READ)
  25. {
  26. regs0->iop_data[VFD_CMD] = 0x42; //key polling
  27. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  28. (FUN_VFD_READ | 3);
  29. vfd_state = VFD_READ_BUSY;
  30. }
  31. else if(vfd_state == VFD_READ_BUSY)
  32. {
  33. key_data =
  34. (reverse_fun(regs0->iop_data[VFD_DAT0])) |
  35. (reverse_fun(regs0->iop_data[VFD_DAT0] >> 8) << 8) |
  36. (reverse_fun(regs0->iop_data[VFD_DAT1]) << 16);
  37. //printf("key_data=%xn",key_data);
  38. //if (key_data == 0xffffff) 
  39. //{
  40. //break; //VFD buttons are pulled-high, if we don't connect VFD, we skip it, Jeff 20020612
  41. //printf("polling_vfdr:returnn");
  42. //return;
  43. //}           
  44. if(key_data == 0)
  45. {
  46. key_state = 0;
  47. key_previ = 0;
  48. }
  49. else
  50. {
  51. if(key_data != key_previ)
  52. {
  53. key_state = 1;
  54. key_previ = key_data;
  55. }
  56. else
  57. {
  58. if(key_state == 1)
  59. {
  60. key_state = 2;
  61. for(i = 0; i < 24; i++)
  62. {
  63. temp = 0x01 << i;
  64. if(key_data & temp)
  65. {
  66. if (key_data > temp) // Robert 030224 for preventing illegal key_data
  67. {
  68. key_data = 0;
  69. return;
  70. }
  71. else
  72. {
  73. key_data = i + 1;
  74. break;
  75. }
  76. }
  77. }
  78.                                         save_srn_start_t = get_rtc_val();//axel 2004/1/15 05:31,avoid looping PAUSE<->PLAY VFD key and entering screen saver
  79. #ifdef VFD_KEY_TEST
  80. psprintf(RegionValStr[REGION1], "KEY %02d F:%d", key_data,
  81. vfd_keycode[key_data - 1]);
  82. PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
  83. #else
  84. if((Is_JPEG_SlideMode()) &&
  85. (vfd_keycode[key_data - 1] == IRC_PAUSE))
  86. { //Jeff 20020523
  87. bJpgVFDPause = 1;
  88. }
  89. else if((Is_JPEG_SlideMode()) &&
  90. ((vfd_keycode[key_data - 1] == IRC_PLAY) ||
  91. (vfd_keycode[key_data - 1] == IRC_PLAY_SELECT) ||
  92. (vfd_keycode[key_data - 1] == IRC_PLAY_RESUME)))
  93. {
  94. //bJpgVFDPause=0;
  95. bJpgVFDPause = 2; //Jeff 20020525
  96. }
  97. else if((Is_JPEG_SlideMode()) && //Jeff 20020527
  98. (vfd_keycode[key_data - 1] == IRC_PAUSEPLAY))
  99. {
  100. if(bJpgVFDPause == 0)
  101. {
  102. //bJpgVFDPause = 1;
  103. if(play_state == VCD_STATE_PAUSE) //nono 2-6-28 14:00
  104. bJpgVFDPause = 2;
  105. else
  106. bJpgVFDPause = 1;
  107. }
  108. else if(bJpgVFDPause == 1)
  109. {
  110. bJpgVFDPause = 2;
  111. }
  112. }
  113. else if(key_data<40)
  114. {
  115. extern UINT8 power_on;
  116. if(power_on == 2) //2-6-18 13:36 to avoid accepting a VFD_key in the beginning. 
  117. {
  118. power_on--;
  119. if(key_data != 1)
  120. {
  121. //save_srn_start_t = get_rtc_val();//axel, 2004/1/15 05:32 move to top
  122. call_ir_func(vfd_keycode[key_data - 1]);
  123. }
  124. }
  125. else
  126. {
  127. //save_srn_start_t = get_rtc_val();//axel,2004/1/15 05:33 move to top
  128. call_ir_func(vfd_keycode[key_data - 1]);
  129. }
  130. }
  131. #endif
  132. }
  133. }
  134. }
  135. vfd_state = VFD_WRITE;
  136. update_vfd_data();
  137. }
  138. else
  139. {
  140. regs0->iop_data[VFD_CMD] = (0xc0 | count);
  141. regs0->iop_data[VFD_DAT0] = vfd_mem[count + 1] << 8 | vfd_mem[count];
  142. regs0->iop_data[VFD_DAT1] = vfd_mem[count + 3] << 8 | vfd_mem[count + 2];
  143. regs0->iop_data[VFD_DAT2] = vfd_mem[count + 5] << 8 | vfd_mem[count + 4];
  144. regs0->iop_data[0] = (regs0->iop_data[0] & VFD_DATLEN_MASK) |
  145. (FUN_VFD_WRITE | VFD_DAT_LEN6);
  146. /* transfer data size add by chichang 2001 6/6 */
  147. count += 6;
  148. if(count == VFD_DISPLAY_SIZE)
  149. {
  150. count = 0;
  151. vfd_state = VFD_READ;
  152. }
  153. }
  154. #endif
  155. #endif //support spi qsi    
  156. }