📄 cd.c
字号:
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=3;
}
break;
case CD_LODER_EJECT_POS:
case CD_LODER_EJECTING:
CD.DISC_EJect=1;
if(System.FWorkMode.Current == WORKMODE_DISC)
CD.WorkMode = CD_WORKMODE_DISC;
break;
case CD_LODER_INSERTING:
CD.DISC_Insert=1;
if(System.PowerMode!=POWERMODE_POWERON) return;
if(System.FWorkMode.Current == WORKMODE_DISC)
CD.WorkMode = CD_WORKMODE_DISC;
else if(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)
// if(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;
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(CD.InitTimer1s==0)
{
if(System.FWorkMode.Current !=WORKMODE_USB)
{
ChangeFWorkmode(WORKMODE_USB);
F_MuteKey=0;
}
else
CD.WorkMode = CD_WORKMODE_USB;
}
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;
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(CD.InitTimer1s==0)
{
if(System.FWorkMode.Current !=WORKMODE_SD)
{
ChangeFWorkmode(WORKMODE_SD);
F_MuteKey=0;
}
else
CD.WorkMode = CD_WORKMODE_SD;
}
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:
//if(CD.CD_CIS_0_0_9)
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)
{
if(CD.ReadBuff[12]==0)
CD.F_DispText = 0;
else
{
CD.WorkMode=CD_WORKMODE_GETFILENAME;
TextIndex = 0;
CD.F_DispText = 0;
}
}
CD.AbsFileNum=temp.Dbyte;
temp.byte[0]=CD.ReadBuff[5];
temp.byte[1]=CD.ReadBuff[6];
CD.DirNum=temp.Dbyte;
if(CD.CD_CIS_0_0_9)
{
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];
CD.MediaType = CD.ReadBuff[12];
}
if(CD.CD_CIS_3_25)
{
CD.PlayHour = CD.ReadBuff[7];
CD.PlayMin=CD.ReadBuff[8];
CD.PlaySec=CD.ReadBuff[9];
CD.MediaType = CD.ReadBuff[10];
CD.CurrentSource = CD.ReadBuff[11];
}
CD.F_DispReq=1;
break;
case MSG_CURRENTSOURCE:
CD.CurrentSource = CD.ReadBuff[3];
CD.F_DispReq=1;
break;
case MSG_DEVICEFILETYPE:
if(CD.CD_CIS_0_0_9)
{
CD.DeviceType=CD.ReadBuff[4];
CD.F_DispReq=1;
}
break;
case MSG_TEXTINFO:
if(CD.ReadBuff[10]>2)break;//only handle 1 number msg
CD.F_DispText = 1;
switch(CD.ReadBuff[6])
{
case 0:
CopyString(CD.AlbumTitle,"Album - ");
for(i=0;i+11<(CD.ReadBuff[0]>53?53:CD.ReadBuff[0]);i++)
CD.AlbumTitle[i+8]=CD.ReadBuff[i+11];
CD.AlbumTitle[i+8]=0;
CD.AlbumLength = i+8;
break;
case 1:
CopyString(CD.TrackTitle,"Title - ");
for(i=0;i+11<(CD.ReadBuff[0]>53?53:CD.ReadBuff[0]);i++)
CD.TrackTitle[i+8]=CD.ReadBuff[i+11];
CD.TrackTitle[i+8]=0;
CD.TitleLength = i+8;
break;
case 2:
CopyString(CD.TrackArtist,"Artist - ");
for(i=0;i+11<(CD.ReadBuff[0]>52?52:CD.ReadBuff[0]);i++)
CD.TrackArtist[i+9]=CD.ReadBuff[i+11];
CD.TrackArtist[i+9]=0;
CD.ArtistLength = i+9;
break;
case 3:
CopyString(CD.Genre,"Genre - ");
for(i=0;i+11<(CD.ReadBuff[0]>33?33:CD.ReadBuff[0]);i++)
CD.Genre[i+8]=CD.ReadBuff[i+11];
CD.Genre[i+8]=0;
CD.GenreLength =i+8;
break;
case 4:
CopyString(CD.Year,"Year - ");
for(i=0;i<4;i++)
CD.Year[i+7]=CD.ReadBuff[i+11];
CD.Year[i+7]=0;
CD.YearLength = 11;
break;
case 5:
CopyString(CD.Comment,"Comment - ");
for(i=0;i+11<(CD.ReadBuff[0]>36?36:CD.ReadBuff[0]);i++)
CD.Comment[i+10]=CD.ReadBuff[i+11];
CD.Comment[i+10]=0;
CD.CmtLength = i+10;
break;
case 6:
CopyString(CD.DiscArtist,"CD Artist - ");
for(i=0;i+11<(CD.ReadBuff[0]>49?49:CD.ReadBuff[0]);i++)
CD.DiscArtist[i+12]=CD.ReadBuff[i+11];
CD.DiscArtist[i+12]=0;
CD.DALength =i+12;
break;
/* case 7:
CopyString(CD.DiscTitle,"CD Title - ");
for(i=0;i+11<CD.ReadBuff[0];i++)
CD.DiscTitle[i+11]=CD.ReadBuff[i+11];
CD.DiscTitle[i+11]=0;
CD.DTLength = i+11;
break;
*/ }
CD.F_DispReq=1;
break;
case MSG_ENTRYNAME:
if(CD.CD_CIS_0_0_9)
{
switch(CD.ReadBuff[5])
{
case 0:
temp.byte[0] = CD.ReadBuff[3];
temp.byte[1] = CD.ReadBuff[4];
EntryName.EntryNr = temp.Dbyte;
EntryName.Type = CD.ReadBuff[5];
EntryName.Length = CD.ReadBuff[0] - 6;
for(i=0;i<EntryName.Length;i++)
EntryName.Text[i] = CD.ReadBuff[i+6];
CD.F_DispText = 1;
/*
case 1:
for(i=0;i+6<CD.ReadBuff[0];i++)
CD.CurrentDirectory[i]=CD.ReadBuff[i+7];
*/ break;
}
break;
}
if(CD.CD_CIS_3_25)
{
/* we ingoned the par3-par8 because we assumed the max value of filename buffer is 50 */
switch(CD.ReadBuff[4])
{
case 0:
temp.byte[0] = CD.ReadBuff[6];
temp.byte[1] = CD.ReadBuff[5];
EntryName.EntryNr = temp.Dbyte;
EntryName.Type = CD.ReadBuff[4];
EntryName.Length = CD.ReadBuff[0] - 9;
for(i=0;i<EntryName.Length;i++)
EntryName.Text[i] = CD.ReadBuff[i+9];
CD.F_DispText = 1;
break;
}
break;
/* if( CD.ReadBuff[4] == 0 )
{
// we ingoned the par3-par8 because we assumed the max value of filename buffer is 50
for(i=0;i+9<CD.ReadBuff[0];i++)
CD.CurrentFileName[i]=CD.ReadBuff[i+9];
CD.CurrentFileName[i]=0;
CD.Anibegin=1;
}
*/
}
CD.F_DispReq=1;
}
break;
//case CD_GROUP_FILE_REQUEST:
// break;
}
}
void CDSendAndRead(void)
{
if(PinIn_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;
#ifdef DEBUG_SCI_ENABLE
SCI_SendPromter("SendCommand",CD.SendBuff[0],1);
#endif
#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();
if(CD.ReadBuff[0]>59)
CD.ReadBuff[0]=59;
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;
#ifdef DEBUG_SCI_ENABLE
SCI_SendPromter("ReceivedCommand",CD.ReadBuff[0],1);
#endif
#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--;
if(RollTimer>0) RollTimer--;
}
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=5;
CD.DISCFlag.byte=0;
CD.USBFlag.byte=0;
CD.SDFlag.byte=0;
}
void CDPowerOff(void)
{
CD.WorkMode=CD_WORKMODE_POWER_OFF_REQ;
}
void CDOn(void)
{
}
void CDOff(void)
{
#if 0
Display(DISP_CLEAR1);
Display(DISP_REFRESH1);
Display(DISP_CLEAR3);
Display(DISP_REFRESH3);
#endif
CD.F_DispText = 0;
}
void CDReset(void)
{
unsigned char i;
Pin_CD_RESET=0;
for (i=0; i<100; i++)
{
Wait10us(4);
}
Pin_CD_RESET=1;
}
void DispText(unsigned char *pStr, unsigned char textlength)
{
unsigned char i,upper,lower;
if(RollTimer!=0) return;
Display(DISP_CLEAR3);
if(CD.F_DispText==0) return;
if(TextIndex>20+textlength)
TextIndex= 0;
/* if(EntryIndex>20+EntryName.Length||EntryName.Length==0)
{
CD.F_DispText= 0;
}
*/ else
{
RollTimer= 50;
if(TextIndex<20)
{
upper = TextIndex;
// p = EntryName.Text;
if(TextIndex<textlength)
lower = 0;
else
lower = TextIndex-textlength;
}
else
{
upper = 20;
pStr=pStr+TextIndex-20;
// p = EntryName.Text + EntryIndex-20;
if(TextIndex<textlength)
lower = 0;
else
lower = TextIndex-textlength;
}
for(i=upper;i>lower;i--)
{
DispBuff[3][20-i] = *pStr++;
}
Display(DISP_REFRESH3);
TextIndex++;
}
}
#endif
#ifdef SINO_MOS
void Temp_Show_Time()
{
if(TempShowTime > 0)
TempShowTime --;
else TempShowTime =2;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -