⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs9660.h

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 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 + (MP3_DIR_START*1024))//jhuang 2003/3/9
#define  ISO9660_FILE_OFFSET    (0x88000000 + (MP3_FILE_START *1024))//jhuang 2003/3/9
#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 /* SUPPORT_CD_MOVE */
#endif

#define iso9660_dir         ((DIR_REC *)ISO9660_DIR_OFFSET)

#define iso9660_file        ((FILE_REC *)ISO9660_FILE_OFFSET)
#ifdef SUPPORT_UDF
#define GRAPH_UDF_VAT           (2033*1024)//(1953*1024) // 20020222 Matt Wang added for UDF VAT
//#define GRAPH_ISO9660_FILE      ((358-26)*1024) // 20020809 Matt Wang added for fix file number bug
#define  UDF_VAT_OFFSET  (0x88000000 + GRAPH_UDF_VAT)    // 20020222 Matt Wang added
#endif // SUPPORT_UDF

#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                  //jhuang 2002/4/23
#define INFO_X      30+INFO_X_SFT   //jhuang 2002/4/23
#define INFO_Y      (Y1-25)
#define INFO_W      250-INFO_X_SFT  //jhuang 2002/4/23  //wyf add 2-5-30 20:44.
#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

#if CONFIG == CONFIG_COMBO_SVCD
#define  ISO_DIR_MAX                    80//150 //200
#define  ISO_FILE_MAX                   1250//extend mp3 file storage//1000    //1500
#else
#define  ISO_DIR_MAX                    150
#define  ISO_FILE_MAX                   800
#endif

#define  ItemNum                            PER_PAGE    // 8  YCH 00/12/07
#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,
#ifdef SUPPORT_FILE_SYSTEM_MODE    
    FS_FUNC_DAT  =4,
#endif    
};

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[9];
    char    ext[4];
}
FILE_REC;

typedef struct
{
    UINT32  loc;                                    /* mmssff */
    short   dir;
    char    name[9];
}
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];
    //BYTE xxx;//padding
    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;
//char lyrics_text1[56];

  
void lyrics_init(UINT32 msf,UINT32 len);
//void get_lyrics_id();
void lyrics_get_text();
void lyrics_show_text();
  #endif
#endif
#if 0
#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
#endif
//#define     BIGA            0
#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(UINT16,UINT16);
void    check_name(char *, BYTE);
void    ShowMP3Reading(BYTE);
//void        DrawTrk(UINT16 trk,UINT16 tt);//reducde 11,no used
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         strtoint(char*);
//int     strtoint(void);                   //Tony modified 02/05/06 prevent from warning at compiling time

//char        *iso_search_str(char *, char *, int , char *);
int     iso_search_str(char *, char *, int);    //Tony modified 02/05/06 prevent from warning,

                                                     //unused the fourth parameter, at compiling time
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);//no used 2003/4/2 05:24

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -