Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ff.h
00001 /*---------------------------------------------------------------------------/ 00002 / FatFs - FAT file system module include file R0.07e (C)ChaN, 2009 00003 /----------------------------------------------------------------------------/ 00004 / FatFs module is a generic FAT file system module for small embedded systems. 00005 / This is a free software that opened for education, research and commercial 00006 / developments under license policy of following trems. 00007 / 00008 / Copyright (C) 2009, ChaN, all right reserved. 00009 / 00010 / * The FatFs module is a free software and there is NO WARRANTY. 00011 / * No restriction on use. You can use, modify and redistribute it for 00012 / personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. 00013 / * Redistributions of source code must retain the above copyright notice. 00014 /----------------------------------------------------------------------------*/ 00015 00016 #ifndef _FATFS 00017 #define _FATFS 0x007E 00018 00019 #include "integer.h" /* Basic integer types */ 00020 #include "ffconf.h" /* FatFs configuration options */ 00021 00022 #if _FATFS != _FFCONFIG 00023 #error Wrong configuration file (ffconf.h). 00024 #endif 00025 00026 00027 /* DBCS code ranges and SBCS extend char conversion table */ 00028 00029 #if _CODE_PAGE == 932 /* Japanese Shift-JIS */ 00030 #define _DF1S 0x81 /* DBC 1st byte range 1 start */ 00031 #define _DF1E 0x9F /* DBC 1st byte range 1 end */ 00032 #define _DF2S 0xE0 /* DBC 1st byte range 2 start */ 00033 #define _DF2E 0xFC /* DBC 1st byte range 2 end */ 00034 #define _DS1S 0x40 /* DBC 2nd byte range 1 start */ 00035 #define _DS1E 0x7E /* DBC 2nd byte range 1 end */ 00036 #define _DS2S 0x80 /* DBC 2nd byte range 2 start */ 00037 #define _DS2E 0xFC /* DBC 2nd byte range 2 end */ 00038 00039 #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */ 00040 #define _DF1S 0x81 00041 #define _DF1E 0xFE 00042 #define _DS1S 0x40 00043 #define _DS1E 0x7E 00044 #define _DS2S 0x80 00045 #define _DS2E 0xFE 00046 00047 #elif _CODE_PAGE == 949 /* Korean */ 00048 #define _DF1S 0x81 00049 #define _DF1E 0xFE 00050 #define _DS1S 0x41 00051 #define _DS1E 0x5A 00052 #define _DS2S 0x61 00053 #define _DS2E 0x7A 00054 #define _DS3S 0x81 00055 #define _DS3E 0xFE 00056 00057 #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */ 00058 #define _DF1S 0x81 00059 #define _DF1E 0xFE 00060 #define _DS1S 0x40 00061 #define _DS1E 0x7E 00062 #define _DS2S 0xA1 00063 #define _DS2E 0xFE 00064 00065 #elif _CODE_PAGE == 437 /* U.S. (OEM) */ 00066 #define _DF1S 0 00067 #define _EXCVT {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F,0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00068 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00069 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00070 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00071 00072 #elif _CODE_PAGE == 720 /* Arabic (OEM) */ 00073 #define _DF1S 0 00074 #define _EXCVT {0x80,0x81,0x45,0x41,0x84,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x49,0x49,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00075 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00076 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00077 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00078 00079 #elif _CODE_PAGE == 737 /* Greek (OEM) */ 00080 #define _DF1S 0 00081 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \ 00082 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00083 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00084 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xE7,0xE8,0xF1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00085 00086 #elif _CODE_PAGE == 775 /* Baltic (OEM) */ 00087 #define _DF1S 0 00088 #define _EXCVT {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 00089 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00090 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00091 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00092 00093 #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */ 00094 #define _DF1S 0 00095 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 00096 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00097 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00098 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00099 00100 #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */ 00101 #define _DF1S 0 00102 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F,0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0x9F, \ 00103 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \ 00104 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00105 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF} 00106 00107 #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */ 00108 #define _DF1S 0 00109 #define _EXCVT {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F,0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \ 00110 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \ 00111 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \ 00112 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF} 00113 00114 #elif _CODE_PAGE == 857 /* Turkish (OEM) */ 00115 #define _DF1S 0 00116 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x98,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \ 00117 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00118 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00119 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0x59,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00120 00121 #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */ 00122 #define _DF1S 0 00123 #define _EXCVT {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \ 00124 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00125 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD1,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00126 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00127 00128 #elif _CODE_PAGE == 862 /* Hebrew (OEM) */ 00129 #define _DF1S 0 00130 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00131 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00132 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00133 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00134 00135 #elif _CODE_PAGE == 866 /* Russian (OEM) */ 00136 #define _DF1S 0 00137 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00138 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00139 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00140 0x90,0x91,0x92,0x93,0x9d,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00141 00142 #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */ 00143 #define _DF1S 0 00144 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00145 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00146 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00147 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00148 00149 #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */ 00150 #define _DF1S 0 00151 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 00152 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xA3,0xB4,0xB5,0xB6,0xB7,0xB8,0xA5,0xAA,0xBB,0xBC,0xBD,0xBC,0xAF, \ 00153 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00154 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} 00155 00156 #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */ 00157 #define _DF1S 0 00158 #define _EXCVT {0x80,0x81,0x82,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x80,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x8D,0x8E,0x8F, \ 00159 0xA0,0xA2,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB2,0xA5,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xA3,0xBD,0xBD,0xAF, \ 00160 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00161 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF} 00162 00163 #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */ 00164 #define _DF1S 0 00165 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xAd,0x9B,0x8C,0x9D,0xAE,0x9F, \ 00166 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00167 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00168 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} 00169 00170 #elif _CODE_PAGE == 1253 /* Greek (Windows) */ 00171 #define _DF1S 0 00172 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00173 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00174 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xA2,0xB8,0xB9,0xBA, \ 00175 0xE0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xBC,0xFD,0xBF,0xFF} 00176 00177 #elif _CODE_PAGE == 1254 /* Turkish (Windows) */ 00178 #define _DF1S 0 00179 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x8A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 00180 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00181 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00182 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0x9F} 00183 00184 #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */ 00185 #define _DF1S 0 00186 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00187 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00188 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00189 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF} 00190 00191 #elif _CODE_PAGE == 1256 /* Arabic (Windows) */ 00192 #define _DF1S 0 00193 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x8C,0x9D,0x9E,0x9F, \ 00194 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00195 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00196 0x41,0xE1,0x41,0xE3,0xE4,0xE5,0xE6,0x43,0x45,0x45,0x45,0x45,0xEC,0xED,0x49,0x49,0xF0,0xF1,0xF2,0xF3,0x4F,0xF5,0xF6,0xF7,0xF8,0x55,0xFA,0x55,0x55,0xFD,0xFE,0xFF} 00197 00198 #elif _CODE_PAGE == 1257 /* Baltic (Windows) */ 00199 #define _DF1S 0 00200 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \ 00201 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xA8,0xB9,0xAA,0xBB,0xBC,0xBD,0xBE,0xAF, \ 00202 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00203 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xFF} 00204 00205 #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */ 00206 #define _DF1S 0 00207 #define _EXCVT {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xAC,0x9D,0x9E,0x9F, \ 00208 0xA0,0x21,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \ 00209 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \ 00210 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xEC,0xCD,0xCE,0xCF,0xD0,0xD1,0xF2,0xD3,0xD4,0xD5,0xD6,0xF7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xFE,0x9F} 00211 00212 #elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */ 00213 #define _DF1S 0 00214 00215 #else 00216 #error Unknown code page 00217 00218 #endif 00219 00220 00221 00222 /* Character code support macros */ 00223 00224 #define IsUpper(c) (((c)>='A')&&((c)<='Z')) 00225 #define IsLower(c) (((c)>='a')&&((c)<='z')) 00226 00227 #if _DF1S /* DBCS configuration */ 00228 00229 #ifdef _DF2S /* Two 1st byte areas */ 00230 #define IsDBCS1(c) (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E)) 00231 #else /* One 1st byte area */ 00232 #define IsDBCS1(c) ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) 00233 #endif 00234 00235 #ifdef _DS3S /* Three 2nd byte areas */ 00236 #define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E)) 00237 #else /* Two 2nd byte areas */ 00238 #define IsDBCS2(c) (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E)) 00239 #endif 00240 00241 #else /* SBCS configuration */ 00242 00243 #define IsDBCS1(c) 0 00244 #define IsDBCS2(c) 0 00245 00246 #endif /* _DF1S */ 00247 00248 00249 00250 /* Definitions corresponds to multi partition */ 00251 00252 #if _MULTI_PARTITION /* Multiple partition configuration */ 00253 00254 typedef struct _PARTITION { 00255 BYTE pd; /* Physical drive# */ 00256 BYTE pt; /* Partition # (0-3) */ 00257 } PARTITION; 00258 00259 extern 00260 const PARTITION Drives[]; /* Logical drive# to physical location conversion table */ 00261 #define LD2PD(drv) (Drives[drv].pd) /* Get physical drive# */ 00262 #define LD2PT(drv) (Drives[drv].pt) /* Get partition# */ 00263 00264 #else /* Single partition configuration */ 00265 00266 #define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */ 00267 #define LD2PT(drv) 0 /* Always mounts the 1st partition */ 00268 00269 #endif 00270 00271 00272 00273 /* Definitions corresponds to multiple sector size */ 00274 00275 #if _MAX_SS == 512 /* Single sector size */ 00276 #define SS(fs) 512U 00277 00278 #elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096 /* Multiple sector size */ 00279 #define SS(fs) ((fs)->s_size) 00280 00281 #else 00282 #error Sector size must be 512, 1024, 2048 or 4096. 00283 00284 #endif 00285 00286 00287 00288 /* Type of file name on FatFs API */ 00289 00290 #if _LFN_UNICODE && _USE_LFN 00291 typedef WCHAR XCHAR; /* Unicode */ 00292 #else 00293 typedef char XCHAR; /* SBCS, DBCS */ 00294 #endif 00295 00296 00297 00298 /* File system object structure */ 00299 00300 typedef struct _FATFS_ { 00301 BYTE fs_type; /* FAT sub type */ 00302 BYTE drive; /* Physical drive number */ 00303 BYTE csize; /* Number of sectors per cluster */ 00304 BYTE n_fats; /* Number of FAT copies */ 00305 BYTE wflag; /* win[] dirty flag (1:must be written back) */ 00306 BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */ 00307 WORD id; /* File system mount ID */ 00308 WORD n_rootdir; /* Number of root directory entries (0 on FAT32) */ 00309 #if _FS_REENTRANT 00310 _SYNC_t sobj; /* Identifier of sync object */ 00311 #endif 00312 #if _MAX_SS != 512 00313 WORD s_size; /* Sector size */ 00314 #endif 00315 #if !_FS_READONLY 00316 DWORD last_clust; /* Last allocated cluster */ 00317 DWORD free_clust; /* Number of free clusters */ 00318 DWORD fsi_sector; /* fsinfo sector */ 00319 #endif 00320 #if _FS_RPATH 00321 DWORD cdir; /* Current directory (0:root)*/ 00322 #endif 00323 DWORD sects_fat; /* Sectors per fat */ 00324 DWORD max_clust; /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */ 00325 DWORD fatbase; /* FAT start sector */ 00326 DWORD dirbase; /* Root directory start sector (Cluster# on FAT32) */ 00327 DWORD database; /* Data start sector */ 00328 DWORD winsect; /* Current sector appearing in the win[] */ 00329 BYTE win[_MAX_SS];/* Disk access window for Directory/FAT */ 00330 } FATFS; 00331 00332 00333 00334 /* Directory object structure */ 00335 00336 typedef struct _DIR_ { 00337 FATFS* fs; /* Pointer to the owner file system object */ 00338 WORD id; /* Owner file system mount ID */ 00339 WORD index; /* Current read/write index number */ 00340 DWORD sclust; /* Table start cluster (0:Static table) */ 00341 DWORD clust; /* Current cluster */ 00342 DWORD sect; /* Current sector */ 00343 BYTE* dir; /* Pointer to the current SFN entry in the win[] */ 00344 BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */ 00345 #if _USE_LFN 00346 WCHAR* lfn; /* Pointer to the LFN working buffer */ 00347 WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */ 00348 #endif 00349 } eDIR; 00350 00351 00352 00353 /* File object structure */ 00354 00355 typedef struct _FIL_ { 00356 FATFS* fs; /* Pointer to the owner file system object */ 00357 WORD id; /* Owner file system mount ID */ 00358 BYTE flag; /* File status flags */ 00359 BYTE csect; /* Sector address in the cluster */ 00360 DWORD fptr; /* File R/W pointer */ 00361 DWORD fsize; /* File size */ 00362 DWORD org_clust; /* File start cluster */ 00363 DWORD curr_clust; /* Current cluster */ 00364 DWORD dsect; /* Current data sector */ 00365 #if !_FS_READONLY 00366 DWORD dir_sect; /* Sector containing the directory entry */ 00367 BYTE* dir_ptr; /* Ponter to the directory entry in the window */ 00368 #endif 00369 #if !_FS_TINY 00370 BYTE buf[_MAX_SS];/* File R/W buffer */ 00371 #endif 00372 } FIL; 00373 00374 00375 00376 /* File status structure */ 00377 00378 typedef struct _FILINFO_ { 00379 DWORD fsize; /* File size */ 00380 WORD fdate; /* Last modified date */ 00381 WORD ftime; /* Last modified time */ 00382 BYTE fattrib; /* Attribute */ 00383 char fname[13]; /* Short file name (8.3 format) */ 00384 #if _USE_LFN 00385 XCHAR* lfname; /* Pointer to the LFN buffer */ 00386 int lfsize; /* Size of LFN buffer [chrs] */ 00387 #endif 00388 } FILINFO; 00389 00390 00391 00392 /* File function return code (FRESULT) */ 00393 00394 typedef enum { 00395 FR_OK = 0, /* 0 */ 00396 FR_DISK_ERR, /* 1 */ 00397 FR_INT_ERR, /* 2 */ 00398 FR_NOT_READY, /* 3 */ 00399 FR_NO_FILE, /* 4 */ 00400 FR_NO_PATH, /* 5 */ 00401 FR_INVALID_NAME, /* 6 */ 00402 FR_DENIED, /* 7 */ 00403 FR_EXIST, /* 8 */ 00404 FR_INVALID_OBJECT, /* 9 */ 00405 FR_WRITE_PROTECTED, /* 10 */ 00406 FR_INVALID_DRIVE, /* 11 */ 00407 FR_NOT_ENABLED, /* 12 */ 00408 FR_NO_FILESYSTEM, /* 13 */ 00409 FR_MKFS_ABORTED, /* 14 */ 00410 FR_TIMEOUT /* 15 */ 00411 } FRESULT; 00412 00413 00414 00415 /*--------------------------------------------------------------*/ 00416 /* FatFs module application interface */ 00417 00418 FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */ 00419 FRESULT f_open (FIL*, const XCHAR*, BYTE); /* Open or create a file */ 00420 FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */ 00421 FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */ 00422 FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */ 00423 FRESULT f_close (FIL*); /* Close an open file object */ 00424 FRESULT f_opendir (eDIR*, const XCHAR*); /* Open an existing directory */ 00425 FRESULT f_readdir (eDIR*, FILINFO*); /* Read a directory item */ 00426 FRESULT f_stat (const XCHAR*, FILINFO*); /* Get file status */ 00427 FRESULT f_getfree (const XCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */ 00428 FRESULT f_truncate (FIL*); /* Truncate file */ 00429 FRESULT f_sync (FIL*); /* Flush cached data of a writing file */ 00430 FRESULT f_unlink (const XCHAR*); /* Delete an existing file or directory */ 00431 FRESULT f_mkdir (const XCHAR*); /* Create a new directory */ 00432 FRESULT f_chmod (const XCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */ 00433 FRESULT f_utime (const XCHAR*, const FILINFO*); /* Change timestamp of the file/dir */ 00434 FRESULT f_rename (const XCHAR*, const XCHAR*); /* Rename/Move a file or directory */ 00435 FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */ 00436 FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */ 00437 FRESULT f_chdir (const XCHAR*); /* Change current directory */ 00438 FRESULT f_chdrive (BYTE); /* Change current drive */ 00439 00440 #if _USE_STRFUNC 00441 int f_putc (int, FIL*); /* Put a character to the file */ 00442 int f_puts (const char*, FIL*); /* Put a string to the file */ 00443 int f_printf (FIL*, const char*, ...); /* Put a formatted string to the file */ 00444 char* f_gets (char*, int, FIL*); /* Get a string from the file */ 00445 #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0) 00446 #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0) 00447 #ifndef EOF 00448 #define EOF -1 00449 #endif 00450 #endif 00451 00452 00453 00454 /*--------------------------------------------------------------*/ 00455 /* User defined functions */ 00456 00457 /* Real time clock */ 00458 #if !_FS_READONLY 00459 DWORD get_fattime (void); /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */ 00460 /* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */ 00461 #endif 00462 00463 /* Unicode - OEM code conversion */ 00464 #if _USE_LFN 00465 WCHAR ff_convert (WCHAR, UINT); 00466 WCHAR ff_wtoupper (WCHAR); 00467 #endif 00468 00469 /* Sync functions */ 00470 #if _FS_REENTRANT 00471 BOOL ff_cre_syncobj(BYTE, _SYNC_t*); 00472 BOOL ff_del_syncobj(_SYNC_t); 00473 BOOL ff_req_grant(_SYNC_t); 00474 void ff_rel_grant(_SYNC_t); 00475 #endif 00476 00477 00478 00479 /*--------------------------------------------------------------*/ 00480 /* Flags and offset address */ 00481 00482 00483 /* File access control and file status flags (FIL.flag) */ 00484 00485 #define FA_READ 0x01 00486 #define FA_OPEN_EXISTING 0x00 00487 #if _FS_READONLY == 0 00488 #define FA_WRITE 0x02 00489 #define FA_CREATE_NEW 0x04 00490 #define FA_CREATE_ALWAYS 0x08 00491 #define FA_OPEN_ALWAYS 0x10 00492 #define FA__WRITTEN 0x20 00493 #define FA__DIRTY 0x40 00494 #endif 00495 #define FA__ERROR 0x80 00496 00497 00498 /* FAT sub type (FATFS.fs_type) */ 00499 00500 #define FS_FAT12 1 00501 #define FS_FAT16 2 00502 #define FS_FAT32 3 00503 00504 00505 /* File attribute bits for directory entry */ 00506 00507 #define AM_RDO 0x01 /* Read only */ 00508 #define AM_HID 0x02 /* Hidden */ 00509 #define AM_SYS 0x04 /* System */ 00510 #define AM_VOL 0x08 /* Volume label */ 00511 #define AM_LFN 0x0F /* LFN entry */ 00512 #define AM_DIR 0x10 /* Directory */ 00513 #define AM_ARC 0x20 /* Archive */ 00514 #define AM_MASK 0x3F /* Mask of defined bits */ 00515 00516 00517 /* FatFs refers the members in the FAT structures with byte offset instead 00518 / of structure member because there are incompatibility of the packing option 00519 / between various compilers. */ 00520 00521 #define BS_jmpBoot 0 00522 #define BS_OEMName 3 00523 #define BPB_BytsPerSec 11 00524 #define BPB_SecPerClus 13 00525 #define BPB_RsvdSecCnt 14 00526 #define BPB_NumFATs 16 00527 #define BPB_RootEntCnt 17 00528 #define BPB_TotSec16 19 00529 #define BPB_Media 21 00530 #define BPB_FATSz16 22 00531 #define BPB_SecPerTrk 24 00532 #define BPB_NumHeads 26 00533 #define BPB_HiddSec 28 00534 #define BPB_TotSec32 32 00535 #define BS_55AA 510 00536 00537 #define BS_DrvNum 36 00538 #define BS_BootSig 38 00539 #define BS_VolID 39 00540 #define BS_VolLab 43 00541 #define BS_FilSysType 54 00542 00543 #define BPB_FATSz32 36 00544 #define BPB_ExtFlags 40 00545 #define BPB_FSVer 42 00546 #define BPB_RootClus 44 00547 #define BPB_FSInfo 48 00548 #define BPB_BkBootSec 50 00549 #define BS_DrvNum32 64 00550 #define BS_BootSig32 66 00551 #define BS_VolID32 67 00552 #define BS_VolLab32 71 00553 #define BS_FilSysType32 82 00554 00555 #define FSI_LeadSig 0 00556 #define FSI_StrucSig 484 00557 #define FSI_Free_Count 488 00558 #define FSI_Nxt_Free 492 00559 00560 #define MBR_Table 446 00561 00562 #define DIR_Name 0 00563 #define DIR_Attr 11 00564 #define DIR_NTres 12 00565 #define DIR_CrtTime 14 00566 #define DIR_CrtDate 16 00567 #define DIR_FstClusHI 20 00568 #define DIR_WrtTime 22 00569 #define DIR_WrtDate 24 00570 #define DIR_FstClusLO 26 00571 #define DIR_FileSize 28 00572 #define LDIR_Ord 0 00573 #define LDIR_Attr 11 00574 #define LDIR_Type 12 00575 #define LDIR_Chksum 13 00576 #define LDIR_FstClusLO 26 00577 00578 00579 00580 /*--------------------------------*/ 00581 /* Multi-byte word access macros */ 00582 00583 #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */ 00584 #define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr)) 00585 #define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr)) 00586 #define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val) 00587 #define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val) 00588 #else /* Use byte-by-byte access to the FAT structure */ 00589 #define LD_WORD(ptr) (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr)) 00590 #define LD_DWORD(ptr) (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr)) 00591 #define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8) 00592 #define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8); *(BYTE*)((ptr)+2)=(BYTE)((DWORD)(val)>>16); *(BYTE*)((ptr)+3)=(BYTE)((DWORD)(val)>>24) 00593 #endif 00594 00595 00596 #endif /* _FATFS */
Generated on Thu Jul 14 2022 09:05:34 by
1.7.2