sub_function2.i
来自「炬力方案176*132软件源码,适用于AK1025」· I 代码 · 共 3,645 行 · 第 1/4 页
I
3,645 行
typedef enum
{
MusicEditSelSta_NoSel,
MusicEditSelSta_WaitStart,
MusicEditSelSta_WaitEnd,
MusicEditSelSta_SelFinish
}EMU_MusicEditSelStatus;
typedef enum
{
MusicEditSta_NoFun,
MusicEditSta_SelSeg,
MusicEditSta_DelSeg
}EMU_MusicEditStatus;
typedef struct
{
long StartSec;
long EndSec;
file_location_t *location;
time_t *StartTime;
time_t *EndTime;
}STRU_SelMusicSegment;
typedef struct
{
char Disk;
long ClusterNo;
char FileName[12];
long StartSec;
long EndSec;
time_t StartTime;
time_t EndTime;
unsigned char bSelected;
}STRU_MusicSegment;
typedef struct
{
int EditCommand;
int EditCmdPara;
int SelSegmemtCount;
int CurSelSegmemtNO;
STRU_MusicSegment CurMusicEditSeg;
STRU_MusicSegment SelMusicEditSeg[ 12 ];
int CheckSum;
}STRU_MusicEditIniFile;
unsigned char SaveSelSegment(STRU_SelMusicSegment *SelSeg);
unsigned char SetDealCommamd(STRU_SelMusicSegment *CurSeg,int Cmd,int CmdPara);
unsigned char DeleteAllSelSegment();
unsigned char CreateMEIniFile();
unsigned char ReadMusicEditIniFile(STRU_MusicEditIniFile *pIniFile);
unsigned char WriteMusicEditIniFile(STRU_MusicEditIniFile *pIniFile);
unsigned char DeleteSelSegment(STRU_MusicEditIniFile *pIniFile,int SelIndex);
unsigned char DeleteSelSegmentBySegNo(STRU_MusicEditIniFile *pIniFile,int SegNo);
unsigned char ExchangeSelSegment(int SegNo1,int SegNo2,STRU_MusicEditIniFile *pIniFile);
unsigned char DeleteMusicSegment(STRU_MusicSegment *MusicFile);
unsigned char InsertMusicSegment(STRU_MusicSegment *dMusicFile,STRU_MusicSegment *sMusicFile, unsigned char mode);
void CreateNewMusicFileName(char *sFileName);
typedef enum
{
MP3Play,
WMAPlay,
ACT,
AG4,
AG8
}
MusicMode_t;
typedef enum
{
NormalPlay,
WaitSetAPointForAB,
WaitSetBPointForAB,
ABLoopPlay,
FollowRec,
FollowAB,
ComparePlay,
CompareAB
}Replay_status_t;
typedef enum
{
StopSta,
PauseSta,
PlaySta,
FFPlaySta,
FBPlaySta
}Play_status_t;
typedef enum
{
LoopNor,
LoopOne,
LoopOneDir,
LoopDir,
LoopAll,
Random,
Intro,
MaxRepeatMod
}Repeat_Mode_t;
typedef enum
{
Music_NON,
Music_MP3,
Music_WMA,
Music_ASF,
Music_WMV,
Music_OGG,
Music_APE
}Music_type_t;
typedef enum
{
Stop_key,
Play_play,
Play_key,
list_key
}Music_sel_mod_t;
typedef enum
{
mplaylist,
martists,
malbum,
mgenre,
mcomposers,
mlistnor
}play_listmod_t;
typedef struct
{
unsigned char Wow;
unsigned char Bass;
unsigned char Srs;
}SRSMod_t;
typedef struct
{
signed char volume;
Repeat_Mode_t repeat_mode;
eq_t eq_type;
signed char play_rate;
unsigned char replaytimes;
unsigned char replaygap;
Open_mod_t MusicOpenMod;
file_location_t location;
breakPT_t BreakPTSave;
time_t BreakPTDisTime;
play_listmod_t play_listmod;
unsigned char fselmod;
unsigned char PLmod;
SRSMod_t SRSMod;
unsigned int file_list_total_flash;
unsigned int file_list_total_card;
unsigned int file_list_num;
char file_list_type;
unsigned short magic;
} music_vars_t;
typedef struct
{
unsigned short magic;
file_location_t location;
}browser_vars_t;
typedef struct
{
unsigned char Bitrate_sav[3];
unsigned char TotalTime_sav[3];
} TimeRateData_sav_t;
typedef struct
{
unsigned short HeadIcon;
unsigned short HeadStr;
char *string;
}dialog_t;
extern music_vars_t g_music_vars;
extern Replay_status_t RePlayStatus;
extern Play_status_t PlayStatus;
extern unsigned short UpDisplayFlag;
extern int g_result;
extern pop_up_list_t list;
extern slider_t slider;
extern unsigned char g_currentMusicType;
extern unsigned short g_musicamount;
extern unsigned short g_musicsequence;
extern unsigned char g_replaytimes;
extern unsigned char g_replaypause;
extern unsigned char g_ScrollFlag;
extern unsigned char g_lyricflag;
extern unsigned short g_2HZ_CNT;
extern unsigned char g_2HZFlag;
extern unsigned short g_ABPointTimeSize;
extern char g_TagInfoBuf[];
extern char g_TagInfoBuf1[];
extern region_t scrollscreensize;
extern unsigned char g_ifAVflag;
extern unsigned char need_draw;
extern unsigned char g_volume;
extern unsigned char g_introCntMode;
extern unsigned char g_OldSecTempBackup;
extern unsigned char g_introCNT;
extern comval_t g_comval;
extern unsigned char g_ReplayTimeCNT;
extern char temp_buffer[9];
extern TimeRateData_sav_t TimeRateData_sav;
extern char g_FadeInStatusFlag;
extern unsigned char g_FadeInStepFlag;
extern unsigned char g_AVSetFlag;
extern unsigned char g_PAOpenFlag;
extern unsigned char g_ABMinTimeCNT;
extern Open_param_t g_Openparam;
extern unsigned char g_CardInFlag;
extern unsigned char g_DiskStateFlag;
extern unsigned char g_PowerOffFlag;
extern unsigned char MotivePosion0;
extern unsigned char MotivePosion1;
extern unsigned char ifSelBuffToltalTimeFlag;
extern unsigned char CaltimeFlag;
extern char WaitForCaltimeCNT;
extern char savenum;
extern unsigned char g_from_browser;
extern unsigned int g_file_list_total;
extern int g_autoswitch_counter;
extern void Reset_USERPL();
extern unsigned char Add_UserPL(file_location_t *location);
extern unsigned char user_pl_del( unsigned short offset);
extern unsigned char WrHead_PL(char ClearFlag);
extern unsigned short FirstOffset;
extern unsigned short LastOffset;
extern unsigned short PlaylistCount;
extern unsigned char need_WPL;
extern unsigned char bList_Flag;
extern int ui_userplaylist(file_location_t *location,char type);
void PASS_KEY(int DATA);
non_banked void Music_timeint( void );
non_banked void Music_2HZint( void );
void volume_callback( int );
void speed_callback( int );
void eq_callback( int );
int ui_SRS_menu( void );
void srs_callback( int srs );
void bass_user_callback(int bass_user);
void srs_user_callback(int srs_user);
void wow_user_callback(int wow_user);
void send_user_srs();
void loop_callback( int );
int ui_stop( void );
int ui_play( void );
int ui_lyric( void );
int ui_play_menu( void );
int ui_stop_menu( void );
int ui_EQ_menu( void );
int ui_SRSUSER_menu(void);
int ui_loop_menu( void );
int ui_follow_compare( void );
int ui_followAB( void );
int ui_followRec( void );
int ui_compareAB( void );
int ui_comparePlay( void );
int RealDisplay( void );
void ShowNowTime( unsigned char mod);
void RefreshMainScreen( void );
void Show_Bitrate( void );
void DisplayErrMsg(int ErrMsg);
void Show_MusicType(void);
Music_type_t CheckMusicType( char * filename );
int play_key_next( int key );
int play_key_prev( int key );
int ToNextMusic( Music_sel_mod_t mod );
int GetInformation( void );
int GetInformation1( void );
unsigned char ChangeMusic( unsigned char Direct, Music_sel_mod_t mod );
void SelectCurMusic(void);
unsigned char musicpSendCommand( unsigned char , int);
unsigned char musicpSendCommand_bank( unsigned char cmd, int param );
unsigned char DealErrCase( void );
int ChangeVolume( void );
int DealMusicFileEnd( char DisMod );
int DealPlayKey( void );
void CheckVolumeLimit( void );
void CheckPlayrateLimit( void );
void CheckReplaygapLimit( void );
void CheckReplaytimesLimit( void );
void BackupCurrentTime(void);
void FadeInOutFun(void);
void FadeOut( unsigned char DisMod );
int PrevMusicInPlay(void);
void ClearTimePara(void);
void DealForABGap(music_play_status_t *status);
void ClosePA(void);
void openPA( unsigned char volume);
void DisplayErrInfor(int id);
int InitFileSelector(void);
int StartFileSelector(void);
int UpdateFileSelector(void);
void ErrReport(Play_status_t status);
void FlashMotived( unsigned char value);
extern char g_TagInfoBuf[90];
extern SD_FILE* g_Resfp_Sav;
extern char return_to_play ;
char temp_buffer[9] = { 0 };
void OutPutVolume(int vol);
int DealForDRMsong(void);
int ui_dialog(dialog_t *dialog,int string_id);
unsigned char GetAPEInfoByNo(char *filename, ID3Info_t *ID3, unsigned char mode);
const char ExtMusicstr [] [4] =
{
"MP3", "WMA", "ASF", "WMV", "OGG", "APE"
};
void CheckVolumeLimit( void )
{
if (g_music_vars.volume>31) g_music_vars.volume = 31;
if (g_music_vars.volume<0) g_music_vars.volume = 0;
}
void CheckPlayrateLimit( void )
{
if (g_music_vars.play_rate > 8)
{
g_music_vars.play_rate = 8;
}
if (g_music_vars.play_rate < -8)
{
g_music_vars.play_rate = -8;
}
}
void CheckReplaygapLimit( void )
{
if (g_music_vars.replaygap<1)
{
g_music_vars.replaygap = 1;
}
if (g_music_vars.replaygap>10)
{
g_music_vars.replaygap = 10;
}
}
void CheckReplaytimesLimit( void )
{
if (g_music_vars.replaytimes<1)
{
g_music_vars.replaytimes = 1;
}
if (g_music_vars.replaytimes>10)
{
g_music_vars.replaytimes = 10;
}
}
Music_type_t CheckMusicType( char * filename )
{
unsigned char ext[4];
memcpy(ext, filename + 8, 3);
ext[0] = (ext[0]>='a' && ext[0]<='z') ? ext[0] - 'a' + 'A' : ext[0];
ext[1] = (ext[1]>='a' && ext[1]<='z') ? ext[1] - 'a' + 'A' : ext[1];
ext[2] = (ext[2]>='a' && ext[2]<='z') ? ext[2] - 'a' + 'A' : ext[2];
ext[3] = 0;
if (strcmp(ext, ExtMusicstr[0]) == 0)
{
return Music_MP3;
}
else if (strcmp(ext, ExtMusicstr[1]) == 0)
{
return Music_WMA;
}
else if (strcmp(ext, ExtMusicstr[2]) == 0)
{
return Music_ASF;
}
else if (strcmp(ext, ExtMusicstr[3]) == 0)
{
return Music_WMV;
}
else if (strcmp(ext, ExtMusicstr[4]) == 0)
{
return Music_OGG;
}
else if (strcmp(ext, ExtMusicstr[5]) == 0)
{
return Music_APE;
}
else
{
return Music_NON;
}
}
void make_dirname(void)
{
int result;
char Backbuf[32];
fselGetLocation(&g_music_vars.location);
if(g_music_vars.location.path[0]==':')
{
strcpy(dir_name,"ROOT");
}
else
{
FS_Backup(Backbuf, 2 ,0);
FS_CD("\\");
memcpy(dir_name, g_music_vars.location.path, 12);
result = FS_GetName(dir_name, 14);
if (result != 0)
{
unitochar(dir_name, sizeof(dir_name), g_comval.langid);
}
else
{
memcpy(dir_name, g_music_vars.location.path, 12);
dir_name[8]=0;
dir_name[9]=0;
}
FS_Restore(Backbuf, 2 ,0);
}
}
void read_var( void )
{
int result;
kval_t kval;
browser_vars_t temp_browser_vars;
VMRead(& kval, 0x0000 , sizeof(kval_t));
g_PowerOffFlag = kval.rtcresetflag;
result = VMRead(& g_comval, 0x0200 , sizeof(g_comval));
;
if (g_comval.magic != 0xdead )
{
;
GetDefaultComval(&g_comval);
}
ap_message_init(& g_comval);
result = VMRead(& g_music_vars, 0x1000 , sizeof(g_music_vars));
;
if (g_music_vars.magic != 0xbeef )
{
unsigned char i;
;
g_music_vars.magic = 0xbeef ;
g_music_vars.volume = 24;
output8(0x87, 24|0xe0);
g_music_vars.eq_type = 0;
g_music_vars.replaytimes = 5;
g_music_vars.replaygap = 1;
g_music_vars.repeat_mode = 0 ;
g_music_vars.play_rate = 0;
g_music_vars.location.disk = 'C';
g_music_vars.play_listmod = mlistnor;
g_music_vars.fselmod = 0 ;
g_music_vars.MusicOpenMod = Nor_open;
g_music_vars.SRSMod.Wow=8;
g_music_vars.SRSMod.Bass=8;
g_music_vars.SRSMod.Srs=4;
g_music_vars.file_list_type = 0xff;
g_music_vars.file_list_num = 0;
strcpy(g_music_vars.location.path, ":" );
ClearTimePara();
}
if(g_from_browser)
{
VMRead(&temp_browser_vars, 0x4C00 , sizeof(browser_vars_t));
memcpy(&g_music_vars.location, &temp_browser_vars.location, sizeof(file_location_t));
g_music_vars.file_list_type = 0xff;
ClearTimePara();
}
list.string_id = g_comval.langid;
}
void openDAC(void)
{
dac_t dacattr;
sfr IO80_dac = 0x80;
sfr IO8B_dac = 0x8b;
dacattr.dacselect = 0;
dacattr.rate = FS_8K;
EnableDAC(& dacattr);
IO80_dac = IO80_dac | 0x08;
IO8B_dac = IO8B_dac | 0x10;
}
void ClearTimePara(void)
{
unsigned char i;
g_music_vars.MusicOpenMod = Nor_open;
g_music_vars.BreakPTSave.breakPT = 0;
g_music_vars.BreakPTDisTime.hour = 0;
g_music_vars.BreakPTDisTime.minute = 0;
g_music_vars.BreakPTDisTime.second = 0;
g_music_vars.BreakPTSave.ApointSave = 0;
g_music_vars.BreakPTSave.BpointSave = 0;
for (i = 0; i<12; i++)
{
g_music_vars.BreakPTSave.breakPTTime[i] = 0;
}
{ g_introCntMode = 1 ; g_OldSecTempBackup = g_music_vars.BreakPTDisTime.second; g_introCNT = 0; }
}
int ChangeVolume( void )
{
wma_play_status_t status_buf;
int key;
slider_t slider;
return_to_play=1;
slider.string_id=g_comval.langid;
if (RePlayStatus != NormalPlay)
{
if (g_currentMusicType == Music_MP3)
{
if (g_music_vars.location.disk != 'C')
{
return 0;
}
ClearScreen( 0 );
slider.max = 8;
slider.min = -8;
slider.step = 1;
slider.title= 468 ;
CheckPlayrateLimit();
slider.value = g_music_vars.play_rate;
ui_auto_update= 0 ;
g_result = ui_slider(& slider, speed_callback);
ui_auto_update = 1 ;
g_music_vars.play_rate = slider.value;
{ ui_auto_update= 0 ; UpDisplayFlag=UpDisplayFlag | 0x8000 | 0x4000 | 0x2000 | 0x1000 | 0x0800 | 0x0400 | 0x0200 | 0x0100 | 0x0080 | 0x0001 | 0x0040 ; } ;
need_draw = 1 ;
if (g_result != 0)
{
return g_result;
}
}
return 0;
}
slider.min = 0;
slider.max = 31;
slider.value = g_music_vars.volume;
slider.step = 1;
slider.title= 393 ;
g_result = ui_slider(& slider, volume_callback);
ui_auto_update = 1 ;
{ g_introCntMode = 0 ; g_OldSecTempBackup = g_music_vars.BreakPTDisTime.second; g_introCNT = 0; } ;
if (g_result != 0)
{
return g_result;
}
{ ui_auto_update= 0 ; UpDisplayFlag=UpDisplayFlag | 0x8000 | 0x4000 | 0x2000 | 0x1000 | 0x0800 | 0x0400 | 0x0200 | 0x0100 | 0x0080 | 0x0001 | 0x0040 ; } ;
need_draw = 1 ;
return 0;
}
int GetInformation( void )
{
char g_lyric_mod;
int result;
ID3Info_t ID3;
output8( 0x4e , input8( 0x4e ) | 0x08);
g_currentMusicType = CheckMusicType(g_music_vars.location.filename);
ID3.TIT2_length = 30;
ID3.TPE1_length = 30;
ID3.TALB_length = 30;
ID3.TENC_length = 0;
ID3.TIT2_buffer = & g_TagInfoBuf[0];
ID3.TPE1_buffer = & g_TagInfoBuf[30];
ID3.TALB_buffer = & g_TagInfoBuf[60];
ID3.TENC_buffer = & g_TagInfoBuf[90];
switch (g_currentMusicType)
{
case Music_WMA:
case Music_WMV:
case Music_ASF:
ID3.TALB_length = 30;
if (wmaGetTAGInfo(g_music_vars.location.filename, &ID3))
{
unitochar(g_TagInfoBuf, 30, g_comval.langid);
unitochar(&g_TagInfoBuf[30], 30, g_comval.langid);
unitochar(&g_TagInfoBuf[60], 30, g_comval.langid);
if ( (g_TagInfoBuf[0] !=0)
|| (g_TagInfoBuf[30] !=0)||(g_TagInfoBuf[60]!=0))
{
strcpy(g_TagInfoBuf, & g_TagInfoBuf[0]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[30]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[60]);
strcat(g_TagInfoBuf, " ");
}
}
else
{
g_TagInfoBuf[0] = 0x0;
}
break;
case Music_MP3:
if (mp3GetID3Info(g_music_vars.location.filename, & ID3, g_comval.langid))
{
strcpy(g_TagInfoBuf, & g_TagInfoBuf[0]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[30]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[60]);
strcat(g_TagInfoBuf, " ");
}
else
{
g_TagInfoBuf[0] = 0x0;
}
break;
case Music_APE:
memset(g_TagInfoBuf,0,90);
if (GetAPEInfoByNo(g_music_vars.location.filename, &ID3, 0))
{
strcpy(g_TagInfoBuf, & g_TagInfoBuf[0]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[30]);
strcat(g_TagInfoBuf, " ");
strcat(g_TagInfoBuf, & g_TagInfoBuf[60]);
strcat(g_TagInfoBuf, " ");
}
else
{
g_TagInfoBuf[0] = 0x0;
}
break;
default:
g_TagInfoBuf[0] = 0x0;
break;
}
if (g_TagInfoBuf[0] == 0)
{
memcpy(g_TagInfoBuf, g_music_vars.location.filename, 12);
{
result = FS_GetName(g_TagInfoBuf, 31);
if (result != 0)
{
unitochar(g_TagInfoBuf, sizeof(g_TagInfoBuf), g_comval.langid);
}
else
{
memcpy(g_TagInfoBuf, g_music_vars.location.filename, 12);
}
}
}
for (result = 0; result<sizeof(g_TagInfoBuf); result++)
{
if (g_TagInfoBuf[result] == 0)
{
g_TagInfoBuf[result] = ' ';
g_TagInfoBuf[result + 1] = 0;
break;
}
}
output8( 0x4e , input8( 0x4e ) | 0x08);
BankSwitch((unsigned long)lyricQueryExist >> 16);
g_lyricflag = lyricQueryExist(g_music_vars.location.filename);
if (g_lyricflag)
{
g_lyric_mod = lyricLoad(g_music_vars.location.filename, g_TagInfoBuf);
}
if (g_lyric_mod == 0)
{
g_lyricflag = 0 ;
}
output8( 0x4e , input8( 0x4e ) | 0x08);
}
void openPA( unsigned char volume)
{
int i;
pa_t paattr;
if (!g_PAOpenFlag)
{
g_PAOpenFlag = 1 ;
paattr.pa_in.dacin = 1;
paattr.pa_in.fmin = 0;
paattr.pa_in.linein = 0;
paattr.pa_in.micin = 0;
paattr.volume = volume;
EnablePA(& paattr);
for (i = 0; i < 2000; i++)
{
output8( 0x4e , input8( 0x4e ) | 0x08);
}
}
musicpSendCommand( 0x40 , volume);
OutPutVolume(volume);
}
void ClosePA(void)
{
if (g_PAOpenFlag)
{
g_PAOpenFlag = 0 ;
DisablePA();
}
}
unsigned char DisplayTimeRollback(void)
{
wma_inf_t licensinfbuf;
unsigned long curdatesec;
date_t curdate;
time_t curtime;
if (!musicpSendCommand( 0x10 , (int)&licensinfbuf))
{
return 1 ;
}
if (licensinfbuf.drmmode == INF_NORMALWMA)
{
return 1 ;
}
SetBackgdColor( 0x00000000 );
ClearScreen( 0 );
SetPenColor( 0x0000ffff );
ResShowMultiString( 601 , g_comval.langid, 25, 56);
while( ap_get_message() != 0 );
ap_sleep(4);
return 0 ;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?