📄 cdc.c
字号:
/***********************************************************************
* PROJECT :BAV201(Bosen)
* MCU :ST72321(A)R9/HIWARE C complier (v5.0.4)
* DESCRIPTION :CDC.c
* DATE :2005/11/29
* AUTHOR :
***********************************************************************/
#define CDC_C
#include "Global.h"
/***************************************************
* Start of Declaration
***************************************************/
struct _CDC_Infor CDC_Infor;
struct _CDC_Infor Pre_CDC_Infor;
INT8U CDC_PreErr;
INT16U CDC_CmdAvailableTimer;
SFR CDC_Flag;
INT8U CDC_WorkStatus;
INT8U CDC_WorkStep;
INT8U CDC_WorkTimeCnt;
INT8U CDC_MuteTimer;
INT8U CDC_ResendPlayKeyTimer;
INT8U CDC_PlayRotateTimer;
INT16U CDC_DetVideoStep;
INT8U CDC_ExtSignalCnt;
INT8U DebugFlag;
#define CDC_IN_IDLE 0
#define CDC_IN_MODEOFF 1
#define CDC_IN_MODEON 2
void (*Init_CDC_Driver)(void);
void (*CDC_Driver)(void);
void Init_CDC(void);
void CDC_Proc(void);
void CDC_Timer(void);
void CDC_Display(void);
void CDC_KeyProcess(void);
void CDC_ErrProcess(void);
void CDC_SetDispRefFlag(void);
void CDC_DetExtSignal(void);
/***************************************************
* End of Declaration
***************************************************/
void Init_CDC(void)
{
EnterCritical();
/*Driver Mapping*/
// if(CDC_Infor.CDCType == CDC_TYP_SANYO)
// {
Init_CDC_Driver = InitSanyoCDC;
CDC_Driver = SanyoCDCDriver;
// }
// else if(CDC_Infor.CDCType == CDC_TYP_PANASONIC)
// {
// Init_CDC_Driver = InitPanaCDC;
// CDC_Driver = PanaCDCDriver;
// }
/*Driver Initilisation*/
(*Init_CDC_Driver)();
CDC_WorkStatus = CDC_IN_IDLE ;
CDC_WorkStep = 0;
CDC_WorkTimeCnt = 0;
CDC_Infor.CDCErrCode=CDC_ERR_CONNET;
return;
}
void CDC_Proc(void)
{
CDC_Timer();
if((CDC_Infor.CDCErrCode != CDC_ERR_NONE)
|| (CDC_Infor.CDCDiscExist == 0) )
{
CDC_ErrProcess();
}
else
{
switch(CDC_WorkStatus)
{
case CDC_IN_IDLE:
if(Last_Work_Mode == CDC)
{
CDC_WorkStatus = CDC_IN_MODEOFF;
CDC_WorkStep =0;
F_CDC_Mute = 1;
/*set PortA3 to floating input, prevent watch-dog from overflowing */
// PAOR.DATA &= 0xf7; /*MSB-****0***-LSB*/
}
if(Next_Work_Mode == CDC)
{
CDC_WorkStatus = CDC_IN_MODEON;
CDC_WorkStep = 0;
CDC_WorkTimeCnt = 6;
F_CDC_Mute = 0;
// F_TFTParamRq = 1; /*TFT request CVBS parameters*/
// SendTFTParamStep=0;
F_CdcDetVideoFin = 0;
CDC_DetVideoStep=0;
// OsdMode = EXTERNAL_SYN;
// TimerOSDSyn = 0;
}
if(Curr_Work_Mode == CDC)
{
// if(!F_CdcDetVideoFin)
// {
// CDC_DetExtSignal();
// }
if(F_CDCSend == 0)
{
if((!F_CdcIsPaused) && (CDC_ResendPlayKeyTimer==0) &&
((CDC_Infor.CDCStatus==CDC_Stoping)||(CDC_Infor.CDCStatus==CDC_Pausing)))
{
CDC_Infor.CDCOpCode = CDC_OP_PLAY; /*avoid cdc stoping abnormally*/
CDC_ResendPlayKeyTimer = 100;
F_CDC_Mute = 0;
}
CDC_KeyProcess();
}
CDC_Display();
}
break;
case CDC_IN_MODEOFF:
switch(CDC_WorkStep)
{
case 0:
if(F_CDCSend == 0)
{
CDC_Infor.CDCOpCode = CDC_OP_STOP;
CDC_WorkStep ++;
}
break;
case 1:
if(F_CDCSend == 0)
{
CDC_WorkStep ++;
}
break;
default:
Last_Work_Mode = IDLE;
CDC_WorkStatus = CDC_IN_IDLE;
CDC_WorkStep = 0;
break;
}
break;
case CDC_IN_MODEON:
switch(CDC_WorkStep)
{
case 0:
break;
case 1:
CDC_Infor.CDCOpCode = CDC_OP_PLAY;
CDC_WorkStep ++;
CDC_WorkTimeCnt = 10;
CDC_ResendPlayKeyTimer = 120;
break;
case 2:
break;
case 3:
F_SanBackUpCmd = 1; /*request driver to send backup cmd, for sanyo cdc*/
CDC_WorkTimeCnt = 6;
CDC_WorkStep++;
break;
case 4:
break;
default:
Next_Work_Mode = IDLE;
Curr_Work_Mode = CDC;
CDC_WorkStatus = CDC_IN_IDLE;
MICSendCMD(Stereo);
CDC_WorkStep = 0;
CDC_WorkTimeCnt = 0;
F_CdcIsPaused = 0;
break;
}
break;
default:
break;
}
}
if(CDC_PreErr != CDC_Infor.CDCErrCode)
{
if((CDC_PreErr==CDC_ERR_CONNET) ||
(CDC_PreErr==CDC_ERR_NOMAGZINE))
{
if(CDC_Infor.CDCErrCode == CDC_ERR_NONE)
{
CDC_CmdAvailableTimer = 4300;
F_SanChkDiscRq = 1; /*request sanyo cdc to check disc manually*/
}
}
else if((CDC_PreErr == CDC_ERR_NONE) &&
((CDC_Infor.CDCErrCode==CDC_ERR_CONNET)||
(CDC_Infor.CDCErrCode==CDC_ERR_NOMAGZINE)))
{
CDC_CmdAvailableTimer = 0;
F_CdcChkFinish = 0;
}
CDC_PreErr = CDC_Infor.CDCErrCode;
}
// CDC_SetDispRefFlag();
// Call CDC hardware layer driver process
(*CDC_Driver)();
return;
}
void CDC_Display(void)
{
static UINT8 PlayingRotate=0x01;
if(CurrDispMode == General)
{
ClearScreen();
DispBuf6[11] = Code_C;
DispBuf6[10] = Code_D;
DispBuf6[9] = Code_C;
DispBuf6[8] = Code_Blank;
DispBuf6[7] = Code_Blank;
DispBuf6[6] = Code_0 + (CDC_Infor.CurrDiscNo%10);
DispBuf6[5] = Code_Blank;
DispBuf6[4] = Code_Blank;
DispBuf6[3] = Code_T;
DispBuf6[2] = Code_0 + ((CDC_Infor.CurrTrkNo/10)%10);
DispBuf6[1] = Code_0 + (CDC_Infor.CurrTrkNo%10);
DispBuf6[0] = Code_Blank;
if( CDC_Playing == CDC_Infor.CDCStatus ){
if(CDC_PlayRotateTimer == 0){
PlayingRotate = (PlayingRotate+1)%4;
m_DispBuf3.DATA=(m_DispBuf3.DATA|0x0f) ^(0x01<<PlayingRotate);
CDC_PlayRotateTimer=20;
}
}
else{
m_DispBuf3.DATA=m_DispBuf3.DATA&0xF0;
}
F_RDM=0;
F_RPT=0;
F_SCAN=0;
switch(CDC_Infor.CurrTrkMode)
{
case CDC_MOD_DSKRDM:
case CDC_MOD_TRKRDM:
case CDC_MOD_DSKSHF:
case CDC_MOD_TRKSHF:
F_RDM=1;
break;
case CDC_MOD_DSKRPT:
case CDC_MOD_TRKRPT:
F_RPT=1;
break;
case CDC_MOD_DSKSCAN:
case CDC_MOD_TRKSCAN:
F_SCAN=1;
break;
}
// F_DispReqNumber=1;
F_DispReqMark =1;
F_DispReqIcon=1;
F_DispReqLeft=1;
F_DispReqMid=1;
F_DispReqRight=1;
}
}
void CDC_Timer(void)
{
if(CDC_WorkTimeCnt)
{
if(--CDC_WorkTimeCnt == 0)
{
CDC_WorkStep++;
}
}
if(CDC_CmdAvailableTimer != 0)
{
if(--CDC_CmdAvailableTimer == 0)
{
F_CdcChkFinish = 1;
}
}
if(CDC_MuteTimer != 0)
{
CDC_MuteTimer--;
if(CDC_MuteTimer == 0)
{
F_CDC_Mute = 0;
}
}
if(CDC_ResendPlayKeyTimer != 0)
{
CDC_ResendPlayKeyTimer--;
}
return;
}
void CDC_KeyProcess(void)
{
switch( PadKeyCode )
{
case KEY_SRIGHT:
case KEY_RIGHT:
// case KEY_SNEXT:
CDC_Infor.CDCOpCode = CDC_OP_TRKUP;
F_CDC_Mute = 1;
CDC_MuteTimer = 100;
break;
case KEY_SLEFT:
case KEY_LEFT:
// case KEY_SPREV:
CDC_Infor.CDCOpCode = CDC_OP_TRKDN;
F_CDC_Mute = 1;
CDC_MuteTimer = 100;
break;
case KEY_LRIGHT:
// case KEY_SFF:
if(CDC_Infor.CDCStatus == CDC_Fasting)
{
CDC_Infor.CDCOpCode = CDC_OP_PLAY;
F_CDC_Mute = 0;
}
else
{
CDC_Infor.CDCOpCode = CDC_OP_FFW;
F_CDC_Mute = 1;
}
break;
case KEY_LLEFT:
// case KEY_SREW:
if(CDC_Infor.CDCStatus == CDC_Fasting)
{
CDC_Infor.CDCOpCode = CDC_OP_PLAY;
F_CDC_Mute = 0;
}
else
{
CDC_Infor.CDCOpCode = CDC_OP_FRW;
F_CDC_Mute = 1;
}
break;
case KEY_LRRIGHT:
case KEY_LRLEFT:
CDC_Infor.CDCOpCode = CDC_OP_PLAY;
F_CDC_Mute = 0;
break;
case KEY_LUP:
CDC_Infor.CDCOpCode = CDC_OP_DSKUP;
F_CDC_Mute = 1;
CDC_MuteTimer = 200;
break;
case KEY_LDN:
CDC_Infor.CDCOpCode = CDC_OP_DSKDN;
F_CDC_Mute = 1;
CDC_MuteTimer = 200;
break;
case KEY_MUTE:
case KEY_SMUTE:
case KEY_LMUTE:
if(CDC_Infor.CDCStatus == CDC_Pausing)
{
F_CDC_Mute = 0;
CDC_Infor.CDCOpCode = CDC_OP_PAUSEOFF;
}
else
{
F_CDC_Mute = 1;
CDC_Infor.CDCOpCode = CDC_OP_PAUSE;
}
F_CdcIsPaused = ~F_CdcIsPaused;
break;
case KEY_SM1:
case KEY_M1:
case KEY_LM1:
if(CDC_Infor.CurrTrkMode == CDC_MOD_TRKRPT)
{
CDC_Infor.CDCOpCode = CDC_OP_RPTOFF;
}
else
{
CDC_Infor.CDCOpCode = CDC_OP_TRKRPT;
}
break;
case KEY_SM2:
case KEY_M2:
case KEY_LM2:
if(CDC_Infor.CurrTrkMode == CDC_MOD_TRKSHF)
{
CDC_Infor.CDCOpCode = CDC_OP_SHFOFF;
}
else
{
CDC_Infor.CDCOpCode = CDC_OP_TRKSHF;
}
break;
case KEY_SM3:
case KEY_M3:
case KEY_LM3:
if(CDC_Infor.CurrTrkMode == CDC_MOD_TRKSCAN)
{
CDC_Infor.CDCOpCode = CDC_OP_SCANOFF;
}
else
{
CDC_Infor.CDCOpCode = CDC_OP_TRKSCAN;
}
break;
// case KEY_SENT:
case KEY_SOK:
CDC_Infor.CDCOpCode = CDC_OP_PLAY;
F_CDC_Mute = 0;
break;
default:
break;
}
return;
}
void CDC_ErrProcess(void)
{
if((Curr_Work_Mode == CDC) || (Next_Work_Mode == CDC))
{
SetWorkMode(Tuner);
}
if(Last_Work_Mode == CDC)
{
Last_Work_Mode = IDLE;
}
return;
}
#if 0
/*Current CDC status info is different from previous, set OSD refresh flags*/
void CDC_SetDispRefFlag(void)
{
if(CDC_Infor.CurrDiscNo != Pre_CDC_Infor.CurrDiscNo)
{
F_CDCDiskInfoRefresh = 1;
}
if(CDC_Infor.CDCDiscExist != Pre_CDC_Infor.CDCDiscExist)
{
F_CDCDiskInfoRefresh = 1;
}
if(CDC_Infor.CurrTrkNo != Pre_CDC_Infor.CurrTrkNo)
{
F_CDCTrackInfoRefresh = 1;
}
if((CDC_Infor.CurrTrkMins != Pre_CDC_Infor.CurrTrkMins) ||
(CDC_Infor.CurrTrkSecs != Pre_CDC_Infor.CurrTrkSecs))
{
F_CDCPlayTimeRefresh = 1;
}
if(CDC_Infor.CurrTrkMode != Pre_CDC_Infor.CurrTrkMode)
{
F_CDCTrackInfoRefresh = 1;
}
Pre_CDC_Infor = CDC_Infor;
return;
}
void CDC_DetExtSignal(void)
{
switch(++CDC_DetVideoStep)
{
case 1:
/*set PortA3 to floating interrupt */
PAOR.DATA |= 0x08; /*MSB-****1***-LSB*/
AuxSignalDetCnt = 0;
CDC_ExtSignalCnt = 0;
break;
case 230: /*delay 300ms, then check video signal*/
AuxSignalDetCnt = 0;
break;
case 250:
if((AuxSignalDetCnt > 6) && (AuxSignalDetCnt < 80))/* video signal exist*/
{
CDC_ExtSignalCnt++;
}
AuxSignalDetCnt = 0;
break;
case 270: /*check video signal for a second time*/
if((AuxSignalDetCnt > 6) && (AuxSignalDetCnt < 80))/* video signal exist*/
{
CDC_ExtSignalCnt++;
}
AuxSignalDetCnt = 0;
break;
case 290: /*check video signal for a third time*/
if((AuxSignalDetCnt > 6) && (AuxSignalDetCnt < 80))/* video signal exist*/
{
CDC_ExtSignalCnt++;
}
TimerOSDSyn = 2;
/*set PortA3 to floating input, prevent watch-dog from overflowing */
PAOR.DATA &= 0xf7; /*MSB-****0***-LSB*/
F_CdcDetVideoFin = 1;
if(CDC_ExtSignalCnt<2)
{
OsdMode = INTERNAL_SYN;
}
break;
default:
break;
}
return;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -