(注意: TEMPer V1.2のドライバは→「ここ」にあります)
USB温度計TEMPer V1.2で温度取得をおこなっていると、以下の様な形で、エラーとなることがある。
$ ./pcsensor USB interrupt read: Resource temporarily unavailable Fatal error> USB read failed $
しかも、これが発生すると該当デバイスは一度offlineとなり、別のデバイスとして認識されてしまいます。
どれくらいの確率で発生するのかを、スクリプト組んで確かめてみました。
作成したスクリプト
#!/bin/bash SUCCESS=0 FAILED=0 I=0 while [ $I -lt 1000 ] do echo -n "$I " ./pcsensor > /dev/null 2>&1 if [ $? -eq 0 ]; then SUCCESS=`expr $SUCCESS + 1` else FAILED=`expr $FAILED + 1` fi sleep 5 I=`expr $I + 1` done echo "" echo "successed: $SUCCESS" echo "failed: $FAILED"
pcsensorを実行して5秒待つ、というのを繰り返すという、まぁ、素直なものですね。
USB温度計を2つつなげて、1000回の測定を開始!
$ ./test.sh 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <略> 7 988 989 990 991 992 993 994 995 996 997 998 999 successed: 879 failed: 121 $
2個のうちどちらか片方こけただけでも、両方アウトになるので、失敗確率が結構いってしまいます。
また、エラーが発生すると、offlineになるので、ログには以下の様な記録がずらずらっと・・・
# tail /var/log/messages Jan 17 15:02:27 temperserver kernel: usb 2-2: configuration #1 chosen from 1 choice Jan 17 15:02:27 temperserver kernel: input: RDing TEMPerV1.2 as /class/input/input174 Jan 17 15:02:27 temperserver kernel: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.2] on usb-0000:00:1d.0-2 Jan 17 15:02:27 temperserver kernel: hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPerV1.2] on usb-0000:00:1d.0-2 Jan 17 15:03:02 temperserver kernel: usb 3-1: USB disconnect, address 90 Jan 17 15:03:03 temperserver kernel: usb 3-1: new low speed USB device using uhci_hcd and address 91 Jan 17 15:03:03 temperserver kernel: usb 3-1: configuration #1 chosen from 1 choice Jan 17 15:03:03 temperserver kernel: input: RDing TEMPerV1.2 as /class/input/input175 Jan 17 15:03:03 temperserver kernel: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.2] on usb-0000:00:1d.1-1 Jan 17 15:03:03 temperserver kernel: hiddev96,hidraw96: USB HID v1.10 Device [RDing TEMPerV1.2] on usb-0000:00:1d.1-1
そして、lsusbを実行すると、以下のように、デバイス番号がすごいことに・・・
# lsusb Protocol spec without prior Class and Subclass spec at line 4297 Bus 003 Device 091: ID 0c45:7401 Microdia Bus 003 Device 001: ID 0000:0000 Bus 002 Device 084: ID 0c45:7401 Microdia Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000
(1000回スクリプト実行前にも、テストとかをおこなっているので・・・)
運用に当たっては、いろいろ配慮が必要なようです。