/*
** 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