–
This file includes an RDoc hack so that links can be made to open up into a
new frame rather then the current frame.
The "trick" is to append ``"target="_top'' to the URL.
++
Ruby/KATCP
Introduction
Ruby/KATCP is a Ruby extension for communicating via the Karoo Array Telescope Control Protocol (KATCP). More information about KATCP can be found at the CASPER Wiki, including the KATCP specification in PDF format.
Features
-
Provides a base KATCP client supporting the functionality described in the KATCP specification.
-
Provides an extended KATCP client to support the
tcpborphserver2
KATCP server implementation on ROACH boards. -
Automatically provides support for all current and any future KATCP request types through the use of Ruby’s
method_missing
feature. -
Handles all escaping and unescaping of text transferred over KATCP.
-
Provides convenient and flexible ways of converting packed binary data to various numerical formats, including Array and NArray objects.
-
Plays nicely with
irb
, the interactive Ruby shell.
Installation
Ruby/KATCP can be installed via RubyGems:
gem install katcp
Ruby/KATCP was developed using Ruby 1.8.6 and 1.8.7. It has not been tested against Ruby 1.9 (yet).
Documentation
Documentation is available on the Ruby/KATCP Homepage and is also installed locally as part of the gem-based installation. To view the documentation locally, run
gem server
then point your browser to http://localhost:8808/
and navigate to (and follow) the katcp [rdoc] link. You can get more information about RubyGem’s documenation server by running:
gem help server
Example
This example script, listdev.rb
, can be used to list the devices on a given ROACH host…
#!/usr/bin/env ruby
# listdev.rb - list devices on a ROACH
#
# $ listdev.rb roach030111
# XAUI0
# acc_len
# ant_levels
# ctrl
# gbe0
# gbe_ip0
# gbe_port
# [...]
require 'rubygems'
require 'katcp'
# Abort if no hostname is given
raise "\nusage: #{$0} HOSTNAME" unless ARGV[0]
# Create RoachClient object
roach = KATCP::RoachClient.new(ARGV[0])
# Get list of devices via "?listdev" KATCP request.
# Save returned KATCP::Response object in "resp".
resp = roach.listdev
# Extract first "word" of each line except the last
# one, which will be a "!listdev ok" reply line.
devices = resp.lines[0..-2].map {|l| l[1]}
# Output device list
puts devices
Current Limitations
-
Only the client side is implemented.
-
Only TCP communication is supported (i.e. no RS/232 support).
-
KATCP::RoachClient#uploadbof is not yet implemented.