lignite 0.1.1 → 0.1.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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/ev3tool +55 -3
- data/lib/lignite/connection/bluetooth.rb +7 -3
- data/lib/lignite/message_sender.rb +4 -2
- data/spec/spec_helper.rb +4 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69c552fbf1d67d88480d8d1ffd3909ea41eebadf
|
4
|
+
data.tar.gz: c53de990e8d76b4960bfa8157f5aabb14c652fbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb091ed264555daa9ea360e59cd3c27b097710d4d0f33105445a83d2640d8259a19f83e40cdd9625dd52588606a36a47f721384e2511b3ccf92b2dc5202b0fb2
|
7
|
+
data.tar.gz: 865cb7e2dadc5614708fde9aa728f7b9af07b78c5e0de4ac1642480c344026d986356a4500980ed24f15e449fefc534fb6aa69dd5b650c74f1c0da8c469a5aa8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/bin/ev3tool
CHANGED
@@ -3,6 +3,11 @@ require "lignite"
|
|
3
3
|
require "fileutils"
|
4
4
|
include Lignite::Bytes
|
5
5
|
|
6
|
+
# The VM current working directory is /home/root/lms2012/sys
|
7
|
+
# which is not very useful. A better default is /home/root/lms2012/prjs
|
8
|
+
# which is displayed on the 2nd tab of the brick UI.
|
9
|
+
EV3TOOL_HOME = "../prjs"
|
10
|
+
|
6
11
|
def phandles
|
7
12
|
handles = $sc.list_open_handles
|
8
13
|
puts "OPEN HANDLES: ", hexdump(handles)
|
@@ -12,7 +17,7 @@ def upload(local_filename, brick_filename = nil)
|
|
12
17
|
data = File.read(local_filename, encoding: Encoding::BINARY)
|
13
18
|
unless brick_filename
|
14
19
|
prj = File.basename(local_filename, ".rbf")
|
15
|
-
brick_filename = "
|
20
|
+
brick_filename = "#{EV3TOOL_HOME}/#{prj}/#{prj}.rbf"
|
16
21
|
end
|
17
22
|
handle = $sc.begin_download(data.bytesize, brick_filename)
|
18
23
|
$sc.continue_download(handle, data)
|
@@ -32,7 +37,11 @@ def download(brick_filename, local_filename = nil)
|
|
32
37
|
end
|
33
38
|
|
34
39
|
def list_files(name)
|
35
|
-
name ||=
|
40
|
+
name ||= EV3TOOL_HOME
|
41
|
+
unless name.start_with?("/")
|
42
|
+
name = "#{EV3TOOL_HOME}/#{name}"
|
43
|
+
end
|
44
|
+
|
36
45
|
result = ""
|
37
46
|
fsize, handle, data = $sc.list_files(4096, name)
|
38
47
|
loop do
|
@@ -42,9 +51,44 @@ def list_files(name)
|
|
42
51
|
handle, data = $sc.continue_list_files(handle, 4096)
|
43
52
|
end
|
44
53
|
result
|
54
|
+
rescue Lignite::VMError
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def ls(name)
|
59
|
+
raw = list_files(name)
|
60
|
+
return nil if raw.nil?
|
61
|
+
|
62
|
+
raw.lines.map do |l|
|
63
|
+
l = l.chomp
|
64
|
+
next nil if l == "./" || l == "../"
|
65
|
+
next l if l.end_with?("/")
|
66
|
+
# skip checksum + space + size + space
|
67
|
+
l[32 + 1 + 8 + 1 .. -1]
|
68
|
+
end.compact
|
69
|
+
end
|
70
|
+
|
71
|
+
def file_exist?(name)
|
72
|
+
dirname = File.dirname(name)
|
73
|
+
filename = File.basename(name)
|
74
|
+
files = ls(dirname) || []
|
75
|
+
files.include?(filename)
|
45
76
|
end
|
46
77
|
|
47
78
|
def run(name)
|
79
|
+
if name.include?("/")
|
80
|
+
unless name.start_with?("/")
|
81
|
+
name = "#{EV3TOOL_HOME}/#{name}"
|
82
|
+
end
|
83
|
+
else
|
84
|
+
name = "#{EV3TOOL_HOME}/#{name}/#{name}.rbf"
|
85
|
+
end
|
86
|
+
|
87
|
+
unless file_exist?(name)
|
88
|
+
$stderr.puts "File #{name.inspect} not found"
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
|
48
92
|
slot = Lignite::USER_SLOT
|
49
93
|
no_debug = 0
|
50
94
|
$dc.block do
|
@@ -56,6 +100,10 @@ def run(name)
|
|
56
100
|
end
|
57
101
|
end
|
58
102
|
|
103
|
+
def stop
|
104
|
+
$dc.program_stop(Lignite::USER_SLOT)
|
105
|
+
end
|
106
|
+
|
59
107
|
def assisted_connection
|
60
108
|
Lignite::Connection.create
|
61
109
|
rescue => e
|
@@ -86,7 +134,11 @@ when "upload", "ul"
|
|
86
134
|
when "download", "dl"
|
87
135
|
download(ARGV[1], ARGV[2])
|
88
136
|
when "list", "ls"
|
89
|
-
|
137
|
+
puts ls(ARGV[1])
|
138
|
+
when "ls-l"
|
139
|
+
puts list_files(ARGV[1])
|
90
140
|
when "run"
|
91
141
|
run(ARGV[1])
|
142
|
+
when "stop"
|
143
|
+
stop
|
92
144
|
end
|
@@ -13,9 +13,13 @@ module Lignite
|
|
13
13
|
channel = 1
|
14
14
|
sockaddr = [AF_BLUETOOTH, 0, *addr_b.reverse, channel, 0].pack("C*")
|
15
15
|
# common exceptions:
|
16
|
-
# "Errno::EHOSTUNREACH: No route to host":
|
17
|
-
#
|
18
|
-
#
|
16
|
+
# "Errno::EHOSTUNREACH: No route to host":
|
17
|
+
# - No BT adapter
|
18
|
+
# - BT is disabled; use `hciconfig hci0 up`
|
19
|
+
# "Errno::EHOSTDOWN: Host is down":
|
20
|
+
# - Turn the brick on
|
21
|
+
# - enable BT on the brick
|
22
|
+
# - disconnect other programming apps
|
19
23
|
@sock.connect(sockaddr)
|
20
24
|
end
|
21
25
|
|
@@ -1,4 +1,6 @@
|
|
1
1
|
module Lignite
|
2
|
+
class VMError < RuntimeError
|
3
|
+
end
|
2
4
|
|
3
5
|
# FIXME: Possibly merge with Connection (UsbConnection)
|
4
6
|
class MessageSender
|
@@ -26,7 +28,7 @@ module Lignite
|
|
26
28
|
reply = Message.reply_from_bytes(receive)
|
27
29
|
assert_match(reply.msgid, cmd.msgid, "Reply id")
|
28
30
|
if reply.error?
|
29
|
-
raise
|
31
|
+
raise VMError # no details?
|
30
32
|
end
|
31
33
|
|
32
34
|
reply.data
|
@@ -40,7 +42,7 @@ module Lignite
|
|
40
42
|
assert_match(reply.msgid, cmd.msgid, "Reply id")
|
41
43
|
assert_match(reply.command, unpack_u8(instr_bytes[0]), "Command num")
|
42
44
|
if reply.error?
|
43
|
-
raise
|
45
|
+
raise VMError, "Error: %u" % reply.status
|
44
46
|
end
|
45
47
|
|
46
48
|
reply.data
|
data/spec/spec_helper.rb
CHANGED
@@ -10,9 +10,10 @@ end
|
|
10
10
|
|
11
11
|
if ENV["COVERAGE"] || ENV["TRAVIS"]
|
12
12
|
require "simplecov"
|
13
|
-
|
14
|
-
# track all ruby files under
|
15
|
-
SimpleCov.track_files("#{lib
|
13
|
+
top = File.expand_path("../..", __FILE__)
|
14
|
+
# track all ruby files under lib
|
15
|
+
SimpleCov.track_files("#{top}/lib/**/*.rb")
|
16
|
+
SimpleCov.track_files("bin/ev3tool")
|
16
17
|
|
17
18
|
# use coveralls for on-line code coverage reporting at Travis CI
|
18
19
|
if ENV["TRAVIS"]
|
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.1.
|
4
|
+
version: 0.1.2
|
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-
|
11
|
+
date: 2018-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: libusb
|