Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 43 additions & 6 deletions lib/sphero.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
require 'serialport'
$RUBY_SPHERO_RS232 = ENV['RUBY_SPHERO_RS232']

if $RUBY_SPHERO_RS232
require 'rs232'
else
require 'serialport'
end

require 'sphero/request'
require 'sphero/response'
require 'thread'
Expand All @@ -7,7 +14,21 @@ class Sphero
VERSION = '1.0.0'

def initialize dev
@sp = SerialPort.new dev, 115200, 8, 1, SerialPort::NONE

if $RUBY_SPHERO_RS232
params = Hash.new
params[:baudrate] = 115200
params[:bytesize] = 8
params[:stopbits] = RS232::DCB::ONESTOPBIT
params[:parity] = RS232::DCB::NOPARITY

@sp = RS232.new dev, params
@sp.report = false
else
@sp = SerialPort.new dev, 115200, 8, 1, SerialPort::NONE
end


@dev = 0x00
@seq = 0x00
@lock = Mutex.new
Expand Down Expand Up @@ -93,19 +114,35 @@ def write packet
body = nil

@lock.synchronize do

write_len = 6 + packet.dlen
format = "C#{write_len}"

@sp.write packet.to_str
@seq += 1

header = @sp.read(5).unpack 'C5'
body = @sp.read header.last

if $RUBY_SPHERO_RS232
response = @sp.read
count = @sp.count.read_uint32

format = "C#{count}"
response = response.unpack(format)

header = response[0..4]
body = response[5..-1].join
else
header = @sp.read(5).unpack 'C5'
body = @sp.read header.last
end

end

response = packet.response header, body

if response.success?
response
else
raise response
raise "Response failed"
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/sphero/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class Request
def initialize seq, data = []
@seq = seq
@data = data
@did = 0x00
@did = 0x00 # virtual device id for core
end

def header
Expand Down Expand Up @@ -52,7 +52,7 @@ def dlen
class Sphero < Request
def initialize seq, data = []
super
@did = 0x02
@did = 0x02 # virtual device id for sphero
end
end

Expand Down