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

📄 cd.c

📁 ST72321 control tuner(FST) and CD servo (STA1052).
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
	switch(System.FWorkMode.Last)
	{
		case WORKMODE_DISC:
		case WORKMODE_USB:
		case WORKMODE_SD:
			//if(CD.PlayMode!= CD_PLAY_STOP&&!(CD.PlayMode== CD_PLAY_ACCESS&&CD.PlayMode_PAR2==CD_PLAY_ACCESS_STOP))//cis0.8
			if(CD.PlayMode!= CD_PLAY_STOP)//cis0.9
				CDSendCommand(CD_CMD_STOP);
			break;
	}
	switch(CD.WorkMode)
	{
		case CD_WORKMODE_IDLE:
		
			if(System.FWorkMode.Current==WORKMODE_SD&&CD.NoSD)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_NOSD;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			else if(System.FWorkMode.Current==WORKMODE_USB&&CD.NoUSB)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_NOUSB;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			break;
		
		case CD_WORKMODE_POWER_ON_REQ:
			if(CD.PowerMode==CD_POWER_OFF)
				CDPower(OFF_TO_NORMAL);
			else
				CDPower(STANDBY_TO_NORMAL);
			CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_NORMAL;
			break;
		case CD_WORKMODE_POWER_ON_WAIT_NORMAL:
			if(CD.PowerMode==CD_POWER_NORMAL)
			{
				CD.WorkMode=CD_WORKMODE_IDLE;
			}
			break;

		case CD_WORKMODE_POWER_OFF_REQ:
			//if(CD.PlayMode!=CD_PLAY_STOP&&!(CD.PlayMode== CD_PLAY_ACCESS&&CD.PlayMode_PAR2==CD_PLAY_ACCESS_STOP))
			if(CD.PlayMode!=CD_PLAY_STOP)
				CDSendCommand(CD_CMD_STOP);
			CD.WorkMode=CD_WORKMODE_POWER_OFF_WAIT;
			break;
			
		case CD_WORKMODE_POWER_OFF_WAIT:
			if(CD.PowerMode==CD_POWER_NORMAL)
				CDPower(NORMAL_TO_OFF);
			else
				CDPower(STANDBY_TO_OFF);
			CD.WorkMode=CD_WORKMODE_IDLE;
			break;
			
			
		/*
		case CD_WORKMODE_POWER_ON_REQ:
			if(CD.PowerMode==CD_POWER_OFF)
				CDPower(OFF_TO_NORMAL);
			else
				CDPower(STANDBY_TO_NORMAL);
			CD.DispMode=CD_DISP_READING;
			CD.F_DispReq=1;
			CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_NORMAL;
			break;
		case CD_WORKMODE_POWER_ON_WAIT_NORMAL:
			if(CD.PowerMode==CD_POWER_NORMAL)
				CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_LOADER;
			break;
		case CD_WORKMODE_POWER_ON_WAIT_LOADER:
			if(CD.F_NewLoaderMode)
			{
				CD.F_NewLoaderMode=0;
				if(CD.LoaderMode==CD_LODER_NODISC)
				{
					CD.DispMode=CD_DISP_NODISC;
					CD.F_DispReq=1;
					CD.WorkMode=CD_WORKMODE_POWER_WAIT_TO_RETURN;
					CD.PowerTimer10ms=250;
				}				
				else if((CD.LoaderMode==CD_LODER_STOP_POS || CD.LoaderMode==CD_LODER_INSERTING)
					&&CD.WorkReq==POWERON_LOAD_EJECT)
				{
					CD.WorkReq=0;
					CDSendCommand(CD_CMD_EJECTDISC);
					CD.WorkMode=CD_WORKMODE_POWER_WAIT_EJECTPOS;
					CD.PowerTimer10ms=250;
				}
				else if((CD.LoaderMode==CD_LODER_EJECT_POS ||CD.LoaderMode==CD_LODER_EJECTING)
					&&CD.WorkReq==POWERON_LOAD_EJECT)
				{
					CD.WorkReq=0;
					CDSendCommand(CD_CMD_LOADDISC);
					CD.WorkMode=CD_WORKMODE_POWER_WAIT_STOPPOS;
					CD.PowerTimer10ms=250;
				}
				else
				{
					CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_PLAYER;
					CDSendCommand(CD_CMD_SOURCE_TO_DISC);
					CD.DispMode=CD_DISP_DISC_READ;
					CD.F_DispReq=1;
				}
			}
			else
			{
				if(F_HalfSecondOut)
					CDSendCommand(CD_CMD_REQ_STATE);
			}
			break;
		case CD_WORKMODE_POWER_WAIT_EJECTPOS:
			if(CD.LoaderMode==CD_LODER_EJECT_POS)
			{
				CD.WorkMode=CD_WORKMODE_POWER_OFF_REQ;
			}
			break;
		case CD_WORKMODE_POWER_WAIT_STOPPOS:
			if(CD.LoaderMode==CD_LODER_STOP_POS)
			{
				CD.WorkMode=CD_WORKMODE_POWER_OFF_REQ;
			}
			break;
		case CD_WORKMODE_POWER_OFF_REQ:
			//CDSendCommand(CD_CMD_POWEROFF);
			//CDSendCommand(CD_CMD_STOP);
			CD.WorkMode=CD_WORKMODE_POWER_OFF_WAIT;
			break;
		case CD_WORKMODE_POWER_OFF_WAIT:
			if(F_HalfSecondOut)
			{
				if(CD.PlayMode!=CD_PLAY_STOP)
					CDSendCommand(CD_CMD_STOP);
				else
					CD.WorkMode=CD_WORKMODE_POWER_OFF_WAIT2;
			}
			break;
		case CD_WORKMODE_POWER_OFF_WAIT2:
			if(CD.PowerMode==CD_POWER_NORMAL)
				CDPower(NORMAL_TO_OFF);
			else
				CDPower(STANDBY_TO_OFF);
			CD.WorkMode=CD_WORKMODE_IDLE;
			break;
		case CD_WORKMODE_POWER_OFF_REQ:
			CDSendCommand(CD_CMD_STOP);
			CD.WorkMode=CD_WORKMODE_IDLE;
			
		case CD_WORKMODE_POWER_WAIT_TO_RETURN:
			if(CD.PowerTimer10ms>0)break;
			ChangeFWorkmode(WORKMODE_RADIO);
			CD.WorkMode=CD_WORKMODE_IDLE;
			break;
			
		case CD_WORKMODE_ERROR:
			break;
			*/
		case CD_WORKMODE_AUTOCHANGE:
			if(CD.WorkTimer1s>0)break;
			/*switch (System.FWorkMode.Current)
			{
				case WORKMODE_DISC:
					ChangeFWorkmode(WORKMODE_USB);
					break;	
				case WORKMODE_USB:
					ChangeFWorkmode(WORKMODE_SD);
					break;	
				case WORKMODE_SD:
					ChangeFWorkmode(WORKMODE_AUX);
					break;	
			}*/		
			ChangeFWorkmode(WORKMODE_RADIO);
			CD.WorkMode=CD_WORKMODE_IDLE;
			break;

		case CD_WORKMODE_DISC:
			if(CD.F_NewLoaderMode)
			{
				CD.F_NewLoaderMode=0;
				if(CD.DISC_Ready)
				{
					CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_PLAYER;
					CDSendCommand(CD_CMD_REQ_START_TOC);
					CD.WorkTimer1s=50;//wait toc
				}
				else if(CD.NoDISC)
				{	
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_NODISC;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
				else if(CD.DISC_EJect)
				{
					CDSendCommand(CD_CMD_LOADDISC);
				}
				else if(CD.DISC_Block)
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_DISC_ERROR;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
				else if(CD.DISC_Insert)
				{
					CD.WorkTimer1s=3;
				}
			}
			else
			{
				if(CD.WorkTimer1s>0)
				{
					if(F_HalfSecondOut)
						CDSendCommand(CD_CMD_REQ_LOADERSTATE);
				}
				else
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_NODISC;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
			}
			break;
		case CD_WORKMODE_USB:
			if(CD.USB_Ready)
			{
				CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_PLAYER;
				CD.WorkTimer1s=3;
			}
			else if(CD.NoUSB)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_NOUSB;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			else if(CD.USB_Error||CD.USB_Unknown)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_USB_ERROR;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			else
			{
				if(CD.WorkTimer1s==0)
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_COMMUNICATION_ERROR;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
			}
			break;

		case CD_WORKMODE_SD:
			if(CD.SD_Ready)
			{
				CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_PLAYER;
				CD.WorkTimer1s=3;
			}
			else if(CD.NoSD)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_NOSD;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			else if(CD.SD_Error||CD.SD_Unknown)
			{	
				CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
				CD.DispMode=CD_DISP_SD_ERROR;
				CD.F_DispReq=1;
				CD.WorkTimer1s=3;
			}
			else
			{
				if(CD.WorkTimer1s==0)
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_COMMUNICATION_ERROR;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
			}
			break;

			
		case CD_WORKMODE_POWER_ON_WAIT_PLAYER:
			if(CD.F_NewPlayMode)
			{
				CD.F_NewPlayMode=0;
				//if(CD.PlayMode!=CD_PLAY_PLAY)
				//Yete: May-22-2007---Wait for TOC ready when in disc mode
				if((CD.PlayMode==CD_PLAY_PAUSE&&System.FWorkMode.Current==WORKMODE_DISC) ||(CD.PlayMode!=CD_PLAY_PLAY&&(System.FWorkMode.Current==WORKMODE_USB||System.FWorkMode.Current==WORKMODE_SD)))
				{
					CDSendCommand(CD_CMD_PLAY);
					CD.WorkMode=CD_WORKMODE_POWER_ON_PLAY;
					CDMute(SOFTOFF);
					CD.WorkTimer1s=20;
				}
			}
			else
			{
				if(CD.WorkTimer1s>0)
				{
					if(F_HalfSecondOut)
						CDSendCommand(CD_CMD_REQ_PLAYERSTATE);
				}
				else
				{
					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.PlayMode==CD_PLAY_PLAY)&&((CD.PlayMode_PAR2&0x01)==0x00))
				{
					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.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;
				}
			}

			
			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>4)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)
{
	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;
			CD.SendBuff[3]=0x10;
			break;		
		case CD_CMD_REQ_ERRORSTATE:
			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
			CD.SendBuff[3]=0x12;//cis0.09
			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
			CD.SendBuff[3]=0x12;//cis0.09
			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
			CD.SendBuff[3]=0x12;//cis0.09
			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
			CD.SendBuff[3]=0x12;//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:
			CD.SendBuff[0]=4;
			CD.SendBuff[1]=0x04;
			CD.SendBuff[2]=0x23;
			CD.SendBuff[3]=0x01;
			break;
		case CD_CMD_REQ_SDFILETYPE:
			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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -