⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd.c

📁 ST72321 control tuner(FST) and CD servo (STA1052).
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -