tw
は、X-10 Inc. の家庭用コントロール製品と共に使用する、
TW-523 電源ラインインタフェースのドライバです。
X-10 プロトコルは、Radio Shack の ``Plug 'n Power(tm)'' や
スタンレーの ``Lightmaker(tm)'' を含む、
多くの家庭用コントロールシステムと互換性があります。
このドライバは
read()
write()
select()
のシステムコールをサポートします。
ドライバは複数のプロセスに読み書きができるように動作しますが、実際には
複数の読み取りプロセスがいたり複数の書き込みプロセスがいる場合には
意味が無いかもしれません。
また現状では、
実際にふたつのプロセスが同時に送信をしようとすると、
競合状態になる可能性があります
(tw_sc のなかの sc_pkt 構造体の非同期のアクセス構造によるものです)。
送信は
write()
を呼び出し、3 バイトのデータパケットを送信することによってなされます。
最初のバイトは 4 ビットのハウスコード (0=A から 15=P まで)、2 バイト目は
5 ビットの unit/key コード (0= ユニット 1 から 15= ユニット 16 まで、
16= 全ユニットオフ、31= ステータスリクエスト) です。
3 バイト目は、連続して
間を空けずに送信されるパケットの数を指定します。通常は X-10 Inc. の文書に
したがってこの値は 2 ですが、他の値をとることもできます。
write()
の呼び出しはそれぞれが任意のデータ長 (バイト数) を指定できますが、
どの呼び出しでも最大ひとつのパケットしか処理されません。
不完全なパケットは続いて起きる
write()
呼び出しが完全にデータを提供するまでバッファされます。
連続する
write()
の呼び出しに対しては、X-10 Inc. の文書にしたがって、3 サイクルの間隔が
とられます。ドライバは 1 サイクルに 3 回ビットを送るように定めている
X-10 Inc. の文書と異なり、半サイクルに 1 ビットずつしか送りません。
これは TW523 が
電源ラインがゼロ点を通る時の同期しか提供していないためです。したがって
3 相交流の商用電源サービスではドライバがうまく動作しない可能性があります。
ほとんどの住宅ではこのドライバが作動する 2 線の電源を使用しています。
受信は
read()
で行います。
ドライバは、3 文字から成るパケットを生成します。
それぞれのパケットで、最初の文字はフラグから成り、2 番目の文字は 4 ビットの
ハウスコード (0-15)、3 番目の文字は 5 ビットの key/function コード (0-31) で
す。フラグは以下の通りです。
|
#define TW_RCV_LOCAL 1 /* ローカルな転送中にパケットが到着しました */
|
|
#define TW_RCV_ERROR 2 /* 不正/壊れたパケットが到着しました */
|
select()
システムコールは、通常通り、読み取ることのできるデータが存在しているかどうかを
確かめるため、使用可能です。