FatFs: Update to release R0.12b.

This commit is contained in:
Jared Boone
2017-05-03 12:35:19 +01:00
parent dd0048db8d
commit 85712a2c5f
57 changed files with 532 additions and 331 deletions

View File

@@ -47,7 +47,7 @@ FatFsモジュールはANSI C(C89)準拠で記述されているので、普通
<p><img src="../res/funcs.png" width="750" height="420" alt="functional diagram"></p>
<h4>ユーザの作成する関数</h4>
<p>ポーティング作業は、要求されるデバイス制御関数を用意することが全てで、それ以外にすることは何もありません。既に動作しているデバイス制御モジュールがあるなら、そのAPIをFatFsに合わせるかグルー関数を介してつなぐだけで済みますが、無い場合はほかから移植するか最初から書くかする必要があります。定義されている全ての関数が常に必要なわけではありません。例えば、リード オンリ構成では書き込み系関数は必要ありません。次の表に構成オプションと要求される関数の対応を示します。</p>
<p>ポーティング作業は、要求されるデバイス制御関数を用意することが全てで、それ以外にすることは何もありません。既に動作しているデバイス制御モジュールがあるなら、そのインターフェースをFatFsに合わせるかグルー関数を介してつなぐだけで済みますが、無い場合はほかから移植するか最初から書くかする必要があります。定義されている全ての関数が常に必要なわけではありません。例えば、リード オンリ構成では書き込み系関数は必要ありません。次の表に構成オプションと要求される関数の対応を示します。</p>
<table class="lst2">
<tr><th>必要な関数</th><th>必要となる条件</th><th>備考</th></tr>
<tr><td>disk_status<br>disk_initialize<br>disk_read</td><td>常時</td><td rowspan="5">ffsample.zip (サンプル)<br>その他web上に多数</td></tr>
@@ -81,16 +81,16 @@ FatFsモジュールはANSI C(C89)準拠で記述されているので、普通
<tr><th></th><th>ARM7<small><br>32bit</small></th><th>ARM7<small><br>Thumb</small></th><th>CM3<small><br>Thumb-2</small></th><th>AVR</th><th>H8/300H</th><th>PIC24</th><th>RL78</th><th>V850ES</th><th>SH-2A</th><th>RX600</th><th>IA-32</th></tr>
<tr class="cal"> <td>Compiler</td><td>GCC</td><td>GCC</td><td>GCC</td><td>GCC</td><td>CH38</td><td>C30</td><td>CC78K0R</td><td>CA850</td><td>SHC</td><td>RXC</td><td>MSC</td></tr>
<!-- ARM Thumb CM3 AVR H8 PIC24 RL78 V850ES SH-2A RX600 IA-32 -->
<tr class="ral"><td class="cal">text (Full, R/W)</td><td>10.1k</td><td>6.6k</td><td>6.2k</td><td>12.1k</td><td>10.5k</td><td>11.2k</td><td>12.6k</td><td>8.5k</td><td>8.7k</td><td>6.3k</td><td>8.4k</td></tr>
<tr class="ral"><td class="cal">text (Min, R/W)</td> <td>6.6k</td><td>4.5k</td><td>4.2k</td> <td>7.9k</td> <td>7.0k</td> <td>7.6k</td> <td>8.8k</td><td>5.9k</td><td>5.8k</td><td>4.3k</td><td>5.8k</td></tr>
<tr class="ral"><td class="cal">text (Full, R/O)</td> <td>4.8k</td><td>3.1k</td><td>2.9k</td> <td>5.8k</td> <td>5.1k</td> <td>5.5k</td> <td>6.4k</td><td>4.1k</td><td>4.0k</td><td>3.1k</td><td>4.0k</td></tr>
<tr class="ral"><td class="cal">text (Min, R/O)</td> <td>3.5k</td><td>2.4k</td><td>2.3k</td> <td>4.4k</td> <td>3.9k</td> <td>4.2k</td> <td>5.0k</td><td>3.3k</td><td>3.1k</td><td>2.4k</td><td>3.1k</td></tr>
<tr class="ral"><td class="cal">text (Full, R/W)</td><td>10.4k</td><td>6.8k</td><td>6.3k</td><td>12.4k</td> <td>9.8k</td><td>11.1k</td><td>12.8k</td><td>8.6k</td><td>8.9k</td><td>6.4k</td><td>8.5k</td></tr>
<tr class="ral"><td class="cal">text (Min, R/W)</td> <td>6.8k</td><td>4.6k</td><td>4.3k</td> <td>8.2k</td> <td>6.7k</td> <td>7.6k</td> <td>9.1k</td><td>6.0k</td><td>5.9k</td><td>4.5k</td><td>5.9k</td></tr>
<tr class="ral"><td class="cal">text (Full, R/O)</td> <td>4.8k</td><td>3.1k</td><td>2.8k</td> <td>5.6k</td> <td>4.6k</td> <td>5.3k</td> <td>6.3k</td><td>4.0k</td><td>3.9k</td><td>3.0k</td><td>3.9k</td></tr>
<tr class="ral"><td class="cal">text (Min, R/O)</td> <td>3.6k</td><td>2.4k</td><td>2.3k</td> <td>4.4k</td> <td>3.5k</td> <td>4.0k</td> <td>4.9k</td><td>3.3k</td><td>3.0k</td><td>2.4k</td><td>3.1k</td></tr>
<tr class="ral"><td class="cal">bss</td><td>V*4 + 2</td><td>V*4 + 2</td><td>V*4 + 2</td><td>V*2 + 2</td><td>V*4 + 2</td><td>V*2 + 2</td><td>V*2 + 2</td><td>V*4 + 2</td><td>V*4 + 2</td><td>V*4 + 2</td><td>V*4 + 2</td></tr>
<tr class="ral"><td class="cal">Work area<br><small>(_FS_TINY == 0)</small></td><td>V*564<br>+ F*552</td><td>V*564<br>+ F*552</td><td>V*564<br>+ F*552</td><td>V*560<br>+ F*546</td><td>V*560<br>+ F*546</td><td>V*560<br>+ F*546</td><td>V*560<br>+ F*546</td><td>V*564<br>+ F*552</td><td>V*564<br>+ F*552</td><td>V*564<br>+ F*552</td><td>V*564<br>+ F*552</td></tr>
<tr class="ral"><td class="cal">Work area<br><small>(_FS_TINY == 1)</small></td><td>V*564<br>+ F*40</td><td>V*564<br>+ F*40</td><td>V*564<br>+ F*40</td><td>V*560<br>+ F*34</td><td>V*560<br>+ F*34</td><td>V*560<br>+ F*34</td><td>V*560<br>+ F*34</td><td>V*564<br>+ F*40</td><td>V*564<br>+ F*40</td><td>V*564<br>+ F*40</td><td>V*564<br>+ F*40</td></tr>
</table>
<pre>
FatFs R0.12 options:
FatFs R0.12b options:
_FS_READONLY 0 (R/W) or 1 (R/O)
_FS_MINIMIZE 0 (Full, with all basic functions) or 3 (Min, with fully minimized)
_FS_TINY 0 (Default) or 1 (Tiny file object)
@@ -254,13 +254,13 @@ And any other options are left not changed from default setting.
<div class="para doc" id="license">
<h3>FatFsのライセンスについて</h3>
<p>FatFsは、作者(ChaN)の個人プロジェクトとして開発されています。現在のリビジョンにおいてコントリビューターはいないため、作者の書いたソース コード以外は含まれません。ソース ファイルにライセンス条件が記述されているので、利用の際はそれに従うこと。原文は英語ですが、参考までに以下に日本語訳を示しておきます。</p>
<p>FatFsは、作者(ChaN)の個人プロジェクトとして開発されています。現在までのリビジョンにおいてコントリビューターはいないため、作者以外の書いたソース コードは含まれません。ソース ファイルにライセンス条件が記述されているので、利用の際はそれに従うこと。原文は英語ですが、参考までに以下に日本語訳を示しておきます。</p>
<pre>
/*----------------------------------------------------------------------------/
/ FatFs - Generic FAT file system module R0.12a /
/ FatFs - Generic FAT file system module Rx.xx /
/-----------------------------------------------------------------------------/
/
/ Copyright (C) 2016, ChaN, all right reserved.
/ Copyright (C) 20xx, ChaN, all right reserved.
/
/ FatFsモジュールはオープンソースソフトウェアです。FatFsの再配布および使用は、
/ ソースコードかバイナリ形式か、また変更の有無にかかわらず、次の条件が満たされ

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>disk_initialize</h2>
<p>ストレージ デバイス初期化ます。</p>
<p>ストレージ デバイス初期化の際に呼ばれます。</p>
<pre>
DSTATUS disk_initialize (
BYTE <span class="arg">pdrv</span> <span class="c">/* [IN] 物理ドライブ番号 */</span>

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>disk_ioctl</h2>
<p>一般的なデータ読み書き以外のストレージ デバイス自体に対する様々な制御を行ます。</p>
<p>一般的なデータ読み書き以外のストレージ デバイス自体に対する様々な制御を行うときに呼ばれます。</p>
<pre>
DRESULT disk_ioctl (
BYTE <span class="arg">pdrv</span>, <span class="c">/* [IN] 物理ドライブ番号 */</span>

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>disk_read</h2>
<p>ストレージ デバイスからデータを読み出ます。</p>
<p>ストレージ デバイスからデータを読み出すときに呼ばれます。</p>
<pre>
DRESULT disk_read (
BYTE <span class="arg">pdrv</span>, <span class="c">/* [IN] 物理ドライブ番号 */</span>

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>disk_status</h2>
<p>ストレージ デバイスの状態を取得ます。</p>
<p>ストレージ デバイスの状態を取得するために呼ばれます。</p>
<pre>
DSTATUS disk_status (
BYTE <span class="arg">pdrv</span> <span class="c">/* [IN] 物理ドライブ番号 */</span>

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>disk_write</h2>
<p>ストレージ デバイスにデータを書き込ます。</p>
<p>ストレージ デバイスにデータを書き込むときに呼ばれます。</p>
<pre>
DRESULT disk_write (
BYTE <span class="arg">pdrv</span>, <span class="c">/* [IN] 物理ドライブ番号 */</span>

View File

@@ -43,8 +43,8 @@ FRESULT f_expand (
<a href="rc.html#ok">FR_OK</a>,
<a href="rc.html#de">FR_DISK_ERR</a>,
<a href="rc.html#ie">FR_INT_ERR</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#tm">FR_TIMEOUT</a>
</p>
</div>

View File

@@ -13,7 +13,7 @@
<div class="para func">
<h2>get_fattime</h2>
<p>現在時刻を取得ます。</p>
<p>現在時刻を取得する際に呼ばれます。</p>
<pre>
DWORD get_fattime (void);
</pre>

View File

@@ -74,10 +74,10 @@ FRESULT f_fdisk (
DWORD plist[] = {50, 50, 0, 0}; <span class="c">/* 第1区画,第2区画それぞれに50%ずつ割り当て */</span>
BYTE work[_MAX_SS];
f_fdisk(0, plist, work); <span class="c">/* 物理ドライブ 0 の分割 */</span>
f_fdisk(0, plist, work); <span class="c">/* 物理ドライブ 0 の分割 */</span>
f_mkfs("0:", FMT_ANY, work, sizeof work); <span class="c">/* 論理ドライブ 0: のフォーマット */</span>
f_mkfs("1:", FMT_ANY, work, sizeof work); <span class="c">/* 論理ドライブ 1: のフォーマット */</span>
f_mkfs("0:", FM_ANY, work, sizeof work); <span class="c">/* 論理ドライブ 0: のフォーマット */</span>
f_mkfs("1:", FM_ANY, work, sizeof work); <span class="c">/* 論理ドライブ 1: のフォーマット */</span>
</pre>
</div>

View File

@@ -80,9 +80,9 @@ FRESULT f_findfirst (
<div class="para use">
<h4>使用例</h4>
<pre>
<span class="c">/* ディレクトリ内のオブジェクトの検索と表示 */</span>
<span class="c">/* ディレクトリ内のjpegファイルの検索 */</span>
void find_image (void)
void find_image_file (void)
{
FRESULT fr; <span class="c">/* API戻り値 */</span>
DIR dj; <span class="c">/* ディレクトリ オブジェクト */</span>
@@ -94,6 +94,7 @@ void find_image (void)
printf("%s\n", fno.fname); <span class="c">/* 見つけた項目の名前を表示 */</span>
fr = f_findnext(&amp;dj, &amp;fno); <span class="c">/* 次を検索 */</span>
}
f_closedir(&amp;dj);
}
</pre>

View File

@@ -45,7 +45,7 @@ FRESULT f_forward (
<a href="rc.html#ok">FR_OK</a>,
<a href="rc.html#de">FR_DISK_ERR</a>,
<a href="rc.html#ie">FR_INT_ERR</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#tm">FR_TIMEOUT</a>
</p>

View File

@@ -39,7 +39,7 @@ FRESULT f_mkdir (
<a href="rc.html#nr">FR_NOT_READY</a>,
<a href="rc.html#np">FR_NO_PATH</a>,
<a href="rc.html#in">FR_INVALID_NAME</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#ex">FR_EXIST</a>,
<a href="rc.html#wp">FR_WRITE_PROTECTED</a>,
<a href="rc.html#id">FR_INVALID_DRIVE</a>,

View File

@@ -52,8 +52,8 @@ FRESULT f_mount (
<p>FatFsモジュールでは、それぞれの論理ドライブに<em>ファイル システム オブジェクト</em>というワーク エリアが必要です。この関数は論理ドライブにファイル システム オブジェクトを登録したり抹消したりします。何らかのファイル関数を使用する前に、この関数でその論理ドライブのファイル システム オブジェクトを与えておかなければなりません。<tt class="arg">fs</tt>にヌル ポインタを指定すると、その論理ドライブのファイル システム オブジェクトの登録は抹消されるだけです。登録抹消されたファイル システム オブジェクトのメモリは解放できます。操作の対象の論理ドライブ上に開かれたままのファイルやディレクトリがあった場合、それらに対して作成された構造体は全て無効になります。この関数の内部処理は次のような順に行われます。</p>
<ol>
<li>対象の論理ドライブを<tt class="arg">path</tt>から得る。</li>
<li>既に登録されているファイル システム オブジェクトクリア(無効化)し、登録を解除する。</li>
<li><tt class="arg">fs</tt>が有効なポインタのときは、そのファイル システム オブジェクトをクリアし登録する。</li>
<li>登録されているファイル システム オブジェクトがあるときは、それをクリア(無効化)し、登録を解除する。</li>
<li><tt class="arg">fs</tt>が有効なポインタのときは、そのファイル システム オブジェクトをクリアし登録する。</li>
<li>マウント動作が指定されているときは、それを実行する。</li>
</ol>
<p><tt class="arg">opt</tt>に0を指定すると、マウント動作(物理ドライブの初期化、FATボリュームの検索、BPBを解析しファイル システム オブジェクトを初期化)は行われず、関数は物理ドライブの状態に関わらず常に成功します。関数内では下位レイヤへのアクセスは発生せず、指定されたファイル システム オブジェクトをクリア(無効化)し、そのアドレスを内部配列に登録するだけです。単に登録済みのファイル システム オブジェクトをクリアする目的にも使えます。実際のマウント動作は、ボリュームへのアクセス(パス名を渡すもの全て)が行われたときに、次のうちいずれかの条件が真の場合に行われます。</p>

View File

@@ -57,7 +57,7 @@ FRESULT f_open (
<a href="rc.html#ok">FR_NO_FILE</a>,
<a href="rc.html#np">FR_NO_PATH</a>,
<a href="rc.html#in">FR_INVALID_NAME</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#ex">FR_EXIST</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#wp">FR_WRITE_PROTECTED</a>,

View File

@@ -11,22 +11,23 @@
<body>
<h1>ファイル関数の戻り値</h1>
<p>FatFsのAPIでは、一部の関数を除き結果に応じた共通のリザルト コード(FRESULT型(enum))を返します。関数が成功した場合は0を返します。失敗した場合は0以外の値を返し、値はエラーの種類を示します。</p>
<p>FatFsのAPIでは、一部の関数を除き結果に応じた共通のリザルト コード(FRESULT型(enum))を返します。関数が成功した場合は0 (<tt>FR_OK</tt>)を返します。失敗した場合は0以外の値を返し、値はエラーの種類を示します。</p>
<dl class="ret">
<dt id="ok">FR_OK (0)</dt>
<dd>関数は成功した。</dd>
<dt id="de">FR_DISK_ERR</dt>
<dd>下位レイヤ(<tt>disk_read/disk_write/disk_ioctl</tt>関数)で回復不能なエラーが発生した。<br>※開かれたファイルの操作においてこのエラーが発生すると、そのファイル オブジェクトはアボート状態となり、クローズ以外の操作ができなくなります。</dd>
<dd>下位レイヤ(<tt>disk_read/disk_write/disk_ioctl</tt>関数)で回復不能なエラーが発生した。<br>※開かれたファイルの操作においてこのエラーが発生すると、そのファイル オブジェクトはアボート状態となり、クローズ以外の操作ができなくなります。</dd>
<dt id="ie">FR_INT_ERR</dt>
<dd>内部処理の健全性異常が検出された。原因としては次のようなことが考えられます。
<dd>内部処理の健全性チェックで何らかの異常が検出された。原因としては次のようなことが考えられます。
<ul>
<li>ボリューム上のFAT構造にエラーがある。</li>
<li>スタック不足や不正なメモリ操作等によるワーク エリアの破壊。多くはこれが原因。</li>
<li>ボリューム上のFAT構造にエラーがある。</li>
<li>FatFsモジュール自体のバグ。</li>
</ul>
※開かれたファイルの操作においてこのエラーが発生すると、そのファイル オブジェクトはアボート状態となり、クローズ以外の操作ができなくなります。</dd>
<dt id="nr">FR_NOT_READY</dt>
<dd><a href="dinit.html"><tt>disk_initialize</tt>関数</a>の失敗。物理ドライブが動作可能な状態にない。</dd>
<dd>下位レイヤ(<tt>disk_initialize</tt>関数)の失敗。つまり、物理ドライブが動作可能な状態にない。</dd>
<dt id="nf">FR_NO_FILE</dt>
<dd>指定されたファイルが見つからなかった。</dd>
<dt id="np">FR_NO_PATH</dt>
@@ -41,7 +42,8 @@
<li>空でないディレクトリまたはカレント ディレクトリを削除しようとした。</li>
<li><tt>FA_READ</tt>フラグを付けずに開いたファイルに対して読み出しを行った。</li>
<li><tt>FA_WRITE</tt>フラグを付けずに開いたファイルに対して変更を加えようとした。</li>
<li>ボリュームまたは静的ディレクトリが満杯でオブジェクトの新規作成ができなかった。</li>
<li>ボリュームまたは静的ディレクトリ(FAT12/16のルート)が満杯でディレクトリ エントリの新規作成ができなかった。</li>
<li>ファイルに割り当てる連続領域が見つからなかった。</li>
</ul>
</dd>
<dt id="ex">FR_EXIST</dt>
@@ -50,8 +52,8 @@
<dd>指定されたファイル オブジェクトやディレクトリ オブジェクトが無効、またはヌル ポインタが渡された。無効になる理由は次のことが考えられます。
<ul>
<li>オープンされていない、既に閉じられた、破損しているなど。</li>
<li>れの属するボリュームマウント動作があった。ボリューム上開かれたオブジェクト全て無効化され</li>
<li>関連する物理ドライブがメディアの取り外しで動作不可能になっている。</li>
<li>ボリュームマウント動作があり、ボリューム上開かれたオブジェクト全て無効化され</li>
<li>物理ドライブがメディアの取り外しで動作不可能になっている。</li>
</ul>
</dd>
<dt id="wp">FR_WRITE_PROTECTED</dt>

View File

@@ -45,7 +45,7 @@ FRESULT f_read (
<a href="rc.html#ok">FR_OK</a>,
<a href="rc.html#de">FR_DISK_ERR</a>,
<a href="rc.html#ie">FR_INT_ERR</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#tm">FR_TIMEOUT</a>
</p>

View File

@@ -28,7 +28,7 @@ FRESULT f_rename (
<dt>old_name</dt>
<dd>変更対象のファイルまたはサブ ディレクトリの<a href="filename.html">パス名</a>を示すヌル文字<tt>'\0'</tt>終端の文字列へのポインタを指定します。</dd>
<dt>new_name</dt>
<dd>新しいパス名を示すヌル文字<tt>'\0'</tt>終端の文字列へのポインタを指定します。既に存在するオブジェクトと同じ名前は使えません。また、ドライブ番号は指定しても無視され、<tt class="arg">old_name</tt>で決められた論理ドライブ上のオブジェクトとして扱われます。</dd>
<dd>新しいパス名を示すヌル文字<tt>'\0'</tt>終端の文字列へのポインタを指定します。また、ドライブ番号は指定しても無視され、<tt class="arg">old_name</tt>で決められたボリューム上のオブジェクトとして扱われます。これと同じパス名(<tt class="arg">old_name</tt>は除く)のオブジェクトが存在すると、関数は<tt>FR_EXIST</tt>で失敗します。</dd>
</dl>
</div>

View File

@@ -13,7 +13,7 @@
<div class="para">
<h2>FATFS</h2>
<p><tt>FATFS</tt>構造体(ファイル システム オブジェクト)は、個々の論理ドライブのダイナミック ワーク エリアを保持し、<tt>f_mount</tt>関数でFatFsモジュールに登録されます。初期化が行われるタイミングは、<tt>f_mount</tt>関数(強制マウント指定)の実行またはメディア交換の後の最初のファイル アクセスの時です。アプリケーションは、この構造体のメンバを書き換えてはなりません。</p>
<p><tt>FATFS</tt>構造体(ファイル システム オブジェクト)は、個々の論理ドライブのダイナミック ワーク エリアを保持し、<tt>f_mount</tt>関数でFatFsモジュールに登録されます。構造体の作成は、随時ボリューム マウント プロセスにより行われます。アプリケーションは、この構造体のメンバを書き換えてはなりません。</p>
<pre>
<span class="k">typedef</span> <span class="k">struct</span> {

View File

@@ -36,7 +36,7 @@ FRESULT f_truncate (
<a href="rc.html#ok">FR_OK</a>,
<a href="rc.html#de">FR_DISK_ERR</a>,
<a href="rc.html#ie">FR_INT_ERR</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#tm">FR_TIMEOUT</a>
</p>

View File

@@ -40,7 +40,7 @@ FRESULT f_unlink (
<a href="rc.html#ok">FR_NO_FILE</a>,
<a href="rc.html#np">FR_NO_PATH</a>,
<a href="rc.html#in">FR_INVALID_NAME</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#wp">FR_WRITE_PROTECTED</a>,
<a href="rc.html#id">FR_INVALID_DRIVE</a>,
<a href="rc.html#ne">FR_NOT_ENABLED</a>,

View File

@@ -45,7 +45,7 @@ FRESULT f_write (
<a href="rc.html#ok">FR_OK</a>,
<a href="rc.html#de">FR_DISK_ERR</a>,
<a href="rc.html#ie">FR_INT_ERR</a>,
<a href="rc.html#de">FR_DENIED</a>,
<a href="rc.html#dn">FR_DENIED</a>,
<a href="rc.html#io">FR_INVALID_OBJECT</a>,
<a href="rc.html#tm">FR_TIMEOUT</a>
</p>