Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.

Dependencies:   mbed

Committer:
AjK
Date:
Mon Oct 11 10:34:55 2010 +0000
Revision:
0:0a841b89d614
Totally Alpha quality as this project isn\t completed. Just publishing it as it answers many questions asked in the forums

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:0a841b89d614 1 /*---------------------------------------------------------------------------/
AjK 0:0a841b89d614 2 / FatFs - FAT file system module include file R0.08a (C)ChaN, 2010
AjK 0:0a841b89d614 3 /----------------------------------------------------------------------------/
AjK 0:0a841b89d614 4 / FatFs module is a generic FAT file system module for small embedded systems.
AjK 0:0a841b89d614 5 / This is a free software that opened for education, research and commercial
AjK 0:0a841b89d614 6 / developments under license policy of following trems.
AjK 0:0a841b89d614 7 /
AjK 0:0a841b89d614 8 / Copyright (C) 2010, ChaN, all right reserved.
AjK 0:0a841b89d614 9 /
AjK 0:0a841b89d614 10 / * The FatFs module is a free software and there is NO WARRANTY.
AjK 0:0a841b89d614 11 / * No restriction on use. You can use, modify and redistribute it for
AjK 0:0a841b89d614 12 / personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
AjK 0:0a841b89d614 13 / * Redistributions of source code must retain the above copyright notice.
AjK 0:0a841b89d614 14 /
AjK 0:0a841b89d614 15 /----------------------------------------------------------------------------*/
AjK 0:0a841b89d614 16
AjK 0:0a841b89d614 17 #ifndef _FATFS
AjK 0:0a841b89d614 18 #define _FATFS 8255 /* Revision ID */
AjK 0:0a841b89d614 19
AjK 0:0a841b89d614 20 #ifdef __cplusplus
AjK 0:0a841b89d614 21 extern "C" {
AjK 0:0a841b89d614 22 #endif
AjK 0:0a841b89d614 23
AjK 0:0a841b89d614 24 #include "integer.h" /* Basic integer types */
AjK 0:0a841b89d614 25 #include "ffconf.h" /* FatFs configuration options */
AjK 0:0a841b89d614 26
AjK 0:0a841b89d614 27 #if _FATFS != _FFCONF
AjK 0:0a841b89d614 28 #error Wrong configuration file (ffconf.h).
AjK 0:0a841b89d614 29 #endif
AjK 0:0a841b89d614 30
AjK 0:0a841b89d614 31
AjK 0:0a841b89d614 32 /* DBCS code ranges and SBCS extend char conversion table */
AjK 0:0a841b89d614 33
AjK 0:0a841b89d614 34 #if _CODE_PAGE == 932 /* Japanese Shift-JIS */
AjK 0:0a841b89d614 35 #define _DF1S 0x81 /* DBC 1st byte range 1 start */
AjK 0:0a841b89d614 36 #define _DF1E 0x9F /* DBC 1st byte range 1 end */
AjK 0:0a841b89d614 37 #define _DF2S 0xE0 /* DBC 1st byte range 2 start */
AjK 0:0a841b89d614 38 #define _DF2E 0xFC /* DBC 1st byte range 2 end */
AjK 0:0a841b89d614 39 #define _DS1S 0x40 /* DBC 2nd byte range 1 start */
AjK 0:0a841b89d614 40 #define _DS1E 0x7E /* DBC 2nd byte range 1 end */
AjK 0:0a841b89d614 41 #define _DS2S 0x80 /* DBC 2nd byte range 2 start */
AjK 0:0a841b89d614 42 #define _DS2E 0xFC /* DBC 2nd byte range 2 end */
AjK 0:0a841b89d614 43
AjK 0:0a841b89d614 44 #elif _CODE_PAGE == 936 /* Simplified Chinese GBK */
AjK 0:0a841b89d614 45 #define _DF1S 0x81
AjK 0:0a841b89d614 46 #define _DF1E 0xFE
AjK 0:0a841b89d614 47 #define _DS1S 0x40
AjK 0:0a841b89d614 48 #define _DS1E 0x7E
AjK 0:0a841b89d614 49 #define _DS2S 0x80
AjK 0:0a841b89d614 50 #define _DS2E 0xFE
AjK 0:0a841b89d614 51
AjK 0:0a841b89d614 52 #elif _CODE_PAGE == 949 /* Korean */
AjK 0:0a841b89d614 53 #define _DF1S 0x81
AjK 0:0a841b89d614 54 #define _DF1E 0xFE
AjK 0:0a841b89d614 55 #define _DS1S 0x41
AjK 0:0a841b89d614 56 #define _DS1E 0x5A
AjK 0:0a841b89d614 57 #define _DS2S 0x61
AjK 0:0a841b89d614 58 #define _DS2E 0x7A
AjK 0:0a841b89d614 59 #define _DS3S 0x81
AjK 0:0a841b89d614 60 #define _DS3E 0xFE
AjK 0:0a841b89d614 61
AjK 0:0a841b89d614 62 #elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */
AjK 0:0a841b89d614 63 #define _DF1S 0x81
AjK 0:0a841b89d614 64 #define _DF1E 0xFE
AjK 0:0a841b89d614 65 #define _DS1S 0x40
AjK 0:0a841b89d614 66 #define _DS1E 0x7E
AjK 0:0a841b89d614 67 #define _DS2S 0xA1
AjK 0:0a841b89d614 68 #define _DS2E 0xFE
AjK 0:0a841b89d614 69
AjK 0:0a841b89d614 70 #elif _CODE_PAGE == 437 /* U.S. (OEM) */
AjK 0:0a841b89d614 71 #define _DF1S 0
AjK 0:0a841b89d614 72 #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, \
AjK 0:0a841b89d614 73 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, \
AjK 0:0a841b89d614 74 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, \
AjK 0:0a841b89d614 75 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}
AjK 0:0a841b89d614 76
AjK 0:0a841b89d614 77 #elif _CODE_PAGE == 720 /* Arabic (OEM) */
AjK 0:0a841b89d614 78 #define _DF1S 0
AjK 0:0a841b89d614 79 #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, \
AjK 0:0a841b89d614 80 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, \
AjK 0:0a841b89d614 81 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, \
AjK 0:0a841b89d614 82 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}
AjK 0:0a841b89d614 83
AjK 0:0a841b89d614 84 #elif _CODE_PAGE == 737 /* Greek (OEM) */
AjK 0:0a841b89d614 85 #define _DF1S 0
AjK 0:0a841b89d614 86 #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, \
AjK 0:0a841b89d614 87 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, \
AjK 0:0a841b89d614 88 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, \
AjK 0:0a841b89d614 89 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}
AjK 0:0a841b89d614 90
AjK 0:0a841b89d614 91 #elif _CODE_PAGE == 775 /* Baltic (OEM) */
AjK 0:0a841b89d614 92 #define _DF1S 0
AjK 0:0a841b89d614 93 #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, \
AjK 0:0a841b89d614 94 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, \
AjK 0:0a841b89d614 95 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, \
AjK 0:0a841b89d614 96 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}
AjK 0:0a841b89d614 97
AjK 0:0a841b89d614 98 #elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */
AjK 0:0a841b89d614 99 #define _DF1S 0
AjK 0:0a841b89d614 100 #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, \
AjK 0:0a841b89d614 101 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, \
AjK 0:0a841b89d614 102 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, \
AjK 0:0a841b89d614 103 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}
AjK 0:0a841b89d614 104
AjK 0:0a841b89d614 105 #elif _CODE_PAGE == 852 /* Latin 2 (OEM) */
AjK 0:0a841b89d614 106 #define _DF1S 0
AjK 0:0a841b89d614 107 #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, \
AjK 0:0a841b89d614 108 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, \
AjK 0:0a841b89d614 109 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, \
AjK 0:0a841b89d614 110 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}
AjK 0:0a841b89d614 111
AjK 0:0a841b89d614 112 #elif _CODE_PAGE == 855 /* Cyrillic (OEM) */
AjK 0:0a841b89d614 113 #define _DF1S 0
AjK 0:0a841b89d614 114 #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, \
AjK 0:0a841b89d614 115 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, \
AjK 0:0a841b89d614 116 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, \
AjK 0:0a841b89d614 117 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}
AjK 0:0a841b89d614 118
AjK 0:0a841b89d614 119 #elif _CODE_PAGE == 857 /* Turkish (OEM) */
AjK 0:0a841b89d614 120 #define _DF1S 0
AjK 0:0a841b89d614 121 #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, \
AjK 0:0a841b89d614 122 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, \
AjK 0:0a841b89d614 123 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, \
AjK 0:0a841b89d614 124 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}
AjK 0:0a841b89d614 125
AjK 0:0a841b89d614 126 #elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */
AjK 0:0a841b89d614 127 #define _DF1S 0
AjK 0:0a841b89d614 128 #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, \
AjK 0:0a841b89d614 129 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, \
AjK 0:0a841b89d614 130 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, \
AjK 0:0a841b89d614 131 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}
AjK 0:0a841b89d614 132
AjK 0:0a841b89d614 133 #elif _CODE_PAGE == 862 /* Hebrew (OEM) */
AjK 0:0a841b89d614 134 #define _DF1S 0
AjK 0:0a841b89d614 135 #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, \
AjK 0:0a841b89d614 136 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, \
AjK 0:0a841b89d614 137 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, \
AjK 0:0a841b89d614 138 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}
AjK 0:0a841b89d614 139
AjK 0:0a841b89d614 140 #elif _CODE_PAGE == 866 /* Russian (OEM) */
AjK 0:0a841b89d614 141 #define _DF1S 0
AjK 0:0a841b89d614 142 #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, \
AjK 0:0a841b89d614 143 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, \
AjK 0:0a841b89d614 144 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, \
AjK 0:0a841b89d614 145 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}
AjK 0:0a841b89d614 146
AjK 0:0a841b89d614 147 #elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */
AjK 0:0a841b89d614 148 #define _DF1S 0
AjK 0:0a841b89d614 149 #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, \
AjK 0:0a841b89d614 150 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, \
AjK 0:0a841b89d614 151 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, \
AjK 0:0a841b89d614 152 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}
AjK 0:0a841b89d614 153
AjK 0:0a841b89d614 154 #elif _CODE_PAGE == 1250 /* Central Europe (Windows) */
AjK 0:0a841b89d614 155 #define _DF1S 0
AjK 0:0a841b89d614 156 #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, \
AjK 0:0a841b89d614 157 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, \
AjK 0:0a841b89d614 158 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, \
AjK 0:0a841b89d614 159 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}
AjK 0:0a841b89d614 160
AjK 0:0a841b89d614 161 #elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */
AjK 0:0a841b89d614 162 #define _DF1S 0
AjK 0:0a841b89d614 163 #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, \
AjK 0:0a841b89d614 164 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, \
AjK 0:0a841b89d614 165 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, \
AjK 0:0a841b89d614 166 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}
AjK 0:0a841b89d614 167
AjK 0:0a841b89d614 168 #elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */
AjK 0:0a841b89d614 169 #define _DF1S 0
AjK 0:0a841b89d614 170 #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, \
AjK 0:0a841b89d614 171 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, \
AjK 0:0a841b89d614 172 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, \
AjK 0:0a841b89d614 173 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}
AjK 0:0a841b89d614 174
AjK 0:0a841b89d614 175 #elif _CODE_PAGE == 1253 /* Greek (Windows) */
AjK 0:0a841b89d614 176 #define _DF1S 0
AjK 0:0a841b89d614 177 #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, \
AjK 0:0a841b89d614 178 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, \
AjK 0:0a841b89d614 179 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, \
AjK 0:0a841b89d614 180 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}
AjK 0:0a841b89d614 181
AjK 0:0a841b89d614 182 #elif _CODE_PAGE == 1254 /* Turkish (Windows) */
AjK 0:0a841b89d614 183 #define _DF1S 0
AjK 0:0a841b89d614 184 #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, \
AjK 0:0a841b89d614 185 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, \
AjK 0:0a841b89d614 186 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, \
AjK 0:0a841b89d614 187 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}
AjK 0:0a841b89d614 188
AjK 0:0a841b89d614 189 #elif _CODE_PAGE == 1255 /* Hebrew (Windows) */
AjK 0:0a841b89d614 190 #define _DF1S 0
AjK 0:0a841b89d614 191 #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, \
AjK 0:0a841b89d614 192 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, \
AjK 0:0a841b89d614 193 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, \
AjK 0:0a841b89d614 194 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}
AjK 0:0a841b89d614 195
AjK 0:0a841b89d614 196 #elif _CODE_PAGE == 1256 /* Arabic (Windows) */
AjK 0:0a841b89d614 197 #define _DF1S 0
AjK 0:0a841b89d614 198 #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, \
AjK 0:0a841b89d614 199 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, \
AjK 0:0a841b89d614 200 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, \
AjK 0:0a841b89d614 201 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}
AjK 0:0a841b89d614 202
AjK 0:0a841b89d614 203 #elif _CODE_PAGE == 1257 /* Baltic (Windows) */
AjK 0:0a841b89d614 204 #define _DF1S 0
AjK 0:0a841b89d614 205 #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, \
AjK 0:0a841b89d614 206 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, \
AjK 0:0a841b89d614 207 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, \
AjK 0:0a841b89d614 208 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}
AjK 0:0a841b89d614 209
AjK 0:0a841b89d614 210 #elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */
AjK 0:0a841b89d614 211 #define _DF1S 0
AjK 0:0a841b89d614 212 #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, \
AjK 0:0a841b89d614 213 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, \
AjK 0:0a841b89d614 214 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, \
AjK 0:0a841b89d614 215 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}
AjK 0:0a841b89d614 216
AjK 0:0a841b89d614 217 #elif _CODE_PAGE == 1 /* ASCII (for only non-LFN cfg) */
AjK 0:0a841b89d614 218 #define _DF1S 0
AjK 0:0a841b89d614 219
AjK 0:0a841b89d614 220 #else
AjK 0:0a841b89d614 221 #error Unknown code page
AjK 0:0a841b89d614 222
AjK 0:0a841b89d614 223 #endif
AjK 0:0a841b89d614 224
AjK 0:0a841b89d614 225
AjK 0:0a841b89d614 226
AjK 0:0a841b89d614 227 /* Definitions of volume management */
AjK 0:0a841b89d614 228
AjK 0:0a841b89d614 229 #if _MULTI_PARTITION /* Multiple partition configuration */
AjK 0:0a841b89d614 230 #define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive# */
AjK 0:0a841b89d614 231 #define LD2PT(vol) (VolToPart[vol].pt) /* Get partition# */
AjK 0:0a841b89d614 232 typedef struct {
AjK 0:0a841b89d614 233 BYTE pd; /* Physical drive# */
AjK 0:0a841b89d614 234 BYTE pt; /* Partition # (0-3) */
AjK 0:0a841b89d614 235 } PARTITION;
AjK 0:0a841b89d614 236 extern const PARTITION VolToPart[]; /* Volume - Physical location resolution table */
AjK 0:0a841b89d614 237
AjK 0:0a841b89d614 238 #else /* Single partition configuration */
AjK 0:0a841b89d614 239 #define LD2PD(vol) (vol) /* Logical drive# is bound to the same physical drive# */
AjK 0:0a841b89d614 240 #define LD2PT(vol) 0 /* Always mounts the 1st partition */
AjK 0:0a841b89d614 241
AjK 0:0a841b89d614 242 #endif
AjK 0:0a841b89d614 243
AjK 0:0a841b89d614 244
AjK 0:0a841b89d614 245
AjK 0:0a841b89d614 246 /* Type of path name strings on FatFs API */
AjK 0:0a841b89d614 247
AjK 0:0a841b89d614 248 #if _LFN_UNICODE /* Unicode string */
AjK 0:0a841b89d614 249 #if !_USE_LFN
AjK 0:0a841b89d614 250 #error _LFN_UNICODE must be 0 in non-LFN cfg.
AjK 0:0a841b89d614 251 #endif
AjK 0:0a841b89d614 252 #ifndef _INC_TCHAR
AjK 0:0a841b89d614 253 typedef WCHAR TCHAR;
AjK 0:0a841b89d614 254 #define _T(x) L ## x
AjK 0:0a841b89d614 255 #define _TEXT(x) L ## x
AjK 0:0a841b89d614 256 #endif
AjK 0:0a841b89d614 257
AjK 0:0a841b89d614 258 #else /* ANSI/OEM string */
AjK 0:0a841b89d614 259 #ifndef _INC_TCHAR
AjK 0:0a841b89d614 260 typedef char TCHAR;
AjK 0:0a841b89d614 261 #define _T(x) x
AjK 0:0a841b89d614 262 #define _TEXT(x) x
AjK 0:0a841b89d614 263 #endif
AjK 0:0a841b89d614 264
AjK 0:0a841b89d614 265 #endif
AjK 0:0a841b89d614 266
AjK 0:0a841b89d614 267
AjK 0:0a841b89d614 268
AjK 0:0a841b89d614 269 /* File system object structure (FATFS) */
AjK 0:0a841b89d614 270
AjK 0:0a841b89d614 271 typedef struct {
AjK 0:0a841b89d614 272 BYTE fs_type; /* FAT sub-type (0:Not mounted) */
AjK 0:0a841b89d614 273 BYTE drv; /* Physical drive number */
AjK 0:0a841b89d614 274 BYTE csize; /* Sectors per cluster (1,2,4...128) */
AjK 0:0a841b89d614 275 BYTE n_fats; /* Number of FAT copies (1,2) */
AjK 0:0a841b89d614 276 BYTE wflag; /* win[] dirty flag (1:must be written back) */
AjK 0:0a841b89d614 277 BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */
AjK 0:0a841b89d614 278 WORD id; /* File system mount ID */
AjK 0:0a841b89d614 279 WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
AjK 0:0a841b89d614 280 #if _MAX_SS != 512
AjK 0:0a841b89d614 281 WORD ssize; /* Bytes per sector (512,1024,2048,4096) */
AjK 0:0a841b89d614 282 #endif
AjK 0:0a841b89d614 283 #if _FS_REENTRANT
AjK 0:0a841b89d614 284 _SYNC_t sobj; /* Identifier of sync object */
AjK 0:0a841b89d614 285 #endif
AjK 0:0a841b89d614 286 #if !_FS_READONLY
AjK 0:0a841b89d614 287 DWORD last_clust; /* Last allocated cluster */
AjK 0:0a841b89d614 288 DWORD free_clust; /* Number of free clusters */
AjK 0:0a841b89d614 289 DWORD fsi_sector; /* fsinfo sector (FAT32) */
AjK 0:0a841b89d614 290 #endif
AjK 0:0a841b89d614 291 #if _FS_RPATH
AjK 0:0a841b89d614 292 DWORD cdir; /* Current directory start cluster (0:root) */
AjK 0:0a841b89d614 293 #endif
AjK 0:0a841b89d614 294 DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */
AjK 0:0a841b89d614 295 DWORD fsize; /* Sectors per FAT */
AjK 0:0a841b89d614 296 DWORD fatbase; /* FAT start sector */
AjK 0:0a841b89d614 297 DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
AjK 0:0a841b89d614 298 DWORD database; /* Data start sector */
AjK 0:0a841b89d614 299 DWORD winsect; /* Current sector appearing in the win[] */
AjK 0:0a841b89d614 300 BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and Data on tiny cfg) */
AjK 0:0a841b89d614 301 } FATFS;
AjK 0:0a841b89d614 302
AjK 0:0a841b89d614 303
AjK 0:0a841b89d614 304
AjK 0:0a841b89d614 305 /* File object structure (FIL) */
AjK 0:0a841b89d614 306
AjK 0:0a841b89d614 307 typedef struct {
AjK 0:0a841b89d614 308 FATFS* fs; /* Pointer to the owner file system object */
AjK 0:0a841b89d614 309 WORD id; /* Owner file system mount ID */
AjK 0:0a841b89d614 310 BYTE flag; /* File status flags */
AjK 0:0a841b89d614 311 BYTE pad1;
AjK 0:0a841b89d614 312 DWORD fptr; /* File read/write pointer (0 on file open) */
AjK 0:0a841b89d614 313 DWORD fsize; /* File size */
AjK 0:0a841b89d614 314 DWORD org_clust; /* File start cluster (0 when fsize==0) */
AjK 0:0a841b89d614 315 DWORD curr_clust; /* Current cluster */
AjK 0:0a841b89d614 316 DWORD dsect; /* Current data sector */
AjK 0:0a841b89d614 317 #if !_FS_READONLY
AjK 0:0a841b89d614 318 DWORD dir_sect; /* Sector containing the directory entry */
AjK 0:0a841b89d614 319 BYTE* dir_ptr; /* Ponter to the directory entry in the window */
AjK 0:0a841b89d614 320 #endif
AjK 0:0a841b89d614 321 #if _USE_FASTSEEK
AjK 0:0a841b89d614 322 DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */
AjK 0:0a841b89d614 323 #endif
AjK 0:0a841b89d614 324 #if _FS_SHARE
AjK 0:0a841b89d614 325 UINT lockid; /* File lock ID (index of file semaphore table) */
AjK 0:0a841b89d614 326 #endif
AjK 0:0a841b89d614 327 #if !_FS_TINY
AjK 0:0a841b89d614 328 BYTE buf[_MAX_SS]; /* File data read/write buffer */
AjK 0:0a841b89d614 329 #endif
AjK 0:0a841b89d614 330 } FIL;
AjK 0:0a841b89d614 331
AjK 0:0a841b89d614 332
AjK 0:0a841b89d614 333
AjK 0:0a841b89d614 334 /* Directory object structure (DIR) */
AjK 0:0a841b89d614 335
AjK 0:0a841b89d614 336 typedef struct {
AjK 0:0a841b89d614 337 FATFS* fs; /* Pointer to the owner file system object */
AjK 0:0a841b89d614 338 WORD id; /* Owner file system mount ID */
AjK 0:0a841b89d614 339 WORD index; /* Current read/write index number */
AjK 0:0a841b89d614 340 DWORD sclust; /* Table start cluster (0:Root dir) */
AjK 0:0a841b89d614 341 DWORD clust; /* Current cluster */
AjK 0:0a841b89d614 342 DWORD sect; /* Current sector */
AjK 0:0a841b89d614 343 BYTE* dir; /* Pointer to the current SFN entry in the win[] */
AjK 0:0a841b89d614 344 BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
AjK 0:0a841b89d614 345 #if _USE_LFN
AjK 0:0a841b89d614 346 WCHAR* lfn; /* Pointer to the LFN working buffer */
AjK 0:0a841b89d614 347 WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
AjK 0:0a841b89d614 348 #endif
AjK 0:0a841b89d614 349 } DIR;
AjK 0:0a841b89d614 350
AjK 0:0a841b89d614 351
AjK 0:0a841b89d614 352
AjK 0:0a841b89d614 353 /* File status structure (FILINFO) */
AjK 0:0a841b89d614 354
AjK 0:0a841b89d614 355 typedef struct {
AjK 0:0a841b89d614 356 DWORD fsize; /* File size */
AjK 0:0a841b89d614 357 WORD fdate; /* Last modified date */
AjK 0:0a841b89d614 358 WORD ftime; /* Last modified time */
AjK 0:0a841b89d614 359 BYTE fattrib; /* Attribute */
AjK 0:0a841b89d614 360 TCHAR fname[13]; /* Short file name (8.3 format) */
AjK 0:0a841b89d614 361 #if _USE_LFN
AjK 0:0a841b89d614 362 TCHAR* lfname; /* Pointer to the LFN buffer */
AjK 0:0a841b89d614 363 UINT lfsize; /* Size of LFN buffer in TCHAR */
AjK 0:0a841b89d614 364 #endif
AjK 0:0a841b89d614 365 } FILINFO;
AjK 0:0a841b89d614 366
AjK 0:0a841b89d614 367
AjK 0:0a841b89d614 368
AjK 0:0a841b89d614 369 /* File function return code (FRESULT) */
AjK 0:0a841b89d614 370
AjK 0:0a841b89d614 371 typedef enum {
AjK 0:0a841b89d614 372 FR_OK = 0, /* (0) Succeeded */
AjK 0:0a841b89d614 373 FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
AjK 0:0a841b89d614 374 FR_INT_ERR, /* (2) Assertion failed */
AjK 0:0a841b89d614 375 FR_NOT_READY, /* (3) The physical drive cannot work */
AjK 0:0a841b89d614 376 FR_NO_FILE, /* (4) Could not find the file */
AjK 0:0a841b89d614 377 FR_NO_PATH, /* (5) Could not find the path */
AjK 0:0a841b89d614 378 FR_INVALID_NAME, /* (6) The path name format is invalid */
AjK 0:0a841b89d614 379 FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */
AjK 0:0a841b89d614 380 FR_EXIST, /* (8) Acces denied due to prohibited access */
AjK 0:0a841b89d614 381 FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
AjK 0:0a841b89d614 382 FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
AjK 0:0a841b89d614 383 FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
AjK 0:0a841b89d614 384 FR_NOT_ENABLED, /* (12) The volume has no work area */
AjK 0:0a841b89d614 385 FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume on the physical drive */
AjK 0:0a841b89d614 386 FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
AjK 0:0a841b89d614 387 FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
AjK 0:0a841b89d614 388 FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */
AjK 0:0a841b89d614 389 FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
AjK 0:0a841b89d614 390 FR_TOO_MANY_OPEN_FILES /* (18) Number of open files > _FS_SHARE */
AjK 0:0a841b89d614 391 } FRESULT;
AjK 0:0a841b89d614 392
AjK 0:0a841b89d614 393
AjK 0:0a841b89d614 394
AjK 0:0a841b89d614 395 /*--------------------------------------------------------------*/
AjK 0:0a841b89d614 396 /* FatFs module application interface */
AjK 0:0a841b89d614 397
AjK 0:0a841b89d614 398 FRESULT f_mount (BYTE, FATFS*); /* Mount/Unmount a logical drive */
AjK 0:0a841b89d614 399 FRESULT f_open (FIL*, const TCHAR*, BYTE); /* Open or create a file */
AjK 0:0a841b89d614 400 FRESULT f_read (FIL*, void*, UINT, UINT*); /* Read data from a file */
AjK 0:0a841b89d614 401 FRESULT f_lseek (FIL*, DWORD); /* Move file pointer of a file object */
AjK 0:0a841b89d614 402 FRESULT f_close (FIL*); /* Close an open file object */
AjK 0:0a841b89d614 403 FRESULT f_opendir (DIR*, const TCHAR*); /* Open an existing directory */
AjK 0:0a841b89d614 404 FRESULT f_readdir (DIR*, FILINFO*); /* Read a directory item */
AjK 0:0a841b89d614 405 FRESULT f_stat (const TCHAR*, FILINFO*); /* Get file status */
AjK 0:0a841b89d614 406
AjK 0:0a841b89d614 407 #if !_FS_READONLY
AjK 0:0a841b89d614 408 FRESULT f_write (FIL*, const void*, UINT, UINT*); /* Write data to a file */
AjK 0:0a841b89d614 409 FRESULT f_getfree (const TCHAR*, DWORD*, FATFS**); /* Get number of free clusters on the drive */
AjK 0:0a841b89d614 410 FRESULT f_truncate (FIL*); /* Truncate file */
AjK 0:0a841b89d614 411 FRESULT f_sync (FIL*); /* Flush cached data of a writing file */
AjK 0:0a841b89d614 412 FRESULT f_unlink (const TCHAR*); /* Delete an existing file or directory */
AjK 0:0a841b89d614 413 FRESULT f_mkdir (const TCHAR*); /* Create a new directory */
AjK 0:0a841b89d614 414 FRESULT f_chmod (const TCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */
AjK 0:0a841b89d614 415 FRESULT f_utime (const TCHAR*, const FILINFO*); /* Change timestamp of the file/dir */
AjK 0:0a841b89d614 416 FRESULT f_rename (const TCHAR*, const TCHAR*); /* Rename/Move a file or directory */
AjK 0:0a841b89d614 417 #endif
AjK 0:0a841b89d614 418
AjK 0:0a841b89d614 419 #if _USE_FORWARD
AjK 0:0a841b89d614 420 FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
AjK 0:0a841b89d614 421 #endif
AjK 0:0a841b89d614 422
AjK 0:0a841b89d614 423 #if _USE_MKFS
AjK 0:0a841b89d614 424 FRESULT f_mkfs (BYTE, BYTE, UINT); /* Create a file system on the drive */
AjK 0:0a841b89d614 425 #endif
AjK 0:0a841b89d614 426
AjK 0:0a841b89d614 427 #if _FS_RPATH
AjK 0:0a841b89d614 428 FRESULT f_chdrive (BYTE); /* Change current drive */
AjK 0:0a841b89d614 429 FRESULT f_chdir (const TCHAR*); /* Change current directory */
AjK 0:0a841b89d614 430 FRESULT f_getcwd (TCHAR*, UINT); /* Get current directory */
AjK 0:0a841b89d614 431 #endif
AjK 0:0a841b89d614 432
AjK 0:0a841b89d614 433 #if _USE_STRFUNC
AjK 0:0a841b89d614 434 int f_putc (TCHAR, FIL*); /* Put a character to the file */
AjK 0:0a841b89d614 435 int f_puts (const TCHAR*, FIL*); /* Put a string to the file */
AjK 0:0a841b89d614 436 int f_printf (FIL*, const TCHAR*, ...); /* Put a formatted string to the file */
AjK 0:0a841b89d614 437 TCHAR* f_gets (TCHAR*, int, FIL*); /* Get a string from the file */
AjK 0:0a841b89d614 438 #ifndef EOF
AjK 0:0a841b89d614 439 #define EOF (-1)
AjK 0:0a841b89d614 440 #endif
AjK 0:0a841b89d614 441 #endif
AjK 0:0a841b89d614 442
AjK 0:0a841b89d614 443 #define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
AjK 0:0a841b89d614 444 #define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
AjK 0:0a841b89d614 445 #define f_tell(fp) ((fp)->fptr)
AjK 0:0a841b89d614 446 #define f_size(fp) ((fp)->fsize)
AjK 0:0a841b89d614 447
AjK 0:0a841b89d614 448
AjK 0:0a841b89d614 449
AjK 0:0a841b89d614 450 /*--------------------------------------------------------------*/
AjK 0:0a841b89d614 451 /* Additional user defined functions */
AjK 0:0a841b89d614 452
AjK 0:0a841b89d614 453 /* RTC function */
AjK 0:0a841b89d614 454 #if !_FS_READONLY
AjK 0:0a841b89d614 455 DWORD get_fattime (void);
AjK 0:0a841b89d614 456 #endif
AjK 0:0a841b89d614 457
AjK 0:0a841b89d614 458 /* Unicode support functions */
AjK 0:0a841b89d614 459 #if _USE_LFN /* Unicode - OEM code conversion */
AjK 0:0a841b89d614 460 WCHAR ff_convert (WCHAR, UINT); /* OEM-Unicode bidirectional conversion */
AjK 0:0a841b89d614 461 WCHAR ff_wtoupper (WCHAR); /* Unicode upper-case conversion */
AjK 0:0a841b89d614 462 #if _USE_LFN == 3 /* Memory functions */
AjK 0:0a841b89d614 463 void* ff_memalloc (UINT); /* Allocate memory block */
AjK 0:0a841b89d614 464 void ff_memfree (void*); /* Free memory block */
AjK 0:0a841b89d614 465 #endif
AjK 0:0a841b89d614 466 #endif
AjK 0:0a841b89d614 467
AjK 0:0a841b89d614 468 /* Sync functions */
AjK 0:0a841b89d614 469 #if _FS_REENTRANT
AjK 0:0a841b89d614 470 int ff_cre_syncobj (BYTE, _SYNC_t*);/* Create a sync object */
AjK 0:0a841b89d614 471 int ff_del_syncobj (_SYNC_t); /* Delete a sync object */
AjK 0:0a841b89d614 472 int ff_req_grant (_SYNC_t); /* Lock sync object */
AjK 0:0a841b89d614 473 void ff_rel_grant (_SYNC_t); /* Unlock sync object */
AjK 0:0a841b89d614 474 #endif
AjK 0:0a841b89d614 475
AjK 0:0a841b89d614 476
AjK 0:0a841b89d614 477
AjK 0:0a841b89d614 478
AjK 0:0a841b89d614 479 /*--------------------------------------------------------------*/
AjK 0:0a841b89d614 480 /* Flags and offset address */
AjK 0:0a841b89d614 481
AjK 0:0a841b89d614 482
AjK 0:0a841b89d614 483 /* File access control and file status flags (FIL.flag) */
AjK 0:0a841b89d614 484
AjK 0:0a841b89d614 485 #define FA_READ 0x01
AjK 0:0a841b89d614 486 #define FA_OPEN_EXISTING 0x00
AjK 0:0a841b89d614 487 #define FA__ERROR 0x80
AjK 0:0a841b89d614 488
AjK 0:0a841b89d614 489 #if !_FS_READONLY
AjK 0:0a841b89d614 490 #define FA_WRITE 0x02
AjK 0:0a841b89d614 491 #define FA_CREATE_NEW 0x04
AjK 0:0a841b89d614 492 #define FA_CREATE_ALWAYS 0x08
AjK 0:0a841b89d614 493 #define FA_OPEN_ALWAYS 0x10
AjK 0:0a841b89d614 494 #define FA__WRITTEN 0x20
AjK 0:0a841b89d614 495 #define FA__DIRTY 0x40
AjK 0:0a841b89d614 496 #endif
AjK 0:0a841b89d614 497
AjK 0:0a841b89d614 498
AjK 0:0a841b89d614 499 /* FAT sub type (FATFS.fs_type) */
AjK 0:0a841b89d614 500
AjK 0:0a841b89d614 501 #define FS_FAT12 1
AjK 0:0a841b89d614 502 #define FS_FAT16 2
AjK 0:0a841b89d614 503 #define FS_FAT32 3
AjK 0:0a841b89d614 504
AjK 0:0a841b89d614 505
AjK 0:0a841b89d614 506 /* File attribute bits for directory entry */
AjK 0:0a841b89d614 507
AjK 0:0a841b89d614 508 #define AM_RDO 0x01 /* Read only */
AjK 0:0a841b89d614 509 #define AM_HID 0x02 /* Hidden */
AjK 0:0a841b89d614 510 #define AM_SYS 0x04 /* System */
AjK 0:0a841b89d614 511 #define AM_VOL 0x08 /* Volume label */
AjK 0:0a841b89d614 512 #define AM_LFN 0x0F /* LFN entry */
AjK 0:0a841b89d614 513 #define AM_DIR 0x10 /* Directory */
AjK 0:0a841b89d614 514 #define AM_ARC 0x20 /* Archive */
AjK 0:0a841b89d614 515 #define AM_MASK 0x3F /* Mask of defined bits */
AjK 0:0a841b89d614 516
AjK 0:0a841b89d614 517
AjK 0:0a841b89d614 518 /* Fast seek function */
AjK 0:0a841b89d614 519 #define CREATE_LINKMAP 0xFFFFFFFF
AjK 0:0a841b89d614 520
AjK 0:0a841b89d614 521
AjK 0:0a841b89d614 522 /*--------------------------------*/
AjK 0:0a841b89d614 523 /* Multi-byte word access macros */
AjK 0:0a841b89d614 524
AjK 0:0a841b89d614 525 #if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */
AjK 0:0a841b89d614 526 #define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))
AjK 0:0a841b89d614 527 #define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr))
AjK 0:0a841b89d614 528 #define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val)
AjK 0:0a841b89d614 529 #define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val)
AjK 0:0a841b89d614 530 #else /* Use byte-by-byte access to the FAT structure */
AjK 0:0a841b89d614 531 #define LD_WORD(ptr) (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr))
AjK 0:0a841b89d614 532 #define LD_DWORD(ptr) (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr))
AjK 0:0a841b89d614 533 #define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8)
AjK 0:0a841b89d614 534 #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)
AjK 0:0a841b89d614 535 #endif
AjK 0:0a841b89d614 536
AjK 0:0a841b89d614 537 #ifdef __cplusplus
AjK 0:0a841b89d614 538 }
AjK 0:0a841b89d614 539 #endif
AjK 0:0a841b89d614 540
AjK 0:0a841b89d614 541 #endif /* _FATFS */