cd.c

来自「一个ST7系列的车载dvd系统源代码」· C语言 代码 · 共 1,625 行 · 第 1/3 页

C
1,625
字号
		case WORKMODE_USB:
		case WORKMODE_SD:
			if(CD.PlayMode!= CD_PLAY_STOP&&!(CD.PlayMode== CD_PLAY_ACCESS&&CD.PlayMode_PAR2==CD_PLAY_ACCESS_STOP))
				CDSendCommand(CD_CMD_STOP);
			break;
	}
	switch(CD.WorkMode)
	{
		case 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.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_INFO;
			}
			break;
		case CD_WORKMODE_POWER_ON_WAIT_INFO:
			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))
				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_SOURCE_TO_DISC);
					CD.DispMode=CD_DISP_READING;
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
				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;
				CDSendCommand(CD_CMD_SOURCE_TO_USB);
				CD.DispMode=CD_DISP_READING;
				CD.F_DispReq=1;
				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)
				{
				//	if(F_HalfSecondOut)
				//		CDSendCommand(CD_CMD_REQ_STATE);//currently not on ReqState (only automatically sent during plug/unplug)
				}
				else
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					//CD.DispMode=CD_DISP_USB_ERROR;
					CD.DispMode=CD_DISP_NOUSB;//if no usb when power on, it will not send the message of usb
					CD.F_DispReq=1;
					CD.WorkTimer1s=3;
				}
			}
			break;

		case CD_WORKMODE_SD:
			if(CD.SD_Ready)
			{
				CD.WorkMode=CD_WORKMODE_POWER_ON_WAIT_PLAYER;
				CDSendCommand(CD_CMD_SOURCE_TO_SD);
				CD.DispMode=CD_DISP_READING;
				CD.F_DispReq=1;
				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)
				{
				//	if(F_HalfSecondOut)
				//		CDSendCommand(CD_CMD_REQ_STATE);//currently not on ReqState (only automatically sent during plug/unplug)
				}
				else
				{
					CD.WorkMode=CD_WORKMODE_AUTOCHANGE;
					CD.DispMode=CD_DISP_NOSD;
					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)&&!(CD.PlayMode== CD_PLAY_ACCESS&&CD.PlayMode_PAR2==CD_PLAY_ACCESS_PLAY))
				{
					CDSendCommand(CD_CMD_PLAY);
					CD.WorkMode=CD_WORKMODE_POWER_ON_PLAY;
					CDMute(SOFTOFF);
					CD.WorkTimer1s=10;
				}
			}
			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)
				{
					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))
							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;
			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;
			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;
			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;
			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:

⌨️ 快捷键说明

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