lignite 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|