db.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002                            C   H E A D E R   F I L E
00003 
00004     Copyright (c) 2003 Neuros Audio LLC, All rights reserved.
00005 
00006 ******************************************************************************/
00007 
00016 #ifndef DB__H
00017 #define DB__H
00018 
00019 /*---------------------------------------------------------------------------*/
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023 
00024 /*-- HEADER FILE INCLUDES ---------------------------------------------------*/
00025 #include "../feature.h"
00026 #include "../MESSAGE/message.h"
00027 #include "../GENERIC/generic.h"
00028 #include "../fat/fat.h"
00029 
00030 /*-- SHARED DEFINITIONS -----------------------------------------------------*/
00034 #define DB_MAXLFN 32
00035 
00038 #define DB_REGIST2SRAM  
00039 
00042 #define DB_MAX_ID           0x018
00043 
00046 #define DB_OPENMAX          4
00049 #define DB_MAXRECLEN        512 
00052 #define DB_MAXFIELDLEN      256
00055 #define DB_MAXNAMELEN       32
00056 
00057 #define DB_INVALID_ENTRY    0xFFFF      /* Maximum entry is 0xFFFE. */
00058 #define DB_INVALID_HDL      0xFFFF      /* Invalid database handle. */
00059 #define DB_INVALID_ID       0xFFFF      /* Invalid database ID. */
00060 #define DB_INVALID_MDB      0xFFFFFFFFL /* Invalid db mdb offset. */
00061 
00062 #define DB_HEADER_SIGNATURE 0x574F4944L
00063 #define DB_SAI_SIGNATURE    0x05181971L
00064 #define DB_PAI_SIGNATURE    0x01162002L
00065 
00066 #define DB_SAIFIRSTENTRY     3  /* SAI file first entry offset. */
00067 #define DB_SAIENTRYNUMOFFSET 4  /* SAI entryNum control offset. */
00068 
00069 #define DB_MINPAILEN        32  /* Minimum PAI module data length in words. */
00070 #define DB_PAIHEADERLEN     8   /* PAI file header length in words. */
00071 
00072 #define DB_ID_OFFSET        15
00073 #define DB_PNAME_OFFSET     16
00074 
00075 #define DB_FLDDLMT          '#'
00076 #define DB_RECDLMT          '%'
00077 #define DB_BAGDLMT          '$'
00078 #define DB_ESCCHAR          '/'
00079 
00080 /* DB record flag bit definitions. */
00081 #define RECORD_DELETED      0x0001
00082 
00083 /* DB PAI flag bit definitions. */
00084 #define PAI_FREE            0x0001
00085 
00086 // DB data type definitions.
00087 typedef unsigned short      DB_ID;          /* DB ID type. */
00088 typedef unsigned short      DB_FLAG;        /* DB flag type. */
00089 typedef unsigned short      DB_ENTRY;       /* DB entry index type. */
00090 typedef unsigned short      DB_FIELDIDX;    /* DB field index type. */
00091 typedef unsigned short      DB_HDL;         /* DB handle type. */
00092 typedef unsigned short      DB_FIELDLEN;    /* DB field length type. */
00093 typedef unsigned short      DB_RECLEN;      /* DB record length type. */
00094 typedef void                DB_DATA;        /* DB data type. */
00095 typedef unsigned short      DB_DATALEN;     /* DB data length in words. */
00096 typedef char *              DB_FNAME;       /* DB file name type. */
00097 typedef unsigned short *    DB_DSPDATA;     /* DB display data type. */
00098 typedef unsigned short      DB_DSPDATALEN;  /* DB display data length type. */
00099 typedef unsigned short      DB_DSPDATAIDX;  /* DB display data index type. */
00100 typedef unsigned long       DB_MDBOFFSET;   /* DB MDB file offset type. */
00101 typedef unsigned long       DB_PAIOFFSET;   /* DB PAI file offset type. */
00102 typedef unsigned long       DB_SAIOFFSET;   /* DB SAI file offset type. */
00103 
00106 typedef enum 
00107 {
00108     MDB,
00109     SAI,
00110     PAI,
00111     Invalid_ext
00112 } DB_FEXTNAME;
00113 
00116 struct DB_dinode;
00117 typedef struct DB_dinode 
00118 {   
00119     struct DB_dinode *      prev;       
00120     struct DB_dinode *      next;       
00121     struct DB_dinode *      parent;     
00122     struct DB_dinode *      child;      
00123     DB_MDBOFFSET            mdb;        
00124     DB_DATA *               data;       
00125     DB_RECLEN               len;        
00126     DB_ID                   id;         
00127 } st_DBDINODE;
00128 
00131 struct DB_idnode;
00132 typedef struct DB_idnode 
00133 {
00134     struct DB_idnode *      prev;       
00135     struct DB_idnode *      next;       
00136     struct DB_idnode *      parent;     
00137     struct DB_idnode *      child;      
00138     DB_ID                   id;         
00139 } st_DBIDNODE;
00140 
00141 
00144 typedef struct 
00145 {   
00146     unsigned short      counter;        
00147     st_DBIDNODE         node[DB_MAX_ID];
00148 } st_DBIDTREE;
00149 
00152 typedef struct 
00153 {   
00154     unsigned short      len;
00155     unsigned short      attribute;      
00156     unsigned short      status;     
00157     unsigned short      numOfKeys;      
00158     unsigned short      numOfFields;
00159     
00160     //unsigned long     recordStart;
00161     unsigned short      recordStartHi;
00162     unsigned short      recordStartLo;
00163     
00164     //unsigned long ptrXIM;
00165     unsigned short      ptrXIMhi;
00166     unsigned short      ptrXIMlo;
00167     
00168     unsigned short      reserved[6];
00169     unsigned short      id;
00170 } st_DBHEADER;
00171 /* DB attribute bits definitions. */
00172 #define     DB_ROOT         0x0001
00173 #define     DB_REMOVABLE    0x0002
00174 
00177 typedef struct 
00178 {   
00179     DB_ID               id;
00180     unsigned short      attribute;      
00181     unsigned short      status;     
00182     unsigned short      numOfKeys;      
00183     unsigned short      numOfFields;
00184     unsigned short      numOfSAIent;
00185     unsigned short      numOfPAIent;
00186     unsigned long       ptrXIM;     
00187     BOOL                bVirtual;   
00188 } st_DBINFO;
00189 
00192 typedef struct 
00193 {
00194     DB_SAIOFFSET    idx;
00195     DB_PAIOFFSET    pai;
00196 
00197     BOOL            free;
00198     File *          dbfile;
00199     File *          idxfile;
00200     unsigned short  step;   
00201 } st_DBQUERYCTL;
00202 
00203 
00206 typedef struct 
00207 {
00208 #ifdef DB_REGIST2SRAM   
00209     unsigned long   fname;
00210 #else
00211     DB_FNAME        fname;  
00212 #endif
00213     unsigned short  len;    
00214 } st_DBREGIST;
00215 
00218 typedef struct 
00219 {
00220     unsigned short  dlen;
00221     unsigned short  flag;
00222     unsigned short  entryNum;
00223     unsigned short  reserved[3];
00224 } st_DBPAICTL;
00225 
00228 typedef struct
00229 {
00230     DB_ID idedhisi;
00231     DB_ID unidedhisi;
00232     DB_ID failedhisi;
00233     DB_ID audio;
00234     DB_ID pcaudio;
00235 } st_DBNAV;
00236 
00237 /*-- GLOBAL DATA OBJECT REFERENCE -------------------------------------------*/
00238 extern const char    strDBBUPDIR[];
00239 extern const char    strDBDIR[];
00240 extern const char    strAUDIODIR[];
00241 extern const char    strAUDIO[];
00242 extern const char    strPCAUDIO[];
00243 extern const char    strFAILEDHISI[];
00244 extern const char    strIDEDHISI[];
00245 extern const char    strUNIDEDHISI[];
00246 
00247 extern st_DBREGIST   DB_registration[];
00248 extern st_DBIDTREE   DB_idtree;
00249 extern st_DBQUERYCTL DB_qctl[];
00250 extern st_DBINFO     DB_qinfo[];
00251 extern st_DBNAV      DBnav;
00252 
00253 extern LCK_Obj              LCK_db;
00254 #define DB_LOCK(tick)       LCK_pend(&LCK_db, tick)
00255 #define DB_UNLOCK()         LCK_post(&LCK_db)
00256 
00257 /*-- FUNCTION PROTOTYPES ----------------------------------------------------*/
00258 BOOL        DB_add2child(DB_MDBOFFSET,DB_ID,const DB_DATA *);
00259 BOOL        DB_deleteRecord(DB_ID, DB_ENTRY);
00260 BOOL        DB_deleteRecordByMdb(DB_ID, DB_MDBOFFSET);
00261 BOOL        DB_removeRecord(DB_ID, DB_ENTRY, DB_ENTRY);
00262 DB_FIELDLEN DB_getField(const DB_DATA *,DB_FIELDIDX,DB_DATA *,st_DBINFO *);
00263 DB_ENTRY    DB_getSaiByMdb(ULONG,DB_ID);
00264 DB_MDBOFFSET DB_getMdbByRecord(DB_ID, const unsigned short *);
00265 #if 1
00266 st_DBINFO * DB_info(DB_HDL);
00267 #else
00268 BOOL        DB_info(DB_ID, st_DBINFO *);
00269 #endif
00270 BOOL        DB_init(void);
00271 DB_ID       DB_mount(const DB_FNAME);
00272 DB_HDL      DB_queryFirst(DB_ID,DB_FIELDIDX,DB_ENTRY,DB_ENTRY,DB_DATA *);
00273 BOOL        DB_queryNext(DB_HDL, DB_ENTRY, DB_DATA *);
00274 BOOL        DB_queryClose(DB_HDL);
00275 BOOL        DB_umount(DB_ID);
00276 DB_ID       DB_parentID(DB_ID);
00277 #define     DB_rootID(id) DB__rootID(id)
00278 DB_ID       DB_childID(DB_ID, DB_FIELDIDX);
00279 #define     DB_fieldIndex(id) DB__fieldIndex(id)
00280 
00281 void        DB_setSyncMark(const char *);
00282 BOOL        DB_checkSyncMark(const char *);
00283 
00284 BOOL        DB__addSAIentry(DB_ID,DB_ENTRY,DB_MDBOFFSET,DB_PAIOFFSET);
00285 BOOL        DB__cdDBdir(const DB_FNAME);
00286 BOOL        DB__deleteChildRecord(DB_ID, DB_ENTRY);
00287 DB_FIELDIDX DB__fieldIndex(DB_ID);
00288 DB_FIELDLEN DB__getField(const DB_DATA *,DB_FIELDIDX,DB_DATA *);
00289 BOOL        DB__getRecord(File *, DB_DATA *);
00290 BOOL        DB__info(DB_ID, st_DBINFO *);
00291 DB_DATA *   DB__locateField(const DB_DATA *, DB_FIELDIDX);
00292 DB_FNAME    DB__name(DB_ID, DB_FEXTNAME);
00293 DB_RECLEN   DB__recordLen(const DB_DATA *);
00294 BOOL        DB__recordPosition(DB_ID,DB_ENTRY *,const DB_DATA *,BOOL);
00295 BOOL        DB__removePAIentry(DB_ID,DB_MDBOFFSET,DB_PAIOFFSET,unsigned short *);
00296 DB_ID       DB__rootID(DB_ID);
00297 DB_ID       DB__register(const DB_FNAME, st_DBIDNODE *, st_DBIDNODE *);
00298 
00299 /*---------------------------------------------------------------------------*/
00300 #ifdef __cplusplus
00301 }
00302 #endif
00303 
00304 /*---------------------------------------------------------------------------*/
00305 #endif /* DB__H */
00306 
00307 /*****************************************************************************
00308                 Neuros Audio LLC. Confidential Proprietary
00309  *****************************************************************************/

Generated on Wed Jan 19 01:12:38 2005 for neuros-firmware by  doxygen 1.3.9.1