lignite 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +12 -0
  4. data/NEWS.md +5 -1
  5. data/README.md +2 -2
  6. data/Rakefile +1 -1
  7. data/VERSION +1 -1
  8. data/bin/ev3tool +111 -104
  9. data/examples/bobbee.rb +7 -7
  10. data/examples/hello.rb +2 -0
  11. data/examples/hello.yml +4 -0
  12. data/examples/light-sensor.rb +2 -0
  13. data/examples/light-sensor.yml +3 -0
  14. data/examples/lights.rb +7 -7
  15. data/examples/lights.yml +4 -0
  16. data/examples/sys_list_files.rb +4 -2
  17. data/examples/sys_list_files.yml +9 -0
  18. data/lib/lignite.rb +5 -1
  19. data/lib/lignite/assembler.rb +6 -6
  20. data/lib/lignite/body_compiler.rb +4 -0
  21. data/lib/lignite/connection.rb +59 -1
  22. data/lib/lignite/connection/bluetooth.rb +7 -1
  23. data/lib/lignite/connection/replay.rb +57 -0
  24. data/lib/lignite/connection/tap.rb +45 -0
  25. data/lib/lignite/connection/usb.rb +10 -7
  26. data/lib/lignite/direct_commands.rb +56 -5
  27. data/lib/lignite/message.rb +8 -5
  28. data/lib/lignite/motors.rb +5 -5
  29. data/lib/lignite/op_compiler.rb +19 -18
  30. data/lib/lignite/rbf_object.rb +1 -1
  31. data/lib/lignite/system_commands.rb +30 -2
  32. data/lib/lignite/variables.rb +2 -2
  33. data/lignite.gemspec +14 -4
  34. data/rubocop-suse.yml +74 -0
  35. data/spec/connection_usb_spec.rb +42 -0
  36. data/spec/data/ColorReadout.rb +11 -12
  37. data/spec/data/HelloWorld-subop.rb +1 -1
  38. data/spec/data/HelloWorld.rb +1 -1
  39. data/spec/data/NoDebug.rb +1 -1
  40. data/spec/data/VernierReadout.rb +4 -4
  41. data/spec/direct_commands_spec.rb +25 -0
  42. data/spec/system_commands_spec.rb +22 -0
  43. metadata +28 -3
  44. data/lib/lignite/message_sender.rb +0 -94
@@ -0,0 +1,25 @@
1
+ require_relative "spec_helper"
2
+ require "lignite"
3
+
4
+ require "fileutils"
5
+
6
+ describe Lignite::DirectCommands do
7
+ shared_examples "example runner" do |base|
8
+ let(:example_dir) { File.expand_path("../../examples", __FILE__) }
9
+
10
+ let(:script) { "#{example_dir}/#{base}.rb" }
11
+ let(:replay_yml) { "#{example_dir}/#{base}.yml" }
12
+
13
+ before(:each) { Lignite::Message.reset_msgid }
14
+
15
+ it "correctly runs #{base}.rb" do
16
+ allow_any_instance_of(Lignite::DirectCommands).to receive(:sleep)
17
+ ENV["LIGNITE_REPLAY"] = replay_yml
18
+ expect { load(script) }.not_to raise_error
19
+ end
20
+ end
21
+
22
+ it_behaves_like "example runner", "hello"
23
+ it_behaves_like "example runner", "lights"
24
+ it_behaves_like "example runner", "light-sensor"
25
+ end
@@ -0,0 +1,22 @@
1
+ require_relative "spec_helper"
2
+ require "lignite"
3
+
4
+ require "fileutils"
5
+
6
+ describe Lignite::SystemCommands do
7
+ shared_examples "example runner" do |base|
8
+ let(:example_dir) { File.expand_path("../../examples", __FILE__) }
9
+
10
+ let(:script) { "#{example_dir}/#{base}.rb" }
11
+ let(:replay_yml) { "#{example_dir}/#{base}.yml" }
12
+
13
+ before(:each) { Lignite::Message.reset_msgid }
14
+
15
+ it "correctly runs #{base}.rb" do
16
+ ENV["LIGNITE_REPLAY"] = replay_yml
17
+ expect { load(script) }.not_to raise_error
18
+ end
19
+ end
20
+
21
+ it_behaves_like "example runner", "sys_list_files"
22
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lignite
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
  - Martin Vidner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libusb
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.19'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.19'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: coveralls
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +125,8 @@ extra_rdoc_files: []
111
125
  files:
112
126
  - ".coveralls.yml"
113
127
  - ".gitignore"
128
+ - ".rspec"
129
+ - ".rubocop.yml"
114
130
  - ".travis.yml"
115
131
  - ".yardopts"
116
132
  - COPYING
@@ -125,22 +141,27 @@ files:
125
141
  - data/sysops.yml
126
142
  - examples/bobbee.rb
127
143
  - examples/hello.rb
144
+ - examples/hello.yml
128
145
  - examples/light-sensor.rb
146
+ - examples/light-sensor.yml
129
147
  - examples/lights.rb
148
+ - examples/lights.yml
130
149
  - examples/motors.rb
131
150
  - examples/sound.rb
132
151
  - examples/sys_list_files.rb
152
+ - examples/sys_list_files.yml
133
153
  - lib/lignite.rb
134
154
  - lib/lignite/assembler.rb
135
155
  - lib/lignite/body_compiler.rb
136
156
  - lib/lignite/bytes.rb
137
157
  - lib/lignite/connection.rb
138
158
  - lib/lignite/connection/bluetooth.rb
159
+ - lib/lignite/connection/replay.rb
160
+ - lib/lignite/connection/tap.rb
139
161
  - lib/lignite/connection/usb.rb
140
162
  - lib/lignite/direct_commands.rb
141
163
  - lib/lignite/logger.rb
142
164
  - lib/lignite/message.rb
143
- - lib/lignite/message_sender.rb
144
165
  - lib/lignite/motors.rb
145
166
  - lib/lignite/op_compiler.rb
146
167
  - lib/lignite/rbf_object.rb
@@ -148,7 +169,9 @@ files:
148
169
  - lib/lignite/variables.rb
149
170
  - lib/lignite/version.rb
150
171
  - lignite.gemspec
172
+ - rubocop-suse.yml
151
173
  - spec/assembler_spec.rb
174
+ - spec/connection_usb_spec.rb
152
175
  - spec/data/ColorReadout.lms
153
176
  - spec/data/ColorReadout.rb
154
177
  - spec/data/ColorReadout.rbf
@@ -163,7 +186,9 @@ files:
163
186
  - spec/data/VernierReadout.lms
164
187
  - spec/data/VernierReadout.rb
165
188
  - spec/data/VernierReadout.rbf
189
+ - spec/direct_commands_spec.rb
166
190
  - spec/spec_helper.rb
191
+ - spec/system_commands_spec.rb
167
192
  homepage: https://github.com/mvidner/lignite
168
193
  licenses:
169
194
  - GPL-3.0-only
@@ -1,94 +0,0 @@
1
- module Lignite
2
- class VMError < RuntimeError
3
- end
4
-
5
- # FIXME: Possibly merge with Connection (UsbConnection)
6
- class MessageSender
7
- include Bytes
8
- include Logger
9
-
10
- def initialize(connection)
11
- @c = connection
12
- @buf = ""
13
- end
14
-
15
- def direct_command(instr_bytes, global_size: 0, local_size: 0)
16
- body = u16(var_alloc(global_size: global_size, local_size: local_size)) +
17
- instr_bytes
18
- cmd = Message.direct_command_no_reply(body)
19
- send(cmd.bytes)
20
- end
21
-
22
- def direct_command_with_reply(instr_bytes, global_size: 0, local_size: 0)
23
- body = u16(var_alloc(global_size: global_size, local_size: local_size)) +
24
- instr_bytes
25
- cmd = Message.direct_command_with_reply(body)
26
- send(cmd.bytes)
27
-
28
- reply = Message.reply_from_bytes(receive)
29
- assert_match(reply.msgid, cmd.msgid, "Reply id")
30
- if reply.error?
31
- raise VMError # no details?
32
- end
33
-
34
- reply.globals
35
- end
36
-
37
- def system_command_with_reply(instr_bytes)
38
- cmd = Message.system_command_with_reply(instr_bytes)
39
- send(cmd.bytes)
40
-
41
- reply = Message.reply_from_bytes(receive)
42
- assert_match(reply.msgid, cmd.msgid, "Reply id")
43
- assert_match(reply.command, unpack_u8(instr_bytes[0]), "Command num")
44
- if reply.error?
45
- raise VMError, "Error: %u" % reply.status
46
- end
47
-
48
- reply.data
49
- end
50
-
51
- private
52
-
53
- def send(payload)
54
- packet = u16(payload.bytesize) + payload
55
- logger.debug "-> #{packet.inspect}"
56
- @c.write(packet)
57
- end
58
-
59
- # read must not be called with a too low value :-/
60
- def bufread(n)
61
- while n > @buf.bytesize
62
- @buf += @c.read(10000)
63
- end
64
- ret = @buf[0, n]
65
- @buf = @buf[n..-1]
66
- logger.debug "R<-(#{ret.bytesize})#{ret.inspect}"
67
- ret
68
- end
69
-
70
- def receive
71
- size = nil
72
- loop do
73
- lenbuf = bufread(2)
74
- size = unpack_u16(lenbuf)
75
- break unless size.zero?
76
- # leftover data?
77
- @buf = ""
78
- end
79
-
80
- res = bufread(size)
81
- res
82
- end
83
-
84
- def var_alloc(global_size:, local_size:)
85
- var_alloc = global_size & 0x3ff
86
- var_alloc |= (local_size & 0x3f) << 10
87
- end
88
-
89
- def assert_match(actual, expected, description)
90
- return if actual == expected
91
- raise "#{description} does not match, expected #{expected}, actual #{actual}"
92
- end
93
- end
94
- end