lignite 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +28 -0
- data/NEWS.md +6 -0
- data/Rakefile +22 -1
- data/VERSION +1 -1
- data/bin/ev3tool +2 -149
- data/examples/bobbee.rb +95 -73
- data/lib/lignite.rb +2 -0
- data/lib/lignite/assembler.rb +1 -1
- data/lib/lignite/bytes.rb +10 -2
- data/lib/lignite/connection.rb +13 -5
- data/lib/lignite/connection/bluetooth.rb +1 -0
- data/lib/lignite/connection/replay.rb +8 -10
- data/lib/lignite/connection/tap.rb +2 -8
- data/lib/lignite/connection/usb.rb +2 -0
- data/lib/lignite/defines.rb +244 -0
- data/lib/lignite/defines.rb.erb +14 -0
- data/lib/lignite/direct_commands.rb +1 -0
- data/lib/lignite/enums.rb +659 -0
- data/lib/lignite/enums.rb.erb +21 -0
- data/lib/lignite/ev3_ops.rb +9401 -0
- data/lib/lignite/ev3_tool.rb +175 -0
- data/lib/lignite/logger.rb +1 -0
- data/lib/lignite/message.rb +2 -0
- data/lib/lignite/motors.rb +1 -1
- data/lib/lignite/op_compiler.rb +14 -126
- data/lib/lignite/system_commands.rb +25 -26
- data/lignite.gemspec +17 -2
- data/spec/assembler_spec.rb +0 -2
- data/spec/data/ev3tool_download.yml +3 -0
- data/spec/data/ev3tool_list_files.yml +3 -0
- data/spec/data/ev3tool_start.yml +4 -0
- data/spec/data/ev3tool_stop.yml +2 -0
- data/spec/data/ev3tool_upload.yml +5 -0
- data/spec/data/everstorm.rbf +0 -0
- data/spec/direct_commands_spec.rb +1 -0
- data/spec/ev3_tool_spec.rb +71 -0
- data/spec/spec_helper.rb +6 -1
- data/tools/ops_from_yml +176 -0
- metadata +44 -16
data/lignite.gemspec
CHANGED
@@ -52,7 +52,13 @@ TXT
|
|
52
52
|
"lib/lignite/connection/replay.rb",
|
53
53
|
"lib/lignite/connection/tap.rb",
|
54
54
|
"lib/lignite/connection/usb.rb",
|
55
|
+
"lib/lignite/defines.rb",
|
56
|
+
"lib/lignite/defines.rb.erb",
|
55
57
|
"lib/lignite/direct_commands.rb",
|
58
|
+
"lib/lignite/enums.rb",
|
59
|
+
"lib/lignite/enums.rb.erb",
|
60
|
+
"lib/lignite/ev3_ops.rb",
|
61
|
+
"lib/lignite/ev3_tool.rb",
|
56
62
|
"lib/lignite/logger.rb",
|
57
63
|
"lib/lignite/message.rb",
|
58
64
|
"lib/lignite/motors.rb",
|
@@ -79,9 +85,17 @@ TXT
|
|
79
85
|
"spec/data/VernierReadout.lms",
|
80
86
|
"spec/data/VernierReadout.rb",
|
81
87
|
"spec/data/VernierReadout.rbf",
|
88
|
+
"spec/data/ev3tool_download.yml",
|
89
|
+
"spec/data/ev3tool_list_files.yml",
|
90
|
+
"spec/data/ev3tool_start.yml",
|
91
|
+
"spec/data/ev3tool_stop.yml",
|
92
|
+
"spec/data/ev3tool_upload.yml",
|
93
|
+
"spec/data/everstorm.rbf",
|
82
94
|
"spec/direct_commands_spec.rb",
|
95
|
+
"spec/ev3_tool_spec.rb",
|
83
96
|
"spec/spec_helper.rb",
|
84
|
-
"spec/system_commands_spec.rb"
|
97
|
+
"spec/system_commands_spec.rb",
|
98
|
+
"tools/ops_from_yml"
|
85
99
|
]
|
86
100
|
|
87
101
|
s.executables = s.files.grep(/^bin\//) { |f| File.basename(f) }
|
@@ -91,8 +105,9 @@ TXT
|
|
91
105
|
s.add_dependency "thor", "~> 0.19"
|
92
106
|
|
93
107
|
s.add_development_dependency "coveralls", "~> 0"
|
94
|
-
s.add_development_dependency "simplecov", "~> 0"
|
95
108
|
s.add_development_dependency "rake", ">= 0", "< 99"
|
96
109
|
s.add_development_dependency "rspec", "~> 3"
|
110
|
+
s.add_development_dependency "rubocop", "0.50.0"
|
111
|
+
s.add_development_dependency "simplecov", "~> 0"
|
97
112
|
s.add_development_dependency "yard", "~> 0"
|
98
113
|
end
|
data/spec/assembler_spec.rb
CHANGED
@@ -5,8 +5,6 @@ require "fileutils"
|
|
5
5
|
|
6
6
|
describe Lignite::Assembler do
|
7
7
|
shared_examples "compiles" do |base, asm_version|
|
8
|
-
let(:datadir) { File.expand_path("../data", __FILE__) }
|
9
|
-
|
10
8
|
let(:in_rb) { "#{datadir}/#{base}.rb" }
|
11
9
|
let(:actual_rbf) { "#{datadir}/#{base}.out.rbf" }
|
12
10
|
let(:expected_rbf) { "#{datadir}/#{base}.rbf" }
|
@@ -0,0 +1,3 @@
|
|
1
|
+
---
|
2
|
+
- SEND: 0100019400102e2e2f70726a732f6576657273746f726d2f6576657273746f726d2e72626600
|
3
|
+
- RECV: 0100039400a3040000004c45474fa304000065000e0004000000b8000000000000001a0000001a02000000000000000000002202000000000000000000003702000000000000000000004c02000000000000000000005b02000000000000000000006a02000000000000000000008302000000000000000000009c0200000000000000000000e8020000000000000a0000004c0300000000000004000000b60300000000000004000000fa03000000000000040000006e0400000000000000000000821b08841200841300820000820000841c01820000820000842e2e2f617070732f427269636b2050726f6772616d2f4f6e427269636b496d616765313200841101840500823500821900844556335253544f524d0084003000603000617c0462991d00021d000140991d0003812100014005820b0030014a30014b30014c30016364600282380068600e8232008e820000820100487d0948014e3160483000606d488202008215006948820a00820d007d02846f6b004e5194026251960548991d0000003f01443c444d414d821600424a8214009402628472696768740030014a4082030030004a991d00021d0001443c444d644d0a821500424b821300940262846c6566740030014b4082030030004b991d000381210001443c444d684d1b823500424c823300940262842e2e2f617070732f427269636b2050726f6772616d2f4f6e427269636b536f756e6430340030014c4082030030004c0b42638220ff0a300061a30007000a300061b100068164820000830000000000a600060a300061b1000681ce820000830000000000a600060a300061a5000222a500041ea600060a300061a500021ea5000422a600060aae0001816483000000008338040000830000000000a600010aae0001819c83000000008338040000830000000000a600010a300061b00006814b820000830000000000ae0001816483000000008338040000830000000000a60007aa0001ae0001819c83000000008338040000830000000000a60001aa0001a30006000a300161318132484161825700b10006816448830000000000a60006416182430036828a024085404486444161823400194882ffff484161822900b10006816448830000000000a60006416182150036821405408540448644194882ffff48426182d2ff0a300061b10006816482c80083fa00000001a60006aa0006b1000681648238ff83fa00000001a60006aa0006b10006816482c80083fa00000001a60006aa0006b1000681648238ff83fa00000001a60006aa0006a30006008583c80000004086409402628468657900960a30006194026284736e65657a6500b10006819c820000832c01000001a60006aa0006b100068164820000832c01000001a60040a30006000a300061940262846c65667400968583c8000000408640b0000681328238ff835e01000001a60006aa00068583c800000040864094026284726967687400968583c8000000408640b00006813282c80083c201000001a60006aa0006b0000681328238ff839600000001a60006aa0006a30006000a300061a3000f00940262842e2e2f617070732f427269636b2050726f6772616d2f4f6e427269636b536f756e64313100963000630a0000000000040000006e0400
|
@@ -0,0 +1,3 @@
|
|
1
|
+
---
|
2
|
+
- SEND: 0100019900102e2e2f70726a732f6576657273746f726d00
|
3
|
+
- RECV: 010003990871010000003643413332454336363238354146383733443036453635354435373538304237203030303030344133206576657273746f726d2e7262660a353444464136454132353838303633394645343533454438414234424638413720303030303135334320736e65657a652e7273660a4636333133324538394331354433414346334432373737343639314132383134203030303031303041206865792e7273660a45314631454635413639443544424345313938304246304530374646363733442030303030313334432072696768742e7273660a3631384538383446334145423834314332354241374136463336333831384246203030303031444439206f6b302e7273660a4334333637354536383843384334343138364343444446393239353234423230203030303031354538206f6b312e7273660a4641373044304532303532413342384136413636353136454335313741314644203030303031424243206c6566742e7273660a2e2e2f0a2e2f0a
|
@@ -0,0 +1,4 @@
|
|
1
|
+
---
|
2
|
+
- SEND: 0100019900102e2e2f70726a732f2e2e2f70726a732f6576657273746f726d00
|
3
|
+
- RECV: 010003990871010000003643413332454336363238354146383733443036453635354435373538304237203030303030344133206576657273746f726d2e7262660a353444464136454132353838303633394645343533454438414234424638413720303030303135334320736e65657a652e7273660a4636333133324538394331354433414346334432373737343639314132383134203030303031303041206865792e7273660a45314631454635413639443544424345313938304246304530374646363733442030303030313334432072696768742e7273660a3631384538383446334145423834314332354241374136463336333831384246203030303031444439206f6b302e7273660a4334333637354536383843384334343138364343444446393239353234423230203030303031354538206f6b312e7273660a4641373044304532303532413342384136413636353136454335313741314644203030303031424243206c6566742e7273660a2e2e2f0a2e2f0a
|
4
|
+
- SEND: 0200800020c00801802e2e2f70726a732f6576657273746f726d2f6576657273746f726d2e7262660040440301404400
|
@@ -0,0 +1,5 @@
|
|
1
|
+
---
|
2
|
+
- SEND: 010001923b0000002e2e2f70726a732f48656c6c6f576f726c642f48656c6c6f576f726c642e72626600
|
3
|
+
- RECV: 010003920000
|
4
|
+
- SEND: 02000193004c45474f3b0000006d000100000000001c000000000000000000000084130000008405010a81328048656c6c6f2c20776f726c642100840083030a
|
5
|
+
- RECV: 020003930800
|
Binary file
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative "spec_helper"
|
2
|
+
require "lignite/ev3_tool"
|
3
|
+
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
describe Lignite::Ev3Tool do
|
7
|
+
around(:each) do |example|
|
8
|
+
ENV["LIGNITE_REPLAY"] = replay
|
9
|
+
example.call
|
10
|
+
subject.close
|
11
|
+
ENV["LIGNITE_REPLAY"] = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
before(:each) { Lignite::Message.reset_msgid }
|
15
|
+
|
16
|
+
describe "#raw_ls" do
|
17
|
+
let(:replay) { "#{datadir}/ev3tool_list_files.yml" }
|
18
|
+
|
19
|
+
it "communicates and returns the right thing" do
|
20
|
+
expected = [
|
21
|
+
"everstorm.rbf",
|
22
|
+
"sneeze.rsf",
|
23
|
+
"hey.rsf",
|
24
|
+
"right.rsf",
|
25
|
+
"ok0.rsf",
|
26
|
+
"ok1.rsf",
|
27
|
+
"left.rsf"
|
28
|
+
]
|
29
|
+
|
30
|
+
expect(subject.raw_ls("everstorm")).to eq(expected)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#start" do
|
35
|
+
let(:replay) { "#{datadir}/ev3tool_start.yml" }
|
36
|
+
|
37
|
+
it "communicates the right thing" do
|
38
|
+
expect { subject.start("everstorm") }.not_to raise_error
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#stop" do
|
43
|
+
let(:replay) { "#{datadir}/ev3tool_stop.yml" }
|
44
|
+
|
45
|
+
it "communicates the right thing" do
|
46
|
+
expect { subject.stop }.not_to raise_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#download" do
|
51
|
+
let(:replay) { "#{datadir}/ev3tool_download.yml" }
|
52
|
+
|
53
|
+
it "communicates the right thing" do
|
54
|
+
expected_file_contents = File.read("#{datadir}/everstorm.rbf", mode: "rb")
|
55
|
+
f = double("File")
|
56
|
+
expect(File).to receive(:open).with("everstorm.rbf", "w").and_yield(f)
|
57
|
+
allow(File).to receive(:open).and_call_original
|
58
|
+
expect(f).to receive(:write).with(expected_file_contents)
|
59
|
+
|
60
|
+
expect { subject.download("../prjs/everstorm/everstorm.rbf") }.not_to raise_error
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#upload" do
|
65
|
+
let(:replay) { "#{datadir}/ev3tool_upload.yml" }
|
66
|
+
|
67
|
+
it "communicates the right thing" do
|
68
|
+
expect { subject.upload("#{datadir}/HelloWorld.rbf") }.not_to raise_error
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,8 @@ if ENV["COVERAGE"] || ENV["TRAVIS"]
|
|
13
13
|
top = File.expand_path("../..", __FILE__)
|
14
14
|
# track all ruby files under lib
|
15
15
|
SimpleCov.track_files("#{top}/lib/**/*.rb")
|
16
|
-
|
16
|
+
# filter out the huge generated file
|
17
|
+
SimpleCov.add_filter("ev3_ops.rb")
|
17
18
|
|
18
19
|
# use coveralls for on-line code coverage reporting at Travis CI
|
19
20
|
if ENV["TRAVIS"]
|
@@ -25,3 +26,7 @@ if ENV["COVERAGE"] || ENV["TRAVIS"]
|
|
25
26
|
end
|
26
27
|
SimpleCov.start
|
27
28
|
end
|
29
|
+
|
30
|
+
def datadir
|
31
|
+
File.expand_path("../data", __FILE__)
|
32
|
+
end
|
data/tools/ops_from_yml
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require "yaml"
|
3
|
+
require "erb"
|
4
|
+
|
5
|
+
class TODO < RuntimeError
|
6
|
+
end
|
7
|
+
|
8
|
+
def load_const(name, value, desc)
|
9
|
+
" # #{desc.to_s.chomp}\n" \
|
10
|
+
" Lignite::#{name} = #{value.inspect}\n\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
def rendered_file(yml_hash)
|
14
|
+
op_hash = yml_hash["ops"]
|
15
|
+
|
16
|
+
result = <<RUBY
|
17
|
+
# This file is generated from ev3.yml. DO NOT EDIT.
|
18
|
+
|
19
|
+
module Lignite
|
20
|
+
# Bytecodes implemented by EV3
|
21
|
+
module Ev3Ops
|
22
|
+
#{rendered_ops(op_hash).chomp}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
RUBY
|
26
|
+
result
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String] Ruby code
|
30
|
+
def rendered_ops(op_hash)
|
31
|
+
ss = op_hash.map do |oname, odata|
|
32
|
+
rendered_op2(oname, odata)
|
33
|
+
end
|
34
|
+
ss.join "\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
# @param oname [String] "PROGRAM_STOP"
|
38
|
+
# @return [String] Ruby code
|
39
|
+
def rendered_op2(oname, odata)
|
40
|
+
ovalue = odata["value"]
|
41
|
+
oparams = odata["params"]
|
42
|
+
p1 = oparams.first
|
43
|
+
if p1 && p1["type"] == "SUBP"
|
44
|
+
commands = p1["commands"]
|
45
|
+
s = ""
|
46
|
+
commands.each do |cname, cdata|
|
47
|
+
cdesc = cdata["desc"]
|
48
|
+
cvalue = cdata["value"]
|
49
|
+
s << load_const(cname, cvalue, cdesc)
|
50
|
+
cparams = cdata["params"]
|
51
|
+
s << rendered_op4("#{oname}_#{cname}".downcase, cdesc, ovalue, cvalue, cparams)
|
52
|
+
end
|
53
|
+
s << rendered_multiop(oname, commands)
|
54
|
+
s
|
55
|
+
else
|
56
|
+
rendered_op4(oname.downcase, odata["desc"], ovalue, nil, oparams)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String] Ruby code
|
61
|
+
def rendered_multiop(oname, commands)
|
62
|
+
names = commands.map do |cname, cdata|
|
63
|
+
csym = cname.downcase.to_sym
|
64
|
+
cvalue = cdata["value"]
|
65
|
+
[cvalue, csym]
|
66
|
+
end.to_h
|
67
|
+
|
68
|
+
osym = oname.downcase.to_sym
|
69
|
+
|
70
|
+
multiplex_values = names.map do |cvalue, csym|
|
71
|
+
" #{cvalue} => #{csym.inspect},\n"
|
72
|
+
end
|
73
|
+
|
74
|
+
result = <<RUBY
|
75
|
+
|
76
|
+
MULTIPLEX_#{oname} = {
|
77
|
+
#{multiplex_values.join("").chomp}
|
78
|
+
}.freeze
|
79
|
+
|
80
|
+
def #{osym}(*args)
|
81
|
+
logger.debug "called #{osym} with \#{args.inspect}"
|
82
|
+
cvalue = args.shift
|
83
|
+
csym = MULTIPLEX_#{oname}.fetch(cvalue)
|
84
|
+
__send__("#{osym}_\#{csym}", *args)
|
85
|
+
end
|
86
|
+
RUBY
|
87
|
+
result
|
88
|
+
end
|
89
|
+
|
90
|
+
def param_handler(par)
|
91
|
+
par_type = par["type"]
|
92
|
+
case par_type
|
93
|
+
when "PAR8", "PAR16", "PAR32", "PARF"
|
94
|
+
:param_simple
|
95
|
+
when "PARNO"
|
96
|
+
:param_multiple
|
97
|
+
else
|
98
|
+
raise TODO, "Unhandled param type #{par_type}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# @return [String] Ruby code
|
103
|
+
def method_docs(odesc, params)
|
104
|
+
ss = params.map do |p|
|
105
|
+
n = p["name"].downcase
|
106
|
+
t = p["type"]
|
107
|
+
" # @param #{n} [#{t}] (#{p["dir"]}) #{p["desc"]}\n"
|
108
|
+
end
|
109
|
+
" # #{odesc.to_s.chomp}\n" + ss.join("")
|
110
|
+
end
|
111
|
+
|
112
|
+
# @param oname [String] "move32_32"
|
113
|
+
# @param ovalue [Integer] 0x3A
|
114
|
+
# @param cvalue [Integer,nil]
|
115
|
+
# @return [String] Ruby code
|
116
|
+
def rendered_op4(oname, odesc, ovalue, cvalue, params) # rubocop:disable Metrics/MethodLength
|
117
|
+
s = ""
|
118
|
+
|
119
|
+
param_handlers = params.map { |par| param_handler(par) }
|
120
|
+
|
121
|
+
param_names = params.map do |par|
|
122
|
+
(par["type"] == "PARNO" ? "*" : "") + par["name"].downcase
|
123
|
+
end
|
124
|
+
param_decl = param_names.join ", "
|
125
|
+
param_decl = "(#{param_decl})" unless param_decl.empty?
|
126
|
+
|
127
|
+
s << method_docs(odesc, params)
|
128
|
+
s << <<RUBY
|
129
|
+
def #{oname}#{param_decl}
|
130
|
+
logger.debug do
|
131
|
+
args = [#{param_names.join ", "}]
|
132
|
+
"called #{oname} with \#{args.inspect}"
|
133
|
+
end
|
134
|
+
|
135
|
+
bytes = u8(#{format("0x%02X", ovalue)})
|
136
|
+
RUBY
|
137
|
+
s << " bytes += param_simple(#{cvalue})\n" unless cvalue.nil?
|
138
|
+
param_names.zip(param_handlers).each do |pname, phand|
|
139
|
+
s << " bytes += #{phand}(#{pname})\n"
|
140
|
+
end
|
141
|
+
s << <<RUBY
|
142
|
+
logger.debug "returning bytecode: \#{bytes.inspect}"
|
143
|
+
bytes
|
144
|
+
end
|
145
|
+
RUBY
|
146
|
+
s
|
147
|
+
rescue TODO => e
|
148
|
+
" # Could not define #{oname}: #{e.message}\n"
|
149
|
+
end
|
150
|
+
|
151
|
+
def whitespace_cleanup(s)
|
152
|
+
s.lines.map(&:rstrip).join("\n") + "\n"
|
153
|
+
end
|
154
|
+
|
155
|
+
def render_erb_file(erb_filename, a_binding)
|
156
|
+
safe = nil
|
157
|
+
trim = "<>-"
|
158
|
+
erb = ERB.new(File.read(erb_filename), safe, trim)
|
159
|
+
out_filename = erb_filename.sub(/\.erb$/, "")
|
160
|
+
header = "# This file is generated from its .erb template. DO NOT EDIT.\n\n"
|
161
|
+
rendered = erb.result(a_binding)
|
162
|
+
rendered = whitespace_cleanup(rendered)
|
163
|
+
File.write(out_filename, header + rendered)
|
164
|
+
end
|
165
|
+
|
166
|
+
# run this via "rake ops"
|
167
|
+
yml = YAML.load_file(ARGV[0])
|
168
|
+
out_fn = ARGV[1]
|
169
|
+
|
170
|
+
rendered = rendered_file(yml)
|
171
|
+
rendered = whitespace_cleanup(rendered)
|
172
|
+
File.write(out_fn, rendered)
|
173
|
+
|
174
|
+
libdir = File.expand_path("..", out_fn)
|
175
|
+
render_erb_file("#{libdir}/defines.rb.erb", binding)
|
176
|
+
render_erb_file("#{libdir}/enums.rb.erb", binding)
|
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.
|
4
|
+
version: 0.4.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-03-
|
11
|
+
date: 2018-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libusb
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: simplecov
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rake
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,6 +86,34 @@ dependencies:
|
|
100
86
|
- - "~>"
|
101
87
|
- !ruby/object:Gem::Version
|
102
88
|
version: '3'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - '='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.50.0
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.50.0
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: simplecov
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
103
117
|
- !ruby/object:Gem::Dependency
|
104
118
|
name: yard
|
105
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +173,13 @@ files:
|
|
159
173
|
- lib/lignite/connection/replay.rb
|
160
174
|
- lib/lignite/connection/tap.rb
|
161
175
|
- lib/lignite/connection/usb.rb
|
176
|
+
- lib/lignite/defines.rb
|
177
|
+
- lib/lignite/defines.rb.erb
|
162
178
|
- lib/lignite/direct_commands.rb
|
179
|
+
- lib/lignite/enums.rb
|
180
|
+
- lib/lignite/enums.rb.erb
|
181
|
+
- lib/lignite/ev3_ops.rb
|
182
|
+
- lib/lignite/ev3_tool.rb
|
163
183
|
- lib/lignite/logger.rb
|
164
184
|
- lib/lignite/message.rb
|
165
185
|
- lib/lignite/motors.rb
|
@@ -186,9 +206,17 @@ files:
|
|
186
206
|
- spec/data/VernierReadout.lms
|
187
207
|
- spec/data/VernierReadout.rb
|
188
208
|
- spec/data/VernierReadout.rbf
|
209
|
+
- spec/data/ev3tool_download.yml
|
210
|
+
- spec/data/ev3tool_list_files.yml
|
211
|
+
- spec/data/ev3tool_start.yml
|
212
|
+
- spec/data/ev3tool_stop.yml
|
213
|
+
- spec/data/ev3tool_upload.yml
|
214
|
+
- spec/data/everstorm.rbf
|
189
215
|
- spec/direct_commands_spec.rb
|
216
|
+
- spec/ev3_tool_spec.rb
|
190
217
|
- spec/spec_helper.rb
|
191
218
|
- spec/system_commands_spec.rb
|
219
|
+
- tools/ops_from_yml
|
192
220
|
homepage: https://github.com/mvidner/lignite
|
193
221
|
licenses:
|
194
222
|
- GPL-3.0-only
|