USBへ接続したデバイスのON,OFFをしたいため、Hub-Ctrl.cをダウンロード、コンパイルし、利用しています。
最近購入したPi3 Model B+では、思った通り動いたのですが、2年程前に購入したModel Bを使い、同じ手順で操作したところ、
思ったようには動きませんでした
何か対応方法をご存知の方居られましたら、お知恵を貸してください。
1)Model B+を使い、"hub-ctrl -b 1 -d 2 -P 2 -p 0"を実行すると、USBに接続したデバイスがOFFされた
2)Model Bで同じ操作をしたところ、一瞬、デバイスはOFFされるが、直ぐにONに戻る
3)Model B+に差したSDカードをModel Bへ差して操作したが、症状は同じであった
3)の点から、Model BとModel B+の違いの影響ではないかと勝手に判断しましたが、別の原因かもしれません
Hub_Ctrl.pyでも試しましたが、同じ症状でした
コンパイルの方法も色々試しましたが、変化はありませんでした
どうぞよろしくお願いします
ご検討に際し、不足する情報がありましたら、お知らせください
-
- Posts: 2
- Joined: Tue Jun 04, 2019 11:05 pm
Re: USBの電源の制御
(1) libusb-dev をインストールする。
$sudo apt-get -y install libusb-dev
(2) コンパイル
$ wget http://www.gniibe.org/oitoite/ac-power- ... b/hub-ctrl....
$ gcc -O2 -o hub-ctrl hub-ctrl.c -lusb
外していたらごめんなさい。
$sudo apt-get -y install libusb-dev
(2) コンパイル
$ wget http://www.gniibe.org/oitoite/ac-power- ... b/hub-ctrl....
$ gcc -O2 -o hub-ctrl hub-ctrl.c -lusb
外していたらごめんなさい。
Re: USBの電源の制御
手元の「Raspberry Pi Model B Rev 2」でちょっと確認してみました
外部USB port にKeyboard を接続した状態で `hub-ctrl -b 1 -d 2 -P 2 -p 0` を実行してみると自分の環境でも一旦Keyboard の電源が切れた後再接続されました.
このときの dmesg を見るとこのような感じです.
hub-ctrl をオプション無しで実行してみるとサポートされていないように見えます.
恐らく電源の制御はサポートされていないので単体では出来ないように思います.
電源制御対応のUSB Hub を入手してその先に制御したいものを接続すればうまく行くのではないかと思います.(若しくは今動いているPiと同じものをもう一つ買う)
以下のページにいくつかの対応ハブのリストがあります.
以下余録
`lsusb -v` の出力結果の「Hub Descriptor」セクションの中に「Per-port power switching」がある場合電源の制御が出来るようです.
下のポートにデバイスを接続して確認
上のポートにデバイスを接続して確認
内蔵デバイスをそれぞれ確認
内蔵の 1:2 が対応しているように見えます.
これは内蔵USBハブで,その下に外部USB port がぶら下がっているようです.
これだけ見ると制御できそうなんですけど一旦電源が切れた後復帰制てしまうのは完全に対応していないのかもしれないですね.
確認に使ったRaspberry Pi
外部USB port にKeyboard を接続した状態で `hub-ctrl -b 1 -d 2 -P 2 -p 0` を実行してみると自分の環境でも一旦Keyboard の電源が切れた後再接続されました.
このときの dmesg を見るとこのような感じです.
Code: Select all
[Jun 7 05:03] usb 1-1.2: USB disconnect, device number 10
[ +0.418297] usb 1-1.2: new low-speed USB device number 11 using dwc_otg
[ +0.206293] usb 1-1.2: New USB device found, idVendor=04d9, idProduct=3113
[ +0.000024] usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ +0.000011] usb 1-1.2: Product: USB Keyboard
[ +0.050100] input: USB Keyboard as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:04D9:3113.000F/input/input14
[ +0.064821] hid-generic 0003:04D9:3113.000F: input,hidraw0: USB HID v1.10 Keyboard [USB Keyboard] on usb-20980000.usb-1.2/input0
[ +0.093355] input: USB Keyboard as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.1/0003:04D9:3113.0010/input/input15
[ +0.065883] hid-generic 0003:04D9:3113.0010: input,hidraw1: USB HID v1.10 Device [USB Keyboard] on usb-20980000.usb-1.2/input1
Code: Select all
$ ./hub-ctrl
Hub #0 at 001:000
INFO: ganged switching.
WARN: Port indicators are NOT supported.
Hub #1 at 001:000
INFO: ganged switching.
WARN: Port indicators are NOT supported.
電源制御対応のUSB Hub を入手してその先に制御したいものを接続すればうまく行くのではないかと思います.(若しくは今動いているPiと同じものをもう一つ買う)
以下のページにいくつかの対応ハブのリストがあります.
- "AC Power Control by USB Hub" http://www.gniibe.org/development/ac-po ... index.html
以下余録
`lsusb -v` の出力結果の「Hub Descriptor」セクションの中に「Per-port power switching」がある場合電源の制御が出来るようです.
下のポートにデバイスを接続して確認
Code: Select all
$ sudo lsusb -v -s 1:4|grep "power switching"
Code: Select all
$ sudo lsusb -v -s 1:5|grep "power switching"
Code: Select all
$ sudo lsusb -v -s 1:3|grep "power switching"
$ sudo lsusb -v -s 1:2|grep "power switching"
Per-port power switching
$ sudo lsusb -v -s 1:1|grep "power switching"
Ganged power switching
これは内蔵USBハブで,その下に外部USB port がぶら下がっているようです.
Code: Select all
$ lsusb -s 1:2
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. SMC9512/9514 USB Hub
$ lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
|__ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 2: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
確認に使ったRaspberry Pi
Code: Select all
$ cat /proc/device-tree/model ;echo
Raspberry Pi Model B Rev 2
Kagoshima Linux User Group : https://kagolug.org/
my site: https://matoken.org
my pi : 1B/1B+/1A/1A+/2B/3B/Zero/Zweo W
my site: https://matoken.org
my pi : 1B/1B+/1A/1A+/2B/3B/Zero/Zweo W
-
- Posts: 2
- Joined: Tue Jun 04, 2019 11:05 pm
Re: USBの電源の制御
丁寧にご返信くださり、ありがとうございました。
参考にさせて頂き、以下のようで、ひとまず、対応しました。
①hub-ctrlのコンパイル
以下のようでコンパイルしました
gcc -O hub-ctrl hub-ctrl.c -lusb
②usbの電源供給停止
Pythonのスクリプト内でusbのon,offを記載していた関係上、以下のようでスクリプト内に記しました。
1)usbのoff
return do_command("echo -n '1-1.2' | sudo tee /sys/bus/usb/drivers/usb/unbind ; sudo hub-ctrl -b 1 -d 2 -P 2 -p 0")
2)usbのon
return do_command("sudo hub-ctrl -b 1 -d 2 -P 2 -p 1")
①は、オプションの指定の効果があったのかどうかは、実は、定かではありません。
②は、"unbind"と"hub-ctrl"を記載したところ、offになりましたので、結果よしとしました
on時は、"hub-ctrl"だけでよいみたいです
数時間、継続的に動かしたところ、問題なさそうでした
更に検証が必要かもしれませんが、ひとまず、上記のようで対応しました
もし何か他の知見がございましたら、よろしくお願いします
やはり利用するデバイスは、揃えた方がいいですね
参考にさせて頂き、以下のようで、ひとまず、対応しました。
①hub-ctrlのコンパイル
以下のようでコンパイルしました
gcc -O hub-ctrl hub-ctrl.c -lusb
②usbの電源供給停止
Pythonのスクリプト内でusbのon,offを記載していた関係上、以下のようでスクリプト内に記しました。
1)usbのoff
return do_command("echo -n '1-1.2' | sudo tee /sys/bus/usb/drivers/usb/unbind ; sudo hub-ctrl -b 1 -d 2 -P 2 -p 0")
2)usbのon
return do_command("sudo hub-ctrl -b 1 -d 2 -P 2 -p 1")
①は、オプションの指定の効果があったのかどうかは、実は、定かではありません。
②は、"unbind"と"hub-ctrl"を記載したところ、offになりましたので、結果よしとしました
on時は、"hub-ctrl"だけでよいみたいです
数時間、継続的に動かしたところ、問題なさそうでした
更に検証が必要かもしれませんが、ひとまず、上記のようで対応しました
もし何か他の知見がございましたら、よろしくお願いします
やはり利用するデバイスは、揃えた方がいいですね