📄 cd.c
字号:
{
CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
CD.DispMode=CD_DISP_COMMUNICATION_ERROR;
CD.F_DispReq=1;
CD.WorkTimer1s=3;
}
}
break;
case CD_WORKMODE_POWER_ON_PLAY:
if(CD.F_NewPlayMode)
{
CD.F_NewPlayMode=0;
if((CD.CD_CIS_0_0_9 && (CD.PlayMode==CD_PLAY_PLAY) && ((CD.PlayMode_PAR2&0x01)==0x00))
|| (CD.CD_CIS_3_25 && (CD.PlayMode==CD_PLAY_PLAY)))
{
if(System.FWorkMode.Current==WORKMODE_DISC)
CDSendCommand(CD_CMD_REQ_DISCTYPE);
//*----------NOT Supported the device file request now---------
else if(System.FWorkMode.Current==WORKMODE_USB)
CDSendCommand(CD_CMD_REQ_USBFILETYPE);
else if(System.FWorkMode.Current==WORKMODE_SD)
CDSendCommand(CD_CMD_REQ_SDFILETYPE);
//-------------------------------------------------------*/
CD.WorkMode=CD_WORKMODE_IDLE;
CD.DispMode=CD_DISP_NORMAL;
CD.DispSubMode=CD_DISP_FILENAME;
CD.F_DispReq=1;
}
}
else
{
if(CD.WorkTimer1s>0)
{
if(F_HalfSecondOut)
{
if((CD.PlayMode!=CD_PLAY_PLAY)&&!(CD.PlayMode== CD_PLAY_ACCESS&&CD.PlayMode_PAR2==CD_PLAY_ACCESS_PLAY))
if(CD.PlayMode!=CD_PLAY_PLAY)
CDSendCommand(CD_CMD_PLAY);
else
CDSendCommand(CD_CMD_REQ_PLAYERSTATE);
}
}
else
{
CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
CD.DispMode=CD_DISP_COMMUNICATION_ERROR;
CD.F_DispReq=1;
CD.WorkTimer1s=3;
#ifdef DEBUG_SCI_ENABLE
SCI_SendString("COMMUINCATION ERROR");
#endif
}
}
break;
case CD_WORKMODE_GETFILENAME:
CDSendCommand(CD_CMD_REQ_CURRENTFILENAME);
CD.WorkMode=CD_WORKMODE_GETTEXTINFO;
CD.WorkTimer10ms=2;
break;
case CD_WORKMODE_GETTEXTINFO:
if(CD.WorkTimer10ms>0)break;
CDSendCommand(CD_CMD_REQ_CURRENTTEXTINFO);
CD.WorkMode=CD_WORKMODE_IDLE;
//CD.WorkTimer10ms=3;
break;
}
}
void CDSendCommand(unsigned int command)
{
unsigned char i;
if(CD.SendCommandNum>5)return;
if(CD.SendCommandNum>0)
{
for(i=CD.SendCommandNum;i>0;i--)
{
CD.SendCommand[i]=CD.SendCommand[i-1];
}
}
CD.SendCommandNum++;
CD.SendCommand[0]=command;
CDSendBuffUpdate();
}
void CDSendBuffUpdate(void)
{
UCharInt temp;
switch(CD.SendCommand[CD.SendCommandNum-1])//first into buffer, first handle
{
case CD_CMD_NO:
break;
case CD_CMD_LOADDISC:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x03;
break;
case CD_CMD_EJECTDISC:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x04;
break;
case CD_CMD_PLAY:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x05;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_PAUSE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x0A;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_POWEROFF:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x01;
break;
case CD_CMD_STOP:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x02;
break;
case CD_CMD_REQ_STATE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
CD.SendBuff[3]=0xFF;
break;
case CD_CMD_REQ_POWERSTATE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
CD.SendBuff[3]=0x01;
break;
case CD_CMD_REQ_PLAYERSTATE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_REQ_LOADERSTATE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
CD.SendBuff[3]=0x04;
break;
case CD_CMD_REQ_INSERTSTATE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x08;
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x10;
break;
case CD_CMD_REQ_ERRORSTATE:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x10;
CD.SendBuff[3]=0x20;
}
break;
case CD_CMD_NEXT_FILE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x17;
CD.SendBuff[3]=0x01;
break;
case CD_CMD_PREVIOUS_FILE:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x18;
CD.SendBuff[3]=0x01;
break;
case CD_CMD_NEXT_DIR:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x17;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_PREVIOUS_DIR:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x18;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_INT_ON:
CD.SendBuff[0]=7;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
//CD.SendBuff[3]=0x10;//cis0.08
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x12;//cis0.09
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x10;
CD.SendBuff[4]=0x02;
CD.SendBuff[5]=0x0A;
CD.SendBuff[6]=0x0;
break;
case CD_CMD_SHF_ON:
CD.SendBuff[0]=7;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
//CD.SendBuff[3]=0x10;//cis0.08
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x12;//cis0.09
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x10;
CD.SendBuff[4]=0x02;
CD.SendBuff[5]=0x0;
CD.SendBuff[6]=0x1;
break;
case CD_CMD_RPT_ON:
CD.SendBuff[0]=7;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
//CD.SendBuff[3]=0x10;//cis0.08
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x12;//cis0.09
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x10;
CD.SendBuff[4]=0x02;
CD.SendBuff[5]=0x0;
CD.SendBuff[6]=0x2;
break;
case CD_CMD_INTSHFRPT_OFF:
CD.SendBuff[0]=7;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
//CD.SendBuff[3]=0x10;//cis0.08
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x12;//cis0.09
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x10;//cis0.09
CD.SendBuff[4]=0x02;
CD.SendBuff[5]=0x0;
CD.SendBuff[6]=0x0;
break;
case CD_CMD_FAST_FF:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x0B;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_FAST_FB:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x0C;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_REQ_DISCTYPE:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x01;
break;
case CD_CMD_REQ_USBFILETYPE:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x23;
CD.SendBuff[3]=0x01;
}
break;
case CD_CMD_REQ_SDFILETYPE:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x23;
CD.SendBuff[3]=0x02;
}
break;
case CD_CMD_SOURCE_TO_DISC:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x26;
CD.SendBuff[3]=0x1;
break;
case CD_CMD_SOURCE_TO_USB:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x26;
CD.SendBuff[3]=0x02;
break;
case CD_CMD_SOURCE_TO_SD:
CD.SendBuff[0]=4;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x26;
CD.SendBuff[3]=0x3;
break;
case CD_CMD_REQ_CURRENTSOURCE:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x22;
break;
case CD_CMD_REQ_CURRENTFILENAME:
CD.SendBuff[0]=8;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x48;
temp.Dbyte = CD.AbsFileNum;
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[3] = temp.byte[0];
CD.SendBuff[4] = temp.byte[1];
CD.SendBuff[5]=0;
}
if(CD.CD_CIS_3_25)
{
CD.SendBuff[3] = CD.CurrentSource;
CD.SendBuff[4] = 0;
CD.SendBuff[5] = 0;
CD.SendBuff[6] = 0;
/* we assume the max value of the member filename in the cd struct is 50*/
CD.SendBuff[7] = 50;
}
break;
case CD_CMD_REQ_CURRENTDIRNAME:
CD.SendBuff[0]=6;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x48;
CD.SendBuff[3]=0;//current
if(CD.CD_CIS_0_0_9)
CD.SendBuff[4]=0;
if(CD.CD_CIS_3_25)
CD.SendBuff[4]=2;
//CD.SendBuff[3]=CD.AbsFileNum&&0x00ff;
//CD.SendBuff[4]=CD.AbsFileNum>>8&&0x00ff;
if(CD.CD_CIS_0_0_9)
CD.SendBuff[5]=1;
if(CD.CD_CIS_3_25)
CD.SendBuff[5]=0;
break;
case CD_CMD_REQ_CURRENTTEXTINFO:
CD.SendBuff[0]=9;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x45;
CD.SendBuff[3]=0;//current
CD.SendBuff[4]=0;
CD.SendBuff[5]=0;
CD.SendBuff[6]=0xff;
if(System.FWorkMode.Current==WORKMODE_DISC)
CD.SendBuff[7]=1;
else if(System.FWorkMode.Current==WORKMODE_USB)
CD.SendBuff[7]=2;
else if(System.FWorkMode.Current==WORKMODE_SD)
CD.SendBuff[7]=3;
CD.SendBuff[8]=50;
break;
case CD_CMD_REQ_START_TOC:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x03;
CD.SendBuff[2]=0x27;
}
break;
case CD_CMD_WRAP:
CD.SendBuff[0]=6;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
if(CD.CD_CIS_0_0_9)
CD.SendBuff[3]=0x11;//config wrap enable
if(CD.CD_CIS_3_25)
CD.SendBuff[3]=0x0f;//config wrap enable
CD.SendBuff[4]=0x01;
CD.SendBuff[5]=~CD.F_WrapEnable;
break;
case CD_CMD_MEDIAIFOR_SETTING:
CD.SendBuff[0] = 6;
CD.SendBuff[1] = 0x02;
CD.SendBuff[2] = 0x01;
CD.SendBuff[3] = 0x0a;
CD.SendBuff[4] = 0x01;
CD.SendBuff[5] = 0x19;
break;
//===============Only for test=============//
case CD_CMD_CHECK_MEMORY:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=6;
CD.SendBuff[1]=0x02;
CD.SendBuff[2]=0x01;
CD.SendBuff[3]=0x1C;
CD.SendBuff[4]=0x01;
CD.SendBuff[5]=0x10;//0x01---SDRAM check; 0x10---FLASH check
}
break;
case CD_CMD_REQ_MECHPARA:
if(CD.CD_CIS_0_0_9)
{
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x12;
}
break;
//=====================================//
case CD_CMD_REQ_VERSION:
CD.SendBuff[0]=3;
CD.SendBuff[1]=0x01;
CD.SendBuff[2]=0x01;
break;
}
}
void CDDecodeData(void)
{
unsigned char i,j;
UCharInt temp;
if(!CD.F_ReadNewData)return;
CD.F_ReadNewData=0;
#if 0 //def DEBUG_SCI_ENABLE
SCI_SendPromter("CD VERSION",CD.Version[0],9);
#endif
switch(CD.ReadBuff[1])
{
case DEVICE_MSG_GROUP:
switch(CD.ReadBuff[2])
{
case MSG_PRODUCTID:
for(i=0;i<9;i++)
CD.Version[i]=CD.ReadBuff[3+i];
break;
case MSG_CFGTABLE:
switch(CD.ReadBuff[3])
{
case 17://wrap
if(CD.CD_CIS_0_0_9)
{
if((CD.ReadBuff[5]&0x1)==1)
CD.F_WrapEnable=1;
else
CD.F_WrapEnable=0;
}
if(CD.CD_CIS_3_25)
{
if((CD.ReadBuff[5]&0x1)!=0)
CD.SubPlayMode=CD_SUBPLAY_SHF;
if((CD.ReadBuff[5]&0x2)!=0)
CD.SubPlayMode=CD_SUBPLAY_RPT;
}
break;
case 18://playmode
if(CD.CD_CIS_0_0_9)
{
if(CD.ReadBuff[5]!=0)
CD.SubPlayMode=CD_SUBPLAY_INT;
if(CD.ReadBuff[4]!=1)//length>1
{
if((CD.ReadBuff[6]&0x1)!=0)
CD.SubPlayMode=CD_SUBPLAY_SHF;
if((CD.ReadBuff[6]&0x2)!=0)
CD.SubPlayMode=CD_SUBPLAY_RPT;
}
}
break;
case 19://automode
if(CD.CD_CIS_0_0_9)
{
if((CD.ReadBuff[5]&0x1)!=0)
CD.SubPlayMode=CD_SUBPLAY_SHF;
if((CD.ReadBuff[5]&0x2)!=0)
CD.SubPlayMode=CD_SUBPLAY_RPT;
}
break;
case 0x0F://wrap
if(CD.CD_CIS_3_25)
{
if((CD.ReadBuff[5]&0x1)==1)
CD.F_WrapEnable=1;
else
CD.F_WrapEnable=0;
}
break;
case 0x10://playmode
if(CD.CD_CIS_3_25)
{
if(CD.ReadBuff[5]!=0)
CD.SubPlayMode=CD_SUBPLAY_INT;
if(CD.ReadBuff[4]!=1)//length>1
{
if((CD.ReadBuff[6]&0x1)!=0)
CD.SubPlayMode=CD_SUBPLAY_SHF;
if((CD.ReadBuff[6]&0x2)!=0)
CD.SubPlayMode=CD_SUBPLAY_RPT;
}
}
break;
}
break;
case MSG_VERIFYMEMORY:
break;
case MSG_MECHPARA:
break;
}
break;
case PLAYER_MSG_GROUP:
switch(CD.ReadBuff[2])
{
case MSG_POWERMODE:
switch(CD.ReadBuff[3])
{
case 0://power off
if(CD.WorkMode==CD_WORKMODE_POWER_OFF_WAIT)
CD.WorkMode=CD_WORKMODE_POWER_OFF_WAIT2;
break;
case 1:
CD.PowerMode=CD_POWER_STANDBY;
break;
case 2:
CD.PowerMode=CD_POWER_INIT;
CD.PowerTimer10ms=10;
break;
case 0x0F:
CD.PowerMode=CD_POWER_NORMAL;
break;
case 0xFF://going to power off
break;
}
break;
case MSG_PLAYERMODE:
CD.PlayMode=CD.ReadBuff[3];
CD.PlayMode_PAR2=CD.ReadBuff[4];
CD.F_NewPlayMode=1;
CD.F_DispReq=1;
break;
case MSG_LOADERMODE:
CD.LoaderMode=CD.ReadBuff[3];
CD.LoaderMode_PAR2=CD.ReadBuff[4];
CD.F_NewLoaderMode=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -