fx_api.h
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:31k
源码类别:

DVD

开发平台:

Others

  1. /**************************************************************************/ 
  2. /*                                                                        */ 
  3. /*            Copyright (c) 1996-2002 by Express Logic Inc.               */ 
  4. /*                                                                        */ 
  5. /*  This software is copyrighted by and is the sole property of Express   */ 
  6. /*  Logic, Inc.  All rights, title, ownership, or other interests         */ 
  7. /*  in the software remain the property of Express Logic, Inc.  This      */ 
  8. /*  software may only be used in accordance with the corresponding        */ 
  9. /*  license agreement.  Any unauthorized use, duplication, transmission,  */ 
  10. /*  distribution, or disclosure of this software is expressly forbidden.  */ 
  11. /*                                                                        */
  12. /*  This Copyright notice may not be removed or modified without prior    */ 
  13. /*  written consent of Express Logic, Inc.                                */ 
  14. /*                                                                        */ 
  15. /*  Express Logic, Inc. reserves the right to modify this software        */ 
  16. /*  without notice.                                                       */ 
  17. /*                                                                        */ 
  18. /*  Express Logic, Inc.                     info@expresslogic.com         */
  19. /*  11423 West Bernardo Court               http://www.expresslogic.com   */
  20. /*  San Diego, CA  92127                                                  */
  21. /*                                                                        */
  22. /**************************************************************************/
  23. /**************************************************************************/
  24. /**************************************************************************/
  25. /**                                                                       */ 
  26. /** FileX Component                                                       */
  27. /**                                                                       */
  28. /**   Application Interface (API)                                         */
  29. /**                                                                       */
  30. /**************************************************************************/
  31. /**************************************************************************/
  32. /**************************************************************************/ 
  33. /*                                                                        */ 
  34. /*  APPLICATION INTERFACE DEFINITION                       RELEASE        */ 
  35. /*                                                                        */ 
  36. /*    fx_api.h                                            PORTABLE C      */ 
  37. /*                                                           3.0          */ 
  38. /*  AUTHOR                                                                */ 
  39. /*                                                                        */ 
  40. /*    William E. Lamie, Express Logic, Inc.                               */ 
  41. /*                                                                        */ 
  42. /*  DESCRIPTION                                                           */ 
  43. /*                                                                        */ 
  44. /*    This file defines the basic Application Interface (API) to the      */ 
  45. /*    high-performance FileX MS-DOS compatible embedded file system.      */ 
  46. /*    All service prototypes and data structure definitions are defined   */ 
  47. /*    in this file.                                                       */ 
  48. /*                                                                        */ 
  49. /*  RELEASE HISTORY                                                       */ 
  50. /*                                                                        */ 
  51. /*    DATE              NAME                      DESCRIPTION             */ 
  52. /*                                                                        */ 
  53. /*  01-01-1999     William E. Lamie         Initial Version 1.0           */ 
  54. /*  03-01-2000     William E. Lamie         Modified comment(s), added    */ 
  55. /*                                            FX_MAXIMUM_PATH constant,   */ 
  56. /*                                            added current path string,  */ 
  57. /*                                            added prototype for the     */ 
  58. /*                                            fx_system_time_get call,    */ 
  59. /*                                            and added prototypes for    */ 
  60. /*                                            utilities used by drivers,  */ 
  61. /*                                            resulting in version 1.0b.  */ 
  62. /*  01-28-2001     William E. Lamie         Modified comment(s), added    */ 
  63. /*                                            new constants, function     */ 
  64. /*                                            prototypes, local path      */ 
  65. /*                                            logic, smart FAT searching, */ 
  66. /*                                            and support for logical     */ 
  67. /*                                            sector caching, resulting   */ 
  68. /*                                            in version 2.0.             */ 
  69. /*  03-01-2002     Mohammad N. Minhaz       Modified comment(s),          */ 
  70. /*                                            added FAT32 constants and   */ 
  71. /*                                            structure fields, changed   */ 
  72. /*                                            directory name size for     */ 
  73. /*                                            long file name support,     */ 
  74. /*                                            added write protect flag,   */ 
  75. /*                                            and added support for       */ 
  76. /*                                            notification of drive when  */ 
  77. /*                                            clusters are freed,         */ 
  78. /*                                            resulting in version 3.0.   */ 
  79. /*                                                                        */
  80. /**************************************************************************/ 
  81. #ifndef  FX_API
  82. #define  FX_API
  83. #define _fx_utility_16_unsigned_read(source_ptr) 
  84.     (((((UINT) *((source_ptr) + 1)) & 0xFF) << 8) | 
  85.        ((UINT) *(source_ptr) & 0xFF))
  86. #define _fx_utility_16_unsigned_write(dest_ptr, value) 
  87.    {*((dest_ptr)) =       (UCHAR) ((value) & 0xFF);
  88.     *((dest_ptr) + 1) =   (UCHAR) (((value) >> 8) & 0xFF);}
  89. #define  _fx_utility_32_unsigned_read(source_ptr) 
  90.       (((((ULONG) *((source_ptr)+3)) & 0xFF) << 24) | 
  91.              ((((ULONG) *((source_ptr)+2)) & 0xFF) << 16) | 
  92.              ((((ULONG) *((source_ptr)+1)) & 0xFF) << 8)  | 
  93.               (((ULONG) *(source_ptr)) & 0xFF))
  94. #define _fx_utility_32_unsigned_write(dest_ptr,value) 
  95.    {*((UCHAR_PTR)(dest_ptr)) =       (UCHAR)  (((ULONG)(value)) & 0xFF);
  96.     *(((UCHAR_PTR)(dest_ptr)) + 1) =   (UCHAR) ((((ULONG)(value)) >> 8) & 0xFF);
  97.     *(((UCHAR_PTR)(dest_ptr)) + 2) =   (UCHAR) ((((ULONG)(value)) >> 16) & 0xFF);
  98.     *(((UCHAR_PTR)(dest_ptr)) + 3) =   (UCHAR) ((((ULONG)(value)) >> 24) & 0xFF);}
  99. /* Determine if a C++ compiler is being used.  If so, ensure that standard
  100.    C is used to process the API information.  */
  101. #ifdef   __cplusplus
  102. /* Yes, C++ compiler is present.  Use standard C.  */
  103. extern   "C" {
  104. #endif
  105. // Remove checking
  106. #define FX_DISABLE_ERROR_CHECKING
  107. // Added by Ofir in order to avoid semaphores and timers
  108. #define FX_NO_TIMER
  109. #define FX_NO_LOCAL_PATH
  110. #define FX_SINGLE_THREAD
  111. #define TX_NO_LOCAL_PATH
  112. /* Include the FileX port-specific file.  */
  113. #include "PlaycoreFileSysFileXfx_port.h"
  114. /* Define basic constants for FileX.  */
  115. #define FX_MEDIA_ID           0x4D454449UL
  116. #define FX_MEDIA_DIRECT_ID    0x4D454448UL
  117. #define FX_MEDIA_CLOSED_ID    0x4D454443UL
  118. #define FX_MEDIA_ABORTED_ID   0x4D454441UL
  119. #define FX_DIRECT_SUCCESS   0x91
  120. #define FX_MEDIA_INVALID    0x02
  121. #define FX_BUFFER_ERROR     0x21
  122. #define FX_FREE_CLUSTER         0x0000
  123. #define FX_FILE_ID            0x46494C45UL
  124. #define FX_FILE_CLOSED_ID     0x46494C43UL
  125. #define FX_FILE_ABORTED_ID    0x46494C41UL
  126. #define FX_MAXIMUM_PATH     255
  127. #ifndef FX_TEST_CACHE
  128. #ifdef FILEX_READ_4_SECTORS
  129. #define FX_MAX_SECTOR_CACHE 6
  130. #else
  131. #define FX_MAX_SECTOR_CACHE 1
  132. #endif
  133.     
  134. #else
  135. #define FX_MAX_SECTOR_CACHE 16
  136. #endif
  137. /* FileX API input parameters and general constants.  */
  138. #define FX_TRUE             1
  139. #define FX_FALSE            0
  140. #define FX_NULL             0
  141. #define FX_OPEN_FOR_READ    0
  142. #define FX_OPEN_FOR_WRITE   1
  143. #define FX_NO_PARTITION        0xFFFFFFFFUL
  144. #define FX_FAT_ENTRY_START  2
  145. #define FX_DIR_ENTRY_SIZE   32UL
  146. #define FX_DIR_NAME_SIZE    8
  147. #define FX_DIR_EXT_SIZE     3
  148. #define FX_DIR_RESERVED     8
  149. #define FX_DIR_ENTRY_FREE   0xE5
  150. #define FX_DIR_ENTRY_DONE   0x00
  151. #define FX_READ_ONLY        0x01
  152. #define FX_HIDDEN           0x02
  153. #define FX_SYSTEM           0x04
  154. #define FX_VOLUME           0x08
  155. #define FX_DIRECTORY        0x10
  156. #define FX_ARCHIVE          0x20
  157. #define FX_LONG_NAME        0x0f
  158. #define FX_12_BIT_FAT_SIZE  4086
  159. #define FX_16_BIT_FAT_SIZE  65525
  160. /* Define MS-DOS FAT entry values.  */
  161. #define FX_RESERVED_1           0xFFF0
  162. #define FX_LAST_CLUSTER_1       0xFFF8
  163. #define FX_RESERVED_1_32        0x0FFFFFF0UL
  164. #define FX_LAST_CLUSTER_1_32    0x0FFFFFF8UL
  165. /* Define time/date MS-DOS constants.  */
  166. #define FX_YEAR_SHIFT       9
  167. #define FX_MONTH_SHIFT      5
  168. #define FX_HOUR_SHIFT       11
  169. #define FX_MINUTE_SHIFT     5
  170. #define FX_YEAR_MASK        0x7F
  171. #define FX_MONTH_MASK       0x0F
  172. #define FX_DAY_MASK         0x1F
  173. #define FX_HOUR_MASK        0x1F
  174. #define FX_MINUTE_MASK      0x3F
  175. #define FX_SECOND_MASK      0x1F
  176. #define FX_BASE_YEAR        1980
  177. #define FX_INITIAL_DATE     0x2C61          /* 3-1-2002 */
  178. #define FX_INITIAL_TIME     0x0000          /* 12:00 am */
  179. /* FileX API return values.  */
  180. #define FX_SUCCESS          0x00
  181. #define FX_FAT_READ_ERROR   0x03
  182. #define FX_NOT_FOUND        0x04
  183. #define FX_NOT_A_FILE       0x05
  184. #define FX_ACCESS_ERROR     0x06
  185. #define FX_NOT_OPEN         0x07
  186. #define FX_FILE_CORRUPT     0x08
  187. #define FX_END_OF_FILE      0x09
  188. #define FX_INVALID_PATH     0x0D
  189. #define FX_NOT_DIRECTORY    0x0E
  190. #define FX_NO_MORE_ENTRIES  0x0F
  191. #define FX_MEDIA_NOT_OPEN   0x11
  192. #define FX_NOT_IMPLEMENTED  0x22
  193. #define FX_WRITE_PROTECT 0x23
  194. #define FX_SECTOR_INVALID   0x89
  195. #define FX_IO_ERROR         0x90
  196. //#define FX_DIRECT_SUCCESS    0xF1
  197. #define FX_GENERAL_ERROR     0xF2
  198. #define FX_READ_ONLY_ERROR   0xF3
  199. /* FileX driver interface constants.  */
  200. #define FX_DRIVER_READ                0
  201. #define FX_DRIVER_WRITE               1
  202. #define FX_DRIVER_FLUSH               2
  203. #define FX_DRIVER_ABORT               3
  204. #define FX_DRIVER_INIT                4
  205. #define FX_DRIVER_BOOT_READ           5
  206. #define FX_DRIVER_RELEASE_SECTORS     6
  207. #define FX_DRIVER_ERASE               7
  208. #define FX_DRIVER_GET_MEDIA_GEOMETRY  8
  209. #define FX_DRIVER_GET_DEVICE_GEOMETRY 9 // new - NOTICE!
  210. #define FX_DRIVER_FORMAT_DEVICE       9
  211. #define FX_DRIVER_FORMAT_PARTITION    10
  212. #define FX_DRIVER_INIT_ON_FORMAT      11
  213. #define FX_DRIVER_OPEN_BURST          12
  214. #define FX_DRIVER_WRITE_BURST         13
  215. #define FX_DRIVER_CLOSE_BURST         14
  216. #define FX_DRIVER_CHECK_WP_STATUS     15
  217. /* Define the control block definitions for all system objects.  */
  218. /* Define media geometry structure. This structure contains fields describing
  219.    the media both physically and logically. It is initialized by calling
  220.    _fx_utility_get_media_geometry for the specified media. The structure
  221.    is divided into groups of related parameters. Changing this structure
  222.    requires good understanding of its functionality. */
  223. // These are invalid values used to initialize the parameter groups of the
  224. // structure.
  225. #define FX_UNDEF_CYLINDERS           0
  226. #define FX_UNDEF_START_END           0xFFFF
  227. #define FX_UNDEF_CLUSTER_SIZE        0
  228. #define FX_UNDEF_ROOT_ENTRIES        0
  229. #define FX_UNDEF_SIZE_IN_SECTORS     0xFFFFFFFFUL
  230. #define FX_UNDEF_SECTORS_PER_FAT     0
  231. #define FX_UNDEF_HIDDEN_SECTORS      0xFFFFFFFFUL
  232. #define FX_UNDEF_FAT_TYPE            0xFF
  233. #define FX_UNDEF_PARTITION_ALIGNMENT 0
  234. #define FX_UNDEF_MBR_SECTOR          0xFFFFFFFFUL
  235. #define FX_BOOT_SECTOR_SIZE 512
  236. typedef struct FX_GEOMETRY_STRUCT {
  237.     // Available CHS. 
  238.     USHORT uwCylinders;
  239.     USHORT uwHeads;
  240.     USHORT uwSectorsPerTrack;
  241.     // Partition Start.
  242.     USHORT uwStartHead;
  243.     USHORT uwStartSector;
  244.     USHORT uwStartCylinder;
  245.     USHORT uwEndHead;
  246.     USHORT uwEndSector;
  247.     USHORT uwEndCylinder;
  248.     ULONG  ulPartitionStartSector;
  249.     // Number of sectors in a cluster.
  250.     BYTE   bySectorsPerCluster;
  251.     // Number of 32-byte entries in the root directory.
  252.     USHORT uwRootEntries;
  253.     // Total number of sectors in the media.
  254.     ULONG  ulSizeInSectors;
  255.     // Number of sectors that make up one FAT.
  256.     USHORT uwSectorsPerFAT;
  257.     // Number of sectors from beginning of media to boot sector.
  258.     ULONG  ulHiddenSectors;
  259.     // Type of FAT.
  260.     // NOTE: This does not include FAT32, but rather FAT12, FAT16, and
  261.     // a newer version of FAT16 when the number of clusters exceeds 16
  262.     // bits (that is called here BIGDOS).
  263.     BYTE   byFatType;
  264.     #define FX_FAT12                    1
  265.     #define FX_FAT16                    4
  266.     #define FX_BIGDOS                   6
  267.     // Alignment for a first sector of a partition.
  268.     ULONG  ulPartitionAlignment;
  269.     // Number of sector on device, where MBR resides.
  270.     ULONG  ulMbrSector;
  271.     // For NANDs and NORs, this is the number of sectors that each erasable
  272.     // block contains.
  273.     USHORT uwSectorsPerBlockBits;
  274.     // This parameter refers only to NANDs. It states the type of the NAND,
  275.     // according to 4 defined groups (see FCU documentation for details).
  276.     UINT   uiNandType;
  277.     // This parameter refers only to NORs. It states the type of the NOR,
  278.     // currently supporting Intel and Amd.
  279.     UINT   uiNorType;
  280.     // This parameter refers only to NORs - it specifies if there is a special
  281.     // boot block (a block which can be erased in a smaller resolution).
  282.     BOOL   bNorBlockMapKnown;
  283. // This parameter holds the speed of the specific media we are working
  284.     // with, in case it affects calls to the FCU driver.
  285.     // The different speed options are media type specific.
  286.     UINT   uiSpeed;
  287.     // This parameter defines with which type of card we are working with - 
  288.     // SD(4bit) or MMC(1bit).
  289.     UINT   uiSdProtocol;
  290. } FX_GEOMETRY, *FX_GEOMETRY_PTR;
  291. /* Define directory entry type.  Directory entries are found in the
  292.    root directory and in directory files (sub-directories).  Default
  293.    the directory name length to 13 for 8.3 compatibility (the dot and
  294.    a NULL at the end).  The user may change this on the compilation 
  295.    command line.  */
  296. #ifndef FX_MAX_LONG_NAME_LEN
  297. //#define FX_MAX_LONG_NAME_LEN 13
  298. #define FX_MAX_LONG_NAME_LEN 65
  299. #endif
  300. #ifdef FX_TEST_CACHE
  301. #define FX_MEDIA_CACHE_ADDR  FCU_FILEX_CACHE_ADDR
  302. #endif
  303. typedef struct FX_DIR_ENTRY_STRUCT
  304. {
  305.     CHAR            fx_dir_entry_name[FX_MAX_LONG_NAME_LEN];
  306.     UINT            fx_dir_long_name_present;   /* 0 (default) => not present; 1 => present*/
  307.     UCHAR           fx_dir_entry_attributes;
  308.     UINT            fx_dir_entry_time;
  309.     UINT            fx_dir_entry_date;
  310.     ULONG           fx_dir_entry_cluster;
  311.     ULONG           fx_dir_entry_file_size;
  312.     ULONG           fx_dir_entry_log_sector;
  313.     ULONG           fx_dir_entry_byte_offset;
  314. } FX_DIR_ENTRY;
  315. /* Define the path data structure.  This structure will contain
  316.    the current path and the information for performing directory
  317.    entry operations.  */
  318. typedef struct FX_PATH_STRUCT
  319. {
  320.     /* Define the path information.  */
  321.     FX_DIR_ENTRY    fx_path_directory;
  322.     CHAR            fx_path_string[FX_MAXIMUM_PATH];
  323.     ULONG           fx_path_current_entry;
  324. } FX_PATH;
  325. typedef FX_PATH FX_LOCAL_PATH;
  326. /* Define the cache control data structure.  There are FX_MAX_SECTOR_CACHE
  327.    of these structures defined inside the FX_MEDIA structure.  Each entry 
  328.    maintains a cache representation of a media sector.  */
  329. typedef struct FX_CACHED_SECTOR_STRUCT
  330. {
  331.     /* Define the buffer pointer associated with this cache entry.  */
  332.     UCHAR_PTR       fx_cached_sector_memory_buffer;
  333.     /* Define the sector number that is cached.  */
  334.     ULONG           fx_cached_sector;
  335.     /* Define the flag that indicates whether or not the cached sector
  336.        has been modified and needs to be written to the media.  */
  337.     UINT            fx_cached_sector_buffer_dirty;
  338.     /* Define the next cached sector pointer.  This is used to implement
  339.        the "last used" algorithm when looking for cache entry to swap out to
  340.        the physical media.  */
  341.     struct FX_CACHED_SECTOR_STRUCT
  342.                     *fx_cached_sector_next_used;   
  343. } FX_CACHED_SECTOR;
  344. /* Define a driver function */
  345. //typedef VOID(*FX_DRIVER)(struct FX_MEDIA_STRUCT*);
  346. /* Define the media control block.  All information about each open
  347.    media device are maintained in by the FX_MEDIA data type.  */
  348. typedef struct FX_MEDIA_STRUCT
  349. {
  350.     /* Define the media ID used for error checking.  */
  351.     ULONG           fx_media_id;
  352.     /* Define the media's name.  */
  353.     CHAR_PTR        fx_media_name;
  354.     /* Define the media's protection object, which is a ThreadX semaphore.  
  355.        Only one thread is allowed to access any media or associated files
  356.        at a time.  If FX_SINGLE_THREAD is defined, the FileX services are 
  357.        going to be called from only one thread, hence the protection is 
  358.        not needed.  */
  359. #ifndef FX_SINGLE_THREAD
  360.     OS_SEMAPHORE    fx_media_protect;
  361. #endif
  362.     /* Remember the memory buffer area.  */
  363.     UCHAR_PTR       fx_media_memory_buffer;
  364.     UCHAR_PTR       fx_media_memory_buffer_orig;
  365.     ULONG           fx_media_memory_size;
  366.     /* Define the sector cache control structures for this media.  */
  367.     struct FX_CACHED_SECTOR_STRUCT
  368.                     fx_media_sector_cache[FX_MAX_SECTOR_CACHE];
  369.     /* Define the number of sectors actually cached based on the
  370.        user supplied buffer at media open time.  */
  371.     ULONG           fx_media_sector_cache_size;
  372.     /* Define the end of the cache area.  This is used to determine
  373.        if the I/O is for the internal memory of the media.  */
  374.     UCHAR_PTR       fx_media_sector_cache_end;
  375. #ifdef FX_TEST_CACHE
  376.     struct FX_CACHED_SECTOR_STRUCT
  377.                     * fx_media_sector_cache_in_sram;
  378. #endif
  379.     /* Define the list head of the cached sector entries.  This
  380.        pointer points to the most recenty used cache sector.  */
  381.     struct FX_CACHED_SECTOR_STRUCT
  382.                     *fx_media_sector_cache_list_ptr;
  383.     /* Define the basic information about the associated media.  */
  384.     UINT            fx_media_bytes_per_sector;
  385.     UINT            fx_media_sectors_per_track;
  386.     UINT            fx_media_heads;
  387.     ULONG           fx_media_total_sectors;
  388.     ULONG           fx_media_total_clusters;
  389.     UINT            fx_media_reserved_sectors;
  390.     UINT            fx_media_root_sector_start;
  391.     UINT            fx_media_root_sectors;
  392.     UINT            fx_media_data_sector_start;
  393.     UINT            fx_media_sectors_per_cluster;
  394.     UINT            fx_media_sectors_per_FAT;
  395.     UINT            fx_media_number_of_FATs;
  396.     UINT            fx_media_12_bit_FAT;
  397.     UINT            fx_media_32_bit_FAT;
  398.     ULONG           fx_media_hidden_sectors;
  399.     ULONG           fx_media_root_clus_32;
  400.     UINT            fx_media_root_directory_entries;
  401.     ULONG           fx_media_available_clusters;
  402.     ULONG           fx_media_cluster_search_start;
  403.     UCHAR           fx_media_type;
  404.     /* Define the information pertinent to the I/O driver interface.  */
  405.     VOID            *fx_media_driver_info;
  406.     UINT            fx_media_driver_request;
  407.     UINT            fx_media_driver_status;
  408.     UCHAR_PTR       fx_media_driver_buffer;
  409.     ULONG           fx_media_driver_logical_sector;
  410.     ULONG           fx_media_driver_sectors;
  411.     ULONG           fx_media_driver_physical_sector;
  412.     UINT            fx_media_driver_physical_track;
  413.     UINT            fx_media_driver_physical_head;  
  414.     UINT            fx_media_driver_write_protect;      /* The driver sets this to FX_TRUE when media is write protected.  */
  415.     UINT            fx_media_driver_free_sector_update; /* The driver sets this to FX_TRUE when it needs to know freed clusters.  */
  416.     /* Define the driver entry point.  */
  417.     //FX_DRIVER       fx_media_driver_entry;
  418.     /* Define the driver entry point.  */
  419.     VOID            (*fx_media_driver_entry)(struct FX_MEDIA_STRUCT *);
  420.     /* Define the current directory information for the media.  */
  421.     FX_PATH         fx_media_default_path;
  422.     /* Define the head pointer for the open files of this media.  */
  423.     struct FX_FILE_STRUCT
  424.                     *fx_media_opened_file_list;
  425.     /* Define the counter for keeping track of how many open files are 
  426.        present.  */
  427.     ULONG           fx_media_opened_file_count;
  428.     /* Define the next and previous link pointers for the open media list.  */
  429.     struct FX_MEDIA_STRUCT
  430.                     *fx_media_opened_next,
  431.                     *fx_media_opened_previous;
  432.     /* Define a variable for the application's use.  */
  433.     ULONG           fx_media_reserved_for_user;
  434.     /* Media geometry structure */
  435.     FX_GEOMETRY     fx_geometry;
  436. } FX_MEDIA;
  437. typedef FX_MEDIA* FX_MEDIA_PTR;
  438. /* Define the FileX file control block.  All information about open
  439.    files are found in this data type.  */
  440. typedef struct FX_FORMAT_PARAMS_STRUCT
  441. {
  442.     // Volume ID.
  443.     ULONG ulVolumeId;
  444.     // Volume Label. Up to 11 are used, padded with ' '.
  445.     PCHAR szVolumeLabel;
  446.     // OEM name. Up to 8 are used, padded with ' '.
  447.     PCHAR szOemName;
  448.     // Specify number of FATs requested.
  449.     BYTE byNumOfFats;
  450. } FX_FORMAT_PARAMS, *FX_FORMAT_PARAMS_PTR;
  451. typedef struct FX_FILE_STRUCT
  452. {
  453.     /* Define the file ID used for error checking.  */
  454.     ULONG           fx_file_id;
  455.     /* Define the file's name.  */
  456.     CHAR_PTR        fx_file_name;
  457.     /* Define the open mode request.  */
  458.     UCHAR           fx_file_open_mode;
  459.     /* Define the file modified field.  */
  460.     UCHAR           fx_file_modified;
  461.     /* Define the complete directory entry structure.  */
  462.     FX_DIR_ENTRY    fx_file_dir_entry;
  463.     /* Define the data storage parameters.  */
  464.     ULONG           fx_file_total_clusters;
  465.     ULONG           fx_file_first_physical_cluster;
  466.     ULONG           fx_file_consecutive_cluster;
  467.     ULONG           fx_file_last_physical_cluster;
  468.     ULONG           fx_file_current_physical_cluster;
  469.     ULONG           fx_file_current_logical_sector;
  470.     ULONG           fx_file_current_logical_offset;
  471.     ULONG           fx_file_current_relative_cluster;
  472.     ULONG           fx_file_current_relative_sector;
  473.     ULONG           fx_file_current_file_offset;
  474.     ULONG           fx_file_current_file_size;
  475.     ULONG           fx_file_current_available_size;
  476.     /* Remember the media that is associated with this file. */
  477.     FX_MEDIA        *fx_file_media_ptr;
  478.     /* Define the pointers necessary to maintain the open file on 
  479.        the list of open files.  */
  480.     struct FX_FILE_STRUCT
  481.                     *fx_file_opened_next,
  482.                     *fx_file_opened_previous;
  483. } FX_FILE;
  484. /* Define the FileX API mappings based on the error checking 
  485.    selected by the user.  Note: this section is only applicable to 
  486.    application source code, hence the conditional that turns off this
  487.    stuff when the include file is processed by the FileX source. */
  488. #ifndef  FX_SOURCE_CODE
  489. /* Determine if error checking is desired.  If so, map API functions 
  490.    to the appropriate error checking front-ends.  Otherwise, map API
  491.    functions to the core functions that actually perform the work. 
  492.    Note: error checking is enabled by default.  */
  493. #ifdef FX_DISABLE_ERROR_CHECKING
  494. /* Services without error checking.  */
  495. #define fx_system_initialize            _fx_system_initialize
  496. #define fx_system_date_set              _fx_system_date_set
  497. #define fx_system_time_set              _fx_system_time_set
  498. #define fx_system_date_get              _fx_system_date_get
  499. #define fx_system_time_get              _fx_system_time_get
  500. #define fx_partition_create             _fx_partition_create
  501. #define fx_partition_format             _fx_partition_format
  502. #define fx_media_open                   _fx_media_open
  503. #define fx_media_invalidate             _fx_media_invalidate
  504. #define fx_media_close                  _fx_media_close
  505. #define fx_media_full_format            _fx_media_full_format
  506. #define fx_media_quick_format           _fx_media_quick_format
  507. #define fx_media_flush                  _fx_media_flush
  508. #define fx_media_space_available        _fx_media_space_available
  509. #define fx_media_read                   _fx_media_read
  510. #define fx_media_write                  _fx_media_write
  511. #define fx_media_erase                  _fx_media_erase
  512. #define fx_media_abort                  _fx_media_abort
  513. #define fx_directory_create             _fx_directory_create
  514. #define fx_directory_delete             _fx_directory_delete
  515. #define fx_directory_rename             _fx_directory_rename
  516. #define fx_directory_first_entry_find   _fx_directory_first_entry_find
  517. #define fx_directory_next_entry_find    _fx_directory_next_entry_find
  518. #define fx_directory_first_full_entry_find _fx_directory_first_full_entry_find
  519. #define fx_directory_next_full_entry_find  _fx_directory_next_full_entry_find
  520. #define fx_directory_name_test          _fx_directory_name_test
  521. #define fx_directory_information_get    _fx_directory_information_get
  522. #define fx_directory_default_set        _fx_directory_default_set
  523. #define fx_directory_default_get        _fx_directory_default_get
  524. #define fx_directory_local_path_clear   _fx_directory_local_path_clear
  525. #define fx_directory_local_path_get     _fx_directory_local_path_get
  526. #define fx_directory_local_path_set     _fx_directory_local_path_set
  527. #define fx_directory_local_path_restore _fx_directory_local_path_restore
  528. #define fx_file_create                  _fx_file_create
  529. #define fx_file_delete                  _fx_file_delete
  530. #define fx_file_rename                  _fx_file_rename
  531. #define fx_file_attributes_set          _fx_file_attributes_set
  532. #define fx_file_attributes_read         _fx_file_attributes_read
  533. #define fx_file_open                    _fx_file_open
  534. #define fx_file_close                   _fx_file_close
  535. #define fx_file_read                    _fx_file_read
  536. #define fx_file_write                   _fx_file_write
  537. #define fx_file_allocate                _fx_file_allocate
  538. #define fx_file_best_effort_allocate    _fx_file_best_effort_allocate
  539. #define fx_file_seek                    _fx_file_seek
  540. #define fx_file_relative_seek           _fx_file_relative_seek
  541. #define fx_file_truncate                _fx_file_truncate
  542. #define fx_file_open_by_addr            _fx_file_open_by_addr
  543. #else
  544. /* Services with error checking.  */
  545. #define fx_system_initialize            _fx_system_initialize
  546. #define fx_system_date_set              _fxe_system_date_set
  547. #define fx_system_time_set              _fxe_system_time_set
  548. #define fx_system_date_get              _fxe_system_date_get
  549. #define fx_system_time_get              _fxe_system_time_get
  550. #define fx_partition_create             _fxe_partition_create
  551. #define fx_partition_format             _fxe_partition_format
  552. #define fx_media_open                   _fxe_media_open
  553. #define fx_media_invalidate             _fxe_media_invalidate
  554. #define fx_media_close                  _fxe_media_close
  555. #define fx_media_full_format            _fxe_media_full_format
  556. #define fx_media_quick_format           _fxe_media_quick_format
  557. #define fx_media_flush                  _fxe_media_flush
  558. #define fx_media_space_available        _fxe_media_space_available
  559. #define fx_media_read                   _fxe_media_read
  560. #define fx_media_write                  _fxe_media_write
  561. #define fx_media_erase                  _fxe_media_erase
  562. #define fx_media_abort                  _fxe_media_abort
  563. #define fx_directory_create             _fxe_directory_create
  564. #define fx_directory_delete             _fxe_directory_delete
  565. #define fx_directory_rename             _fxe_directory_rename
  566. #define fx_directory_first_entry_find   _fxe_directory_first_entry_find
  567. #define fx_directory_next_entry_find    _fxe_directory_next_entry_find
  568. #define fx_directory_first_full_entry_find _fxe_directory_first_full_entry_find
  569. #define fx_directory_next_full_entry_find  _fxe_directory_next_full_entry_find
  570. #define fx_directory_name_test          _fxe_directory_name_test
  571. #define fx_directory_information_get    _fxe_directory_information_get
  572. #define fx_directory_default_set        _fxe_directory_default_set
  573. #define fx_directory_default_get        _fxe_directory_default_get
  574. #define fx_directory_local_path_clear   _fxe_directory_local_path_clear
  575. #define fx_directory_local_path_get     _fxe_directory_local_path_get
  576. #define fx_directory_local_path_set     _fxe_directory_local_path_set
  577. #define fx_directory_local_path_restore _fxe_directory_local_path_restore
  578. #define fx_file_create                  _fxe_file_create
  579. #define fx_file_delete                  _fxe_file_delete
  580. #define fx_file_rename                  _fxe_file_rename
  581. #define fx_file_attributes_set          _fxe_file_attributes_set
  582. #define fx_file_attributes_read         _fxe_file_attributes_read
  583. #define fx_file_open                    _fxe_file_open
  584. #define fx_file_close                   _fxe_file_close
  585. #define fx_file_read                    _fxe_file_read
  586. #define fx_file_write                   _fxe_file_write
  587. #define fx_file_allocate                _fxe_file_allocate
  588. #define fx_file_best_effort_allocate    _fxe_file_best_effort_allocate
  589. #define fx_file_seek                    _fxe_file_seek
  590. #define fx_file_relative_seek           _fxe_file_relative_seek
  591. #define fx_file_truncate                _fxe_file_truncate
  592. #endif
  593. /* Define prototype for utility services commonly used by FileX I/O Drivers.  This eliminates the
  594.    need to include internal FileX component files in I/O drivers.  */
  595. UINT        _fx_partition_offset_calculate( VOID  *part_sector,
  596.                                             UINT   partition,
  597.                                             ULONG *partition_start,
  598.                                             ULONG *partition_size );
  599. UINT        _fx_media_open(FX_MEDIA *media_ptr, CHAR *media_name,
  600.                  VOID (*media_driver)(FX_MEDIA *), VOID *driver_info_ptr, 
  601.                  VOID *memory_ptr, ULONG memory_size, UINT partition);
  602. #endif
  603. /* Determine if a C++ compiler is being used.  If so, complete the standard
  604.    C conditional started above.  */
  605. #ifdef   __cplusplus
  606.         }
  607. #endif
  608. #endif