USBの規格上、各ポートの電源の制御ができる(Per-port power switchingというらしい?)そうですが、その機能を実装しているデバイスがあまり無いようです。 いろいろを探してみるとSUGOI HUBがその機能を実装しているということなので買って試してみました。
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はよくわかりません。 #どこの資料をみればいいのでしょう。。