📄 user.c
字号:
#include "..\userdefine.h"
#include "user.h"
#include "userinit.h"
#include "main.h"
data bit gb_Openfile=0; // For Open file Flag behind the UI-State transition
data bit gb_UIPostError=0; // The Error flag of UI post-processor for Audio Engine, such as Open file fail, initial fail etc.
data bit gc_CardInsert;
data U8 gc_DOS_ErrorStatus;
xdata U8 gc_fileend;
extern data bit gb_Frequency_Song; // 0=Show Frequency 1=Show Song Number/EQ
extern data bit gb_SelectEQ; // 1=Show EQ
extern data bit gb_SelectVol; // 1=Show Vol
extern data bit gb_LED_LCM;
extern data bit gb_CHChg;
extern data U8 gc_FileSkipNumber;
extern data U8 gc_maxtimes;
extern data U16 gw_SongNumber;
extern data U16 gw_SongNumberSD;
extern data U16 gw_ShowTimer;
extern data U16 gw_ChangeFrequencyTimer;
extern data U16 gw_DispSongNum;
extern data U8 gc_xxx;
extern xdata U8 gc_FileLongName[];
void Audio_CoDec(void);
void SD_InsertState_Detect(void);
void UI_PreProcessor_scan_key(void);
void X_RandomGetFileIndex(void);
void Playing_To_Stop(void);
extern void I2CByteWrite(U8 adr,U8 bytedata);
extern void VOL_UP(void);
extern void VOL_DOWN(void);
extern void FM_FREQ_CHG(U8 tc_UP_DOWN, U8 offset);
extern void ClearIRBuffer(void);
extern void Frequency_Disp(void);
extern U8 Dos_GetFileLongName(U8 tc_FileHandle,U8 *tpc_LongName);
void UI_PreProcessor_scan_key(void)
{
gc_EVENT=gc_KeyValue;
if (gc_KeyValue)
{
gc_KeyValue = 0;
}
if ((gc_LongKeyDelay < (MAX_REPEATKEYDELAY - 3)) && (gc_EVENT == LONG_KEY_PLAY_EVENT))
{
gc_EVENT = 0;
}
}
void UI_VolumeUpDown(bit tbt_UpDown)
{
U8 tc_maxvol;
tc_maxvol=63;
if(tbt_UpDown)
{
if(gc_DSP_Volume<tc_maxvol)
{
gc_DSP_Volume+=3;
}
}
else
{
if(gc_DSP_Volume>=3)
{
gc_DSP_Volume-=3;
}
}
if(gc_SystemStateMode==SYSTEM_STATE1_PLAYING)//dsLONG_KEY_PLAY_EVENT
{
System_SetVolume(gc_DSP_Volume);
}
}
void UI_FFFR(bit XFFFR)//go the next or ahead file,File_Close(NULL, K_DOS_ReadFile, 0);
{ //->Search_File(GS_SearchMode,gc_UIMode,0);
//if state_waitidle,after search file ,then show the related informations
switch(gc_SystemStateMode)
{
case SYSTEM_STATE0_IDLE:
if(gw_FileIndex[0]==0)
return;//if no this line,error will happen
break;
case SYSTEM_STATE1_PLAYING:
gb_Openfile = 1; // Make Openfile post-processor activity
break;
case STATE_PLAY_PAUSE:
gc_SystemStateMode = SYSTEM_STATE0_IDLE; //return to IDLE State
break;
}
if(gc_FileSkipNumber==200)
{
gc_FileSkipNumber=100;
System_NextOrPrev(XFFFR, 1, 0);
gc_FileSkipNumber=100;
System_NextOrPrev(XFFFR, 1, 0);
}
else
{
System_NextOrPrev(XFFFR, 1, 0);
}
gw_ShowTimer=3000;
gb_Frequency_Song=1; // 0=Show Frequency 1=Show Song Number/EQ
gb_SelectVol=0; // 1=Show Vol
gb_SelectEQ=0;
}
void UI_Processorstate_transition(void) using 0
{
switch(gc_SystemStateMode)
{
case SYSTEM_STATE0_IDLE: //State IDLE on--
gs_System_State.w_BitRate = 0;
if(gc_EVENT)
{
switch(gc_EVENT)
{
case SHORT_KEY_PLAY_EVENT://for play MP3 or DVR
if(gw_FileTotalNumber[0]==0)
{
break;//no file, don't play
}
gc_SystemStateMode=SYSTEM_STATE1_PLAYING;
gb_Openfile = 1; // Make Openfile post-processor activity
break;
case LONG_KEY_FF_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(1,1);
}
break;
case LONG_KEY_FR_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(0,1);
}
break;
case SHORT_KEY_FF_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(1,1);
}
break;
case SHORT_KEY_FR_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(0,1);
}
break;
case SHORT_KEY_MODE_EVENT: // CH
case LONG_KEY_MODE_EVENT:
gw_ChangeFrequencyTimer=3000;
gb_Frequency_Song=0;
ClearIRBuffer();
gb_CHChg=1;
break;
case SHORT_KEY_VOLUP_EVENT: // CH +
case LONG_KEY_VOLUP_EVENT:
FM_FREQ_CHG(1,1);
break;
case SHORT_KEY_VOLDOWN_EVENT: // CH -
case LONG_KEY_VOLDOWN_EVENT:
FM_FREQ_CHG(0,1);
break;
default:
break;
}
}
gc_EVENT=0;
break;
case SYSTEM_STATE1_PLAYING:
switch(gc_EVENT)
{//PLAY event
case SHORT_KEY_PLAY_EVENT://PAUSE/PLAY
gc_SystemStateMode=STATE_PLAY_PAUSE;
System_Pause();
break;
case LONG_KEY_PLAY_EVENT: // Change play mode(Sequential/Random)
gc_PlaySequenceMode++;
if(gc_PlaySequenceMode==4)
{
gc_PlaySequenceMode=1;
}
if(gb_LED_LCM==1)
{
gw_ShowTimer=3000;
}
I2CByteWrite(3,gc_PlaySequenceMode);
break;
case LONG_KEY_FF_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(1,1);
}
else
{
VOL_UP();
}
break;
case LONG_KEY_FR_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(0,1);
}
else
{
VOL_DOWN();
}
break;
case SHORT_KEY_FF_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(1,1);
}
else
{
gc_FileSkipNumber=0;
if((gc_PlaySequenceMode == 0x02)||(gc_PlaySequenceMode == 0x01))
{
UI_FFFR(0);
}
else // Random play
{
gb_Openfile = 1;
X_RandomGetFileIndex();
gw_ShowTimer=3000;
gb_Frequency_Song=1; // 0=Show Frequency 1=Show Song Number/EQ
gb_SelectVol=0; // 1=Show Vol
gb_SelectEQ=0;
}
}
break;
case SHORT_KEY_FR_EVENT:
if(gw_ChangeFrequencyTimer!=0)
{
gw_ChangeFrequencyTimer=3000;
FM_FREQ_CHG(0,1);
}
else
{
gc_FileSkipNumber=0;
if((gc_PlaySequenceMode == 0x02)||(gc_PlaySequenceMode == 0x01))
{
UI_FFFR(1);
}
else
{
gb_Openfile = 1;
X_RandomGetFileIndex();
gw_ShowTimer=3000;
gb_Frequency_Song=1; // 0=Show Frequency 1=Show Song Number/EQ
gb_SelectVol=0; // 1=Show Vol
gb_SelectEQ=0;
}
}
break;
case SHORT_KEY_MODE_EVENT: // CH
case LONG_KEY_MODE_EVENT:
if((XBYTE[0xB409]&0x92)==0x82)
{
FM_FREQ_CHG(1,1);
}
else
{
gw_ChangeFrequencyTimer=3000;
gb_Frequency_Song=0;
gb_CHChg=1;
}
if(gb_LED_LCM==1)
{
Frequency_Disp();
}
break;
case SHORT_KEY_VOLUP_EVENT: // CH +
case LONG_KEY_VOLUP_EVENT:
FM_FREQ_CHG(1,1);
break;
case SHORT_KEY_VOLDOWN_EVENT: // CH -
case LONG_KEY_VOLDOWN_EVENT:
FM_FREQ_CHG(0,1);
break;
case SHORT_KEY_STOP_EVENT: // STOP
case LONG_KEY_STOP_EVENT:
Playing_To_Stop();
break;
default:
break;
}
if(gc_SystemStateMode==SYSTEM_STATE1_PLAYING)
{
if(gc_fileend==0)
{
Audio_CoDec();
}
}
gc_EVENT=0;
break;
case STATE_PLAY_PAUSE:
switch(gc_EVENT)
{//PAUSE event
case SHORT_KEY_PLAY_EVENT:
//==return to PLAY state==//
gb_PlayPause = 0;
System_SetEQ(gc_PlayEQMode);//lyh add
System_SetVolume(gc_DSP_Volume);//lyh add
(0);
gc_SystemStateMode=SYSTEM_STATE1_PLAYING; // recovery previous State
break;
}
gc_EVENT=0;
break;
default://state default
break;
}
}
void UI_EventPostDpc(void) using 0
{
U8 sts;
// -- Open file post processor for record or play procedure trigger
if(gb_Openfile)
{
gb_Openfile = 0; //reset flag
if (gc_SystemStateMode==SYSTEM_STATE1_PLAYING)
{//SYSTEM_STATE1_PLAYING
if(gw_FileTotalNumber[0]) // There are mp3 and DVR's files are existed!
{
System_Stop();
System_SetEQ(gc_PlayEQMode);//lyh add
System_SetVolume(gc_DSP_Volume);//lyh add
sts = (0); //lyh add
if(sts)
{
System_Stop();
gb_UIPostError = 1;
return; // Open file error !!At here ,the process error!!!
}
gc_fileend=0;//gb_Openfile->gc_fileend
gb_PlayPause = 0;
}
else
{
gc_SystemStateMode=SYSTEM_STATE0_IDLE;
return;
}
}
G_Currtotalsecond=0;
USER_DelayDTms(10); // Delay 10mS for de-bounce
}
}
void Audio_CoDec(void)
{
if(gb_UIPostError) // UI post-processor error happen !!
{
// reset the state to IDLE state --
gb_UIPostError=0; // reset the error flag
if(gc_SystemStateMode==SYSTEM_STATE1_PLAYING)
{
if(gc_PlaySequenceMode == 0x01)
{//repeat one
//==initialize parameters==//
gc_SystemStateMode=SYSTEM_STATE0_IDLE;
}
else
{
//repeat all and no repeat
if (gw_FileIndex[0]==gw_FileTotalNumber[0])
{
gc_PeriphStep = PERIPH_IDLE;
gbt_FindFlag = 0;
gc_SystemStateMode=SYSTEM_STATE0_IDLE;//error happern,goto idle state
}
else
{
gb_Openfile = 1; // Make Openfile post-processor activity
}
DOS_Search_File(0x01,0,0x10);
}
}
return;
}
if(gc_SystemStateMode==SYSTEM_STATE1_PLAYING)
{
// 1 in the normal state
if(!gc_fileend)
{//A
if(gb_PlayPause)
{
gc_SystemStateMode=STATE_PLAY_PAUSE;
}
gc_fileend = CODEC_MCU_TO_DSP();
}
else
{//End of File for play
{//wait DSP decode end
if(gc_PlaySequenceMode == 0x03) // Random play
{
gb_Openfile = 1; // Make Openfile post-processor activity
X_RandomGetFileIndex();
}
else if(gc_PlaySequenceMode == 0x02) // Repeat All
{
if (gw_FileIndex[0]==gw_FileTotalNumber[0])
{
if(gc_PlaySequenceMode == 0x02)
{
gb_Openfile = 1; // Make Openfile post-processor activity
System_NextOrPrev(0, 1, 0);
}
else // Mode=0 , Single play, stop play right now!
{
gc_SystemStateMode=SYSTEM_STATE0_IDLE;
System_Stop();//must call system_stop() here
DOS_Search_File(0x12,1,0x10);
}
}
else
{
gb_Openfile = 1; // Make Openfile post-processor activity
System_NextOrPrev(0, 1, 0);
}
}
else // Repeat 1
{
gb_Openfile = 1;
System_NextOrPrev(0, 1, 0);
System_NextOrPrev(1, 1, 0);
}
}
}
}
}
void X_RandomGetFileIndex(void)
{
U16 Num;
if(gw_FileTotalNumber[0]==1)
{
return;
}
else if(gw_FileTotalNumber[0]==2)
{
System_NextOrPrev(0,1,0);
return;
}
Num=(((TH0<<8)+TL0)%gw_FileTotalNumber[0])+1;
if(gw_FileIndex[0]==Num) // Same song number, play next one
{
Num=1;
}
else
{
if (gw_FileIndex[0] > Num)
{
Num=gw_FileIndex[0]-Num;
}
else
{
Num=gw_FileTotalNumber[0]+gw_FileIndex[0]-Num;
}
}
gc_FileSkipNumber=Num;
System_NextOrPrev(1,1,0);
}
void UI_host_decet(void)
{
U8 tc_HostInsert,tc_DoInitialize;
tc_HostInsert = 0;
tc_DoInitialize = 0;
if((gc_CurrentCard == CURRENT_MEDIA_HOST)&&(gb_HostConnect == 0))
{//if data read write timeout occur
System_Stop();
gc_SystemStateMode = SYSTEM_STATE0_IDLE;
Host_Remove();
gc_CurrentCard = 0;
}
if(gc_SystemStateMode == SYSTEM_STATE0_IDLE)
{
tc_HostInsert = Host_DetectDevice();
if(!tc_HostInsert)
{
//host insert
if (!(gc_CurrentExistMedia & 0x20))
{
//HOST does not exist last time
gc_DOS_ErrorStatus = Host_Initial();
if(!gc_DOS_ErrorStatus)
{
//initial successfully
gc_CurrentExistMedia |= 0x20;
gc_CurrentCard = CURRENT_MEDIA_HOST;
tc_DoInitialize = 1;
}
else
{
Host_Remove(); //initial fail
tc_HostInsert=1; // 20080620
}
}
}
else
{//host be out
if((gc_CurrentExistMedia & 0x20)==0x20)
{//host exists last time
gc_CurrentExistMedia &= 0xDF;
gc_DOS_ErrorStatus = SD_STORAGE_Initialize();
if(gc_DOS_ErrorStatus==0)
{
tc_DoInitialize = 1;
}
}
tc_HostInsert=1; // 20080620
}
if (tc_DoInitialize)
{
gc_KeyValue=3; // maxliao 20070719
gs_File_FCB[0].dw_FDB_StartCluster = gdw_DOS_RootDirClus;
gbt_FindFlag = 0;//?璶材
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -