ruby-xbee 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/LICENSE +11 -0
- data/README.rdoc +232 -0
- data/Rakefile +38 -0
- data/agpl.txt +661 -0
- data/bin/apicontrol.rb +37 -0
- data/bin/apilisten.rb +14 -0
- data/bin/ruby-xbee.rb +27 -0
- data/bin/xbeeconfigure.rb +263 -0
- data/bin/xbeedio.rb +89 -0
- data/bin/xbeeinfo.rb +110 -0
- data/bin/xbeelisten.rb +114 -0
- data/bin/xbeesend.rb +81 -0
- data/lib/apimode/at_commands.rb +28 -0
- data/lib/apimode/frame/at_command.rb +34 -0
- data/lib/apimode/frame/at_command_response.rb +33 -0
- data/lib/apimode/frame/explicit_addressing_command.rb +7 -0
- data/lib/apimode/frame/explicit_rx_indicator.rb +6 -0
- data/lib/apimode/frame/frame.rb +123 -0
- data/lib/apimode/frame/modem_status.rb +32 -0
- data/lib/apimode/frame/receive_packet.rb +6 -0
- data/lib/apimode/frame/remote_command_request.rb +34 -0
- data/lib/apimode/frame/remote_command_response.rb +22 -0
- data/lib/apimode/frame/transmit_request.rb +7 -0
- data/lib/apimode/frame/transmit_status.rb +6 -0
- data/lib/apimode/xbee_api.rb +608 -0
- data/lib/legacy/command_mode.rb +553 -0
- data/lib/module_config.rb +77 -0
- data/lib/ruby_xbee.rb +134 -0
- data/test/ruby_xbee_test.rb +20 -0
- data/test/test_helper.rb +22 -0
- metadata +110 -0
data/bin/apicontrol.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$: << File.dirname(__FILE__)
|
3
|
+
|
4
|
+
require 'date'
|
5
|
+
require 'ruby-xbee'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
@xbee = XBee::BaseAPIModeInterface.new(@xbee_usbdev_str)
|
9
|
+
|
10
|
+
puts "Testing API now ..."
|
11
|
+
puts "====================================================="
|
12
|
+
puts "Association Indication: 0x%02x" % @xbee.association_indication
|
13
|
+
puts "-----------------------------------------------------"
|
14
|
+
puts "Firmware Rev: 0x%04x" % @xbee.fw_rev
|
15
|
+
puts "-----------------------------------------------------"
|
16
|
+
puts "Hardware Rev: 0x%04x" % @xbee.hw_rev
|
17
|
+
puts "-----------------------------------------------------"
|
18
|
+
puts "Serial Number High: 0x%08x" % @xbee.serial_num_high
|
19
|
+
puts "Serial Number Low: 0x%08x" % @xbee.serial_num_low
|
20
|
+
puts "Serial Number: 0x%016x" % @xbee.serial_num
|
21
|
+
puts "-----------------------------------------------------"
|
22
|
+
puts "Detecting neighbors ..."
|
23
|
+
response = @xbee.neighbors
|
24
|
+
response.each do |r|
|
25
|
+
puts "----------------------"
|
26
|
+
r.each do |key, val|
|
27
|
+
puts case key
|
28
|
+
when :NI
|
29
|
+
"#{key} = '#{val}'"
|
30
|
+
when :STATUS, :DEVICE_TYPE
|
31
|
+
"#{key} = 0x%02x" % val
|
32
|
+
when :SH, :SL
|
33
|
+
"#{key} = 0x%08x" % val
|
34
|
+
else "#{key} = 0x%04x" % val
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/bin/apilisten.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$: << File.dirname(__FILE__)
|
3
|
+
|
4
|
+
require 'date'
|
5
|
+
require 'ruby-xbee'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
@uart_config = XBee::Config::XBeeUARTConfig.new()
|
9
|
+
@xbee = XBee::BaseAPIModeInterface.new(@xbee_usbdev_str, @uart_config, 'API')
|
10
|
+
|
11
|
+
# read XBee output forever
|
12
|
+
while 1
|
13
|
+
@xbee.getresponse true
|
14
|
+
end
|
data/bin/ruby-xbee.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
begin
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'ruby-xbee'
|
5
|
+
rescue LoadError => e
|
6
|
+
load_path_addition = File.dirname(File.dirname(__FILE__)) + "/lib"
|
7
|
+
puts "Falling back to extended load path #{load_path_addition}"
|
8
|
+
$: << load_path_addition
|
9
|
+
require 'ruby_xbee'
|
10
|
+
end
|
11
|
+
|
12
|
+
@xbee_usbdev_str = case ARGV[0]
|
13
|
+
when "cable"
|
14
|
+
"/dev/tty.usbserial-A101KYF6"
|
15
|
+
else
|
16
|
+
"/dev/tty.usbserial-A101KYF6"
|
17
|
+
end
|
18
|
+
|
19
|
+
# default baud - this can be overridden on the command line
|
20
|
+
@xbee_baud = 9600
|
21
|
+
|
22
|
+
# serial framing
|
23
|
+
@data_bits = 8
|
24
|
+
@stop_bits = 1
|
25
|
+
@parity = 0
|
26
|
+
|
27
|
+
puts File.dirname(File.dirname(__FILE__)) + "/lib"
|
@@ -0,0 +1,263 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# == Synopsis
|
4
|
+
# xbeeconfigure.rb - A utility for configuring an XBee using Ruby and the Ruby::XBee class
|
5
|
+
#
|
6
|
+
# :title: xbeeconfigure.rb A utility for configuring an XBee using Ruby and the Ruby::XBee class
|
7
|
+
#
|
8
|
+
# == Usage
|
9
|
+
# === Syntax
|
10
|
+
# ./xbeeconfigure.rb [options]
|
11
|
+
#
|
12
|
+
# Command line help
|
13
|
+
#
|
14
|
+
# ./xbeeconfigure.rb --help
|
15
|
+
# xbeeconfigure.rb [options]
|
16
|
+
# Options:
|
17
|
+
# [--panid new_pan_id] [-p new_pan_id] sets the XBee PAN ID
|
18
|
+
# [--channel new_channel] [-c new_channel] sets the new channel number for XBee RF
|
19
|
+
# [--mysrc new_address] [-M new_address] sets MY 16-bit source address (0-0xffff)
|
20
|
+
# [--nodeid new_node_id] [-n new_node_id] sets the text for the XBee node ID
|
21
|
+
# [--desthigh highaaddress] [-H highaddress] sets the high portion of the destination address
|
22
|
+
# [--destlow low_address] [-L low_address] sets the low portion of the destination address
|
23
|
+
# [--parity [NEOMS]] [-P [NEOMS]] sets new parity, N = 8bit no-parity, E = 8bit even, O = 8bit odd, M = 8bit mark, S = 8bit space
|
24
|
+
# [--newbaud baud_rate] [-B baud_rate] sets a new baud rate in XBee to take effect after configuration is complete
|
25
|
+
# [--dev device] [-d device] use this device to talk to XBee (ie: /dev/tty.usb-791jdas)
|
26
|
+
# [--baud baud_rate] [-b baud_rate] use this baud rate for configuring the device
|
27
|
+
# [--save] [-s] write new configuration to XBee flash when finished; default is: configuration is not flashed
|
28
|
+
# [--help] print this command help message
|
29
|
+
#
|
30
|
+
#
|
31
|
+
# Example usage
|
32
|
+
# ./xbeeconfigure.rb --nodeid BaseStation --panid 01 --mysrc 01 -H0 -L 2 -s
|
33
|
+
#
|
34
|
+
# The command above configures an XBee with a human readable node ID of "BaseStation", a PAN ID of 1, sets the device's MY 16-bit source
|
35
|
+
# address to 1, sets the destination to point to an XBee in a 16-bit addressing mode with a low address of 2 (-L 2) and a high of 0
|
36
|
+
# which determines this is a 16-bit address.) Finally, the -s causes the new configuration to be saved in XBee flash when
|
37
|
+
# the configuration is completed. The "BaseStation" node id is reported as one of the attributes from neighboring nodes.
|
38
|
+
#
|
39
|
+
# Since there are both long and short versions of the same options, an equivalent, shorter command line is:
|
40
|
+
# ./xbeeconfigure.rb -n BaseStation -M 01 -M 01 -H0 -L 2 -s
|
41
|
+
#
|
42
|
+
# See conf/xbeeconfig.rb for configuration defaults
|
43
|
+
#
|
44
|
+
# this code is designed for the following XBee modules:
|
45
|
+
# IEEE® 802.15.4 OEM RF Modules by Digi International
|
46
|
+
# Series 1 XBee and XBee Pro modules
|
47
|
+
#
|
48
|
+
# == Copyright
|
49
|
+
# Copyright (C) 2008-2009 360VL, Inc. and Landon Cox
|
50
|
+
#
|
51
|
+
# == License
|
52
|
+
# This program is free software: you can redistribute it and/or modify
|
53
|
+
# it under the terms of the GNU Affero General Public License version 3 as
|
54
|
+
# published by the Free Software Foundation.
|
55
|
+
#
|
56
|
+
# This program is distributed in the hope that it will be useful,
|
57
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
58
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
59
|
+
# GNU Affero General Public License version 3 for more details.
|
60
|
+
#
|
61
|
+
# You should have received a copy of the GNU Affero General Public License along with this program.
|
62
|
+
# If not, see http://www.gnu.org/licenses/
|
63
|
+
#
|
64
|
+
# == See Also
|
65
|
+
# xbeeinfo.rb, xbeeconfigure.rb, xbeedio.rb, xbeelisten.rb, xbeesend.rb
|
66
|
+
#
|
67
|
+
# == Learn More
|
68
|
+
#
|
69
|
+
# You can learn more about Ruby::XBee and other projects at http://sawdust.see-do.org
|
70
|
+
#
|
71
|
+
# see Digi product manual: "Product Manual v1.xCx - 802.15.4 Protocol"
|
72
|
+
# for details on the operation of XBee series 1 modules.
|
73
|
+
|
74
|
+
$: << File.dirname(__FILE__)
|
75
|
+
|
76
|
+
require 'date'
|
77
|
+
require 'getoptlong'
|
78
|
+
|
79
|
+
require 'ruby-xbee'
|
80
|
+
|
81
|
+
@xbee_config_version = "xbeeconfig 1.0"
|
82
|
+
|
83
|
+
=begin rdoc
|
84
|
+
dump usage info to the console
|
85
|
+
=end
|
86
|
+
def dump_help
|
87
|
+
|
88
|
+
puts "xbeeconfigure.rb [options]"
|
89
|
+
puts "Options:"
|
90
|
+
puts " [--panid new_pan_id] [-p new_pan_id] sets the XBee PAN ID" # set panid
|
91
|
+
puts " [--channel new_channel] [-c new_channel] sets the new channel number for XBee RF" # set channel
|
92
|
+
puts " [--mysrc new_address] [-M new_address] sets MY 16-bit source address (0-0xffff)"
|
93
|
+
puts " [--nodeid new_node_id] [-n new_node_id] sets the text for the XBee node ID" # set nodeid
|
94
|
+
puts " [--desthigh highaddress] [-H highaddress] sets the high portion of the destination address" # set destination high address
|
95
|
+
puts " [--destlow low_address] [-L low_address] sets the low portion of the destination address" # set destination low address
|
96
|
+
puts " [--parity [NEOMS]] [-P [NEOMS]] sets new parity, N = 8bit no-parity, E = 8bit even, O = 8bit odd, M = 8bit mark, S = 8bit space"
|
97
|
+
puts " [--newbaud baud_rate] [-B baud_rate] sets a new baud rate in XBee to take effect after configuration is complete"
|
98
|
+
|
99
|
+
puts " [--dev device] [-d device] use this device to talk to XBee (ie: /dev/tty.usb-791jdas)"
|
100
|
+
puts " [--baud baud_rate] [-b baud_rate] use this baud rate for configuring the device" # override baud
|
101
|
+
puts " [--save] [-s] write new configuration to XBee flash when finished; default is: configuration is not flashed"
|
102
|
+
puts " [--help] print this command help message"
|
103
|
+
|
104
|
+
puts "\nSee conf/xbeeconfig.rb for defaults and edit conf/xbeeconfig.rb to change the defaults used to communicate with the device"
|
105
|
+
puts "\nCopyright (C) 2008-2009 360VL, Inc and Landon Cox"
|
106
|
+
puts "\nThis program comes with ABSOLUTELY NO WARRANTY;"
|
107
|
+
puts "This is free software, and you are welcome to redistribute it"
|
108
|
+
puts "under certain conditions detailed in: GNU Affero General Public License version 3"
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
=begin rdoc
|
113
|
+
configure the command line parameters to accept
|
114
|
+
=end
|
115
|
+
def setup_cli_options
|
116
|
+
|
117
|
+
@options = GetoptLong.new()
|
118
|
+
@options.quiet = true
|
119
|
+
|
120
|
+
@options_array = Array.new
|
121
|
+
|
122
|
+
@options_array << [ "--panid", "-p", GetoptLong::REQUIRED_ARGUMENT ] # set panid
|
123
|
+
@options_array << [ "--nodeid", "-n", GetoptLong::REQUIRED_ARGUMENT ] # set nodeid
|
124
|
+
@options_array << [ "--desthigh", "-H", GetoptLong::REQUIRED_ARGUMENT ] # set destination high address
|
125
|
+
@options_array << [ "--destlow", "-L", GetoptLong::REQUIRED_ARGUMENT ] # set destination low address
|
126
|
+
@options_array << [ "--channel", "-c", GetoptLong::REQUIRED_ARGUMENT ] # set channel
|
127
|
+
@options_array << [ "--parity", "-P", GetoptLong::REQUIRED_ARGUMENT ] # set parity
|
128
|
+
@options_array << [ "--newbaud", "-B", GetoptLong::REQUIRED_ARGUMENT ] # set new baud rate in XBee, will not take effect until exiting command mode or AT command mode timeout
|
129
|
+
@options_array << [ "--mysrc", "-M", GetoptLong::REQUIRED_ARGUMENT ] # set nodeid
|
130
|
+
|
131
|
+
@options_array << [ "--dev", "-d", GetoptLong::REQUIRED_ARGUMENT ] # override serial /dev string
|
132
|
+
@options_array << [ "--baud", "-b", GetoptLong::REQUIRED_ARGUMENT ] # use this baud to configure device
|
133
|
+
@options_array << [ "--save", "-s", GetoptLong::NO_ARGUMENT ] # write new configuration to XBee flash when finished
|
134
|
+
@options_array << [ "--help", "-h", GetoptLong::NO_ARGUMENT ] # help message
|
135
|
+
@options_array << [ "--version", "-v", GetoptLong::NO_ARGUMENT ] # get version of xbeeconfig.rb
|
136
|
+
|
137
|
+
@options.set_options( *@options_array )
|
138
|
+
end
|
139
|
+
|
140
|
+
=begin rdoc
|
141
|
+
process the command line interface options and set the appropriate variables with the cli data
|
142
|
+
=end
|
143
|
+
def process_cli_options
|
144
|
+
|
145
|
+
@options.each do | opt, arg |
|
146
|
+
|
147
|
+
case opt
|
148
|
+
|
149
|
+
when "--panid"
|
150
|
+
@panid = arg
|
151
|
+
|
152
|
+
when "--nodeid"
|
153
|
+
@nodeid = arg
|
154
|
+
|
155
|
+
when "--mysrc"
|
156
|
+
@mysrc = arg
|
157
|
+
|
158
|
+
when "--dev"
|
159
|
+
@xbee_usbdev_str = arg
|
160
|
+
|
161
|
+
when "--baud"
|
162
|
+
@xbee_baud = arg
|
163
|
+
|
164
|
+
when "--newbaud"
|
165
|
+
@new_baud_rate = arg
|
166
|
+
|
167
|
+
when "--desthigh"
|
168
|
+
@dest_high = arg
|
169
|
+
|
170
|
+
when "--destlow"
|
171
|
+
@dest_low = arg
|
172
|
+
|
173
|
+
when "--channel"
|
174
|
+
@channel = arg
|
175
|
+
|
176
|
+
when "--parity"
|
177
|
+
@newparity = arg
|
178
|
+
|
179
|
+
when "--help"
|
180
|
+
dump_help
|
181
|
+
exit 0
|
182
|
+
|
183
|
+
when "--version"
|
184
|
+
puts @xbeeconfig_version
|
185
|
+
exit 0
|
186
|
+
|
187
|
+
when "--save"
|
188
|
+
@save = true
|
189
|
+
|
190
|
+
end # case
|
191
|
+
end # options
|
192
|
+
end
|
193
|
+
|
194
|
+
=begin rdoc
|
195
|
+
after the cli options have been processed, the configuration is executed
|
196
|
+
=end
|
197
|
+
def execute_configuration
|
198
|
+
# start the configuration
|
199
|
+
|
200
|
+
@xbee = XBee.new( @xbee_usbdev_str, @xbee_baud, @data_bits, @stop_bits, @parity )
|
201
|
+
|
202
|
+
# before doing anything else, put XBee into AT command mode
|
203
|
+
|
204
|
+
puts "Attention..."
|
205
|
+
if !@xbee.attention.match("OK")
|
206
|
+
puts "Can't talk to XBee. Please check your connection or configuration: #{res}"
|
207
|
+
exit 1
|
208
|
+
end
|
209
|
+
|
210
|
+
# execute configuration
|
211
|
+
|
212
|
+
if @panid
|
213
|
+
puts "Setting PAN ID"
|
214
|
+
@xbee.pan_id!(@panid)
|
215
|
+
puts "PAN id: #{@xbee.pan_id}"
|
216
|
+
end
|
217
|
+
|
218
|
+
if @mysrc
|
219
|
+
puts "Setting MY 16-bit source address"
|
220
|
+
@xbee.my_src_address!( @mysrc.upcase )
|
221
|
+
end
|
222
|
+
|
223
|
+
if @nodeid
|
224
|
+
puts "Setting Node ID"
|
225
|
+
@xbee.node_id!(@nodeid)
|
226
|
+
end
|
227
|
+
|
228
|
+
if @dest_high && @dest_low
|
229
|
+
puts "Setting destination address"
|
230
|
+
@xbee.destination_high!(@dest_high)
|
231
|
+
@xbee.destination_low!(@dest_low)
|
232
|
+
end
|
233
|
+
|
234
|
+
if @channel
|
235
|
+
puts "Setting channel"
|
236
|
+
@xbee.channel!(@channel)
|
237
|
+
puts "Channel: #{@xbee.channel}"
|
238
|
+
end
|
239
|
+
|
240
|
+
if @new_baud_rate
|
241
|
+
puts "Setting new baud rate"
|
242
|
+
@xbee.baud!(new_baud_rate)
|
243
|
+
end
|
244
|
+
|
245
|
+
if @newparity
|
246
|
+
puts "Setting new parity"
|
247
|
+
@xbee.parity!( @newparity.upcase.to_sym )
|
248
|
+
end
|
249
|
+
|
250
|
+
if @save
|
251
|
+
puts "Saving configuration to XBee flash"
|
252
|
+
@xbee.save!
|
253
|
+
end
|
254
|
+
|
255
|
+
puts "Exiting AT command mode"
|
256
|
+
@xbee.exit_command_mode
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
setup_cli_options
|
261
|
+
process_cli_options
|
262
|
+
execute_configuration
|
263
|
+
|
data/bin/xbeedio.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
# xbeedio.rb - A Ruby utility for reading DIO port configuration and sample data
|
4
|
+
#
|
5
|
+
# :title: A Ruby utility for configuring and manipulating XBee DIO ports
|
6
|
+
# == Usage
|
7
|
+
# xbeedio.rb
|
8
|
+
#
|
9
|
+
# See conf/xbeeconfig.rb for configuration defaults
|
10
|
+
#
|
11
|
+
# Example output from xbeedio.rb
|
12
|
+
# $ ./xbeedio.rb
|
13
|
+
# Attention: OK
|
14
|
+
# Port 0: Disabled
|
15
|
+
# Port 1: DI
|
16
|
+
# Port 2: Disabled
|
17
|
+
# Port 3: Disabled
|
18
|
+
# Port 4: Disabled
|
19
|
+
# Port 5: Associated_Indicator
|
20
|
+
# Port 6: Disabled
|
21
|
+
# Port 7: CTS
|
22
|
+
# Port 8: Disabled
|
23
|
+
# DIO inputs:
|
24
|
+
# Number of Samples: 1
|
25
|
+
# Channel mask: 002
|
26
|
+
# DIO data: 002
|
27
|
+
#
|
28
|
+
# this code is designed for the following XBee modules:
|
29
|
+
# IEEE® 802.15.4 OEM RF Modules by Digi International
|
30
|
+
# Series 1 XBee and XBee Pro modules
|
31
|
+
#
|
32
|
+
# == Copyright
|
33
|
+
#
|
34
|
+
# Copyright (C) 2008-2009 360VL, Inc. and Landon Cox
|
35
|
+
#
|
36
|
+
# == License
|
37
|
+
# This program is free software: you can redistribute it and/or modify
|
38
|
+
# it under the terms of the GNU Affero General Public License version 3 as
|
39
|
+
# published by the Free Software Foundation.
|
40
|
+
#
|
41
|
+
# This program is distributed in the hope that it will be useful,
|
42
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
43
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
44
|
+
# GNU Affero General Public License version 3 for more details.
|
45
|
+
#
|
46
|
+
# You should have received a copy of the GNU Affero General Public License along with this program.
|
47
|
+
# If not, see http://www.gnu.org/licenses/
|
48
|
+
#
|
49
|
+
# == See Also
|
50
|
+
# xbeeinfo.rb, xbeeconfigure.rb, xbeedio.rb, xbeelisten.rb, xbeesend.rb
|
51
|
+
|
52
|
+
# == Learn More
|
53
|
+
# You can learn more about Ruby::XBee and other projects at http://sawdust.see-do.org
|
54
|
+
#
|
55
|
+
# see Digi product manual: "Product Manual v1.xCx - 802.15.4 Protocol"
|
56
|
+
# for details on the operation of XBee series 1 modules.
|
57
|
+
|
58
|
+
$: << File.dirname(__FILE__)
|
59
|
+
|
60
|
+
require 'date'
|
61
|
+
require 'ruby-xbee'
|
62
|
+
require 'pp'
|
63
|
+
|
64
|
+
@xbee = XBee.new( @xbee_usbdev_str, @xbee_baud, @data_bits, @stop_bits, @parity )
|
65
|
+
|
66
|
+
puts "Attention: #{@xbee.attention}"
|
67
|
+
|
68
|
+
0.upto(8) do | num |
|
69
|
+
portsym = "D#{num}".to_sym
|
70
|
+
puts "Port #{num}: #{@xbee.dio( portsym )}"
|
71
|
+
end
|
72
|
+
|
73
|
+
puts "DIO inputs:"
|
74
|
+
results = @xbee.io_input
|
75
|
+
if ( !results.nil? && results[:ERROR].nil? )
|
76
|
+
puts "Number of Samples: #{results[:NUM]}"
|
77
|
+
puts "Channel mask: #{results[:CM]}"
|
78
|
+
puts "DIO data: #{results[:DIO]}"
|
79
|
+
|
80
|
+
# up to 6 lines (ADC0-ADC5) of ADC could be present if all enabled
|
81
|
+
0.upto(5) do | adc_channel |
|
82
|
+
adcsym = "ADC#{adc_channel}".to_sym
|
83
|
+
if ( !results[adcsym].nil? )
|
84
|
+
puts "ADC#{adc_channel} data: #{results[adcsym]}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
else
|
88
|
+
puts "No DIO input data to report"
|
89
|
+
end
|
data/bin/xbeeinfo.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/usr/bin/env ruby -rubygems
|
2
|
+
# == Synopsis
|
3
|
+
# xbeeinfo.rb - A Ruby utility for extracting XBee setup information using xbee ruby class (Ruby::XBee)
|
4
|
+
#
|
5
|
+
# :title: A Ruby utility for extracting XBee setup information using xbee ruby class (Ruby::XBee)
|
6
|
+
# == Usage
|
7
|
+
# ./xbeeinfo.rb
|
8
|
+
#
|
9
|
+
# example output from xbeeinfo:
|
10
|
+
# Attention: OK
|
11
|
+
# Firmware: 10CD
|
12
|
+
# Hardware: 180B
|
13
|
+
# Baud: 9600
|
14
|
+
# Parity: None
|
15
|
+
# Neighbors:
|
16
|
+
# [{:SL=>"4008A642", :DB=>"-56", :NI=>" ", :MY=>"0", :SH=>"13A200"},
|
17
|
+
# {:SL=>"4008A697", :DB=>"-75", :NI=>" ", :MY=>"0", :SH=>"13A200"},
|
18
|
+
# {:SL=>"40085AD5", :DB=>"-64", :NI=>" ", :MY=>"0", :SH=>"13A200"}]
|
19
|
+
# Node ID: BaseStation
|
20
|
+
# Channel: C
|
21
|
+
# PAN ID: 1
|
22
|
+
# MY: 1
|
23
|
+
# SH: 13A200
|
24
|
+
# SL: 4008A64E
|
25
|
+
# DH: 0
|
26
|
+
# DL: 2
|
27
|
+
# Last received signal strength (dBm): -36
|
28
|
+
# Port 0: Disabled
|
29
|
+
# Port 1: DI
|
30
|
+
# Port 2: Disabled
|
31
|
+
# Port 3: Disabled
|
32
|
+
# Port 4: Disabled
|
33
|
+
# Port 5: Associated_Indicator
|
34
|
+
# Port 6: Disabled
|
35
|
+
# Port 7: CTS
|
36
|
+
# Port 8: Disabled
|
37
|
+
#
|
38
|
+
# See conf/xbeeconfig.rb for configuration defaults
|
39
|
+
#
|
40
|
+
# this code is designed for the following XBee modules:
|
41
|
+
# IEEE® 802.15.4 OEM RF Modules by Digi International
|
42
|
+
# Series 1 XBee and XBee Pro modules
|
43
|
+
#
|
44
|
+
# == Copyright
|
45
|
+
# Copyright (C) 2008-2009 360VL, Inc. and Landon Cox
|
46
|
+
#
|
47
|
+
# == License
|
48
|
+
#
|
49
|
+
# This program is free software: you can redistribute it and/or modify
|
50
|
+
# it under the terms of the GNU Affero General Public License version 3 as
|
51
|
+
# published by the Free Software Foundation.
|
52
|
+
#
|
53
|
+
# This program is distributed in the hope that it will be useful,
|
54
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
55
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
56
|
+
# GNU Affero General Public License version 3 for more details.
|
57
|
+
#
|
58
|
+
# You should have received a copy of the GNU Affero General Public License along with this program.
|
59
|
+
# If not, see http://www.gnu.org/licenses/
|
60
|
+
#
|
61
|
+
# == See Also
|
62
|
+
# xbeeinfo.rb, xbeeconfigure.rb, xbeedio.rb, xbeelisten.rb, xbeesend.rb
|
63
|
+
#
|
64
|
+
# == Learn more
|
65
|
+
# You can learn more about Ruby::XBee and other projects at http://sawdust.see-do.org
|
66
|
+
#
|
67
|
+
# see Digi product manual: "Product Manual v1.xCx - 802.15.4 Protocol"
|
68
|
+
# for details on the operation of XBee series 1 modules.
|
69
|
+
|
70
|
+
|
71
|
+
$: << File.dirname(__FILE__)
|
72
|
+
|
73
|
+
require 'date'
|
74
|
+
require 'ruby-xbee'
|
75
|
+
|
76
|
+
STDIN.sync = 1
|
77
|
+
STDOUT.sync = 1
|
78
|
+
$stdin.sync = true
|
79
|
+
$stdout.sync = true
|
80
|
+
|
81
|
+
require 'pp'
|
82
|
+
|
83
|
+
@xbee = XBee.new( @xbee_usbdev_str, @xbee_baud, @data_bits, @stop_bits, @parity )
|
84
|
+
|
85
|
+
puts "Attention: #{@xbee.attention}"
|
86
|
+
puts "Firmware: #{@xbee.fw_rev}"
|
87
|
+
puts "Hardware: #{@xbee.hw_rev}"
|
88
|
+
|
89
|
+
puts "Baud: #{@xbee.baud}"
|
90
|
+
puts "Parity: #{@xbee.parity}"
|
91
|
+
|
92
|
+
puts "Neighbors:"
|
93
|
+
pp @xbee.neighbors
|
94
|
+
|
95
|
+
puts "Node ID: #{@xbee.node_id}"
|
96
|
+
puts "Channel: #{@xbee.channel}"
|
97
|
+
puts "PAN ID: #{@xbee.pan_id}"
|
98
|
+
puts "MY: #{@xbee.my_src_address}"
|
99
|
+
puts "SH: #{@xbee.serial_num_high}"
|
100
|
+
puts "SL: #{@xbee.serial_num_low}"
|
101
|
+
puts "DH: #{@xbee.destination_high}"
|
102
|
+
puts "DL: #{@xbee.destination_low}"
|
103
|
+
puts "Last received signal strength (dBm): #{@xbee.received_signal_strength}"
|
104
|
+
|
105
|
+
0.upto(8) do | num |
|
106
|
+
portsym = "D#{num}".to_sym
|
107
|
+
puts "Port #{num}: #{@xbee.dio( portsym )}"
|
108
|
+
end
|
109
|
+
|
110
|
+
|
data/bin/xbeelisten.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# == Synposis
|
3
|
+
# xbeelisten.rb - A ruby utility for listening to data output from an XBee
|
4
|
+
#
|
5
|
+
# :title: xbeelisten.rb - A ruby utility for listening to data output from an XBee
|
6
|
+
#
|
7
|
+
# == Copyright
|
8
|
+
# Copyright (C) 2008-2009 360VL, Inc. and Landon Cox
|
9
|
+
#
|
10
|
+
# == License
|
11
|
+
# This program is free software: you can redistribute it and/or modify
|
12
|
+
# it under the terms of the GNU Affero General Public License version 3 as
|
13
|
+
# published by the Free Software Foundation.
|
14
|
+
#
|
15
|
+
# This program is distributed in the hope that it will be useful,
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
18
|
+
# GNU Affero General Public License version 3 for more details.
|
19
|
+
#
|
20
|
+
# You should have received a copy of the GNU Affero General Public License along with this program.
|
21
|
+
# If not, see http://www.gnu.org/licenses/
|
22
|
+
#
|
23
|
+
# You can learn more about ruby for XBee and other projects at http://sawdust.see-do.org
|
24
|
+
#
|
25
|
+
# == Usage
|
26
|
+
# ./xbeelisten.rb
|
27
|
+
#
|
28
|
+
# Example output from xbeelisten...this example is an XBee listening to
|
29
|
+
# a Sparkfun USB Weather board which is transmitting data through a 2nd
|
30
|
+
# XBee:
|
31
|
+
# cooper:ruby-xbee lcox$ ./xbeelisten.rb
|
32
|
+
# #10.75,069.47,020.9,069.62,079038,612,050580$
|
33
|
+
# #10.22,070.46,021.5,070.70,078998,613,052232$
|
34
|
+
# #10.22,070.44,021.6,070.88,078993,613,052233$
|
35
|
+
#
|
36
|
+
# See conf/xbeeconfig.rb for configuration defaults
|
37
|
+
#
|
38
|
+
# == See Also
|
39
|
+
# xbeeinfo.rb, xbeeconfigure.rb, xbeedio.rb, xbeelisten.rb, xbeesend.rb
|
40
|
+
#
|
41
|
+
# == Learn more
|
42
|
+
# You can learn more about Ruby::XBee and other projects at http://sawdust.see-do.org
|
43
|
+
#
|
44
|
+
# see Digi product manual: "Product Manual v1.xCx - 802.15.4 Protocol"
|
45
|
+
# for details on the operation of XBee series 1 modules.
|
46
|
+
#
|
47
|
+
# this code is for the following XBee modules:
|
48
|
+
# IEEE® 802.15.4 OEM RF Modules by Digi International
|
49
|
+
#
|
50
|
+
|
51
|
+
$: << File.dirname(__FILE__)
|
52
|
+
|
53
|
+
require 'date'
|
54
|
+
require 'getoptlong'
|
55
|
+
|
56
|
+
require 'ruby-xbee'
|
57
|
+
|
58
|
+
def dump_help
|
59
|
+
|
60
|
+
puts "xbeelisten.rb [options]"
|
61
|
+
puts "Options:"
|
62
|
+
|
63
|
+
puts " [--dev device] [-d device] use this device to talk to XBee (ie: /dev/tty.usb-791jdas)"
|
64
|
+
puts " [--baud new_baud_rate] [-b new_baud_rate] sets the baud rate with which to talk to the device" # override baud
|
65
|
+
puts " [--help] print this command help message"
|
66
|
+
|
67
|
+
puts "\nSee conf/config.rb for defaults and edit conf/config.rb to change the defaults used to communicate with the device"
|
68
|
+
puts "License: GNU Affero General Public License version 3"
|
69
|
+
puts "Copyright (C) 2008-2009 360VL, Inc"
|
70
|
+
puts "Copyright (C) 2008-2009 Landon Cox"
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
options = GetoptLong.new()
|
75
|
+
options.quiet = true
|
76
|
+
|
77
|
+
options_array = Array.new
|
78
|
+
|
79
|
+
options_array << [ "--dev", "-d", GetoptLong::REQUIRED_ARGUMENT ] # override serial /dev string
|
80
|
+
options_array << [ "--baud", "-b", GetoptLong::REQUIRED_ARGUMENT ] # override baud
|
81
|
+
options_array << [ "--help", "-h", GetoptLong::NO_ARGUMENT ] # write new configuration to XBee flash
|
82
|
+
|
83
|
+
options.set_options( *options_array )
|
84
|
+
|
85
|
+
options.each do | opt, arg |
|
86
|
+
|
87
|
+
case opt
|
88
|
+
|
89
|
+
when "--dev"
|
90
|
+
@xbee_usbdev_str = arg
|
91
|
+
|
92
|
+
when "--baud"
|
93
|
+
@xbee_baud = arg
|
94
|
+
|
95
|
+
when "--help"
|
96
|
+
dump_help
|
97
|
+
exit 0
|
98
|
+
|
99
|
+
when "--save"
|
100
|
+
@save = true
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
# start a connection to the XBee
|
107
|
+
@xbee = XBee.new( @xbee_usbdev_str, @xbee_baud, @data_bits, @stop_bits, @parity )
|
108
|
+
|
109
|
+
# read XBee output forever
|
110
|
+
while( 1 )
|
111
|
+
@xbee.getresponse true
|
112
|
+
end
|
113
|
+
|
114
|
+
|