赞助论坛
  • 4616阅读
  • 0回复

SUNPLUS 与MCU的DSA通信协议源码 供大家学习 [复制链接]

楼层直达
axuey  
发帖
50
精华
0
金币
209
威望
5
贡献
6
好评
12
注册
2008-03-13
楼主    axuey 发表于: 2008-12-25 09:41:34 
/*
** FILE
** dsa.c
**
** DESCRIPTION
** control DSA interface.
**
*/
///////////////////////////////////////////////////
#include "global.h"
#include "timer.h"
#include "I2C.h"
#ifdef SUPPORT_AUDIO
#include "teavol.h"
#endif
#include "LCD.h"
#ifdef SUPPORT_IR
#include "ir.h"
#endif
#include "key.h"
#include "keyproc.h"
#ifdef SUPPORT_TV
#include "tv.h"
#include "typedef.h"
#include "at1819_osd.h"
#endif


#if defined(MODE_V3)
extern BYTE data gbDispTimer1;
extern BYTE data CloseWaiting;
extern BIT bOpenwaiting;

extern BYTE data gbCDResetTimer;
//=========================
#endif

#define DSA_T250MS        TIMER_250ms


#define SetDSA_DAT(x)    DSA_DAT = x
#define SetDSA_ACK(x)    DSA_ACK = x
#define SetDSA_STB(x)    DSA_STB = x

#define GetDSA_DAT()    (DSA_DAT)
#define GetDSA_ACK()    (DSA_ACK)
#define GetDSA_STB()    (DSA_STB)

#define SetDAT_READ()    DSA_DAT = 1
#define SetACK_READ()    DSA_ACK = 1
#define SetSTB_READ()    DSA_STB = 1


BYTE data gbDSATimer = 0;
BIT bCDPlayState = 0;
//BIT FLAG=0;
//=====modify===============
//    4 - 29 - v1
//    cd-mp3 display bug
//========================
BIT bClear=0,bOpenClose ;
BYTE gbDiscState;
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//

#define    DSA_CMD_BUF_SIZE        10

BYTE    MuteEn=0;
BIT    bMuteFreeze=0;
BIT    bMuteOff=0;
//=========================
//=====modify==============
//    6 - 21 - v1
//    dsp reset
//=========================
BIT    bOldState=0;
BIT bCheckUp=0;
//=========================
//=====modify==============
//    6 - 23 - v1
//    dsp reset
//=========================
BIT    bCDReset;
BIT    bCDResetAct;


#ifdef    SUPPORT_DSA_RESET
extern BYTE    gbDsaReset;
BIT        bDsafirst;
#endif
//==========================

BYTE gbNeedOpen=0;
BIT dsa_send_flag = 0;
BIT dsa_receive_flag = 0;
static BYTE data dsa_mode = 0;    
static UINT16 data dsa_in_data;
static UINT16 data dsa_out_data = 0;
static BYTE idata dsa_send_data_head, dsa_send_data_tail;
static UINT16 idata dsa_send_data[DSA_CMD_BUF_SIZE];

#define DSA_IDLE              0
#define DSA_R_SYNC              1
#define DSA_R_SYNC_WAIT              2
#define DSA_R_READ              3
#define DSA_R_WAIT              4
#define DSA_R_ACK              5
#define DSA_R_END              6
#define DSA_R_END_ALL            7
#define DSA_T_SYNC              8
#define DSA_T_SYNC_WAIT              9
#define DSA_T_SEND              10
#define DSA_T_WAIT              11
#define DSA_T_ACK              12
#define DSA_T_END              13
#define DSA_T_END_ALL         14

Uint16 tmp=0;
void write_data_to_dsabuf(Uint16 vaule)
{
   
#ifdef SIMULATE_232
RS232_WriteStr("s=");
RS232_WriteHex81((BYTE)(vaule>>8));
RS232_WriteHex81((BYTE)(vaule&0x00ff));
#endif
   dsa_send_data[dsa_send_data_tail] = vaule;
   dsa_send_data_tail++;
   if(dsa_send_data_tail >= DSA_CMD_BUF_SIZE)
       dsa_send_data_tail = 0;
}

static void Dsa_Rcom(void)
{
     if((dsa_send_flag == 0) && (dsa_send_data_head != dsa_send_data_tail)){
        dsa_out_data = dsa_send_data[dsa_send_data_head];
        dsa_send_flag = 1;
        dsa_send_data_head++;
        if(dsa_send_data_head >= DSA_CMD_BUF_SIZE)
            dsa_send_data_head = 0;
     }
}

static void Dsa_Process(void)
{
   static BYTE nCounter;

   switch(dsa_mode){
       case DSA_IDLE:    // reset dsa to idle mode; detect send or receive
           gbDSATimer = DSA_T250MS;
           if(!GetDSA_DAT()){
               dsa_mode = DSA_R_SYNC;
               SetDSA_ACK(0);
               nCounter = 0;
           }else if(dsa_send_flag){
/* if((dsa_out_data&0xff00)==0xd200){
   //    LCD_Debug_Key(dsa_out_data);
   //    LCD_Debug_Key(dsa_send_data_tail);
       //gbDispTimer1=TIMER_1s;
       //while(gbDispTimer1);
       tmp=dsa_out_data;
     }*/    
               SetDSA_DAT(0);
               dsa_mode = DSA_T_SYNC;
               nCounter = 0;
           }
           else Dsa_Rcom();
           break;

       case DSA_T_SYNC:
           if(!GetDSA_ACK()){
               SetDSA_DAT(1);
               dsa_mode = DSA_T_SYNC_WAIT;
           }
           break;
       case DSA_T_SYNC_WAIT:    
           if(GetDSA_ACK()){
               dsa_mode = DSA_T_SEND;
           }
           break;
       case DSA_T_SEND:
           if(dsa_out_data & (1 << (15 - nCounter))) SetDSA_DAT(1);
           else SetDSA_DAT(0);
           SetDSA_STB(0);
           dsa_mode = DSA_T_WAIT;
           break;
       case DSA_T_WAIT:
           if(!GetDSA_ACK())
           {
               SetDSA_STB(1);
               dsa_mode = DSA_T_ACK;    
           }
           break;
       case DSA_T_ACK:
           if(GetDSA_ACK())
           {
               if(nCounter == 15)
               {
                   SetSTB_READ();
                   SetDAT_READ();
                   SetDSA_ACK(0);
                   dsa_mode = DSA_T_END;    
               } else {
                   nCounter++;
                   dsa_mode = DSA_T_SEND;
               }
           }
           break;
       case DSA_T_END:
           if(!GetDSA_STB())
           {
               BIT bRCVResponse = GetDSA_DAT();
               SetDSA_ACK(1);
               dsa_mode = DSA_T_END_ALL;
               if(bRCVResponse)
               {
                   dsa_send_flag = 0;
               }
           }
           break;
       case DSA_T_END_ALL:
           if(GetDSA_STB())
           {
               SetDAT_READ();
               SetACK_READ();
               SetSTB_READ();
               dsa_mode = DSA_IDLE;    
               
           }
           break;

       case DSA_R_SYNC:
           if(GetDSA_DAT())
           {
               SetSTB_READ();
               SetDSA_ACK(1);
               dsa_in_data = 0;
               dsa_mode = DSA_R_READ;
           }
           break;
       case DSA_R_READ:
           if(!GetDSA_STB())
           {
               dsa_in_data |= GetDSA_DAT();
               SetDSA_ACK(0);
               dsa_mode = DSA_R_WAIT;
           }
           break;
       case DSA_R_WAIT:
           if(GetDSA_STB()){
               SetDSA_ACK(1);
               dsa_mode=DSA_R_ACK;    
           }
           break;
       case DSA_R_ACK:
           if(nCounter == 15)
           {
               SetACK_READ();
               SetDSA_DAT(1);
               dsa_mode = DSA_R_END;    
           } else {
               nCounter++;
               dsa_in_data <<= 1;
               dsa_mode = DSA_R_READ;
           }
           break;
       case DSA_R_END:
           if(!GetDSA_ACK())
           {
               SetDSA_DAT(1);
               SetDSA_STB(0);
               dsa_mode = DSA_R_END_ALL;
           }
           break;
       case DSA_R_END_ALL:
           if(GetDSA_ACK())
           {
               SetDAT_READ();
               SetACK_READ();
               SetSTB_READ();
               dsa_mode = DSA_IDLE;
               dsa_receive_flag = 1;
           }
           break;

       default:
           gbDSATimer = 0;
           dsa_mode = DSA_IDLE;
           break;
   }

   if(!gbDSATimer)
   {
       SetDAT_READ();
       SetACK_READ();
       SetSTB_READ();
       dsa_mode = DSA_IDLE;
       dsa_send_flag = 0;
       dsa_receive_flag=0;
   }
}    

static void VCD_key_server()
{
   Uint8 curkey;

   curkey = SYS_get_key();
   if(gbOsdTimer&0x80){
    gbOsdTimer=0;
       if(gbSysState.Sub==TV_NORMAL_STATE)OsdClear();
    }

   #ifdef SIMULATE_232
   if(curkey&0x3f) send_asc(" key=", curkey);
   #endif
   
   #ifdef SUPPORT_MUTE_RELEASE
   if(bMuteFreeze){
       if(((curkey & 0x3f)!=KEY_SOURCE)&&((curkey & 0x3f)!=KEY_MUTE)\
           &&((curkey & 0x3f)!=KEY_VOL_UP)&&((curkey & 0x3f)!=KEY_VOL_DOWN)\
           &&((curkey & 0x3f)!=KEY_POWER))
           return;
       }        
   #else
   if(bMuteFreeze){
       if(((curkey & 0x1f)!=KEY_SOURCE)&&((curkey & 0x1f)!=KEY_MUTE)\
           &&((curkey & 0x1f)!=KEY_POWER))
           return;
       }        
   #endif

   //=========================


   if((curkey != KEY_NONE) &&
       ((curkey & 0x3f) <= VCD_KEY_MAX))
   {
       #if 1
       #if defined(MODE_V3)
       if(gbDispTimer1 != 0){
#ifdef INTECH_BD325
           if(((curkey & 0x3f) != KEY_VOL_UP)
               && ((curkey & 0x3f) != KEY_VOL_DOWN) && ((curkey & 0x3f) != KEY_EQ) \
               && ((curkey & 0x1f) != KEY_SLEEP))
#else
           if(((curkey & 0x3f) != KEY_VOL_UP) && ((curkey & 0x3f) != KEY_VOL_DOWN) && ((curkey & 0x3f) != KEY_EQ) \
               && ((curkey & 0x3f) != KEY_BASS) && ((curkey & 0x3f) != KEY_BASS_UP) \
               && ((curkey & 0x3f) != KEY_BASS_DOWN) && ((curkey & 0x3f) != KEY_TREB_DOWN) && ((curkey & 0x3f) != KEY_TREB_UP) \
               && ((curkey & 0x1f) != KEY_SLEEP))
#endif
       
//=========================                

           {
               gbDispTimer1 = 0;
               bDispRefresh = 1;
           }
           }
       
#ifdef INTECH_BD325
           if(((curkey & 0x3f)== KEY_VOL_UP)||((curkey & 0x3f)== KEY_VOL_DOWN)\
           ||((curkey & 0x3f)== KEY_EQ)||((curkey & 0x3f)== KEY_SLEEP)\
           ||((curkey & 0x3f)== KEY_MUTE))
#else
           if(((curkey & 0x3f)== KEY_VOL_UP)||((curkey & 0x3f)== KEY_VOL_DOWN)\
           ||((curkey & 0x3f)== KEY_BASS_UP)||((curkey & 0x3f)== KEY_BASS_DOWN)\
           ||((curkey & 0x3f)== KEY_EQ)||((curkey & 0x3f)== KEY_SLEEP)\
           )
#endif    

           {
       
           }    
        else
           {
           bClear=0;
           if(gbDispTimer1)
               {
               gbDispTimer1=0;
               bDispRefresh=1;
               }        
       }
       
       #endif
       #endif                
       if((curkey&0x3f)!=KEY_NONE&&(curkey&0x3f)!=KEY_TIMER_SET){    
               if(gbKeyFlag) write_data_to_dsabuf(0xc100 + curkey - 1);
               else write_data_to_dsabuf(0xc000 + curkey - 1);
               }

       //==========================
   }
   ProcessNormalKey(curkey);


   if(curkey == KEY_SOURCE){
       #if defined(SUPPORT_TV)
       GetSysState(STATE_TV);
       
       #endif
   }

}


#if (LCD_DEVICE == LCD_PD16311) || defined(MODE_VCD132A) \
   || defined(MODE_VCD367)

#if defined(MODE_VCD132A)
BYTE code DigitalMapTab[][2] = {
   {12,13},    {14,15},    { 0, 1},    { 2, 3},
   { 4, 6},    { 6, 8},    { 8,10}
};
#elif defined(MODE_VCD367)
BYTE code DigitalMapTab[][2] = {
   { 8, 9},    { 9,10},    {10,11},    {14,14},
   {15,15},    { 0, 1},    { 1, 2},    { 2, 3}
};
#else
BYTE code DigitalMapTab[][2] = {
   { 0, 3},    { 0, 3},    { 0, 7},    { 4, 7},
   { 4, 7},    { 8,11},    { 8,11},    { 8,15},
   {12,15}
};
#endif


#if defined(LCD_VCD1000)
#define IconMap_Max        15
UINT16 code IconMapTab[] = {
   LCD_SEG_PLAY,    LCD_SEG_PAUSE,    LCD_SEG_ALBUME,
   LCD_SEG_INTRO,    LCD_SEG_RDM,    LCD_SEG_PGM,
   LCD_SEG_REPEAT,    LCD_SEG_REP1,    LCD_SEG_CD,
   LCD_SEG_WMA,    LCD_SEG_MP3,    LCD_SEG_USB,
   LCD_SEG_AUX,    LCD_SEG_IN,        LCD_SEG_MIC
};
#elif defined(MODE_VCD132A)
#define IconMap_Max        16
UINT16 code IconMapTab[] = {
   LCD_SEG_PLAY,    LCD_SEG_PAUSE,    LCD_SEG_ALBUME,
   LCD_SEG_INTRO,    LCD_SEG_RDM,    LCD_SEG_PGM,
   LCD_SEG_REPEAT,    LCD_SEG_REP1,    LCD_SEG_CD,
   LCD_SEG_WMA,    LCD_SEG_MP3,    LCD_SEG_USB,
   LCD_SEG_AUX,    LCD_SEG_IN,        LCD_SEG_MIC,
   LCD_SEG_COL
};
#elif defined(MODE_VCD367)
#define IconMap_Max        20
UINT16 code IconMapTab[] = {
   LCD_SEG_PLAY,    LCD_SEG_PAUSE,    LCD_SEG_ALBUME,
   LCD_SEG_INTRO,    LCD_SEG_RDM,    LCD_SEG_PGM,
   LCD_SEG_REPEAT,    LCD_SEG_REP1,    LCD_SEG_CD,
   LCD_SEG_WMA,    LCD_SEG_MP3,    LCD_SEG_ALL,
   LCD_SEG_DISC,    LCD_SEG_REPS1,    LCD_SEG_REPS2,
   LCD_SEG_WMAS,    LCD_SEG_TRACK,    LCD_SEG_TOTAL,
   LCD_SEG_REMAIN,    LCD_SEG_COL
};
#elif defined (VFD_INTECHBD326)

UINT16 code IconMapTab[] = {
LCD_SEG_DISC1,LCD_SEG_DISC1S,
LCD_SEG_DISC2,LCD_SEG_DISC2S,
LCD_SEG_DISC3,LCD_SEG_DISC3S,
LCD_SEG_DISC4,LCD_SEG_DISC4S,
LCD_SEG_DISC5,LCD_SEG_DISC5S,  
LCD_SEG_DOT,LCD_SEG_DOT1,
LCD_SEG_COL
};

#define IconMap_Max        sizeof (IconMapTab)/2
#else
#define IconMap_Max        16
UINT16 code IconMapTab[] = {
   LCD_SEG_REP1,    LCD_SEG_ALL,    LCD_SEG_DIR,
   LCD_SEG_INTRO,    LCD_SEG_RDM,    LCD_SEG_PGM,
   LCD_SEG_COL,    LCD_SEG_ESP1,    LCD_SEG_MP3,
   LCD_SEG_CD,        LCD_SEG_ESP2,    LCD_SEG_ESP3,
   LCD_SEG_ESP4,    LCD_SEG_ESP0,    LCD_SEG_VCD,
   LCD_SEG_REPEAT
};
#endif

#endif


//==========================
//    dsp reset without dsa 1s
//    11 -14 -v1
//==========================
#ifdef SUPPORT_DSA_RESET
void    CheckDsa()
{
   if(bDsafirst)
       {
       if(!gbDsaReset)
           {
           CD_RESET=0;
           gbSystemTimer = TIMER_50ms;
           while(gbSystemTimer);
           CD_RESET=1;
           gbDsaReset=TIMER_1s;
           }
       }
}
#endif
//==========================

void VCD_state(void)
{
   BYTE i;
   BYTE tempdsa[2];
   
   BIT bMuteOld=0;
   
   TV_POWER_OFF;
   SetDAT_READ();
   SetACK_READ();
   SetSTB_READ();
   CD_POWER_ON;
   SetDAT_READ();
   SetACK_READ();
   SetSTB_READ();
   
   AUDIO_HMUTE = AUDIO_MUTE;
   gbSystemTimer = TIMER_50ms;
   while(gbSystemTimer);    
   //=========================
   PowerOnOff(1);

   VideoSwitch(1);
   #if defined(MODE_VCD802) || defined(MODE_VCD1000) || defined(MODE_VCD132A) || defined(MODE_V3)
   CD_RESET = 1;
   #endif

   #ifdef SUPPORT_AUDIO

   stAudio.channel = AUDIO_IN5;

   Send_Audio_CH(stAudio.channel);
   #endif

   SetDAT_READ();
   SetACK_READ();
   SetSTB_READ();
   dsa_mode = DSA_IDLE;
   dsa_receive_flag = 0;
   dsa_send_flag = 0;
   dsa_send_data_head = dsa_send_data_tail = 0;
   bCDPlayState = 1;
   bDispMode = 0;
   gbDispTimer = 0;
   gbDeMuteTimer = TIMER_5s;





    OsdShowSource(STATE_VCD);
   // while(1);
   #if defined(MODE_V3)
   gbDispTimer1 = 0;
   #endif
   

#ifdef    SUPPORT_DSA_RESET
   gbDsaReset=TIMER_2s;
   bDsafirst=1;
#endif

   bMuteFreeze=0;
   MuteEn=0;
   bMuteOff=0;

   bCDReset=0;
   bCDResetAct=0;
   bOldState=0;
      gbDispTimer=0;
      gbDispTimer1=0;
      bDispRefresh=0;
      bClear=0;          
   AUDIO_SWITCH(0);

gbOsdTimer=TIMER_5s;

   while(1){

       #ifdef SUPPORT_DSA_RESET
       CheckDsa();
       #endif

       

       if(gbDeMuteTimer & 0x80)
       {
           Audio_Mute(0);
           gbDeMuteTimer = 0;
       }

       VCD_key_server();

       
       
       if(gbSysState.Main != STATE_VCD){
              break;
                   }    
       Dsa_Process();
       if (dsa_mode != DSA_T_SYNC) {
           while(dsa_mode != DSA_IDLE) Dsa_Process();
       }
       
       if(gbSysState.Main != STATE_VCD) dsa_receive_flag=0;

       if(dsa_receive_flag)
       {

       #ifdef SUPPORT_DSA_RESET
           bDsafirst=0;
           gbDsaReset=0;
       #endif
           //==========================
           tempdsa[0] = LOBYTE(dsa_in_data);
           tempdsa[1] = HIBYTE(dsa_in_data);
           #if (LCD_DEVICE == LCD_PD16311)
           if(tempdsa[1] == 0x83)
           {
               if(!tempdsa[0])
               {
                   for(i = 0; i < IconMap_Max; i++)
                       LCD_ShowSeg(0, IconMapTab[i]);
               } else {
                   i = (tempdsa[0] & 0x3f) - 1;
                   if(i < IconMap_Max)
                       LCD_ShowSeg(1 - (tempdsa[0] >> 7), IconMapTab[i]);            
                   if(IconMapTab[i] == LCD_SEG_CD)
                       MuteEn=0x01;
                   else if(IconMapTab[i] == LCD_SEG_MP3)
                       MuteEn=0x02;
               }
           }
           else if(tempdsa[1] == 0x82)
           {
               if(tempdsa[0] < 3)
               {
                   LCD_ClearBlink(LCD_BLINK_MSG);
                   gbMsgPtr = 0;
                   bDispMode = 0;
               }
               if(!tempdsa[0]) LCD_ShowChar(LCD_ALL_SPACE);
               else if(tempdsa[0] == 2) bDispMode = 1;
               else if(tempdsa[0] == 1) bDispMode = 0;
           }
           else if(tempdsa[1] == 0x81)
           {
               if(!tempdsa[0])
               {
                   for(i = 0; i < 9; i++)
                       LCD_PrintDigital(i, LCD_SPACE);
                    LCD_WriteData(0x40,MAX_LCD_BUF_NUM);
                   LCD_ShowSeg(0, LCD_SEG_COL);
               }
           }
           else if(tempdsa[1] == 0x80)
           {
               gbLCDMsg[0] = tempdsa[0];
               gbLCDMsg[tempdsa[0] + 1] = 0;
           }
           else if(tempdsa[1] == 0xc8)
           {
               if(tempdsa[0] < 2) bCDPlayState = tempdsa[0];
               #ifdef SUPPORT_POWER_OFF
               else if(tempdsa[0] == 0xff) POWER_OFF = 0;
               #endif
           }else if((tempdsa[1] >= 0x90) && (tempdsa[1] <= 0xb7)){
               i = tempdsa[1] - 0x90 + 1;
               gbLCDMsg[i] = tempdsa[0];
               if(!LCD_IsShowMsg() && (i >= gbLCDMsg[0])){
        LCD_ShowMsg(&gbLCDMsg[1], 1);
               }

           }else if((tempdsa[1] >= 0x84) && (tempdsa[1] <= 0x8f)){
                   i=tempdsa[1]-0x84;
               if((tempdsa[0] >= '0') && (tempdsa[0] <= '9'))
                   tempdsa[0] -= '0';
               else if((tempdsa[0] >= 'A') && (tempdsa[0] <= 'Z'))
                   tempdsa[0] -= ('A' - 10);
               else if(tempdsa[0] == ' ') tempdsa[0] = LCD_SPACE;
               else if(tempdsa[0] == '-') tempdsa[0] = LCD_DASH;
               else if(tempdsa[0] == 'o') tempdsa[0] = LCD_o;
               else tempdsa[0] = LCD_SPACE;
               LCD_PrintDigital(i, tempdsa[0]);
                LCD_WriteData(0x40,MAX_LCD_BUF_NUM);

           }

           else if(tempdsa[1] == 0x01){
               if(!tempdsa[0]){
                   ClearIdleTimer1();
                   }            
           }
           else if(tempdsa[1] == 0x02){
               if(!tempdsa[0]){
                   SetIdleTimer1(SYS_1min);
                   }            
           }            

           
           #endif
/*-----------------------------------------------------*/

           dsa_receive_flag = 0;
       }

       if(bDispRefresh&&gbSysState.Main==STATE_VCD)
       {
       #ifndef SUPPORT_MULTIDISC
           if(LOADER){
               LCD_Reset(0);
               LCD_ShowString("OPEN",0);                
               bDispRefresh=0;
               continue;
               }
       #endif    
           #ifdef SUPPORT_MULTIDISC
           gwLCDBlinkFlag &= LCD_BLINK_DISC;
           #else
           gwLCDBlinkFlag = 0;
           #endif
           #ifdef SUPPORT_IR
           gbNumber = 0;
           #endif
           #ifdef SUPPORT_CLOCK
           ClockSetRefresh();
           #endif
           

            write_data_to_dsabuf(0xab00);
           #if (LCD_DEVICE == LCD_PD16311)
           #if defined(MODE_VCD1000) || defined(MODE_V3)
           if(bClear){    
               #if 0
               LCD_ShowString(mbTmpBuf, 0);
               LCD_ShowString(&gbLCDMsg[1],0);
               bClear=0;
               gbMsgPtr = 0;
               bShiftEnd = 1;
               if(gbSysState.Main == STATE_VCD)
                   write_data_to_dsabuf(0xc0f0);
                #endif
               bClear=0;
               gbMsgPtr = 0;
               bShiftEnd = 1;
               if(gbSysState.Main == STATE_VCD)
                   write_data_to_dsabuf(0xc0f0);        
               }
           if((bMuteOff)&&(!gbDispTimer)){
           }        
           #endif
           #else
           #if defined(MODE_VCD367)
           LCD_ShowSeg(bCol, LCD_SEG_COL);
           for(i = 0; i < 8; i++) LCD_PrintDigital(i, mbTmpBuf[i]);
           for(i = 0; i < MAX_LCD_BUF_NUM; i++) LCD_WriteData(i,gpbLCDBuf[i]);
           #endif
           #endif

           bDispRefresh = 0;
       }
   }
}


#ifdef SUPPORT_LOADER_CONTROL
BYTE idata gbLoadState = 15;
BIT bOpenClose = 1;
BIT bOpenOK = 0;
BIT bCloseOK = 0;
void Polling_Loader(void)
{
   switch(gbLoadState)
   {
       case 10: // open
           LOAD_OPEN = 1;
           #if defined(MODE_DVDH045)
           LOAD_CLOSE = 1;
           #else
           LOAD_CLOSE = 0;
           #endif
           bOpenOK = 0;
           bCloseOK = 0;
           gbLoadState++;
           break;
       case 11:
           #if defined(MODE_DVDH045)
           LOAD_CLOSE = 0;
           #endif
           #if defined(MODE_V3)
           
           if(!OPEN_LIMIT)
           #endif
           {
               LOAD_OPEN = 0;
               gbLoadState = 0;
               bOpenOK = 1;
               #if !defined(MODE_DVDH045) && !defined(MODE_V3)
               if(gbSysState.Main == STATE_VCD)
                   write_data_to_dsabuf(0xd100);
               #endif
           }
           break;

       case 15: // close
           #if defined(MODE_DVDH045)
           LOAD_OPEN = 1;
           #else
           LOAD_OPEN = 0;
           #endif
           LOAD_CLOSE = 1;
           bOpenOK = 0;
           bCloseOK = 0;
           gbLoadState++;
           break;
       case 16:
           #if defined(MODE_DVDH045)
           LOAD_OPEN = 0;
           #endif
           #if defined(MODE_V3)
           
           if(!CLOSE_LIMIT)
           #endif
           {
               LOAD_CLOSE = 0;
               gbLoadState = 0;
               bCloseOK = 1;
               #if !defined(MODE_DVDH045) && !defined(MODE_V3)
               if(gbSysState.Main == STATE_VCD)
                   write_data_to_dsabuf(0xd100 + (((BYTE)bOpenClose) << 4));
               #endif
               #if defined(MODE_V3)
               if(CloseWaiting)
               {
                   if(CloseWaiting == 1)
                   {
                       SetSysMainState(STATE_STANDBY);
                   }
                   else if (CloseWaiting == 2)
                   {
                       GetSysState(STATE_TUNER);
                   }
                   else if (CloseWaiting == 3)
                   {
                       GetSysState(STATE_AUX);
                   }
                   
                   CloseWaiting = 0;
               }
               #endif
           }
           break;

       default:
           LOAD_OPEN = 0;
           LOAD_CLOSE = 0;
           gbLoadState = 0;
           break;
   }
}
#endif
本帖最近评分记录: 1 条评分