Rev Author Line No. Line
1110 kaklik 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3 <title>sd-reader: MMC/SD card raw access</title>
4 <link href="doxygen.css" rel="stylesheet" type="text/css">
5 <link href="tabs.css" rel="stylesheet" type="text/css">
6 </head><body>
7 <!-- Generated by Doxygen 1.5.3-20071008 -->
8 <div class="tabs">
9 <ul>
10 <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
11 <li><a href="modules.html"><span>Modules</span></a></li>
12 <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
13 <li><a href="files.html"><span>Files</span></a></li>
14 </ul>
15 </div>
16 <h1>MMC/SD card raw access</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
17 This module implements read and write access to MMC and SD cards.
18 <p>
19 It serves as a low-level driver for the higher level modules such as partition and file system access.
20 <p>
21 <table border="0" cellpadding="0" cellspacing="0">
22 <tr><td></td></tr>
23 <tr><td colspan="2"><br><h2>Files</h2></td></tr>
24 <tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="sd__raw_8c.html">sd_raw.c</a></td></tr>
25  
26 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">MMC/SD raw access implementation (license: GPLv2 or LGPLv2.1). <br></td></tr>
27  
28 <p>
29 <tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="sd__raw_8h.html">sd_raw.h</a></td></tr>
30  
31 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">MMC/SD raw access header (license: GPLv2 or LGPLv2.1). <br></td></tr>
32  
33 <p>
34 <tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="sd__raw__config_8h.html">sd_raw_config.h</a></td></tr>
35  
36 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">MMC/SD support configuration (license: GPLv2 or LGPLv2.1). <br></td></tr>
37  
38 <p>
39 <tr><td colspan="2"><br><h2>Modules</h2></td></tr>
40 <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw__config.html">MMC/SD configuration</a></td></tr>
41  
42 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Preprocessor defines to configure the MMC/SD support. <br></td></tr>
43  
44 <p>
45 <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
46 <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsd__raw__info.html">sd_raw_info</a></td></tr>
47  
48 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This struct is used by <a class="el" href="group__sd__raw.html#g97c54e82834f87bcdd38e79822fe5a79" title="Reads informational data from the card.">sd_raw_get_info()</a> to return manufacturing and status information of the card. <a href="structsd__raw__info.html#_details">More...</a><br></td></tr>
49 <tr><td colspan="2"><br><h2>Defines</h2></td></tr>
50 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2507a78d61385c9dbc1d06b8a03ef58a"></a><!-- doxytag: member="sd_raw::SD_RAW_FORMAT_HARDDISK" ref="g2507a78d61385c9dbc1d06b8a03ef58a" args="" -->
51 #define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g2507a78d61385c9dbc1d06b8a03ef58a">SD_RAW_FORMAT_HARDDISK</a></td></tr>
52  
53 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The card's layout is harddisk-like, which means it contains a master boot record with a partition table. <br></td></tr>
54 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4caede5500f4d1035ceb9951a831c224"></a><!-- doxytag: member="sd_raw::SD_RAW_FORMAT_SUPERFLOPPY" ref="g4caede5500f4d1035ceb9951a831c224" args="" -->
55 #define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g4caede5500f4d1035ceb9951a831c224">SD_RAW_FORMAT_SUPERFLOPPY</a></td></tr>
56  
57 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The card contains a single filesystem and no partition table. <br></td></tr>
58 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd070d05f762410f57870549a0fcd5f43"></a><!-- doxytag: member="sd_raw::SD_RAW_FORMAT_UNIVERSAL" ref="gd070d05f762410f57870549a0fcd5f43" args="" -->
59 #define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#gd070d05f762410f57870549a0fcd5f43">SD_RAW_FORMAT_UNIVERSAL</a></td></tr>
60  
61 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The card's layout follows the Universal File Format. <br></td></tr>
62 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7e87231437f32335a25930ec1b85a9c9"></a><!-- doxytag: member="sd_raw::SD_RAW_FORMAT_UNKNOWN" ref="g7e87231437f32335a25930ec1b85a9c9" args="" -->
63 #define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g7e87231437f32335a25930ec1b85a9c9">SD_RAW_FORMAT_UNKNOWN</a></td></tr>
64  
65 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The card's layout is unknown. <br></td></tr>
66 <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
67 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g82e8599b2679451e491484fb0b19bfd5">sd_raw_init</a> ()</td></tr>
68  
69 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes memory card communication. <a href="#g82e8599b2679451e491484fb0b19bfd5"></a><br></td></tr>
70 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g5e227f25ad4a18466e7cdd9ecdfce8ab">sd_raw_available</a> ()</td></tr>
71  
72 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks wether a memory card is located in the slot. <a href="#g5e227f25ad4a18466e7cdd9ecdfce8ab"></a><br></td></tr>
73 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g55f311428473cd5b85cf8f24ffba121b">sd_raw_locked</a> ()</td></tr>
74  
75 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks wether the memory card is locked for write access. <a href="#g55f311428473cd5b85cf8f24ffba121b"></a><br></td></tr>
76 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g5f69513fd8228ea269a61f1dff737129">sd_raw_read</a> (uint32_t offset, uint8_t *buffer, uint16_t length)</td></tr>
77  
78 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reads raw data from the card. <a href="#g5f69513fd8228ea269a61f1dff737129"></a><br></td></tr>
79 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#gffd7c377b887bb05f7756ca827d3863e">sd_raw_read_interval</a> (uint32_t offset, uint8_t *buffer, uint16_t interval, uint16_t length, sd_raw_read_interval_handler_t callback, void *p)</td></tr>
80  
81 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Continuously reads units of <code>interval</code> bytes and calls a callback function. <a href="#gffd7c377b887bb05f7756ca827d3863e"></a><br></td></tr>
82 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g51fc917873e34e96cb981fbbb47a69c5">sd_raw_write</a> (uint32_t offset, const uint8_t *buffer, uint16_t length)</td></tr>
83  
84 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Writes raw data to the card. <a href="#g51fc917873e34e96cb981fbbb47a69c5"></a><br></td></tr>
85 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#gc004a1ffd2d552f8bc34ad1ced6181c4">sd_raw_write_interval</a> (uint32_t offset, uint8_t *buffer, uint16_t length, sd_raw_write_interval_handler_t callback, void *p)</td></tr>
86  
87 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Writes a continuous data stream obtained from a callback function. <a href="#gc004a1ffd2d552f8bc34ad1ced6181c4"></a><br></td></tr>
88 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#gd4d9ff40a7ea50c65cfa47927b35b735">sd_raw_sync</a> ()</td></tr>
89  
90 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Writes the write buffer's content to the card. <a href="#gd4d9ff40a7ea50c65cfa47927b35b735"></a><br></td></tr>
91 <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sd__raw.html#g97c54e82834f87bcdd38e79822fe5a79">sd_raw_get_info</a> (struct <a class="el" href="structsd__raw__info.html">sd_raw_info</a> *info)</td></tr>
92  
93 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reads informational data from the card. <a href="#g97c54e82834f87bcdd38e79822fe5a79"></a><br></td></tr>
94 </table>
95 <hr><h2>Function Documentation</h2>
96 <a class="anchor" name="g5e227f25ad4a18466e7cdd9ecdfce8ab"></a><!-- doxytag: member="sd_raw.c::sd_raw_available" ref="g5e227f25ad4a18466e7cdd9ecdfce8ab" args="()" -->
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">uint8_t sd_raw_available </td>
102 <td>(</td>
103 <td class="paramname"> </td>
104 <td>&nbsp;)&nbsp;</td>
105 <td width="100%"></td>
106 </tr>
107 </table>
108 </div>
109 <div class="memdoc">
110  
111 <p>
112 Checks wether a memory card is located in the slot.
113 <p>
114 <dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if the card is available, 0 if it is not. </dd></dl>
115  
116 </div>
117 </div><p>
118 <a class="anchor" name="g97c54e82834f87bcdd38e79822fe5a79"></a><!-- doxytag: member="sd_raw.c::sd_raw_get_info" ref="g97c54e82834f87bcdd38e79822fe5a79" args="(struct sd_raw_info *info)" -->
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">uint8_t sd_raw_get_info </td>
124 <td>(</td>
125 <td class="paramtype">struct <a class="el" href="structsd__raw__info.html">sd_raw_info</a> *&nbsp;</td>
126 <td class="paramname"> <em>info</em> </td>
127 <td>&nbsp;)&nbsp;</td>
128 <td width="100%"></td>
129 </tr>
130 </table>
131 </div>
132 <div class="memdoc">
133  
134 <p>
135 Reads informational data from the card.
136 <p>
137 This function reads and returns the card's registers containing manufacturing and status information.<p>
138 <dl class="note" compact><dt><b>Note:</b></dt><dd>: The information retrieved by this function is not required in any way to operate on the card, but it might be nice to display some of the data to the user.</dd></dl>
139 <dl compact><dt><b>Parameters:</b></dt><dd>
140 <table border="0" cellspacing="2" cellpadding="0">
141 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>info</em>&nbsp;</td><td>A pointer to the structure into which to save the information. </td></tr>
142 </table>
143 </dl>
144 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success. </dd></dl>
145  
146 </div>
147 </div><p>
148 <a class="anchor" name="g82e8599b2679451e491484fb0b19bfd5"></a><!-- doxytag: member="sd_raw.c::sd_raw_init" ref="g82e8599b2679451e491484fb0b19bfd5" args="()" -->
149 <div class="memitem">
150 <div class="memproto">
151 <table class="memname">
152 <tr>
153 <td class="memname">uint8_t sd_raw_init </td>
154 <td>(</td>
155 <td class="paramname"> </td>
156 <td>&nbsp;)&nbsp;</td>
157 <td width="100%"></td>
158 </tr>
159 </table>
160 </div>
161 <div class="memdoc">
162  
163 <p>
164 Initializes memory card communication.
165 <p>
166 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success. </dd></dl>
167  
168 </div>
169 </div><p>
170 <a class="anchor" name="g55f311428473cd5b85cf8f24ffba121b"></a><!-- doxytag: member="sd_raw.c::sd_raw_locked" ref="g55f311428473cd5b85cf8f24ffba121b" args="()" -->
171 <div class="memitem">
172 <div class="memproto">
173 <table class="memname">
174 <tr>
175 <td class="memname">uint8_t sd_raw_locked </td>
176 <td>(</td>
177 <td class="paramname"> </td>
178 <td>&nbsp;)&nbsp;</td>
179 <td width="100%"></td>
180 </tr>
181 </table>
182 </div>
183 <div class="memdoc">
184  
185 <p>
186 Checks wether the memory card is locked for write access.
187 <p>
188 <dl class="return" compact><dt><b>Returns:</b></dt><dd>1 if the card is locked, 0 if it is not. </dd></dl>
189  
190 </div>
191 </div><p>
192 <a class="anchor" name="g5f69513fd8228ea269a61f1dff737129"></a><!-- doxytag: member="sd_raw.c::sd_raw_read" ref="g5f69513fd8228ea269a61f1dff737129" args="(uint32_t offset, uint8_t *buffer, uint16_t length)" -->
193 <div class="memitem">
194 <div class="memproto">
195 <table class="memname">
196 <tr>
197 <td class="memname">uint8_t sd_raw_read </td>
198 <td>(</td>
199 <td class="paramtype">uint32_t&nbsp;</td>
200 <td class="paramname"> <em>offset</em>, </td>
201 </tr>
202 <tr>
203 <td class="paramkey"></td>
204 <td></td>
205 <td class="paramtype">uint8_t *&nbsp;</td>
206 <td class="paramname"> <em>buffer</em>, </td>
207 </tr>
208 <tr>
209 <td class="paramkey"></td>
210 <td></td>
211 <td class="paramtype">uint16_t&nbsp;</td>
212 <td class="paramname"> <em>length</em></td><td>&nbsp;</td>
213 </tr>
214 <tr>
215 <td></td>
216 <td>)</td>
217 <td></td><td></td><td width="100%"></td>
218 </tr>
219 </table>
220 </div>
221 <div class="memdoc">
222  
223 <p>
224 Reads raw data from the card.
225 <p>
226 <dl compact><dt><b>Parameters:</b></dt><dd>
227 <table border="0" cellspacing="2" cellpadding="0">
228 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>offset</em>&nbsp;</td><td>The offset from which to read. </td></tr>
229 <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>buffer</em>&nbsp;</td><td>The buffer into which to write the data. </td></tr>
230 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>length</em>&nbsp;</td><td>The number of bytes to read. </td></tr>
231 </table>
232 </dl>
233 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success. </dd></dl>
234 <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sd__raw.html#gffd7c377b887bb05f7756ca827d3863e" title="Continuously reads units of interval bytes and calls a callback function.">sd_raw_read_interval</a>, <a class="el" href="group__sd__raw.html#g51fc917873e34e96cb981fbbb47a69c5" title="Writes raw data to the card.">sd_raw_write</a>, <a class="el" href="group__sd__raw.html#gc004a1ffd2d552f8bc34ad1ced6181c4" title="Writes a continuous data stream obtained from a callback function.">sd_raw_write_interval</a> </dd></dl>
235  
236 </div>
237 </div><p>
238 <a class="anchor" name="gffd7c377b887bb05f7756ca827d3863e"></a><!-- doxytag: member="sd_raw.c::sd_raw_read_interval" ref="gffd7c377b887bb05f7756ca827d3863e" args="(uint32_t offset, uint8_t *buffer, uint16_t interval, uint16_t length, sd_raw_read_interval_handler_t callback, void *p)" -->
239 <div class="memitem">
240 <div class="memproto">
241 <table class="memname">
242 <tr>
243 <td class="memname">uint8_t sd_raw_read_interval </td>
244 <td>(</td>
245 <td class="paramtype">uint32_t&nbsp;</td>
246 <td class="paramname"> <em>offset</em>, </td>
247 </tr>
248 <tr>
249 <td class="paramkey"></td>
250 <td></td>
251 <td class="paramtype">uint8_t *&nbsp;</td>
252 <td class="paramname"> <em>buffer</em>, </td>
253 </tr>
254 <tr>
255 <td class="paramkey"></td>
256 <td></td>
257 <td class="paramtype">uint16_t&nbsp;</td>
258 <td class="paramname"> <em>interval</em>, </td>
259 </tr>
260 <tr>
261 <td class="paramkey"></td>
262 <td></td>
263 <td class="paramtype">uint16_t&nbsp;</td>
264 <td class="paramname"> <em>length</em>, </td>
265 </tr>
266 <tr>
267 <td class="paramkey"></td>
268 <td></td>
269 <td class="paramtype">sd_raw_read_interval_handler_t&nbsp;</td>
270 <td class="paramname"> <em>callback</em>, </td>
271 </tr>
272 <tr>
273 <td class="paramkey"></td>
274 <td></td>
275 <td class="paramtype">void *&nbsp;</td>
276 <td class="paramname"> <em>p</em></td><td>&nbsp;</td>
277 </tr>
278 <tr>
279 <td></td>
280 <td>)</td>
281 <td></td><td></td><td width="100%"></td>
282 </tr>
283 </table>
284 </div>
285 <div class="memdoc">
286  
287 <p>
288 Continuously reads units of <code>interval</code> bytes and calls a callback function.
289 <p>
290 This function starts reading at the specified offset. Every <code>interval</code> bytes, it calls the callback function with the associated data buffer.<p>
291 By returning zero, the callback may stop reading.<p>
292 <dl class="note" compact><dt><b>Note:</b></dt><dd>Within the callback function, you can not start another read or write operation. <p>
293 This function only works if the following conditions are met:<ul>
294 <li>(offset - (offset % 512)) % interval == 0</li><li>length % interval == 0</li></ul>
295 </dd></dl>
296 <dl compact><dt><b>Parameters:</b></dt><dd>
297 <table border="0" cellspacing="2" cellpadding="0">
298 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>offset</em>&nbsp;</td><td>Offset from which to start reading. </td></tr>
299 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>buffer</em>&nbsp;</td><td>Pointer to a buffer which is at least interval bytes in size. </td></tr>
300 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>interval</em>&nbsp;</td><td>Number of bytes to read before calling the callback function. </td></tr>
301 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>length</em>&nbsp;</td><td>Number of bytes to read altogether. </td></tr>
302 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>callback</em>&nbsp;</td><td>The function to call every interval bytes. </td></tr>
303 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>p</em>&nbsp;</td><td>An opaque pointer directly passed to the callback function. </td></tr>
304 </table>
305 </dl>
306 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success </dd></dl>
307 <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sd__raw.html#gc004a1ffd2d552f8bc34ad1ced6181c4" title="Writes a continuous data stream obtained from a callback function.">sd_raw_write_interval</a>, <a class="el" href="group__sd__raw.html#g5f69513fd8228ea269a61f1dff737129" title="Reads raw data from the card.">sd_raw_read</a>, <a class="el" href="group__sd__raw.html#g51fc917873e34e96cb981fbbb47a69c5" title="Writes raw data to the card.">sd_raw_write</a> </dd></dl>
308  
309 </div>
310 </div><p>
311 <a class="anchor" name="gd4d9ff40a7ea50c65cfa47927b35b735"></a><!-- doxytag: member="sd_raw.c::sd_raw_sync" ref="gd4d9ff40a7ea50c65cfa47927b35b735" args="()" -->
312 <div class="memitem">
313 <div class="memproto">
314 <table class="memname">
315 <tr>
316 <td class="memname">uint8_t sd_raw_sync </td>
317 <td>(</td>
318 <td class="paramname"> </td>
319 <td>&nbsp;)&nbsp;</td>
320 <td width="100%"></td>
321 </tr>
322 </table>
323 </div>
324 <div class="memdoc">
325  
326 <p>
327 Writes the write buffer's content to the card.
328 <p>
329 <dl class="note" compact><dt><b>Note:</b></dt><dd>When write buffering is enabled, you should call this function before disconnecting the card to ensure all remaining data has been written.</dd></dl>
330 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success. </dd></dl>
331 <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sd__raw.html#g51fc917873e34e96cb981fbbb47a69c5" title="Writes raw data to the card.">sd_raw_write</a> </dd></dl>
332  
333 </div>
334 </div><p>
335 <a class="anchor" name="g51fc917873e34e96cb981fbbb47a69c5"></a><!-- doxytag: member="sd_raw.c::sd_raw_write" ref="g51fc917873e34e96cb981fbbb47a69c5" args="(uint32_t offset, const uint8_t *buffer, uint16_t length)" -->
336 <div class="memitem">
337 <div class="memproto">
338 <table class="memname">
339 <tr>
340 <td class="memname">uint8_t sd_raw_write </td>
341 <td>(</td>
342 <td class="paramtype">uint32_t&nbsp;</td>
343 <td class="paramname"> <em>offset</em>, </td>
344 </tr>
345 <tr>
346 <td class="paramkey"></td>
347 <td></td>
348 <td class="paramtype">const uint8_t *&nbsp;</td>
349 <td class="paramname"> <em>buffer</em>, </td>
350 </tr>
351 <tr>
352 <td class="paramkey"></td>
353 <td></td>
354 <td class="paramtype">uint16_t&nbsp;</td>
355 <td class="paramname"> <em>length</em></td><td>&nbsp;</td>
356 </tr>
357 <tr>
358 <td></td>
359 <td>)</td>
360 <td></td><td></td><td width="100%"></td>
361 </tr>
362 </table>
363 </div>
364 <div class="memdoc">
365  
366 <p>
367 Writes raw data to the card.
368 <p>
369 <dl class="note" compact><dt><b>Note:</b></dt><dd>If write buffering is enabled, you might have to call <a class="el" href="group__sd__raw.html#gd4d9ff40a7ea50c65cfa47927b35b735" title="Writes the write buffer&#39;s content to the card.">sd_raw_sync()</a> before disconnecting the card to ensure all remaining data has been written.</dd></dl>
370 <dl compact><dt><b>Parameters:</b></dt><dd>
371 <table border="0" cellspacing="2" cellpadding="0">
372 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>offset</em>&nbsp;</td><td>The offset where to start writing. </td></tr>
373 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>buffer</em>&nbsp;</td><td>The buffer containing the data to be written. </td></tr>
374 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>length</em>&nbsp;</td><td>The number of bytes to write. </td></tr>
375 </table>
376 </dl>
377 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success. </dd></dl>
378 <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sd__raw.html#gc004a1ffd2d552f8bc34ad1ced6181c4" title="Writes a continuous data stream obtained from a callback function.">sd_raw_write_interval</a>, <a class="el" href="group__sd__raw.html#g5f69513fd8228ea269a61f1dff737129" title="Reads raw data from the card.">sd_raw_read</a>, <a class="el" href="group__sd__raw.html#gffd7c377b887bb05f7756ca827d3863e" title="Continuously reads units of interval bytes and calls a callback function.">sd_raw_read_interval</a> </dd></dl>
379  
380 </div>
381 </div><p>
382 <a class="anchor" name="gc004a1ffd2d552f8bc34ad1ced6181c4"></a><!-- doxytag: member="sd_raw.c::sd_raw_write_interval" ref="gc004a1ffd2d552f8bc34ad1ced6181c4" args="(uint32_t offset, uint8_t *buffer, uint16_t length, sd_raw_write_interval_handler_t callback, void *p)" -->
383 <div class="memitem">
384 <div class="memproto">
385 <table class="memname">
386 <tr>
387 <td class="memname">uint8_t sd_raw_write_interval </td>
388 <td>(</td>
389 <td class="paramtype">uint32_t&nbsp;</td>
390 <td class="paramname"> <em>offset</em>, </td>
391 </tr>
392 <tr>
393 <td class="paramkey"></td>
394 <td></td>
395 <td class="paramtype">uint8_t *&nbsp;</td>
396 <td class="paramname"> <em>buffer</em>, </td>
397 </tr>
398 <tr>
399 <td class="paramkey"></td>
400 <td></td>
401 <td class="paramtype">uint16_t&nbsp;</td>
402 <td class="paramname"> <em>length</em>, </td>
403 </tr>
404 <tr>
405 <td class="paramkey"></td>
406 <td></td>
407 <td class="paramtype">sd_raw_write_interval_handler_t&nbsp;</td>
408 <td class="paramname"> <em>callback</em>, </td>
409 </tr>
410 <tr>
411 <td class="paramkey"></td>
412 <td></td>
413 <td class="paramtype">void *&nbsp;</td>
414 <td class="paramname"> <em>p</em></td><td>&nbsp;</td>
415 </tr>
416 <tr>
417 <td></td>
418 <td>)</td>
419 <td></td><td></td><td width="100%"></td>
420 </tr>
421 </table>
422 </div>
423 <div class="memdoc">
424  
425 <p>
426 Writes a continuous data stream obtained from a callback function.
427 <p>
428 This function starts writing at the specified offset. To obtain the next bytes to write, it calls the callback function. The callback fills the provided data buffer and returns the number of bytes it has put into the buffer.<p>
429 By returning zero, the callback may stop writing.<p>
430 <dl compact><dt><b>Parameters:</b></dt><dd>
431 <table border="0" cellspacing="2" cellpadding="0">
432 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>offset</em>&nbsp;</td><td>Offset where to start writing. </td></tr>
433 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>buffer</em>&nbsp;</td><td>Pointer to a buffer which is used for the callback function. </td></tr>
434 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>length</em>&nbsp;</td><td>Number of bytes to write in total. May be zero for endless writes. </td></tr>
435 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>callback</em>&nbsp;</td><td>The function used to obtain the bytes to write. </td></tr>
436 <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>p</em>&nbsp;</td><td>An opaque pointer directly passed to the callback function. </td></tr>
437 </table>
438 </dl>
439 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on failure, 1 on success </dd></dl>
440 <dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sd__raw.html#gffd7c377b887bb05f7756ca827d3863e" title="Continuously reads units of interval bytes and calls a callback function.">sd_raw_read_interval</a>, <a class="el" href="group__sd__raw.html#g51fc917873e34e96cb981fbbb47a69c5" title="Writes raw data to the card.">sd_raw_write</a>, <a class="el" href="group__sd__raw.html#g5f69513fd8228ea269a61f1dff737129" title="Reads raw data from the card.">sd_raw_read</a> </dd></dl>
441  
442 </div>
443 </div><p>
444 <hr size="1"><address style="text-align: right;"><small>Generated on Thu Dec 13 19:38:48 2007 for sd-reader by&nbsp;
445 <a href="http://www.doxygen.org/index.html">
446 <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3-20071008 </small></address>
447 </body>
448 </html>