📄 main.i
字号:
{
unsigned char prIsActive;
unsigned char prStartHead;
unsigned short prStartCylSect;
unsigned char prPartType;
unsigned char prEndHead;
unsigned short prEndCylSect;
unsigned int prStartLBA;
unsigned int prSize;
};
struct partrecordBytes
{
unsigned char prIsActive;
unsigned char prStartHead;
unsigned char prStartCylSect[2];
unsigned char prPartType;
unsigned char prEndHead;
unsigned char prEndCylSect[2];
unsigned char prStartLBA[4];
unsigned char prSize[4];
};
struct partsector
{
char psPartCode[512-64-2];
unsigned char psPart[64];
unsigned char psBootSectSig0;
unsigned char psBootSectSig1;
};
struct extboot {
char exDriveNumber;
char exReserved1;
char exBootSignature;
char exVolumeID[4];
char exVolumeLabel[11];
char exFileSysType[8];
};
struct bootsector50 {
unsigned char bsJump[3];
char bsOemName[8];
char bsBPB[25];
char bsExt[26];
char bsBootCode[448];
unsigned char bsBootSectSig0;
unsigned char bsBootSectSig1;
};
struct bpb50 {
unsigned short bpbBytesPerSec;
unsigned char bpbSecPerClust;
unsigned short bpbResSectors;
unsigned char bpbFATs;
unsigned short bpbRootDirEnts;
unsigned short bpbSectors;
unsigned char bpbMedia;
unsigned short bpbFATsecs;
unsigned short bpbSecPerTrack;
unsigned short bpbHeads;
unsigned int bpbHiddenSecs;
unsigned int bpbHugeSectors;
};
struct bootsector710 {
unsigned char bsJump[3];
char bsOemName[8];
char bsBPB[53];
char bsExt[26];
char bsBootCode[418];
unsigned char bsBootSectSig2;
unsigned char bsBootSectSig3;
unsigned char bsBootSectSig0;
unsigned char bsBootSectSig1;
};
struct bpb710 {
unsigned short bpbBytesPerSec;
unsigned char bpbSecPerClust;
unsigned short bpbResSectors;
unsigned char bpbFATs;
unsigned short bpbRootDirEnts;
unsigned short bpbSectors;
unsigned char bpbMedia;
unsigned short bpbFATsecs;
unsigned short bpbSecPerTrack;
unsigned short bpbHeads;
unsigned int bpbHiddenSecs;
unsigned int bpbHugeSectors;
unsigned int bpbBigFATsecs;
unsigned short bpbExtFlags;
unsigned short bpbFSVers;
unsigned int bpbRootClust;
unsigned short bpbFSInfo;
unsigned short bpbBackup;
};
struct bpb710Bytes {
unsigned char bpbBytesPerSec[2];
unsigned char bpbSecPerClust;
unsigned char bpbResSectors[2];
unsigned char bpbFATs;
unsigned char bpbRootDirEnts[2];
unsigned char bpbSectors[2];
unsigned char bpbMedia;
unsigned char bpbFATsecs[2];
unsigned char bpbSecPerTrack[2];
unsigned char bpbHeads[2];
unsigned char bpbHiddenSecs[4];
unsigned char bpbHugeSectors[4];
unsigned char bpbBigFATsecs[4];
unsigned char bpbExtFlags[2];
unsigned char bpbFSVers[2];
unsigned char bpbRootClust[4];
unsigned char bpbFSInfo[2];
unsigned char bpbBackup[2];
};
struct direntry {
unsigned char deName[8];
unsigned char deExtension[3];
unsigned char deAttributes;
#line 239 "FAT.h"
unsigned char deLowerCase;
unsigned char deCHundredth;
unsigned char deCTime[2];
unsigned char deCDate[2];
unsigned char deADate[2];
unsigned short deHighClust;
unsigned char deMTime[2];
unsigned char deMDate[2];
unsigned short deStartCluster;
unsigned int deFileSize;
};
struct direntryBytes {
unsigned char deName[8];
unsigned char deExtension[3];
unsigned char deAttributes;
#line 270 "FAT.h"
unsigned char deLowerCase;
unsigned char deCHundredth;
unsigned char deCTime[2];
unsigned char deCDate[2];
unsigned char deADate[2];
unsigned char deHighClust[2];
unsigned char deMTime[2];
unsigned char deMDate[2];
unsigned char deStartCluster[2];
unsigned char deFileSize[4];
};
struct winentry {
unsigned char weCnt;
unsigned char wePart1[10];
unsigned char weAttributes;
unsigned char weReserved1;
unsigned char weChksum;
unsigned char wePart2[12];
unsigned short weReserved2;
unsigned char wePart3[4];
};
struct winentryBytes {
unsigned char weCnt;
unsigned char wePart1[10];
unsigned char weAttributes;
unsigned char weReserved1;
unsigned char weChksum;
unsigned char wePart2[12];
unsigned char weReserved2[2];
unsigned char wePart3[4];
};
#line 332 "FAT.h"
#line 341 "FAT.h"
struct FileInfoStruct
{
unsigned int StartCluster;
unsigned int Size;
unsigned char Attr;
unsigned int Sector;
unsigned short Offset;
};
extern unsigned short fatGetWord(unsigned char * addr);
extern unsigned int fatGetDWord(unsigned char * addr);
extern unsigned char SearchInit(void);
extern unsigned char Search(unsigned short *music_record_addr,struct direntryBytes*MusicInfo,unsigned short *Count,unsigned char *type);
extern unsigned char SearchLrc(unsigned char *dir,unsigned char * longnamebuffer,struct direntryBytes*LrcInfo,unsigned short music_record_addr);
extern unsigned char FAT_LoadPartCluster(unsigned int cluster,unsigned char part,unsigned char * buffer);
extern unsigned char FAT_Init(void);
extern unsigned int FAT_NextCluster(unsigned int cluster);
extern unsigned int FAT_FindFreeCluster(void);
extern unsigned char FAT_DisDir(unsigned char *dir);
extern unsigned short FAT_FindItem(unsigned int cluster, unsigned char *name, struct FileInfoStruct *FileInfo);
extern unsigned int FAT_Open(unsigned char * dir);
extern unsigned int FAT_OpenDir(unsigned char * dir);
extern unsigned char FAT_Read(unsigned int pointer, unsigned int size);
extern unsigned char FAT_Rename(unsigned char *dir,unsigned char *newname);
extern unsigned char FAT_ModifyFAT(unsigned int cluster,unsigned int val);
extern unsigned char FAT_Delete(unsigned char *dir);
extern unsigned char FAT_DelItem(struct FileInfoStruct *FileInfo);
extern unsigned short FAT_FindFreeItem(unsigned int cluster, struct FileInfoStruct *FileInfo);
extern unsigned char FAT_MkDir(unsigned char * dir);
extern unsigned char FAT_Write(unsigned int cluster,unsigned char *data,unsigned int size);
extern unsigned int FAT_Create(unsigned char * dir,unsigned int size);
extern unsigned char FAT_RmDir(unsigned char * dir);
extern unsigned short FAT_Close(unsigned int * p);
#line 59 "main.c"
#line 1 "LCD_APP.h"
#line 1 "LCD_ASCII.h"
#line 22 "LCD_ASCII.h"
extern void Dis_Ascii_12_fast(unsigned short x,unsigned short y,unsigned char ch);
extern void Dis_Ascii_12(unsigned short x,unsigned short y,unsigned char ch);
extern void Dis_Ascii_16(unsigned short x,unsigned short y,unsigned char ch);
#line 22 "LCD_APP.h"
#line 1 "LCD_GBK.h"
#line 21 "LCD_GBK.h"
extern unsigned int FAT_Open(unsigned char * dir);
extern unsigned char (* FAT_ReadSector)(unsigned int,unsigned char *);
extern unsigned char (* FAT_WriteSector)(unsigned int,unsigned char *);
extern unsigned char GBK_Ini(void);
extern unsigned char Dis_GBK12_fast(unsigned short x,unsigned short y,unsigned char *ch);
extern unsigned char Dis_GBK12(unsigned short x,unsigned short y,unsigned char *ch);
extern unsigned char Dis_GBK16(unsigned short x,unsigned short y,unsigned char *ch);
extern unsigned char Unicode_to_GBK(unsigned char *ch);
extern unsigned char GBK_to_Unicode(unsigned char *ch);
#line 23 "LCD_APP.h"
extern unsigned char LCD_print12_fast(unsigned short x,unsigned short y,unsigned char *str);
extern void Print_ICON_12(unsigned short x,unsigned short y,unsigned char ch);
extern void Print_ICON1_12(unsigned short x,unsigned short y,unsigned char ch);
extern unsigned char LCD_print12_P(unsigned short x,unsigned short y,unsigned char *str);
extern unsigned char LCD_print16_P(unsigned short x,unsigned short y,unsigned char *str);
extern unsigned char LCD_print12(unsigned short x,unsigned short y,unsigned char *str);
extern unsigned char LCD_print16(unsigned short x,unsigned short y,unsigned char *str);
extern unsigned char LCD_print_unicode16(unsigned short x,unsigned short y,unsigned short *str);
extern unsigned char LCD_print_unicode12(unsigned short x,unsigned short y,unsigned short *str);
#line 60 "main.c"
#line 61 "main.c"
#line 62 "main.c"
#line 85 "main.c"
#line 159 "main.c"
enum IconTag
{
Playing,Pause,RepetAll,RepetOne,Shuffle,Time,Music,Speaker
};
extern unsigned char LongNameBuffer[80];
extern unsigned char LongNameFlag;
extern unsigned char FAT32_Enable;
extern unsigned short SectorsPerClust;
extern unsigned short FirstDataSector;
struct direntryBytes MusicInfo;
struct direntryBytes LrcInfo;
unsigned short totalsongs;
unsigned char type;
unsigned char lrc =0;
unsigned char HanziEnable = 0;
struct LrcStruct_s {
struct LrcStruct_s * next;
unsigned int time;
unsigned short eeaddr;
};
struct LrcStructHead_s {
struct LrcStruct_s *header;
unsigned char title[32];
unsigned char artist[16];
unsigned short offset;
unsigned char sign;
};
struct LrcStructHead_s LrcStructHead;
unsigned char lrcbuffer[sizeof(struct LrcStruct_s) * 120];
unsigned char lrcdatbuf[4096];
unsigned char track[128];
void ClearTrackInfo()
{
unsigned char i;
for(i=0;i<128;i++)track[i] = 0;
}
unsigned char SetTrack(unsigned short songs)
{
unsigned char byte_offset;
unsigned char bit_offset;
songs--;
byte_offset = songs/8;
bit_offset = songs%8;
if(track[byte_offset] & (1<<bit_offset))return 1;
else
{
track[byte_offset] |= 1<<bit_offset;
return 0;
}
}
void Delay(unsigned short n)
{
while(n--);
}
unsigned char FLGG=0;
void __irq Timer0_Exception(void)
{
if(FLGG==0 ) { (*((volatile unsigned long *) 0xE0028004))=(0x01 << 21); FLGG=1;}
else {(*((volatile unsigned long *) 0xE002800C))=(0x01 << 21); FLGG=0; }
(*((volatile unsigned long *) 0xE0004000)) = 0x01;
(*((volatile unsigned long *) 0xFFFFF030)) = 0;
}
void Time0Init(void)
{
(*((volatile unsigned long *) 0xE000400C))=0;
(*((volatile unsigned long *) 0xE0004014)) = 0x03;
(*((volatile unsigned long *) 0xE0004018)) = 0xffffffff;
(*((volatile unsigned long *) 0xE0004004)) = 0x03;
(*((volatile unsigned long *) 0xE0004004)) = 0x01;
(*((volatile unsigned long *) 0xFFFFF00C)) = 0x00;
(*((volatile unsigned long *) 0xFFFFF200)) = (0x20 | 0x04);
}
unsigned char strcomp(unsigned char * src, unsigned char * dst)
{
while(*src)
{
if(*src++ != *dst++)return 0;
}
return 1;
}
unsigned char strcomp_noncase(unsigned char * src, unsigned char * dst)
{
unsigned char * p1 = src, * p2 = dst;
while(*p1)
{
if((*p1 == *p2) || ((*p1<*p2)&&((*p2-*p1) == 0x20 )) )
{
p1 ++;
p2 ++;
}
else return 0;
}
return 1;
}
unsigned char LrcProc(unsigned char *LongNameBuffer,unsigned short music_record_addr)
{
struct LrcStruct_s * LrcStruct_p;
struct LrcStruct_s * LrcStruct_p_up, * LrcStruct_p_temp,* LrcStruct_p_down;
struct LrcStruct_s * LrcStruct_p_header;
unsigned short lrcaddr;
unsigned char part;
unsigned short i;
unsigned short j;
unsigned char temp;
unsigned char * buffer;
unsigned short min,sec,ms;
unsigned char sector;
unsigned char totalsect;
unsigned short leftbytes;
unsigned int p;
unsigned char mscnt;
LrcStructHead.header = (struct LrcStruct_s *)lrcbuffer;
if(SearchLrc("\\lrc",LongNameBuffer,&LrcInfo,music_record_addr)==0)
{
printf(("\r\n*****************************************************\r\n"));
printf(("Found LRC file!\r\n"));
printf(("\r\nAnalyzing LRC file ...........\r\n"));
lrc = 1;
lrcaddr = 0;
LrcStruct_p = LrcStructHead.header;
for(i=0;i<120-1;i++)
{
LrcStruct_p->next = LrcStruct_p + 1;
LrcStruct_p = LrcStruct_p->next;
}
LrcStruct_p->next = 0;
LrcStruct_p = LrcStructHead.header;
LrcStructHead.offset = 0;
LrcStructHead.title[0] = '\0';
LrcStructHead.artist[0] = '\0';
buffer = malloc(520);
if(buffer==0)
{
return 1;
}
p = get16_little(LrcInfo.deStartCluster)+(((unsigned int)get16_little(LrcInfo.deHighClust))<<16);
totalsect = get32_little(LrcInfo.deFileSize)/512;
leftbytes = get32_little(LrcInfo.deFileSize)%512;
sector=0;
while(1)
{
for(part=0;part<SectorsPerClust;part++)
{
if(FAT_LoadPartCluster(p,part,buffer))
{
free(buffer);
return 1;
}
for(j=0;j<512;)
{
if(sector == totalsect && j == leftbytes)
{
part = SectorsPerClust;
break;
}
if(buffer[j] == '[')
{
i = 0;
if(strcomp_noncase("TI:",&buffer[j+1]))
{
j+=4;
while(1)
{
temp = buffer[j++];
if(temp == 0x0d || temp == 0x0a || temp == ']' || i> (32 - 2))
break;
LrcStructHead.title[i++] = temp;
}
LrcStructHead.title[i] = 0;
printf(("Title : %s \r\n"),LrcStructHead.title);
}
else if(strcomp_noncase("AR:",&buffer[j+1]))
{
j+=4;
while(1)
{
temp = buffer[j++];
if(temp == 0x0d || temp == 0x0a || temp == ']' || i>(16 - 2))
break;
LrcStructHead.artist[i++] = temp;
}
LrcStructHead.artist[i] = 0;
printf(("Artist : %s \r\n"),LrcStructHead.artist);
}
else if(strcomp_noncase("OFFSET:",&buffer[j+1]))
{
j+=8;
LrcStructHead.offset = 0;
LrcStructHead.sign = 1;
while(1)
{
temp = buffer[j++];
if(temp == ']')break;
if(temp == '-')
{
LrcStructHead.sign = 0;
continue;
}
LrcStructHead.offset *= 10;
LrcStructHead.offset += (temp-0x30);
}
}
else if(strcomp_noncase("BY:",&buffer[j+1]))
{
j+=4;
while(1)
{
temp = buffer[j++];
if(temp == 0x0d || temp == 0x0a || temp == ']' ||i>30)break;
}
}
else if(strcomp_noncase("AL:",&buffer[j+1]))
{
j+=4;
uart0_prints(("Album : "));
while(1)
{
temp = buffer[j++];
if(temp == 0x0d || temp == 0x0a || temp == ']' ||i>30)break;
uart0_putc(temp);
}
printf("\r\n");
}
else
{
j+=1;
if(sector == totalsect && j == leftbytes + 1) goto end;
if(j == 512)
{
if(part == (SectorsPerClust - 1))
{
p=FAT_NextCluster(p);
if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))
{
goto end;
}
part = 0;
if(FAT_LoadPartCluster(p,part,buffer))
{
free(buffer);
return 1;
}
}
else
{
part ++;
if(FAT_LoadPartCluster(p,part,buffer))
{
free(buffer);
return 1;
}
}
sector ++;
j = 0;
}
min = 0;
sec = 0;
ms = 0;
i = 0;
while(1)
{
temp = buffer[j++];
if(sector == totalsect && j == leftbytes + 1) goto end;
if(j == 512)
{
if(part == (SectorsPerClust - 1))
{
p=FAT_NextCluster(p);
if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))
{
goto end;
}
part = 0;
if(FAT_LoadPartCluster(p,part,buffer))
{
free(buffer);
return 1;
}
}
else
{
part ++;
if(FAT_LoadPartCluster(p,part,buffer))
{
free(buffer);
return 1;
}
}
sector ++;
j = 0;
}
if((temp < '0' || temp > '9') && temp != ':' && temp != '.')break;
if(temp == ':'){i=1;continue;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -