mwx::stream
入出力ストリーム
入出力ストリームを処理する上位クラスです。
CRTP (Curiously Recurring Template Pattern) 手法を用いたポリモーフィズムにより、いくつかのクラス(
Serial, Wire, SPI, smplbuf
) にインタフェースを提供します。CRTP では下位クラスは
template class Derived : public stream<Derived>;
のように定義し、上位クラスからも下位クラスのメソッドを参照します。
本クラスでは
print
メソッド、<<
演算子などの共通処理の定義を行い、下位クラスで実装したwrite()
メソッドなどを呼び出すことで、仮想関数を用いるのと近い実装を行っています。
インタフェース(下位クラスで実装)
下位クラスでは、以下に列挙する関数を実装します。
available()
入力が存在する場合は 1、存在しない場合は 0 を返します。
パラメータ
解説
戻り値 int
0: データなし 1:データあり
本実装の戻り値はバッファ長ではありません。
flush()
出力をフラッシュ(出力完了まで待つ)します。
read()
ストリームより1バイトデータを入力します。データが存在しない場合は -1
を戻します。
write()
ストリームに1バイト出力します。
パラメータ
解説
n
出力したい文字。
戻り値 size_t
出力が成功すれば 1、失敗すれば 0。
vOutput()
1バイト出力を行うスタティック関数です。クラスメソッドではないため、メンバー変数等の情報は利用できません。替わりにパラメータとして渡される vp にクラスインスタンスへのポインタを渡します。
このスタティック関数は内部的に利用されfctprintf()
の1バイト出力関数として関数ポインタが渡ります。これを用いてprint
メソッドなどを実装しています。
パラメータ
解説
out
出力したい文字
vp
クラスインスタンスへのポインタ 通常は、元のクラスにキャストして write() メソッドを呼び出す
インタフェース
putchar()
1バイト出力します。
print(), println()
各種整形出力を行います。
パラメータ
解説
val
整形出力したい数値型
base
出力形式
BIN 二進数 / OCT 8進数 / DEC 10進数 / HEX 16進数
place
小数点以下の桁数
戻り値 size_t
書き出したバイト数
printfmt()
printf 形式での出力を行います。
TWESDK/TWENET/current/src/printf/README.md 参照
operator <<
引数型
解説
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
はメモリ確保手段。
バイト列として出力する際は、uint8_t, uint16_t, uint32_t
型にキャストします。また文字列として数値出力する場合は明示的にint
形にキャストするようにしてください。
1バイト型は型名によって取り扱いが違います。通常はサイズを意識したuint8_t[S]
型を用いるようにしてください。
set_timeout(), get_error_status(), clear_error_status()
>>
演算子を用いた入力タイムアウトとエラーを管理します。
set_timeout()
によりタイムアウト時間を指定し、>>
演算子により入力処理を行います。所定時間内までに入力が得られない場合は get_error_status()
によりエラー値を読み出せます。clear_error_status()
によりエラー状況をクリアします。
引数型
解説
centisec
1/10秒単位でタイムアウト時間を設定します。
0xff
を指定した場合は、タイムアウトを無効とします。
エラー値
値
意味
0
エラーなし
1
エラー状況
operator >>
入力処理を行います。
setup()
内では実行できません。ポーリング待ちを行うため、タイムアウトの時間設定(タイムアウト無しなど)によっては、ウォッチドッグタイマーが発動してリセットする場合があります。
通常はloop()
中で以下のような読み出しを行います。
以下に読み出し格納できる型を列挙します。
引数型
解説
uint8_t, char_t
1バイト入力
uint16_t
2バイト入力(ビッグエンディアン順)
uint32_t
4バイト入力(ビッグエンディアン順)
uint8_t[S]
S
バイト分入力
(S
は固定配列のサイズ指定)
null_stream(int n)
n
バイト読み捨てる
最終更新