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

📄 cd.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 4 页
字号:

#include "public.h"

#ifdef CDMODE_ENABLE
struct EntryNameStruct EntryName;
unsigned char TextIndex;
unsigned char RollTimer;
void ReadCISVersion(void)
{
       unsigned char i;
       unsigned char f_send = 0;
	unsigned char flg_3_25 = 0;
	unsigned char flg_0_0_9 = 0;
	CD.CD_CIS_3_25 = 0;
	CD.CD_CIS_0_0_9 = 0;
	//unsigned int CD.CD_CIS_3_25[] = {80, 95, 88, 95, 48, 49, 32, 48, 55};
	//unsigned int CD.CD_CIS_0_0_9[] = {3, 1, 2, 7, 3, 8, 1, 1, 1};
	//Pin_POWER = 1;
	Pin_CD_RESET = 1;
	Pin_CD_ON = 1;
	
	CD.SendBuff[0]=3;
	CD.SendBuff[1]=0x01;
	CD.SendBuff[2]=0x01;
	CD.InitTimer1s =2;
	while(1)
	{
		if(CD.InitTimer1s == 0)	break;
		if(PinIn_CD_CRQ)
		{
			if(CD.ReadingTimer10ms>0)    continue;	
			CDSendData();
		}
		else
		{
			CD.ReadingTimer10ms=2;	
			CDReadData();
			if(CD.ReadBuff[1] == 0x01 && CD.ReadBuff[2] == 0x01)
			{
				for(i=0;i<9;i++)
				{

					if(CD.ReadBuff[3+i] > 30)
					{
						flg_3_25++;	
					}
					else
					{
						flg_0_0_9++;
					}
				}
				break;
			}
		}
	}
	//Pin_POWER = 0;
	Pin_CD_ON = 0;
	Pin_CD_RESET = 0;

	if(flg_3_25 == 9)
	{
		CD.CD_CIS_3_25 = 1;
	}
	else //if(flg_0_0_9 == 9)
	{
		CD.CD_CIS_0_0_9 = 1;
	}
	/*
	else if(CD.InitTimer1s == 0)
	{
		PrintString(" Com err,  can't connect to cd module  ");		
		Display(DISP_CLEAR);
	}
	else
	{
		PrintString("  Can't recongnize CIS Version  ");	
		Display(DISP_CLEAR);
	}
	*/
	
}

void CDInit(void)
{        
	PD_CD_RESET=1;
	PCR1_CD_RESET=1;
	PCR2_CD_RESET=1;
	Pin_CD_RESET=0;

	PD_CD_ON=1;
	PCR1_CD_ON=1;
	PCR2_CD_ON=1;
	Pin_CD_ON=0;
	
	PD_CD_CRQ=0;
	PCR1_CD_CRQ=0;
	PCR2_CD_CRQ=0;

	PD_CD_EMEJT = 1;
	PCR1_CD_EMEJT = 1;
	PCR2_CD_EMEJT = 1;
	Pin_CD_EMEJT = 0;
	
	ReadCISVersion();

}

void CDMain(void)
{
	if((System.FWorkMode.Next==WORKMODE_DISC)||
		(System.FWorkMode.Next==WORKMODE_USB)||
		(System.FWorkMode.Next==WORKMODE_SD))
		CDOn();
	if((System.FWorkMode.Last==WORKMODE_DISC)||
		(System.FWorkMode.Last==WORKMODE_USB)||
		(System.FWorkMode.Last==WORKMODE_SD))
		CDOff();
	CDSendAndRead();
	CDDecodeData();
	CDPowerMode();
	CDWorkMode();
	CDKey();
	CDDisplay();
}

void CDKey(void)
{
	switch(KeyCode)
	{
		case S_AD_EJECT:
		case P_RM_EJT:

			if(CD.PowerMode==CD_POWER_NORMAL)
			{
				if(CD.LoaderMode==CD_LODER_EJECTING|| CD.LoaderMode==CD_LODER_EJECT_POS)
					CDSendCommand(CD_CMD_LOADDISC);
				else
					CDSendCommand(CD_CMD_EJECTDISC);
			}
			else
			{
				CDWork(POWERON_LOAD_EJECT);
				CD.WorkMode=CD_WORKMODE_POWER_ON_REQ;
			}
			break;
	}
	
	if(System.FWorkMode.Current!=WORKMODE_DISC&&System.FWorkMode.Current!=WORKMODE_USB&&System.FWorkMode.Current!=WORKMODE_SD)return;
	if(F_MuteKey)return;

	switch(KeyCode)
	{

              case P_RM_STOP:
                        if(CD.PlayMode !=  CD_PLAY_STOP)
                        	  CDSendCommand(CD_CMD_STOP);
              	break;
		case S_AD_PLAY:
		#ifdef SINO_MOS
              case P_RM_PLAY:
              	 if(CD.PlayMode !=  CD_PLAY_PLAY)
              	 	 CDSendCommand(CD_CMD_PLAY);
              	  break;
              case P_RM_PAUSE:
              	  if(CD.PlayMode  == CD_PLAY_PLAY)
                              CDSendCommand(CD_CMD_PAUSE);
              	  break;
              	  
		#endif
#ifndef SINO_MOS		
		case S_RM_M1:
			
			if(CD.PlayMode!=CD_PLAY_PLAY)
				CDSendCommand(CD_CMD_PLAY);
			else
				CDSendCommand(CD_CMD_PAUSE);
		
			break;
#endif				
		case S_AD_SCAN:
#ifndef SINO_MOS			
		case S_RM_M2:
#endif		
              case  P_RM_M3:
	
			if(CD.SubPlayMode==CD_SUBPLAY_INT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_INT_ON);
			}
			break;
		case S_AD_REP:
		//case S_RM_M3:
		case P_RM_M2:
			if(CD.SubPlayMode==CD_SUBPLAY_RPT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_RPT_ON);
			}
			break;
		case L_AD_REP:
		//case L_RM_M3:
		
			CDSendCommand(CD_CMD_WRAP);
			break;
		case S_AD_SHUFF:
		//case S_RM_M4:
		case P_RM_M1:
			if(CD.SubPlayMode==CD_SUBPLAY_SHF)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			else
			{
				CDSendCommand(CD_CMD_SHF_ON);
			}
			break;
		case S_AD_SEEKUP:
		case S_RM_SEEKUP:
	#ifdef SINO_MOS
              case S_AD_DIRDOWN:
	#endif
	       case P_RM_NEXT:
			if(CD.SubPlayMode==CD_SUBPLAY_RPT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}
			CDSendCommand(CD_CMD_NEXT_FILE);
			break;
		case S_AD_SEEKDN:
		case S_RM_SEEKDN:
	#ifdef SINO_MOS
              case S_AD_DIRUP:
	#endif
	       case P_RM_PREV:
			if(CD.SubPlayMode==CD_SUBPLAY_RPT)
			{
				CDSendCommand(CD_CMD_INTSHFRPT_OFF);
				CD.SubPlayMode=CD_SUBPLAY_NORMAL;
			}

			CDSendCommand(CD_CMD_PREVIOUS_FILE);
			break;
		case L_AD_SEEKUP:
		case L_RM_SEEKUP:
		case P_RM_FF:	
			CDSendCommand(CD_CMD_FAST_FF);
			break;
		case L_AD_SEEKDN:
		case L_RM_SEEKDN:
		case P_RM_FB:	
			CDSendCommand(CD_CMD_FAST_FB);
			break;
		case R_AD_SEEKUP:
		case R_AD_SEEKDN:
		case R_RM_SEEKUP:
		case R_RM_SEEKDN:
			CDSendCommand(CD_CMD_PLAY);
			break;
	#if 0// add it by jzq
		case S_AD_DIRUP:
	#endif		
		case S_RM_M6:
			CDSendCommand(CD_CMD_NEXT_DIR);
			break;
	#if 0 // add it by jzq
		case S_AD_DIRDOWN:
        #endif			
		case S_RM_M5:
			CDSendCommand(CD_CMD_PREVIOUS_DIR);
			break;

	case S_AD_DISP:
			if(System.DispMode.Current==DISPMODE_CD&&CD.MediaType)
			{
				CD.DispSubMode=MaxMinChangeProtect(CD.DispSubMode, 1, CD_DISP_DISCARTIST, CD_DISP_FILENAME, 0);	
				TextIndex = 0;
			}	
			break;
	case L_AD_DISP:
			if(System.DispMode.Current==DISPMODE_CD&&CD.MediaType)
			{
				CD.DispSubMode= CD_DISP_FILENAME;	
				TextIndex = 0;
			}	
			break;
			
/*			case S_AD_M5:
			CDSendCommand(CD_CMD_CHECK_MEMORY);
			break;
		case S_AD_M6:
			CDSendCommand(CD_CMD_REQ_MECHPARA);
			break;*///This's for test

	}
	
}

void CDDisplay(void)
{
unsigned char str[8]= "       ";
	if(System.DispMode.Next==DISPMODE_CD)
	{
		CD.F_DispReq=1;
	}
	
	if(System.DispMode.Last==DISPMODE_CD)
	{
	}
	
	if(System.DispMode.Current!=DISPMODE_CD)return;

		
//		if(CD.F_DispText&&CD.PlayMode!=CD_PLAY_STOP
//		&&(System.FWorkMode.Current!=WORKMODE_DISC||CD.DiscType!=CD_DISCTYPE_CD))
//				DispText(EntryName.Text, EntryName.Length);
	if(CD.DispMode==CD_DISP_NORMAL)
	{
		switch(CD.DispSubMode)
		{
			case CD_DISP_FILENAME:
				DispText(EntryName.Text, EntryName.Length);
				break;
			case CD_DISP_ALBUMTITLE:
				DispText(CD.AlbumTitle, CD.AlbumLength);
				break;
			case CD_DISP_TITLE:
				DispText(CD.TrackTitle, CD.TitleLength);
				break;
			case CD_DISP_ARTIST:
				DispText(CD.TrackArtist, CD.ArtistLength);
				break;
			case CD_DISP_GENRE:
				DispText(CD.Genre, CD.GenreLength);
				break;
			case CD_DISP_YEAR:
				DispText(CD.Year, CD.YearLength);
				break;
			case CD_DISP_COMMENT:
				DispText(CD.Comment, CD.CmtLength);
				break;
			case CD_DISP_DISCARTIST:
				DispText(CD.DiscArtist, CD.DALength);
				break;
		}
	}
		
	if(!CD.F_DispReq)return;
	CD.F_DispReq=0;
	
	switch(CD.DispMode)
	{
		case CD_DISP_IDLE:
			
			break;
		case CD_DISP_READING:
		#ifdef SINO_MOS
                     PrintLine("  Wait  ");
		#else
			PrintLine(2,"        WAIT");
		#endif
			break;
		case CD_DISP_NODISC:
		#ifdef SINO_MOS
                    PrintLine(" NO CD  ");
		#else
			PrintLine(2,"        NO CD");
		#endif
			break;
		case CD_DISP_NOUSB:
		#ifdef SINO_MOS
                    PrintLine(" NO USB ");
		#else
			PrintLine(2,"       NO USB");
		#endif
			break;
		case CD_DISP_NOSD:
		#ifdef SINO_MOS
                     PrintLine(" NO SD  ");
		#else
			PrintLine(2,"        NO SD");
		#endif
			break;
		case CD_DISP_DISC_READ:
			#ifdef SINO_MOS

                      PrintLine("Read CD ");
			#else
			PrintLine(2,"       READ CD");
			#endif
			break;
		case CD_DISP_DISC_EJECT:
			#ifdef SINO_MOS
                     PrintLine("EJECT CD");
			#else
			PrintLine(2,"      EJECT CD");
			#endif
			break;
		case CD_DISP_USB_READ:
			#ifdef SINO_MOS
                     PrintLine("Read USB");
			#else
			PrintLine(2,"      READ USB");
			#endif
			break;
		case CD_DISP_SD_READ:
			#ifdef SINO_MOS
                     PrintLine("READ SD ");
			#else
			PrintLine(2,"       READ SD");
			#endif
			break;
		case CD_DISP_DISC_ERROR:
			#ifdef SINO_MOS
                     PrintLine("CD ERROR");
			#else
			PrintLine(2,"      CD ERROR");
			#endif
			break;
		case CD_DISP_USB_ERROR:
			#ifdef SINO_MOS
                     PrintLine("USB ERR ");
			#else
			PrintLine(2,"      USB ERROR");
			#endif
			break;
		case CD_DISP_SD_ERROR:
			#ifdef SINO_MOS
                     PrintLine("SD ERROR");
			#else
			PrintLine(2,"      SD ERROR");
			#endif
			break;
		case CD_DISP_COMMUNICATION_ERROR:
			#ifdef SINO_MOS
                     PrintLine("COM ERR ");
			#else
			PrintLine(2,"      COM ERROR");
			#endif
			break;
			

		case CD_DISP_NORMAL:
			if(CD.PlayMode==CD_PLAY_PAUSE)
			{
			#ifdef SINO_MOS
                           PrintLine(" PAUSE  ");
			#else
				PrintLine(2,"       PAUSE");
			#endif
				break;
			}
			if(CD.PlayMode  == CD_PLAY_STOP)
				  PrintLine("  STOP  ");

			Display(DISP_CLEAR1);

			switch(System.FWorkMode.Current)
			{
				case WORKMODE_DISC:
					DispBuff[1][1]='C';
					DispBuff[1][2]='D';
					break;
				case WORKMODE_USB:
					DispBuff[1][1]='U';
					DispBuff[1][2]='S';
					DispBuff[1][3]='B';
					break;
				case WORKMODE_SD:
					DispBuff[1][1]='S';
					DispBuff[1][2]='D';
					break;
			}

			switch(CD.MediaType)
			{
		#ifdef SINO_MOS
                            case 0:
                            	DisplayIcon(CD_ICON,1);
                            	break;
                            case 1:
                            	DisplayIcon(MP3_ICON,1);
                            	break;
                            case 2:
                            	DisplayIcon(MP3_ICON,1);
                            	break;

		#else
				case 0: //CDDA

					DispBuff[1][3]='D';
					DispBuff[1][4]='A';
					
					break;
				case 1: //mp3
					DispBuff[1][4]='M';
					DispBuff[1][5]='P';
					DispBuff[1][6]='3';
					break;
				case 2: //wma
					DispBuff[1][4]='W';
					DispBuff[1][5]='M';
					DispBuff[1][6]='A';
					break;
		#endif			
			}
#ifdef SINO_MOS
                       if(CD.PlayMode == CD_PLAY_PLAY)
                       	{
                       	   DisplayIcon(S1_ICON,1);
                       	   DisplayIcon(S2_ICON,1);
                       	   DisplayIcon(S3_ICON,1);
                       	}else{
                       	   DisplayIcon(S1_ICON,0);
                       	   DisplayIcon(S2_ICON,0);
                       	   DisplayIcon(S3_ICON,0);
                       		}
                       switch(CD.SubPlayMode){
                       	case CD_SUBPLAY_RPT:
                       		DisplayIcon(RPT_ICON,1);
                       			break;
                            default:
                            	DisplayIcon(RPT_ICON,0);
                            	break;
                       	}
#else
			switch(CD.PlayMode)
			{
				case CD_PLAY_FF:
					DispBuff[1][8]='F';
					DispBuff[1][9]='F';
					break;
				case CD_PLAY_FR:
					DispBuff[1][8]='R';
					DispBuff[1][9]='E';
					DispBuff[1][10]='W';
					break;
				case CD_PLAY_PLAY:		
					switch(CD.SubPlayMode)
					{
						case CD_SUBPLAY_NORMAL:
							DispBuff[1][8]='P';
							DispBuff[1][9]='L';
							DispBuff[1][10]='A';
							DispBuff[1][11]='Y';
							break;
						case CD_SUBPLAY_INT:
							DispBuff[1][8]='S';

⌨️ 快捷键说明

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