島ぶくろ ネットワーク接続されたプリンタのステータスを取得するプログラムを受けて、mrubyで簡単に実装してみました。
実用性ゼロの動作確認レベルです。
1. mrubyをダウンロードする
$ git clone https://github.com/mruby/mruby.git
2. ビルド設定を編集する
build_config.rb
MRuby::Build.new do |conf|
toolchain :clang # :gcc, :visualcpp
conf.bins = %w(mrbc)
# mruby's Core GEMs
conf.gem 'mrbgems/mruby-bin-mirb'
conf.gem 'mrbgems/mruby-bin-mruby'
conf.gem 'mrbgems/mruby-print'
# user-defined GEMs
conf.gem :git => 'https://github.com/iij/mruby-io.git'
conf.gem :git => 'https://github.com/iij/mruby-mtest.git'
conf.gem :git => 'https://github.com/iij/mruby-socket.git'
conf.gem :git => 'https://github.com/iij/mruby-pack.git'
end
3. ビルドする
$ rake
CC tools/mrbc/mrbc.c -> build/host/tools/mrbc/mrbc.o
CC src/array.c -> build/host/src/array.o
CC src/backtrace.c -> build/host/src/backtrace.o
... 中略 ...
Build summary:
================================================
Config Name: host
Output Directory: build/host
Binaries: mrbc
Included Gems:
mruby-bin-mirb - mirb command
- Binaries: mirb
mruby-bin-mruby - mruby command
- Binaries: mruby
mruby-io
mruby-socket
mruby-pack
================================================
4. mrubyのスクリプトを作成する
sysDescr.rb
sendMsg = [0x30,0x2C,0x02,0x01,0x00,0x04,0x06,0x70,0x75,0x62,0x6C,0x69,0x63,0xA0,0x1F,0x02,
0x04,0x30,0xB1,0xF0,0x32,0x02,0x01,0x00,0x02,0x01,0x00,0x30,0x11,0x30,0x0F,0x06,
0x0B,0x2B,0x06,0x01,0x02,0x01,0x19,0x03,0x02,0x01,0x03,0x01,0x05,0x00].pack("c*")
sock = UDPSocket.open
sock.send(sendMsg, 0, "192.168.0.xx", 161) # set the IP address of your printer
recvMsg = sock.recv(65535)
p recvMsg
sock.close
5. 上記のスクリプトを実行する。
$ cd bin
$ ./mruby sysDescr.rb
"0@\002\001\000\004\006public\2423\002\0040\261\3602\002\001\000\002\001\0000%0#\006\v+\006\001\002\001\031\003\002\001\003\001\004\024EPSON EP-806A Series"
バイナリの解析を省略しているので読みにくいですが、バイト列の最後にプリンター名 "EPSON EP-806A Series" を取得できていることがわかります。