prremote 0.1.5 → 0.1.7
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/README.md +36 -2
- data/VERSION +1 -1
- data/lib/prremote/commands/deploy.rb +1 -1
- data/lib/prremote/commands/run.rb +7 -7
- data/lib/prremote/commands/serial_helpers.rb +34 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b55c090d4bddcdac18b7a1166429af025eeecc0416e31dedf51f248b4d2cd975
|
|
4
|
+
data.tar.gz: c81096a50e22d31064a8f721daca2de89dcfc5ccbb6e6c9d2d3fb58973c85ac0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8d959c616f0205f2e63f9ba8eba7d96f66943822e1e59be4dc41cb58aed070fabe816ff1473a6cbee7057bdc19533274dbf8c0c2a5e04924d354bcaae54653db
|
|
7
|
+
data.tar.gz: 9a1fd33542e02a7a97f0e0a9d9626e3f688d80cf3027ff975de58e2159defc90fa3880a9611cb35b125359c7fc8d36ed3708e517673e16795ac3e8cb6a1d566a
|
data/README.md
CHANGED
|
@@ -163,8 +163,8 @@ Show the gem version, mrbc version, and the connected device's runtime version.
|
|
|
163
163
|
|
|
164
164
|
```bash
|
|
165
165
|
prremote version
|
|
166
|
-
# prremote: 0.1.
|
|
167
|
-
# runtime: 0.1.
|
|
166
|
+
# prremote: 0.1.7
|
|
167
|
+
# runtime: 0.1.7 (/dev/tty.usbmodem101)
|
|
168
168
|
# mrbc: mruby 4.0.0 (2026-04-20) (/opt/homebrew/bin/mrbc)
|
|
169
169
|
```
|
|
170
170
|
|
|
@@ -213,6 +213,40 @@ Scripts saved via `deploy` are stored in flash and run automatically on every bo
|
|
|
213
213
|
|
|
214
214
|
---
|
|
215
215
|
|
|
216
|
+
## Development
|
|
217
|
+
|
|
218
|
+
### Clone
|
|
219
|
+
|
|
220
|
+
This repository uses Git submodules (mruby/c, picoruby, pico-sdk, etc.).
|
|
221
|
+
Clone with:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
git clone --recurse-submodules https://github.com/lumbermill/prremote.git
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
If you already cloned without `--recurse-submodules`:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
git submodule update --init --recursive
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Build the runtime firmware
|
|
234
|
+
|
|
235
|
+
Requires the ARM cross-compiler (`arm-none-eabi-gcc`) and CMake.
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
cd runtime/
|
|
239
|
+
rake cache # build UF2 for pico and picow → ~/.prremote/runtime/
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Run the tests
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
bundle exec rake test
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
216
250
|
## License
|
|
217
251
|
|
|
218
252
|
[MIT License](LICENSE)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.7
|
|
@@ -48,7 +48,7 @@ module Prremote
|
|
|
48
48
|
post_running = wait_for_running(serial)
|
|
49
49
|
stream_until_done(serial, post_running)
|
|
50
50
|
rescue Interrupt
|
|
51
|
-
serial&.write("\x03")
|
|
51
|
+
serial&.write("\x03") rescue nil
|
|
52
52
|
sleep 0.1
|
|
53
53
|
raise
|
|
54
54
|
ensure
|
|
@@ -59,7 +59,7 @@ module Prremote
|
|
|
59
59
|
buf = +''
|
|
60
60
|
deadline = Time.now + 10
|
|
61
61
|
loop do
|
|
62
|
-
chunk = normalize(serial
|
|
62
|
+
chunk = normalize(safe_read(serial, 256))
|
|
63
63
|
unless chunk.empty?
|
|
64
64
|
debug "recv: #{chunk.inspect}"
|
|
65
65
|
buf << chunk
|
|
@@ -79,7 +79,7 @@ module Prremote
|
|
|
79
79
|
def stream_until_done(serial, initial = +'')
|
|
80
80
|
buf = initial
|
|
81
81
|
loop do
|
|
82
|
-
buf << normalize(serial
|
|
82
|
+
buf << normalize(safe_read(serial, 256))
|
|
83
83
|
|
|
84
84
|
if (done_pos = buf.index("DONE\n"))
|
|
85
85
|
$stdout.print buf[0, done_pos] unless done_pos.zero?
|
|
@@ -87,11 +87,11 @@ module Prremote
|
|
|
87
87
|
return
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
$stdout.print buf[0,
|
|
90
|
+
# Flush on newline boundaries so each puts line appears immediately.
|
|
91
|
+
if (nl_pos = buf.rindex("\n"))
|
|
92
|
+
$stdout.print buf[0, nl_pos + 1]
|
|
93
93
|
$stdout.flush
|
|
94
|
-
buf = buf[
|
|
94
|
+
buf = buf[(nl_pos + 1)..]
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
sleep 0.01
|
|
@@ -2,11 +2,20 @@ module Prremote
|
|
|
2
2
|
module Commands
|
|
3
3
|
module SerialHelpers
|
|
4
4
|
def wait_for_ready(serial)
|
|
5
|
+
# On macOS, USB CDC TX buffers can be dropped when the host reopens the port,
|
|
6
|
+
# leaving the device stuck in getchar() without re-sending READY.
|
|
7
|
+
# Sending Ctrl+C forces the device to restart its READY loop.
|
|
8
|
+
sleep 0.1
|
|
9
|
+
serial.write("\x03") rescue nil
|
|
10
|
+
|
|
5
11
|
buf = +''
|
|
6
12
|
deadline = Time.now + 10
|
|
7
13
|
loop do
|
|
8
|
-
buf << normalize(serial
|
|
9
|
-
|
|
14
|
+
buf << normalize(safe_read(serial, 256))
|
|
15
|
+
if buf.include?('READY ')
|
|
16
|
+
warn_if_runtime_outdated(buf)
|
|
17
|
+
return
|
|
18
|
+
end
|
|
10
19
|
raise 'Timeout waiting for device. Run `prremote reset` if a script is running.' if Time.now > deadline
|
|
11
20
|
|
|
12
21
|
sleep 0.05
|
|
@@ -16,6 +25,29 @@ module Prremote
|
|
|
16
25
|
def normalize(str)
|
|
17
26
|
str.gsub("\r\n", "\n").gsub("\r", '')
|
|
18
27
|
end
|
|
28
|
+
|
|
29
|
+
# Wraps serial.read so that a device disconnect (e.g. ENXIO on macOS when
|
|
30
|
+
# the Pico resets) surfaces as a human-readable error instead of a bare errno name.
|
|
31
|
+
def safe_read(serial, size)
|
|
32
|
+
serial.read(size) || ''
|
|
33
|
+
rescue RubySerial::Error => e
|
|
34
|
+
raise "Device disconnected (#{e.message}). Run `prremote reset` if the device is unresponsive."
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def warn_if_runtime_outdated(buf)
|
|
40
|
+
m = buf.match(/READY prremote-runtime\/(\S+)/)
|
|
41
|
+
return unless m
|
|
42
|
+
|
|
43
|
+
runtime_ver = Gem::Version.new(m[1])
|
|
44
|
+
gem_ver = Gem::Version.new(Prremote::VERSION)
|
|
45
|
+
return unless runtime_ver < gem_ver
|
|
46
|
+
|
|
47
|
+
warn "WARNING: runtime version #{m[1]} is older than prremote #{Prremote::VERSION}. Run `prremote install` to update."
|
|
48
|
+
rescue ArgumentError
|
|
49
|
+
# ignore unparseable version strings
|
|
50
|
+
end
|
|
19
51
|
end
|
|
20
52
|
end
|
|
21
53
|
end
|