Ogaki Mini Maker Faireでファンアウト仙台 http://purose.net/fanout/ さんのVIR-USB 赤外線学習リモコンキットを入手しました。 Linux/FreeBSDでも動くそうなので、OpenBSD/NetBSDで動作するか試してみます。
NetBSD/amd64で動作することを確認しました。(要カーネルパッチ) (2018/12/13)
OpenBSD/amd64で、一部エラーになりますが動作することを確認しました。(要カーネルパッチ) (2018/12/19)
- OS: NetBSD/amd6.4 8.0-RELEASE
後述のOpenBSD同様、マザーボード(USBチップ?)によって認識できる機種とできない機種があるかもしれません。 NetBSD 用に使用した以下のマシンでの結果を記載しています。
- 本体: & Dell Optiplex 740
USBハブ経由、かつUSBハブ本体装着後にVIR-USBを装着しないと認識されませんでした。 一旦、ugen(4)と認識された後改めてuhid(4)に変わるようです。
(認識せず)
uhub2 at uhub1 port 2: vendor 05e3 (0x5e3) USB2.0 Hub (0x608), class 9/0, rev 2.00/32.98, addr 2
uhub2: single transaction translator
uhub2: 4 ports with 4 removable, self powered
uhub2: device problem, disabling port 2
uhub2 at uhub1 port 2: Genesys Logic (0x5e3) USB2.0 Hub (0x608), class 9/0, rev 2.00/32.98, addr 2
uhub2: single transaction translator
uhub2: 4 ports with 4 removable, self powered
ugen0 at uhub2 port 2
ugen0: vendor 16d0 (0x16d0) product 0753 (0x753), rev 1.10/1.06, addr 3
ugen0: detached
ugen0: at uhub2 port 2 (addr 3) disconnected
uhidev2 at uhub2 port 2 configuration 1 interface 0
uhidev2: Fanout_sendai (0x20a0) VIR (0x427e), rev 1.10/1.00, addr 3, iclass 3/0
uhidev2: no input interrupt endpoint
先に、devel/libusb1-1.0.22 を pkg_add しておきます。
ファンアウト仙台さんのページから、制御ソフトのソースコード (V-IR-src-27.zip)をダウンロードして解凍し、以下のパッチをあてます。
--- /dev/null 2018-12-12 22:05:39.530202719 +0900
+++ UNIX/Makefile.NetBSD 2018-12-11 22:04:37.363625335 +0900
@@ -0,0 +1,17 @@
+#
+# Makefile for NetBSD
+#
+# before use, pkg_add libusb-1.0
+#
+
+V-IR: v-ir.c
+# echo === Make on 32bit machine. ===
+ gcc v-ir.c -I/usr/pkg/include -L/usr/pkg/lib -lusb-1.0 -static -lpthread -o V-IR -DNetBSD=1
+
+clean:
+ touch V-IR
+ rm V-IR
+ touch \#dummyfile
+ touch dummyfile~
+ rm \#* *~
+ perl -e 'use Cwd; $$_=getcwd(); /(\d+)/; print "#define VERSION \"$$1\"\n"' > version.h
--- UNIX/v-ir.c.orig 2018-12-11 21:46:39.396603384 +0900
+++ UNIX/v-ir.c 2018-12-11 22:11:56.812046318 +0900
@@ -26,6 +26,10 @@
#include <libusb.h> // FreeBSD ではこれだけをインクルードする
#endif
+#if NetBSD
+#include <libusb-1.0/libusb.h> // NetBSD では事前に pkg_add libusb-1.0 する
+#endif
+
#if MINGW32
#include <libusb.h> // MING ではこれだけをインクルードする
#endif
UNIXディレクトリに移動し、上記のMakefile.NetBSDを使ってmakeします。
% make -f Makefile.NetBSD
gcc v-ir.c -I/usr/pkg/include -L/usr/pkg/lib -lusb-1.0 -static -lpthread -o V-IR -DNetBSD=1
%
できあがったV-IRを実行してみましたが、デバイスが認識されませんでした。(dmesgでは認識されている)
% uname -a
NetBSD kalgan.in.nk-home.net 8.0 NetBSD 8.0 (GENERIC) #0: Tue Jul 17 14:59:51 UTC 2018 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC amd64
% dmesg | grep VIR
uhidev2: Fanout_sendai (0x20a0) VIR (0x427e), rev 1.10/1.00, addr 3, iclass 3/0
% ls -l ./V-IR
-rwxr-xr-x 1 aoyama 10 398184 Dec 12 22:28 ./V-IR
% su
Password:
# ./V-IR V
Searching a USB device (VENDOR_ID=16C0H, PRODUCT_ID=05DFH)... not found.
Searching a USB device (VENDOR_ID=20A0H, PRODUCT_ID=0001H)... not found.
Searching a USB device (VENDOR_ID=20A0H, PRODUCT_ID=427EH)... not found.
Please run this command as a root user.
#
NetBSD(OpenBSDも?)では libusb は ugen(4) でないと使えないそうですので、ソースに以下のパッチをあてます。
Index: dev/usb/usb_quirks.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usb_quirks.c,v
retrieving revision 1.86
diff -u -r1.86 usb_quirks.c
--- dev/usb/usb_quirks.c 4 Dec 2016 10:12:35 -0000 1.86
+++ dev/usb/usb_quirks.c 15 Dec 2018 00:36:52 -0000
@@ -69,6 +69,8 @@
{ USB_VENDOR_WELTREND, USB_PRODUCT_WELTREND_HID, ANY, { UQ_HID_IGNORE }},
{ USB_VENDOR_SILABS, USB_PRODUCT_SILABS_EC3, ANY, { UQ_HID_IGNORE }},
{ USB_VENDOR_TI, USB_PRODUCT_TI_MSP430, ANY, { UQ_HID_IGNORE }},
+ { USB_VENDOR_FANOUTSENDAI, USB_PRODUCT_FANOUTSENDAI_VIR,
+ ANY, { UQ_HID_IGNORE }},
{ USB_VENDOR_KYE, USB_PRODUCT_KYE_NICHE, 0x100, { UQ_NO_SET_PROTO}},
{ USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4,
Index: dev/usb/usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.736
diff -u -r1.736 usbdevs
--- dev/usb/usbdevs 30 May 2017 20:13:35 -0000 1.736
+++ dev/usb/usbdevs 15 Dec 2018 00:36:52 -0000
@@ -552,6 +552,7 @@
vendor PLANEX2 0x2019 Planex Communications
vendor ENCORE 0x203d Encore
vendor HAUPPAUGE2 0x2040 Hauppauge Computer Works
+vendor FANOUTSENDAI 0x20a0 Fanout Sendai
vendor PARA 0x20b8 PARA Industrial
vendor TRENDNET 0x20f4 TRENDnet
vendor RTSYS 0x2100 RT Systems
@@ -1710,6 +1711,9 @@
product HAUPPAUGE2 WINTV_NOVAT_7700PC 0x7060 WinTV Nova-T DVB-T
product HAUPPAUGE2 WINTV_NOVAT_7070P 0x7070 WinTV Nova-T DVB-T
+/* Fanout Sendai */
+product FANOUTSENDAI VIR 0x427e VIR-USB IR remote controller
+
/* Hawking Technologies products */
product HAWKING RT2870_1 0x0001 RT2870
product HAWKING RT2870_2 0x0003 RT2870
パッチ適用後 sys/dev/usb ディレクトリで make -f Makefile.usbdevs を実行し、その後カーネルを再構築してください。
パッチをあてたカーネルで起動したところ、今度はデバイスが ugen(4) として認識されました。
% uname -a
NetBSD kalgan.in.nk-home.net 8.0 NetBSD 8.0 (GENERIC) #1: Thu Dec 13 22:39:30 JST 2018 aoyama@kalgan.in.nk-home.net:/usr/src/sys/arch/amd64/compile/GENERIC amd64
% dmesg | grep VIR
ugen0: Fanout_sendai (0x20a0) VIR (0x427e), rev 1.10/1.00, addr 3
%
気をよくしてそのまま制御ソフトを実行してみたら、ちゃんと動作しているようです:-)
% su
Password:
# ./V-IR V (ファームウェアのバージョン表示)
32
# ./V-IR l (事前に手動登録した電源ONコマンドが送信されてTV電源が入りました)
# ./V-IR P
#,01,D9,81,00,7D,1F,1F,1E,5F,1E,1F,1E,5F,1F,1E,1F,5E,1F,1E,C1,5F,C1,1F,C1,5F,C1,1F,C1,5F,C3,1F,C1,5F,C1,1E,C1,5E,C7,1F,C5,5F,C1,1F,C1,60,C1,1F,C3,5F,C1,1F,C7,5F,C3,1F,C1,5F,C1,1E,C5,5F,C1,1F,C5,5E,C1,1F,C1,5F,C3,94,C4,80,FF,7D,1F,1F,C1,5F,C1,1F,C1,5F,C1,1F,C1,5E,C1,1F,C1,5E,C1,1F,C1,5F,C1,1F,C1,5F,C3,1F,C1,5F,C1,1F,C1,5E,C7,1F,C5,5E,C1,1E,C1,5E,C1,20,C3,5F,C1,1F,C7,5F,C3,20,C1,5F,C1,1F,C5,5F,C1,1F,C5,5F,C1,20,C1,5F,C3,94,C6,80,FF,7E,1E,1F,C1,5F,C1,1F,C1,5E,C1,1F,C1,5F,C1,1F,C1,5F,C1,1F,C1,5E,C1,1F,C1,5E,C3,1F,C1,5E,C1,1F,C1,5F,C7,1F,C5,5F,C1,1F,C1,5E,C1,1F,C3,5F,C1,20,C7,5F,C3,1F,C1,5F,C1,20,C5,5E,C1,1F,C5,5F,C1,1F,C1,5E,C3
#
- OS: OpenBSD/amd64 6.4-RELEASE
マザーボード(USBチップ?)によって認識できる機種とできない機種があるようです。 手元のマシンでは、
- Dell Inspiron 530s ... 認識せず
- Dell OptiPlex 740 ... 下記の状態で認識
- Lenovo ThinkPad R61 ... 下記の状態で認識
- Lenovo ThinkPad X61 ... 下記の状態で認識
という結果でした。認識されない機種では、以下のいずれのパターンも認識されませんでした。
- 本体USBコネクタに直接装着した場合
- USBハブにVIR-USBを装着し、そのUSBハブを本体に装着した場合
- USBハブを本体に装着し、そのUSBハブにVIR-USBを装着した場合
これ以降の記載は、Dell OptiPlex 740 での状況です。
USBハブ経由、かつUSBハブ本体装着後にVIR-USBを装着しないと認識されませんでした。 一旦、ugen(4)と認識された後改めてuhid(4)に変わるようです。
(認識せず)
uhub2 at uhub0 port 7 configuration 1 interface 0 "Genesys Logic USB2.0 Hub" rev 2.00/32.98 addr 2
uhub2: device problem, disabling port 2
uhub2 at uhub0 port 8 configuration 1 interface 0 "Genesys Logic USB2.0 Hub" rev 2.00/32.98 addr 2
ugen0 at uhub2 port 2 "vendor 0x16d0 product 0x0753" rev 1.10/1.06 addr 3
ugen0 detached
uhidev2 at uhub2 port 2 configuration 1 interface 0 "Fanout_sendai VIR" rev 1.10/1.00 addr 3
uhidev2: no input interrupt endpoint
libusb は NetBSD と同じく ugen(4) でないと使えないため、NetBSD と同じ方法で対応することにします。
あらかじめ、pkg_add libusb1 しておきます。
次に、デバイスがugen(4)として認識されるようにカーネルソースに以下のパッチをあてます。
Index: dev/usb/usb_quirks.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb_quirks.c,v
retrieving revision 1.75
diff -u -r1.75 usb_quirks.c
--- dev/usb/usb_quirks.c 10 Jul 2018 09:46:18 -0000 1.75
+++ dev/usb/usb_quirks.c 19 Dec 2018 11:54:43 -0000
@@ -126,6 +126,8 @@
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH, ANY, { UQ_BAD_HID }},
+ { USB_VENDOR_FANOUTSENDAI, USB_PRODUCT_FANOUTSENDAI_VIR,
+ ANY, { UQ_BAD_HID }},
{ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD20x2, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_MICROCHIP, USB_PRODUCT_MICROCHIP_USBLCD256x64, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_MECANIQUE, USB_PRODUCT_MECANIQUE_WISPY, ANY, { UQ_BAD_HID }},
Index: dev/usb/usbdevs
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs,v
retrieving revision 1.692
diff -u -r1.692 usbdevs
--- dev/usb/usbdevs 22 Aug 2018 15:30:20 -0000 1.692
+++ dev/usb/usbdevs 19 Dec 2018 11:54:45 -0000
@@ -615,6 +615,7 @@
vendor DLINK 0x2001 D-Link
vendor PLANEX2 0x2019 Planex Communications
vendor ENCORE 0x203d Encore
+vendor FANOUTSENDAI 0x20a0 Fanout Sendai
vendor PARA 0x20b8 PARA Industrial
vendor TRENDNET 0x20f4 TRENDnet
vendor RTSYSTEMS 0x2100 RT Systems
@@ -1760,6 +1761,9 @@
/* Falcom Wireless Communications GmbH products */
product FALCOM TWIST 0x0001 Twist
product FALCOM SAMBA 0x0005 Samba
+
+/* Fanout Sendai */
+product FANOUTSENDAI VIR 0x427e VIR-USB IR remote controller
/* FeiXun Communication products */
product FEIXUN RTL8188CU 0x0090 RTL8188CU
パッチ適用後 sys/dev/usb ディレクトリで make を実行し、その後カーネルを再構築してください。
再構築したカーネルでは、以下の用にデバイスが ugen(4) として認識されます。
ugen0 at uhub2 port 2 "vendor 0x16d0 product 0x0753" rev 1.10/1.06 addr 3
ugen0 detached
ugen0 at uhub2 port 2 "Fanout_sendai VIR" rev 1.10/1.00 addr 3
次にに制御ソフトをコンパイルします。 ファンアウト仙台さんのページからダウンロードした制御ソフトのソースコード (V-IR-src-27.zip)を解凍し、以下のパッチをあてます。
--- /dev/null Wed Dec 19 21:03:13 2018
+++ UNIX/Makefile.OpenBSD Wed Dec 19 21:03:07 2018
@@ -0,0 +1,16 @@
+#
+# Makefile for OpenBSD
+#
+# do pkg_add libusb1 before make
+#
+
+V-IR: v-ir.c
+ cc v-ir.c -I/usr/local/include -L/usr/local/lib -lusb-1.0 -static -lpthread -o V-IR -DOpenBSD=1
+
+clean:
+ touch V-IR
+ rm V-IR
+ touch \#dummyfile
+ touch dummyfile~
+ rm \#* *~
+ perl -e 'use Cwd; $$_=getcwd(); /(\d+)/; print "#define VERSION \"$$1\"\n"' > version.h
--- UNIX/v-ir.c.orig Tue Dec 11 21:46:39 2018
+++ UNIX/v-ir.c Tue Dec 18 21:33:51 2018
@@ -26,6 +26,10 @@
#include <libusb.h> // FreeBSD ではこれだけをインクルードする
#endif
+#if NetBSD || OpenBSD
+#include <libusb-1.0/libusb.h> // NetBSD/OpenBSD では事前に pkg_add libusb-1.0 する
+#endif
+
#if MINGW32
#include <libusb.h> // MING ではこれだけをインクルードする
#endif
UNIXディレクトリに移動し、上記のMakefile.OpenBSDを使ってmakeします。(元ソースがsprintf()を使っているためwarningが出ます)
% make -f Makefile.OpenBSD
cc v-ir.c -I/usr/local/include -L/usr/local/lib -lusb-1.0 -static -lpthread -o V-IR -DOpenBSD=1
/tmp/v-ir-6994d9.o: In function `main':
v-ir.c:(.text+0xfde): warning: sprintf() is often misused, please use snprintf()
%
できあがったバイナリを実行したところ、事前に手動登録したコマンドは送信できましたが、RAMのデータ表示はうまくいきませんでした。
% su
Password:
# ./V-IR V (ファームウェアのバージョン表示)
32
# ./V-IR l (事前に手動登録した電源ONコマンドが送信されてTV電源が入りました)
# ./V-IR P
Control IN error: LIBUSB_ERROR_IO
#,0#
@oshimyja さん: NetBSD インストールと libusb のアドバイスありがとうございました。
Kenji Aoyama / 青山 健治 / Twitter: @ao_kenji
ABSOLUTELY NO WARRANTY