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

📄 cd.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 4 页
字号:
					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 + -