lego-nxt 0.2.0 → 0.3.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.
Files changed (38) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +16 -12
  3. data/Rakefile +9 -12
  4. data/lib/lego_nxt.rb +36 -0
  5. data/lib/nxt/commands/base.rb +56 -7
  6. data/lib/nxt/commands/input.rb +30 -12
  7. data/lib/nxt/commands/low_speed.rb +47 -0
  8. data/lib/nxt/commands/output.rb +9 -7
  9. data/lib/nxt/commands/program.rb +3 -0
  10. data/lib/nxt/commands/sound.rb +3 -0
  11. data/lib/nxt/commands/tone.rb +3 -0
  12. data/lib/nxt/connector/input/base.rb +9 -0
  13. data/lib/nxt/{connectors → connector}/input/color.rb +3 -0
  14. data/lib/nxt/{connectors → connector}/input/touch.rb +3 -0
  15. data/lib/nxt/connector/input/ultrasonic.rb +66 -0
  16. data/lib/nxt/connector/output/base.rb +9 -0
  17. data/lib/nxt/connector/output/motor.rb +117 -0
  18. data/lib/nxt/exceptions.rb +3 -1
  19. data/lib/nxt/interface/base.rb +18 -0
  20. data/lib/nxt/{interfaces → interface}/serial_port.rb +13 -10
  21. data/lib/nxt/{interfaces → interface}/usb.rb +10 -9
  22. data/lib/nxt/nxt_brick.rb +51 -45
  23. data/lib/nxt/patches/module.rb +5 -2
  24. data/lib/nxt/patches/string.rb +6 -17
  25. data/lib/nxt/protocols/i2c.rb +118 -0
  26. data/lib/nxt/utils/accessors.rb +8 -7
  27. data/lib/nxt/utils/assertions.rb +24 -0
  28. data/spec/matchers.rb +2 -0
  29. data/spec/nxt/connector/output/motor_spec.rb +52 -0
  30. data/spec/nxt/interface/serial_port_spec.rb +119 -0
  31. data/spec/nxt/nxt_brick_spec.rb +189 -120
  32. data/spec/spec_helper.rb +10 -1
  33. metadata +193 -59
  34. data/lib/nxt.rb +0 -27
  35. data/lib/nxt/connectors/input/ultrasonic.rb +0 -11
  36. data/lib/nxt/connectors/output/motor.rb +0 -116
  37. data/lib/nxt/interfaces/base.rb +0 -26
  38. data/spec/nxt/interfaces/serial_port_spec.rb +0 -73
@@ -1,4 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ if ENV['CI']
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ end
7
+
1
8
  require 'matchers'
2
- require 'nxt'
9
+ require 'lego_nxt'
3
10
 
11
+ # rubocop:disable Style/MixinUsage
4
12
  include NXT::Exceptions
13
+ # rubocop:enable Style/MixinUsage
metadata CHANGED
@@ -1,113 +1,243 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lego-nxt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Kleyn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-01 00:00:00.000000000 Z
11
+ date: 2020-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: serialport
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.0'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: 1.1.0
22
+ version: 6.0.3.4
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ~>
27
+ - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 1.1.0
29
+ version: '6.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.0.3.4
27
33
  - !ruby/object:Gem::Dependency
28
- name: activesupport
34
+ name: libusb
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ~>
37
+ - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 3.2.13
39
+ version: 0.6.4
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ~>
44
+ - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: 3.2.13
46
+ version: 0.6.4
41
47
  - !ruby/object:Gem::Dependency
42
- name: libusb
48
+ name: serialport
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ~>
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: 0.3.4
53
+ version: 1.3.1
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ~>
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 1.3.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: filewatcher
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.1'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 1.1.1
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.1'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 1.1.1
81
+ - !ruby/object:Gem::Dependency
82
+ name: pry-byebug
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.9'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 3.9.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
53
96
  - !ruby/object:Gem::Version
54
- version: 0.3.4
97
+ version: '3.9'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 3.9.0
101
+ - !ruby/object:Gem::Dependency
102
+ name: redcarpet
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '3.5'
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 3.5.0
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.5'
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: 3.5.0
55
121
  - !ruby/object:Gem::Dependency
56
122
  name: rspec
57
123
  requirement: !ruby/object:Gem::Requirement
58
124
  requirements:
59
- - - ~>
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '3.10'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 3.10.0
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.10'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 3.10.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: rubocop
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.4'
148
+ - - ">="
60
149
  - !ruby/object:Gem::Version
61
- version: 2.13.0
150
+ version: 1.4.2
62
151
  type: :development
63
152
  prerelease: false
64
153
  version_requirements: !ruby/object:Gem::Requirement
65
154
  requirements:
66
- - - ~>
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '1.4'
158
+ - - ">="
67
159
  - !ruby/object:Gem::Version
68
- version: 2.13.0
160
+ version: 1.4.2
69
161
  - !ruby/object:Gem::Dependency
70
- name: pry
162
+ name: rubocop-rspec
71
163
  requirement: !ruby/object:Gem::Requirement
72
164
  requirements:
73
- - - ~>
165
+ - - "~>"
74
166
  - !ruby/object:Gem::Version
75
- version: 0.9.12.2
167
+ version: '2.0'
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: 2.0.0
76
171
  type: :development
77
172
  prerelease: false
78
173
  version_requirements: !ruby/object:Gem::Requirement
79
174
  requirements:
80
- - - ~>
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '2.0'
178
+ - - ">="
81
179
  - !ruby/object:Gem::Version
82
- version: 0.9.12.2
180
+ version: 2.0.0
83
181
  - !ruby/object:Gem::Dependency
84
- name: yard
182
+ name: simplecov
85
183
  requirement: !ruby/object:Gem::Requirement
86
184
  requirements:
87
- - - ~>
185
+ - - "~>"
88
186
  - !ruby/object:Gem::Version
89
- version: 0.8.6.1
187
+ version: '0.20'
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 0.20.0
90
191
  type: :development
91
192
  prerelease: false
92
193
  version_requirements: !ruby/object:Gem::Requirement
93
194
  requirements:
94
- - - ~>
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '0.20'
198
+ - - ">="
95
199
  - !ruby/object:Gem::Version
96
- version: 0.8.6.1
200
+ version: 0.20.0
97
201
  - !ruby/object:Gem::Dependency
98
- name: redcarpet
202
+ name: simplecov-lcov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '0.8'
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: 0.8.0
211
+ type: :development
212
+ prerelease: false
213
+ version_requirements: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - "~>"
216
+ - !ruby/object:Gem::Version
217
+ version: '0.8'
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: 0.8.0
221
+ - !ruby/object:Gem::Dependency
222
+ name: yard
99
223
  requirement: !ruby/object:Gem::Requirement
100
224
  requirements:
101
- - - ~>
225
+ - - "~>"
226
+ - !ruby/object:Gem::Version
227
+ version: '0.9'
228
+ - - ">="
102
229
  - !ruby/object:Gem::Version
103
- version: 2.3.0
230
+ version: 0.9.25
104
231
  type: :development
105
232
  prerelease: false
106
233
  version_requirements: !ruby/object:Gem::Requirement
107
234
  requirements:
108
- - - ~>
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '0.9'
238
+ - - ">="
109
239
  - !ruby/object:Gem::Version
110
- version: 2.3.0
240
+ version: 0.9.25
111
241
  description: Ruby LEGO Mindstorms NXT 2.0 control via Bluetooth and USB. See http://github.com/nathankleyn/lego-nxt
112
242
  for more information.
113
243
  email: nathan@nathankleyn.com
@@ -118,29 +248,35 @@ extra_rdoc_files:
118
248
  files:
119
249
  - README.md
120
250
  - Rakefile
121
- - lib/nxt.rb
122
- - lib/nxt/connectors/output/motor.rb
123
- - lib/nxt/connectors/input/color.rb
124
- - lib/nxt/connectors/input/ultrasonic.rb
125
- - lib/nxt/connectors/input/touch.rb
126
- - lib/nxt/exceptions.rb
127
- - lib/nxt/nxt_brick.rb
251
+ - lib/lego_nxt.rb
252
+ - lib/nxt/commands/base.rb
253
+ - lib/nxt/commands/input.rb
254
+ - lib/nxt/commands/low_speed.rb
255
+ - lib/nxt/commands/output.rb
128
256
  - lib/nxt/commands/program.rb
129
257
  - lib/nxt/commands/sound.rb
130
258
  - lib/nxt/commands/tone.rb
131
- - lib/nxt/commands/output.rb
132
- - lib/nxt/commands/base.rb
133
- - lib/nxt/commands/input.rb
134
- - lib/nxt/utils/accessors.rb
135
- - lib/nxt/patches/string.rb
259
+ - lib/nxt/connector/input/base.rb
260
+ - lib/nxt/connector/input/color.rb
261
+ - lib/nxt/connector/input/touch.rb
262
+ - lib/nxt/connector/input/ultrasonic.rb
263
+ - lib/nxt/connector/output/base.rb
264
+ - lib/nxt/connector/output/motor.rb
265
+ - lib/nxt/exceptions.rb
266
+ - lib/nxt/interface/base.rb
267
+ - lib/nxt/interface/serial_port.rb
268
+ - lib/nxt/interface/usb.rb
269
+ - lib/nxt/nxt_brick.rb
136
270
  - lib/nxt/patches/module.rb
137
- - lib/nxt/interfaces/usb.rb
138
- - lib/nxt/interfaces/base.rb
139
- - lib/nxt/interfaces/serial_port.rb
140
- - spec/spec_helper.rb
271
+ - lib/nxt/patches/string.rb
272
+ - lib/nxt/protocols/i2c.rb
273
+ - lib/nxt/utils/accessors.rb
274
+ - lib/nxt/utils/assertions.rb
141
275
  - spec/matchers.rb
276
+ - spec/nxt/connector/output/motor_spec.rb
277
+ - spec/nxt/interface/serial_port_spec.rb
142
278
  - spec/nxt/nxt_brick_spec.rb
143
- - spec/nxt/interfaces/serial_port_spec.rb
279
+ - spec/spec_helper.rb
144
280
  homepage: http://github.com/nathankleyn/lego-nxt
145
281
  licenses:
146
282
  - MIT
@@ -151,19 +287,17 @@ require_paths:
151
287
  - lib
152
288
  required_ruby_version: !ruby/object:Gem::Requirement
153
289
  requirements:
154
- - - '>='
290
+ - - ">="
155
291
  - !ruby/object:Gem::Version
156
- version: '0'
292
+ version: 2.7.2
157
293
  required_rubygems_version: !ruby/object:Gem::Requirement
158
294
  requirements:
159
- - - '>='
295
+ - - ">="
160
296
  - !ruby/object:Gem::Version
161
297
  version: '0'
162
298
  requirements: []
163
- rubyforge_project:
164
- rubygems_version: 2.0.2
299
+ rubygems_version: 3.1.4
165
300
  signing_key:
166
301
  specification_version: 4
167
302
  summary: Ruby LEGO Mindstorms NXT 2.0 control via Bluetooth and USB.
168
303
  test_files: []
169
- has_rdoc:
data/lib/nxt.rb DELETED
@@ -1,27 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
- require 'active_support/inflector'
4
-
5
- require 'nxt/patches/module'
6
-
7
- require 'nxt/exceptions'
8
-
9
- require 'nxt/interfaces/base'
10
- require 'nxt/interfaces/usb'
11
- require 'nxt/interfaces/serial_port'
12
-
13
- require 'nxt/commands/base'
14
- require 'nxt/commands/input'
15
- require 'nxt/commands/output'
16
- require 'nxt/commands/program'
17
- require 'nxt/commands/sound'
18
- require 'nxt/commands/tone'
19
-
20
- require 'nxt/connectors/input/color'
21
- require 'nxt/connectors/input/touch'
22
- require 'nxt/connectors/input/ultrasonic'
23
- require 'nxt/connectors/output/motor'
24
-
25
- require 'nxt/nxt_brick'
26
-
27
- require 'pry'
@@ -1,11 +0,0 @@
1
- module NXT
2
- module Connector
3
- module Input
4
- class Ultrasonic
5
- def initialize(port)
6
- @port = port
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,116 +0,0 @@
1
- module NXT
2
- module Connector
3
- module Output
4
- class Motor
5
- include NXT::Command::Output
6
- extend NXT::Utils::Accessors
7
-
8
- DURATION_TYPE = [:seconds, :degrees, :rotations].freeze
9
- DURATION_AFTER = [:coast, :brake].freeze
10
- DIRECTION = [:forwards, :backwards].freeze
11
-
12
- attr_accessor :port, :interface
13
-
14
- attr_combined_accessor :duration, 0
15
- attr_combined_accessor :duration_type, :seconds
16
- attr_combined_accessor :duration_after, :stop
17
- attr_combined_accessor :direction, :forwards
18
-
19
- attr_setter :direction, is_key_in: DIRECTION
20
-
21
- def initialize(port, interface)
22
- @port = port
23
- @interface = interface
24
- end
25
-
26
- def duration=(duration, options = {})
27
- raise TypeError.new('Expected duration to be a number') unless duration.is_a?(Integer)
28
- @duration = duration
29
-
30
- if options.include?(:type)
31
- type = options[:type]
32
-
33
- unless DURATION_TYPE.include?(type)
34
- raise TypeError.new("Expected duration type to be one of: :#{DURATION_TYPE.join(', :')}")
35
- end
36
-
37
- @duration_type = type
38
- else
39
- @duration_type = :seconds
40
- end
41
-
42
- if options.include?(:after)
43
- if @duration_type == :seconds
44
- after = options[:after]
45
-
46
- unless DURATION_AFTER.include?(after)
47
- raise TypeError.new("Expected after option to be one of: :#{DURATION_AFTER.join(', :')}")
48
- end
49
-
50
- @duration_after = after
51
- else
52
- raise TypeError.new('The after option is only available when the unit duration is in seconds.')
53
- end
54
- else
55
- @duration_after = :stop
56
- end
57
-
58
- case @duration_type
59
- when :rotations
60
- self.tacho_limit = @duration * 360
61
- when :degrees
62
- self.tacho_limit = @duration
63
- end
64
-
65
- self
66
- end
67
-
68
- def forwards
69
- self.direction = :forwards
70
- self
71
- end
72
-
73
- def backwards
74
- self.direction = :backwards
75
- self
76
- end
77
-
78
- def stop(type = :coast)
79
- self.power = 0
80
- self.mode = :coast
81
-
82
- self.move
83
- end
84
-
85
- # takes block for response, or can return the response instead.
86
- def move
87
- response_required = false
88
-
89
- if self.duration > 0 && self.duration_type != :seconds
90
- response_required = true
91
- end
92
-
93
- set_output_state(response_required)
94
-
95
- if self.duration > 0 && self.duration_type == :seconds
96
- sleep(self.duration)
97
- self.reset
98
- self.stop(self.duration_after)
99
- else
100
- self.reset
101
- end
102
- end
103
-
104
- def reset
105
- self.duration = 0
106
- self.direction = :forwards
107
- self.power = 75
108
- self.mode = :motor_on
109
- self.regulation_mode = :idle
110
- self.run_state = :running
111
- self.tacho_limit = 0
112
- end
113
- end
114
- end
115
- end
116
- end