mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-09 20:46:07 +01:00
d2c0dea556
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@91 ebee16cc-31ac-478f-84a7-5cbb03baadba
142 lines
4.6 KiB
HTML
142 lines
4.6 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||
<html lang="ja">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
|
||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||
<link rel="up" title="FatFs" href="../00index_j.html">
|
||
<link rel="stylesheet" href="../css_j.css" type="text/css" media="screen" title="ELM Default">
|
||
<title>FatFs - f_forward</title>
|
||
</head>
|
||
|
||
<body>
|
||
|
||
<div class="para">
|
||
<h2>f_forward</h2>
|
||
<p>ファイルからデータを読み出し、送信ストリームに直接転送します。</p>
|
||
<pre>
|
||
FRESULT f_forward (
|
||
FIL* <em>FileObject</em>, /* ファイル・オブジェクト構造体 */
|
||
UINT (*<em>Func</em>)(const BYTE*,UINT), /* データ転送関数 */
|
||
UINT <em>ByteToFwd</em>, /* 転送するバイト数 */
|
||
UINT* <em>ByteFwd</em> /* 転送されたバイト数 */
|
||
);
|
||
</pre>
|
||
</div>
|
||
|
||
<div class="para">
|
||
<h4>引数</h4>
|
||
<dl class="par">
|
||
<dt>FileObject</dt>
|
||
<dd>ファイル・オブジェクト構造体へのポインタを指定します。</dd>
|
||
<dt>Func</dt>
|
||
<dd>データを渡すユーザ定義関数へのポインタを指定します。この関数の仕様はサンプルを参照してください。</dd>
|
||
<dt>ByteToRead</dt>
|
||
<dd>転送するバイト数(0~UINTの最大値)を指定します。</dd>
|
||
<dt>ByteRead</dt>
|
||
<dd>実際に転送されたバイト数を格納する変数を指すポインタを指定します。</dd>
|
||
</dl>
|
||
</div>
|
||
|
||
|
||
<div class="para">
|
||
<h4>戻り値</h4>
|
||
<dl class="ret">
|
||
<dt>FR_OK (0)</dt>
|
||
<dd>正常終了。</dd>
|
||
<dt>FR_DENIED</dt>
|
||
<dd>非読み込みモードで開いたファイルから読み込もうとした。</dd>
|
||
<dt>FR_DISK_ERR</dt>
|
||
<dd>ディスク・エラーによる失敗。</dd>
|
||
<dt>FR_INT_ERR</dt>
|
||
<dd>不正なFAT構造または内部エラーによる失敗。</dd>
|
||
<dt>FR_NOT_READY</dt>
|
||
<dd>メディアがセットされていないなど、ディスク・ドライブが動作不能状態。</dd>
|
||
<dt>FR_INVALID_OBJECT</dt>
|
||
<dd>無効なファイル・オブジェクト。</dd>
|
||
</dl>
|
||
</div>
|
||
|
||
|
||
<div class="para">
|
||
<h4>解説</h4>
|
||
<p>ファイルのデータをバッファに読み出さずに送信ストリームに直接転送します。アプリケーション側でデータ・バッファを必要としないので、メモリの限られた環境で有効です。転送開始位置は、現在のファイルR/Wポインタからになります。ファイルR/Wポインタは転送されたバイト数だけ進みます。指定されたバイト数の転送中にファイルの終端に達した場合や送信ストリームがビジーになった場合、<tt>*ByteFwd</tt>は<tt>ByteToFwd</tt>よりも小さくなります。</p>
|
||
</div>
|
||
|
||
|
||
<div class="para">
|
||
<h4>対応情報</h4>
|
||
<p><tt>_USE_FORWARD == 1</tt>で、且つ<tt>_FS_TINY == 1</tt>のときに使用可能です。</p>
|
||
</div>
|
||
|
||
|
||
<div class="para">
|
||
<h4>使用例(オーディオ再生)</h4>
|
||
<pre>
|
||
/*-----------------------------------------------------------------------*/
|
||
/* f_forward関数から呼ばれるデータ送信関数の例 */
|
||
/*-----------------------------------------------------------------------*/
|
||
|
||
UINT out_stream ( /* 戻り値: 転送されたバイト数またはストリームの状態 */
|
||
const BYTE *p, /* 転送するデータを指すポインタ */
|
||
UINT btf /* >0: 転送を行う(バイト数). 0: ストリームの状態を調べる */
|
||
)
|
||
{
|
||
UINT cnt = 0;
|
||
|
||
|
||
if (btf == 0) { /* センス要求 */
|
||
/* ストリームの状態を返す (0: ビジー, 1: レディ) */
|
||
/* 一旦、レディを返したら、続く転送要求で少なくとも1バイトは */
|
||
/* 転送されないと f_forward関数は FR_RW_ERROR となる。 */
|
||
if (FIFO_READY) cnt = 1;
|
||
}
|
||
else { /* 転送要求 */
|
||
do { /* 全てのバイトを転送するか、ストリームがビジーになるまで繰り返す */
|
||
FIFO_PORT = *p++;
|
||
cnt++;
|
||
} while (cnt < btf && FIFO_READY);
|
||
}
|
||
|
||
return cnt;
|
||
}
|
||
|
||
|
||
/*-----------------------------------------------------------------------*/
|
||
/* f_forward関数の使用例 */
|
||
/*-----------------------------------------------------------------------*/
|
||
|
||
FRESULT play_file (
|
||
char *fn /* 再生するオーディオ・ファイル名を指すポインタ */
|
||
)
|
||
{
|
||
FRESULT rc;
|
||
FIL fil;
|
||
UINT dmy;
|
||
|
||
/* ファイルを読み出しモードで開く */
|
||
rc = f_open(&fil, fn, FA_READ);
|
||
|
||
/* 全てのデータが転送されるかエラーが発生するまで続ける */
|
||
while (rc == FR_OK && fil.fptr < fil.fsize) {
|
||
|
||
/* ほかの処理... */
|
||
|
||
/* 定期的または要求に応じてデータをストリームに送出する */
|
||
rc = f_forward(&fil, out_stream, 1000, &dmy);
|
||
}
|
||
|
||
return rc; /* FR_OK: 正常終了, ほか:異常終了 */
|
||
}
|
||
</pre>
|
||
</div>
|
||
|
||
|
||
<div class="para">
|
||
<h4>参照</h4>
|
||
<p><tt><a href="open.html">f_open</a>, <a href="gets.html">fgets</a>, <a href="write.html">f_write</a>, <a href="close.html">f_close</a>, <a href="sfile.html">FIL</a></tt></p>
|
||
</div>
|
||
|
||
<p class="foot"><a href="../00index_j.html">戻る</a></p>
|
||
</body>
|
||
</html>
|