📄 comm.h~
字号:
#ifndef _COMM_INCLUDED_
#define _COMM_INCLUDED_
#define CHAR unsigned char
#define BYTE unsigned char
#define WORD unsigned int
#define DWORD unsigned long
#define MP3_TYPE 0
#define WMA_TYPE 1
#define MID_TYPE 2
#define LRC_TYPE 3
#define TXT_TYPE 4//文本文件
#define MEN_TYPE 5//目录文件
unsigned long Hzk=0; //零时变量
unsigned long Unit=0;
unsigned long timer=0;//时间计数器
#define Music_Mode 0
#define Ebook_Mode 1
#define Radio_Mode 2
#define Set_Mode 3
#define PREV 104 //向上
#define NEXT 240 //向下
#define CYCL 168 //循环模式
#define QUIT 56 //退出
#define PLAY 248 //播放
#define PLAYOVER 0 //播放结束
bit LYRIC=0; //是否有Lrc文件标志
bit SINGLE=0; //单曲循环标志
bit PLAYING=0;//正在播放标志
unsigned char *menu[4]={"音乐 ","电子书","收音机","其他 "};
uchar MenuOper=0; //菜单记录
//返回值:对应的类型 0,mp3;1,wma;2,wav,3,mid;4,lrc;5,txt;6,file
flash unsigned char *filetype[7]={"MP3","WMA","WAV","MID","LRC","TXT"," "};
flash unsigned char *hzk12[4]=
{"FONT12 FON",
"UNITOGB BIN",
". ",
".. "
};
unsigned long FAT_MASK;
unsigned int card_size=0;
//簇定义
#define MSDOSFSROOT 0
#define CLUST_FREE 0
#define MSDOSFSFREE CLUST_FREE
#define CLUST_FIRST 2 // 第一个数据簇
#define CLUST_RSRVD 0xfffffff6 // 系统保留簇
#define CLUST_BAD 0xfffffff7 // 坏簇
#define CLUST_EOFS 0xfffffff8 // 第一个结束簇
#define CLUST_EOFE 0xffffffff // 最后一个结束簇
#define FAT12_MASK 0x00000fff // FAT12掩码
#define FAT16_MASK 0x0000ffff // FAT16掩码
#define FAT32_MASK 0x0fffffff // FAT32掩码
// 分区类型
#define PART_TYPE_UNKNOWN 0x00
#define PART_TYPE_FAT12 0x01
#define PART_TYPE_XENIX 0x02
#define PART_TYPE_DOSFAT16 0x04
#define PART_TYPE_EXTDOS 0x05
#define PART_TYPE_FAT16 0x06
#define PART_TYPE_NTFS 0x07
#define PART_TYPE_FAT32 0x0B//11
#define PART_TYPE_FAT32LBA 0x0C
#define PART_TYPE_FAT16LBA 0x0E
#define PART_TYPE_EXTDOSLBA 0x0F
#define PART_TYPE_ONTRACK 0x33
#define PART_TYPE_NOVELL 0x40
#define PART_TYPE_PCIX 0x4B
#define PART_TYPE_PHOENIXSAVE 0xA0
#define PART_TYPE_CPM 0xDB
#define PART_TYPE_DBFS 0xE0
#define PART_TYPE_BBT 0xFF
//目录要显示的4行文件名
typedef struct{
unsigned char ShortName[12];//短文件名存储
unsigned char LongName[52]; //长文件名存储
unsigned long Clust; //内容的首簇
unsigned long FileLen; //文件长度
unsigned char Type; //文件类型
unsigned int FileIndex; //文件偏移
}MENU_CONECT;
MENU_CONECT m_c[4];
MENU_CONECT CurDir;//记录当前文件夹信息
//找到的文件信息
typedef struct
{
unsigned long Clust; //当前簇号
unsigned int Nums; //仅FAT12—FAT16中的根目录区有效
unsigned char Index; //当前的BLOCK中目录项索引(偏移量)
unsigned long Sector; //当前目录所在的扇区号
unsigned char NumSector;//决定是否要换簇
}FIND_FILE_INFO;
//记录第一个分区表的信息
struct partrecord // 16 字节
{
BYTE prIsActive; // 0x80代表该分区为缺省分区
BYTE prStartHead; // 该分区入口的磁头地址
WORD prStartCylSect; // 该分区入口的扇区地址和柱面地址
BYTE prPartType; // 该分区类型 0b为fat32
BYTE prEndHead; // 该分区结束的扇区地址
WORD prEndCylSect; // 该分区结束的柱面地址
DWORD prStartLBA; // 该分区内第一个扇区地址(DBR所在地址)
DWORD prSize; // 该分区所包含的扇区总数
};
#define BOOTSIG0 0x55//结束标志
#define BOOTSIG1 0xaa
struct partsector
{
CHAR psPartCode[512-64-2]; // 启动代码 (446 bytes)
BYTE psPart[64]; // 四个分区表(64 bytes)
BYTE psBootSectSig0; // 两个签名(2 bytes)
BYTE psBootSectSig1;
};
//系统引导扇区(DOS BOOT RECORD)DBR结构
//此为磁盘的第一个扇区的数据
#define BOOTSIG2 0
#define BOOTSIG3 0
struct bootsector710 {
BYTE bsJump[3]; // 跳转指令
CHAR bsOEMName[8]; // 厂商标志和OS版本号
CHAR bsBPB[53]; // BIOS 参数块 BPB
CHAR bsExt[26]; // 扩展BPB
CHAR bsBootCode[418]; // 引导扇区代码
BYTE bsBootSectSig2;
BYTE bsBootSectSig3;
BYTE bsBootSectSig0; // 引导扇区签名0x55
BYTE bsBootSectSig1; // 引导扇区签名0xAA
};
//bpb信息
// BIOS 参数块
struct bpb710 {
WORD bpbBytesPerSec; // 每扇区字节数
BYTE bpbSecPerClust; // 每簇扇区数
WORD bpbResSectors; // 保留区域中的保留扇区数+prStartLBA=FAT表所在扇区
BYTE bpbFATs; // FAT表的份数
WORD bpbRootDirEnts; // 根目录项数
WORD bpbSectors; // 此域为存储卷上的扇区总数
BYTE bpbMedia; // 固定存储介质描述
WORD bpbFATsecs; // FAT表所占的扇区数 fat32=0 ,fat16非0
WORD bpbSecPerTrack; // 每道扇区数
WORD bpbHeads; // 磁头数
DWORD bpbHiddenSecs; // 隐藏扇区数
DWORD bpbHugeSectors; // 总扇区数
DWORD bpbBigFATsecs; // 每个FAT表所占扇区数
WORD bpbExtFlags; // 扩展标志
#define FATNUM 0xf
#define FATMIRROR 0x80
WORD bpbFSVers; // 文件系统版本
#define FSVERS 0
DWORD bpbRootClust; // 根目录簇号
WORD bpbFSInfo; // 文件系统信息扇区号
WORD bpbBackup; // 备份引导扇区
};
//文件相关属性
typedef struct {
BYTE deName[8]; // 文件名
#define SLOT_EMPTY 0x00 // 目录项为空
#define SLOT_E5 0x05
#define SLOT_DELETED 0xe5 // 文件已被删除
BYTE deExtension[3]; // 扩展名
BYTE deAttributes; // 文件属性
#define ATTR_NORMAL 0x00 // 读写
#define ATTR_READONLY 0x01 // 只读
#define ATTR_HIDDEN 0x02 // 隐藏
#define ATTR_SYSTEM 0x04 // 系统文件
#define ATTR_VOLUME 0x08 // 卷标文件
#define ATTR_LONG_FILENAME 0x0f // 长文件名文件
#define ATTR_DIRECTORY 0x10 // 子目录文件
#define ATTR_ARCHIVE 0x20 // 归档文件
BYTE deLowerCase; // 系统保留
#define LCASE_BASE 0x08
#define LCASE_EXT 0x10
BYTE deCHundredth; // 文件创建时间的10MS
BYTE deCTime[2]; // 文件创建时间
BYTE deCDate[2]; // 文件创建日期
BYTE deADate[2]; // 文件最近访问日期
WORD deHighClust; // 文件起始簇号的高16位
BYTE deMTime[2]; // 文件最近修改时间
BYTE deMDate[2]; // 文件最近修改日期
WORD deStartCluster; // 文件起始簇号的低16位
DWORD deFileSize; // 文件长度
}direntry;
// 一个扇区中的目录项数
#define DIRENTRIES_PER_SECTOR 0x10
// 长文件名入口地址结构
typedef struct
{
BYTE weCnt; //序号
#define WIN_LAST 0x40
#define WIN_CNT 0x3f
BYTE wePart1[10]; //长文件名UNICODE码(第一部分)
BYTE weAttributes; //长文件名目录项标志
#define ATTR_WIN95 0x0f
BYTE weReserved1; //系统保留
BYTE weChksum; //校验值
BYTE wePart2[12]; //长文件名UNICODE码(第二部分)
WORD weReserved2; //文件开始簇号
BYTE wePart3[4]; //长文件名UNICODE码(第三部分)
}winentry;
bit ENLRC=0;//是否显示LRC标志位
typedef struct{
uchar first;
uint t_sec; //暂存歌词的时间(秒)
uchar t_ms; //保存32MS计数脉冲
ulong Clust; //歌词文件的当前簇号
uchar so; //缓冲区内的偏移(0-7)
uchar sl; //簇内扇区偏移(0 -- (SectorsPerCluster-1))
uint wl; //扇内偏移(0-511)
//当前文件指针 (fatClustToSect(Clust)+sl)*512+wl*32
uint filelen; //歌词文件的余下的长度
}LYRIC_STRUCT;
LYRIC_STRUCT lyric; //歌词信息
//定义fat根目录的起始位置
typedef union
{
unsigned long Sector; //FAT12&FAT16有效
unsigned long Clust; //FAT32时有效
}ROOTDIR_INF;
ROOTDIR_INF RootDir; //目录区
//fat 特性自定义
#define FAT16 1
#define FAT32 2
#define WIN_CHARS 13 //长文件名入口地址结构可包含13个字符
//在FAT32中,文件名最长可到255个字符
#define WIN_MAXLEN 255
// 目录或文件入口地址结构中的时间结构
#define DT_2SECONDS_MASK 0x1F // 秒
#define DT_2SECONDS_SHIFT 0
#define DT_MINUTES_MASK 0x7E0 // 分
#define DT_MINUTES_SHIFT 5
#define DT_HOURS_MASK 0xF800 // 时
#define DT_HOURS_SHIFT 11
// 目录或文件入口地址结构中的日期结构
#define DD_DAY_MASK 0x1F // 日
#define DD_DAY_SHIFT 0
#define DD_MONTH_MASK 0x1E0 // 月
#define DD_MONTH_SHIFT 5
#define DD_YEAR_MASK 0xFE00 // 年 - 1980
#define DD_YEAR_SHIFT 9
// 调可函数
void ReadBlock(unsigned long LBA);
unsigned long fatClustToSect(unsigned long clust);
unsigned char fatInit( void);
unsigned int fatClusterSize(void);
unsigned long fatNextCluster(unsigned long cluster);
extern uchar BUFFER[512];
uchar pbuffer[512];
//unsigned char LONGNAME_BUFFER_ADDR[52];//长文件名缓存
unsigned int RootDirEnts; //根目录总的项数(FAT12&FAT16)
unsigned char FatType; //0:FAT12 1:FAT16 2:FAT32
//unsigned char DIRNAME_BUFFER_ADDR[30];
//unsigned char *LongNameBuffer =(unsigned char *) LONGNAME_BUFFER_ADDR;
//unsigned char *DirNameBuffer = (unsigned char *) DIRNAME_BUFFER_ADDR;
struct partrecord PartInfo;
unsigned char Fat32Enabled;
unsigned long FirstDataSector; //数据区开始扇区
unsigned int BytesPerSector; //每扇区字节数
unsigned int SectorsPerCluster;//每簇扇区数
unsigned long FirstFATSector; //fat表所在的扇区
unsigned long FirstDirSector; //根目录所在的扇区
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -