秋月でUSB-IOなるものをゲットしました。本来の目的は「PIC14K50を動かすための基板を作るのが面倒くさい」ということで、速攻でROMを書き換えてしまおうと思ったのですが、その前に少しだけ動かしてみました。なお、動かすにあたっては、こちらのページを参考にさせていただきました。
この基板をLinuxMint11のマシンに接続して、dmesgコマンドを叩くと、
$ dmesg
(途中略)
[16763.641868] generic-usb 0003:1352:0121.0009: hiddev0,hidraw3: USB HID v1.11 Device [Km2Net Inc. USB-IO2.0] on usb-0000:00:13.2-2.3/input0 $
となって、hiddev0とhidraw3というデバイスファイルができてそうな雰囲気であることがわかります。
そこで、ターミナルを2つ開いて、
$ sudo bash
として、rootのシェルを2つ起動します。root権限のシェルなのは、/dev/hidraw3 へのアクセスにroot権限が必要なためです。
この状態で一つ目のシェルで
# od -x /dev/hidraw3
として、hidraw3からの出力を監視します。その状態でもう一つのシェルで、
# printf “\x00\x20” > /dev/hidraw3
とすると、
000xx00 0020 000f 0000 000f 0000 0000 0000 0000
000xx20 0000 0000 0000 0000 0000 0000 0000 0000
*
000xx60 0000 0000 0000 0000 0000 0000 0000 1000
という内容がもう一つのシェルに出力されます。赤文字の部分はレポートID、コマンド、ポート1の値、ポート2の値です。基板上のポート2(J2)を抵抗でGNDに落としてやると、落としたポートに応じて0fの部分が変化しました。(コマンドについてはこちらを見てください。いまひとつわかりにくい仕様ですが、「何バイト目にどんなデータが置かれるか」というフォーマットになっているようです。)
さらに、
# printf "\x00\x0f9\x00\x00\x00\x00\x0fe\x0f\x00\x00\x00\x00" > /dev/hidraw3
として、ポート1のビット0を出力に設定します。ここで一旦USBケーブルを抜いて、差しなおします。その後、監視側の od コマンドを再実行したあと、
# printf "\x00\x20\x01\x01" > /dev/hidraw3
とすると、ポート1のビット0がH出力になるので、そこに接続されたLEDが点灯します。次に、
# printf "\x00\x20\x01\x00" > /dev/hidraw3
とすると、LEDが消灯します。
初めまして。seijiと申します。
現在、Linux (Ubuntu 16.04)で秋月のUSB-ioを使って、キーボードの1を押したら緑、2を押したら黄色、3押したら赤のLEDが点灯するようにしたいと思い、調べていましたら、貴殿のサイトにたどり着きました。貴殿にとりましては少し古い話で恐縮ですが、上記の通りやって見ましたところ、ポート1の0〜3までLEDが点灯し、printf “\x00\x20\x01\x00” > /dev/hidraw3で消灯しません。どんな問題が考えらえられますでしょうか?
いまいち、printf の各x??の意味合いがわかっておりません。ご指南いただければ幸いです。LInux関係の情報がことごとくリンクがきれていたり、ネットで見つかったサンプルプログラムもkernelバージョンの関係か上手く動かない状況です。
以上、宜しくお願いします。
ともの様
seijiです。その後、何度かトライしていましたら、ご案内のようにJ1ポートの、j1-0、j1-1、j1-2のLEDをそれぞれ、x01、x02、x04で点灯、x00で消灯できました。しかし、PCの電源を落としますと、hidrawXのXが動きます。これはどのようにフォローすればよろしいのでしょうか?ご教示いただければ幸いです。
返信遅くなりました(最近、忙しくてたまにしかみてないもので・・・)
本題ですが、あまり詳しく調べてないのでうまくいくかは全くわかりませんが、udevルールでデバイス名を固定する、という手段はありそうです。
例えば↓のやり方とかどうでしょう??
https://qiita.com/caad1229/items/309be550441515e185c0
(USB-IOってベンダID/デバイスIDとして何を返していたか確認してないですが)