📄 fs9660.h
字号:
#ifndef __FS9660_H
#define __FS9660_H
#define FILE_SYS_DEBUG
#define DIR_REC_LEN sizeof(DIR_REC) // 20
/*
#define ISO9660_DIR_OFFSET (0x88000000 + (MP3_EVBYA_DEF - 20) * 1024)
#define ISO9660_FILE_OFFSET (0x88000000 + (MP3_EVBYA_DEF - 10) * 1024)
*/
#if CONFIG==CONFIG_COMBO_VCD
/*
#define ISO9660_DIR_OFFSET (0x88000000 + (310 - 20) * 1024)
#define ISO9660_FILE_OFFSET (0x88000000 + (310 - 15) * 1024)
*/
#define ISO9660_DIR_OFFSET (0x88000000 + (512 - 20) * 1024)
#define ISO9660_FILE_OFFSET (0x88000000 + (512 - 15) * 1024)
#else
#ifdef SUPPORT_CD_MOVE
#define ISO9660_DIR_OFFSET (0x88000000 + (MP3_DIR_START * 1024))
#define ISO9660_FILE_OFFSET (0x88000000 + (MP3_FILE_START * 1024))
#else
#define ISO9660_DIR_OFFSET (0x88000000 + (MP3_DIR_START * 1024))
#define ISO9660_FILE_OFFSET (0x88000000 + (MP3_FILE_START * 1024))
#endif
#endif
#define iso9660_dir ((DIR_REC *)ISO9660_DIR_OFFSET)
#define iso9660_file ((DIR_REC *)ISO9660_FILE_OFFSET)
#ifdef SUPPORT_UDF
#define GRAPH_UDF_VAT (2033 * 1024)
/*
#define GRAPH_ISO9660_FILE ((358 - 26) * 1024)
*/
#define UDF_VAT_OFFSET (0x88000000 + GRAPH_UDF_VAT)
#endif
#define SHADOW_WID 2
#define LIGHT_WID 2
// Background color
#define BKG_Y 0x15
#define BKG_CRCB 0x71a3
// Black color
#define BLACK_Y 0x20
#define BLACK_CRCB 0x8080
// White color
#define WHITE_Y 0xeb
#define WHITE_CRCB 0x8080
// Red color
#define RED_Y 0x23
#define RED_CRCB 0xd040
// Yellow color
#define YELLOW_Y 0xa2
#define YELLOW_CRCB 0x8e2c
// Light yellow color
#define LIGHTYELLOW_Y 0xd0
#define LIGHTYELLOW_CRCB 0x9050
// Font color
#define FS_FONTCOLOR_FILE_Y1 0xa2
#define FS_FONTCOLOR_FILE_CrCb1 0x8e2c
#define FS_FONTCOLOR_FILE_Y2 0xa2
#define FS_FONTCOLOR_FILE_CrCb2 0x8e2c
// Region definition
#define X1 160
#ifdef SUPPORT_ID3
#define Y1 50 // 80
#define FS_DIRLIST_YSTART (Y1 + 20) // 100 // dir string start-y
#else
#define Y1 80
#define FS_DIRLIST_YSTART 100 // dir string start-y
#endif
#define Y3 252
#define FS_DIRLIST_XSTART 44 // dir string start-x
#define FS_FILELIST_YSTEP 16 // file(dir) list item height
#define FS_FILELIST_XSTART (X1 + 10) // file ICON start-x
#define DIRICON_X (FS_DIRLIST_XSTART - 22)
#define DIRICON_Y FS_DIRLIST_YSTART
#define DIRICON_W 15
#define DIRICON_H (PER_PAGE * FS_FILELIST_YSTEP)
#define DIRITEM_X FS_DIRLIST_XSTART
#define DIRITEM_Y FS_DIRLIST_YSTART
#define DIRITEM_W X1 - FS_DIRLIST_XSTART
#define DIRITEM_H PER_PAGE * FS_FILELIST_YSTEP
#define FILEICON_X (FS_FILELIST_XSTART - 15)
#define FILEICON_Y FS_DIRLIST_YSTART
#define FILEICON_W 12
#define FILEICON_H 12
#define FILEITEM_X FS_FILELIST_XSTART
#define FILEITEM_Y FS_DIRLIST_YSTART
#define FILEITEM_W 140
#define FILEITEM_H PER_PAGE * FS_FILELIST_YSTEP
#define INFO_X_SFT 50
#define INFO_X 30 + INFO_X_SFT
#define INFO_Y (Y1 - 25)
#define INFO_W 250 - INFO_X_SFT
#define INFO_H 18
#define SLOT_X 310
#define SLOT_Y (FS_DIRLIST_YSTART - 1)
#define SLOT_W 8
#define SLOT_H (PER_PAGE * FS_FILELIST_YSTEP)
#define BAR_X 311
#define BAR_Y FS_DIRLIST_YSTART
#define BAR_W 6
#define BAR_H (PER_PAGE * FS_FILELIST_YSTEP - 2)
#define CONT_X1 (DIRITEM_X + 10)
#define CONT_X2 (FILEITEM_X + 10)
#define CONT_Y (Y1 + 6)
#define CONT_W 11
#define CONT_H 5
#define TIME_X (270)
#define TIME_Y (Y1 - 25)
#define TIME_W 60
#define TIME_H 18
#define ISO_DIR_MAX 150 // 200
#define ISO_FILE_MAX 1500 // extend mp3 file storage
#define ItemNum PER_PAGE // 8
#define HorzSpace 10
#define DIR_SIZE 32
#define MAX_DIR_CNT 64
#define bin2asc(x) ((x > 9) ? x + 'A' - 10 : x + '0')
enum {
ERROR_FILE_NOT_FOUND = -100,
ERROR_FILE_ENTRY_FULL = -101,
ERROR_FILE_ENTRY_INVALID = -102,
ERROR_FILE_PATH = -103,
ERROR_FILE_SUBPATH_TOO_LONG = -105,
ERROR_FILE_MSF_INVALID = -2,
ERROR_GENERIC = -1
};
enum {
FS_FUNC_IDLE = 0,
FS_FUNC_MP3 = 1,
FS_FUNC_JPEG = 2,
FS_FUNC_GAME = 3,
};
enum {
FS_STATE_INIT = 0,
FS_STATE_LIST = 1,
FS_STATE_MP3 = 2,
FS_STATE_JPEG = 3,
FS_STATE_GAME = 4,
};
typedef struct
{
UINT16 xStart;
UINT16 yStart;
UINT16 xSize;
UINT16 ySize;
} BTNAREA;
enum {
CNT_AREA_FILE = 0,
CNT_AREA_DIR = 1,
CNT_AREA_MP3BUTTON = 2,
CNT_AREA_JPEGBUTTON = 3,
CNT_AREA_GAMEBUTTON = 4,
};
enum {
FS_AREA_BACKGROUND = 0,
FS_AREA_DIRICON = 1,
FS_AREA_DIRITEM = 2,
FS_AREA_FILEICON = 3,
FS_AREA_FILEITEM = 4,
FS_AREA_SLOT = 5,
FS_AREA_MOVEBAR = 6,
FS_AREA_PATHINFO = 7,
FS_AREA_PREVIEWJPG = 8,
FS_AREA_BUTTON = 9,
};
typedef struct
{
BYTE len_of_record;
BYTE len_of_attr;
BYTE location_le[4];
BYTE location_be[4];
BYTE length_le[4];
BYTE length_be[4];
BYTE time_stamp[7];
BYTE file_flag;
BYTE file_unit_size;
BYTE interleave_gap;
UINT16 volume_seq_le;
UINT16 volume_seq_be;
BYTE len_of_filename;
BYTE filename[31];
} CDDirRecord;
typedef struct
{
BYTE len_of_dirid;
BYTE len_of_attr;
BYTE location_of_ext[4];
BYTE parent_dir_num[2];
BYTE dirname[31];
} ISO_PATH_TABLE;
typedef struct
{
UINT32 loc; /* mmssff */
int size; /* in sectors */
short dir;
char name[10];
char ext[6];
} DIR_REC;
#ifdef SUPPORT_ID3
#define SECTOR_SIZE 2048
#ifdef SUPPORT_ID3_V10
typedef struct
{
char tag[3];
char song_title[30];
char artist[30];
char album[30];
char year[4];
char comment[30];
BYTE genre;
} ID3_TAG;
ID3_TAG id3_info;
void get_id3_v1();
void show_id3_v1();
#endif
#ifdef SUPPORT_ID3_V20
typedef struct
{
char id3[3];
BYTE main_version;
BYTE sub_version;
BYTE flag;
BYTE size[4];
} ID3_V2_HEADER; // 10 bytes in total
typedef struct
{
char frame_id[4];
BYTE size[4];
BYTE flag[2];
char content[30]; // In v2.3,the frame size is not fixed,but since the
// vcd osd has its limite,I cut them to a fixed size.
} ID3_FRAME; // 30 bytes in total
void show_id3_v2(UINT16 mp3_track_num);
#endif
#ifdef SUPPORT_LYRICS
typedef struct
{
char t1;
BYTE timestamp_min[2];
char t2;
BYTE timestamp_sec[2];
char t3;
char text[56]; // the real length is not fixed,I set this for convinient
} LYRICS_TEXT;
UINT32 text_size;
UINT32 text_skip;
UINT32 lyrics_start_msf;
BYTE lyrics_represent_min,lyrics_represent_sec;
void lyrics_init(UINT32 msf, UINT32 len);
void lyrics_get_text();
void lyrics_show_text();
#endif
#endif
#if defined(SUPPORT_OKO_DISC)
#define MAX_MENU_NO 10
#define MAX_FILE_NAME_LEN 12
typedef struct
{
int trk_no; // how many files which a oko menu include
char filename[MAX_FILE_NAME_LEN];
} OKO_MENU_DATA;
OKO_MENU_DATA oko_menu[MAX_MENU_NO];
#endif
#define BIGA 0
#define NUM0 26
#define ARROW 0
#define HAND 1
#define DOT 36
#define SPACE 37
#define NEXT 38
#define PREV 39
#define QUESTION 40
#define PERCENT 41
#define LEFTB 42
#define RIGHTB 43
#define COLON 44
#define BLINE 45
#define CURV 46
/************************************************/
/* Function prototype declaration */
/************************************************/
void read_iso9660(void);
void DrawTime(BYTE mm, BYTE ss);
void check_name(char *, BYTE);
void ShowMP3Reading(BYTE);
UINT8 ReadFile(int *);
void read_iso9660_init(void);
int read_iso9660_dir(void);
int read_iso9660_files(void);
int rec_dir_file(UINT32, int);
void iso9660_sort(void);
void iso9660_MSFSort(void);
void iso9660_assign_name(char *, char *, int, int, BYTE);
int iso_search_str(char *, char *, int);
void mp3_select(void);
void mp3_select_file(UINT16);
void FSGUI_Menu(void);
void mp3_dir_list(void);
void mp3_file_list(UINT16);
void calc_file_page(UINT16);
UINT32 mp3_file_msf(UINT16);
UINT32 mp3_file_length(UINT16);
char *mp3_file_name(UINT16);
void clr_window(int, int, int, int);
void FSGUI_FillFrameBuf(int,int,int,int,UINT16,UINT16);
void FillRedColor(int,int);
void mp3_control_icon(int);
void mp3_show_path(void);
void mp3_dir_icon(void);
int NormalNext();
int NormalPrev();
void Return2Menu(void);
int FileNext(void);
void MoveScroll(UINT16);
#ifdef SUPPORT_UDF
int read_udf_dir();
int read_udf_files(void);
UINT32 VatLookup(UINT32 VrtSect);
void UdfScanDir(UINT32 Msf);
void UdfGetName(BYTE *BufSrc, BYTE *BufDst, int Len, int Num);
int UdfCompString(BYTE *StrSrc, BYTE *StrDst, int Len);
void UdfScanFile(int DirNum);
UINT32 mp3_udf_file_msf(UINT16);
UINT32 mp3_udf_file_length(UINT16);
#endif
#ifdef SUPPORT_ID3
void capitalize(char*, BYTE);
void symble_filter(char*);
void unicode_filter(char*);
void do_cdrom_read_data(BYTE*, UINT32, UINT32, BYTE);
#endif
#endif __FS9660.H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -