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

📄 cd.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 4 页
字号:
				{
					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.CD_CIS_0_0_9 && (CD.PlayMode==CD_PLAY_PLAY) && ((CD.PlayMode_PAR2&0x01)==0x00))
					|| (CD.CD_CIS_3_25 && (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.DispSubMode=CD_DISP_FILENAME;
					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;
					#ifdef DEBUG_SCI_ENABLE
                                       SCI_SendString("COMMUINCATION ERROR");
					#endif
				}
			}

			
			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>5)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)
{
	UCharInt temp;
	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;
			if(CD.CD_CIS_3_25)
			CD.SendBuff[3]=0x08;
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x10;
			break;		
		case CD_CMD_REQ_ERRORSTATE:
			if(CD.CD_CIS_0_0_9)
			{
			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
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x12;//cis0.09
			if(CD.CD_CIS_3_25)
			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;//cis0.08
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x12;//cis0.09
			if(CD.CD_CIS_3_25)
			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;//cis0.08
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x12;//cis0.09
			if(CD.CD_CIS_3_25)
			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;//cis0.08
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x12;//cis0.09
			if(CD.CD_CIS_3_25)
			CD.SendBuff[3]=0x10;//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:
			if(CD.CD_CIS_0_0_9)
			{
			CD.SendBuff[0]=4;
			CD.SendBuff[1]=0x04;
			CD.SendBuff[2]=0x23;
			CD.SendBuff[3]=0x01;
			}
			break;
		case CD_CMD_REQ_SDFILETYPE:
			if(CD.CD_CIS_0_0_9)
			{
			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;
		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]=8;
			CD.SendBuff[1]=0x04;
			CD.SendBuff[2]=0x48;
			temp.Dbyte = CD.AbsFileNum;
			if(CD.CD_CIS_0_0_9)
			{
			CD.SendBuff[3] = temp.byte[0];
			CD.SendBuff[4] = temp.byte[1];
			CD.SendBuff[5]=0;
			}
			if(CD.CD_CIS_3_25)
			{
			  CD.SendBuff[3] = CD.CurrentSource;
                          CD.SendBuff[4] = 0;
			  CD.SendBuff[5] = 0;
			  CD.SendBuff[6] = 0;
			  /* we assume the max value of the  member filename in the cd struct is 50*/
			  CD.SendBuff[7] = 50;
			}
			break;
		case CD_CMD_REQ_CURRENTDIRNAME:
			CD.SendBuff[0]=6;
			CD.SendBuff[1]=0x04;
			CD.SendBuff[2]=0x48;
			CD.SendBuff[3]=0;//current
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[4]=0;
			if(CD.CD_CIS_3_25)
			CD.SendBuff[4]=2;
			//CD.SendBuff[3]=CD.AbsFileNum&&0x00ff;
			//CD.SendBuff[4]=CD.AbsFileNum>>8&&0x00ff;
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[5]=1;
			if(CD.CD_CIS_3_25)
			CD.SendBuff[5]=0;
			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:
			if(CD.CD_CIS_0_0_9)
			{
			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;
			if(CD.CD_CIS_0_0_9)
			CD.SendBuff[3]=0x11;//config wrap enable
			if(CD.CD_CIS_3_25)
			CD.SendBuff[3]=0x0f;//config wrap enable
			CD.SendBuff[4]=0x01;
			CD.SendBuff[5]=~CD.F_WrapEnable;
			break;
		case CD_CMD_MEDIAIFOR_SETTING:
			CD.SendBuff[0] = 6;
			CD.SendBuff[1] = 0x02;
			CD.SendBuff[2] = 0x01;
			CD.SendBuff[3] = 0x0a;
			CD.SendBuff[4] = 0x01;
			CD.SendBuff[5] = 0x19;
			
			break;
		//===============Only for test=============//
		case CD_CMD_CHECK_MEMORY:
			if(CD.CD_CIS_0_0_9)
			{
			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:
			if(CD.CD_CIS_0_0_9)
			{
			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;
     #if 0 //def DEBUG_SCI_ENABLE
      SCI_SendPromter("CD VERSION",CD.Version[0],9);
     #endif
	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.CD_CIS_0_0_9)
						{
							if((CD.ReadBuff[5]&0x1)==1)
								CD.F_WrapEnable=1;
							else 
								CD.F_WrapEnable=0;
						}
						if(CD.CD_CIS_3_25)
						{
							if((CD.ReadBuff[5]&0x1)!=0)
								CD.SubPlayMode=CD_SUBPLAY_SHF;
							if((CD.ReadBuff[5]&0x2)!=0)
								CD.SubPlayMode=CD_SUBPLAY_RPT;
						}
					 		break;
						case 18://playmode
						if(CD.CD_CIS_0_0_9)
						{

					 		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.CD_CIS_0_0_9)
							{

							if((CD.ReadBuff[5]&0x1)!=0)
								CD.SubPlayMode=CD_SUBPLAY_SHF;
							if((CD.ReadBuff[5]&0x2)!=0)
								CD.SubPlayMode=CD_SUBPLAY_RPT;
							}
					 		break;
						case 0x0F://wrap
						if(CD.CD_CIS_3_25)
						{
							if((CD.ReadBuff[5]&0x1)==1)
								CD.F_WrapEnable=1;
							else 
								CD.F_WrapEnable=0;
						}
					 		break;
						case 0x10://playmode
						if(CD.CD_CIS_3_25)
						{
					 		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;
					}
					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;

⌨️ 快捷键说明

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