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

DVD

开发平台:

C/C++

  1. /*
  2. ----->included by vfd_io_util.c
  3. ----->only for portable dvd use.
  4. ----->did it on 07/25
  5. */
  6. #ifdef EASTWIN
  7. extern UINT8  safe_on;
  8. #endif
  9. #ifdef EASTWIN
  10. void check_portable_gpio(void)
  11. {
  12.     UINT16 temp=0;
  13.     
  14.     #ifdef TFT_VIDEO_INOUT
  15.     static BYTE AVin_step = 0;
  16.     
  17.     INT_EXT_GPIO_INIT();
  18.    
  19.     switch (GPIO_I_GET(INT_EXT_VIDEO_GPIO))
  20.     {
  21.       case 0://8210 input video to TFT
  22.         if((system_state == SYSTEM_OPEN) && (AVin_step == 1))
  23.         {//just now system was interrupted in reading disc 
  24.               if(CDOpened())
  25.               {
  26.                 call_ir_func(IRC_EJECT);
  27.                 AVin_step = 0;
  28.                 //printf("i am going to read disc.......n");
  29.               }
  30.         }
  31.         else if((system_state == SYSTEM_STOP) && (AVin_step == 2))
  32.         {//just now system was interrupted in normal playing state
  33.                 ircmd_play();
  34.                 AVin_step = 0;
  35.                 //printf("i am going to play disc.......n");
  36.         }
  37.         
  38.         if(hold_state == 2)
  39.           hold_state = 0;
  40.           
  41.       break;
  42.       case 1://External AV input to TFT
  43.         if(system_state == SYSTEM_READ_TITLE)
  44.         {//in reading disc and 
  45.             if(!CDOpened())
  46.             {
  47.               AVin_step = 1;
  48.               call_ir_func(IRC_EJECT);
  49.               //printf("video in when reading disc,then i go into open staten");
  50.             } 
  51.             
  52.         }
  53.         else if(system_state == SYSTEM_BROWSE)
  54.         {
  55.             if(play_state != VCD_STATE_STOP)
  56.             {
  57.                 AVin_step = 2;
  58.                 ircmd_stop();
  59.                 #ifdef STOP_LOADER
  60.                 stop_loader();
  61.                 #endif
  62.                 //printf("video in when playing disc,then i go into stop staten");
  63.             }
  64.         } 
  65.         
  66.         if(hold_state == 0)
  67.           hold_state = 2;       
  68.       
  69.       break;
  70.       
  71.     }
  72.     
  73.     if(!AVin_step)
  74.     {
  75.     #endif //end #ifdef TFT_VIDEO_INOUT
  76.     
  77.     #ifdef SUNPLUS_8202P_DEMOBOARD
  78.     regs0->sft_cfg4 &= ~((0x03)<<2);    //Enable GPIO2,3 For COVER & TFT SW
  79.     #endif
  80.     
  81.     #ifdef TFT_VIDEO_INOUT
  82.     }
  83.     #endif //end #ifdef TFT_VIDEO_INOUT
  84.     #ifdef TFT_VIDEO_INOUT 
  85.     if(!AVin_step)
  86.     {
  87.     #endif //end #ifdef TFT_VIDEO_INOUT 
  88.     #ifdef HOLD_KEY_DETECT    
  89.     temp=regs0->gpio_in[HOLD_GPIO / 16] & (1 << (HOLD_GPIO % 16));  //get gpio37(HOLD)
  90.     if(temp)
  91.         hold_state=1;
  92.     else
  93.         hold_state=0;           
  94.     #endif
  95.     
  96.     temp=regs0->gpio_in[TFT_SW_GPIO / 16] & (1 << (TFT_SW_GPIO % 16));  //get gpio44(TFT_SW)
  97.     if(temp) // lcd panel open
  98.     {
  99.      if(!bINVERTER_POWER)
  100.      {
  101.      INVERTER_POWER_ON();
  102.      bINVERTER_POWER = 1;
  103.      bPOWER_LED_FLASH = 0;
  104.      }
  105.     }
  106.     else // lcd panel close
  107.     {
  108.      if(bINVERTER_POWER)
  109.      {
  110.      INVERTER_POWER_OFF();
  111.      bINVERTER_POWER = 0;
  112.      bPOWER_LED_FLASH = 1;
  113.      }   
  114.     }
  115.     
  116.     if(bINVERTER_POWER) // lcd panel open
  117.     {
  118. if(!bAMP_IS_ON && bPOWER_ON_MUTE_EXE)
  119. {
  120.      ENABLE_AMP();
  121.      bAMP_IS_ON = 1;
  122.      }
  123.     }
  124.     else // lcd panel close
  125.     {
  126. if(EAR_DETECT()) // earphone no plug in 
  127.      {
  128.      if(bAMP_IS_ON)
  129. {
  130.      DISABLE_AMP();
  131.      bAMP_IS_ON = 0;
  132.      }
  133.      } 
  134.      else // earphone plug in 
  135.      { if(!bAMP_IS_ON && bPOWER_ON_MUTE_EXE)
  136. {
  137.      ENABLE_AMP();
  138.      bAMP_IS_ON = 1;
  139.      }
  140.      } 
  141.     }
  142.     
  143.     #ifdef POWER_ON_MUTE
  144.     if(!bPOWER_ON_MUTE_EXE)
  145.     {
  146.      if(power_on_mute_timer >100 ) // power on to mute off time around 4.5S 
  147.      {
  148.      AUDIO_MUTE_OFF();
  149.      bPOWER_ON_MUTE_EXE = 1;
  150.      power_on_mute_timer = 0;
  151.      }
  152.      power_on_mute_timer++;
  153.     }
  154.     #endif    
  155.     
  156.     #ifdef POWER_LED_FLASH
  157.     if(bPOWER_LED_FLASH)
  158.     {
  159.      if( power_led_flash_timer < 100 )
  160.      {
  161.      power_led_flash_timer ++;
  162.      POWER_LED_ON();    
  163.      }    
  164.      else
  165.      {
  166.      if((power_led_flash_timer>=100) & (power_led_flash_timer<=200))
  167.             {
  168.      power_led_flash_timer ++;    
  169.      POWER_LED_OFF();
  170.      }
  171.      else
  172.          power_led_flash_timer = 0;
  173.      }
  174.     }
  175.     else
  176.     {
  177.      power_led_flash_timer = 0;
  178.      POWER_LED_OFF();
  179.     }  
  180.     #endif // end of POWER_LED_FLASH
  181.       
  182.     
  183.     #ifdef TFT_VIDEO_INOUT
  184.     }
  185.     #endif //end #ifdef TFT_VIDEO_INOUT
  186.         
  187.     // Eastwin change to GPIO 18
  188.     temp = regs0->gpio_in[LOWBAT_DET_GPIO / 16] & (1 << (LOWBAT_DET_GPIO % 16));
  189.     if(!temp)   
  190.     {   
  191.         bIS_LOWBAT = 0; // Kevin Sep 10,04 
  192.         if(bLOWBAT_DISP)
  193.         {
  194.          bLOWBAT_DISP = 0;
  195.          ClearOsdMsg(2);
  196.          lowbat_timer=0;
  197.         } 
  198.     }
  199.     else
  200.     {
  201.         bIS_LOWBAT = 1; // Kevin Sep 10,04 
  202.         if (safe_on==1) // Kevin Sep 10,04 
  203.          safe_srn_off();
  204.         if(lowbat_timer<100)
  205.         {
  206.             PrintOsdMsg(STR_OS_LOWBAT,REGION2,0,0);
  207.             lowbat_timer++;
  208.             bLOWBAT_DISP = 1;
  209.         }   
  210.         else
  211.         {
  212.             if((lowbat_timer>=100) & (lowbat_timer<150))
  213.             {
  214.                 ClearOsdMsg(2);
  215.                 lowbat_timer++;
  216.                 bLOWBAT_DISP = 0;
  217.             }   
  218.             else
  219.             {    
  220.                 lowbat_timer = 0;
  221.                 bLOWBAT_DISP = 1;
  222.             }
  223.         }   
  224.     }   
  225. }
  226. #else
  227. void check_portable_gpio(void)
  228. {
  229. UINT16 temp=0;
  230.     #ifdef TFT_VIDEO_INOUT
  231.     static BYTE AVin_step = 0;
  232.     
  233.     INT_EXT_GPIO_INIT();
  234.    
  235.     switch (GPIO_I_GET(INT_EXT_VIDEO_GPIO))
  236.     {
  237.     case 0://8210 input video to TFT
  238.         if((system_state == SYSTEM_OPEN) && (AVin_step == 1))
  239.         {//just now system was interrupted in reading disc 
  240.               if(CDOpened())
  241.               {
  242.                 call_ir_func(IRC_EJECT);
  243.                 AVin_step = 0;
  244.                 //printf("i am going to read disc.......n");
  245.               }
  246.         }
  247.         else if((system_state == SYSTEM_STOP) && (AVin_step == 2))
  248.         {//just now system was interrupted in normal playing state
  249.                 ircmd_play();
  250.                 AVin_step = 0;
  251.                 //printf("i am going to play disc.......n");
  252.         }
  253.         
  254.         if(hold_state == 2)
  255.             hold_state = 0;
  256.           
  257.         break;
  258.     case 1://External AV input to TFT
  259.         if(system_state == SYSTEM_READ_TITLE)
  260.         {//in reading disc and 
  261.             if(!CDOpened())
  262.             {
  263.               AVin_step = 1;
  264.               call_ir_func(IRC_EJECT);
  265.               //printf("video in when reading disc,then i go into open staten");
  266.             } 
  267.             
  268.         }
  269.         else if(system_state == SYSTEM_BROWSE)
  270.         {
  271.             if(play_state != VCD_STATE_STOP)
  272.             {
  273.                 AVin_step = 2;
  274.                 ircmd_stop();
  275.                 #ifdef STOP_LOADER
  276.                 stop_loader();
  277.                 #endif
  278.                 //printf("video in when playing disc,then i go into stop staten");
  279.             }
  280.         } 
  281.         
  282.         if(hold_state == 0)
  283.             hold_state = 2;       
  284.       
  285.         break;
  286.     }
  287.     
  288.     if(!AVin_step)
  289.     {
  290.     #endif //end #ifdef TFT_VIDEO_INOUT
  291.     
  292.         #ifdef SUNPLUS_8202P_DEMOBOARD
  293.         regs0->sft_cfg4 &= ~((0x03)<<2);    //Enable GPIO2,3 For COVER & TFT SW
  294.         #endif
  295. #ifdef CHECK_PORTABLE_OPCLSW
  296.         temp=regs0->gpio_in[PDVD_OPCLSW_GPIO / 16] & (1 << (PDVD_OPCLSW_GPIO % 16));  //get gpio16(COVER_SW)
  297.     
  298.         if(temp)
  299.         {
  300.           if(!CDOpened())
  301.           {
  302.     #ifdef ARGUS_PDVD_MENU_PLUS
  303.             if(full_scrn & SETUP_PLUS)
  304.               ircmd_setup_plus();
  305.             #endif //end #ifdef ARGUS_PDVD_MENU_PLUS
  306.             call_ir_func(IRC_EJECT);
  307.             PrintOsdMsg(STR_OS_OPEN,REGION1,0,0);
  308.           }   
  309.         }
  310.         else
  311.         {
  312.             if(CDOpened())
  313.               call_ir_func(IRC_EJECT);
  314.         }
  315.      #endif    
  316.         
  317.     #ifdef TFT_VIDEO_INOUT
  318.     }
  319.     #endif //end #ifdef TFT_VIDEO_INOUT
  320.         
  321.         
  322. #if defined(GBM_PORTABLE_DVD)||defined(SUNPLUS_8202P_DEMOBOARD)     //rbhung for GBM Portable DVD
  323.     #ifdef TFT_VIDEO_INOUT 
  324.     if(!AVin_step)
  325.     #endif //end #ifdef TFT_VIDEO_INOUT 
  326.     {
  327.         #ifdef HOLD_KEY_DETECT    
  328.         temp=regs0->gpio_in[HOLD_GPIO / 16] & (1 << (HOLD_GPIO % 16));  //get (HOLD)
  329.         if(temp)
  330.          hold_state=1;
  331.         else
  332.          hold_state=0;  
  333.         #endif
  334.         
  335.         temp=regs0->gpio_in[TFT_SW_GPIO / 16] & (1 << (TFT_SW_GPIO % 16));  //get (TFT_SW)
  336.         if(temp)
  337.             regs0->gpio_out[CTR_TFT_GPIO /16]|= (1 << (CTR_TFT_GPIO % 16));
  338.         else
  339.             regs0->gpio_out[CTR_TFT_GPIO /16]&= ~(1 << (CTR_TFT_GPIO % 16));
  340.     }
  341.     
  342.     temp=regs0->gpio_in[MCU_POWER_DET_GPIO / 16] & (1 << (MCU_POWER_DET_GPIO % 16));  //get gpio41(MCU_POWER_DET)
  343.     if(temp)
  344.     {
  345.      powerdown_timer=0;
  346.     }
  347.     else
  348.     {
  349.      powerdown_timer++;
  350.      if(powerdown_timer>100)
  351.      {
  352.             regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));      //CTR_GLED->H,GREEN LED OFF
  353.             regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16));     //DSP_RLED->L,RED LED ON    
  354.      call_ir_func(IRC_POWER);
  355. }
  356.     }
  357.         
  358.     
  359.     temp=regs0->gpio_in[LOWBAT_DET_GPIO / 16] & (1 << (LOWBAT_DET_GPIO % 16));  //get gpio42(LOWBAT_DET)
  360.     if(temp)
  361.     {
  362.         if(lowbat_timer==0)
  363. ClearOsdMsg(2);
  364.      lowbat_timer=1;
  365.         regs0->gpio_out[CTR_GLED_GPIO/16]&= ~(1 << (CTR_GLED_GPIO % 16));     //CTR_GLED->L,GREEN LED ON
  366.         regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));      //DSP_RLED->H,RED LED OFF
  367.     }
  368.     else
  369.     {
  370.      if(lowbat_timer<100)
  371.      {
  372.      PrintOsdMsg(STR_OS_LOWBAT,REGION2,0,0);
  373.      lowbat_timer++;
  374.             regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));  //CTR_GLED->H,GREEN LED OFF
  375.             regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->L,RED LED GLITTER ON
  376.      }
  377.      else
  378.      {
  379.      if((lowbat_timer>=100) & (lowbat_timer<150))
  380.      {
  381.      ClearOsdMsg(2);
  382.      lowbat_timer++;
  383.                 regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));  //DSP_RLED->H,RED LED GLITTER OFF
  384.      }
  385.      else
  386.      lowbat_timer=0;
  387.      }
  388.     }
  389. #endif //end #ifdef GBM_PORTABLE_DVD
  390. }
  391. #endif
  392.      
  393. #ifdef PDVD_USE_IO_SCAN_KEY
  394.     
  395. const BYTE gpio[8]={46,47,48,49,50,51,52,18};
  396. #ifdef USE_COMBINED_KEY
  397. #define LONG_PRESS_KEY_TIME 12  
  398. #endif
  399.     
  400. //#define PORTABLE_IOKEY_DEBUG
  401.         
  402. void check_portable_key(void)
  403. {
  404. #ifdef USE_COMBINED_KEY
  405.     BYTE i,j,keydata;
  406.     static BYTE column_dot = 4;
  407.     static BYTE row_dot = 0;
  408.     static BYTE keyprev = 0;
  409.     static BYTE key_press_times = 0 ;
  410.     #ifdef HOLD_KEY_DETECT
  411.     if(hold_state)
  412.         return;
  413.     #endif
  414.     regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
  415.     
  416.     for(i=0;i<4;i++)
  417.     {
  418.         for(j=0;j<4;j++)
  419.           GPIO_O_SET(gpio[j],1);
  420.           
  421.         GPIO_O_SET(gpio[i],0);
  422.     
  423.         for(j=4;j<8;j++)
  424.         {
  425.             keydata=GPIO_I_GET(gpio[j]);
  426.             
  427.             if(keydata == 0)
  428.             {//have key pressing                  
  429.                 keydata=i*4+(j-4)+1;
  430.                 column_dot = j;
  431.                 row_dot = i;
  432.                 
  433.                 if(keyprev != keydata)
  434.                 {//first press key!                         
  435.                     keyprev = keydata;
  436.                     #ifdef PORTABLE_IOKEY_DEBUG
  437.                     printf("%d key press at the first timen",keydata);
  438.                     #endif
  439.                 }
  440.                 else 
  441.                 {//count the key press times
  442.                     #ifdef D02_9_10INCH
  443.                     if((keydata == 8) || (keydata == 10))
  444.                     #else 
  445.                     if((keydata == 4) || (keydata == 6)
  446.                         #ifdef D02_A_10INCH
  447.                         ||(keydata == 10) || (keydata == 16)
  448.                         #endif
  449.                       )
  450.                     #endif
  451.                     {
  452.                         key_press_times++;
  453.                         #ifdef PORTABLE_IOKEY_DEBUG
  454.                         printf("key press times:---->%dn",key_press_times);
  455.                         #endif
  456.                     }
  457.                 }           
  458.                 break;
  459.             }
  460.             else if((j == column_dot) && (i == row_dot) && (keyprev != 0))
  461.             {//key is released
  462.                 if(key_press_times >= LONG_PRESS_KEY_TIME)
  463.                 {//long press key 
  464.                     #ifdef PORTABLE_IOKEY_DEBUG
  465.                     printf("call long key:%d!press %d timesn",keyprev,key_press_times);
  466.                     #endif  
  467.                  
  468.                     #ifdef D02_9_10INCH
  469.                     if(keyprev == 8)
  470.                     #else
  471.                     if(keyprev == 4)
  472.                     #endif
  473.                     {
  474.                         #ifdef D02_A_10INCH
  475.                         call_ir_func(IRC_LEFT); 
  476.                         #else
  477.                         call_ir_func(IRC_PREV); 
  478.                         #endif
  479.                     }
  480.                     else
  481.                     {
  482.                         #ifdef D02_A_10INCH
  483.                         if(keyprev == 10)
  484.                             call_ir_func(IRC_DOWN);
  485.                         else if (keyprev == 16)
  486.                             call_ir_func(IRC_UP); 
  487.                         else
  488.                             call_ir_func(IRC_RIGHT);
  489.                         #else
  490.                         call_ir_func(IRC_NEXT);
  491.                         #endif
  492.                     }
  493.               }
  494.               else
  495.               {//short key press
  496.                   call_ir_func(vfd_keycode[keyprev - 1]);
  497.                   #ifdef PORTABLE_IOKEY_DEBUG
  498.                   printf("call short key:%dn",keyprev);
  499.                   #endif
  500.               }
  501.               
  502.               key_press_times = 0;
  503.               keyprev = 0;
  504.               column_dot = 4;
  505.               row_dot = 0;
  506.            } 
  507.         }       
  508.     }
  509. #else
  510.     BYTE i,j,k,keydata,press_key=0;
  511.     static BYTE keyprev=0;
  512.     #ifdef HOLD_KEY_DETECT
  513.     if(hold_state)
  514.         return;
  515.     #endif
  516.     
  517.     regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
  518. for(i=0;i<4;i++)
  519. {
  520. for(j=0;j<4;j++)
  521. GPIO_O_SET(gpio[j],1);
  522.     GPIO_O_SET(gpio[i],0);
  523.    for(k=4;k<8;k++)
  524.    {    
  525.          keydata=GPIO_I_GET(gpio[k]);
  526.      if(keydata==0)
  527.      {               
  528.      press_key=1;
  529.      keydata=i*4+(k-4)+1;    
  530.      if(keyprev!=keydata)
  531.      {       
  532.          keyprev=keydata;
  533.          call_ir_func(vfd_keycode[keydata - 1]);
  534.          printf("key %d SW %d,%d.n",keydata,i,k-4);
  535.      }  
  536.      break;
  537.      }         
  538.    }  
  539.    }
  540.    if(press_key==0) keyprev=0;
  541. #endif //end #ifdef USE_COMBINED_KEY
  542. }
  543. #endif //#ifdef PDVD_USE_IO_SCAN_KEY