FileX User Guide File X
FileX_User_Guide
User Manual:
Open the PDF directly: View PDF .
Page Count: 236
Download | |
Open PDF In Browser | View PDF |
® the high-performance real-time file system User Guide Version 5.0 Express Logic, Inc. 858.613.6640 Toll Free 888-THREADX FAX 858.521.4259 http://www.expresslogic.com ©1999-2006 by Express Logic, Inc. All rights reserved. This document and the associated FileX software are the sole property of Express Logic, Inc. Each contains proprietary information of Express Logic, Inc. Reproduction or duplication by any means of any portion of this document without the prior written consent of Express Logic, Inc. is expressly forbidden. Express Logic, Inc. reserves the right to make changes to the specifications described herein at any time and without notice in order to improve design or reliability of FileX. The information in this document has been carefully checked for accuracy; however, Express Logic, Inc. makes no warranty pertaining to the correctness of this document. Trademarks FileX and ThreadX are registered trademarks of Express Logic, Inc., and picokernel, preemptionthreshold, and event-chaining are trademarks of Express Logic, Inc. All other product and company names are trademarks or registered trademarks of their respective holders. Warranty Limitations Express Logic, Inc. makes no warranty of any kind that the FileX products will meet the USER’s requirements, or will operate in the manner specified by the USER, or that the operation of the FileX products will operate uninterrupted or error free, or that any defects that may exist in the FileX products will be corrected after the warranty period. Express Logic, Inc. makes no warranties of any kind, either expressed or implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose, with respect to the FileX products. No oral or written information or advice given by Express Logic, Inc., its dealers, distributors, agents, or employees shall create any other warranty or in any way increase the scope of this warranty, and licensee may not rely on any such information or advice. Part Number: 000-1010 Revision 5.0 Express Logic, Inc. Contents About This Guide 11 1 Organization 11 1 Guide Conventions 12 1 FileX Data Types 13 1 Customer Support Center 14 Latest Product Information 14 What We Need From You 14 Where to Send Comments About This Guide 15 1 Introduction to FileX 1 1 17 FileX Unique Features 18 Product Highlights 18 Powerful Services of FileX 19 Multiple Media Management 19 Logical Sector Cache 19 Contiguous File Support 19 Dynamic Creation 20 1 Easy-to-use API 20 1 Easy Integration 20 2 Installation and Use of FileX 23 1 1 Host Considerations 24 Computer Type 24 Download Interfaces 24 Debugging Tools 24 Required Hard Disk Space 24 Target Considerations 25 User Guide 4 FileX User Guide 1 Product Distribution 25 1 FileX Installation 26 1 Using FileX 27 1 Troubleshooting 28 1 Configuration Options 29 1 FileX Version ID 31 3 Functional Components of FileX 1 1 User Guide 33 Media Description 35 Logical Sectors 35 Media Boot Record 35 Jump Instruction 35 OEM Name 36 Bytes Per Sector 36 Sectors Per Cluster 36 Reserved Sectors 38 Number of FATs 38 Root Directory Size 38 Number of Sectors FAT-12 & FAT-16 38 Media Type 38 Sectors Per FAT 39 Sectors Per Track 39 Number of Heads 39 Hidden Sectors 39 Number of Sectors FAT-32 39 Sectors per FAT (FAT-32) 39 Root Directory Cluster 40 System Boot Code 40 Signature 0x55AA 40 File Allocation Table (FAT) 40 Internal Logical Cache 41 Write Protect 42 Free Sector Update 42 Media Control Block FX_MEDIA 42 Directory Description 43 Directory Name 43 Directory Filename Extension 44 Contents 5 Directory Attribute 44 Directory Time 45 Directory Date 45 Directory Starting Cluster 45 Directory File Size 46 Ordinal 47 Unicode Character 48 LFN Attributes 48 LFN Type 48 LFN Checksum 48 LFN Cluster 49 Root Directory 49 Subdirectories 49 Global Default Path 50 Local Default Path 50 1 1 File Description 51 File Allocation 51 File Access 51 Initialization 52 File Control Block FX_FILE 53 System Information 53 System Date 53 System Time 54 Periodic Time Update 54 Initialization 55 4 Description of FileX Services 57 fx_directory_attributes_read 62 fx_directory_attributes_set 64 fx_directory_create 66 fx_directory_default_get 68 fx_directory_default_set 70 fx_directory_delete 72 fx_directory_first_entry_find 74 fx_directory_first_full_entry_find 76 fx_directory_information_get 80 fx_directory_local_path_clear 82 fx_directory_local_path_get 84 fx_directory_local_path_restore 86 Express Logic, Inc. 6 FileX User Guide fx_directory_local_path_set 88 fx_directory_long_name_get 90 fx_directory_name_test 92 fx_directory_next_entry_find 94 fx_directory_next_full_entry_find 96 fx_directory_rename 100 fx_directory_short_name_get 102 fx_file_allocate 104 fx_file_attributes_read 106 fx_file_attributes_set 108 fx_file_best_effort_allocate 110 fx_file_close 112 fx_file_create 114 fx_file_date_time_set 116 fx_file_delete 118 fx_file_open 120 fx_file_read 122 fx_file_relative_seek 124 fx_file_rename 126 fx_file_seek 128 fx_file_truncate 130 fx_file_truncate_release 132 fx_file_write 134 fx_media_abort 136 fx_media_cache_invalidate 138 fx_media_check 140 fx_media_close 144 fx_media_flush 146 fx_media_format 148 fx_media_open 152 fx_media_read 154 fx_media_space_available 156 fx_media_volume_get 158 fx_media_volume_set 160 fx_media_write 162 fx_system_date_get 164 fx_system_date_set 166 fx_system_initialize 168 fx_system_time_get 170 fx_system_time_set 172 fx_unicode_directory_create 174 User Guide Contents 7 fx_unicode_file_create 176 fx_unicode_length_get 178 fx_unicode_name_get 180 fx_unicode_short_name_get 182 5 I/O Drivers for FileX 185 1 I/O Driver Introduction 186 1 I/O Driver Entry 186 1 1 I/O Driver Requests 186 Driver Initialization 187 Boot Sector Read 187 Boot Sector Write 188 Sector Read 188 Sector Write 189 Driver Flush 190 Driver Abort 190 Release Sectors 191 Driver Suspension 191 Sector Translation 191 Hidden Sectors 192 Media Write Protect 192 Hidden Sectors 193 Media Write Protect 193 Sample RAM Driver 193 A FileX Services 201 System Services 202 Media Services 202 Directory Services 203 File Services 204 Unicode Services 205 B FileX Constants 207 Alphabetic Listings 208 Listings by Value 213 Express Logic, Inc. 8 FileX User Guide C FileX Data Types 219 1 FX_DIR_ENTRY 220 1 FX_PATH 220 1 FX_CACHED_SECTOR 220 1 FX_MEDIA 221 1 FX_FILE 223 D ASCII Character Codes 225 Index 227 User Guide Figures Figure 1 FileX Media Logical Sector View 36 Figure 2 FileX Media Boot Record 37 Figure 3 FileX 8.3 Directory Entry 46 Figure 4 Long File Name (LFN) Directory Entry 47 Figure 5 Directory Entries Comprising a 39-Character LFN 49 Figure 6 FileX FAT-16 Subdirectory 52 Figure 7 FileX FAT-16 File Example 55 User Guide 10 NetX User Guide User Guide About This Guide This guide contains comprehensive information about FileX, the high-performance real-time file system from Express Logic, Inc. It is intended for the embedded real-time software developer. The developer should be familiar with standard real-time operating system functions, FAT file system services, and the C programming language. Organization Chapter 1 Introduces FileX. Chapter 2 Gives the basic steps to install and use FileX with your ThreadX application. Chapter 3 Provides a functional overview of the FileX system and basic information about FAT file system formats. Chapter 4 Details the application’s interface to FileX. Chapter 5 Describes the supplied FileX RAM driver and how to write your own custom FileX drivers. Appendix A FileX API Appendix B FileX constants Appendix C FileX data types User Guide 12 FileX User Guide Appendix D ASCII chart Index Topic cross reference Guide Conventions Italics Typeface denotes book titles, emphasizes important words, and indicates variables. Boldface Typeface denotes file names, key words, and further emphasizes important words and variables. i ! User Guide Information symbols draw attention to important or additional information that could affect performance or function. Warning symbols draw attention to situations that developers should avoid because they could cause fatal errors. 13 FileX Data Types In addition to the custom FileX control structure data types, there is a series of special data types that are used in FileX service call interfaces. These special data types map directly to data types of the underlying C compiler. This is done to insure portability between different C compilers. The exact implementation is inherited from ThreadX and can be found in the tx_port.h file included in the ThreadX distribution. The following is a list of FileX service call data types and their associated meanings: UINT Basic unsigned integer. This type must support 8-bit unsigned data; however, it is mapped to the most convenient unsigned data type. ULONG Unsigned long type. This type must support 32-bit unsigned data. VOID Almost always equivalent to the compiler’s void type. CHAR Most often a standard 8-bit character type. Additional data types are used within the FileX source. They are located in either the tx_port.h or fx_port.h files. Express Logic, Inc. 14 FileX User Guide Customer Support Center Support engineers 858.613.6640 Support fax 858.521.4259 Support email support@expresslogic.com Web page http://www.expresslogic.com Latest Product Information Visit the Express Logic web site and select the "Support" menu to find the latest support information, including information about the latest FileX product releases. What We Need From You Please provide us with the following information in an email message so we can more efficiently resolve your support request: 1. A detailed description of the problem, including frequency of occurrence and whether it can be reliably reproduced. 2. A detailed description of any changes to the application and/or FileX that preceded the problem. 3. The contents of the _tx_version_id and _fx_version_id strings found in the tx_port.h and fx_port.h files of your distribution. These strings will provide us valuable information regarding your run-time environment. 4. The contents in RAM of the following ULONG variables. These variables will give us information on how your ThreadX and FileX libraries were built: _tx_build_options _fx_system_build_options1 User Guide 15 _fx_system_build_options2 _fx_system_build_options3 Where to Send Comments About This Guide The staff at Express Logic is always striving to provide you with better products. To help us achieve this goal, email any comments and suggestions to the Customer Support Center at support@expresslogic.com Please type “FileX User Guide” in the subject line. Express Logic, Inc. 16 User Guide CHAPTER 1 Introduction to FileX FileX is a complete FAT format media and file management system for deeply embedded applications. This chapter introduces FileX, describing its applications and benefits. 1 1 FileX Unique Features 18 Product Highlights 18 Powerful Services of FileX 19 Multiple Media Management 19 Logical Sector Cache 19 Contiguous File Support 19 Dynamic Creation 20 1 Easy-to-use API 20 1 Easy Integration 20 User Guide 18 FileX User Guide FileX Unique Features FileX supports an unlimited number of media devices at the same time, including RAM disks, FLASH managers, and actual physical devices. It also supports 12-, 16-, and 32-bit File Allocation Table (FAT) formats, contiguous file allocation, and it is highly optimized for both size and performance. Designed to meet the growing need for FLASH devices, FileX uses the same design and coding methods as ThreadX. Like all Express Logic products, FileX is distributed with full ANSI C source code, and it has no run-time royalties. Product Highlights • • • • • • Complete ThreadX processor support • • • • Dynamic FileX object creation/deletion • • • • • • Complete integration with ThreadX User Guide No royalties Complete ANSI C source code Real-time performance Responsive technical support Unlimited FileX objects (media, directories, and files) Flexible memory usage Size scales automatically Small footprint (as low as 6 KBytes) instruction area size: 6-30K Endian neutral Easy-to-implement FileX I/O drivers 12-, 16-, and 32-bit FAT support Long filename support Internal FAT entry cache Introduction to FileX • • • • • • • • • 19 Unicode name support Contiguous file allocation Consecutive sector and cluster read/write Internal logical sector cache RAM disk demonstration runs out-of-the-box Media format capability Error detection and recovery Fault tolerant options Built-in performance statistics Powerful Services of FileX Multiple Media Management FileX can support an unlimited number of physical media. Each media instance has its own distinct memory area and associated driver specified on the fx_media_open API call. The default distribution of FileX comes with a simple RAM media driver and a demonstration system that uses this RAM disk. Logical Sector Cache By reducing the number of whole sector transfers, both to and from the media, the FileX logical sector cache significantly improves performance. FileX maintains a logical sector cache for each opened media. The depth of the logical sector cache is determined by the amount of memory supplied to FileX with the fx_media_open API call. Contiguous File Support FileX offers contiguous file support though the API service fx_file_allocate to improve and make file access time deterministic. This routine takes the amount of memory requested and looks for a series Express Logic, Inc. 20 FileX User Guide of adjacent clusters to satisfy the request. If such clusters are found, they are pre-allocated by making them part of the file's chain of allocated clusters. On moving physical media, the FileX contiguous file support results in a significant performance improvement and makes the access time deterministic. Dynamic Creation FileX allows you to create system resources dynamically. This is especially important if your application has multiple or dynamic configuration requirements. In addition, there are no predetermined limits on the number of FileX resources you can use (media or files). Also, the number of system objects does not have any impact on performance. Easy-to-use API FileX provides the very best deeply embedded file system technology in a manner that is easy to understand and easy to use! The FileX Application Programming Interface (API) makes the services intuitive and consistent. You won't have to decipher “alphabet soup” services that are all too common with other file systems. For a complete list of the FileX Version 2 API, see Appendix C on page 219. Easy Integration FileX is easily integrated with virtually any FLASH or media device. Porting FileX is simple. This guide User Guide Introduction to FileX 21 describes the process in detail, and the RAM driver of the demo system makes for a very good place to start! Express Logic, Inc. 22 Introduction to FileX User Guide CHAPTER 2 Installation and Use of FileX This chapter contains an introduction to FileX and a description of installation conditions, procedures, and use, including the following: 1 Host Considerations 24 Computer Type 24 Download Interfaces 24 Debugging Tools 24 Required Hard Disk Space 24 1 Target Considerations 25 1 Product Distribution 25 1 FileX Installation 26 1 Using FileX 27 1 Troubleshooting 28 1 Configuration Options 29 1 FileX Version ID 31 User Guide 24 FileX User Guide Host Considerations Computer Type Embedded development is usually performed on Windows or Linux (Unix) host computers. After the application is compiled, linked, and located on the host, it is downloaded to the target hardware for execution. Download Interfaces Usually the target download is done from within the development tool's debugger. After download, the debugger is responsible for providing target execution control (go, halt, breakpoint, etc.) as well as access to memory and processor registers. Debugging Tools Most development tool debuggers communicate with the target hardware via on-chip debug (OCD) connections such as JTAG (IEEE 1149.1) and Background Debug Mode (BDM). Debuggers also communicate with target hardware through In-Circuit Emulation (ICE) connections. Both OCD and ICE connections provide robust solutions with minimal intrusion on the target resident software. Required Hard Disk Space The source code for FileX is delivered in ASCII format and requires approximately 500 KBytes of space on the host computer’s hard disk. i Please review the supplied readme_filex.txt file for additional host system considerations and options. User Guide Installation and Use of FileX 25 Target Considerations FileX requires between 6 KBytes and 30 KBytes of Read-Only Memory (ROM) on the target. Another 100 bytes of the target’s Random Access Memory (RAM) are required for FileX global data structures. Each opened media also requires 1.5 KBytes of RAM for the control block in addition to RAM for storing data for one sector (typically 512 bytes). For date/time stamping to function properly, FileX relies on ThreadX timer facilities. This is implemented by creating a FileX-specific timer during FileX initialization. FileX also relies on ThreadX semaphores for multiple thread protection and I/O suspension. Product Distribution Two FileX packages are available—standard and premium. The standard package includes minimal source code, while the premium package contains the complete FileX source code. Either package is shipped on a single CD. The exact content of the distribution CD depends on the target processor, development tools, and the FileX package. Following is a list of the important files common to most product distributions: readme_filex.txt This file contains specific information about the FileX port, including information about the target processor and the development tools. Express Logic, Inc. 26 FileX User Guide fx_api.h This C header file contains all system equates, data structures, and service prototypes. fx_port.h This C header file contains all development-tool-specific data definitions and structures. demo_filex.c This C file contains a small demo application. fx.a (or fx.lib) This is the binary version of the FileX C library. It is distributed with the standard package. i All files are in lower-case. This naming convention makes it easier to convert the commands to Linux (Unix) development platforms. FileX Installation Installation of FileX is straightforward. The following general instructions apply to virtually any installation. However, the readme_filex.txt file should be examined for changes specific to the actual development tool environment. Step 1: Step 2: 2: Step Backup the FileX distribution disk and store it in a safe location. Use the same directory in which you previously installed ThreadX on the host hard drive. All FileX names are unique and will not interfere with the previous ThreadX installation. Step 3: Copy all files from the FileX distribution disk into the directory specified in step 2. Step 4: If the standard package was purchased, installation is now complete. If the premium package was purchased, you must build the FileX run-time library. User Guide Installation and Use of FileX i 27 Application software needs access to the FileX library file (usually called usually fx.a or fx.lib) and the C include files fx_api.h and fx_port.h. This is accomplished either by setting the appropriate path for the development tools or by copying these files into the application development area. Using FileX Using FileX is easy. Basically, the application code must include fx_api.h during compilation and link with the FileX run-time library fx.a (or fx.lib). Of course, the ThreadX files, namely tx_api.h and tx.a (or tx.lib), are also required. Assuming you are already using ThreadX, there are four steps required to build a FileX application: Step 1: Include the fx_api.h file in all application files that use FileX services or data structures. Step 2: Add a call to fx_system_initialize at or near the beginning of tx_application_define. This is where the basic FileX system gets initialized. Step 3: Add one or more calls to fx_media_open to set up the FileX media. This call must be made from the context of an application thread. i Step 4: Remember that the fx_media_open call requires enough RAM to store data for one sector. Compile application source and link with the FileX and ThreadX run-time libraries, fx.a (or fx.lib) and tx.a (or tx.lib). The resulting image can be downloaded to the target and executed! Express Logic, Inc. 28 FileX User Guide Troubleshooting Each FileX port is delivered with a demonstration application. It is always a good idea to get the demonstration system running first—either on the target hardware or a specific demonstration environment. i See the readme_filex.txt file supplied with the distribution disk for specific details regarding the demonstration system. If the demonstration system does not work, try the following things to narrow the problem: 1. Determine how much of the demonstration is running. 2. Increase stack sizes (this is more important in actual application code than it is for the demonstration). 3. Ensure there is enough RAM for the 32KBytes default RAM disk size. The basic system will operate on much less RAM; however, as more of the RAM disk is used, problems will surface if there is not enough memory. 4. Temporarily bypass any recent changes to see if the problem disappears or changes. Such information should prove useful to Express Logic support engineers. Follow the procedures outlined in “Customer Support Center” on page 14 to send the information gathered from the troubleshooting steps. User Guide Installation and Use of FileX 29 Configuration Options There are several configuration options when building the FileX library and the application using FileX. The options below can be defined in the application source, on the command line, or within the fx_user.h include file. i Options defined in fx_user.h are applied only if the application and ThreadX library are built with FX_INCLUDE_USER_DEFINE_FILE defined. Review the readme_filex.txt file for additional options for your specific version of FileX. The following list describes each configuration option in detail: Define Meaning FX_DISABLE_ERROR_CHECKING Removes the basic FileX error checking API and results in improved performance (as much as 30%) and smaller code size. FX_MAX_LONG_NAME_LEN Specifies the maximum file name size for FileX. The default value is 33, but this can be overridden with a command-line define. Legal values range between 13 and 256. FX_MAX_SECTOR_CACHE Specifies the maximum number of logical sectors that can be cached by FileX. The actual number of sectors that can be cached is lesser of this constant and how many sectors can fit in the amount of memory supplied at fx_media_open. The default value is 16. All values must be a power of 2. Express Logic, Inc. 30 FileX User Guide Define Meaning FX_FAT_MAP_SIZE Specifies the number of sectors that can be represented in the FAT update map. The default value is 8, but this can be overridden with a commandline define. Larger values help reduce unneeded updates of secondary FAT sectors. FX_MAX_FAT_CACHE Specifies the number of entries in the internal FAT cache. The default value is 8, but this can be overridden with a command-line define. All values must be a power of 2. FX_FAULT_TOLERANT When defined, FileX immediately passes write requests of all system sectors (boot, FAT, and directory sectors) to the media's driver. This potentially decreases performance, but helps limit corruption to lost clusters. FX_FAULT_TOLERANT_DATA When defined, FileX immediately passes all file data write requests to the media's driver. This potentially decreases performance, but helps limit lost file data. FX_NO_LOCAL_PATH Removes local path logic from FileX, resulting in smaller code size. FX_NO_TIMER Eliminates the ThreadX timer setup to update the FileX system time and date. Doing so causes default time and date to be placed on all file operations. FX_UPDATE_RATE_IN_SECONDS Specifies rate at which system time in FileX is adjusted. By default, value is 10, specifying that the FileX system time is updated every 10 seconds. User Guide Installation and Use of FileX 31 Define Meaning FX_UPDATE_RATE_IN_TICKS Specifies the same rate as FX_UPDATE_RATE_IN_SECONDS (see above), except in terms of the underlying ThreadX timer frequency. The default is 1000, which assumes a 10ms ThreadX timer rate and a 10 second interval. FX_SINGLE_THREAD Eliminates ThreadX protection logic from the FileX source. It should be used if FileX is being used only from one thread or if FileX is being used without ThreadX. FileX Version ID The current version of FileX is available both to the user and the application software during run-time. The programmer can obtain the FileX version from examination of the readme_filex.txt file. In addition, this file also contains a version history of the corresponding port. Application software can obtain the FileX version by examining the global string _fx_version_id. Express Logic, Inc. 32 Installation and Use of FileX User Guide CHAPTER 33 Functional Components of FileX This chapter contains a description of the highperformance FileX embedded file system from a functional perspective. This includes the following: 1 1 Media Description 35 Logical Sectors 35 Media Boot Record 35 Jump Instruction 35 OEM Name 36 Bytes Per Sector 36 Sectors Per Cluster 36 Reserved Sectors 38 Number of FATs 38 Root Directory Size 38 Number of Sectors FAT-12 & FAT-16 38 Media Type 38 Sectors Per FAT 39 Sectors Per Track 39 Number of Heads 39 Hidden Sectors 39 Number of Sectors FAT-32 39 Sectors per FAT (FAT-32) 39 Root Directory Cluster 40 System Boot Code 40 Signature 0x55AA 40 File Allocation Table (FAT) 40 Internal Logical Cache 41 Write Protect 42 Free Sector Update 42 Media Control Block FX_MEDIA 42 Directory Description 43 Directory Name 43 Directory Filename Extension 44 Directory Attribute 44 User Guide 34 FileX User Guide Directory Time 45 Directory Date 45 Directory Starting Cluster 45 Directory File Size 46 Ordinal 47 Unicode Character 48 LFN Attributes 48 LFN Type 48 LFN Checksum 48 LFN Cluster 49 Root Directory 49 Subdirectories 49 Global Default Path 50 Local Default Path 50 1 1 User Guide File Description 51 File Allocation 51 File Access 51 File Control Block FX_FILE 53 System Information 53 System Date 53 System Time 54 Periodic Time Update 54 Functional Components of FileX 35 Media Description FileX is a high-performance embedded file system that conforms to the FAT file system format. FileX views the physical media as an array of logical sectors. How these sectors are mapped to the underlying physical media is determined by the I/O driver connected to the FileX media during the fx_media_open call. Logical Sectors The exact organization of the media’s logical sectors is determined by the contents of the physical media’s boot record. The general layout of the media’s logical sectors is defined in Figure 1 on page 36. FileX logical sectors start at logical sector 1, which points to the first reserved sector of the media. Reserved sectors are optional, but when in use they typically contain system information such as boot code. Media Boot Record The exact sector offset of the other areas in the logical sector view of the media are derived from the contents of the media boot record. The location of the boot record is typically at sector 0. However, if the media has hidden sectors, the offset to the boot sector must account for them (they are located immediately BEFORE the boot sector). Figure 2, “FileX Media Boot Record,” on page 37 describes the media’s boot record in more detail. Jump Instruction The jump instruction field is a three-byte field that represents an Intel x86 machine instruction for a processor jump. This is a legacy field in most situations. Express Logic, Inc. 36 FileX User Guide Boot Block logical sector 1 Reserved media_ptr->fx_media_reserved_sectors FAT Area media_ptr->fx_media_root_sector_start (In FAT32, Root Directory may not be located after FAT table) Root Directory media_ptr->fx_media_data_sector_start Subdirectory and File Area FIGURE 1. FileX Media Logical Sector View OEM Name The OEM name field is reserved for manufacturers to place their name or a name for the device. Bytes Per Sector The bytes per sector field in the media boot record defines how many bytes are in each sector—the fundamental element of the media. Sectors Per Cluster The sectors per cluster field in the media boot record defines the number of sectors assigned to a User Guide Functional Components of FileX 37 Number of Bytes Offset Field 0x00 Jump Instruction (e9,xx,xx or eb,xx,90) 3 0x03 OEM Name 8 0x0B Bytes Per Sector 2 0x0D Sectors Per Cluster 1 0x0E Number of Reserved Sectors 2 0x10 Number of FATs 1 0x11 Size of Root Directory 2 0x13 Number of Sectors FAT-12 & FAT-16 2 0x15 Media Type 1 0x16 Number of Sectors Per FAT 2 0x18 Sectors Per Track 2 0x1A Number of Heads 2 0x1C Number of Hidden Sectors 4 0x20 Number of Sectors - FAT-32 4 0x24 Sectors per FAT (FAT-32) 4 0x2C Root Directory Cluster 4 0x3E System Boot code 0x1FE 0x55AA 448 2 * Fields in bold are used by FileX FIGURE 2. FileX Media Boot Record Express Logic, Inc. 38 FileX User Guide cluster. The cluster is the fundamental allocation element in an FAT compatible file system. All file information and subdirectories are allocated from the media’s available clusters as determined by the File Allocation Table (FAT). Reserved Sectors The reserved sectors field in the media boot record defines the number of sectors reserved between the boot record and the first sector of the FAT area. This entry is zero in most cases. Number of FATs The number of FATs entry in the media boot record defines the number of FATs in the media. There must always be at least one FAT in a media. Additional FATs are merely duplicate copies of the primary (first) FAT and are typically used by diagnostic or recovery software. Root Directory Size The root directory size entry in the media boot record defines the fixed number of entries in the root directory of the media. This field is not applicable to subdirectories and the FAT-32 root directory because they are both allocated from the media’s clusters. Number of Sectors FAT-12 & FAT-16 The number of sectors field in the media boot record contains the total number of sectors in the media. If this field is zero, then the total number of sectors is contained in the number of sectors FAT-32 field located later in the boot record. Media Type The media type field is used to identify the type of media present to the device driver. This is a legacy field. User Guide Functional Components of FileX 39 Sectors Per FAT The sectors per FAT filed in the media boot record contains the number of sectors associated with each FAT in the FAT area. The number of FAT sectors must be large enough to account for the maximum possible number of clusters that can be allocated in the media. Sectors Per Track The sectors per track field in the media boot record defines the number of sectors per track. This is typically only pertinent to actual disk-type media. FLASH devices don’t use this mapping. Number of Heads The number of heads field in the media boot record defines the number of heads in the media. This is typically only pertinent to actual disk-type media. FLASH devices don’t use this mapping. Hidden Sectors The hidden sectors field in the media boot record defines the number of sectors before the boot record. This field is maintained in the FX_MEDIA control block and must be accounted for in FileX I/O drivers in all read and write requests made by FileX. Number of Sectors FAT-32 The number of sectors field in the media boot record is valid only if the two-byte number of sectors field is zero. In such a case, this four-byte field contains the number of sectors in the media. Sectors per FAT (FAT-32) The sectors per FAT (FAT-32) field is valid only in FAT-32 format and contains the number of sectors allocated for each FAT of the media. Express Logic, Inc. 40 FileX User Guide Root Directory Cluster The root directory cluster field is valid only in FAT-32 format and contains the starting cluster number of the root directory. System Boot Code The system boot code field is an area to store a small portion of boot code. In most devices today, this is a legacy field. Signature 0x55AA The signature field is a data pattern used to identify the boot record. If this field is not present, the boot record is not valid. File Allocation Table (FAT) The File Allocation Table (FAT) starts after the reserved sectors in the media. The FAT area is basically an array of 12-bit, 16-bit, or 32-bit entries that determine if that cluster is allocated or part of a chain of clusters comprising a subdirectory or a file. The size of each FAT entry is determined by the number of clusters that need to be represented. If the number of clusters (derived from the total sectors divided by the sectors per cluster) is less than 4,086, 12-bit FAT entries are used. If the total number of clusters is greater than 4,086 and less than or equal to 65,525, 16-bit FAT entries are used. Otherwise, if the total number of clusters is greater than 65,525, 32-bit FAT entries are used. FAT Entry Contents The first two entries in the FAT table are not used and typically have the following contents: FAT Entry 12-bit FAT 16-bit FAT 32-bit FAT Entry 0: 0x0F0 0x00F0 0x000000F0 Entry 1: 0xFFF 0xFFFF 0x0FFFFFFF User Guide Functional Components of FileX 41 FAT entry number 2 represents the first cluster in the media’s data area. The contents of each cluster entry determines whether or not it is free or part of a linked list of clusters allocated for a file or a subdirectory. If the cluster entry contains another valid cluster entry, then the cluster is allocated and its value points to the next cluster allocated in the cluster chain. Possible cluster entries are defined as follows: Meaning 12-bit FAT 16-bit FAT 32-bit FAT Free Cluster 0x000 0x0000 0x00000000 Not Used 0x001 0x0001 0x00000001 Reserved 0xFF0-FF6 0xFFF0-FFF6 0x0FFFFFF0-6 Bad Cluster 0xFF7 0xFFF7 0x0FFFFFF7 Last Cluster 0xFF8-FFF 0xFFF8-FFFF 0x0FFFFFF8-F Cluster Link 0x002-0xFEF 0x0002-FFEF 0x2-0x0FFFFFEF The last cluster in an allocated chain of clusters contains the Last Cluster value (defined above). The first cluster number is found in the file or subdirectory’s directory entry. Internal Logical Cache FileX maintains a most-recently-used logical sector cache for each opened media. The maximum size of the logical sector cache is defined by the constant FX_MAX_SECTOR_CACHE and is located in fx_api.h. This is the first factor determining the size of the internal logical sector cache. The other factor that determines the size of the logical sector cache is the amount of memory supplied to the fx_media_open call by the application. There must be enough memory for at least one logical sector. If more than FX_MAX_SECTOR_CACHE logical sectors are Express Logic, Inc. 42 FileX User Guide required, the constant must be changed in fx_api.h and the entire FileX library must be rebuilt. i Each opened media in FileX may have a different cache size depending on the memory supplied during the open call. Write Protect FileX provides the application driver the ability to dynamically set write protection on the media. If write protection is required, the driver sets to FX_TRUE the fx_media_driver_write_protect field in the associated FX_MEDIA structure. When set, all attempts by the application to modify the media are rejected as well as attempts to open files for writing. The driver may also enable write protection by clearing this field. Free Sector Update FileX provides a mechanism to inform the application driver when sectors are no longer in use. This is especially useful for FLASH memory managers that manage all logical sectors being used by FileX. If notification of free sectors is required, the application driver sets to FX_TRUE the fx_media_driver_free_sector_update field in the associated FX_MEDIA structure. This assignment is typically done during driver initialization. Setting this field, FileX makes a FX_DRIVER_RELEASE_SECTORS driver call indicating when one or more consecutive sectors become free. Media Control Block FX_MEDIA The characteristics of each open media in FileX are contained in the media control block. This structure is defined in the fx_api.h file. User Guide Functional Components of FileX 43 The media control block can be located anywhere in memory, but it is most common to make the control block a global structure by defining it outside the scope of any function. Locating the control block in other areas requires a bit more care, just like all dynamically allocated memory. If a control block is allocated within a C function, the memory associated with it is part of the calling thread’s stack. ! In general, avoid using local storage for control blocks because after the function returns, all of its local variable stack space is released—regardless of whether it is still in use! Directory Description FileX supports both 8.3 and Windows Long File Name (LFN) name formats. In addition to the name, each directory entry contains the entry’s attributes, the last modified time and date, the starting cluster index, and the size in bytes of the entry. Figure 3 on page 46 shows the contents and size of a FileX directory entry. Directory Name FileX supports file names ranging in size from 8 to 255 characters. Standard eight-character file names are represented in a single directory entry on the media. They are left justified in the directory name field and are blank padded. In addition, the ASCII characters that comprise the name are always capitalized. Long File Names (LFNs) are represented by consecutive directory entries, in reverse order, followed immediately by an 8.3 standard file name. Express Logic, Inc. 44 FileX User Guide The created 8.3 name contains all the meaningful directory information associated with the name. Figure 4 shows the contents of the directory entries used to hold the Long File Name information, and Figure 5 shows an example of a 39-character LFN that requires a total of four directory entries. i The constant FX_MAX_LONG_NAME_LEN, defined in fx_api.h, contains the maximum length supported by FileX. Directory Filename Extension For standard 8.3 file names, FileX also supports the optional three-character directory filename extension. Just like the eight-character file name, filename extensions are left justified in the directory filename extension field, blank padded, and always capitalized. Directory Attribute The one-byte directory attribute field entry contains a series of bits that specify various properties of the directory entry. Directory attribute definitions are as follows: User Guide Functional Components of FileX Attribute Bit 45 Meaning 0x01 Entry is read-only. 0x02 Entry is hidden. 0x04 Entry is a system entry. 0x08 Entry is a volume label 0x10 Entry is a directory. 0x20 Entry has been modified. Because all the attribute bits are mutually exclusive, there may be more than one attribute bit set at a time. Directory Time The two-byte directory time field contains the hours, minutes, and seconds of the last change to the specified directory entry. Bits 15 through 11 contain the hours, bits 10 though 5 contain the minutes, and bits 4 though 0 contain the half seconds. Actual seconds are divided by two before being written into this field. Directory Date The two-byte directory date field contains the year (offset from 1980), month, and day of the last change to the specified directory entry. Bits 15 through 9 contain the year offset, bits 8 through 5 contain the month offset, and bits 4 through 0 contain the day. Directory Starting Cluster The two-byte directory starting cluster field contains the first cluster number allocated to the entry (subdirectory or file). i Note that FileX creates new files without an initial cluster (starting cluster field equal to zero) to allow users to optionally allocate a contiguous number of clusters for a newly created file. Express Logic, Inc. 46 FileX User Guide Directory File Size The four-byte directory file size field contains the number of bytes in the file. If the entry is really a subdirectory, the size field is zero. Offset Field Number of Bytes 0x00 Directory Entry Name 8 0x08 Directory Extension 3 0x0B Attributes 1 0xC NT (introduced by the long file name format and is reserved for NT [always 0]) 1 0xD Created Time in milliseconds ( introduced by the long file name format and represents the number of milliseconds when the file was created.) 1 0xE Created Time in hours & minutes (introduced by the long file name format and represents the hour and minute the file was created ) 2 0x10 Created Date (introduced by the long file name format and represents the date the file was created.) 2 0x12 Last Accessed Date ( introduced by the long file name format and represents the date the file was last accessed.) 2 0x14 Starting Cluster (Upper 16 bits FAT-32 only) 2 0x16 Modified Time 2 0x18 Modified Date 2 0x1A Starting Cluster (Lower 16 bits FAT-12 & FAT-16) 2 0x1C File Size 4 FIGURE 3. FileX 8.3 Directory Entry User Guide Functional Components of FileX Offset 47 Number of Bytes Field 0x00 Ordinal Field 1 0x01 Unicode Character 1 2 0x03 Unicode Character 2 2 0x05 Unicode Character 3 2 0x07 Unicode Character 4 2 0x09 Unicode Character 5 2 0x0B LFN Attributes 1 0x0C LFN Type (Reserved always 0) 1 0x0D LFN Checksum 1 0x0E Unicode Character 6 2 0x10 Unicode Character 7 2 0x12 Unicode Character 8 2 0x14 Unicode Character 9 2 0x16 Unicode Character 10 2 0x18 Unicode Character 11 2 0x1A LFN Cluster (unused always 0) 2 0x1C Unicode Character 12 2 0x1E Unicode Character 13 2 FIGURE 4. Long File Name (LFN) Directory Entry Ordinal The one-byte ordinal field that specifies the number of the LFN entry. Because LFN entries are positioned Express Logic, Inc. 48 FileX User Guide in reverse order, the ordinal values of the LFN directory entries comprising a single LFN decrease by one. In addition, the ordinal value of the LFN directly before the 8.3 file name must be one. Unicode Character The two-byte Unicode Character fields are designed to support characters from many different languages. Standard ASCII characters are represented with the ASCII character stored in the first byte of the Unicode character followed by a space character. LFN Attributes The one-byte LFN Attributes field contains attributes that identify the directory entry as an LFN directory entry. This is accomplished by having the read-only, system, hidden, and volume attributes all set. LFN Type The one-byte LFN Type field is reserved and is always 0. LFN Checksum The one-byte LFN Checksum field represents a checksum of the 11 characters of the associated FAT 8.3 file name. This checksum is stored in each LFN entry to help ensure the LFN entry corresponds to the appropriate 8.3 file name. User Guide Functional Components of FileX LFN Cluster 49 The two-byte LFN Cluster field is unused and is always 0. Entry Meaning 1 LFN Directory Entry 3 2 LFN Directory Entry 2 3 LFN Directory Entry 1 4 8.3 Directory Entry (ttttt~n.xx) FIGURE 5. Directory Entries Comprising a 39Character LFN Root Directory In FAT 12- and 16-bit formats, the root directory is located immediately after all the FAT sectors in the media and can be located by examining the fx_media_root_sector_start in an opened FX_MEDIA control block. The size of the root directory, in terms of number of directory entries (each 32 bytes in size), is determined by the corresponding entry in the media’s boot record. The root directory in FAT-32 can be located anywhere in the available clusters. Its location and size are determined from the boot record when the media is opened. After the media is opened, the fx_media_root_sector_start field can be used to find the starting cluster of the FAT-32 root directory. Subdirectories There is any number of subdirectories in an FAT system. The name of the subdirectory resides in a directory entry just like a file name. However, the Express Logic, Inc. 50 FileX User Guide directory attribute specification (0x10) is set to indicate the entry is a subdirectory and the file size is always zero. Figure 6, “FileX FAT-16 Subdirectory,” on page 52 shows what a typical subdirectory structure looks like for a new single-cluster subdirectory named SAMPLE.DIR with one file called FILE.TXT. In most ways, subdirectories are very similar to file entries. The first cluster field points to the first cluster of a linked list of clusters. When a subdirectory is created, the first two directory entries contain default directories, namely the “.” directory and the “..” directory. The “.” directory points to the subdirectory itself, while the “..” directory points to the previous or parent directory. Global Default Path FileX provides a global default path for the media. The default path is used in any file or directory service that does not explicitly specify a full path. Initially, the global default directory is set to the media’s root directory. This may be changed by the application by calling fx_directory_default_set. The current default path for the media may be examined by calling fx_directory_default_get. This routine provides a string pointer to the default path string maintained inside of the FX_MEDIA control block. Local Default Path FileX also provides a thread-specific default path that allows different threads to have unique paths without conflict. The FX_LOCAL_PATH structure is supplied by the application during calls to fx_directory_local_path_set and User Guide Functional Components of FileX 51 fx_directory_local_path_restore to modify the local path for the calling thread. If a local path is present, the local path takes precedence over the global default media path. If the local path is not setup or if it is cleared with the fx_directory_local_path_clear service, the media’s global default path is used once again. File Description FileX supports standard 8.3 character and long file names with three-character extensions. In addition to the ASCII name, each file entry contains the entry’s attributes, the last modified time and date, the starting cluster index, and the size in bytes of the entry. File Allocation FileX supports the standard cluster allocation scheme of the FAT format. In addition, FileX supports pre-cluster allocation of contiguous clusters. To accommodate this, each FileX file is created with no allocated clusters. Clusters are allocated on subsequent write requests or on fx_file_allocate requests to pre-allocate contiguous clusters. Figure 7, “FileX FAT-16 File Example,” on page 55 shows a file named FILE.TXT with two sequential clusters allocated starting at cluster 101, a size of 26, and the alphabet as the data in the file’s first data cluster number 101. File Access A FileX file may be opened multiple times simultaneously for read access. However, a file can only be opened once for writing. The information Express Logic, Inc. 52 FileX User Guide used to support the file access is contained in the FX_FILE file control block. Directory Entry Structure SAMPLE__ DIR 0x10 Reserved Time Date 100 Size (0) FAT Table Media Data Area 100 Cluster 100 FFFF (array of directory entries) . .. FILE.TXT directory entries 3+ are all zeros 0 1 2 3 4 ... n FIGURE 6. FileX FAT-16 Subdirectory i Note that the media driver can dynamically set write protection. If this happens all write requests are rejected as well as attempts to open a file for writing. User Guide Functional Components of FileX File Control Block FX_FILE 53 The characteristics of each open file are maintained in the file control block. This structure is defined in the fx_api.h file. The file control block can be located anywhere in memory, but it is most common to make the control block a global structure by defining it outside the scope of any function. Locating the control block in other areas requires a bit more care, just like all dynamically allocated memory. If a control block is allocated within a C function, the memory associated with it is part of the calling thread’s stack. ! In general, using local storage for control blocks should be avoided because after the function returns, all of its local variable stack space is released— regardless of whether it is still being used! System Information FileX system information consists of keeping track of the open media instances and maintaining the global system time and date. By default, the system date and time are set to the last release date of FileX. To have accurate system date and time, the application must call fx_system_time_set and fx_system_date_set during initialization. System Date The FileX system date is maintained in the global _fx_system_date variable. Bits 15 through 9 contain the year offset from 1980, bits 8 through 5 contain the month offset, and bits 4 through 0 contain the day. Express Logic, Inc. 54 FileX User Guide System Time The FileX system time is maintained in the global _fx_system_time variable. Bits 15 through 11 contain the hours, bits 10 though 5 contain the minutes, and bits 4 though 0 contain the half seconds. Periodic Time Update During system initialization, FileX creates a ThreadX application timer to periodically update the system date and time. The rate at which the system date and time update is determined by two constants used by the _fx_system_initialize function. The constants FX_UPDATE_RATE_IN_SECONDS and FX_UPDATE_RATE_IN_TICKS represent the same period of time. The constant FX_UPDATE_RATE_IN_TICKS is the number of ThreadX timer ticks that represents the number of seconds specified by the constant FX_UPDATE_RATE_IN_SECONDS. The FX_UPDATE_RATE_IN_SECONDS constant specifies how many seconds between each FileX time update. Therefore, the internal FileX time increments in intervals of FX_UPDATE_RATE_IN_SECONDS. These constants may be supplied during compilation of fx_system_initialize.c or the user may modify the defaults found in the fx_port.h file of the FileX release. The periodic FileX timer is used only for updating the global system date and time, which is used solely for file time-stamping. If time-stamping is not necessary, simply define FX_NO_TIMER when compiling fx_system_initialize.c to eliminate the creation of the FileX periodic timer. User Guide Functional Components of FileX 55 Directory Entry Structure FILE____ TXT 0x20 Reserved Time Date 101 Size=26 FAT Table Media Data Area 101 102 102 FFFF Cluster 101 abcdefghijklmnop qrstuvwxyz FIGURE 7. FileX FAT-16 File Example Express Logic, Inc. 56 Functional Components of FileX User Guide CHAPTER 4 Description of FileX Services This chapter contains a description of all FileX services in alphabetic order. Service names are designed so all similar services are grouped together. For example, all file services are found at the beginning of this chapter. fx_directory_attributes_read Reads directory attributes 62 fx_directory_attributes_set Sets directory attributes 64 fx_directory_create Creates subdirectory 66 fx_directory_default_get Gets last default directory 68 fx_directory_default_set Sets default directory 70 fx_directory_delete Deletes subdirectory 72 fx_directory_first_entry_find Gets first directory entry 74 fx_directory_first_full_entry_find Gets first directory entry with full information 76 fx_directory_information_get Gets directory entry information 80 fx_directory_local_path_clear Clears default local path 82 fx_directory_local_path_get Gets the current local path string 84 fx_directory_local_path_restore Restores previous local path 86 User Guide 58 FileX User Guide fx_directory_local_path_set Sets up a thread-specific local path 88 fx_directory_long_name_get Gets long name from short name 90 fx_directory_name_test Tests for directory 92 fx_directory_next_entry_find Picks up next directory entry 94 fx_directory_next_full_entry_find Gets next directory entry with full information 96 fx_directory_rename Renames directory 100 fx_directory_short_name_get Gets short name from a long name 102 fx_file_allocate Allocates space for a file 104 fx_file_attributes_read Reads file attributes 106 fx_file_attributes_set Sets file attributes 108 fx_file_best_effort_allocate Best effort to allocate space for a file 110 fx_file_close Closes file 112 fx_file_create Creates file 114 fx_file_date_time_set Sets file date and time 116 fx_file_delete Deletes file 118 fx_file_open Opens file 120 fx_file_read Reads bytes from file 122 fx_file_relative_seek Positions to a relative byte offset 124 User Guide 59 fx_file_rename Renames file 126 fx_file_seek Positions to byte offset 128 fx_file_truncate Truncates file 130 fx_file_truncate_release Truncates file and releases cluster(s) 132 fx_file_write Writes bytes to file 134 fx_media_abort Aborts media activities 136 fx_media_cache_invalidate Invalidates logical sector cache 138 fx_media_check Checks media for errors 140 fx_media_close Closes media 144 fx_media_flush Flushes data to physical media 146 fx_media_format Formats media 148 fx_media_open Opens media for file access 152 fx_media_read Reads logical sector from media 154 fx_media_space_available Returns available media space 156 fx_media_volume_get Gets media volume name 158 fx_media_volume_set Sets media volume name 160 fx_media_write Writes logical sector 162 fx_system_date_get Gets file system date 164 Express Logic, Inc. 60 FileX User Guide fx_system_date_set Sets system date 166 fx_system_initialize Initializes entire file system 168 fx_system_time_get Gets current system time 170 fx_system_time_set Sets current system time 172 fx_unicode_directory_create Creates a Unicode directory 174 fx_unicode_file_create Creates a Unicode file 176 fx_unicode_length_get Gets length of Unicode name 178 fx_unicode_name_get Gets Unicode name from short name 180 fx_unicode_short_name_get Gets short name from Unicode name 182 User Guide 61 User Guide 62 FileX User Guide fx_directory_attributes_read Reads directory attributes Directory Attribute Read Prototype UINT fx_directory_attributes_read(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes_ptr); Description This service reads the directory’s attributes from the specified media. Input Parameters media_ptr directory_name attributes_ptr Pointer to a media control block. Pointer to the name of the requested directory (directory path is optional). Pointer to the destination for the directory’s attributes to be placed. The directory attributes are returned in a bit-map format with the following possible settings: FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_VOLUME FX_DIRECTORY FX_ARCHIVE (0x01) (0x02) (0x04) (0x08) (0x10) (0x20) Return Values FX_SUCCESS (0x00) Successful directory attributes read. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX _NOT FOUND (0x04) Specified directory was not found in the media. FX_NOT_DIRECTORY (0x0E) Entry is not a directory. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide Directory Attribute Read 63 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Retrieve the attributes of "mydir" from the specified media. */ status = fx_directory_attributes_read(&my_media, "mydir", &attributes); /* If status equals FX_SUCCESS, "attributes" contains the directory attributes of "mydir". */ See Also fx_directory_attributes_set, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 64 FileX User Guide fx_directory_attributes_set Sets directory attributes Directory Attribute Set Prototype UINT fx_directory_attributes_set(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes); Description This service sets the directory’s attributes to those specified by the caller. ! This application is only allowed to modify a subset of the directory’s attributes with this service. Any attempt to set additional attributes will result in an error. Input Parameters media_ptr directory_name attributes Pointer to a media control block. Pointer to the name of the requested directory (directory path is optional). The new attributes to this directory. The valid directory attributes are defined as follows: FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_ARCHIVE (0x01) (0x02) (0x04) (0x20) Return Values FX_SUCCESS (0x00) Successful directory attribute set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX _NOT FOUND (0x04) Specified directory was not found in the media. FX_NOT_DIRECTORY (0x0E) Entry is not a directory. FX_PTR_ERROR (0x18) Invalid media pointer. FX_INVALID_ATTR (0x19) Invalid attributes selected. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide Directory Attribute Set 65 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Set the attributes of "mydir" to read-only. */ status = fx_directory_attributes_set(&my_media, "mydir", FX_READ_ONLY); /* If status equals FX_SUCCESS, the directory "mydir" is read-only. */ See Also fx_directory_attributes_read, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 66 FileX User Guide fx_directory_create Creates subdirectory Directory Creation Prototype UINT fx_directory_create(FX_MEDIA *media_ptr, CHAR *directory_name) Description This service creates a subdirectory in the current default directory or in the path supplied in the directory name. Unlike the root directory, subdirectories to not have a limit on the number of files they can hold. The root directory can only hold the number of entries determined by the boot record. Input Parameters media_ptr directory_name Pointer to a media control block. Pointer to the name of the directory to create (directory path is optional). Return Values FX_SUCCESS (0x00) Successful directory create. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_ALREADY_CREATED (0x0B) Specified directory already exists. FX_NO_MORE_SPACE (0x0A) No more clusters available in the media for the new directory entry. FX_INVALID_NAME (0x0C) Specified name is not valid. FX_INVALID_PATH (0x0D) Specified path is not valid. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide Directory Creation 67 Example FX_MEDIA UINT my_media; status; /* Create a subdirectory called "temp" in the current default directory. */ status = fx_directory_create(&my_media, "temp"); /* If status equals FX_SUCCESS, the new subdirectory "temp" has been created. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find,fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 68 FileX User Guide fx_directory_default_get Gets last default directory G et Last Default Directory Prototype UINT fx_directory_default_get(FX_MEDIA *media_ptr, CHAR *return_path_name) Description This service returns the pointer to the path last set by fx_directory_default_set. If the default directory has not been set or if the current default directory is the root directory, a value of FX_NULL is returned. i The default size of the internal path string is 256 characters; it can be changed by modifying FX_MAXIMUM_PATH in fx_api.h and rebuilding the entire FileX library. The character string path is maintained for the application and is not used internally by FileX. Input Parameters media_ptr return_path_name Pointer to a media control block. Pointer to the destination for the last default directory string. A value of FX_NULL is returned if the current setting of the default directory is the root. When the media is opened, root is the default. Return Values FX_SUCCESS (0x00) Successful default directory get. FX_PTR_ERROR (0x18) Invalid media or destination pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. Allowed From Threads User Guide Get Last Default Directory 69 Example FX_MEDIA CHAR UINT my_media; *current_default_dir; status; /* Retrieve the current default directory. */ status = fx_directory_default_get(&my_media, ¤t_default_dir); /* If status equals FX_SUCCESS, "current_default_dir" contains a pointer to the current default directory). */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 70 FileX User Guide fx_directory_default_set Sets default directory Set Directory Default Prototype UINT fx_directory_default_set(FX_MEDIA *media_ptr, CHAR *new_path_name) Description This service sets the default directory of the media. If a value of FX_NULL is supplied, the default directory is set to the media’s root directory. All subsequent file operations that do not explicitly specify a path will default to this directory. i The default size of the internal path string is 256 characters; it can be changed by modifying FX_MAXIMUM_PATH in fx_api.h and rebuilding the entire FileX library. The character string path is maintained for the application and is not used internally by FileX. i For names supplied by the application, FileX supports both backslash (\) and forward slash (/) characters to separate directories, subdirectories, and file names. However, FileX only uses the backslash character in paths returned to the application. Input Parameters media_ptr new_path_name Pointer to a media control block. Pointer to new default directory name. If a value of FX_NULL is supplied, the default directory of the media is set to the media’s root directory. Return Values FX_SUCCESS (0x00) Successful default directory set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_INVALID_PATH (0x0D) New directory could not be found. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Error doing media I/O. User Guide Set Directory Default 71 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Set the default directory to \abc\def\ghi. */ status = fx_directory_default_set(&my_media, "\\abc\\def\\ghi"); /* If status equals FX_SUCCESS, the default directory for this media is \abc\def\ghi. All subsequent file operations that do not explicitly specify a path will default to this directory. Note that the character "\" serves as an escape character in a string. To represent the character "\", use the construct "\\". This is done because of the C language - only one "\" is really present in the string. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 72 FileX User Guide fx_directory_delete Deletes subdirectory Directory Deletion Prototype UINT fx_directory_delete(FX_MEDIA *media_ptr, CHAR *directory_name) Description This service deletes the specified directory. Note that the directory must be empty to delete it. Input Parameters media_ptr directory_name Pointer to a media control block. Pointer to name of directory to delete (directory path is optional). Return Values FX_SUCCESS (0x00) Successful directory delete. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified directory was not found. FX_DIR_NOT_EMPTY (0x10) Specified directory is not empty. FX_INVALID_NAME (0x0C) Specified directory is not valid. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide Directory Deletion 73 Example FX_MEDIA UINT my_media; status; /* Delete the subdirectory "abc." */ status = fx_directory_delete(&my_media, "abc"); /* If status equals FX_SUCCESS, the subdirectory "abc" was deleted. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 74 FileX User Guide fx_directory_first_entry_find Gets first directory entry Find First Directory Entry Prototype UINT fx_directory_first_entry_find(FX_MEDIA *media_ptr, CHAR *return_entry_name) Description This service retrieves the first entry name in the default directory and copies it to the specified destination. ! ! The specified destination must be large enough to hold the maximum sized FileX name, as defined by FX_MAX_LONG_NAME_LEN If using a non-local path, it is important to prevent (with a ThreadX semaphore, mutex, or priority level change) other application threads from changing this directory while a directory traversal is taking place. Otherwise, invalid results may be obtained. Input Parameters media_ptr return_entry_name Pointer to a media control block. Pointer to destination for the first entry name in the default directory. Return Values FX_SUCCESS (0x00) Successful first directory entry find. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_NO_MORE_ENTRIES (0x0F) No more entries in this directory. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Find First Directory Entry 75 Example FX_MEDIA UINT CHAR my_media; status; entry[12]; /* Retrieve the first directory entry in the current directory. */ status = fx_directory_first_entry_find(&my_media, entry); /* If status equals FX_SUCCESS, the entry in the directory is the "entry" string. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 76 FileX User Guide fx_directory_first_full_entry_find Gets first directory entry with full information Find First FullDirectory Entry Prototype UINT fx_directory_first_full_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second); Description This service retrieves the first entry name in the default directory and copies it to the specified destination. It also returns full information about the entry as specified by the additional input parameters. ! ! The specified destination must be large enough to hold the maximum sized FileX name, as defined by FX_MAX_LONG_NAME_LEN If using a non-local path, it is important to prevent (with a ThreadX semaphore, mutex, or priority level change) other application threads from changing this directory while a directory traversal is taking place. Otherwise, invalid results may be obtained. Input Parameters media_ptr directory_name attributes Pointer to a media control block. Pointer to the destination for the name of a directory entry. Must be at least as big as FX_MAX_LONG_NAME_LEN. If non-null, pointer to the destination for the entry’s attributes to be placed. The attributes are returned in a bit-map format with the following possible settings: FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_VOLUME FX_DIRECTORY FX_ARCHIVE User Guide (0x01) (0x02) (0x04) (0x08) (0x10) (0x20) Find First Full Directory Entry size year month day hour minute second 77 If non-null, pointer to the destination for the entry’s size in bytes. If non-null, pointer to the destination for the entry’s year of modification. If non-null, pointer to the destination for the entry’s month of modification. If non-null, pointer to the destination for the entry’s day of modification. If non-null, pointer to the destination for the entry’s hour of modification. If non-null, pointer to the destination for the entry’s minute of modification. If non-null, pointer to the destination for the entry’s second of modification. Return Values FX_SUCCESS (0x00) Successful directory first entry find. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NO_MORE_ENTRIES (0x0F) No more entries in this directory. FX_PTR_ERROR (0x18) Invalid media pointer or all input parameters are NULL. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Express Logic, Inc. 78 FileX User Guide Example FX_MEDIA UINT CHAR UINT ULONG UINT UINT UINT UINT UINT UINT my_media; status; entry_name[FX_MAX_LONG_NAME_LEN]; attributes; size; year; month; day; hour; minute; second; /* Get the first directory entry in the default directory with full information. */ status = fx_directory_first_full_entry_find(&my_media, entry_name, &attributes, &size, &year, &month, &day, &hour, &minute, &second); /* If status equals FX_SUCCESS, the entry’s information is in the local variables. */ See Also fx_directory_attributes_read, fx_directory_attributes_set, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get User Guide 79 Find First Full Directory Entry User Guide 80 FileX User Guide fx_directory_information_get Gets directory entry information Directory Inform ation G et Prototype UINT fx_directory_information_get(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second) Description This service retrieves a variety of information about the specified directory entry. If any field is FX_NULL, it is not updated. Input Parameters media_ptr directory_name attributes size year month day hour minute second Pointer to a media control block. Pointer to name of the directory entry. Pointer to the destination for the attributes. Pointer to the destination for the size. Pointer to the destination for the year. Pointer to the destination for the month. Pointer to the destination for the day. Pointer to the destination for the hour. Pointer to the destination for the minute. Pointer to the destination for the second. Return Values FX_SUCCESS (0x00) Successful default directory information get. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Directory entry could not be found. FX_PTR_ERROR (0x18) Invalid media pointer or all input parameters are NULL. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide Directory Information Get 81 Allowed From Threads Example FX_MEDIA UINT UINT ULONG my_media; status, attributes, year, month, day; hour, minute, second; size; /* Retrieve information about the directory entry "myfile.txt".*/ status = fx_directory_information_get(&my_media, "myfile.txt", &attributes, &size, &year, &month, &day, &hour, &minute, &second); /* If status equals FX_SUCCESS, the directory entry information is available in the local variables. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 82 FileX User Guide fx_directory_local_path_clear Clears default local path Clear Directory Default LocalPath Prototype UINT fx_directory_local_path_clear(FX_MEDIA *media_ptr) Description This service clears the previous local path set up for the calling thread. Input Parameters media_ptr Pointer to a previously opened media. Return Values FX_SUCCESS (0x00) Successful local path clear. FX_MEDIA_NOT_OPEN (0x11) Specified media is not currently open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Clear the previously setup local path for this media. */ status = fx_directory_local_path_clear(&my_media); /* If status equals FX_SUCCESS the local path is cleared. */ User Guide Clear Directory Default Local Path 83 See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 84 FileX User Guide fx_directory_local_path_get Gets the current local path string G et Directory LocalPath String Prototype UINT fx_directory_local_path_get(FX_MEDIA *media_ptr, CHAR *return_path_name) Description This service returns the local path pointer of the specified media. If there is no local path set, a NULL is returned to the caller. Input Parameters media_ptr return_path_name Pointer to a media control block. Pointer to the destination string pointer for the local path string to be stored. Return Values FX_SUCCESS (0x00) Successful local path get. FX_MEDIA_NOT_OPEN (0x11) Specified media is not currently open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. Allowed From Threads User Guide Get Directory Local Path String 85 Example FX_MEDIA CHAR UINT my_media; *my_path; status; /* Retrieve the current local path string. */ status = fx_directory_local_path_get(&my_media, &my_path); /* If status equals FX_SUCCESS, "my_path" points to the local path string. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 86 FileX User Guide fx_directory_local_path_restore Restores previous local path Restore Directory LocalPath Prototype UINT fx_directory_local_path_restore(FX_MEDIA *media_ptr, FX_LOCAL_PATH *local_path_ptr) Description This service restores a previously set local path. The directory search position made on this local path is also restored, which makes this routine useful in recursive directory traversals by the application. i Each local path contains a local path string of FX_MAXIMUM_PATH in size, which by default is 256 characters. This internal path string is not used by FileX and is provided only for the application’s use. If FX_LOCAL_PATH is going to be declared as a local variable, users should beware of the stack growing by the size of this structure. Users are welcome to reduce the size of FX_MAXIMUM_PATH and rebuild the FileX library source. Input Parameters media_ptr local_path_ptr Pointer to a media control block. Pointer to the previously set local path. It’s very important to ensure that this pointer does indeed point to a previously used and still intact local path. Return Values FX_SUCCESS (0x00) Successful local path restore. FX_MEDIA_NOT_OPEN (0x11) Specified media is not currently open. FX_PTR_ERROR (0x18) Invalid media or local path pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. Allowed From Threads User Guide Restore Directory Local Path 87 Example FX_MEDIA FX_LOCAL_PATH UINT my_media; my_previous_local_path; status; /* Restore the previous local path. */ status = fx_directory_local_path_restore(&my_media, &my_previous_local_path); /* If status equals FX_SUCCESS, the previous local path has been restored. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 88 FileX User Guide fx_directory_local_path_set Sets up a thread-specific local path Set Directory LocalPath Prototype UINT fx_directory_local_path_set(FX_MEDIA *media_ptr, FX_LOCAL_PATH *local_path_ptr, CHAR *new_path_name) Description This service sets up a thread-specific path as specified by the new_path_string. After successful completion of this routine, the local path information stored in local_path_ptr will take precedence over the global media path for all file and directory operations made by this thread. This will have no impact on any other thread in the system i The default size of the local path string is 256 characters; it can be changed by modifying FX_MAXIMUM_PATH in fx_api.h and rebuilding the entire FileX library. The character string path is maintained for the application and is not used internally by FileX. i For names supplied by the application, FileX supports both backslash (\) and forward slash (/) characters to separate directories, subdirectories, and file names. However, FileX only uses the backslash character in paths returned to the application. Input Parameters media_ptr local_path_ptr new_path_name Pointer to the previously opened media. Destination for holding the thread-specific local path information. The address of this structure may be supplied to the local path restore function in the future. Specifies the local path to setup. Return Values FX_SUCCESS (0x00) Successful default directory set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_INVALID_PATH (0x0D) New directory could not be found. FX_PTR_ERROR (0x18) Invalid media pointer. User Guide Set Directory Local Path 89 FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Error doing media I/O. Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Set the local path to \abc\def\ghi. */ status = fx_directory_local_path_set(&my_media, "\\abc\\def\\ghi"); /* If status equals FX_SUCCESS, the default directory for this thread is \abc\def\ghi. All subsequent file operations that do not explicitly specify a path will default to this directory. Note that the character "\" serves as an escape character in a string. To represent the character "\", use the construct "\\".*/ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 90 FileX User Guide fx_directory_long_name_get Gets long name from short name G et Directory Long Nam e Prototype UINT fx_directory_long_name_get(FX_MEDIA *media_ptr, CHAR *short_name, CHAR *long_name); Description This service retrieves the long name (if any) associated with the supplied short (8.3 format) name. The short name can be either a file name or a directory name. Input Parameters media_ptr short_name long_name Pointer to media control block. Pointer to source short name (8.3 format). Pointer to destination for the long name. If there is no long name, the short name is returned. Note that the destination for the long name must be large enough to hold FX_MAX_LONG_NAME_LEN characters. Return Values FX_SUCCESS (0x00) Successful long name get. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Short name was not found. FX_PTR_ERROR (0x18) Invalid media or name pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Get Directory Long Name 91 Example FX_MEDIA UCHAR my_media; my_long_name[FX_MAX_LONG_NAME_LEN]; /* Retrieve the long name associated with "TEXT~01.TXT". */ status = fx_directory_long_name_get(&my_media, "TEXT~01.TXT", my_long_name); /* If status is FX_SUCCESS the long name was successfully retrieved. */ See Also fx_directory_attributes_read, fx_directory_attributes_set, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 92 FileX User Guide fx_directory_name_test Tests for directory Directory Nam e Test Prototype UINT fx_directory_name_test(FX_MEDIA *media_ptr, CHAR *directory_name) Description This service tests whether or not the supplied name is a directory. If so, a FX_SUCCESS is returned. Input Parameters media_ptr directory_name Pointer to a media control block. Pointer to name of the directory entry. Return Values FX_SUCCESS (0x00) Supplied name is a directory. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Directory entry could not be found. FX_NOT_DIRECTORY (0x0E) Entry is not a directory. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Directory Name Test 93 Example FX_MEDIA UINT my_media; status; /* Check to see if the name "abc" is directory. */ status = fx_directory_name_test(&my_media, "abc"); /* If status equals FX_SUCCESS, "abc" is a directory. */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 94 FileX User Guide fx_directory_next_entry_find Picks up next directory entry Finding Next Directory Entries Prototype UINT fx_directory_next_entry_find(FX_MEDIA *media_ptr, CHAR *return_entry_name) Description This service returns the next entry name in the current default directory. ! If using a non-local path, it is also important to prevent (with a ThreadX semaphore or thread priority level) other application threads from changing this directory while a directory traversal is taking place. Otherwise, invalid results may be obtained. Input Parameters media_ptr return_entry_name Pointer to a media control block. Pointer to destination for the next entry name in the default directory. Return Values FX_SUCCESS (0x00) Successful next entry find. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NO_MORE_ENTRIES (0x0F) No more entries in this directory. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide Finding Next Directory Entries 95 Allowed From Threads Example FX_MEDIA CHAR UINT my_media; next_name[12]; status; /* Retrieve the next entry in the default directory. */ status = fx_directory_next_entry_find(&my_media, next_name); /* If status equals TX_SUCCESS, the name of the next directory entry is in "next_name". */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_full_entry_find, fx_directory_rename, fx_directory_short_name_get Express Logic, Inc. 96 FileX User Guide fx_directory_next_full_entry_find Gets next directory entry with full information Find Next FullDirectory Entry Prototype UINT fx_directory_next_full_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second); Description This service retrieves the next entry name in the default directory and copies it to the specified destination. It also returns full information about the entry as specified by the additional input parameters. ! ! The specified destination must be large enough to hold the maximum sized FileX name, as defined by FX_MAX_LONG_NAME_LEN If using a non-local path, it is important to prevent (with a ThreadX semaphore, mutex, or priority level change) other application threads from changing this directory while a directory traversal is taking place. Otherwise, invalid results may be obtained. Input Parameters media_ptr directory_name attributes Pointer to a media control block. Pointer to the destination for the name of a directory entry. Must be at least as big as FX_MAX_LONG_NAME_LEN. If non-null, pointer to the destination for the entry’s attributes to be placed.The attributes are returned in a bit-map format with the following possible settings: FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_VOLUME FX_DIRECTORY FX_ARCHIVE User Guide (0x01) (0x02) (0x04) (0x08) (0x10) (0x20) Find Next Full Directory Entry size month year day hour minute second 97 If non-null, pointer to the destination for the entry’s size in bytes. If non-null, pointer to the destination for the entry’s month of modification. If non-null, pointer to the destination for the entry’s year of modification. If non-null, pointer to the destination for the entry’s day of modification. If non-null, pointer to the destination for the entry’s hour of modification. If non-null, pointer to the destination for the entry’s minute of modification. If non-null, pointer to the destination for the entry’s second of modification. Return Values FX_SUCCESS (0x00) Successful directory next entry find. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NO_MORE_ENTRIES (0x0F) No more entries in this directory. FX_PTR_ERROR (0x18) Invalid media pointer or all input parameters are NULL. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Express Logic, Inc. 98 FileX User Guide Example FX_MEDIA UINT CHAR UINT ULONG UINT UINT UINT UINT UINT UINT my_media; status; entry_name[FX_MAX_LONG_NAME_LEN]; attributes; size; year; month; day; hour; minute; second; /* Get the next directory entry in the default directory with full information. */ status = fx_directory_next_full_entry_find(&my_media, entry_name, &attributes, &size, &year, &month, &day, &hour, &minute, &second); /* If status equals FX_SUCCESS, the entry’s information is in the local variables. */ See Also fx_directory_attributes_read, fx_directory_attributes_set, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_rename, fx_directory_short_name_get User Guide Find Next Full Directory Entry 99 Express Logic, Inc. 100 FileX User Guide fx_directory_rename Renames directory Directory Renam ing Prototype UINT fx_directory_rename(FX_MEDIA *media_ptr, CHAR *old_directory_name, CHAR *new_directory_name) Description This service changes the directory name to the specified new directory name. Renaming is also done relative to the specified path or the default path. If a path is specified in the new directory name, the renamed directory is effectively moved to the specified path. If no path is specified, the renamed directory is placed in the current default path. Input Parameters media_ptr old_directory_name new_directory_name Pointer to media control block. Pointer to current directory name. Pointer to new directory name. Return Values FX_SUCCESS (0x00) Successful directory rename. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Directory entry could not be found. FX_NOT_DIRECTORY (0x0E) Entry is not a directory. FX_INVALID_NAME (0x0C) New directory name is invalid. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide Directory Renaming 101 Example FX_MEDIA UINT my_media; status; /* Change the directory "abc" to "def". */ status = fx_directory_rename(&my_media, "abc", "def"); /* If status equals FX_SUCCESS, the directory was changed to "def". */ See Also fx_directory_attributes_read, fx_directory_attributes_set fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_short_name_get Express Logic, Inc. 102 FileX User Guide fx_directory_short_name_get Gets short name from a long name G et Directory Short Nam e Prototype UINT fx_directory_short_name_get(FX_MEDIA *media_ptr, CHAR *long_name, CHAR *short_name); Description This service retrieves the short (8.3 format) name associated with the supplied long name. The long name can be either a file name or a directory name. Input Parameters media_ptr long_name short_name Pointer to media control block. Pointer to source long name. Pointer to destination short name (8.3 format). Note that the destination for the short name must be large enough to hold 14 characters. Return Values FX_SUCCESS (0x00) Successful short name get. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Long name was not found. FX_PTR_ERROR (0x18) Invalid media or name pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Get Directory Short Name 103 Example FX_MEDIA UCHAR my_media; my_short_name[14]; /* Retrieve the short name associated with "my_really_long_name". */ status = fx_directory_short_name_get(&my_media, "my_really_long_name", my_short_name); /* If status is FX_SUCCESS the short name was successfully retrieved. */ See Also fx_directory_attributes_read, fx_directory_attributes_set, fx_directory_create, fx_directory_default_get, fx_directory_default_set, fx_directory_delete, fx_directory_first_entry_find, fx_directory_first_full_entry_find, fx_directory_information_get, fx_directory_local_path_clear, fx_directory_local_path_get, fx_directory_local_path_restore, fx_directory_local_path_set, fx_directory_long_name_get, fx_directory_name_test, fx_directory_next_entry_find, fx_directory_next_full_entry_find, fx_directory_rename Express Logic, Inc. 104 FileX User Guide fx_file_allocate Allocates space for a file File Allocation Prototype UINT fx_file_allocate(FX_FILE *file_ptr, ULONG size) Description This service allocates and links one or more contiguous clusters to the end of the specified file. FileX determines the number of clusters required by dividing the requested size by the number of bytes per cluster. The result is then rounded up to the next whole cluster. Input Parameters file_ptr size Pointer to a previously opened file. Number of bytes to allocate for the file. Return Values FX_SUCCESS (0x00) Successful file allocation. FX_ACCESS_ERROR (0x06) Specified file is not open for writing. FX_NOT_OPEN (0x07) Specified file is not currently open. TX_NO_MORE_SPACE (0x0A) Media associated with this file does not have enough available clusters. FX_PTR_ERROR (0x18) Invalid file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide File Allocation 105 Example FX_FILE UINT my_file; status; /* Allocate 1024 bytes to the end of my_file. */ status = fx_file_allocate(&my_file, 1024); /* If status equals FX_SUCCESS the file now has one or more contiguous cluster(s) that can accommodate at least 1024 bytes of user data. */ See Also fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate,fx_file_truncate_release, fx_file_write Express Logic, Inc. 106 FileX User Guide fx_file_attributes_read Reads file attributes File Attribute Reading Prototype UINT fx_file_attributes_read(FX_MEDIA *media_ptr, CHAR *file_name, UINT *attributes_ptr) Description This service reads the file’s attributes from the specified media. Input Parameters media_ptr file_name attributes_ptr Pointer to a media control block. Pointer to the name of the requested file (directory path is optional). Pointer to the destination for the file’s attributes to be placed. The file attributes are returned in a bit-map format with the following possible settings: FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_VOLUME FX_DIRECTORY FX_ARCHIVE User Guide (0x01) (0x02) (0x04) (0x08) (0x10) (0x20) File Attribute Reading 107 Return Values FX_SUCCESS (0x00) Successful attribute read. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified file was not found in the media. FX_NOT_A_FILE (0x05) Specified file is a directory. FX_PTR_ERROR (0x18) Invalid media or attributes pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Example FX_MEDIA UINT UINT my_media; status; attributes; /* Retrieve the attributes of "myfile.txt" from the specified media. */ status = fx_file_attributes_read(&my_media, "myfile.txt", &attributes); /* If status equals FX_SUCCESS, "attributes" contains the file attributes for "myfile.txt". */ See Also fx_file_allocate, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 108 FileX User Guide fx_file_attributes_set Sets file attributes File Attribute Setting Prototype UINT fx_file_attributes_set(FX_MEDIA *media_ptr, CHAR *file_name, UINT attributes) Description This service sets the file’s attributes to those specified by the caller. ! The application is only allowed to modify a subset of the file’s attributes with this service. Any attempt to set additional attributes will result in an error. Input Parameters media_ptr file_name Pointer to a media control block. Pointer to the name of the requested file (directory path is optional). The new attributes for the file. The valid file attributes are defined as follows: attributes FX_READ_ONLY FX_HIDDEN FX_SYSTEM FX_ARCHIVE User Guide (0x01) (0x02) (0x04) (0x20) File Attribute Setting 109 Return Values FX_SUCCESS (0x00) Successful attribute set. FX_ACCESS_ERROR (0x06) File is open and cannot have its attributes set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified file was not found in the media. FX_NOT_A_FILE (0x05) Specified file is a directory. FX_PTR_ERROR (0x18) Invalid media pointer. FX_INVALID_ATTR (0x19) Invalid attributes selected. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Set the attributes of "myfile.txt" to read-only. */ status = fx_file_attributes_set(&my_media, "myfile.txt", FX_READ_ONLY); /* If status equals FX_SUCCESS, the file is now read-only. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 110 FileX User Guide fx_file_best_effort_allocate Best effort to allocate space for a file File Allocation Prototype UINT fx_file_best_effort_allocate(FX_FILE *file_ptr, ULONG size, ULONG *actual_size_allocated); Description This service allocates and links one or more contiguous clusters to the end of the specified file. FileX determines the number of clusters required by dividing the requested size by the number of bytes per cluster. The result is then rounded up to the next whole cluster. If there are not enough consecutive clusters available in the media, this service links the largest available block of consecutive clusters to the file. The amount of space actually allocated to the file is returned to the caller. Input Parameters file_ptr size Pointer to a previously opened file. Number of bytes to allocate for the file. Return Values FX_SUCCESS (0x00) Successful best-effort file allocation. FX_ACCESS_ERROR (0x06) Specified file is not open for writing. FX_NOT_OPEN (0x07) Specified file is not currently open. TX_NO_MORE_SPACE (0x0A) Media associated with this file does not have enough available clusters. FX_PTR_ERROR (0x18) Invalid file pointer or destination. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Underlying media is write protected. Allowed From Threads User Guide File Allocation 111 Example FX_FILE UINT ULONG my_file; status; actual_allocation; /* Attempt to allocate 1024 bytes to the end of my_file. */ status = fx_file_best_effort_allocate(&my_file, 1024, &actual_allocation); /* If status equals FX_SUCCESS, the number of bytes allocated to the file is found in actual_allocation. */ See Also fx_file_allocate, fx_file_attributes_read, fx_file_attributes_set, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 112 FileX User Guide fx_file_close Closes file File Closing Prototype UINT fx_file_close(FX_FILE *file_ptr) Description This service closes the specified file. If the file was open for writing and if it was modified, this service completes the file modification process by updating its directory entry with the new size and the current system time and date. Input Parameters file_ptr Pointer to the previously opened file. Return Values FX_SUCCESS (0x00) Successful file close. FX_NOT_OPEN (0x07) Specified file is not open. FX_PTR_ERROR (0x18) Invalid media or attributes pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide File Closing 113 Allowed From Threads Example FX_FILE UINT my_file; status; /* Close the previously opened file "my_file". */ status = fx_file_close(&my_file); /* If status equals FX_SUCCESS, the file was closed successfully. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 114 FileX User Guide fx_file_create Creates file File Creation Prototype UINT fx_file_create(FX_MEDIA *media_ptr, CHAR *file_name) Description This service creates the specified file in the default directory or in the directory path supplied with the file name. ! This service creates a file of zero length, i.e., no clusters allocated. Allocation will automatically take place on subsequent file writes or can be done in advance with the fx_file_allocate service. Input Parameters media_ptr file_name Pointer to a media control block. Pointer to the name of the file to create (directory path is optional). Return Values FX_SUCCESS (0x00) Successful file create. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_ALREADY_CREATED (0x0B) Specified file was already created. FX_NO_MORE_SPACE (0x0A) Either there are no more entries in the root directory or there are no more clusters available. FX_INVALID_PATH (0x0D) Invalid path supplied with file name. FX_INVALID_NAME (0x0C) File name is invalid. FX_PTR_ERROR (0x18) Invalid media or file name pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide File Creation 115 Example FX_MEDIA UINT my_media; status; /* Create a file called "myfile.txt" in the root or the default directory of the media. */ status = fx_file_create(&my_media, "myfile.txt"); /* If status equals FX_SUCCESS, a zero sized file named "myfile.txt". */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 116 FileX User Guide fx_file_date_time_set Sets file date and time Setting File Date and Tim e Prototype UINT fx_file_date_time_set(FX_MEDIA *media_ptr, CHAR *file_name, UINT year, UINT month, UINT day, UINT hour, UINT minute, UINT second); Description This service sets the date and time of the specified file. Input Parameters media_ptr file_name year month day hour minute second Pointer to media control block. Pointer to name of the file. Value of year (1980-2107 inclusive). Value of month (1-12 inclusive). Value of day (1-31 inclusive). Value of hour (0-23 inclusive). Value of minute (0-59 inclusive). Value of second (0-59 inclusive). Return Values FX_SUCCESS (0x00) Successful date/time set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) File was not found. FX_PTR_ERROR (0x18) Invalid media or name pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_INVALID_YEAR (0x12) Year is invalid. FX_INVALID_MONTH (0x13) Month is invalid. FX_INVALID_DAY (0x14) Day is invalid. FX_INVALID_HOUR (0x15) Hour is invalid. FX_INVALID_MINUTE (0x16) Minute is invalid. FX_INVALID_SECOND (0x17) Second is invalid. User Guide Setting File Date and Time 117 FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads Example FX_MEDIA my_media; /* Set the date/time of "my_file". */ status = fx_file_date_time_set(&my_media, "my_file", 1999, 12, 31, 23, 59, 59); /* If status is FX_SUCCESS the file’s date/time was successfully set. /* See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 118 FileX User Guide fx_file_delete Deletes file File Deletion Prototype UINT fx_file_delete(FX_MEDIA *media_ptr, CHAR *file_name) Description This service deletes the specified file. Input Parameters media_ptr file_name Pointer to a media control block. Pointer to the name of the file to delete (directory path is optional). Return Values FX_SUCCESS (0x00) Successful file delete. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified file was not found. FX_NOT_A_FILE (0x05) Specified file name was a directory or volume. FX_ACCESS_ERROR (0x06) Specified file is currently open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide File Deletion 119 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Delete the file "myfile.txt". */ status = fx_file_delete(&my_media, "myfile.txt"); /* If status equals FX_SUCCESS, "myfile.txt" has been deleted. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 120 FileX User Guide fx_file_open Opens file File Opening Prototype UINT fx_file_open(FX_MEDIA *media_ptr, FX_FILE *file_ptr, CHAR *file_name, UINT open_type) Description This service opens the specified file for either reading or writing. A file may be opened for reading multiple times, while a file can only be opened for writing once until the writer closes the file. i Care must be taken if a file is concurrently open for reading and writing. File writing performed when a file is simultaneously opened for reading may not be seen by the reader, unless the reader closes and reopens the file for reading. Similarly, the file writer should be careful when using file truncate services. If a file is truncated by the writer, readers of the same file could return invalid data. Input Parameters media_ptr file_ptr file_name open_type Pointer to a media control block. Pointer to the file control block. Pointer to the name of the file to open (directory path is optional). Type of file open. Valid open type options are: FX_OPEN_FOR_READ (0x00) FX_OPEN_FOR_WRITE (0x01) FX_OPEN_FOR_READ_FAST (0x02) Opening files with FX_OPEN_FOR_READ and FX_OPEN_FOR_READ_FAST is similar: FX_OPEN_FOR_READ includes verification that the linked-list of clusters that comprise the file are intact, and FX_OPEN_FOR_READ_FAST does not perform this verification, which makes it faster. User Guide File Opening 121 Return Values FX_SUCCESS (0x00) Successful file open. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified file was not found. FX_NOT_A_FILE (0x05) Specified file name was a directory or volume. FX_FILE_CORRUPT (0x08) Specified file is corrupt and the open failed. FX_ACCESS_ERROR (0x06) Specified file is already open or open type is invalid. FX_PTR_ERROR (0x18) Invalid media or file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads Example FX_MEDIA FX_FILE UINT my_media; my_file; status; /* Open the file "myfile.txt" for reading. */ status = fx_file_open(&my_media, &my_file, "myfile.txt", FX_OPEN_FOR_READ); /* If status equals FX_SUCCESS, file "myfile.txt" is now open and may be accessed now with the my_file pointer. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 122 FileX User Guide fx_file_read Reads bytes from file File read Prototype UINT fx_file_read(FX_FILE *file_ptr, VOID *buffer_ptr, ULONG request_size, ULONG *actual_size) Description This service reads bytes from the file and stores them in the supplied buffer. After the read is complete, the file’s internal read pointer is adjusted to point at the next byte in the file. If there are fewer bytes remaining in the request, only the bytes remaining are stored in the buffer. In any case, the total number of bytes placed in the buffer is returned to the caller. ! ! The application must ensure that the buffer supplied is able to store the specified number of requested bytes. Faster performance is achieved if the destination buffer is on a long-word boundary and the requested size is evenly divisible by sizeof(ULONG). Input Parameters file_ptr buffer_ptr request_size actual_size User Guide Pointer to the file control block. Pointer to the destination buffer for the read. Maximum number of bytes to read. Pointer to the variable to hold the actual number of bytes read into the supplied buffer. File read 123 Return Values FX_SUCCESS (0x00) Successful file read. FX_NOT_OPEN (0x07) Specified file is not open. FX_FILE_CORRUPT (0x08) Specified file is corrupt and the read failed. FX_END_OF_FILE (0x09) End of file has been reached. FX_PTR_ERROR (0x18) Invalid file or buffer pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Example FX_FILE unsigned char ULONG UINT my_file; my_buffer[1024]; actual_bytes; status; /* Read up to 1024 bytes into "my_buffer." */ status = fx_file_read(&my_file, my_buffer, 1024, &actual_bytes); /* If status equals FX_SUCCESS, "my_buffer" contains the bytes read from the file. The total number of bytes read is in "actual_bytes." */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 124 FileX User Guide fx_file_relative_seek Positions to a relative byte offset File Pointer Positioning Prototype UINT fx_file_relative_seek(FX_FILE *file_ptr, ULONG byte_offset, UINT seek_from); Description This service positions the internal file read/write pointer to the specified relative byte offset. Any subsequent file read or write request will begin at this location in the file. i If the seek operation attempts to seek past the end of the file, the file’s read/write pointer is positioned to the end of the file. Conversely, if the seek operation attempts to position past the beginning of the file, the file’s read/write pointer is positioned to the beginning of the file. Input Parameters file_ptr byte_offset seek_from Pointer to a previously opened file. Desired relative byte offset in file. The direction and location of where to perform the relative seek from. Valid seek options are defined as follows: FX_SEEK_BEGIN FX_SEEK_END FX_SEEK_FORWARD FX_SEEK_BACK (0x00) (0x01) (0x02) (0x03) If FX_SEEK_BEGIN is specified, the seek operation is performed from the beginning of the file. If FX_SEEK_END is specified the seek operation is performed backward from the end of the file. If FX_SEEK_FORWARD is specified, the seek operation is performed forward from the current file position. If FX_SEEK_BACK is specified, the seek operation is performed backward from the User Guide File Pointer Positioning 125 current file position. Return Values FX_SUCCESS (0x00) Successful file relative seek. FX_NOT_OPEN (0x07) Specified file is not currently open. FX_PTR_ERROR (0x18) Invalid file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Example FX_FILE UINT my_file; status; /* Attempt to move 10 bytes forward in "my_file". */ status = fx_file_relative_seek(&my_file, 10, FX_SEEK_FORWARD); /* If status equals FX_SUCCESS, the file read/write pointers are positioned 10 bytes forward. */ See Also fx_file_allocate, fx_file_attributes_read, fx_file_attributes_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 126 FileX User Guide fx_file_rename Renames file File Renam ing Prototype UINT fx_file_rename(FX_MEDIA *media_ptr, CHAR *old_file_name, CHAR *new_file_name) Description This service changes the name of the file specified by old_file_name. Renaming is also done relative to the specified path or the default path. If a path is specified in the new file name, the renamed file is effectively moved to the specified path. If no path is specified, the renamed file is placed in the current default path. Input Parameters media_ptr old_file_name new_file_name Pointer to a media control block. Pointer to the name of the file to rename (directory path is optional). Pointer to the new file name. The directory path is not allowed. Return Values FX_SUCCESS (0x00) Successful file rename. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Specified file was not found. FX_NOT_A_FILE (0x05) Specified file is a directory. FX_ACCESS_ERROR (0x06) Specified file is already open. FX_INVALID_NAME (0x0C) Specified new file name is not a valid file name. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide File Renaming 127 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Rename "myfile1.txt" to "myfile2.txt" in the default directory of the media. */ status = fx_file_rename(&my_media, "myfile1.txt", "myfile2.txt"); /* If status equals FX_SUCCESS, the file was successfully renamed. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_seek, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 128 FileX User Guide fx_file_seek Positions to byte offset File Pointer Positioning Prototype UINT fx_file_seek(FX_FILE *file_ptr, ULONG byte_offset) Description This service positions the internal file read/write pointer to the specified byte offset. Any subsequent file read or write request will begin at this location in the file. Input Parameters file_ptr byte_offset Pointer to the file control block. Desired byte offset in file. A value of zero will position the read/write pointer at the beginning of the file, while a value greater than the file’s size will position the read/write pointer at the end of the file. Return Values FX_SUCCESS (0x00) Successful file seek. FX_NOT_OPEN (0x07) Specified file is not open. FX_PTR_ERROR (0x18) Invalid file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide File Pointer Positioning 129 Example FX_FILE UINT my_file; status; /* Seek to the beginning of "my_file." */ status = fx_file_seek(&my_file, 0); /* If status equals FX_SUCCESS, the file read/write pointer is now positioned to the beginning of the file. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_truncate, fx_file_truncate_release, fx_file_write Express Logic, Inc. 130 FileX User Guide fx_file_truncate Truncates file File Truncation Prototype UINT fx_file_truncate(FX_FILE *file_ptr, ULONG size) Description This service truncates the size of the file to the specified size. If the supplied size is greater than the actual file size, this service doesn’t do anything. None of the media clusters associated with the file are released. ! Use caution truncating files that may also be simultaneously open for reading. Truncating a file also opened for reading can result in reading invalid data. Input Parameters file_ptr size Pointer to the file control block. New file size. Bytes past this new file size are discarded. Return Values FX_SUCCESS (0x00) Successful file truncate. FX_NOT_OPEN (0x07) Specified file is not open. FX_ACCESS_ERROR (0x06) Specified file is not open for writing. FX_PTR_ERROR (0x18) Invalid file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide File Truncation 131 Allowed From Threads Example FX_FILE UINT my_file; status; /* Truncate "my_file" to 100 bytes. */ status = fx_file_truncate(&my_file, 100); /* If status equals FX_SUCCESS, "my_file" contains 100 or fewer bytes. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate_release, fx_file_write Express Logic, Inc. 132 FileX User Guide fx_file_truncate_release Truncates file and releases cluster(s) File Truncation Release Prototype UINT fx_file_truncate_release(FX_FILE *file_ptr, ULONG size) Description This service truncates the size of the file to the specified size. If the supplied size is greater than the actual file size, this service does not do anything. Unlike the fx_file_truncate service, this service does release any unused clusters. ! Use caution truncating files that may also be simultaneously open for reading. Truncating a file also opened for reading can result in reading invalid data. Input Parameters file_ptr size Pointer to a previously opened file. New file size. Bytes past this new file size are discarded. Return Values FX_SUCCESS (0x00) Successful file truncate. FX_ACCESS_ERROR (0x06) Specified file is not open for writing. FX_NOT_OPEN (0x07) Specified file is not currently open. FX_PTR_ERROR (0x18) Invalid file pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Underlying media is write protected. User Guide File Truncation Release 133 Allowed From Threads Example FX_FILE UINT my_file; status; /* Attempt to truncate everything after the first 100 bytes of "my_file". */ status = fx_file_truncate_release(&my_file, 100); /* If status equals FX_SUCCESS, the file is now 100 bytes or fewer and all unused clusters have been released. */ See Also fx_file_allocate, fx_file_attributes_read, fx_file_attributes_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_write Express Logic, Inc. 134 FileX User Guide fx_file_write Writes bytes to file File Write Prototype UINT fx_file_write(FX_FILE *file_ptr, VOID *buffer_ptr, ULONG size) Description This service writes bytes from the specified buffer starting at the file’s current position. After the write is complete, the file’s internal read pointer is adjusted to point at the next byte in the file. ! Faster performance is achieved if the source buffer is on a long-word boundary and the requested size is evenly divisible by sizeof(ULONG). Input Parameters file_ptr buffer_ptr size Pointer to the file control block. Pointer to the source buffer for the write. Number of bytes to write. Return Values FX_SUCCESS (0x00) Successful file write. FX_NOT_OPEN (0x07) Specified file is not open. FX_ACCESS_ERROR (0x06) Specified file is not open for writing. FX_NO_MORE_SPACE (0x0A) There is no more room available in the media to perform this write. FX_PTR_ERROR (0x18) Invalid file or buffer pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide File Write 135 Example FX_FILE UINT my_file; status; /* Write a 10 character buffer to "my_file." */ status = fx_file_write(&my_file, "1234567890", 10); /* If status equals FX_SUCCESS, the small text string was written out to the file. */ See Also fx_file_allocate, fx_file_attribute_read, fx_file_attribute_set, fx_file_best_effort_allocate, fx_file_close, fx_file_create, fx_file_date_time_set, fx_file_delete, fx_file_open, fx_file_read, fx_file_relative_seek, fx_file_rename, fx_file_seek, fx_file_truncate, fx_file_truncate_release Express Logic, Inc. 136 FileX User Guide fx_media_abort Aborts media activities Media Abort Prototype UINT fx_media_abort(FX_MEDIA *media_ptr) Description This service aborts all current activities associated with the media, including closing all open files, sending an abort request to the associated driver, and placing the media in an aborted state. This service is typically called when I/O errors are detected. ! The media must be re-opened to use it again after an abort operation is performed. Input Parameters media_ptr Pointer to media control block. Return Values FX_SUCCESS (0x00) Successful media abort. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. User Guide Media Abort 137 Allowed From Threads Example FX_MEDIA UINT my_media; status; /* Abort all activity associated with "my_media". */ status = fx_media_abort(&my_media); /* If status equals FX_SUCCESS, all activity associated with the media has been aborted. */ See Also fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 138 FileX User Guide fx_media_cache_invalidate Invalidates logical sector cache Invalidating Sector Cache Prototype UINT fx_media_cache_invalidate(FX_MEDIA *media_ptr); Description This service flushes all dirty sectors in the cache and then invalidates the entire logical sector cache. Input Parameters media_ptr Pointer to media control block Return Values FX_SUCCESS (0x00) Successful media cache invalidate. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media or scratch pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide Invalidating Sector Cache 139 Example FX_MEDIA my_media; /* Invalidate the cache of the media. */ status = fx_media_cache_invalidate(&my_media); /* If status is FX_SUCCESS the cache in the media was successfully flushed and invalidated. */ See Also fx_media_check, fx_media_abort, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_write, fx_media_volume_get, fx_media_volume_set Express Logic, Inc. 140 FileX User Guide fx_media_check Checks media for errors Checking Media Prototype UINT fx_media_check(FX_MEDIA *media_ptr, UCHAR *scratch_memory_ptr, ULONG scratch_memory_size, ULONG error_correction_option, ULONG *errors_detected_ptr); Description This service checks the specified media for basic structural errors, including file/directory cross-linking, invalid FAT chains, and lost clusters. This service also provides the capability to correct detected errors. The fx_media_check service requires scratch memory for its depth-first analysis of directories and files in the media. Specifically, the scratch memory supplied to the media check service must be large enough to hold several directory entries, a data structure to “stack” the current directory entry position before entering into subdirectories, and finally the logical FAT bit map. The scratch memory should be at least 512-1024 bytes plus memory for the logical FAT bit map, which requires as many bits as there are clusters in the media. For example, a device with 8000 clusters would require 1000 bytes to represent and thus require a total scratch area on the order of 2048 bytes. ! This service should only be called immediately after fx_media_open and without any other file system activity. Input Parameters media_ptr scratch_memory_ptr scratch_memory_size error_correction_option Pointer to media control block. Pointer to the start of scratch memory. Size of scratch memory in bytes. Error correction option bits, when the bit is set, error correction is performed. The error correction option bits are defined as follows: FX_FAT_CHAIN_ERROR FX_DIRECTORY_ERROR FX_LOST_CLUSTER_ERROR (0x01) (0x02) (0x04) Simply OR together the required error correction options. If no error correction is User Guide Checking Media errors_detected_ptr 141 required, a value of 0 should be supplied. Destination for error detection bits, as defined below: FX_FAT_CHAIN_ERROR FX_DIRECTORY_ERROR FX_LOST_CLUSTER_ERROR FX_FILE_SIZE_ERROR (0x01) (0x02) (0x04) (0x08) Return Values FX_SUCCESS (0x00) Successful media check, view the errors detected destination for details. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_ENOUGH_MEMORY (0x91) Supplied scratch memory is not large enough. FX_ERROR_NOT_FIXED (0x93) Corruption of FAT32 root directory that could not be fixed. FX_PTR_ERROR (0x18) Invalid media or scratch pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Express Logic, Inc. 142 FileX User Guide Example FX_MEDIA ULONG UCHAR my_media; detected_errors; sratch_memory[4096]; /* Check the media and correct all errors. */ status = fx_media_check(&my_media, sratch_memory, 4096, FX_FAT_CHAIN_ERROR | FX_DIRECTORY_ERROR | FX_LOST_CLUSTER_ERROR, &detected_errors); /* If status is FX_SUCCESS and detected_errors is 0, the media was successfully checked and found to be error free. */ See Also fx_media_cache_invalidate, fx_media_abort, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_write, fx_media_volume_get, fx_media_volume_set User Guide 143 Checking Media User Guide 144 FileX User Guide fx_media_close Closes media Media Close Prototype UINT fx_media_close(FX_MEDIA *media_ptr) Description This service closes the specified media. In the process of closing the media, all open files are closed and any remaining buffers are flushed to the physical media. Input Parameters media_ptr Pointer to media control block. Return Values FX_SUCCESS (0x00) Successful media close. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Media Close 145 Example FX_MEDIA UINT my_media; status; /* Close "my_media". */ status = fx_media_close(&my_media); /* If status equals FX_SUCCESS, "my_media" is closed. */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 146 FileX User Guide fx_media_flush Flushes data to physical media Flush Data To Media Prototype UINT fx_media_flush(FX_MEDIA *media_ptr) Description This service flushes all cached sectors and directory entries of any modified files to the physical media. ! This routine may be called periodically by the application to reduce the risk of file corruption and/or data loss in the event of a sudden loss of power on the target. Input Parameters media_ptr Pointer to media control block. Return Values FX_SUCCESS (0x00) Successful media flush. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads User Guide Flush Data To Media 147 Example FX_MEDIA UINT my_media; status; /* Flush all cached sectors and modified file entries to the physical media. */ status = fx_media_flush(&my_media); /* If status equals FX_SUCCESS, the physical media is completely up-to-date. */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 148 FileX User Guide fx_media_format Formats media Form atting Media Prototype UINT fx_media_format(FX_MEDIA *media_ptr, VOID (*driver)(FX_MEDIA *media), VOID *driver_info_ptr, UCHAR *memory_ptr, UINT memory_size, CHAR *volume_name, UINT number_of_fats, UINT directory_entries, UINT hidden_sectors, ULONG total_sectors, UINT bytes_per_sector, UINT sectors_per_cluster, UINT heads, UINT sectors_per_track); Description This service formats the supplied media in a FAT 12/16/32 compatible manner based on the supplied parameters. This service must be called prior to opening the media. ! Formatting an already formatted media effectively erases all files and directories on the media. Input Parameters media_ptr driver driver_info_ptr memory_ptr memory_size volume_name number_of_fats User Guide Pointer to media control block. This is used only to provide some basic information necessary for the driver to operate. Pointer to the I/O driver for this media. This will typically be the same driver supplied to the subsequent fx_media_open call. Pointer to optional information that the I/O driver may utilize. Pointer to the working memory for the media. Specifies the size of the working media memory. The size must be at least as large as the media’s sector size. Pointer to the volume name string, which is a maximum of 11 characters. Number of FATs in the media. The minimal value is 1 for the primary FAT. Values greater than 1 result in additional FAT copies Formatting Media directory_entries hidden_sectors total_sectors bytes_per_sector sectors_per_cluster heads sectors_per_track 149 being maintained at run-time. Number of directory entries in the root directory. Number of sectors hidden before this media’s boot sector. This is typical when multiple partitions are present. Total number of sectors in the media. Number of bytes per sector, which is typically 512. FileX requires this to be a multiple of 32. Number of sectors in each cluster. The cluster is the minimum allocation unit in a FAT file system. Number of physical heads. Number of sectors per track. Return Values FX_SUCCESS (0x00) Successful media format. FX_PTR_ERROR (0x18) Invalid media, driver, or memory pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Express Logic, Inc. 150 FileX User Guide Example FX_MEDIA UCHAR UCHAR ram_disk; media_memory[512]; ram_disk_memory[32768]; /* Format a RAM disk with 32768 bytes and 512 bytes per sector. */ status = fx_media_format(&ram_disk, _fx_ram_driver, ram_disk_memory, media_memory, sizeof(media_memory), "MY_RAM_DISK" /* Volume Name */, 1 /* Number of FATs */, 32 /* Directory Entries */, 0 /* Hidden sectors */, 64 /* Total sectors */, 512 /* Sector size */, 1 /* Sectors per cluster */, 1 /* Heads */, 1 /* Sectors per track */); /* If status is FX_SUCCESS, the media was successfully formatted and can now be opened with the following call: */ fx_media_open(&ram_disk, _fx_ram_driver, ram_disk_memory, media_memory, sizeof(media_memory); See Also fx_media_cache_invalidate, fx_media_abort, fx_media_check, fx_media_close, fx_media_flush, fx_media_open, fx_media_read, fx_media_space_available, fx_media_write, fx_media_volume_get, fx_media_volume_set User Guide 151 Formatting Media User Guide 152 FileX User Guide fx_media_open Opens media for file access Media Open Prototype UINT fx_media_open(FX_MEDIA *media_ptr, CHAR *media_name, VOID(*media_driver)(FX_MEDIA *), VOID *driver_info_ptr, VOID *memory_ptr, ULONG memory_size) Description This service opens a media for file access using the supplied I/O driver. ! The memory supplied to this service is used to implement an internal logical sector cache, hence, the more memory supplied the more physical I/O is reduced. FileX requires a cache of at least one logical sector (bytes per sector of the media). Input Parameters media_ptr media_name media_driver driver_info_ptr memory_ptr memory_size User Guide Pointer to media control block. Pointer to media’s name. Pointer to I/O driver for this media. The I/O driver must conform to FileX driver requirements defined in Chapter 5. Pointer to optional information that the supplied I/O driver may utilize. Pointer to the working memory for the media. Specifies the size of the working media memory. The size must be as large as the media’s sector size (typically 512 bytes). Media Open 153 Return Values FX_SUCCESS (0x00) Successful media open. FX_BOOT_ERROR (0x01) Error reading the media’s boot sector. FX_MEDIA_INVALID (0x02) Specified media’s boot sector is corrupt or invalid. In addition, this return code is used to indicate that either the logical sector cache size or the FAT entry size is not a power of 2. FX_FAT_READ_ERROR (0x03) Error reading the media FAT. FX_PTR_ERROR (0x18) One or more pointers are NULL. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Example FX_MEDIA UINT CHAR ram_disk, status; local_buffer[128]; /* Open a 32KByte RAM disk starting at the fixed address of 0x800000. Note that the total 32KByte media size and 128-byte sector size is defined inside of the driver. */ status = fx_media_open(&ram_disk, "RAM DISK", _fx_ram_driver, ram_disk_memory, &buffer[0], 128); /* If status equals FX_SUCCESS, the RAM disk has been successfully setup and is ready for file access! */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_read, fx_media_space_available, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 154 FileX User Guide fx_media_read Reads logical sector from media Media Read Prototype UINT fx_media_read(FX_MEDIA *media_ptr, ULONG logical_sector, VOID *buffer_ptr) Description This service reads a logical sector from the media and places it into the supplied buffer. Input Parameters media_ptr logical_sector buffer_ptr Pointer to a previously opened media. Logical sector to read. Pointer to the destination for the logical sector read. Return Values FX_SUCCESS (0x00) Successful media read. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media or buffer pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide Media Read 155 Allowed From Threads Example FX_MEDIA UCHAR UINT my_media; my_buffer[128]; status; /* Read logical sector 22 into "my_buffer" assuming the physical media has a sector size of 128. */ status = fx_media_read(&my_media, 22, my_buffer); /* If status equals FX_SUCCESS, the contents of logical sector 22 are in "my_buffer." */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_space_available, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 156 FileX User Guide fx_media_space_available Returns available media space Find Media Bytes Available Prototype UINT fx_media_space_available(FX_MEDIA *media_ptr, ULONG *available_bytes_ptr) Description This service returns the number of bytes available in the media. Input Parameters media_ptr available_bytes_ptr Pointer to a previously opened media. Available bytes left in the media. Return Values FX_SUCCESS (0x00) Successful media flush. FX_PTR_ERROR (0x18) Invalid media pointer or available bytes pointer is NULL. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. Allowed From Threads User Guide Find Media Bytes Available 157 Example FX_MEDIA ULONG UINT my_media; available_bytes; status; /* Retrieve the available bytes in the media. */ status = fx_media_space_available(&my_media, &available_bytes); /* If status equals FX_SUCCESS, the number of available bytes is in "available_bytes." */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_flush,fx_media_format, fx_media_open, fx_media_read, fx_media_volume_get, fx_media_volume_set, fx_media_write Express Logic, Inc. 158 FileX User Guide fx_media_volume_get Gets media volume name G etting Media Volum e Nam e Prototype UINT fx_media_volume_get(FX_MEDIA *media_ptr, CHAR *volume_name, UINT volume_source); Description This service retrieves the volume name of the previously opened media. Input Parameters media_ptr volume_name volume_source Pointer to media control block. Pointer to destination for volume name. Note that the destination must be at least large enough to hold 12 characters. Designates where to retrieve the name, either from the boot sector or the root directory. Valid values for this parameter are: FX_BOOT_SECTOR FX_DIRECTORY_SECTOR Return Values FX_SUCCESS (0x00) Successful media volume get. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Volume not found. FX_PTR_ERROR (0x18) Invalid media or volume destination pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads User Guide Getting Media Volume Name 159 Example FX_MEDIA UCHAR ram_disk; volume_name[12]; /* Retrieve the volume name of the RAM disk, from the boot sector. */ status = fx_media_volume_get(&ram_disk, volume_name, FX_BOOT_SECTOR); /* If status is FX_SUCCESS, the volume name was successfully retrieved. */ See Also fx_media_cache_invalidate, fx_media_abort, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_write, fx_media_volume_set Express Logic, Inc. 160 FileX User Guide fx_media_volume_set Sets media volume name Setting Media Volum e Nam e Prototype UINT fx_media_volume_set(FX_MEDIA *media_ptr, CHAR *volume_name); Description This service sets the volume name of the previously opened media. Input Parameters media_ptr volume_name Pointer to media control block. Pointer to the volume name. Return Values FX_SUCCESS (0x00) Successful media volume set. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media or volume name pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected Allowed From Threads User Guide Setting Media Volume Name 161 Example FX_MEDIA ram_disk; /* Set the volume name to "MY_VOLUME". */ status = fx_media_volume_set(&ram_disk, "MY_VOLUME"); /* If status is FX_SUCCESS, the volume name was successfully set. */ See Also fx_media_cache_invalidate, fx_media_abort, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_write, fx_media_volume_get Express Logic, Inc. 162 FileX User Guide fx_media_write Writes logical sector Media Write Prototype UINT fx_media_write(FX_MEDIA *media_ptr, ULONG logical_sector, VOID *buffer_ptr) Description This service writes the supplied buffer to the specified logical sector. Input Parameters media_ptr logical_sector buffer_ptr Pointer to a previously opened media. Logical sector to write. Pointer to the source for the logical sector write. Return Values FX_SUCCESS (0x00) Successful media write. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_PTR_ERROR (0x18) Invalid media pointer. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide Media Write 163 Allowed From Threads Example FX_MEDIA UCHAR UINT my_media; my_buffer[128]; status; /* Write logical sector 22 from "my_buffer" assuming the physical media has a sector size of 128. */ status = fx_media_write(&my_media, 22, my_buffer); /* If status equals FX_SUCCESS, the contents of logical sector 22 are now the same as "my_buffer." */ See Also fx_media_abort, fx_media_cache_invalidate, fx_media_check, fx_media_close, fx_media_flush, fx_media_format, fx_media_open, fx_media_read, fx_media_space_available, fx_media_volume_get, fx_media_volume_set Express Logic, Inc. 164 FileX User Guide fx_system_date_get Gets file system date System Date Prototype UINT fx_system_date_get(UINT *year, UINT *month, UINT *day) Description This service returns the current system date. Input Parameters year month day Pointer to destination for year. Pointer to destination for month. Pointer to destination for day. Return Values FX_SUCCESS (0x00) Successful date retrieval. FX_PTR_ERROR (0x18) One or more of the input parameters are NULL. Allowed From Threads User Guide System Date 165 Example UINT UINT UINT UINT status; year; month; day; /* Retrieve the current system date. */ status = fx_system_date_get(&year, &month, &day); /* If status equals FX_SUCCESS, the year, month, and day parameters now have meaningful information. */ See Also fx_system_date_set, fx_system_initialize, fx_system_time_get, fx_system_time_set Express Logic, Inc. 166 FileX User Guide fx_system_date_set Sets system date System Date Prototype UINT fx_system_date_set(UINT year, UINT month, UINT day) Description This service sets the system date as specified. ! This service should be called shortly after fx_system_initialize to set the initial system date. By default, the system date is that of the last generic FileX release. Input Parameters year New year. The valid range is from 1980 through the year 2107. New month. The valid range is from 1 through 12. New day. The valid range is from 1 through 31, depending on month and leap year conditions. month day Return Values FX_SUCCESS (0x00) Successful date setting. FX_INVALID_YEAR (0x12) Invalid year specified. FX_INVALID_MONTH (0x13) Invalid month specified. FX_INVALID_DAY (0x14) Invalid day specified. User Guide System Date 167 Allowed From Threads Example UINT status; /* Set the system date to December 12, 2005. */ status = fx_system_date_set(2005, 12, 12); /* If status equals FX_SUCCESS, the file system date is now 12-12-2005. */ See Also fx_system_date_get, fx_system_initialize, fx_system_time_get, fx_system_time_set Express Logic, Inc. 168 FileX User Guide fx_system_initialize Initializes entire file system System Initialization Prototype VOID fx_system_initialize(void) Description This service initializes all the major FileX data structures. It should be called either in tx_application_define or possibly from an initialization thread and must be called prior to using any other FileX service. ! Once initialized by this call, the application should call fx_system_date_set and fx_system_time_set to start with an accurate system date and time. Input Parameters None. Return Values None. User Guide System Initialization 169 Allowed From Threads Example void tx_application_define(VOID *free_memory) { UINT status; /* Initialize the FileX system. */ fx_system_initialize(); /* Set the file system date. */ fx_system_date_set(my_year, my_month, my_day); /* Set the file system time. */ fx_system_time_set(my_hour, my_minute, my_second); /* Now perform all other initialization and possibly FileX media open calls if the corresponding driver does not block on the boot sector read. */ ... } See Also fx_system_date_get, fx_system_date_set, fx_system_time_get, fx_system_time_set Express Logic, Inc. 170 FileX User Guide fx_system_time_get Gets current system time System Tim e Prototype UINT fx_system_time_get(UINT *hour, UINT *minute, UINT *second) Description This service retrieves the current system time. Input Parameters hour minute second Pointer to destination for hour. Pointer to destination for minute. Pointer to destination for second. Return Values FX_SUCCESS (0x00) Successful system time retrieval. FX_PTR_ERROR (0x18) One or more of the input parameters are NULL. User Guide System Time 171 Allowed From Threads Example UINT UINT UINT UINT status; hour; minute; second; /* Retrieve the current system time. */ status = fx_system_time_get(&hour, &minute, &second); /* If status equals FX_SUCCESS, the current system time is in the hour, minute, and second variables. */ See Also fx_system_date_get, fx_system_date_set, fx_system_initialize, fx_system_time_set Express Logic, Inc. 172 FileX User Guide fx_system_time_set Sets current system time System Tim e Prototype UINT fx_system_time_set(UINT hour, UINT minute, UINT second) Description This service sets the current system time to that specified by the input parameters. ! This service should be called shortly after fx_system_initialize to set the initial system time. By default, the system time is 0:0:0. Input Parameters hour minute second New hour (0-23). New minute (0-59). New second (0-59). Return Values FX_SUCCESS (0x00) Successful system time retrieval. FX_INVALID_HOUR (0x15) New hour is invalid. FX_INVALID_MINUTE (0x16) New minute is invalid. FX_INVALID_SECOND (0x17) New second is invalid. User Guide System Time 173 Allowed From Threads Example UINT status; /* Set the current system time to hour 23, minute 21, and second 20. */ status = fx_system_time_set(23, 21, 20); /* If status is FX_SUCCESS, the current system time has been set. */ See Also fx_system_date_get, fx_system_date_set, fx_system_initialize, fx_system_time_get Express Logic, Inc. 174 FileX User Guide fx_unicode_directory_create Creates a Unicode directory Creating Unicode Directory Prototype UINT fx_unicode_directory_create(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *short_name); Description This service creates a Unicode-named subdirectory in the current default directory—no path information is allowed in the Unicode source name parameter. If successful, the short name (8.3 format) of the newly created Unicode subdirectory is returned by the service. ! All operations on the Unicode subdirectory (making it the default path, deleting, etc.) should be done by supplying the returned short name (8.3 format) to the standard FileX directory services. Input Parameters media_ptr source_unicode_name source_unicode_length short_name Pointer to media control block. Pointer to the Unicode name for the new subdirectory. Length of Unicode name. Pointer to destination for short name (8.3 format) for the new Unicode subdirectory. Return Values FX_SUCCESS (0x00) Successful Unicode directory create. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_ALREADY_CREATED (0x0B) Specified directory already exists. FX_NO_MORE_SPACE (0x0A) No more clusters available in the media for the new directory entry. FX_PTR_ERROR (0x18) Invalid media or name pointers. FX_CALLER_ERROR (0x20) Caller is not a thread. User Guide Creating Unicode Directory 175 FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. Allowed From Threads Example FX_MEDIA UCHAR UCHAR ram_disk; my_short_name[13]; my_unicode_name[] = {0x38,0xC1, 0x88,0xBC, 0xF8,0xC9, 0x20,0x00, 0x54,0xD6, 0x7C,0xC7, 0x20,0x00, 0x74,0xC7, 0x84,0xB9, 0x20,0x00, 0x85,0xC7, 0xC8,0xB2, 0xE4,0xB2, 0x2E,0x00, 0x64,0x00, 0x6F,0x00, 0x63,0x00, 0x00,0x00}; /* Create a Unicode subdirectory with the name contained in "my_unicode_name". */ length = fx_unicode_directory_create(&ram_disk, my_unicode_name, 17, my_short_name); /* If successful, the Unicode subdirectory is created and "my_short_name" contains the 8.3 format name that can be used with other FileX services. */ See Also fx_unicode_file_create, fx_unicode_length_get, fx_unicode_name_get, fx_unicode_short_name_get Express Logic, Inc. 176 FileX User Guide fx_unicode_file_create Creates a Unicode file Creating Unicode File Prototype UINT fx_unicode_file_create(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *short_name); Description This service creates a Unicode-named file in the current default directory—no path information is allowed in the Unicode source name parameter. If successful, the short name (8.3 format) of the newly created Unicode file is returned by the service. ! All operations on the Unicode file (opening, writing, reading, closing, etc.) should be done by supplying the returned short name (8.3 format) to the standard FileX file services. Input Parameters media_ptr source_unicode_name source_unicode_length short_name Pointer to media control block. Pointer to the Unicode name for the new file. Length of Unicode name. Pointer to destination for short name (8.3 format) for the new Unicode file. Return Values FX_SUCCESS (0x00) Successful file create. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_ALREADY_CREATED (0x0B) Specified file already exists. FX_NO_MORE_SPACE (0x0A) No more clusters available in the media for the new file entry. FX_PTR_ERROR (0x18) Invalid media or name pointers. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. FX_WRITE_PROTECT (0x23) Specified media is write protected. User Guide Creating Unicode File 177 Allowed From Threads Example FX_MEDIA UCHAR UCHAR ram_disk; my_short_name[13]; my_unicode_name[] = {0x38,0xC1, 0x88,0xBC, 0xF8,0xC9, 0x20,0x00, 0x54,0xD6, 0x7C,0xC7, 0x20,0x00, 0x74,0xC7, 0x84,0xB9, 0x20,0x00, 0x85,0xC7, 0xC8,0xB2, 0xE4,0xB2, 0x2E,0x00, 0x64,0x00, 0x6F,0x00, 0x63,0x00, 0x00,0x00}; /* Create a Unicode file with the name contained in "my_unicode_name". */ length = fx_unicode_file_create(&ram_disk, my_unicode_name, 17, my_short_name); /* If successful, the Unicode file is created and "my_short_name" contains the 8.3 format name that can be used with other FileX services. */ See Also fx_unicode_directory_create, fx_unicode_length_get, fx_unicode_name_get, fx_unicode_short_name_get Express Logic, Inc. 178 FileX User Guide fx_unicode_length_get Gets length of Unicode name G etting Unicode Nam e Prototype UINT fx_unicode_length(UCHAR *unicode_name) Description This service determines the length of the supplied Unicode name. A Unicode character is represented by two bytes. A Unicode name is a series of two byte Unicode characters terminated by two NULL bytes (two bytes of 0 value). Input Parameters unicode_name Pointer to Unicode name Return Values length Length of Unicode name (number of Unicode characters in the name).. User Guide Getting Unicode Name 179 Allowed From Threads Example UCHAR my_unicode_name[] = {0x38,0xC1, 0x88,0xBC, 0xF8,0xC9, 0x20,0x00, 0x54,0xD6, 0x7C,0xC7, 0x20,0x00, 0x74,0xC7, 0x84,0xB9, 0x20,0x00, 0x85,0xC7, 0xC8,0xB2, 0xE4,0xB2, 0x2E,0x00, 0x64,0x00, 0x6F,0x00, 0x63,0x00, 0x00,0x00}; UINT length; /* Get the length of "my_unicode_name". */ length = fx_unicode_length_get(my_unicode_name); /* A value of 17 will be returned for the length of the "my_unicode_name". */ See Also fx_unicode_directory_create, fx_unicode_file_create, fx_unicode_length_get, fx_unicode_name_get, fx_unicode_short_name_get Express Logic, Inc. 180 FileX User Guide fx_unicode_name_get Gets Unicode name from short name G etting Unicode Nam e Prototype UINT fx_unicode_name_get(FX_MEDIA *media_ptr, CHAR *source_short_name, UCHAR *destination_unicode_name, ULONG *destination_unicode_length); Description This service retrieves the Unicode-name associated with the supplied short name (8.3 format) within the current default directory—no path information is allowed in the short name parameter. If successful, the Unicode name associated with the short name is returned by the service. ! This service can be used to get Unicode names for both files and subdirectories Input Parameters media_ptr source_short_name destination_unicode_name destination_unicode_length Pointer to media control block. Pointer to short name (8.3 format). Pointer to the destination for the Unicode name associated with the supplied short name. Maximum length of destination for the Unicode name. Note that if this length is less than the actual Unicode name, a not found error is returned. Return Values FX_SUCCESS (0x00) Successful Unicode name retrieval. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Short name was not found or the Unicode destination size is too small. FX_PTR_ERROR (0x18) Invalid media or name pointers. User Guide Getting Unicode Name 181 FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. Allowed From Threads Example FX_MEDIA UCHAR ram_disk; my_unicode_name[256*2]; /* Get the Unicode name associated with the short name "ABC0~111.TXT". Note that the Unicode destination must have 2 times the number of maximum characters in the name. */ length = fx_unicode_name_get(&ram_disk, "ABC0~111.TXT", my_unicode_name,256); /* If successful, the Unicode name is returned in "my_unicode_name". */ See Also fx_unicode_directory_create, fx_unicode_file_create, fx_unicode_length_get, fx_unicode_short_name_get Express Logic, Inc. 182 FileX User Guide fx_unicode_short_name_get Gets short name from Unicode name G etting Unicode Nam e Prototype UINT fx_unicode_short_name_get(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *destination_short_name) Description This service retrieves the short name (8.3 format) associated with the Unicode-name within the current default directory—no path information is allowed in the Unicode name parameter. If successful, the short name associated with the Unicode name is returned by the service. ! This service can be used to get short names for both files and subdirectories. Input Parameters media_ptr source_unicode_name source_unicode_length destination_short_name Pointer to media control block. Pointer to Unicode name. Length of Unicode name. Pointer to destination for the short name (8.3 format). This must be at least 13 bytes in size. Return Values FX_SUCCESS (0x00) Successful short name retrieval. FX_MEDIA_NOT_OPEN (0x11) Specified media is not open. FX_NOT_FOUND (0x04) Unicode name was not found. FX_PTR_ERROR (0x18) Invalid media or name pointers. FX_CALLER_ERROR (0x20) Caller is not a thread. FX_IO_ERROR (0x90) Driver I/O error. User Guide Getting Unicode Name 183 Allowed From Threads Example FX_MEDIA UCHAR UCHAR ram_disk; my_short_name[13]; my_unicode_name[] = {0x38,0xC1, 0x88,0xBC, 0xF8,0xC9, 0x20,0x00, 0x54,0xD6, 0x7C,0xC7, 0x20,0x00, 0x74,0xC7, 0x84,0xB9, 0x20,0x00, 0x85,0xC7, 0xC8,0xB2, 0xE4,0xB2, 0x2E,0x00, 0x64,0x00, 0x6F,0x00, 0x63,0x00, 0x00,0x00}; /* Get the short name associated with the Unicode name contained in the array "my_unicode_name". */ length = fx_unicode_short_name_get(&ram_disk, my_unicode_name, 17, my_short_name); /* If successful, the short name is returned in "my_short_name". */ See Also fx_unicode_directory_create, fx_unicode_file_create, fx_unicode_length_get, fx_unicode_name_get Express Logic, Inc. 184 FileX User Guide User Guide CHAPTER 5 I/O Drivers for FileX This chapter contains a description of I/O drivers for FileX and is designed to help developers write application-specific drivers. Following is a list of main topics covered: 1 I/O Driver Introduction 186 1 I/O Driver Entry 186 1 1 I/O Driver Requests 186 Driver Initialization 187 Boot Sector Read 187 Boot Sector Write 188 Sector Read 188 Sector Write 189 Driver Flush 190 Driver Abort 190 Release Sectors 191 Driver Suspension 191 Sector Translation 191 Hidden Sectors 192 Media Write Protect 192 Hidden Sectors 193 Media Write Protect 193 Sample RAM Driver 193 User Guide 186 FileX User Guide I/O Driver Introduction FileX supports multiple media devices. The FX_MEDIA structure defines everything required to manage a media device. This structure contains all media information, including the media-specific I/O driver and associated parameters for passing information and status between the driver and FileX. In most systems, there is a unique I/O driver for each FileX media instance. I/O Driver Entry Each FileX I/O driver has a single entry function that is defined by the fx_media_open service call. The driver entry function has the following format: void my_driver_entry(FX_MEDIA *media_ptr) FileX calls the I/O driver entry function to request all physical media access, including initialization and boot sector reading. Requests made to the driver are done sequentially; i.e., FileX waits for the current request to complete before another request is sent. I/O Driver Requests Because each I/O driver has a single entry function, FileX makes specific requests through the media control block. Specifically, the fx_media_driver_request member of FX_MEDIA is used to specify the exact driver request. The I/O driver communicates the success or failure of the request through the fx_media_driver_status member of FX_MEDIA. If the driver request was successful, FX_SUCCESS is placed in this field before the driver returns. Otherwise, if an error is detected, FX_IO_ERROR is placed in this field. User Guide I/O Drivers for FileX Driver Initialization 187 Although the actual driver initialization processing is application specific, it usually consists of data structure initialization and possibly some preliminary hardware initialization. This request is the first made by FileX and is done from within the fx_media_open service. If media write protection is detected, the driver fx_media_driver_write_protect member of FX_MEDIA should be set to FX_TRUE. The following FX_MEDIA members are used for the I/O driver initialization request: FX_IP_DRIVER member Meaning fx_media_driver_request FX_DRIVER_INIT FileX provides a mechanism to inform the application driver when sectors are no longer being used. This is especially useful for FLASH memory managers that must manage all in-use logical sectors mapped to the FLASH. If such notification of free sectors is required, the application driver simply sets the fx_media_driver_free_sector_update field in the associated FX_MEDIA structure to FX_TRUE. After set, FileX makes a FX_DRIVER_RELEASE_SECTORS I/O driver call indicating when one or more consecutive sectors becomes free. Boot Sector Read Instead of using a standard read request, FileX makes a specific request to read the media’s boot sector. The following FX_MEDIA members are used Express Logic, Inc. 188 FileX User Guide for the I/O driver boot sector read request: Boot Sector Write Sector Read FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_BOOT_READ fx_media_driver_buffer Address of destination for boot sector. Instead of using a standard write request, FileX makes a specific request to write the media's boot sector. The following FX_MEDIA members are used for the I/O driver boot sector write request: FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_BOOT_WRITE fx_media_driver_buffer Address of source for boot sector. FileX reads one or more sectors into memory by issuing a read request to the I/O driver. The following FX_MEDIA members are used for the I/O driver read request: FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_READ fx_media_driver_logical_sector Logical sector to read fx_media_driver_sectors Number of sectors to read fx_media_driver_buffer Destination buffer for sector(s) read User Guide I/O Drivers for FileX 189 FX_MEDIA member Meaning fx_media_driver_data_sector_read Set to FX_TRUE if a file data sector is requested. Otherwise, FX_FALSE if a system sector (FAT or directory sector is requested. fx_media_driver_sector_type Defines the explicit type of sector requested, as follows: FX_FAT_SECTOR (2) FX_DIRECTORY_SECTOR (3) FX_DATA_SECTOR (4) Sector Write FileX writes one or more sectors to the physical media by issuing a write request to the I/O driver. The following FX_MEDIA members are used for the I/O driver write request: FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_WRITE fx_media_driver_logical_sector Logical sector to write fx_media_driver_sectors Number of sectors to write fx_media_driver_buffer Source buffer for sector(s) to write Express Logic, Inc. 190 FileX User Guide FX_MEDIA member Meaning fx_media_driver_system_write Set to FX_TRUE if a system sector is requested (FAT or directory sector). Otherwise, FX_FALSE if a file data sector is requested. fx_media_driver_sector_type Defines the explicit type of sector requested, as follows: FX_FAT_SECTOR (2) FX_DIRECTORY_SECTOR (3) FX_DATA_SECTOR (4) Driver Flush Driver Abort FileX flushes all sectors currently in the driver’s sector cache to the physical media by issuing a flush request to the I/O driver. Of course, if the driver is not caching sectors, this request requires no driver processing. The following FX_MEDIA members are used for the I/O driver flush request: FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_FLUSH FileX informs the driver to abort all further physical I/O activity with the physical media by issuing an abort request to the I/O driver. The driver should not perform any I/O again until it is re-initialized. The following FX_MEDIA members are used for the I/O driver abort request: User Guide FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_ABORT I/O Drivers for FileX Release Sectors 191 If previously selected by the driver during initialization, FileX informs the driver whenever one or more consecutive sectors become free. If the driver is actually a FLASH manager, this information can be used to tell the FLASH manager that these sectors are no longer needed. The following FX_MEDIA members are used for the I/O release sectors request: FX_MEDIA member Meaning fx_media_driver_request FX_DRIVER_RELEASE_SECTORS fx_media_driver_logical_sector Start of free sector fx_media_driver_sectors Number of free sectors Driver Suspension Because I/O with physical media may take some time, suspending the calling thread is often desirable. Of course, this assumes completion of the underlying I/O operation is interrupt driven. If so, thread suspension is easily implemented with a ThreadX semaphore. After starting the input or output operation, the I/O driver suspends on its own internal I/O semaphore (created with an initial count of zero during driver initialization). As part of the driver I/O completion interrupt processing, the same I/O semaphore is set, which in turn wakes up the suspended thread. Sector Translation Because FileX views the media as linear logical sectors, I/O requests made to the I/O driver are made with logical sectors. It is the driver’s responsibility to translate between logical sectors and the physical geometry of the media, which may include heads, tracks, and physical sectors. For FLASH and RAM disk media, the logical sectors typically map directory to physical sectors. In any case, here are the typical formulas to perform the logical to physical sector Express Logic, Inc. 192 FileX User Guide mapping in the I/O driver: media_ptr -> fx_media_driver_physical_sector = (media_ptr -> fx_media_driver_logical_sector % media_ptr -> fx_media_sectors_per_track) + 1; media_ptr -> fx_media_driver_physical_head = (media_ptr -> fx_media_driver_logical_sector/ media_ptr -> fx_media_sectors_per_track) % media_ptr -> fx_media_heads; media_ptr -> fx_media_driver_physical_track = (media_ptr -> fx_media_driver_logical_sector/ (media_ptr -> fx_media_sectors_per_track * media_ptr -> fx_media_heads))); Note that physical sectors start at one, while logical sectors start at zero. Hidden Sectors Hidden sectors resided prior to the boot record on the media. Because they are really outside the scope of the FAT file system layout, they must be accounted for in each logical sector operation the driver does. Media Write Protect The FileX driver can turn on write protect by setting the fx_media_driver_write_protect field in the media control block. This will cause an error to be returned if any FileX calls are made in an attempt to write to the media. media_ptr -> fx_media_driver_physical_sector = (media_ptr -> fx_media_driver_logical_sector % media_ptr -> fx_media_sectors_per_track) + 1; media_ptr -> fx_media_driver_physical_head = (media_ptr -> fx_media_driver_logical_sector/ media_ptr -> fx_media_sectors_per_track) % media_ptr -> fx_media_heads; media_ptr -> fx_media_driver_physical_track = (media_ptr -> fx_media_driver_logical_sector/ (media_ptr -> fx_media_sectors_per_track * media_ptr -> fx_media_heads))); Note that physical sectors start at one, while logical sectors start at zero. User Guide I/O Drivers for FileX 193 Hidden Sectors Hidden sectors are located immediately in front of the boot record. Because they are really outside the scope of the DOS file system layout, they must be accounted for in each logical sector operation the driver does. Media Write Protect The FileX driver can turn on write protect by setting the fx_media_driver_write_protect field in the media control block. This will cause an error to be returned if any FileX calls are made in an attempt to write to the media. Sample RAM Driver The FileX demonstration system is delivered with a small RAM disk driver, which is defined in the file fx_ram_driver.c (shown on the following pages). The driver assumes a 32K memory space and creates a boot record for 256 128-byte sectors. This file provides a good example of how to implement application specific FileX I/O drivers. Express Logic, Inc. 194 FileX User Guide /**************************************************************************/ /* */ /* Copyright (c) 1996-2006 by Express Logic Inc. */ /* */ /* This software is copyrighted by and is the sole property of Express */ /* Logic, Inc. All rights, title, ownership, or other interests */ /* in the software remain the property of Express Logic, Inc. This */ /* software may only be used in accordance with the corresponding */ /* license agreement. Any unauthorized use, duplication, transmission, */ /* distribution, or disclosure of this software is expressly forbidden. */ /* */ /* This Copyright notice may not be removed or modified without prior */ /* written consent of Express Logic, Inc. */ /* */ /* Express Logic, Inc. reserves the right to modify this software */ /* without notice. */ /* */ /* Express Logic, Inc. info@expresslogic.com */ /* 11423 West Bernardo Court http://www.expresslogic.com */ /* San Diego, CA 92127 */ /* */ /**************************************************************************/ /**************************************************************************/ /**************************************************************************/ /** */ /** FileX Component */ /** */ /** RAM Disk Driver */ /** */ /**************************************************************************/ /**************************************************************************/ /* Include necessary system files. */ #include "tx_api.h" #include "fx_api.h" /* The RAM driver relies on the fx_media_format call to be made prior to the fx_media_open call. The following call will format the default 32KB RAM drive, with a sector size of 128 bytes per sector. fx_media_format(&ram_disk, _fx_ram_driver, ram_disk_memory, media_memory, sizeof(media_memory), "MY_RAM_DISK", 1, 32, 0, 256, 128, 1, 1, 1); */ VOID _fx_ram_driver(FX_MEDIA *media_ptr); User Guide // // // // // // // // // // // // // Driver entry RAM disk memory pointer Media buffer pointer Media buffer size Volume Name Number of FATs Directory Entries Hidden sectors Total sectors Sector size Sectors per cluster Heads Sectors per track I/O Drivers for FileX 195 /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _fx_ram_driver PORTABLE C */ /* 5.0 */ /* AUTHOR */ /* */ /* William E. Lamie, Express Logic, Inc. */ /* */ /* DESCRIPTION */ /* */ /* This function is the entry point to the generic RAM disk driver */ /* that is delivered with all versions of FileX. The format of the */ /* RAM disk is easily modified by calling fx_media_format prior */ /* to opening the media. */ /* */ /* This driver also serves as a template for developing FileX drivers */ /* for actual devices. Simply replace the read/write sector logic with */ /* calls to read/write from the appropriate physical device */ /* */ /* FileX RAM/FLASH structures look like the following: */ /* */ /* Physical Sector Contents */ /* */ /* 0 Boot record */ /* 1 FAT Area Start */ /* +FAT Sectors Root Directory Start */ /* +Directory Sectors Data Sector Start */ /* */ /* */ /* INPUT */ /* */ /* media_ptr Media control block pointer */ /* */ /* OUTPUT */ /* */ /* None */ /* */ /* CALLS */ /* */ /* _fx_utility_memory_copy Copy sector memory */ /* */ /* CALLED BY */ /* */ /* FileX System Functions */ /* */ /* RELEASE HISTORY */ /* */ /* DATE NAME DESCRIPTION */ /* */ /* 12-12-2005 William E. Lamie Initial Version 5.0 */ /* */ /**************************************************************************/ VOID _fx_ram_driver(FX_MEDIA *media_ptr) { UCHAR UCHAR UINT *source_buffer; *destination_buffer; bytes_per_sector; /* There are several useful/important pieces of information contained in the media structure, some of which are supplied by FileX and others are for the driver to setup. The following is a summary of the necessary FX_MEDIA structure members: FX_MEDIA Member fx_media_driver_request Meaning FileX request type. Valid requests from FileX are Express Logic, Inc. 196 FileX User Guide as follows: FX_DRIVER_READ FX_DRIVER_WRITE FX_DRIVER_FLUSH FX_DRIVER_ABORT FX_DRIVER_INIT FX_DRIVER_BOOT_READ FX_DRIVER_RELEASE_SECTORS FX_DRIVER_BOOT_WRITE FX_DRIVER_UNINIT fx_media_driver_status This value is RETURNED by the driver. If the operation is successful, this field should be set to FX_SUCCESS for before returning. Otherwise, if an error occurred, this field should be set to FX_IO_ERROR. fx_media_driver_buffer Pointer to buffer to read or write sector data. This is supplied by FileX. fx_media_driver_logical_sector Logical sector FileX is requesting. fx_media_driver_sectors Number of sectors FileX is requesting. The following is a summary of the optional FX_MEDIA structure members: FX_MEDIA Member Meaning fx_media_driver_info Pointer to any additional information or memory. This is optional for the driver use and is setup from the fx_media_open call. The RAM disk uses this pointer for the RAM disk memory itself. fx_media_driver_write_protect The DRIVER sets this to FX_TRUE when media is write protected. This is typically done in initialization, but can be done anytime. fx_media_driver_free_sector_update The DRIVER sets this to FX_TRUE when it needs to know when clusters are released. This is important for FLASH wear-leveling drivers. fx_media_driver_system_write FileX sets this flag to FX_TRUE if the sector being written is a system sector, e.g., a boot, FAT, or directory sector. The driver may choose to use this to initiate error recovery logic for greater fault tolerance. fx_media_driver_data_sector_read FileX sets this flag to FX_TRUE if the sector(s) being read are file data sectors, i.e., NOT system sectors. fx_media_driver_sector_type FileX sets this variable to the specific type of sector being read or written. The following sector types are identified: FX_UNKNOWN_SECTOR FX_BOOT_SECTOR FX_FAT_SECTOR FX_DIRECTORY_SECTOR FX_DATA_SECTOR */ /* Process the driver request specified in the media control block. switch(media_ptr -> fx_media_driver_request) { case FX_DRIVER_READ: { User Guide */ I/O Drivers for FileX 197 /* Calculate the RAM disk sector offset. Note the RAM disk memory is pointed to by the fx_media_driver_info pointer, which is supplied by the application in the call to fx_media_open. */ source_buffer = ((UCHAR *) media_ptr -> fx_media_driver_info) + ((media_ptr -> fx_media_driver_logical_sector + media_ptr -> fx_media_hidden_sectors) * media_ptr -> fx_media_bytes_per_sector); /* Copy the RAM sector into the destination. */ _fx_utility_memory_copy(source_buffer, media_ptr -> fx_media_driver_buffer, media_ptr -> fx_media_driver_sectors * media_ptr -> fx_media_bytes_per_sector); /* Successful driver request. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_WRITE: { /* Calculate the RAM disk sector offset. Note the RAM disk memory is pointed to by the fx_media_driver_info pointer, which is supplied by the application in the call to fx_media_open. */ destination_buffer = ((UCHAR *) media_ptr -> fx_media_driver_info) + ((media_ptr -> fx_media_driver_logical_sector + media_ptr -> fx_media_hidden_sectors) * media_ptr -> fx_media_bytes_per_sector); /* Copy the source to the RAM sector. */ _fx_utility_memory_copy(media_ptr -> fx_media_driver_buffer, destination_buffer, media_ptr -> fx_media_driver_sectors * media_ptr -> fx_media_bytes_per_sector); /* Successful driver request. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_FLUSH: { /* Return driver success. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_ABORT: { /* Return driver success. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_INIT: { /* FLASH drivers are responsible for setting several fields in the media structure, as follows: media_ptr -> fx_media_driver_free_sector_update media_ptr -> fx_media_driver_write_protect The fx_media_driver_free_sector_update flag is used to instruct FileX to inform the driver whenever sectors are not being used. This is especially useful for FLASH managers so they don't have maintain mapping for sectors no longer in use. The fx_media_driver_write_protect flag can be set anytime by the driver to indicate the media is not writable. Write attempts made when this flag is set are returned as errors. */ Express Logic, Inc. 198 FileX User Guide /* Perform basic initialization here... since the boot record is going to be read subsequently and again for volume name requests. */ /* Successful driver request. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_UNINIT: { /* There is nothing to do in this case for the RAM driver. devices some shutdown processing may be necessary. */ /* Successful driver request. */ media_ptr -> fx_media_driver_status = break; For actual FX_SUCCESS; } case FX_DRIVER_BOOT_READ: { /* Read the boot record and return to the caller. */ /* Calculate the RAM disk boot sector offset, which is at the very beginning of the RAM disk. Note the RAM disk memory is pointed to by the fx_media_driver_info pointer, which is supplied by the application in the call to fx_media_open. */ source_buffer = (UCHAR *) media_ptr -> fx_media_driver_info; /* For RAM driver, determine if the boot record is valid. if ((source_buffer[0] != (UCHAR) 0xEB) || (source_buffer[1] != (UCHAR) 0x34) || (source_buffer[2] != (UCHAR) 0x90)) { */ /* Invalid boot record, return an error! */ media_ptr -> fx_media_driver_status = FX_MEDIA_INVALID; return; } /* For RAM disk only, retrieve the bytes per sector. */ bytes_per_sector = _fx_utility_16_unsigned_read(&source_buffer[FX_BYTES_SECTOR]); /* Ensure this is less than the destination. */ /* Copy the RAM boot sector into the destination. */ _fx_utility_memory_copy(source_buffer, media_ptr -> fx_media_driver_buffer, bytes_per_sector); /* Successful driver request. */ media_ptr -> fx_media_driver_status = break; FX_SUCCESS; } case FX_DRIVER_BOOT_WRITE: { /* Write the boot record and return to the caller. */ /* Calculate the RAM disk boot sector offset, which is at the very beginning of the RAM disk. Note the RAM disk memory is pointed to by the fx_media_driver_info pointer, which is supplied by the application in the call to fx_media_open. */ destination_buffer = (UCHAR *) media_ptr -> fx_media_driver_info; /* Copy the RAM boot sector into the destination. */ _fx_utility_memory_copy(media_ptr -> fx_media_driver_buffer, destination_buffer, media_ptr -> fx_media_bytes_per_sector); /* Successful driver request. User Guide */ I/O Drivers for FileX media_ptr -> fx_media_driver_status = break ; 199 FX_SUCCESS; } default: { /* Invalid driver request. */ media_ptr -> fx_media_driver_status = break; FX_IO_ERROR; } } } Express Logic, Inc. 200 I/O Drivers for FileX User Guide APPENDIX A FileX Services 1 System Services 202 1 Media Services 202 1 Directory Services 203 1 File Services 204 1 Unicode Services 205 User Guide 202 System Services Media Services FileX User Guide UINT fx_system_date_get(UINT *year, UINT *month, UINT *day); UINT fx_system_date_set(UINT year, UINT month, UINT day); UINT fx_system_time_get(UINT *hour, UINT *minute, UINT *second); UINT fx_system_time_set(UINT hour, UINT minute, UINT second); VOID fx_system_initialize(VOID); UINT fx_media_abort(FX_MEDIA UINT fx_media_cache_invalidate(FX_MEDIA UINT fx_media_check(FX_MEDIA *media_ptr, UCHAR *scratch_memory_ptr, ULONG scratch_memory_size, ULONG error_correction_option, ULONG *errors_detected_ptr) UINT fx_media_close(FX_MEDIA *media_ptr); UINT fx_media_flush(FX_MEDIA *media_ptr); UINT fx_media_format(FX_MEDIA *media_ptr, VOID (*driver)(FX_MEDIA *media), VOID *driver_info_ptr, UCHAR *memory_ptr, UINT memory_size, CHAR *volume_name, UINT number_of_fats, UINT directory_entries, UINT hidden_sectors, ULONG total_sectors, UINT bytes_per_sector, UINT sectors_per_cluster, UINT heads, UINT sectors_per_track); UINT fx_media_open(FX_MEDIA *media_ptr, CHAR *media_name, VOID (*media_driver)(FX_MEDIA *), VOID *driver_info_ptr, VOID *memory_ptr, ULONG memory_size); UINT fx_media_read(FX_MEDIA *media_ptr, ULONG logical_sector, VOID *buffer_ptr); UINT fx_media_space_available(FX_MEDIA *media_ptr, ULONG *available_bytes_ptr); UINT fx_media_volume_get(FX_MEDIA *media_ptr, CHAR *volume_name, UINT volume_source); UINT fx_media_volume_set(FX_MEDIA *media_ptr, CHAR *volume_name); User Guide *media_ptr); *media_ptr); FileX Services Directory Services 203 UINT fx_media_write(FX_MEDIA *media_ptr, ULONG logical_sector, VOID *buffer_ptr); UINT fx_directory_attributes_read(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes_ptr); UINT fx_directory_attributes_set(FX_MEDIA *media_ptr, CHAR *directory_name, UINT attributes); UINT fx_directory_create(FX_MEDIA *media_ptr, CHAR *directory_name); UINT fx_directory_default_get(FX_MEDIA *media_ptr, CHAR **return_path_name); UINT fx_directory_default_set(FX_MEDIA *media_ptr, CHAR *new_path_name); UINT fx_directory_delete(FX_MEDIA *media_ptr, CHAR *directory_name); UINT fx_directory_first_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name); UINT fx_directory_first_full_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second); UINT fx_directory_information_get(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second); UINT fx_directory_local_path_clear(FX_MEDIA *media_ptr); UINT fx_directory_local_path_get(FX_MEDIA *media_ptr, CHAR **return_path_name); UINT fx_directory_local_path_restore(FX_MEDIA *media_ptr, FX_LOCAL_PATH *local_path_ptr); UINT fx_directory_local_path_set(FX_MEDIA *media_ptr, FX_LOCAL_PATH *local_path_ptr, CHAR *new_path_name); UINT fx_directory_long_name_get(FX_MEDIA *media_ptr, CHAR *short_name, CHAR *long_name); Express Logic, Inc. 204 File Services FileX User Guide UINT fx_directory_name_test(FX_MEDIA *media_ptr, CHAR *directory_name); UINT fx_directory_next_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name); UINT fx_directory_next_full_entry_find(FX_MEDIA *media_ptr, CHAR *directory_name, UINT *attributes, ULONG *size, UINT *year, UINT *month, UINT *day, UINT *hour, UINT *minute, UINT *second); UINT fx_directory_rename(FX_MEDIA *media_ptr, CHAR *old_directory_name, CHAR *new_directory_name); UINT fx_directory_short_name_get(FX_MEDIA *media_ptr, CHAR *long_name, CHAR *short_name); UINT fx_file_allocate(FX_FILE *file_ptr, ULONG size); UINT fx_file_attributes_read(FX_MEDIA *media_ptr, CHAR *file_name, UINT *attributes_ptr); UINT fx_file_attributes_set(FX_MEDIA *media_ptr, CHAR *file_name, UINT attributes); UINT fx_file_best_effort_allocate(FX_FILE *file_ptr, ULONG size, ULONG *actual_size_allocated); UINT fx_file_close(FX_FILE *file_ptr); UINT fx_file_create(FX_MEDIA *media_ptr, CHAR *file_name); UINT fx_file_date_time_set(FX_MEDIA *media_ptr, CHAR *file_name, UINT year, UINT month, UINT day, UINT hour, UINT minute, UINT second); UINT fx_file_delete(FX_MEDIA *media_ptr, CHAR *file_name); UINT fx_file_open(FX_MEDIA *media_ptr, FX_FILE *file_ptr, CHAR *file_name, UINT open_type); UINT fx_file_read(FX_FILE *file_ptr, VOID *buffer_ptr, ULONG request_size, ULONG *actual_size); User Guide FileX Services Unicode Services 205 UINT fx_file_relative_seek(FX_FILE *file_ptr, ULONG byte_offset, UINT seek_from); UINT fx_file_rename(FX_MEDIA *media_ptr, CHAR *old_file_name, CHAR *new_file_name); UINT fx_file_seek(FX_FILE *file_ptr, ULONG byte_offset); UINT fx_file_truncate(FX_FILE *file_ptr, ULONG size); UINT fx_file_truncate_release(FX_FILE *file_ptr, ULONG size); UINT fx_file_write(FX_FILE *file_ptr, VOID *buffer_ptr, ULONG size); UINT fx_unicode_directory_create(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *short_name); UINT fx_unicode_file_create(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *short_name); ULONG fx_unicode_length_get(UCHAR *unicode_name); UINT fx_unicode_name_get(FX_MEDIA *media_ptr, CHAR *source_short_name, UCHAR *destination_unicode_name, ULONG *destination_unicode_length); UINT fx_unicode_short_name_get(FX_MEDIA *media_ptr, UCHAR *source_unicode_name, ULONG source_unicode_length, CHAR *destination_short_name); Express Logic, Inc. 206 FileX Services User Guide APPENDIX B FileX Constants 1 Alphabetic Listings 208 1 Listings by Value 213 User Guide 208 Alphabetic Listings FileX User Guide FX_12_BIT_FAT_SIZE 4086 FX_12BIT_SIZE 3 FX_16_BIT_FAT_SIZE 65525 FX_ACCESS_ERROR 0x06 FX_ALREADY_CREATED 0x0B FX_ARCHIVE 0x20 FX_BAD_CLUSTER 0xFFF7 FX_BAD_CLUSTER_32 0x0FFFFFF7 FX_BASE_YEAR 1980 FX_BOOT_ERROR 0x01 FX_BOOT_SECTOR 1 FX_BOOT_SECTOR_SIZE 512 FX_BOOT_SIG 0x026 FX_BUFFER_ERROR 0x21 FX_BYTES_SECTOR 0x00B FX_CALLER_ERROR 0x20 FX_DATA_SECTOR 4 FX_DAY_MASK 0x1F FX_DIR_ENTRY_DONE 0x00 FX_DIR_ENTRY_FREE 0xE5 FX_DIR_ENTRY_SIZE 32 FX_DIR_EXT_SIZE 3 FX_DIR_NAME_SIZE 8 FX_DIR_NOT_EMPTY 0x10 FX_DIR_RESERVED 8 FX_DIRECTORY 0x10 FX_DIRECTORY_ERROR 0x02 FX_DIRECTORY_SECTOR 3 FX_DRIVE_NUMBER 0x024 FX_DRIVER_ABORT 3 FX_DRIVER_BOOT_READ 5 User Guide FileX Constants 209 FX_DRIVER_BOOT_WRITE 7 FX_DRIVER_FLUSH 2 FX_DRIVER_INIT 4 FX_DRIVER_READ 0 FX_DRIVER_RELEASE_SECTORS 6 FX_DRIVER_UNINIT 8 FX_DRIVER_WRITE 1 FX_END_OF_FILE 0x09 FX_ERROR_FIXED 0x92 FX_ERROR_NOT_FIXED 0x93 FX_FALSE 0 FX_FAT_CACHE_DEPTH 4 FX_FAT_CACHE_HASH_MASK 0x3 FX_FAT_CHAIN_ERROR 0x01 FX_FAT_ENTRY_START 2 FX_FAT_MAP_SIZE 128 FX_FAT_READ_ERROR 0x03 FX_FAT_SECTOR 2 FX_FILE_ABORTED_ID 0x46494C41UL FX_FILE_CLOSED_ID 0x46494C43UL FX_FILE_CORRUPT 0x08 FX_FILE_ID 0x46494C45UL FX_FILE_SIZE_ERROR 0x08 FX_FILE_SYSTEM_TYPE 0x036 FX_FREE_CLUSTER 0x0000 FX_HEADS 0x01A FX_HIDDEN 0x02 FX_HIDDEN_SECTORS 0x01C FX_HOUR_SHIFT 11 FX_HOUR_MASK 0x1F FX_HUGE_SECTORS 0x020 Express Logic, Inc. 210 FileX User Guide FX_INITIAL_DATE 0x338C FX_INITIAL_TIME 0x0000 FX_INVALID_ATTR 0x19 FX_INVALID_DAY 0x14 FX_INVALID_HOUR 0x15 FX_INVALID_MINUTE 0x16 FX_INVALID_MONTH 0x13 FX_INVALID_NAME 0x0C FX_INVALID_OPTION 0x24 FX_INVALID_PATH 0x0D FX_INVALID_SECOND 0x17 FX_INVALID_YEAR 0x12 FX_IO_ERROR 0x90 FX_JUMP_INSTR 0x000 FX_LAST_CLUSTER_1 0xFFF8 FX_LAST_CLUSTER_1_32 0x0FFFFFF8 FX_LAST_CLUSTER_2 0xFFFF FX_LAST_CLUSTER_2_32 0x0FFFFFFF FX_LONG_NAME 0xF FX_LONG_NAME_ENTRY_LEN 13 FX_LOST_CLUSTER_ERROR 0x04 FX_MAX_12BIT_CLUST 0x0FF0 FX_MAX_FAT_CACHE 16 FX_MAX_LAST_NAME_LEN 66 FX_MAX_LONG_NAME_LEN 33 FX_MAX_SECTOR_CACHE 16 FX_MAX_SHORT_NAME_LEN 13 FX_MAXIMUM_HOUR 23 FX_MAXIMUM_MINUTE ‘ 59 FX_MAXIMUM_MONTH 12 FX_MAXIMUM_PATH 256 User Guide FileX Constants 211 FX_MAXIMUM_SECOND 59 FX_MAXIMUM_YEAR 2107 FX_MEDIA_ABORTED_ID 0x4D454441UL FX_MEDIA_CLOSED_ID 0x4D454443UL FX_MEDIA_ID 0x4D454449UL FX_MEDIA_INVALID 0x02 FX_MEDIA_NOT_OPEN 0x11 FX_MEDIA_TYPE 0x015 FX_MINUTE_SHIFT 5 FX_MINUTE_MASK 0x3F FX_MONTH_SHIFT 5 FX_MONTH_MASK 0x0F FX_NO_MORE_ENTRIES 0x0F FX_NO_MORE_SPACE 0x0A FX_NOT_A_FILE 0x05 FX_NOT_DIRECTORY 0x0E FX_NOT_ENOUGH_MEMORY 0x91 FX_NOT_FOUND 0x04 FX_NOT_IMPLEMENTED 0x22 FX_NOT_OPEN 0x07 FX_NOT_USED 0x0001 FX_NULL 0 FX_NUMBER_OF_FATS 0x010 FX_OEM_NAME 0x003 FX_OPEN_FOR_READ 0 FX_OPEN_FOR_READ_FAST 2 FX_OPEN_FOR_WRITE 1 FX_PTR_ERROR 0x18 FX_READ_ONLY 0x01 FX_RESERVED 0x025 FX_RESERVED_1 0xFFF0 Express Logic, Inc. 212 FileX User Guide FX_RESERVED_1_32 0x0FFFFFF0 FX_RESERVED_2 0xFFF6 FX_RESERVED_2_32 0x0FFFFFF6 FX_RESERVED_SECTORS 0x00E FX_ROOT_CLUSTER_32 0x02C FX_ROOT_DIR_ENTRIES 0x011 FX_SECOND_MASK 0x1F FX_SECTOR_CACHE_DEPTH 4 FX_SECTOR_CACHE_HASH_ENABLE16 FX_SECTOR_CACHE_HASH_MASK 0x3 FX_SECTOR_INVALID 0x89 FX_SECTORS_CLUSTER 0x00D FX_SEEK_BACK 3 FX_SEEK_BEGIN 0 FX_SEEK_END 1 FX_SEEK_FORWARD 2 FX_SECTORS 0x013 FX_SECTORS_PER_FAT 0x016 FX_SECTORS_PER_FAT_32 0x024 FX_SECTORS_PER_TRK 0x018 FX_SIG_BYTE_1 0x55 FX_SIG_BYTE_2 0xAA FX_SIG_OFFSET 0x1FE FX_SIGN_EXTEND 0xF000 FX_SUCCESS 0x00 FX_SYSTEM 0x04 FX_TRUE 1 FX_UNKNOWN_SECTOR 0 FX_VOLUME 0x08 FX_VOLUME_ID 0x027 FX_VOLUME_LABEL 0x02B User Guide FileX Constants Listings by Value 213 FX_WRITE_PROTECT 0x23 FX_YEAR_SHIFT 9 FX_YEAR_MASK 0x7F FX_DIR_ENTRY_DONE 0x00 FX_DRIVER_READ 0 FX_FALSE 0 FX_FREE_CLUSTER 0x0000 FX_INITIAL_TIME 0x0000 FX_JUMP_INSTR 0x000 FX_NULL 0 FX_OPEN_FOR_READ 0 FX_SEEK_BEGIN 0 FX_SUCCESS 0x00 FX_UNKNOWN_SECTOR 0 FX_BOOT_ERROR 0x01 FX_BOOT_SECTOR 1 FX_DRIVER_WRITE 1 FX_FAT_CHAIN_ERROR 0x01 FX_NOT_USED 0x0001 FX_OPEN_FOR_WRITE 1 FX_READ_ONLY 0x01 FX_SEEK_END 1 FX_TRUE 1 FX_DIRECTORY_ERROR 0x02 FX_DRIVER_FLUSH 2 FX_FAT_ENTRY_START 2 FX_FAT_SECTOR 2 FX_HIDDEN 0x02 FX_MEDIA_INVALID 0x02 Express Logic, Inc. 214 FileX User Guide FX_OPEN_FOR_READ_FAST 2 FX_SEEK_FORWARD 2 FX_12BIT_SIZE 3 FX_DIR_EXT_SIZE 3 FX_DIRECTORY_SECTOR 3 FX_DRIVER_ABORT 3 FX_FAT_CACHE_HASH_MASK 0x3 FX_FAT_READ_ERROR 0x03 FX_OEM_NAME 0x003 FX_SECTOR_CACHE_HASH_MASK 0x3 FX_SEEK_BACK 3 FX_DATA_SECTOR 4 FX_DRIVER_INIT 4 FX_FAT_CACHE_DEPTH 4 FX_LOST_CLUSTER_ERROR 0x04 FX_NOT_FOUND 0x04 FX_SECTOR_CACHE_DEPTH 4 FX_SYSTEM 0x04 FX_DRIVER_BOOT_READ 5 FX_MINUTE_SHIFT 5 FX_MONTH_SHIFT 5 FX_NOT_A_FILE 0x05 FX_ACCESS_ERROR 0x06 FX_DRIVER_RELEASE_SECTORS 6 FX_DRIVER_BOOT_WRITE 7 FX_NOT_OPEN 0x07 FX_DIR_NAME_SIZE 8 FX_DIR_RESERVED 8 FX_DRIVER_UNINIT 8 FX_FILE_CORRUPT 0x08 FX_FILE_SIZE_ERROR 0x08 User Guide FileX Constants 215 FX_VOLUME 0x08 FX_END_OF_FILE 0x09 FX_YEAR_SHIFT 9 FX_NO_MORE_SPACE 0x0A FX_ALREADY_CREATED 0x0B FX_BYTES_SECTOR 0x00B FX_HOUR_SHIFT 11 FX_INVALID_NAME 0x0C FX_MAXIMUM_MONTH 12 FX_INVALID_PATH 0x0D FX_SECTORS_CLUSTER 0x00D FX_LONG_NAME_ENTRY_LEN 13 FX_MAX_SHORT_NAME_LEN 13 FX_NOT_DIRECTORY 0x0E FX_RESERVED_SECTORS 0x00E FX_LONG_NAME 0xF FX_MONTH_MASK 0x0F FX_NO_MORE_ENTRIES 0x0F FX_DIR_NOT_EMPTY 0x10 FX_DIRECTORY 0x10 FX_MAX_FAT_CACHE 16 FX_MAX_SECTOR_CACHE 16 FX_NUMBER_OF_FATS 0x010 FX_SECTOR_CACHE_HASH_ENABLE16 FX_MEDIA_NOT_OPEN 0x11 FX_ROOT_DIR_ENTRIES 0x011 FX_INVALID_YEAR 0x12 FX_INVALID_MONTH 0x13 FX_SECTORS 0x013 FX_INVALID_DAY 0x14 FX_INVALID_HOUR 0x15 Express Logic, Inc. 216 FileX User Guide FX_MEDIA_TYPE 0x015 FX_INVALID_MINUTE 0x16 FX_SECTORS_PER_FAT 0x016 FX_INVALID_SECOND 0x17 FX_MAXIMUM_HOUR 23 FX_PTR_ERROR 0x18 FX_SECTORS_PER_TRK 0x018 FX_INVALID_ATTR 0x19 FX_HEADS 0x01A FX_HIDDEN_SECTORS 0x01C FX_DAY_MASK 0x1F FX_HOUR_MASK 0x1F FX_SECOND_MASK 0x1F FX_ARCHIVE 0x20 FX_CALLER_ERROR 0x20 FX_DIR_ENTRY_SIZE 32 FX_HUGE_SECTORS 0x020 FX_BUFFER_ERROR 0x21 FX_MAX_LONG_NAME_LEN 33 FX_NOT_IMPLEMENTED 0x22 FX_WRITE_PROTECT 0x23 FX_DRIVE_NUMBER 0x024 FX_INVALID_OPTION 0x24 FX_SECTORS_PER_FAT_32 0x024 FX_RESERVED 0x025 FX_BOOT_SIG 0x026 FX_VOLUME_ID 0x027 FX_VOLUME_LABEL 0x02B FX_ROOT_CLUSTER_32 0x02C FX_FILE_SYSTEM_TYPE 0x036 FX_MAXIMUM_MINUTE 59 User Guide FileX Constants 217 FX_MAXIMUM_SECOND 59 FX_MINUTE_MASK 0x3F FX_MAX_LAST_NAME_LEN 66 FX_SIG_BYTE_1 0x55 FX_YEAR_MASK 0x7F FX_FAT_MAP_SIZE 128 FX_SECTOR_INVALID 0x89 FX_IO_ERROR 0x90 FX_NOT_ENOUGH_MEMORY 0x91 FX_ERROR_FIXED 0x92 FX_ERROR_NOT_FIXED 0x93 FX_SIG_BYTE_2 0xAA FX_DIR_ENTRY_FREE 0xE5 FX_MAXIMUM_PATH 256 FX_SIG_OFFSET 0x1FE FX_BOOT_SECTOR_SIZE 512 FX_BASE_YEAR 1980 FX_MAXIMUM_YEAR 2107 FX_MAX_12BIT_CLUST 0x0FF0 FX_12_BIT_FAT_SIZE 4086 FX_INITIAL_DATE 0x338C FX_SIGN_EXTEND 0xF000 FX_RESERVED_1 0xFFF0 FX_16_BIT_FAT_SIZE 65525 FX_RESERVED_2 0xFFF6 FX_BAD_CLUSTER 0xFFF7 FX_LAST_CLUSTER_1 0xFFF8 FX_LAST_CLUSTER_2 0xFFFF FX_RESERVED_1_32 0x0FFFFFF0 FX_RESERVED_2_32 0x0FFFFFF6 FX_BAD_CLUSTER_32 0x0FFFFFF7 Express Logic, Inc. 218 FileX User Guide FX_LAST_CLUSTER_1_32 0x0FFFFFF8 FX_LAST_CLUSTER_2_32 0x0FFFFFFF FX_FILE_ABORTED_ID 0x46494C41UL FX_FILE_CLOSED_ID 0x46494C43UL FX_FILE_ID 0x46494C45UL FX_MEDIA_ABORTED_ID 0x4D454441UL FX_MEDIA_CLOSED_ID 0x4D454443UL FX_MEDIA_ID 0x4D454449UL User Guide APPENDIX C FileX Data Types 1 FX_DIR_ENTRY 220 1 FX_PATH 220 1 FX_CACHED_SECTOR 220 1 FX_MEDIA 221 1 FX_FILE 223 User Guide 220 FileX User Guide FX_DIR_ENTRY typedef struct FX_DIR_ENTRY_STRUCT { CHAR *fx_dir_entry_name; CHAR fx_dir_entry_short_name[FX_MAX_SHORT_NAME_LEN]; UINT fx_dir_entry_long_name_present; UINT fx_dir_entry_long_name_shorted; UCHAR fx_dir_entry_attributes; UCHAR fx_dir_entry_reserved; UCHAR fx_dir_entry_created_time_ms; UINT fx_dir_entry_created_time; UINT fx_dir_entry_created_date; UINT fx_dir_entry_last_accessed_date; UINT fx_dir_entry_time; UINT fx_dir_entry_date; ULONG fx_dir_entry_cluster; ULONG fx_dir_entry_file_size; ULONG fx_dir_entry_log_sector; ULONG fx_dir_entry_byte_offset; ULONG fx_dir_entry_number; ULONG fx_dir_entry_last_search_cluster; ULONG fx_dir_entry_last_search_relative_cluster; ULONG fx_dir_entry_last_search_log_sector; ULONG fx_dir_entry_last_search_byte_offset; } FX_DIR_ENTRY; FX_PATH typedef struct FX_PATH_STRUCT { FX_DIR_ENTRY fx_path_directory; CHAR fx_path_string[FX_MAXIMUM_PATH]; CHAR fx_path_name_buffer[FX_MAX_LONG_NAME_LEN]; ULONG fx_path_current_entry; } FX_PATH; typedef FX_PATH FX_LOCAL_PATH; FX_CACHED_SECTOR typedef struct FX_CACHED_SECTOR_STRUCT { UCHAR *fx_cached_sector_memory_buffer; ULONG fx_cached_sector; UCHAR fx_cached_sector_buffer_dirty; UCHAR fx_cached_sector_valid; UCHAR fx_cached_sector_type; UCHAR fx_cached_sector_reserved; struct FX_CACHED_SECTOR_STRUCT *fx_cached_sector_next_used; } FX_CACHED_SECTOR; User Guide 221 FX_MEDIA typedef struct FX_MEDIA_STRUCT { ULONG fx_media_id; CHAR *fx_media_name; UCHAR *fx_media_memory_buffer; ULONG fx_media_memory_size; UINT fx_media_sector_cache_hashed; ULONG fx_media_sector_cache_size; UCHAR *fx_media_sector_cache_end; struct FX_CACHED_SECTOR_STRUCT *fx_media_sector_cache_list_ptr; ULONG fx_media_sector_cache_hashed_sector_valid; ULONG fx_media_sector_cache_dirty_count; UINT fx_media_bytes_per_sector; UINT fx_media_sectors_per_track; UINT fx_media_heads; ULONG fx_media_total_sectors; ULONG fx_media_total_clusters; UINT fx_media_reserved_sectors; UINT fx_media_root_sector_start; UINT fx_media_root_sectors; UINT fx_media_data_sector_start; UINT fx_media_sectors_per_cluster; UINT fx_media_sectors_per_FAT; UINT fx_media_number_of_FATs; UINT fx_media_12_bit_FAT; UINT fx_media_32_bit_FAT; ULONG fx_media_FAT32_additional_info_sector; UINT fx_media_FAT32_additional_info_last_available; ULONG fx_media_hidden_sectors; ULONG fx_media_root_cluster_32; UINT fx_media_root_directory_entries; ULONG fx_media_available_clusters; ULONG fx_media_cluster_search_start; VOID *fx_media_driver_info; UINT fx_media_driver_request; UINT fx_media_driver_status; UCHAR *fx_media_driver_buffer; ULONG fx_media_driver_logical_sector; ULONG fx_media_driver_sectors; ULONG fx_media_driver_physical_sector; UINT fx_media_driver_physical_track; UINT fx_media_driver_physical_head; UINT fx_media_driver_write_protect; UINT fx_media_driver_free_sector_update; UINT fx_media_driver_system_write; UINT fx_media_driver_data_sector_read; UINT fx_media_driver_sector_type; Express Logic, Inc. 222 FileX User Guide VOID (*fx_media_driver_entry)(struct FX_MEDIA_STRUCT *); struct FX_FILE_STRUCT *fx_media_opened_file_list; ULONG fx_media_opened_file_count; struct FX_MEDIA_STRUCT *fx_media_opened_next, *fx_media_opened_previous; #ifndef FX_MEDIA_STATISTICS_DISABLE ULONG fx_media_directory_attributes_reads; ULONG fx_media_directory_attributes_sets; ULONG fx_media_directory_creates; ULONG fx_media_directory_default_gets; ULONG fx_media_directory_default_sets; ULONG fx_media_directory_deletes; ULONG fx_media_directory_first_entry_finds; ULONG fx_media_directory_first_full_entry_finds; ULONG fx_media_directory_information_gets; ULONG fx_media_directory_local_path_clears; ULONG fx_media_directory_local_path_gets; ULONG fx_media_directory_local_path_restores; ULONG fx_media_directory_local_path_sets; ULONG fx_media_directory_name_tests; ULONG fx_media_directory_next_entry_finds; ULONG fx_media_directory_next_full_entry_finds; ULONG fx_media_directory_renames; ULONG fx_media_file_allocates; ULONG fx_media_file_attributes_reads; ULONG fx_media_file_attributes_sets; ULONG fx_media_file_best_effort_allocates; ULONG fx_media_file_closes; ULONG fx_media_file_creates; ULONG fx_media_file_deletes; ULONG fx_media_file_opens; ULONG fx_media_file_reads; ULONG fx_media_file_relative_seeks; ULONG fx_media_file_renames; ULONG fx_media_file_seeks; ULONG fx_media_file_truncates; ULONG fx_media_file_truncate_releases; ULONG fx_media_file_writes; ULONG fx_media_aborts; ULONG fx_media_flushes; ULONG fx_media_reads; ULONG fx_media_writes; ULONG fx_media_directory_entry_reads; ULONG fx_media_directory_entry_writes; ULONG fx_media_directory_searches; ULONG fx_media_directory_free_searches; ULONG fx_media_fat_entry_reads; User Guide 223 ULONG fx_media_fat_entry_writes; ULONG fx_media_fat_entry_cache_read_hits; ULONG fx_media_fat_entry_cache_read_misses; ULONG fx_media_fat_entry_cache_write_hits; ULONG fx_media_fat_entry_cache_write_misses; ULONG fx_media_fat_cache_flushes; ULONG fx_media_fat_sector_reads; ULONG fx_media_fat_sector_writes; ULONG fx_media_logical_sector_reads; ULONG fx_media_logical_sector_writes; ULONG fx_media_logical_sector_cache_read_hits; ULONG fx_media_logical_sector_cache_read_misses; ULONG fx_media_driver_read_requests; ULONG fx_media_driver_write_requests; ULONG fx_media_driver_boot_read_requests; ULONG fx_media_driver_boot_write_requests; ULONG fx_media_driver_release_sectors_requests; ULONG fx_media_driver_flush_requests; #ifndef FX_MEDIA_DISABLE_SEARCH_CACHE ULONG fx_media_directory_search_cache_hits; #endif #endif #ifndef FX_SINGLE_THREAD TX_MUTEX fx_media_protect; #endif #ifndef FX_MEDIA_DISABLE_SEARCH_CACHE UINT fx_media_last_found_directory_valid; FX_DIR_ENTRY fx_media_last_found_directory; FX_DIR_ENTRY fx_media_last_found_entry; CHAR fx_media_last_found_file_name[FX_MAX_LONG_NAME_LEN]; CHAR fx_media_last_found_name[FX_MAX_LAST_NAME_LEN]; #endif FX_PATH fx_media_default_path; FX_FAT_CACHE_ENTRY fx_media_fat_cache[FX_MAX_FAT_CACHE]; UCHAR fx_media_fat_secondary_update_map[FX_FAT_MAP_SIZE]; ULONG fx_media_reserved_for_user; CHAR fx_media_name_buffer[4*FX_MAX_LONG_NAME_LEN]; #ifdef FX_RENAME_PATH_INHERIT CHAR fx_media_rename_buffer[FX_MAXIMUM_PATH+FX_MAX_LONG_NAME_LEN]; #endif struct FX_CACHED_SECTOR_STRUCT fx_media_sector_cache[FX_MAX_SECTOR_CACHE]; } FX_MEDIA; FX_FILE typedef struct FX_FILE_STRUCT { ULONG fx_file_id; CHAR *fx_file_name; Express Logic, Inc. 224 FileX User Guide UCHAR UCHAR ULONG ULONG ULONG ULONG ULONG ULONG ULONG ULONG ULONG ULONG ULONG ULONG FX_MEDIA struct FX_FILE_STRUCT FX_DIR_ENTRY CHAR } FX_FILE; fx_file_open_mode; fx_file_modified; fx_file_total_clusters; fx_file_first_physical_cluster; fx_file_consecutive_cluster; fx_file_last_physical_cluster; fx_file_current_physical_cluster; fx_file_current_logical_sector; fx_file_current_logical_offset; fx_file_current_relative_cluster; fx_file_current_relative_sector; fx_file_current_file_offset; fx_file_current_file_size; fx_file_current_available_size; *fx_file_media_ptr; *fx_file_opened_next, *fx_file_opened_previous; fx_file_dir_entry; fx_file_name_buffer[FX_MAX_LONG_NAME_LEN]; User Guide APPENDIX D ASCII Character Codes User Guide 226 FileX User Guide ASCII Character Codes in HEX less significant nibble more significant nibble 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ _0 NUL DLE SP 0 @ P ' p _1 SOH DC1 ! 1 A Q a q _2 STX DC2 " 2 B R b r _3 ETX DC3 # 3 C S c s _4 EOT DC4 $ 4 D T d t _5 ENQ NAK % 5 E U e u _6 ACK SYN & 6 F V f v _7 BEL ETB ' 7 G W g w _8 BS CAN ( 8 H X h x _9 HT EM ) 9 I Y i y _A LF SUB * : J Z j z _B VT ESC + ; K [ K } _C FF FS , < L \ l | _D CR GS - = M ] m } _E SO RS . > N ^ n ~ _F SI US / ? O _ o DEL User Guide INDEX Index Symbols _fx_system_date 53 _fx_system_initialize 54 _fx_system_time 54 _fx_version_id 31 Numerics 12-bit FAT entries 40 16-bit FAT entries 40 32-bit FAT entries 40 32K memory space 193 A abort media activities 136 abort request to I/O driver 190 allocate space for a file 104, 110 ANSI C source code 18 API use 20 ASCII character codes in HEX 226 ASCII format 24 attribute field of a directory entry 44 B Background Debug Mode 24 BDM 24 best effort to allocate space for a file 110 boot record 193 boot record on media 192, 193 boot sector read 186, 187 building a FileX application 27 built-in performance statistics 19 byte offset position to 128 position to relative 124 bytes read from file 122 write to file 134 bytes per sector 36 C C compilers 13 C function 53 C include files 27 calling thread’s stack 43, 53 chain of clusters 41 CHAR definition 13 check media for errors 140 clear default local path 82 close file 112 media 144 compile application source 27 completion of I/O operation 191 computer type 24 consecutive sector and cluster read/ write 19 contiguous file allocation 18, 19 contiguous file support 19, 19 control block 43 create file 114 subdirectory 66 Unicode directory 174 Unicode file 176 creation of the FileX periodic timer 54 Customer Support Center 14, 15 D data flush to physical media 146 User Guide 228 FileX User Guide data structure initialization 187 data structures FileX 27 date field 45 debugging tools 24 delete file 118 subdirectory 72 demo_filex.c 26 demonstration application 28 demonstration system 19 description of FileX services 57 deterministic access 20 deterministic file access time 19 diagnostic 38 directory get last default 68 rename 100 set default 70 test for 92 directory attribute definitions 44 directory attribute specification 50 directory attributes 44 read 62 directory date 45 directory description 43 directory entry attribute field of 44 get first 74 get first full 76 get information 80 get next full 96 retrieve next 94 directory extension 44 directory extension field 44 directory file size 46 directory name 43 directory services 203 directory starting cluster 45 directory time 45 disk size requirements 24 disk-type media 39, 39 User Guide distribution contents 25 DOS file system layout 192, 193 download interfaces 24 driver abort 190 driver entry function 186 driver flush 190 driver I/O completion interrupt processing 191 driver initialization 187 driver suspension 191 dynamic creation 20 dynamic FileX object creation/deletion 18 dynamic system resource creation 20 dynamically allocated memory 43, 53 E easy integration 20 embedded applications 17 enabling write protection 42 endian neutral 18 entries in the internal FAT cache number of 30 error detection and recovery 19 execution initialization 52, 55 execution overview 35 F FAT format media 17 formats supported 18 support 18 update map size 30 FAT 12 formats 49 FAT 16 file example 55 FAT 16 subdirectory 52 FAT 16-bit formats 49 FAT compatible file system 38 FAT entry contents 40 FAT32 root directory 38 fault tolerant options 19 Index file close 112 create 114 delete 118 open 120 rename 126 truncate and release cluster 132 file access 51 file allocation 51 contiguous 18, 19 File Allocation Table (FAT) 38, 40 file attributes read 106, 106 set 108 file control block 52 file control block FX_FILE 53 file date and time set 116 file description 51 file management system 17 file name extension 44 file name size 43 file services 204 file size field 46 file system get date 164 initialize entire 168 file time-stamping 54 FILE.TXT 51 file-name support long 18 FileX constants 207 contiguous file support 20 data structures 27 data types 13, 219 demonstration system 193 distribution disk 26 highlights 18 I/O drivers 18, 39, 193 initialization 27 installation 23, 26 installing 26 229 library 42 logical sector cache 19 media logical sector view 36 names 26 objects 18 run-time library 26 services 19, 27 unique features 18 version ID 31 FileX constants alphabetic listings 208 listings by value 213 FileX error checking API removing 29 FileX periodic timer creation of 54 FileX services description of 57 fixed number of entries 38 FLASH 191 FLASH devices 39 FLASH integration 20 FLASH managers 18 FLASH memory managers 42 flexible memory usage 18 flush data to physical media 146 flush request to the I/O driver 190 format media 148 free sector update 42 freeing sectors 42 fx.a 26, 27, 27 fx.lib 26 fx_api.h 27, 41, 42, 53 fx_directory_attributes_read 62 fx_directory_create 68 fx_directory_default_get 68 fx_directory_default_set 70 fx_directory_delete 72 fx_directory_first_entry_find 74 fx_directory_first_full_entry_find 76 fx_directory_information_get 80 fx_directory_local_path_clear 51, 82 Express Logic, Inc. 230 FileX User Guide fx_directory_local_path_get 84 fx_directory_local_path_restore 51, 86 fx_directory_local_path_set 50, 88 fx_directory_long_name_get 90 fx_directory_name_test 92 fx_directory_next_entry_find 94 fx_directory_next_full_entry_find 96 fx_directory_rename 100 fx_directory_short_name_get 102 FX_DISABLE_ERROR_CHECKING 29 FX_DRIVER_BOOT_READ 188 FX_DRIVER_INIT 187 FX_DRIVER_READ 188 FX_DRIVER_RELEASE_SECTORS 42, 187, 191 FX_FAT_MAP_SIZE 30 FX_FAULT_TOLERANT 30 FX_FAULT_TOLERANT_DATA 30 FX_FILE 52 fx_file_allocate 19, 51, 104 fx_file_attribute_set 108 fx_file_attributes_read 106 fx_file_best_effort_allocate 110 fx_file_close 112 fx_file_create 114 fx_file_date_time_set 116 fx_file_delete 118 fx_file_open 120 fx_file_read 122 fx_file_rename 126 fx_file_seek 124, 128 fx_file_truncate 130, 132 fx_file_write 134 FX_IO_ERROR 186 FX_LOCAL_PATH 50 FX_MAX_FAT_CACHE 30 FX_MAX_LONG_NAME_LEN 29 FX_MAX_SECTOR_CACHE 29, 41, 41 FX_MEDIA 39, 49, 50, 186, 187 fx_media_abort 136 fx_media_cache_invalidate 138 User Guide fx_media_check 140 fx_media_close 144 fx_media_driver_buffer 188, 189 fx_media_driver_data_sector_read 189 fx_media_driver_free_sector_update field 42 fx_media_driver_logical_sector 188, 189 fx_media_driver_request 186, 187, 188, 189, 190, 190, 191 fx_media_driver_sector_type 189, 190 fx_media_driver_sectors 188, 189 fx_media_driver_status 186 fx_media_driver_system_write 190 fx_media_driver_write_protect 187, 192, 193 fx_media_driver_write_protect field 42 fx_media_flush 146 fx_media_format 148 fx_media_open 19, 19, 27, 41, 152, 186, 187 fx_media_read 154 fx_media_root_sector_start 49 fx_media_space_available 156 fx_media_volume_get 158 fx_media_volume_set 160 fx_media_write 162 FX_NO_LOCAL_PATH 30 FX_NO_TIMER 30, 54 fx_port.h 13, 27, 54 FX_SINGLE_THREAD 31 FX_SUCCESS 186 fx_system_date_get 164 fx_system_date_set 53, 166 fx_system_initialize 27, 168 fx_system_initialize.c 54, 54 fx_system_time_get 170 fx_system_time_set 53, 172 fx_unicode_directory_create 174 fx_unicode_file_create 176 fx_unicode_length_get 178 fx_unicode_name_get 180 Index fx_unicode_short_name_get 182 FX_UPDATE_RATE_IN_SECONDS 30, 54 FX_UPDATE_RATE_IN_TICKS 31, 54, 54 G get current local path string 84 current system time 170 directory entry information 80 file system date 164 first directory entry 74 first full directory entry 76 last default directory 68 length of Unicode name 178 long name from short 90 media volume name 158 next directory entry 96 short name from a long name 102 short name from Unicode name 182 Unicode name from short name 180 global default path 51 guide conventions 12 H hardware initialization 187 heads 191 hidden sectors 39, 192, 193 host computer’s hard disk 24 host considerations 24, 186 host machines 24 huge sectors 39 I I/O driver 186 abort request 190 boot sector read request 188 entry 186 flush request 190 implementing 193 initialization request 187 read request 188 request 186 231 suspends 191 write request 189 I/O drivers for FileX 185 ICE 24 improved performance 19, 29 In-Circuit Emulation 24 initialization 52, 53, 55, 186 initialize entire file system 168 installing FileX 26 integration with ThreadX 18 internal FAT entry cache 18 internal I/O semaphore 191 internal logical cache 41 internal logical sector cache 19 introduction to FileX 17 intuitive services 20 invalidate logical sector cache 138 J JTAG (IEEE 1149.1) 24 jump instruction field 35 L least-recently-used logical sector cache 41 linear logical sectors 191 link application source 27 Linus (Unix) host computers 24 Linux (Unix) development platforms 26 local default path 50 local path clear default 82 get current string 84 restore previous 86 set thread-specific 88 local path for calling thread 51 local path logic from FileX removing 30 local storage for control blocks 43, 53 local variable stack space 43 location of control block 53 Express Logic, Inc. 232 FileX User Guide logical sector invalidate cache 138 read from media 154 write to media 162 logical sector cache 19 logical sector operation 192, 193 logical sector to read 188 logical sectors 191 logical sectors start at zero 192 logical to physical sector mapping in I/O driver 191 Long File Names (LFNs) 43 long filename support 18 long name get from short 90 M maintaining global system time and date 53 managing a media device 186 mapping directory to physical sectors 191 maximum file name overriding 29 maximum file name size 29 media abort activities 136 check for errors 140 close 144 format 148 open for file access 152 return available space 156 media boot record 36, 37, 38, 39 media control block 43, 186, 192, 193 media control block FX_MEDIA 42 media device integration 20 media devices supported 18 media format capability 19 media services 202 media volume get name 158 set name 160 media write protect 192, 193 User Guide media write protection 187 media-specific I/O driver 186 memory and processor registers 24 memory area and associated driver 19 multiple media device support 186 multiple media management 19 multiple or dynamic configuration 20 N no royalties 18 number of entries in internal FAT cache overriding 30 number of entries in the internal FAT cache 30 number of FATs 38 number of heads 39 number of heads in the media 39 number of sectors 38, 39 assigned to a cluster 36 associated with each FAT 39 before boot record 39 in the media 39 per track 39 to read 188 number of sectors FAT32 38 O OCD 24 OEM name field 36 on-chip debug 24 open file 120 media for file access 152 open media characteristics 42 open media instances 53 overriding maximum file name 29 overriding number of entries in internal FAT cache 30 P perform sector mapping 191 performance improvement 20 Index periodic time update 54 physical devices 18 physical geometry of the media 191 physical media access 186 physical media supported 19 physical sectors 191 physical sectors start at one 192 portability 13 porting FileX 20 position to byte offset 128 position to relative byte offset 124 possible cluster entries 41 premium package 26 primary (first) FAT 38 product distribution 25 R RAM disk 18, 19, 19 RAM disk media 191 RAM driver sample 193 RAM media driver 19 RAM requirements 25, 27 read bytes from file 122 directory attributes 62 file attributes 106, 106 logical sector from media 154 read request to the I/O driver 188 readme_filex.txt 24, 25, 26, 28, 31 real-time performance 18 recovery software 38 reducing unneeded updates of secondary FAT sectors 30 removing local path logic from FileX 30 rename directory 100 file 126 required hard disk space 24 reserved sectors 38 restore previous local path 86 retrieve next directory entry 94 return available media space 156 233 ROM requirements 25 root directory 49 root directory in FAT32 49 root directory size 38, 49 run-time royalties 18 S scaling automatically 18 sector and cluster read/write consecutive 19 sector read 188 sector translation 191 sector write 189 sectors per cluster 36 sectors per FAT 39 sectors per track 39 service call data types 13 service call interfaces 13 service names 57 set current system time 172 default directory 70 file attributes 108 file date and time 116 media volume name 160 system date 166 thread-specific local path 88 setting write protection on the media 42 short name get from long 102 size of each FAT entry 40 size of root directory 38 size of the logical sector cache 41, 41 small footprint instruction area size 18 smaller code size 29, 30 space for a file allocate 104 specifying exact driver request 186 standard cluster allocation scheme 51 standard package 26 standard read request 187 starting cluster field 45 Express Logic, Inc. 234 FileX User Guide subdirectories 49 subdirectory create 66 delete 72 subdirectory structure 50 suspended thread 191 suspending the calling thread 191 system date 53 set 166 system date and time 53 system Information 53 system initialization 54 system services 202 system time 54 get current 170 set current 172 T target RAM requirements 25 ROM requirements 25 target considerations 25, 25, 25 target execution control 24 target hardware 24 technical support 18 test for directory 92 thread suspension 191 thread-specific default path 50 ThreadX 13, 18 installation of 26 premium 25 standard 25 using 27 ThreadX application timer 54 ThreadX files 27 ThreadX processor support 18 ThreadX protection logic from FileX source eliminating 31 ThreadX run-time libraries 27 ThreadX semaphore 25, 191 ThreadX timer facilities 25 User Guide ThreadX timer setup to update FileX system time and date eliminating 30 time field 45 tracks 191 translation between logical sectors 191 troubleshooting 28 troubleshooting demo system 28 truncate file and release cluster 132 tx.a 27 tx_api.h 26 tx_application_define 27 tx_port.h 13, 13, 26 types of program execution 35 U UINT definition 13 ULONG definition 13 Unicode directory create 174 Unicode file create 176 Unicode name get from short 180 get length of 178 get short 182 Unicode name support 19 Unicode services 205 Unix host computers 24 unneeded updates of secondary FAT sectors reducing 30 update the system date and time 54 updating FileX system time and date 30 updating the global system date and time 54 V version history 31 Index 235 VOID definition 13 W whole sector transfer reductions 19 Windows host computers 24 Windows Long File Name (LFN) name formats 43 write bytes to file 134 logical sector 162 write protect 42, 192, 193 write request to the I/O driver 189 write to media 192, 193 writing application-specific drivers 185 Express Logic, Inc. 236 Index User Guide
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : Yes Page Mode : UseOutlines XMP Toolkit : 3.1-702 Producer : Acrobat Distiller 7.0.5 (Windows) Creator Tool : FrameMaker 7.1 Modify Date : 2006:05:03 13:31:10-07:00 Create Date : 2006:05:02 01:19:28Z Metadata Date : 2006:05:03 13:31:10-07:00 Format : application/pdf Title : FileX User Guide Creator : William Lamie Document ID : uuid:011a4c0a-fc49-447f-af69-52cd051ddac6 Instance ID : uuid:4a2b6cf9-38dc-412d-a507-83df3bc48815 Page Count : 236 Author : William LamieEXIF Metadata provided by EXIF.tools