CMSIS2000  0.0.7
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
diskio.c
Go to the documentation of this file.
1 /*-----------------------------------------------------------------------*/
2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2013 */
3 /*-----------------------------------------------------------------------*/
4 /* If a working storage control module is available, it should be */
5 /* attached to the FatFs via a glue function rather than modifying it. */
6 /* This is an example of glue functions to attach various exsisting */
7 /* storage control module to the FatFs module with a defined API. */
8 /*-----------------------------------------------------------------------*/
9 
10 #include "diskio.h" /* FatFs lower layer API */
11 #include "usbdisk.h" /* Example: USB drive control */
12 #include "atadrive.h" /* Example: ATA drive control */
13 #include "sdcard.h" /* Example: MMC/SDC contorl */
14 
15 /* Definitions of physical drive number for each media */
16 #define ATA 0
17 #define MMC 1
18 #define USB 2
19 
20 
21 /*-----------------------------------------------------------------------*/
22 /* Inidialize a Drive */
23 /*-----------------------------------------------------------------------*/
24 
26  BYTE pdrv /* Physical drive nmuber (0..) */
27 )
28 {
29  DSTATUS stat;
30  int result;
31 
32  switch (pdrv) {
33  case ATA :
34  result = ATA_disk_initialize();
35 
36  // translate the reslut code here
37 
38  return stat;
39 
40  case MMC :
41  result = MMC_disk_initialize();
42 
43  // translate the reslut code here
44 
45  return stat;
46 
47  case USB :
48  result = USB_disk_initialize();
49 
50  // translate the reslut code here
51 
52  return stat;
53  }
54  return STA_NOINIT;
55 }
56 
57 
58 
59 /*-----------------------------------------------------------------------*/
60 /* Get Disk Status */
61 /*-----------------------------------------------------------------------*/
62 
64  BYTE pdrv /* Physical drive nmuber (0..) */
65 )
66 {
67  DSTATUS stat;
68  int result;
69 
70  switch (pdrv) {
71  case ATA :
72  result = ATA_disk_status();
73 
74  // translate the reslut code here
75 
76  return stat;
77 
78  case MMC :
79  result = MMC_disk_status();
80 
81  // translate the reslut code here
82 
83  return stat;
84 
85  case USB :
86  result = USB_disk_status();
87 
88  // translate the reslut code here
89 
90  return stat;
91  }
92  return STA_NOINIT;
93 }
94 
95 
96 
97 /*-----------------------------------------------------------------------*/
98 /* Read Sector(s) */
99 /*-----------------------------------------------------------------------*/
100 
102  BYTE pdrv, /* Physical drive nmuber (0..) */
103  BYTE *buff, /* Data buffer to store read data */
104  DWORD sector, /* Sector address (LBA) */
105  BYTE count /* Number of sectors to read (1..128) */
106 )
107 {
108  DRESULT res;
109  int result;
110 
111  switch (pdrv) {
112  case ATA :
113  // translate the arguments here
114 
115  result = ATA_disk_read(buff, sector, count);
116 
117  // translate the reslut code here
118 
119  return res;
120 
121  case MMC :
122  // translate the arguments here
123 
124  result = MMC_disk_read(buff, sector, count);
125 
126  // translate the reslut code here
127 
128  return res;
129 
130  case USB :
131  // translate the arguments here
132 
133  result = USB_disk_read(buff, sector, count);
134 
135  // translate the reslut code here
136 
137  return res;
138  }
139  return RES_PARERR;
140 }
141 
142 
143 
144 /*-----------------------------------------------------------------------*/
145 /* Write Sector(s) */
146 /*-----------------------------------------------------------------------*/
147 
148 #if _USE_WRITE
150  BYTE pdrv, /* Physical drive nmuber (0..) */
151  const BYTE *buff, /* Data to be written */
152  DWORD sector, /* Sector address (LBA) */
153  BYTE count /* Number of sectors to write (1..128) */
154 )
155 {
156  DRESULT res;
157  int result;
158 
159  switch (pdrv) {
160  case ATA :
161  // translate the arguments here
162 
163  result = ATA_disk_write(buff, sector, count);
164 
165  // translate the reslut code here
166 
167  return res;
168 
169  case MMC :
170  // translate the arguments here
171 
172  result = MMC_disk_write(buff, sector, count);
173 
174  // translate the reslut code here
175 
176  return res;
177 
178  case USB :
179  // translate the arguments here
180 
181  result = USB_disk_write(buff, sector, count);
182 
183  // translate the reslut code here
184 
185  return res;
186  }
187  return RES_PARERR;
188 }
189 #endif
190 
191 
192 /*-----------------------------------------------------------------------*/
193 /* Miscellaneous Functions */
194 /*-----------------------------------------------------------------------*/
195 
196 #if _USE_IOCTL
198  BYTE pdrv, /* Physical drive nmuber (0..) */
199  BYTE cmd, /* Control code */
200  void *buff /* Buffer to send/receive control data */
201 )
202 {
203  DRESULT res;
204  int result;
205 
206  switch (pdrv) {
207  case ATA :
208  // pre-process here
209 
210  result = ATA_disk_ioctl(cmd, buff);
211 
212  // post-process here
213 
214  return res;
215 
216  case MMC :
217  // pre-process here
218 
219  result = MMC_disk_ioctl(cmd, buff);
220 
221  // post-process here
222 
223  return res;
224 
225  case USB :
226  // pre-process here
227 
228  result = USB_disk_ioctl(cmd, buff);
229 
230  // post-process here
231 
232  return res;
233  }
234  return RES_PARERR;
235 }
236 #endif