mwx::stream

入出力ストリーム

入出力ストリームを処理する上位クラスです。

  • CRTP (Curiously Recurring Template Pattern) 手法を用いたポリモーフィズムにより、いくつかのクラス(Serial, Wire, SPI, smplbuf) にインタフェースを提供します。

    • CRTP では下位クラスは template class Derived : public stream<Derived>;のように定義し、上位クラスからも下位クラスのメソッドを参照します。

  • 本クラスでは print メソッド、<< 演算子などの共通処理の定義を行い、下位クラスで実装した write() メソッドなどを呼び出すことで、仮想関数を用いるのと近い実装を行っています。

インタフェース(下位クラスで実装)

下位クラスでは、以下に列挙する関数を実装します。

available()

int available()

// example
while(Serial.available()) {
  int c = Serial.read();
  // ... any
}

入力が存在する場合は 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バイト出力します。

各種整形出力を行います。

パラメータ

解説

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 により生成できる。Tuint8_t 型を想定する。(右辺値)

bytelist()

std::initializer_list を用いるバイト列の出力

smplbuf<uint8_t,AL>&

uint8_t型の配列クラスの内容を出力する。

ALCメモリ確保手段

smplbuf<uint8_t, AL>::to_stream()

smplbuf<T> のデータを出力する Tuint8_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 >>

入力処理を行います。

通常はloop()中で以下のような読み出しを行います。

以下に読み出し格納できる型を列挙します。

引数型

解説

uint8_t, char_t

1バイト入力

uint16_t

2バイト入力(ビッグエンディアン順)

uint32_t

4バイト入力(ビッグエンディアン順)

uint8_t[S]

Sバイト分入力

(Sは固定配列のサイズ指定)

null_stream(int n)

nバイト読み捨てる

最終更新