motorcontrolboard 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -220,7 +220,7 @@ class MotorControlBoard
220
220
  readBytes = []
221
221
  begin
222
222
  Timeout::timeout(1) do
223
- len.times {readBytes << @spr.getc}
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()
@@ -1,3 +1,3 @@
1
1
  module Motorcontrolboard
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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
@@ -0,0 +1,3 @@
1
+ require_relative '../lib/motorcontrolboard.rb'
2
+
3
+ require 'yaml'
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.1
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-18 00:00:00.000000000 Z
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