LibXML for Ruby
LibXML is a communications layer for the Illuminato X Machina and the Ruby programming language. It splits communication into two parts:
- Adapters hardware compatibility layers
- Interfaces software behavior models
If neither is specified to LibIXM.new, the adapter SFBProg and
interface Simple will be assumed.
Adapters
Currently, the only adapter available is SFBProg.
SFBProg Adapter
The SFBProg adapter is a wrapper around the binary sfbprog or sfbprog.exe
that ships with the Illuminato X Machina IDE. The adapter assumes sfbprog is
installed in the PATH, but the binary path can be specified easily:
ixm = LibIXM.new(
:sfbprog_path => '/usr/bin/sfbprog', # path for sfbprog or sfbprog.exe
:sfbprog_args => '', # additional arguments
:sfbprog_device => '/dev/ttyUSB0', # device for serial-over-usb
:sfbprog_sketch => 'mysketch.hex', # sketch
)
:sfbprog_path and :sfbprog_sketch are most likely to be customized in your
particular implementation. :sfbprog_sketch is the packet_echo.hex sketch
by default. The normal newest-timestamp-propigates rules apply, but setting
:sfbprog_sketch to the correct sketch is a reasonable safety measure to
ensure you don't wipe your IXM.
Interfaces
Currently, the only interface for LibIXM is Simple.
Simple Interface
The Simple interface provides a reflex mechanism similar to the IXM's native
Body.reflex call.
ixm.attach_reflex( /respondtome/ ) do |packet|
puts "Hey! I found a respondstome in '#{packet}'"
end
This uses Ruby regex instead of first character comparison. As documented in
examples/yodel_with_echo_packet.rb a script should wait for a given response,
or implement a simple timeout. The SFBProg adapter uses a thread to read
incoming packets, so scripts need to provide an appropriate time for task
completion.
More Information
The IXM and this library are discussed at: