汎用USB-IO はとよぞうさんが開発され Morphy Planning から入手できるUSB接続のパラレルデジタルI/Oユニットです。 HID デバイスとして認識されます。
FreeBSDで使えるように プログラムを書いてみました。 NetBSDでも使えるだろうと思います。 /dev/hid0 を読み書きできる権限が必要です。 USB-IOのポートに何も繋がずに実行すると、
cel# ./usb-io out: 3 0 0 0 0 0 0 0 got: 3 ff port 0: 255 out: 1 55 0 0 0 0 0 0 got: 1 55 out: 3 0 0 0 0 0 0 0 got: 3 55 port 0: 85 out: 4 0 0 0 0 0 0 0 got: 4 ff port 1: 255という出力が出るはずです。 out: が /dev/hid0 を write() した内容(HEX)、 got: が /dev/hid0 を read() した結果(HEX)です。 port: は USB-IO のポートの番号と読み込んだ結果(10進)です。 USB-IO のコマンド 1 はポート0への出力、コマンド 2 はポート1への出力、 コマンド 3 はポート0の入力、コマンド4はポート1の入力です。 このプログラムでは、まずコマンド3でポート0を読み込み、0xff を得ていま す。次にコマンド1でポート1に 0x55 を書き込んでいます。もう一度 コマンド3でポート0を読むと直前の出力の内容が残っていて 0x55 に なっています。そしてコマンド4でポート1を読んで 0xff を得ています。
よくわかっていないので怪しい部分や冗長な部 分もありますが、置いておきます。無保証です。
USB-IO に秋月で売っている SUNLIKE 製の液晶を繋いでみました。
usb-lcd "1234567890123456" "ABCDEFGHIJKLMNOP"と引数を与えると、右のように引数1を1行目に、引数2を2行目に表示します。
SC1602BS | 1.VDD | 2.GND | 3.VLC | 4.RS | 5.R/W | 6.E | 7.DB0 | 8.DB1 | 9.DB2 | 10.DB3 | 11.DB4 | 12.DB5 | 13.DB6 | 14.DB7 |
USB-IO | VCC | GND | 抵抗で VCC と GNDを分圧 | port0 1 | GND | port0 3 | GND | GND | GND | GND | port0 5 | port0 6 | port0 7 | port0 8 |
上のusb-io0.cから省略した部分(動的なバッファの確保)があります。 デバイスが LCDつきの USB-IO であるかのチェックは行なっていません。