📄 cd.c
字号:
#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 + -