OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [Common/] [FileSystem/] [FatFs-0.7e/] [src/] [ff.h] - Blame information for rev 606

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 606 jeremybenn
/*---------------------------------------------------------------------------/
2
/  FatFs - FAT file system module include file  R0.07e       (C)ChaN, 2009
3
/----------------------------------------------------------------------------/
4
/ FatFs module is a generic FAT file system module for small embedded systems.
5
/ This is a free software that opened for education, research and commercial
6
/ developments under license policy of following trems.
7
/
8
/  Copyright (C) 2009, ChaN, all right reserved.
9
/
10
/ * The FatFs module is a free software and there is NO WARRANTY.
11
/ * No restriction on use. You can use, modify and redistribute it for
12
/   personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY.
13
/ * Redistributions of source code must retain the above copyright notice.
14
/----------------------------------------------------------------------------*/
15
 
16
#ifndef _FATFS
17
#define _FATFS  0x007E
18
 
19
#include "fat_integer.h"        /* Basic integer types */
20
#include "ffconf.h"             /* FatFs configuration options */
21
 
22
#if _FATFS != _FFCONFIG
23
#error Wrong configuration file (ffconf.h).
24
#endif
25
 
26
 
27
/* DBCS code ranges and SBCS extend char conversion table */
28
 
29
#if _CODE_PAGE == 932   /* Japanese Shift-JIS */
30
#define _DF1S   0x81    /* DBC 1st byte range 1 start */
31
#define _DF1E   0x9F    /* DBC 1st byte range 1 end */
32
#define _DF2S   0xE0    /* DBC 1st byte range 2 start */
33
#define _DF2E   0xFC    /* DBC 1st byte range 2 end */
34
#define _DS1S   0x40    /* DBC 2nd byte range 1 start */
35
#define _DS1E   0x7E    /* DBC 2nd byte range 1 end */
36
#define _DS2S   0x80    /* DBC 2nd byte range 2 start */
37
#define _DS2E   0xFC    /* DBC 2nd byte range 2 end */
38
 
39
#elif _CODE_PAGE == 936 /* Simplified Chinese GBK */
40
#define _DF1S   0x81
41
#define _DF1E   0xFE
42
#define _DS1S   0x40
43
#define _DS1E   0x7E
44
#define _DS2S   0x80
45
#define _DS2E   0xFE
46
 
47
#elif _CODE_PAGE == 949 /* Korean */
48
#define _DF1S   0x81
49
#define _DF1E   0xFE
50
#define _DS1S   0x41
51
#define _DS1E   0x5A
52
#define _DS2S   0x61
53
#define _DS2E   0x7A
54
#define _DS3S   0x81
55
#define _DS3E   0xFE
56
 
57
#elif _CODE_PAGE == 950 /* Traditional Chinese Big5 */
58
#define _DF1S   0x81
59
#define _DF1E   0xFE
60
#define _DS1S   0x40
61
#define _DS1E   0x7E
62
#define _DS2S   0xA1
63
#define _DS2E   0xFE
64
 
65
#elif _CODE_PAGE == 437 /* U.S. (OEM) */
66
#define _DF1S   0
67
#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, \
68
                                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, \
69
                                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, \
70
                                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}
71
 
72
#elif _CODE_PAGE == 720 /* Arabic (OEM) */
73
#define _DF1S   0
74
#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, \
75
                                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, \
76
                                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, \
77
                                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}
78
 
79
#elif _CODE_PAGE == 737 /* Greek (OEM) */
80
#define _DF1S   0
81
#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, \
82
                                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, \
83
                                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, \
84
                                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}
85
 
86
#elif _CODE_PAGE == 775 /* Baltic (OEM) */
87
#define _DF1S   0
88
#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, \
89
                                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, \
90
                                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, \
91
                                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}
92
 
93
#elif _CODE_PAGE == 850 /* Multilingual Latin 1 (OEM) */
94
#define _DF1S   0
95
#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, \
96
                                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, \
97
                                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, \
98
                                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}
99
 
100
#elif _CODE_PAGE == 852 /* Latin 2 (OEM) */
101
#define _DF1S   0
102
#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, \
103
                                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, \
104
                                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, \
105
                                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}
106
 
107
#elif _CODE_PAGE == 855 /* Cyrillic (OEM) */
108
#define _DF1S   0
109
#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, \
110
                                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, \
111
                                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, \
112
                                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}
113
 
114
#elif _CODE_PAGE == 857 /* Turkish (OEM) */
115
#define _DF1S   0
116
#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, \
117
                                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, \
118
                                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, \
119
                                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}
120
 
121
#elif _CODE_PAGE == 858 /* Multilingual Latin 1 + Euro (OEM) */
122
#define _DF1S   0
123
#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, \
124
                                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, \
125
                                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, \
126
                                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}
127
 
128
#elif _CODE_PAGE == 862 /* Hebrew (OEM) */
129
#define _DF1S   0
130
#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, \
131
                                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, \
132
                                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, \
133
                                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}
134
 
135
#elif _CODE_PAGE == 866 /* Russian (OEM) */
136
#define _DF1S   0
137
#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, \
138
                                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, \
139
                                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, \
140
                                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}
141
 
142
#elif _CODE_PAGE == 874 /* Thai (OEM, Windows) */
143
#define _DF1S   0
144
#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, \
145
                                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, \
146
                                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, \
147
                                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}
148
 
149
#elif _CODE_PAGE == 1250 /* Central Europe (Windows) */
150
#define _DF1S   0
151
#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, \
152
                                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, \
153
                                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, \
154
                                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}
155
 
156
#elif _CODE_PAGE == 1251 /* Cyrillic (Windows) */
157
#define _DF1S   0
158
#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, \
159
                                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, \
160
                                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, \
161
                                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}
162
 
163
#elif _CODE_PAGE == 1252 /* Latin 1 (Windows) */
164
#define _DF1S   0
165
#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, \
166
                                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, \
167
                                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, \
168
                                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}
169
 
170
#elif _CODE_PAGE == 1253 /* Greek (Windows) */
171
#define _DF1S   0
172
#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, \
173
                                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, \
174
                                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, \
175
                                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}
176
 
177
#elif _CODE_PAGE == 1254 /* Turkish (Windows) */
178
#define _DF1S   0
179
#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, \
180
                                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, \
181
                                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, \
182
                                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}
183
 
184
#elif _CODE_PAGE == 1255 /* Hebrew (Windows) */
185
#define _DF1S   0
186
#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, \
187
                                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, \
188
                                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, \
189
                                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}
190
 
191
#elif _CODE_PAGE == 1256 /* Arabic (Windows) */
192
#define _DF1S   0
193
#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, \
194
                                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, \
195
                                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, \
196
                                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}
197
 
198
#elif _CODE_PAGE == 1257 /* Baltic (Windows) */
199
#define _DF1S   0
200
#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, \
201
                                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, \
202
                                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, \
203
                                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}
204
 
205
#elif _CODE_PAGE == 1258 /* Vietnam (OEM, Windows) */
206
#define _DF1S   0
207
#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, \
208
                                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, \
209
                                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, \
210
                                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}
211
 
212
#elif _CODE_PAGE == 1   /* ASCII (for only non-LFN cfg) */
213
#define _DF1S   0
214
 
215
#else
216
#error Unknown code page
217
 
218
#endif
219
 
220
 
221
 
222
/* Character code support macros */
223
 
224
#define IsUpper(c)      (((c)>='A')&&((c)<='Z'))
225
#define IsLower(c)      (((c)>='a')&&((c)<='z'))
226
 
227
#if _DF1S               /* DBCS configuration */
228
 
229
#ifdef _DF2S    /* Two 1st byte areas */
230
#define IsDBCS1(c)      (((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E) || ((BYTE)(c) >= _DF2S && (BYTE)(c) <= _DF2E))
231
#else                   /* One 1st byte area */
232
#define IsDBCS1(c)      ((BYTE)(c) >= _DF1S && (BYTE)(c) <= _DF1E)
233
#endif
234
 
235
#ifdef _DS3S    /* Three 2nd byte areas */
236
#define IsDBCS2(c)      (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E) || ((BYTE)(c) >= _DS3S && (BYTE)(c) <= _DS3E))
237
#else                   /* Two 2nd byte areas */
238
#define IsDBCS2(c)      (((BYTE)(c) >= _DS1S && (BYTE)(c) <= _DS1E) || ((BYTE)(c) >= _DS2S && (BYTE)(c) <= _DS2E))
239
#endif
240
 
241
#else                   /* SBCS configuration */
242
 
243
#define IsDBCS1(c)      0
244
#define IsDBCS2(c)      0
245
 
246
#endif /* _DF1S */
247
 
248
 
249
 
250
/* Definitions corresponds to multi partition */
251
 
252
#if _MULTI_PARTITION            /* Multiple partition configuration */
253
 
254
typedef struct _PARTITION {
255
        BYTE pd;        /* Physical drive# */
256
        BYTE pt;        /* Partition # (0-3) */
257
} PARTITION;
258
 
259
extern
260
const PARTITION Drives[];                       /* Logical drive# to physical location conversion table */
261
#define LD2PD(drv) (Drives[drv].pd)     /* Get physical drive# */
262
#define LD2PT(drv) (Drives[drv].pt)     /* Get partition# */
263
 
264
#else                                           /* Single partition configuration */
265
 
266
#define LD2PD(drv) (drv)        /* Physical drive# is equal to the logical drive# */
267
#define LD2PT(drv) 0            /* Always mounts the 1st partition */
268
 
269
#endif
270
 
271
 
272
 
273
/* Definitions corresponds to multiple sector size */
274
 
275
#if _MAX_SS == 512              /* Single sector size */
276
#define SS(fs)  512U
277
 
278
#elif _MAX_SS == 1024 || _MAX_SS == 2048 || _MAX_SS == 4096     /* Multiple sector size */
279
#define SS(fs)  ((fs)->s_size)
280
 
281
#else
282
#error Sector size must be 512, 1024, 2048 or 4096.
283
 
284
#endif
285
 
286
 
287
 
288
/* Type of file name on FatFs API */
289
 
290
#if _LFN_UNICODE && _USE_LFN
291
typedef WCHAR XCHAR;    /* Unicode */
292
#else
293
typedef char XCHAR;             /* SBCS, DBCS */
294
#endif
295
 
296
 
297
 
298
/* File system object structure */
299
 
300
typedef struct _FATFS_ {
301
        BYTE    fs_type;        /* FAT sub type */
302
        BYTE    drive;          /* Physical drive number */
303
        BYTE    csize;          /* Number of sectors per cluster */
304
        BYTE    n_fats;         /* Number of FAT copies */
305
        BYTE    wflag;          /* win[] dirty flag (1:must be written back) */
306
        BYTE    fsi_flag;       /* fsinfo dirty flag (1:must be written back) */
307
        WORD    id;                     /* File system mount ID */
308
        WORD    n_rootdir;      /* Number of root directory entries (0 on FAT32) */
309
#if _FS_REENTRANT
310
        _SYNC_t sobj;           /* Identifier of sync object */
311
#endif
312
#if _MAX_SS != 512
313
        WORD    s_size;         /* Sector size */
314
#endif
315
#if !_FS_READONLY
316
        DWORD   last_clust;     /* Last allocated cluster */
317
        DWORD   free_clust;     /* Number of free clusters */
318
        DWORD   fsi_sector;     /* fsinfo sector */
319
#endif
320
#if _FS_RPATH
321
        DWORD   cdir;           /* Current directory (0:root)*/
322
#endif
323
        DWORD   sects_fat;      /* Sectors per fat */
324
        DWORD   max_clust;      /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */
325
        DWORD   fatbase;        /* FAT start sector */
326
        DWORD   dirbase;        /* Root directory start sector (Cluster# on FAT32) */
327
        DWORD   database;       /* Data start sector */
328
        DWORD   winsect;        /* Current sector appearing in the win[] */
329
        BYTE    win[_MAX_SS];/* Disk access window for Directory/FAT */
330
} FATFS;
331
 
332
 
333
 
334
/* Directory object structure */
335
 
336
typedef struct _DIR_ {
337
        FATFS*  fs;                     /* Pointer to the owner file system object */
338
        WORD    id;                     /* Owner file system mount ID */
339
        WORD    index;          /* Current read/write index number */
340
        DWORD   sclust;         /* Table start cluster (0:Static table) */
341
        DWORD   clust;          /* Current cluster */
342
        DWORD   sect;           /* Current sector */
343
        BYTE*   dir;            /* Pointer to the current SFN entry in the win[] */
344
        BYTE*   fn;                     /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
345
#if _USE_LFN
346
        WCHAR*  lfn;            /* Pointer to the LFN working buffer */
347
        WORD    lfn_idx;        /* Last matched LFN index number (0xFFFF:No LFN) */
348
#endif
349
} DIR;
350
 
351
 
352
 
353
/* File object structure */
354
 
355
typedef struct _FIL_ {
356
        FATFS*  fs;                     /* Pointer to the owner file system object */
357
        WORD    id;                     /* Owner file system mount ID */
358
        BYTE    flag;           /* File status flags */
359
        BYTE    csect;          /* Sector address in the cluster */
360
        DWORD   fptr;           /* File R/W pointer */
361
        DWORD   fsize;          /* File size */
362
        DWORD   org_clust;      /* File start cluster */
363
        DWORD   curr_clust;     /* Current cluster */
364
        DWORD   dsect;          /* Current data sector */
365
#if !_FS_READONLY
366
        DWORD   dir_sect;       /* Sector containing the directory entry */
367
        BYTE*   dir_ptr;        /* Ponter to the directory entry in the window */
368
#endif
369
#if !_FS_TINY
370
        BYTE    buf[_MAX_SS];/* File R/W buffer */
371
#endif
372
} FIL;
373
 
374
 
375
 
376
/* File status structure */
377
 
378
typedef struct _FILINFO_ {
379
        DWORD   fsize;          /* File size */
380
        WORD    fdate;          /* Last modified date */
381
        WORD    ftime;          /* Last modified time */
382
        BYTE    fattrib;        /* Attribute */
383
        char    fname[13];      /* Short file name (8.3 format) */
384
#if _USE_LFN
385
        XCHAR*  lfname;         /* Pointer to the LFN buffer */
386
        int     lfsize;         /* Size of LFN buffer [chrs] */
387
#endif
388
} FILINFO;
389
 
390
 
391
 
392
/* File function return code (FRESULT) */
393
 
394
typedef enum {
395
        FR_OK = 0,                       /* 0 */
396
        FR_DISK_ERR,            /* 1 */
397
        FR_INT_ERR,                     /* 2 */
398
        FR_NOT_READY,           /* 3 */
399
        FR_NO_FILE,                     /* 4 */
400
        FR_NO_PATH,                     /* 5 */
401
        FR_INVALID_NAME,        /* 6 */
402
        FR_DENIED,                      /* 7 */
403
        FR_EXIST,                       /* 8 */
404
        FR_INVALID_OBJECT,      /* 9 */
405
        FR_WRITE_PROTECTED,     /* 10 */
406
        FR_INVALID_DRIVE,       /* 11 */
407
        FR_NOT_ENABLED,         /* 12 */
408
        FR_NO_FILESYSTEM,       /* 13 */
409
        FR_MKFS_ABORTED,        /* 14 */
410
        FR_TIMEOUT                      /* 15 */
411
} FRESULT;
412
 
413
 
414
 
415
/*--------------------------------------------------------------*/
416
/* FatFs module application interface                           */
417
 
418
FRESULT f_mount (BYTE, FATFS*);                                         /* Mount/Unmount a logical drive */
419
FRESULT f_open (FIL*, const XCHAR*, BYTE);                      /* Open or create a file */
420
FRESULT f_read (FIL*, void*, UINT, UINT*);                      /* Read data from a file */
421
FRESULT f_write (FIL*, const void*, UINT, UINT*);       /* Write data to a file */
422
FRESULT f_lseek (FIL*, DWORD);                                          /* Move file pointer of a file object */
423
FRESULT f_close (FIL*);                                                         /* Close an open file object */
424
FRESULT f_opendir (DIR*, const XCHAR*);                         /* Open an existing directory */
425
FRESULT f_readdir (DIR*, FILINFO*);                                     /* Read a directory item */
426
FRESULT f_stat (const XCHAR*, FILINFO*);                        /* Get file status */
427
FRESULT f_getfree (const XCHAR*, DWORD*, FATFS**);      /* Get number of free clusters on the drive */
428
FRESULT f_truncate (FIL*);                                                      /* Truncate file */
429
FRESULT f_sync (FIL*);                                                          /* Flush cached data of a writing file */
430
FRESULT f_unlink (const XCHAR*);                                        /* Delete an existing file or directory */
431
FRESULT f_mkdir (const XCHAR*);                                         /* Create a new directory */
432
FRESULT f_chmod (const XCHAR*, BYTE, BYTE);                     /* Change attriburte of the file/dir */
433
FRESULT f_utime (const XCHAR*, const FILINFO*);         /* Change timestamp of the file/dir */
434
FRESULT f_rename (const XCHAR*, const XCHAR*);          /* Rename/Move a file or directory */
435
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*);       /* Forward data to the stream */
436
FRESULT f_mkfs (BYTE, BYTE, WORD);                                      /* Create a file system on the drive */
437
FRESULT f_chdir (const XCHAR*);                                         /* Change current directory */
438
FRESULT f_chdrive (BYTE);                                                       /* Change current drive */
439
 
440
#if _USE_STRFUNC
441
int f_putc (int, FIL*);                                                         /* Put a character to the file */
442
int f_puts (const char*, FIL*);                                         /* Put a string to the file */
443
int f_printf (FIL*, const char*, ...);                          /* Put a formatted string to the file */
444
char* f_gets (char*, int, FIL*);                                        /* Get a string from the file */
445
#define f_eof(fp) (((fp)->fptr == (fp)->fsize) ? 1 : 0)
446
#define f_error(fp) (((fp)->flag & FA__ERROR) ? 1 : 0)
447
#ifndef EOF
448
#define EOF -1
449
#endif
450
#endif
451
 
452
 
453
 
454
/*--------------------------------------------------------------*/
455
/* User defined functions                                       */
456
 
457
/* Real time clock */
458
#if !_FS_READONLY
459
DWORD get_fattime (void);       /* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */
460
                                                        /* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */
461
#endif
462
 
463
/* Unicode - OEM code conversion */
464
#if _USE_LFN
465
WCHAR ff_convert (WCHAR, UINT);
466
WCHAR ff_wtoupper (WCHAR);
467
#endif
468
 
469
/* Sync functions */
470
#if _FS_REENTRANT
471
BOOL ff_cre_syncobj(BYTE, _SYNC_t*);
472
BOOL ff_del_syncobj(_SYNC_t);
473
BOOL ff_req_grant(_SYNC_t);
474
void ff_rel_grant(_SYNC_t);
475
#endif
476
 
477
 
478
 
479
/*--------------------------------------------------------------*/
480
/* Flags and offset address                                     */
481
 
482
 
483
/* File access control and file status flags (FIL.flag) */
484
 
485
#define FA_READ                         0x01
486
#define FA_OPEN_EXISTING        0x00
487
#if _FS_READONLY == 0
488
#define FA_WRITE                        0x02
489
#define FA_CREATE_NEW           0x04
490
#define FA_CREATE_ALWAYS        0x08
491
#define FA_OPEN_ALWAYS          0x10
492
#define FA__WRITTEN                     0x20
493
#define FA__DIRTY                       0x40
494
#endif
495
#define FA__ERROR                       0x80
496
 
497
 
498
/* FAT sub type (FATFS.fs_type) */
499
 
500
#define FS_FAT12        1
501
#define FS_FAT16        2
502
#define FS_FAT32        3
503
 
504
 
505
/* File attribute bits for directory entry */
506
 
507
#define AM_RDO  0x01    /* Read only */
508
#define AM_HID  0x02    /* Hidden */
509
#define AM_SYS  0x04    /* System */
510
#define AM_VOL  0x08    /* Volume label */
511
#define AM_LFN  0x0F    /* LFN entry */
512
#define AM_DIR  0x10    /* Directory */
513
#define AM_ARC  0x20    /* Archive */
514
#define AM_MASK 0x3F    /* Mask of defined bits */
515
 
516
 
517
/* FatFs refers the members in the FAT structures with byte offset instead
518
/ of structure member because there are incompatibility of the packing option
519
/ between various compilers. */
520
 
521
#define BS_jmpBoot                      0
522
#define BS_OEMName                      3
523
#define BPB_BytsPerSec          11
524
#define BPB_SecPerClus          13
525
#define BPB_RsvdSecCnt          14
526
#define BPB_NumFATs                     16
527
#define BPB_RootEntCnt          17
528
#define BPB_TotSec16            19
529
#define BPB_Media                       21
530
#define BPB_FATSz16                     22
531
#define BPB_SecPerTrk           24
532
#define BPB_NumHeads            26
533
#define BPB_HiddSec                     28
534
#define BPB_TotSec32            32
535
#define BS_55AA                         510
536
 
537
#define BS_DrvNum                       36
538
#define BS_BootSig                      38
539
#define BS_VolID                        39
540
#define BS_VolLab                       43
541
#define BS_FilSysType           54
542
 
543
#define BPB_FATSz32                     36
544
#define BPB_ExtFlags            40
545
#define BPB_FSVer                       42
546
#define BPB_RootClus            44
547
#define BPB_FSInfo                      48
548
#define BPB_BkBootSec           50
549
#define BS_DrvNum32                     64
550
#define BS_BootSig32            66
551
#define BS_VolID32                      67
552
#define BS_VolLab32                     71
553
#define BS_FilSysType32         82
554
 
555
#define FSI_LeadSig                     0
556
#define FSI_StrucSig            484
557
#define FSI_Free_Count          488
558
#define FSI_Nxt_Free            492
559
 
560
#define MBR_Table                       446
561
 
562
#define DIR_Name                        0
563
#define DIR_Attr                        11
564
#define DIR_NTres                       12
565
#define DIR_CrtTime                     14
566
#define DIR_CrtDate                     16
567
#define DIR_FstClusHI           20
568
#define DIR_WrtTime                     22
569
#define DIR_WrtDate                     24
570
#define DIR_FstClusLO           26
571
#define DIR_FileSize            28
572
#define LDIR_Ord                        0
573
#define LDIR_Attr                       11
574
#define LDIR_Type                       12
575
#define LDIR_Chksum                     13
576
#define LDIR_FstClusLO          26
577
 
578
 
579
 
580
/*--------------------------------*/
581
/* Multi-byte word access macros  */
582
 
583
#if _WORD_ACCESS == 1   /* Enable word access to the FAT structure */
584
#define LD_WORD(ptr)            (WORD)(*(WORD*)(BYTE*)(ptr))
585
#define LD_DWORD(ptr)           (DWORD)(*(DWORD*)(BYTE*)(ptr))
586
#define ST_WORD(ptr,val)        *(WORD*)(BYTE*)(ptr)=(WORD)(val)
587
#define ST_DWORD(ptr,val)       *(DWORD*)(BYTE*)(ptr)=(DWORD)(val)
588
#else                                   /* Use byte-by-byte access to the FAT structure */
589
#define LD_WORD(ptr)            (WORD)(((WORD)*(BYTE*)((ptr)+1)<<8)|(WORD)*(BYTE*)(ptr))
590
#define LD_DWORD(ptr)           (DWORD)(((DWORD)*(BYTE*)((ptr)+3)<<24)|((DWORD)*(BYTE*)((ptr)+2)<<16)|((WORD)*(BYTE*)((ptr)+1)<<8)|*(BYTE*)(ptr))
591
#define ST_WORD(ptr,val)        *(BYTE*)(ptr)=(BYTE)(val); *(BYTE*)((ptr)+1)=(BYTE)((WORD)(val)>>8)
592
#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)
593
#endif
594
 
595
 
596
#endif /* _FATFS */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.