ClassDataBase.h
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:10k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: CDB.h
  4. content: class data base header file
  5. History: Created by TNE 2005/8/24
  6. ==========================================================================*/
  7. #ifdef _CDB_H_
  8. #define EXTERN
  9. #define _AT_(addr) _at_ addr
  10. #else
  11. #define EXTERN extern
  12. #define _AT_(addr)
  13. #endif
  14. //================ Option ===================
  15. // Set this define to save dir info
  16. #define CDB_OPTION_SAVE_DIR_INFO 0
  17. // Set this define to enable data cache for building database
  18. #define CDB_OPTION_DATA_CACHE 1
  19. // Set this define to enable sys cache for building database
  20. #define CDB_OPTION_SYS_CACHE 1
  21. // Search Dir Info Cache Size
  22. #define CDB_SEARCH_DIR_CACHE_SIZE 3
  23. // Database cache size for top node
  24. #define CDB_TOP_DATA_CACHE_SIZE 3
  25. // Database cache size for enter node
  26. #define CDB_ENTER_DATA_CACHE_SIZE 4
  27. // Database cache size for title node
  28. #define CDB_TITLE_DATA_CACHE_SIZE 5
  29. // Database cache size for system (sector)
  30. #define CDB_SYS_CACHE_SIZE 16
  31. //================ Const Define =================
  32. //CDB Start Sector
  33. #define CDB_START_SECTOR_INDEX_ADD 0x0E  //Tne051103 #1
  34. #define CDB_MAX_LEN_ADD 506
  35. #define CDB_LEN_MIN_VAL 6 //tne 2005/12/30 #1 //CDB min allocated sector
  36. #define CDB_MAX_SAFE_LEN (gxwCdbMaxSec-CDB_LEN_MIN_VAL)
  37. // CDB Base Header Address
  38. #define CDB_HEADER_TAG_START_POINT_ADD 0x00
  39. #define CDB_HEADER_GENRE_STRAT_ADD 0x00
  40. #define CDB_HEADER_ARTIST_START_ADD 0x04
  41. #define CDB_HEADER_ALBUM_START_ADD 0x08
  42. #define CDB_HEADER_TITLE_START_ADD 0x0C
  43. #define CDB_HEADER_TAG_LAST_POINT_ADD 0x10
  44. #define CDB_HEADER_GENRE_LAST_ADD 0x10
  45. #define CDB_HEADER_ARTIST_LAST_ADD 0x14
  46. #define CDB_HEADER_ALBUM_LAST_ADD 0x18
  47. #define CDB_HEADER_TITLE_LAST_ADD 0x1C
  48. #define CDB_HEADER_TOTAL_DIR_INF_ADD 0x20
  49. #define CDB_HEADER_TOTAL_MUSIC_ADD 0x22
  50. #define CDB_HEADER_LAST_POINT_ADD 0x24
  51. #define CDB_HEADER_GENRE_NUM_ADD 0x28
  52. #define CDB_HEADER_ARTIST_NUM_ADD 0x2A
  53. #define CDB_HEADER_ALBUM_NUM_ADD 0x2C
  54. #define CDB_HEADER_TITLE_NUM_ADD 0x2E
  55. // CDB Dir Info Address
  56. #define CDB_DIR_INF_START_ADD 0x30
  57. #define CDB_DIR_INF_DEPTH_ADD 0x00
  58. #define CDB_DIR_INF_DIR_SEC_ADD 0x01
  59. #define CDB_DIR_INF_DIR_OFF_ADD 0x05
  60. #define CDB_DIR_INF_START_SEC_ADD 0x07
  61. #define CDB_DIR_INF_PRE_DIR_INF_ADD 0x0B
  62. // CDB Class Point Address
  63. #define CDB_CLASS_NEXT_POINT_ADD 0x00
  64. #define CDB_CLASS_PRE_POINT_ADD 0x04
  65. #define CDB_CLASS_ENTER_POINT_ADD 0x08
  66. #define CDB_CLASS_BACK_POINT_ADD 0x0C
  67. #define CDB_CLASS_ENTER_LAST_POINT_ADD 0x14
  68. // CDB Class Info Address
  69. #define CDB_CLASS_MODE_ADD 0x00
  70. #define CDB_CLASS_ITEM_NUM_ADD 0x01
  71. #define CDB_CLASS_DEPTH_ADD 0x03
  72. #define CDB_CLASS_DIR_SEC_ADD 0x04
  73. #define CDB_CLASS_DIR_OFF_ADD 0x08
  74. #define CDB_CLASS_TOTAL_MUSIC_ADD 0x08
  75. #define CDB_CLADD_START_SEC_ADD 0x0A
  76. #define CDB_CLASS_DIR_INFO_NUM_ADD 0x0E
  77. #define CDB_CLASS_TOTAL_CHILD_ADD 0x0E
  78. #define CDB_CLASS_STRING 0x10
  79. // Class Mode
  80. #define CDB_CLASS_MODE_GENRE 0x00
  81. #define CDB_CLASS_MODE_ARTIST 0x01
  82. #define CDB_CLASS_MODE_ALBUM 0x02
  83. #define CDB_CLASS_MODE_TITLE 0x03
  84. #define CDB_CLASS_MODE_DELETE 0x80 //tne dir del //del bit
  85. // Search Type:
  86. #define CDB_SEARCH_WAY 0xF0
  87. #define CDB_SEARCH_CLASS_MODE 0x0F
  88. // Search Way // DO NOT Change the sequence
  89. #define CDB_SEARCH_NEXT 0x00
  90. #define CDB_SEARCH_PREV 0x10
  91. #define CDB_SEARCH_ENTER 0x20
  92. #define CDB_SEARCH_BACK 0x30
  93. #define CDB_SEARCH_FIRST 0x40
  94. #define CDB_SEARCH_ENTER_LAST 0x50
  95. #define CDB_SEARCH_LAST 0x60
  96. #define CDB_SERACH_GENRE CDB_CLASS_MODE_GENRE
  97. #define CDB_SEARCH_ARTIST CDB_CLASS_MODE_ARTIST
  98. #define CBD_SEARCH_ALBUM CDB_CLASS_MODE_ALBUM
  99. #define CDB_SEARCH_TITLE CDB_CLASS_MODE_TITLE
  100. #define CDB_SEARCH_FIRST_GENRE (CDB_SEARCH_FIRST|CDB_SERACH_GENRE)
  101. #define CDB_SEARCH_FIRST_ARTIST (CDB_SEARCH_FIRST|CDB_SEARCH_ARTIST)
  102. #define CDB_SEARCH_FIRST_ALBUM (CDB_SEARCH_FIRST|CBD_SEARCH_ALBUM)
  103. #define CDB_SEARCH_FIRST_TITLE (CDB_SEARCH_FIRST|CDB_SEARCH_TITLE)
  104. #define CDB_SEARCH_LAST_GENRE (CDB_SEARCH_LAST|CDB_SERACH_GENRE)
  105. #define CDB_SEARCH_LAST_ARTIST (CDB_SEARCH_LAST|CDB_SEARCH_ARTIST)
  106. #define CDB_SEARCH_LAST_ALBUM (CDB_SEARCH_LAST|CBD_SEARCH_ALBUM)
  107. #define CDB_SEARCH_LAST_TITLE (CDB_SEARCH_LAST|CDB_SEARCH_TITLE)
  108. //New Node
  109. #define CDB_NEXT_NEW_NODE TRUE
  110. #define CDB_ENTER_NEW_NODE FALSE
  111. //CDB Make Cache module number (gxbCdbCacheModuleNum)
  112. #define CDB_CACHE_MODULE_MODE_MASK 0xF0
  113. #define CDB_CACHE_MODULE_INDEX_MASK 0x0F
  114. #define CDB_CACHE_MODULE_ENTER_MODE 0x00
  115. #define CDB_CACHE_MODULE_TOP_MODE 0x10
  116. #define CDB_CACHE_MODULE_TITLE_MODE 0x20
  117. #define CDB_CACHE_MODULE_ONLY_TITLE 0x30
  118. #define CDB_CACHE_MODULE_GENRE_GENRE (CDB_CACHE_MODULE_TOP_MODE|0x00)
  119. #define CDB_CACHE_MODULE_ARTIST_ARTIST (CDB_CACHE_MODULE_TOP_MODE|0x01)
  120. #define CDB_CACHE_MODULE_ALBUM_ALBUM (CDB_CACHE_MODULE_TOP_MODE|0x02)
  121. #define CDB_CACHE_MODULE_GENRE_ARTIST (CDB_CACHE_MODULE_ENTER_MODE|0x00)
  122. #define CDB_CACHE_MODULE_GENRE_ALBUM (CDB_CACHE_MODULE_ENTER_MODE|0x01)
  123. #define CDB_CACHE_MODULE_ARTIST_ALBUM (CDB_CACHE_MODULE_ENTER_MODE|0x02)
  124. #define CDB_CACHE_MODULE_GENRE_TITLE (CDB_CACHE_MODULE_TITLE_MODE|0x00)
  125. #define CDB_CACHE_MODULE_ARTIST_TITLE (CDB_CACHE_MODULE_TITLE_MODE|0x01)
  126. #define CDB_CACHE_MODULE_ALBUM_TITLE (CDB_CACHE_MODULE_TITLE_MODE|0x02)
  127. #define CDB_CACHE_MODULE_TITLE_TITLE CDB_CACHE_MODULE_ONLY_TITLE
  128. //////////////////////////////////////////////
  129. //CDB Make Chache
  130. #define CDB_SEARCH_CACHE_HIT TRUE
  131. #define CDB_SEARCH_CACHE_MISS FALSE
  132. //Write down all sys cache
  133. #define CDB_SYS_CACHE_WRITE_ALL 0xFF
  134. //Move cache data
  135. #define CDB_MOV_DAT_BUF_TO_CACHE TRUE
  136. #define CDB_MOV_DAT_CACHE_TO_BUF FALSE
  137. // Read Data Buffer //Bulit Data Base should use Lyrics buffer only
  138. #if(_PM_INIT_CHK_)
  139. #if(CDB_OPTION_SYS_CACHE)
  140. #define CDB_DATA_BUFFER gxbCdbSysCache
  141. #define CDB_BUFFER_OFFSET gxwOffsetLrcSec
  142. #define CDB_DATA_PATH FS_LRC
  143. #define CDB_KEPT_DATA_MODIFY gfKeptLyricModified
  144. #define CDB_IO_DATA_BUFFER gxbLyrics //Use this buffer to read data from NandFlash
  145. #else
  146. #define CDB_DATA_BUFFER gxbLyrics
  147. #define CDB_BUFFER_OFFSET gxwOffsetLrcSec
  148. #define CDB_DATA_PATH FS_LRC
  149. #define CDB_KEPT_DATA_MODIFY gfKeptLyricModified
  150. #endif
  151. #else
  152. #define CDB_DATA_BUFFER gxbFsData
  153. #define CDB_BUFFER_OFFSET gxwOffsetDataSec
  154. #define CDB_DATA_PATH FS_DATA_0_0
  155. #define CDB_KEPT_DATA_MODIFY gfKeptDataModified
  156. #endif
  157. #define CDB_NULL_POINT 0xFFFFFFFF
  158. #define CDB_INIT_POINT 0x00
  159. #define CDB_DIR_INF_NUM_ROOT 0x00
  160. //Genre Table Define
  161. #define GENRE_STR_NUM_PER_SEC
  162. //================ Extern variable ================
  163. #if(_PM_INIT_CHK_ & UI_USE_CLASS_LIST)
  164. EXTERN struct CDB_DATA_INFO xdata stCdbClassInfo;
  165. EXTERN XBYTE gxbUnKnownTag[3][16];
  166. EXTERN XWORD gxwCdbMaxSec;
  167. EXTERN XDWORD gxdwCdbStartSec; //Nick061120 DWORD -> XDWORD
  168. EXTERN DWORD gdwCdbAddPoint;
  169. EXTERN DWORD gdwCdbPreKeptCdbSec; //for more speed
  170. //CDB Making Database Cache
  171. #if(CDB_OPTION_DATA_CACHE)
  172. typedef struct CDB_TOP_CACHE_INFO
  173. {
  174. BYTE bHitRate;
  175. BYTE bCdbCacheStrLen;
  176. BYTE bCdbCacheFirstChr;
  177. BYTE bCdbCacheLastChr;
  178. DWORD dwCdbCacheAddPoint;
  179. };
  180. typedef struct CDB_ENTER_CACHE_INFO
  181. {
  182. BYTE bHitRate;
  183. BYTE bCdbCacheStrLen;
  184. BYTE bCdbCacheFirstChr;
  185. BYTE bCdbCacheLastChr;
  186. DWORD dwCdbParentAddPoint;
  187. DWORD dwCdbCacheAddPoint;
  188. };
  189. typedef struct CDB_TITLE_CACHE_INFO
  190. {
  191. BYTE bHitRate;
  192. DWORD dwCdbParentAddPoint;
  193. DWORD dwCdbCacheAddPoint;
  194. };
  195. EXTERN struct CDB_TOP_CACHE_INFO xdata stCdbTopCache[3][CDB_TOP_DATA_CACHE_SIZE];
  196. EXTERN struct CDB_ENTER_CACHE_INFO xdata stCdbEnterCache[3][CDB_ENTER_DATA_CACHE_SIZE];
  197. EXTERN struct CDB_TITLE_CACHE_INFO xdata stCdbTitleCache[3][CDB_TITLE_DATA_CACHE_SIZE];
  198. EXTERN XDWORD gxdwCdbLastTitlePoint;
  199. #endif //CDB_OPTION_DATA_CACHE
  200. EXTERN XBYTE gxbCdbCacheModuleNum;
  201. #if(CDB_OPTION_SYS_CACHE)
  202. typedef struct CDB_SYS_CACHE_INFO
  203. {
  204. WORD bHitTimeStamp; // bit15->cache modify flag
  205. DWORD dwCdbSec;
  206. };
  207. EXTERN struct CDB_SYS_CACHE_INFO xdata stCdbSysCache[CDB_SYS_CACHE_SIZE];
  208. EXTERN XWORD gxwSysCacheTimeStamp;
  209. EXTERN XBYTE gxbCurtSysCacheNum;
  210. EXTERN XBYTE gxbCdbSysCache[CDB_SYS_CACHE_SIZE*512] _AT_(0xA000);
  211. #endif
  212. #if(UI_DISP_CDB_WORK_INF)
  213. EXTERN XWORD gxwCacheHitRateNum;
  214. EXTERN XWORD gxwSysCacheHitRateNum;
  215. EXTERN XWORD gxwWriteFlashNum;
  216. #endif
  217. #endif
  218. #define stCdbClassInfo_dwEnterLastPoint stCdbClassInfo.dwDirSec
  219. #define stCdbClassInfo_wTotalChild stCdbClassInfo.wDirInfoNum
  220. //#define stCdbClassInfo_wItemNum stCdbClassInfo.wDirOff
  221. #define stCdbClassInfo_wTotalMusic stCdbClassInfo.wDirOff
  222. //================ Extern Function =================
  223. EXTERN API void CdbGetDbSector(void) large;
  224. EXTERN API BOOL CdbInit(void) large;
  225. EXTERN API void CdbLoadUnKnownTag(BYTE bClassMode) large;
  226. EXTERN API BOOL CdbGetClassHeader(DWORD dwCdbPoint) large;
  227. EXTERN API BOOL CdbGetClassString(DWORD dwCdbPoint, PBYTE pbStrBuf) large;
  228. EXTERN API BOOL CdbSearchData(BYTE bSearchType) large;
  229. EXTERN API DWORD CdbGetDataBaseHeader(BYTE bInfAdd) large;
  230. EXTERN API BOOL CdbReadSector(DWORD dwCdbSec) large;
  231. EXTERN API BOOL CdbWriteSector(DWORD dwCdbSec) large;
  232. EXTERN API PBYTE CdbLoadDirInfo(WORD wDirNum) large;
  233. EXTERN API void CdbDelLeafNode(void) large;
  234. EXTERN API void CdbClearHeaderInfo(void) large;
  235. //==================================================
  236. #if(!CDB_OPTION_SAVE_DIR_INFO)
  237. #undef CDB_SEARCH_DIR_CACHE_SIZE
  238. #define CDB_SEARCH_DIR_CACHE_SIZE 0
  239. #endif
  240. #undef EXTERN
  241. #undef _AT_