motorcontrolboard 0.0.1 → 0.0.2
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.
data/lib/motorcontrolboard.rb
CHANGED
@@ -220,7 +220,7 @@ class MotorControlBoard
|
|
220
220
|
readBytes = []
|
221
221
|
begin
|
222
222
|
Timeout::timeout(1) do
|
223
|
-
len.times {readBytes << @
|
223
|
+
len.times {readBytes << @sp.getbyte}
|
224
224
|
readBytes.reverse!
|
225
225
|
|
226
226
|
@data.select{|data| data['valid']==1}.each do |row| #do we need to revert this??
|
@@ -236,6 +236,7 @@ class MotorControlBoard
|
|
236
236
|
rescue
|
237
237
|
puts 'Timeout to read with mask ' + mask
|
238
238
|
puts 'Read ' + readBytes.length.to_s + '/' + len.to_s + ' bytes'
|
239
|
+
puts 'READ:' + readBytes.to_s
|
239
240
|
end
|
240
241
|
return result
|
241
242
|
end
|
@@ -35,7 +35,6 @@ class MotorControlBoard
|
|
35
35
|
parity = SerialPort::NONE
|
36
36
|
begin
|
37
37
|
@sp = SerialPort.new(@port, @baud_rate, data_bits, stop_bits, parity)
|
38
|
-
@spr = SerialPort.new(@port, @baud_rate, data_bits, stop_bits, parity)
|
39
38
|
@open = true
|
40
39
|
|
41
40
|
rescue
|
@@ -56,7 +55,6 @@ class MotorControlBoard
|
|
56
55
|
if @open
|
57
56
|
@open = false
|
58
57
|
@sp.close
|
59
|
-
@spr.close
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
@@ -88,19 +86,6 @@ class MotorControlBoard
|
|
88
86
|
string.each_char do |char|
|
89
87
|
sendC(char)
|
90
88
|
end
|
91
|
-
# puts 'sent: ' + string
|
92
|
-
# puts 'waiting for return'
|
93
|
-
# rec = ''
|
94
|
-
# string.length.times {rec << @sp.getc}
|
95
|
-
# puts 'received: ' + rec
|
96
|
-
# match = (string.eql? rec.force_encoding('ASCII-8BIT'))
|
97
|
-
# puts 'equal: ' + match.to_s
|
98
|
-
# if !match
|
99
|
-
# string.length.times.with_index do |i|
|
100
|
-
# puts string[i].ord + ' ' + rec[i].force_encoding('ASCII-8BIT').ord + ' ' + (string[i].encode('ASCII-8BIT') == rec[i].force_encoding('ASCII-8BIT')).to_s
|
101
|
-
# end
|
102
|
-
# end
|
103
|
-
|
104
89
|
end
|
105
90
|
|
106
91
|
def startByte()
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MotorControlBoard do
|
4
|
+
before :each do
|
5
|
+
@m = MotorControlBoard.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#new" do
|
9
|
+
it "takes 0..2 parameters and returns a MotorControlBoard object" do
|
10
|
+
@m.should be_an_instance_of MotorControlBoard
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#dataMask" do
|
15
|
+
it "should return the valid bit as binary mask string" do
|
16
|
+
@m.dataMask.should eql "0b"+'0'*(@m.getMaxPos+1)
|
17
|
+
@m.data[1]['valid']='1'
|
18
|
+
@m.dataMask.should eql "0b"+'0'*(@m.getMaxPos-1)+'10'
|
19
|
+
@m.data[0]['valid']='1'
|
20
|
+
@m.dataMask.should eql "0b"+'0'*(@m.getMaxPos-1)+'11'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#maskToPos" do
|
25
|
+
it "should extract positions with 1 in the mask" do
|
26
|
+
@m.maskToPos('0b0000').should eql []
|
27
|
+
@m.maskToPos('0b0000').should_not eql [0]
|
28
|
+
@m.maskToPos('0b0001').should eql [0]
|
29
|
+
@m.maskToPos('0b0010').should eql [1]
|
30
|
+
@m.maskToPos('0b0011').should eql [0, 1]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#invalidateData" do
|
35
|
+
it "should reset the valid bit" do
|
36
|
+
@m.data[0]['valid']='1'
|
37
|
+
@m.data[(@m.getMaxPos())]['valid']='1'
|
38
|
+
@m.data[12]['valid']='1'
|
39
|
+
@m.data[24]['valid']='1'
|
40
|
+
@m.invalidateData
|
41
|
+
@m.dataMask.should eql "0b"+'0'*(@m.getMaxPos+1)
|
42
|
+
@m.data[0]['valid']='1'
|
43
|
+
@m.data[1]['valid']='1'
|
44
|
+
@m.data[2]['valid']='1'
|
45
|
+
@m.data[3]['valid']='1'
|
46
|
+
@m.invalidateData
|
47
|
+
@m.dataMask.should eql "0b"+'0'*(@m.getMaxPos+1)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#validateData" do
|
52
|
+
it "should reset the valid bit" do
|
53
|
+
@m.data[0]['valid']='1'
|
54
|
+
@m.data[(@m.getMaxPos())]['valid']='1'
|
55
|
+
@m.data[12]['valid']='1'
|
56
|
+
@m.data[24]['valid']='1'
|
57
|
+
@m.validateData
|
58
|
+
@m.dataMask.should eql "0b"+'1'*(@m.getMaxPos+1)
|
59
|
+
@m.data[0]['valid']='1'
|
60
|
+
@m.data[1]['valid']='1'
|
61
|
+
@m.data[2]['valid']='1'
|
62
|
+
@m.data[3]['valid']='1'
|
63
|
+
@m.validateData
|
64
|
+
@m.dataMask.should eql "0b"+'1'*(@m.getMaxPos+1)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#maskToValid" do
|
69
|
+
it "should transform a mask into valid bits" do
|
70
|
+
[0,1].repeated_permutation(4).each do |mask|
|
71
|
+
mask = '0b' +'0'*(@m.getMaxPos-3) + mask.join
|
72
|
+
@m.invalidateData
|
73
|
+
@m.maskToValid(mask)
|
74
|
+
@m.dataMask.should eql mask
|
75
|
+
end
|
76
|
+
[0,1].repeated_permutation(4).each do |mask|
|
77
|
+
mask = '0b'+ mask.join + '0'*(@m.getMaxPos-3)
|
78
|
+
@m.invalidateData
|
79
|
+
@m.maskToValid(mask)
|
80
|
+
@m.dataMask.should eql mask
|
81
|
+
end
|
82
|
+
[0,1].repeated_permutation(4).each do |mask|
|
83
|
+
mask = '0b' +'0'*11+ mask.join+'0'*(@m.getMaxPos-11-3)
|
84
|
+
@m.invalidateData
|
85
|
+
@m.maskToValid(mask)
|
86
|
+
@m.dataMask.should eql mask
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#maskFromNames" do
|
92
|
+
it "should create a mask according to the names passed as parameter" do
|
93
|
+
@m.maskFromNames().should eql "0b"+'0'*(@m.getMaxPos+1)
|
94
|
+
@m.maskFromNames(:ctrl_kp).should eql "0b"+'0'*24+'1'
|
95
|
+
@m.maskFromNames(:ctrl_ki).should eql "0b"+'0'*23+'10'
|
96
|
+
@m.maskFromNames(:ctrl_kp, :ctrl_ki).should eql "0b"+'0'*23+'11'
|
97
|
+
@m.maskFromNames(:board_id).should eql "0b"+'1'+'0'*24
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#positionFromName" do
|
102
|
+
it "return the position of the given name" do
|
103
|
+
@m.positionFromName(:ctrl_kp).should eql 0
|
104
|
+
@m.positionFromName(:ctrl_ki).should eql 1
|
105
|
+
@m.positionFromName(:board_id).should eql 24
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motorcontrolboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: serialport
|
@@ -44,6 +44,8 @@ files:
|
|
44
44
|
- lib/motorcontrolboard/mcb_data.rb
|
45
45
|
- lib/motorcontrolboard/version.rb
|
46
46
|
- motorcontrolboard.gemspec
|
47
|
+
- spec/motorcontrolboard_spec.rb
|
48
|
+
- spec/spec_helper.rb
|
47
49
|
homepage: http://irawiki.disco.unimib.it/irawiki/index.php/INFIND2011/12_Motor_control_board
|
48
50
|
licenses: []
|
49
51
|
post_install_message:
|
@@ -68,4 +70,6 @@ rubygems_version: 1.8.24
|
|
68
70
|
signing_key:
|
69
71
|
specification_version: 3
|
70
72
|
summary: ''
|
71
|
-
test_files:
|
73
|
+
test_files:
|
74
|
+
- spec/motorcontrolboard_spec.rb
|
75
|
+
- spec/spec_helper.rb
|