学習リモコンPC-OP-RS1をLinuxで使う
BUFFALO PC-OP-RS1を買ってみた
PC-OP-RS1は玄人志向KURO-RSの姉妹品で中身は同じだが,Windows用のソフトが付いてくるかわりにSDKが付いてない
正直Windows用のソフトよりSDKの方がうれしいのだが,なぜか完成版のソフト付きの方が安い
KURO-RSならLinux用のドライバなんかも付いてるらしいが,なんとかなるやろうということで,購入
とりあえずUbunutu 9.04 (64bit) につないでみたところ問題なく認識された
% dmesg [3794059.200020] usb 6-1: new full speed USB device using uhci_hcd and address 2 [3794059.408711] usb 6-1: configuration #1 chosen from 1 choice % lsusb ・・・ Bus 006 Device 002: ID 0411:00b3 MelCo., Inc. PC-OP-RS1 RemoteStation ・・・ % cat /proc/bus/usb/devices ・・・ T: Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0411 ProdID=00b3 Rev= 4.00 S: Manufacturer=BUFFALO S: Product=BUFFALO RemoteStation PC-OP-RS1 S: SerialNumber=000020b6 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms ・・・
どうやら,FTDIのチップを使ってUSBシリアルデバイスに見せてるようだ
FTDIのドライバなら公式サイトに各プラットフォームのものがあるので,LinuxのみならずMacなどでも使える
というかFTDIのチップはあちこちで使われてるので,マウスとか使ってたら既にドライバが入っていてもおかしくない
実際,ドライバを組み込んで見たところ何の問題もなくデバイスファイルが作成された
% sudo modprobe ftdi_sio vendor=0x0411 product=0x00b3
一般ユーザとしてデバイスファイルを使えないのはちょっと不便なので,パーミッションを変えておく(デバイスファイルの名前は環境によって多少変わるのでヨロシク)
% sudo chmod 666 /dev/ttyUSB0
ということで問題なく使えるっぽい
で,問題のプログラム・・・
SDKがないのでどんなコマンドを送ればいいのか分からない(爆)
ググったところ,スーの道具箱というサイトに詳しく書かれていた
C#のプログラムが公開されているが,C#はキライだ
よくみたら仙石氏がPerlで書いたものも公開されているようだ
単にシリアルポートにコマンドを送るだけなので,Rubyでさらっと書いてみることにする
リモコン送信コマンド発行中にリモコンデータを受信しない状態で終了すると、リモコンデータを送信できなくなる。
その場合、一旦LEDコマンド発行すると送信可能になる。その場合、LEDコマンドの戻り値は 0×59 でLEDは点灯しない。
とのことなので,毎回アクセスLEDを点灯させてます
あと,ruby-serialport使ってるのでgemで突っ込んでください
UbuntuとかDebian系の人はruby-devパッケージがないとgemでエラー吐きます
以下,アホっぽいコードだが見直しやすいということでご容赦頂きたい
require 'rubygems'
require 'serialport'
sp = SerialPort.new("/dev/ttyUSB0", 115200, 8, 1, SerialPort::NONE)
ledBlink = [0x69].pack("C*")
receive = [0x72].pack("C*")
send = [0x74].pack("C*")
chAY = [0x31].pack("C*")
chAB = [0x32].pack("C*")
chBY = [0x33].pack("C*")
chBB = [0x34].pack("C*")
puts "--> 0x69 #LED BLINK"
sp.write(ledBlink)
print "<-- ", sp.read(1).unpack("H*"), "\n"
puts "--> 0x72 #RECEIVE"
sp.write(receive)
print "<-- ", sp.read(1).unpack("H*"), "\n"
print "<-- ", sp.read(1).unpack("H*"), "\n"
data = sp.read(240)
puts data.unpack("H*")
print "<-- ", sp.read(1).unpack("H*"), "\n"
sleep(2)
puts "--> 0x74 #SEND"
sp.write(send)
print "<-- ", sp.read(1).unpack("H*"), "\n"
puts "--> 0x31 #CHANNEL A-Yellow"
sp.write(chAY)
print "<-- ", sp.read(1).unpack("H*"), "\n"
puts "--> DATA"
sp.write(data)
print "<-- ", sp.read(1).unpack("H*"), "\n"
sp.close
そのへんのリモコンの信号を受信して,PC-OP-RS1で送り直すという単純なリレープログラムです
Apple RemoteのMenuボタンだとこんな感じになります
--> 0x69 #LED BLINK <-- 4f --> 0x72 #RECEIVE <-- 59 <-- 53 ffffffffffffffffffffff0f00000000007ee00700f00300f801007ce00700f00300f80100fc00007e00003f00801ff8c00ffcc00f00e00700f00100f8c00ffcc0077ee0077e00001ff8811ff8c10ffc00007e00003f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0ffffffffffffffffffff7f0000c00f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 <-- 45 --> 0x74 #SEND <-- 59 --> 0x31 #CHANNEL A-Yellow <-- 59 --> DATA <-- 45
2件のコメント »
RSS feed for comments on this post. TrackBack URL

大変参考になりました。
コメントありがとうございます!!