📄 cd.c
字号:
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]=6;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x48;
//CD.SendBuff[3]=CD.AbsFileNum&&0x00ff;
//CD.SendBuff[4]=CD.AbsFileNum>>8&&0x00ff;
CD.SendBuff[3]=0;//current
CD.SendBuff[4]=0;
CD.SendBuff[5]=0;
break;
case CD_CMD_REQ_CURRENTDIRNAME:
CD.SendBuff[0]=6;
CD.SendBuff[1]=0x04;
CD.SendBuff[2]=0x48;
CD.SendBuff[3]=0;//current
CD.SendBuff[4]=0;
//CD.SendBuff[3]=CD.AbsFileNum&&0x00ff;
//CD.SendBuff[4]=CD.AbsFileNum>>8&&0x00ff;
CD.SendBuff[5]=1;
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:
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;
CD.SendBuff[3]=0x11;//config wrap enable
CD.SendBuff[4]=0x01;
CD.SendBuff[5]=~CD.F_WrapEnable;
break;
//===============Only for test=============//
case CD_CMD_CHECK_MEMORY:
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:
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;
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.ReadBuff[5]&0x1)==1)
CD.F_WrapEnable=1;
else
CD.F_WrapEnable=0;
break;
case 18://playmode
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.ReadBuff[5]&0x1)!=0)
CD.SubPlayMode=CD_SUBPLAY_SHF;
if((CD.ReadBuff[5]&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;
CD.DISCFlag.byte=0;
switch(CD.LoaderMode)
{
case CD_LODER_NODISC:
CD.NoDISC=1;
if(System.FWorkMode.Current == WORKMODE_DISC)
{
CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
CD.WorkTimer1s=1;
}
break;
case CD_LODER_EJECT_POS:
case CD_LODER_EJECTING:
CD.DISC_EJect=1;
break;
case CD_LODER_INSERTING:
CD.DISC_Insert=1;
if((System.FWorkMode.Current != WORKMODE_DISC)&&(System.PowerMode==POWERMODE_POWERON)&&CD.InitTimer1s==0)
{
ChangeFWorkmode(WORKMODE_DISC);
F_MuteKey=0;
}
break;
case CD_LODER_STOP_POS:
CD.DISC_Ready=1;
if(CD.WorkMode==CD_WORKMODE_IDLE&&System.FWorkMode.Current == WORKMODE_DISC)
CD.WorkMode=CD_WORKMODE_DISC;//Yete: May-22-2007 ----Fixed for auto-play after loading when in disc mode
break;
case CD_LODER_DISC_BLOCKED:
CD.DISC_Block=1;
break;
}
break;
case MSG_INSERTMODE:
CD.InsertMode=CD.ReadBuff[3];
CD.InsertMode_PAR2=CD.ReadBuff[4];
CD.F_NewInsertMode=1;
switch(CD.InsertMode)
{
case CD_INSERT_NOUSB:
CD.NoUSB=1;
CD.USB_Ready=0;
/*if(System.FWorkMode.Current == WORKMODE_USB)
{
CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
CD.WorkTimer1s=1;
}*/
break;
case CD_INSERT_USB:
CD.NoUSB=0;
CD.USB_Ready=0;
switch(CD.InsertMode_PAR2)
{
case CD_INSERT_USB_INSERT_PLUGGING:
/*if((System.FWorkMode.Current !=WORKMODE_USB)&&(System.PowerMode==POWERMODE_POWERON)&&(CD.PlayMode==CD_PLAY_PLAY))
{
CDSendCommand(CD_CMD_STOP);//for avoid not receiving the ready flag during playing
}
break;*/
case CD_INSERT_USB_INSERT_READY:
CD.USB_Ready=1;
if(System.FWorkMode.Current !=WORKMODE_USB&&CD.InitTimer1s==0)
{
ChangeFWorkmode(WORKMODE_USB);
F_MuteKey=0;
}
break;
case CD_INSERT_USB_INSERT_UNKNOWN:
case CD_INSERT_USB_INSERT_ERROR:
break;
}
break;
case CD_INSERT_NOSD:
CD.NoSD=1;
CD.SD_Ready=0;
/*if(System.FWorkMode.Current == WORKMODE_SD)
{
CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
CD.WorkTimer1s=1;
}*/
break;
case CD_INSERT_SD:
CD.NoSD=0;
CD.SD_Ready=0;
switch(CD.InsertMode_PAR2)
{
case CD_INSERT_SD_INSERT_PLUGGING:
/*if((System.FWorkMode.Current !=WORKMODE_SD)&&(System.PowerMode==POWERMODE_POWERON)&&(CD.PlayMode==CD_PLAY_PLAY))
{
CDSendCommand(CD_CMD_STOP);//for avoid not receiving the ready flag during playing
}
break;*/
case CD_INSERT_SD_INSERT_READY:
CD.SD_Ready=1;
if(System.FWorkMode.Current !=WORKMODE_SD&&CD.InitTimer1s==0)
{
ChangeFWorkmode(WORKMODE_SD);
F_MuteKey=0;
}
break;
case CD_INSERT_SD_INSERT_UNKNOWN:
case CD_INSERT_SD_INSERT_ERROR:
break;
}
break;
}
break;
case MSG_ERRORMODE:
CD.ErrorMode=CD.ReadBuff[3];
break;
}
break;
case MEDIA_MSG_GROUP:
switch(CD.ReadBuff[2])
{
case MSG_DISCTYPE:
CD.DiscType=CD.ReadBuff[3];
CD.F_DispReq=1;
break;
case MSG_TIMEINFO:
//cis009
temp.byte[0]=CD.ReadBuff[3];
temp.byte[1]=CD.ReadBuff[4];
if(CD.AbsFileNum!=temp.Dbyte&&CD.WorkMode==CD_WORKMODE_IDLE)
CD.WorkMode=CD_WORKMODE_GETFILENAME;
CD.AbsFileNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[5];
temp.byte[1]=CD.ReadBuff[6];
CD.DirNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[7];
temp.byte[1]=CD.ReadBuff[8];
CD.RelFileNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[9];
temp.byte[1]=CD.ReadBuff[10];
CD.PlayMin=temp.Dbyte;
CD.PlaySec=CD.ReadBuff[11];
//cis008
/*temp.byte[0]=CD.ReadBuff[3];
temp.byte[1]=CD.ReadBuff[4];
if(CD.AbsFileNum!=temp.Dbyte&&CD.WorkMode==CD_WORKMODE_IDLE)
CD.WorkMode=CD_WORKMODE_GETFILENAME;
CD.AbsFileNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[5];
temp.byte[1]=CD.ReadBuff[6];
CD.RelFileNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[7];
temp.byte[1]=CD.ReadBuff[8];
CD.PlayMin=temp.Dbyte;
CD.PlaySec=CD.ReadBuff[9];*/
CD.F_DispReq=1;
break;
case MSG_CURRENTSOURCE:
CD.CurrentSource = CD.ReadBuff[3];
CD.F_DispReq=1;
break;
case MSG_DEVICEFILETYPE:
CD.DeviceType=CD.ReadBuff[4];
CD.F_DispReq=1;
break;
case MSG_TEXTINFO:
if(CD.ReadBuff[10]>2)break;//only handle 1 number msg
switch(CD.ReadBuff[6])
{
case 0:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.AlbumTitle[i]=CD.ReadBuff[i+11];
CD.AlbumTitle[i]=0;
break;
case 1:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.TrackTitle[i]=CD.ReadBuff[i+11];
CD.TrackTitle[i]=0;
break;
case 2:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.TrackArtist[i]=CD.ReadBuff[i+11];
CD.TrackArtist[i]=0;
break;
case 3:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.Genre[i]=CD.ReadBuff[i+11];
CD.Genre[i]=0;
break;
case 4:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.Year[i]=CD.ReadBuff[i+11];
CD.Year[i]=0;
break;
case 5:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.Comment[i]=CD.ReadBuff[i+11];
CD.Comment[i]=0;
break;
case 6:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.DiscArtist[i]=CD.ReadBuff[i+11];
CD.DiscArtist[i]=0;
break;
case 7:
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.DiscTitle[i]=CD.ReadBuff[i+11];
CD.DiscTitle[i]=0;
break;
}
CD.Anibegin=1;
CD.F_DispReq=1;
break;
case MSG_ENTRYNAME:
switch(CD.ReadBuff[5])
{
case 0:
for(i=0;i+6<CD.ReadBuff[0];i++)
CD.CurrentFileName[i]=CD.ReadBuff[i+6];
CD.CurrentFileName[i]=0;
CD.Anibegin=1;
break;
case 1:
for(i=0;i+6<CD.ReadBuff[0];i++)
CD.CurrentDirectory[i]=CD.ReadBuff[i+6];
CD.CurrentDirectory[i]=0;
break;
}
break;
CD.F_DispReq=1;
}
break;
//case CD_GROUP_FILE_REQUEST:
// break;
}
}
void CDSendAndRead(void)
{
if(Pin_CD_CRQ)
{
if(CD.SendCommandNum==0||CD.ReadingTimer10ms>0)return;
if(CD.PowerMode==CD_POWER_STANDBY || CD.PowerMode==CD_POWER_NORMAL)
CDSendData();
CD.SendCommandNum--;
if(CD.SendCommandNum)
CDSendBuffUpdate();
}
else
{
if(CD.PowerMode==CD_POWER_OFF || CD.PowerMode==CD_POWER_OFF_TO_STANDBY_REQ)return;
CDReadData();
CD.ReadingTimer10ms=10;
}
}
void CDSendData(void)
{
unsigned char i,TempCS;
#ifdef HWI2C_ENABLE
TempCS=0x5A;
for(i=1;i<CD.SendBuff[0];i++)
{
TempCS+=CD.SendBuff[i];
}
CD.SendBuff[i]=TempCS;
HWI2CSendData(0xE0,CD.SendBuff);
while(HWI2CMode);
#else
asm sim;
I2C2Start();
I2C2Out8Bit(0xE0);
I2C2Out8Bit(CD.SendBuff[0]);
TempCS=0x5A;
for(i=1;i<CD.SendBuff[0];i++)
{
I2C2Out8Bit(CD.SendBuff[i]);
TempCS+=CD.SendBuff[i];
}
CD.SendBuff[i]=TempCS;
I2C2Out8Bit(CD.SendBuff[i]);
I2C2Stop();
asm rim;
#endif
}
void CDReadData(void)
{
unsigned char i,TempCS;
CD.F_ReadNewData=1;
#ifdef HWI2C_ENABLE
HWI2CReadData(0xE1,CD.ReadBuff);
while(HWI2CMode);
TempCS=0x5A;
for(i=1;i<CD.ReadBuff[0];i++)
{
TempCS+=CD.ReadBuff[i];
}
#else
asm sim;
I2C2Start();
I2C2Out8Bit(0xE1);
CD.ReadBuff[0]=I2C2In8Bit();
I2C2Ack();
TempCS=0x5A;
for(i=1;i<CD.ReadBuff[0];i++)
{
CD.ReadBuff[i]=I2C2In8Bit();
I2C2Ack();
TempCS+=CD.ReadBuff[i];
}
CD.ReadBuff[i]=I2C2In8Bit();
I2C2NAck();
I2C2Stop();
asm rim;
#endif
if(TempCS!=CD.ReadBuff[CD.ReadBuff[0]])
{
for(i=0;i<CD.ReadBuff[0];i++)
CD.ReadBuff[i+1]=0;
CD.ReadBuff[0]=0;
CD.F_ReadNewData=0;
}
}
void CDMute(unsigned char type)
{
AudioMute(type);
}
void CD10msTimer(void)
{
if(CD.PowerTimer10ms>0)CD.PowerTimer10ms--;
if(CD.ReadingTimer10ms>0)CD.ReadingTimer10ms--;
if(CD.WorkTimer10ms>0)CD.WorkTimer10ms--;
}
void CD1sTimer(void)
{
if(CD.WorkTimer1s>0)CD.WorkTimer1s--;
if(CD.InitTimer1s>0)CD.InitTimer1s--;
}
void CDPowerOn(void)
{
CD.WorkMode=CD_WORKMODE_POWER_ON_REQ;
CD.InitTimer1s=25;
CD.DISCFlag.byte=0;
CD.USBFlag.byte=0;
CD.SDFlag.byte=0;
}
void CDPowerOff(void)
{
CD.WorkMode=CD_WORKMODE_POWER_OFF_REQ;
}
void CDReset(void)
{
unsigned char i;
Pin_CD_RESET=0;
for (i=0; i<100; i++)
{
Wait10us(4);
}
Pin_CD_RESET=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -