twe::stream に改行コードを出力する
mwx::stream
の <<
演算子に対して改行コード (CR LF) を出力するためのヘルパークラスのインスタンスです。
twe::stream へのバッファ出力をフラッシュする。
mwx::stream
の出力バッファをフラッシュする。flush()
メソッドを呼び出すヘルパークラスへのインスタンス。
シリアルポートの場合は出力完了までポーリング待ちを行う
mwx::simpbuf
バッファの場合は 0x00
を末尾に出力する(サイズは変更しない)
stream_helper
stream_helperは、mwx::stream
インタフェースを付与するヘルパーオブジェクトです。データクラスを参照するヘルパーオブジェクトを生成し、ヘルパーオブジェクト経由でデータの入出力を行います。
以下にはsmplbufの配列b
からヘルパーオブジェクトbs
を生成しmwx::stream::operator <<()
演算子によるデータ入力を行っています。
stream_helper はデータ配列をストリームに見立てて振舞います。
内部にはデータ配列中の読み書き位置を保持しています。次のようにふるまいます。
読み出しまたは書き込みをすると次の読み書き位置に移動します。
最期のデータを読み出した後、またはデータを末尾に追記した後には、読み書き位置は終端となります。
読み書き位置が終端の場合、
available()
がfalse
になります。
読み出しは出来ません。
書き込みは書き込み可能範囲であれば追記します。
stream_helper は、データクラス (smplbuf, EEPROM) のメンバー関数より生成します。
読み書き位置を先頭に移動します。
読み書き位置を設定します。
読み書き位置を返します。終端位置の場合は-1
を返します。
読み書き位置が終端であれば0
を返します。終端でなければそれ以外の値を返します。
mwx::stream に printf の書式を入力
mwx::stream
の << 演算子に対してフォーマット書式を書き出すヘルパークラスです。ライブラリ内では Using format=mwx::mwx_format;
として別名定義しています。
可変数引数リストに登録できる引数は最大8つです。doubleやuint64_t型など64bitのパラメータが含まれる場合は引数の数が制限されます。制限を超えた場合はstatic_assertによるコンパイルエラーになります。
コンストラクタで受け取った引数リストを、パラメータパックの展開機能を用いてクラス内部変数に格納する
operator <<
が呼び出された時点で、fctprintf()
を呼び出し、ストリームにデータを書き出す
コンストラクタでは、書式のポインタとパラメータを保存します。続く <<
演算子による呼び出しでフォーマットを解釈して出力処理を行います。
パラメータ | 解説 |
---|---|
fmt
は本オブジェクトが破棄されるまで、アクセス可能であることが必要です。
入出力ストリーム
入出力ストリームを処理する上位クラスです。
CRTP (Curiously Recurring Template Pattern) 手法を用いたポリモーフィズムにより、いくつかのクラス(Serial, Wire, SPI, smplbuf
) にインタフェースを提供します。
CRTP では下位クラスは template class Derived : public stream<Derived>;
のように定義し、上位クラスからも下位クラスのメソッドを参照します。
本クラスでは print
メソッド、<<
演算子などの共通処理の定義を行い、下位クラスで実装した write()
メソッドなどを呼び出すことで、仮想関数を用いるのと近い実装を行っています。
下位クラスでは、以下に列挙する関数を実装します。
入力が存在する場合は 1、存在しない場合は 0 を返します。
パラメータ | 解説 |
---|---|
本実装の戻り値はバッファ長ではありません。
出力をフラッシュ(出力完了まで待つ)します。
ストリームより1バイトデータを入力します。データが存在しない場合は -1
を戻します。
ストリームに1バイト出力します。
1バイト出力を行うスタティック関数です。クラスメソッドではないため、メンバー変数等の情報は利用できません。替わりにパラメータとして渡される vp にクラスインスタンスへのポインタを渡します。
このスタティック関数は内部的に利用されfctprintf()
の1バイト出力関数として関数ポインタが渡ります。これを用いてprint
メソッドなどを実装しています。
1バイト出力します。
各種整形出力を行います。
printf 形式での出力を行います。
TWESDK/TWENET/current/src/printf/README.md 参照
バイト列として出力する際は、uint8_t, uint16_t, uint32_t
型にキャストします。また文字列として数値出力する場合は明示的にint
形にキャストするようにしてください。
1バイト型は型名によって取り扱いが違います。通常はサイズを意識したuint8_t[S]
型を用いるようにしてください。
>>
演算子を用いた入力タイムアウトとエラーを管理します。
set_timeout()
によりタイムアウト時間を指定し、>>
演算子により入力処理を行います。所定時間内までに入力が得られない場合は get_error_status()
によりエラー値を読み出せます。clear_error_status()
によりエラー状況をクリアします。
入力処理を行います。
setup()
内では実行できません。
ポーリング待ちを行うため、タイムアウトの時間設定(タイムアウト無しなど)によっては、ウォッチドッグタイマーが発動してリセットする場合があります。
通常はloop()
中で以下のような読み出しを行います。
以下に読み出し格納できる型を列挙します。
whence | 設定位置 |
---|---|
パラメータ | 解説 |
---|---|
パラメータ | 解説 |
---|---|
パラメータ | 解説 |
---|---|
引数型 | 解説 |
---|---|
引数型 | 解説 |
---|---|
値 | 意味 |
---|---|
引数型 | 解説 |
---|---|
fmt
フォーマット書式。TWESDK/TWENET/current/src/printf/README.md 参照
...
フォーマット書式に応じたパラメータ。 ※ 最大数は4で、5つ以上のパラメータではコンパイルエラーとなる。※ 書式との整合性はチェックしないため、不整合な入力に対しては安全ではない。
v
uint16_t
または uint32_t
の型の値
MWX_SEEK_SET
先頭位置から設定します。offset
に0
を指定するとrewind()
と同じ意味になります。
MWX_SEEK_CUR
現在位置を基準にoffset
分移動しまします。
MWX_SEEK_END
終端位置にします。offset
は0
にすると終端に設定します。-1
を設定すると最後の文字に移動します。
戻り値 int
0: データなし 1:データあり
n
出力したい文字。
戻り値 size_t
出力が成功すれば 1、失敗すれば 0。
out
出力したい文字
vp
クラスインスタンスへのポインタ 通常は、元のクラスにキャストして write() メソッドを呼び出す
val
整形出力したい数値型
base
出力形式BIN 二進数 / OCT 8進数 / DEC 10進数 / HEX 16進数
place
小数点以下の桁数
戻り値 size_t
書き出したバイト数
char
1バイト出力 (数値としてフォーマットはしない)
int
整数出力 (printf の "%d")
double
数値出力 (printf の "%.2f")
uint8_t
1バイト出力する(char型と同様)
uint16_t
2バイト出力する(ビッグエンディアン順)
uint32_t
4バイト出力する(ビッグエンディアン順)
const char*``uint8_t*``const char[S]
終端文字までを出力します。出力には終端文字は含まれません。(S
は固定配列のサイズ指定)
uint8_t[S]
配列サイズS
バイト分をそのまま出力します。(S
は固定配列のサイズ指定)
format()
printf 形式での出力
mwx::crlf
改行 CRLF の出力
mwx::flush
出力のフラッシュ
bigendian()
数値型をビッグエンディアン順で出力する。(右辺値)
std::pair<T*, T*>
バイト型の begin(), end()
ポインタを格納したペア。make_pair
により生成できる。T
は uint8_t
型を想定する。(右辺値)
bytelist()
std::initializer_list
を用いるバイト列の出力
smplbuf<uint8_t,AL>&
uint8_t
型の配列クラスの内容を出力する。ALC
はメモリ確保手段。
smplbuf<uint8_t, AL>::to_stream()
smplbuf<T>
のデータを出力する
T
は uint8_t
型、AL
はメモリ確保手段。
centisec
1/10秒単位でタイムアウト時間を設定します。0xff
を指定した場合は、タイムアウトを無効とします。
0
エラーなし
1
エラー状況
uint8_t, char_t
1バイト入力
uint16_t
2バイト入力(ビッグエンディアン順)
uint32_t
4バイト入力(ビッグエンディアン順)
uint8_t[S]
S
バイト分入力(S
は固定配列のサイズ指定)
null_stream(int n)
n
バイト読み捨てる