Class: XBeeRuby::XBee

Inherits:
Object
  • Object
show all
Defined in:
lib/xbee-ruby/xbee.rb

Instance Method Summary collapse

Constructor Details

#initialize(port: '/dev/ttyUSB0', rate: 9600, serial: nil) ⇒ XBee

Either specify the port and serial parameters

xbee = XBeeRuby::Xbee.new port: '/dev/ttyUSB0', rate: 9600

or pass in a SerialPort like object

xbee = XBeeRuby::XBee.new serial: some_serial_mockup_for_testing


25
26
27
28
29
30
31
# File 'lib/xbee-ruby/xbee.rb', line 25

def initialize port: '/dev/ttyUSB0', rate: 9600, serial: nil
	@port = port
	@rate = rate
	@serial = serial
	@connected = false
	@logger = nil
end

Instance Method Details

#closeObject



41
42
43
44
# File 'lib/xbee-ruby/xbee.rb', line 41

def close
	@serial.close if @serial
	@connected = false
end

#connected?Boolean Also known as: open?

Returns:

  • (Boolean)


46
47
48
# File 'lib/xbee-ruby/xbee.rb', line 46

def connected?
	@connected
end

#logObject



80
81
82
# File 'lib/xbee-ruby/xbee.rb', line 80

def log
	@logger.call yield if @logger
end

#logger=(logger) ⇒ Object



76
77
78
# File 'lib/xbee-ruby/xbee.rb', line 76

def logger= logger
	@logger = logger
end

#openObject



33
34
35
36
37
38
39
# File 'lib/xbee-ruby/xbee.rb', line 33

def open
	@serial ||= SerialPort.new @port, @rate
	@serial_input = Enumerator.new { |y| loop do
		y.yield @serial.readbyte
	end }
	@connected = true
end

#read_packetObject



62
63
64
65
66
# File 'lib/xbee-ruby/xbee.rb', line 62

def read_packet
	Packet.from_byte_enum(@serial_input).tap do |packet|
		log { "Packet received: #{packet.bytes.map { |b| b.to_s(16) }.join(',')}" }
	end
end

#read_responseObject



68
69
70
# File 'lib/xbee-ruby/xbee.rb', line 68

def read_response
	Response.from_packet read_packet
end

#serial=(io) ⇒ Object



72
73
74
# File 'lib/xbee-ruby/xbee.rb', line 72

def serial= io
	@serial = io
end

#write_packet(packet) ⇒ Object



52
53
54
55
# File 'lib/xbee-ruby/xbee.rb', line 52

def write_packet packet
	@serial.write packet.bytes_escaped.pack('C*').force_encoding('ascii')
	@serial.flush
end

#write_request(request) ⇒ Object



57
58
59
60
# File 'lib/xbee-ruby/xbee.rb', line 57

def write_request request
	write_packet request.packet
	log { "Packet sent: #{request.packet.bytes.map { |b| b.to_s(16) }.join(',')}" }
end