LinuxからUSB HUBの電源のON/OFFを制御してみる
はじめに
USBの規格上、各ポートの電源の制御ができる(Per-port power switchingというらしい?)そうですが、その機能を実装しているデバイスがあまり無いようです。 いろいろを探してみるとSUGOI HUBがその機能を実装しているということなので買って試してみました。
システムトークス SUGOI HUB4Xシリーズ ブラック アダプタ付 電力供給安定型 USB2-HUB4XA-BK
- 出版社/メーカー: システムトークス
- 発売日: 2009/01/19
- メディア: Personal Computers
- クリック: 3回
- この商品を含むブログを見る
システムトークス SUGOI HUB4Xシリーズ ホワイト アダプタ付 電力供給安定型 USB2-HUB4XA-WH
- 出版社/メーカー: システムトークス
- 発売日: 2009/01/19
- メディア: Personal Computers
- 購入: 1人 クリック: 1回
- この商品を含むブログを見る
lsusbコマンドで確認する
Linuxならなんでもいいですが、とりあえずraspberry pi 2で。
lsusb
で確認してみます:
pi@raspberrypi ~ $ sudo lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0409:005a NEC Corp. HighSpeed Hub
このなかのNEC Corp.製のチップのデバイスがSUGOI HUBです。BUS=1, Device=4
であることがわかります。
hub-ctrlを使って制御する
portの電源制御が簡単にできるようになるので利用してみます:
http://www.gniibe.org/development/ac-power-control-by-USB-hub/index.html
hub-ctrlをコンパイル
$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c $ gcc -O2 -o hub-ctrl hub-ctrl.c -lusb
-v
で各portの状態が確認できます:
pi@raspberrypi ~ $ sudo ./hub-ctrl -v Hub #0 at 001:004 INFO: individual power switching. Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0100 power Port 3: 0000.0100 power Port 4: 0000.0100 power *snip*
Hub #0 at 001:004
が先にlsusbで確認したBUS=1, Device=4
のSUGOI HUBです。
操作してみる
portはSUGOI HUBの左から1,2,3,4の順で指定できます。
$ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 0 # port 1のpower off $ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 1 # port 1のpower on $ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 0 # port 2のpower off $ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 1 # port 2のpower on
なお、port 3,4は操作できませんでした。
これでUSBファンなどが自在に操作できます! USB電源連動のタップを使えば、安全に電化製品を制御できそうですね。
https://gist.github.com/atotto/5c1d55a2cb99ced9f7c7
raspberry piでやっていて気になったこと
hub-ctrl -v
で確認するとBUS=1, Device=2
にも何か見えています。
これはraspberry piのものです。
Hub #1 at 001:002 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect Port 2: 0000.0100 power Port 3: 0000.0100 power Port 4: 0000.0503 highspeed power enable connect Port 5: 0000.0100 power Hub #2 at 001:001 INFO: ganged switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0503 highspeed power enable connect
ためしに、raspberry piのportを操作してみました。 port 1の電源を落とすとLANが落ちました:
$ sudo ./hub-ctrl -b 1 -d 2 -P 1 -p 0
port 2、または、port 4を操作するとraspberry piのUSBの電源がすべて落ちました:
$ sudo ./hub-ctrl -b 1 -d 2 -P 2 -p 0
$ sudo ./hub-ctrl -b 1 -d 2 -P 4 -p 0
残りのport 3,5はよくわかりません。 #どこの資料をみればいいのでしょう。。