7月
17
2009
2

学習リモコン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
Written by h2 in: PC | タグ:

TheBuckmaker WordPress Themes Webhosting, MP3, AAC & Co