📄 nx58_dec.c
字号:
if(USB_ON) {
usb_on_cnt++;
if(usb_on_cnt > 200){
if(USB_CON_MODE == 0) {
FuncInMode = USB_STATE;
decode_state = MODE_EXIT_STATE;
return 1;//goto DecodingEnd;
}
}
}
else{
write_XDATA(GP0_OUTPUT_CONTROL, 0x3F);
USB_CON_MODE = 0;
usb_on_cnt = 0;
}
return 0;
}
void DecodingEnd_Message(void){
{
UINT32 sector_cur_tmp;
sector_cur_tmp = pFileIO->sector_cur;
set_sector_range(pFileIO);
FILE_INFO.DecodingSectorCnt -= (sector_cur_tmp - pFileIO->sector_cur);
}
if((FuncInMode != POWER_OFF_STATE) && (sub_mode_in_play == DEC_NAV)) {
while(display_update){
if(PBmode == NO_ACT)
display_update = dnavigation_display(display_update);
else
display_update = displayPlaylistNavigation(display_update);
}
}
else if((FuncInMode != POWER_OFF_STATE) && (sub_mode_in_play == DEC_MENU)) {
while(display_update)
dmenu_display();
}
setVolume(0);
Flash_Ready();
Dma_B0_PERI2RAM_Close();
Dma_B0_RAM2PERI_Close();
if(FuncInMode == PLAYLIST_STATE)
{//playlist marking
xdata _subdir_navi *NAV_SubDirInfo = ((_subdir_navi volatile xdata *)(NAV_SUBDIR_BUFF+0x10000));
playlist_add_pos = NAV_Display.cur - NAV_SubDirInfo[NAV_CUR_DIR.depth].total_subdir;
playlist_entry_pos = getDirShortEntry( playlist_add_pos, USED_DIR, &NAV_CUR_DIR, 0);
playlist_add_pos = DirIO.sector_cur;
}
if(FILE_INFO.HEADER.stereo)
Vol_stereo_set(0x7f);
else
Vol_mono_set(0x7f);
Mp3_Mute_On();
if(decode_state != FF_REW_STATE) {
#ifdef TLV320B
AIC_mute();
#else
// Codec_Close();
#endif
}
Decoder_Encoder_Stop();
Mp3_Mute_On();
Mp3_Reset();
}
void SLEEP_Message(void){
if(sleepoff_time_count > SLEEP_OFF_TIME[time_sleep_off]) {
FuncInMode = POWER_OFF_STATE;
Reserve_Code(CHANGE_IDLE_MODE);
}
}
void EL_LIGHT_Message(void){
if(el_time){
if(BACKLIGHT_TIME[el_time] < backlight_time_count){
LcdDisplayOn(LCD_DISPLAY_OFF); //DISPLAY OFF
#ifdef G5_BOARD
BACKLIGHT_OFF;
#endif
#if defined L320x240
if(FILE_INFO.HEADER.BitRate > 192)
Set_System_Clk(SC48M);
else
Set_System_Clk(SC24M);
#endif
}
}
}
void RTC_Message(void){
#ifdef ENABLE_TIME_MENU
data LongChar rtc_cur;
rtc_cur.c[3] = read_XDATA(RTC_COUNTER_VAL0);
rtc_cur.c[3] = read_XDATA(RTC_COUNTER_VAL0);
if(pre_rtc_value != rtc_cur.c[3]) {
/* ALARM & FM Booking Check Function*/
if(ALARM_INFO.tm_onoff || FM_BOOKING_INFO.tm_onoff){
rtc_cur.c[2] = read_XDATA(RTC_COUNTER_VAL1);
rtc_cur.c[2] = read_XDATA(RTC_COUNTER_VAL1);
rtc_cur.c[1] = read_XDATA(RTC_COUNTER_VAL2);
rtc_cur.c[1] = read_XDATA(RTC_COUNTER_VAL2);
rtc_cur.c[0] = read_XDATA(RTC_COUNTER_VAL3);
rtc_cur.c[0] = read_XDATA(RTC_COUNTER_VAL3);
if(ALARM_INFO.tm_onoff && FM_BOOKING_INFO.tm_onoff){
if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
if(FM_BOOKING_INFO.tm_total_rtc < ALARM_INFO.tm_total_rtc){
//First FM booking rec
FuncInMode = FM_BOOKING_STATE;
Reserve_Code(CHANGE_IDLE_MODE);
}else{
//First Alarm
FuncInMode = ALARM_STATE;
Reserve_Code(CHANGE_IDLE_MODE);
}
}
}else if(ALARM_INFO.tm_onoff && (rtc_cur.l >= WAKEUP_TOTAL_RTC)){
if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
FuncInMode = ALARM_STATE;
Reserve_Code(CHANGE_IDLE_MODE);
}
}else if(FM_BOOKING_INFO.tm_onoff){
if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
FuncInMode = FM_BOOKING_STATE;
Reserve_Code(CHANGE_IDLE_MODE);
}
}
}
/* EL Check Function */
if(el_time){
if((BACKLIGHT_TIME[el_time] + 1) > backlight_time_count){
backlight_time_count++;
}
}
/* SLEEP Check Function */
if(time_sleep_off){
sleepoff_time_count++;
SLEEP_Message();
}
#ifdef LYRIC_FUNC
if((Is_LRC_file == LYRIC_YES_DIS_YES) && vbr_bitrate){
vbr_liyric_time++;
if(init_lyric){
init_lyric = 0;
vbr_liyric_time -= 1;
}
}
#endif
}
pre_rtc_value = rtc_cur.c[3];
#else
data UINT8 cur_rtc_value;
cur_rtc_value = read_XDATA(RTC_COUNTER_VAL0);
cur_rtc_value = read_XDATA(RTC_COUNTER_VAL0);
if(pre_rtc_value != cur_rtc_value) {
/* EL Check Function */
if(el_time){
if((BACKLIGHT_TIME[el_time] + 1) > backlight_time_count){
backlight_time_count++;
}
}
/* SLEEP Check Function */
if(time_sleep_off){
sleepoff_time_count++;
SLEEP_Message();
}
#ifdef LYRIC_FUNC
if((Is_LRC_file == LYRIC_YES_DIS_YES) && vbr_bitrate){
vbr_liyric_time++;
if(init_lyric){
init_lyric = 0;
vbr_liyric_time -= 1;
}
}
#endif
}
pre_rtc_value = cur_rtc_value;
#endif
}
#ifdef NETSYNC_INCLUDE
void Netsync_Resume_Init(void){
xdata _fileio nFileIO;
xdata _fileio *npFileIO = &nFileIO;
xdata UINT8 *DMA_SECTOR_BUFF0 = ((unsigned char volatile xdata *)(BUFFER0+0x10000));
npFileIO->cluster = netsync_start_clus;
set_sector_range(npFileIO);
B0_Size(512);
LRead_SectorCloseEcc(DMA0, npFileIO->sector_cur, DATA_REMAP);
NED_CheckDrm(&gNEDInfo, DMA_SECTOR_BUFF0);
if( 1 == gNEDInfo.CONT.DrmFlag && 0 == gNEDInfo.nErrCode )
B0_Reset();
B0_Size(512);
}
#endif
UINT8 MP3_Decoding(void)
{
#ifdef FADE_IN_FUNC
audio_fad = 1;
#endif
bat_check_cnt = 0;
previous_bat_value = 0x0f;
key_check = 0;
#ifdef MEDIASYNC_INCLUDE
bIsLyricst = 0;
if(Is_LRC_file == LYRIC_YES_DIS_YES)
fnMediaSyncDecInitLyric(1, 1, 4, 16);
#endif
#ifdef LYRIC_FUNC
fnMediaSyncInitLyric();
#endif
#ifdef XSYNC_INCLUDE
if(file_type == FILE_MTX)
{
// 16byte key...
// 父距 16byte 焊促 累阑 版快俊绰 唱赣瘤绰 0肺 檬扁拳...
fnXSyncDecInitialize();
}
#endif
#ifdef NETSYNC_INCLUDE
if( netsync_resume == 1 && netsync_start_clus != 0 ){
netsync_resume = 0;
Netsync_Resume_Init();
}
#endif
FILE_INFO.DecTime = 0;
AB_REPEAT.mode = 0;
AB_REPEAT.start_cluster = 0;
AB_REPEAT.end_cluster = 0;
file_total_sector = (File_Size+511)>>9;
#if defined L320x240
bar_temp = (File_Size>>9)/190;
#elif defined L128x128
bar_temp = (File_Size>>9)/79;
#elif defined L96x64
bar_temp = (File_Size>>9)/42;
#elif defined MONO_LCD
bar_temp = (File_Size>>9)/80;
#endif
cur_bar_pos = pre_bar_pos = FILE_INFO.DecodingSectorCnt/bar_temp;
#if defined L320x240
if(sub_mode_in_play == DEC_DEC) {
d_DisplayBar(cur_bar_pos);
}
#else
if((sub_mode_in_play == DEC_DEC) && (Is_LRC_file != LYRIC_YES_DIS_YES)) {
d_DisplayBar(cur_bar_pos);
}
#endif
//DecodingStart:
pre_DecodingSectorCnt = 0;
pre_DecodingSectorCnt1 = 0;
IMAGE_INFO.Info.bc.b1 = 0;
current_key = KEY_NONE;
if(ff_rew_course == SEQ_FAST_REW) {
ET0 = 0;
REW_Search(0, 20);
ET0 = 1;
}
set_sector_range(pFileIO);
Mp3_Reset();
vol_step_up = 0;
setVolume(vol_step_up);
/***********************************************************************/
Volume_Setting(0x7f);
/***********************************************************************/
Mp3_Mute_Off();//START provide MCLK
#ifdef CLASS_D_AMP
if(codec_ctrl){
codec_ctrl = 0;
write_XDATA(AUDIO_CODEC_INTERFACE_CONTROL, 0x01);//0xFA10
write_XDATA(AUDIO_PLL_CONTROL, 0x04); //Audio pll control
uDelay(0x7000); // Wait until AUDIO PLL STABLE
write_XDATA(CLASSD_SOUND_CONTROL, 0x43); //POWER UP DAMP POWER FET
write_XDATA(CLASSD_RAMPFUNC_CONTROL, 0xC8); //RAMP UP SETTING
write_XDATA(CLASSD_SYSTEM_CONTROL, 0x0B); //POWER UP
uDelay(0x7fff); // Wait until
uDelay(0x7fff); // Wait until
uDelay(0x7fff); // Wait until
uDelay(0x7fff); // Wait until PWM 0% 0 -> 50%
uDelay(0x7fff); // Wait until
uDelay(0x7fff); // Wait until
if(FILE_INFO.HEADER.SamplingFreq>=32000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x38);
else if(FILE_INFO.HEADER.SamplingFreq>=16000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x39);
else write_XDATA(CLASSD_SYSTEM_CONTROL, 0x3A);
write_XDATA(CLASSD_SOUND_CONTROL, 0x43);
write_XDATA(CLASSD_RAMPFUNC_CONTROL, 0x30);
write_XDATA(CLASSD_RAMP_ENDPOINT, 0x73);
write_XDATA(CLASSD_OUTBUF_CONTROL, 0xCF);
write_XDATA(CLASSD_RESERVED, 0x00);
write_XDATA(CLASSD_POWERDOWN_INIT, 0x00);
write_XDATA(CLASSD_FAULT_INIT, 0x00);
}
else{
if(FILE_INFO.HEADER.SamplingFreq>=32000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x38);
else if(FILE_INFO.HEADER.SamplingFreq>=16000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x39);
else write_XDATA(CLASSD_SYSTEM_CONTROL, 0x3A);
}
#else
//Add Up register in NX5858
//------------------------------------------------------------------------
write_XDATA(SYS_PIN_CONTROL,0x10);//0xFF05 I2S Mode Enable
write_XDATA(AUDIO_PLL_CONTROL, 0x00);//0xFF15
//------------------------------------------------------------------------
write_XDATA(AUDIO_CODEC_INTERFACE_CONTROL, 0x2A);//0xFA10
if(codec_ctrl){
codec_ctrl = 0;
Codec_DEC_Initial2();
Codec_Reg_Set(WM_ADC_DAC_CONTROL, 0x80);
}
#endif
MP3_Decoder_Start();
EqulizerBand_Set();
EQ_mode_set(eq_mode);//WM8750 EQ
#ifdef BEEP_FUNC
if(beep_count) {
Play_Beep(beep_count);
beep_count = 0;
}
#endif
check_eq_start = 1;
check_eq_end = 0;
eqtime = 0;
eq_graph_enable = 0;
B0_Size(512);
Change_PlaySpeed(play_speed);
pre_HEADER_SamplingFreq = FILE_INFO.HEADER.SamplingFreq;
#ifdef LYRIC_FUNC
Vbr_Lyric_Init();
#endif
while(!getIsEOF(pFileIO->cluster)) {
if(decode_state == DECODE_STATE){
#ifdef DEC_TEST
xdata UINT8 file_process = 0;
do{
file_process = File_Control_Message(file_process);
}while(file_process < 4);
if(file_process == 5)// END OF FILE
break;
Other_process = 1;
#else
File_Control_Message();
#endif
}
if(vol_mask_init){
Volume_Mask_Message();//For Volume Mask
}
#ifdef FADE_IN_FUNC
FAD_IN_Message();
#endif
if(Other_process) {
if(sub_mode_in_play == DEC_DEC) {
DEC_Message();
}
else if(sub_mode_in_play == DEC_MENU) {
Menu_Message();
}
else if(sub_mode_in_play == DEC_NAV) {
NAV_Message();
}
else if(sub_mode_in_play == DEC_TRAN) {
TRAN_Message();
}
AB_Repeat_Message();
if(sub_mode_in_play != DEC_DEC){
if(sub_mode_in_play == DEC_TRAN2)
sub_mode_in_play = DEC_DEC;
}
if(Intro_Message())
goto DecodingEnd;
RTC_Message();
EL_LIGHT_Message();
}//end of if(Other_process)
#if defined L320x240
if((sub_mode_in_play == DEC_DEC) && (decode_state != MODE_EXIT_STATE) && (LcdOnOff_Status == LCD_DISPLAY_ON)){
if(check_eq_end){
check_eq_end = 0;
EQ_Display();
}
}
#elif defined L128x128
if(((Is_LRC_file != LYRIC_YES_DIS_YES) && sub_mode_in_play == DEC_DEC) && (decode_state != MODE_EXIT_STATE)){
if(check_eq_end){
check_eq_end = 0;
EQ_Display();
}
}
#endif
if(sub_mode_in_play == DEC_MENU || sub_mode_in_play == DEC_NAV) {
if(check_10SEC_end){
check_10SEC_end = 0;
sub_mode_in_play = DEC_TRAN;
}
}
if(USB_Message())
goto DecodingEnd;
if (key_check == 1) {
goto DecodingEnd;
}
if(sub_mode_in_play != DEC_MENU){
if( pre_HEADER_SamplingFreq != FILE_INFO.HEADER.SamplingFreq){
Change_PlaySpeed(play_speed);
}
}
if(read_XDATA(AUDIO_CODEC_STATUS)&0x04)
check_MP3_header();//Don't use this function!!!
pre_HEADER_SamplingFreq = FILE_INFO.HEADER.SamplingFreq;
if(Battery_Message())
goto DecodingEnd;
}//end while(!getIsEOF(FILE_INFO.DecodingCluster))
setVolume(0);
/*
if(AB_REPEAT.mode == 1) {
AB_REPEAT.mode = 2;
if(sub_mode_in_play == DEC_DEC && Is_LRC_file != LYRIC_YES_DIS_YES)
Lcd_AB(AB_ICON);
FILE_INFO.DecodingSectorCnt = AB_REPEAT.data_cnt ;
if(Is_LRC_file != LYRIC_YES_DIS_YES)
Lcd_Time(playtime_mode, 1);
AB_REPEAT.end_cluster = pre_cluster;
FILE_INFO.DecodingCluster = AB_REPEAT.start_cluster;
DeEndSector = DeSector + BootSector.BPB_SecPerClus;
Dma_To_Flash_Close();
Dma_To_Mp3_Close();
Decoder_Encoder_Stop();
goto DecodingStart;
}
*/
decode_state = FF_REW_STATE;
Repeat_Message(0);
DecodingEnd:
DecodingEnd_Message();
return(decode_state);
}
#ifdef LYRIC_FUNC
void LyricTestFunction(void)
{
if(Is_LRC_file == LYRIC_YES_DIS_YES){
if(!bLyricst_fire){
getLyricString(0);
}else{
LyricDisplay();
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -