lr-shuttle 0.2.3__tar.gz → 0.2.8__tar.gz
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.
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/PKG-INFO +19 -1
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/README.md +18 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/pyproject.toml +1 -1
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/PKG-INFO +19 -1
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/cli.py +453 -37
- lr_shuttle-0.2.8/src/shuttle/firmware/esp32c5/devboard.ino.bin +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/prodtest.py +1 -3
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/serial_client.py +52 -2
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/timo.py +64 -5
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_cli.py +804 -14
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_flash.py +1 -1
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_serial_client.py +113 -4
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_timo.py +47 -0
- lr_shuttle-0.2.3/src/shuttle/firmware/esp32c5/devboard.ino.bin +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/setup.cfg +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/SOURCES.txt +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/dependency_links.txt +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/entry_points.txt +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/requires.txt +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/lr_shuttle.egg-info/top_level.txt +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/constants.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/__init__.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/esp32c5/__init__.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/esp32c5/boot_app0.bin +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/esp32c5/devboard.ino.bootloader.bin +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/esp32c5/devboard.ino.partitions.bin +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/firmware/esp32c5/manifest.json +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/src/shuttle/flash.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_cli_client.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_cli_edge.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_cli_seq.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_cli_utils.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_prodtest_edge.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_prodtest_helpers.py +0 -0
- {lr_shuttle-0.2.3 → lr_shuttle-0.2.8}/tests/test_timo_write.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lr-shuttle
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: CLI and Python client for host-side of json based serial communication with embedded device bridge.
|
|
5
5
|
Author-email: Jonas Estberger <jonas.estberger@lumenradio.com>
|
|
6
6
|
License: MIT
|
|
@@ -119,6 +119,7 @@ Commands implementing the SPI protocol as described at [docs.lumenradio.io/timot
|
|
|
119
119
|
| `shuttle timo read-reg --addr 0x05 --length 2` | Performs the two-phase TiMo register read sequence and decodes the resulting payload/IRQ flags. |
|
|
120
120
|
| `shuttle timo write-reg --addr 0x05 --data cafebabe` | Performs the two-phase TiMo register write sequence to write bytes to a register. |
|
|
121
121
|
| `shuttle timo read-dmx --length 12` | Reads the latest received DMX values from the TiMo device using a two-phase SPI sequence. |
|
|
122
|
+
| `shuttle timo update-fw TIMO.cci --port /dev/ttyUSB0` | Streams a TiMo `.cci` firmware image via FW_BLOCK commands (requires SPI ≤ 2 MHz and ≥ 255-byte transfers). |
|
|
122
123
|
|
|
123
124
|
All commands respect the global options declared on the root CLI (`--log`, `--seq-meta`, `--port`, etc.). Rich tables are used to render human-friendly summaries of responses and decoded payloads.
|
|
124
125
|
|
|
@@ -174,6 +175,23 @@ This will print a summary table with the length, data bytes (hex), and IRQ flags
|
|
|
174
175
|
- `--port` is your serial device
|
|
175
176
|
|
|
176
177
|
|
|
178
|
+
### TiMo Firmware Update
|
|
179
|
+
|
|
180
|
+
Use `shuttle timo update-fw` to push official `.cci` images (for example `timotwo-fx-b50f26ad.cci`; the companion `.hex` is provided for reference only) through the Shuttle bridge without touching an external programmer:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
shuttle timo update-fw timotwo-fx-b50f26ad.cci --port /dev/ttyUSB0
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- The command first checks `spi_caps.max_transfer_bytes` and the current SPI clock. Firmware updates require at least 255 bytes per `spi.xfer` call and a clock ≤ 2 MHz. Run `shuttle spi-cfg --hz 2000000` (or lower) if the persisted setting is faster.
|
|
187
|
+
- Shuttle enables SPI, sets TiMo into UPDATE_MODE by writing `0x40` to CONFIG, waits for the IRQ reboot window (0.6 s), and verifies bit 7 of STATUS before streaming data.
|
|
188
|
+
- `.cci` files contain a 4-byte header followed by 272-byte chunks. Because the TiMo FW loader accepts at most 255 contiguous bytes, each chunk is split into one `FW_BLOCK_CMD_1` transfer (0x8E + 254 bytes) and one `FW_BLOCK_CMD_2` transfer (0x8F + 18 bytes).
|
|
189
|
+
- The first chunk after the header carries metadata. After every 16 data chunks the device writes flash internally, so the CLI pauses for `--flush-wait-ms` (defaults to 500 ms) before continuing. When the whole image has been sent it waits `--final-wait-ms` (defaults to 1000 ms) to let TiMo finalize the update.
|
|
190
|
+
- Once STATUS clears UPDATE_MODE the command reads the VERSION register, prints FW/HW revisions, and confirms completion. If any step fails (IRQ bit 7, transport error, malformed `.cci`) the CLI aborts with a helpful message.
|
|
191
|
+
|
|
192
|
+
Tip: combine `--flush-wait-ms 0` and `--final-wait-ms 0` with a lab DUT when replaying the same firmware repeatedly, but keep the defaults when programming production hardware to honour the vendor timing guidelines.
|
|
193
|
+
|
|
194
|
+
|
|
177
195
|
### Using the Library from Python
|
|
178
196
|
|
|
179
197
|
Use the transport helpers for HIL tests with explicit request→response pairing:
|
|
@@ -93,6 +93,7 @@ Commands implementing the SPI protocol as described at [docs.lumenradio.io/timot
|
|
|
93
93
|
| `shuttle timo read-reg --addr 0x05 --length 2` | Performs the two-phase TiMo register read sequence and decodes the resulting payload/IRQ flags. |
|
|
94
94
|
| `shuttle timo write-reg --addr 0x05 --data cafebabe` | Performs the two-phase TiMo register write sequence to write bytes to a register. |
|
|
95
95
|
| `shuttle timo read-dmx --length 12` | Reads the latest received DMX values from the TiMo device using a two-phase SPI sequence. |
|
|
96
|
+
| `shuttle timo update-fw TIMO.cci --port /dev/ttyUSB0` | Streams a TiMo `.cci` firmware image via FW_BLOCK commands (requires SPI ≤ 2 MHz and ≥ 255-byte transfers). |
|
|
96
97
|
|
|
97
98
|
All commands respect the global options declared on the root CLI (`--log`, `--seq-meta`, `--port`, etc.). Rich tables are used to render human-friendly summaries of responses and decoded payloads.
|
|
98
99
|
|
|
@@ -148,6 +149,23 @@ This will print a summary table with the length, data bytes (hex), and IRQ flags
|
|
|
148
149
|
- `--port` is your serial device
|
|
149
150
|
|
|
150
151
|
|
|
152
|
+
### TiMo Firmware Update
|
|
153
|
+
|
|
154
|
+
Use `shuttle timo update-fw` to push official `.cci` images (for example `timotwo-fx-b50f26ad.cci`; the companion `.hex` is provided for reference only) through the Shuttle bridge without touching an external programmer:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
shuttle timo update-fw timotwo-fx-b50f26ad.cci --port /dev/ttyUSB0
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
- The command first checks `spi_caps.max_transfer_bytes` and the current SPI clock. Firmware updates require at least 255 bytes per `spi.xfer` call and a clock ≤ 2 MHz. Run `shuttle spi-cfg --hz 2000000` (or lower) if the persisted setting is faster.
|
|
161
|
+
- Shuttle enables SPI, sets TiMo into UPDATE_MODE by writing `0x40` to CONFIG, waits for the IRQ reboot window (0.6 s), and verifies bit 7 of STATUS before streaming data.
|
|
162
|
+
- `.cci` files contain a 4-byte header followed by 272-byte chunks. Because the TiMo FW loader accepts at most 255 contiguous bytes, each chunk is split into one `FW_BLOCK_CMD_1` transfer (0x8E + 254 bytes) and one `FW_BLOCK_CMD_2` transfer (0x8F + 18 bytes).
|
|
163
|
+
- The first chunk after the header carries metadata. After every 16 data chunks the device writes flash internally, so the CLI pauses for `--flush-wait-ms` (defaults to 500 ms) before continuing. When the whole image has been sent it waits `--final-wait-ms` (defaults to 1000 ms) to let TiMo finalize the update.
|
|
164
|
+
- Once STATUS clears UPDATE_MODE the command reads the VERSION register, prints FW/HW revisions, and confirms completion. If any step fails (IRQ bit 7, transport error, malformed `.cci`) the CLI aborts with a helpful message.
|
|
165
|
+
|
|
166
|
+
Tip: combine `--flush-wait-ms 0` and `--final-wait-ms 0` with a lab DUT when replaying the same firmware repeatedly, but keep the defaults when programming production hardware to honour the vendor timing guidelines.
|
|
167
|
+
|
|
168
|
+
|
|
151
169
|
### Using the Library from Python
|
|
152
170
|
|
|
153
171
|
Use the transport helpers for HIL tests with explicit request→response pairing:
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "lr-shuttle"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.8"
|
|
8
8
|
description = "CLI and Python client for host-side of json based serial communication with embedded device bridge."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lr-shuttle
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: CLI and Python client for host-side of json based serial communication with embedded device bridge.
|
|
5
5
|
Author-email: Jonas Estberger <jonas.estberger@lumenradio.com>
|
|
6
6
|
License: MIT
|
|
@@ -119,6 +119,7 @@ Commands implementing the SPI protocol as described at [docs.lumenradio.io/timot
|
|
|
119
119
|
| `shuttle timo read-reg --addr 0x05 --length 2` | Performs the two-phase TiMo register read sequence and decodes the resulting payload/IRQ flags. |
|
|
120
120
|
| `shuttle timo write-reg --addr 0x05 --data cafebabe` | Performs the two-phase TiMo register write sequence to write bytes to a register. |
|
|
121
121
|
| `shuttle timo read-dmx --length 12` | Reads the latest received DMX values from the TiMo device using a two-phase SPI sequence. |
|
|
122
|
+
| `shuttle timo update-fw TIMO.cci --port /dev/ttyUSB0` | Streams a TiMo `.cci` firmware image via FW_BLOCK commands (requires SPI ≤ 2 MHz and ≥ 255-byte transfers). |
|
|
122
123
|
|
|
123
124
|
All commands respect the global options declared on the root CLI (`--log`, `--seq-meta`, `--port`, etc.). Rich tables are used to render human-friendly summaries of responses and decoded payloads.
|
|
124
125
|
|
|
@@ -174,6 +175,23 @@ This will print a summary table with the length, data bytes (hex), and IRQ flags
|
|
|
174
175
|
- `--port` is your serial device
|
|
175
176
|
|
|
176
177
|
|
|
178
|
+
### TiMo Firmware Update
|
|
179
|
+
|
|
180
|
+
Use `shuttle timo update-fw` to push official `.cci` images (for example `timotwo-fx-b50f26ad.cci`; the companion `.hex` is provided for reference only) through the Shuttle bridge without touching an external programmer:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
shuttle timo update-fw timotwo-fx-b50f26ad.cci --port /dev/ttyUSB0
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- The command first checks `spi_caps.max_transfer_bytes` and the current SPI clock. Firmware updates require at least 255 bytes per `spi.xfer` call and a clock ≤ 2 MHz. Run `shuttle spi-cfg --hz 2000000` (or lower) if the persisted setting is faster.
|
|
187
|
+
- Shuttle enables SPI, sets TiMo into UPDATE_MODE by writing `0x40` to CONFIG, waits for the IRQ reboot window (0.6 s), and verifies bit 7 of STATUS before streaming data.
|
|
188
|
+
- `.cci` files contain a 4-byte header followed by 272-byte chunks. Because the TiMo FW loader accepts at most 255 contiguous bytes, each chunk is split into one `FW_BLOCK_CMD_1` transfer (0x8E + 254 bytes) and one `FW_BLOCK_CMD_2` transfer (0x8F + 18 bytes).
|
|
189
|
+
- The first chunk after the header carries metadata. After every 16 data chunks the device writes flash internally, so the CLI pauses for `--flush-wait-ms` (defaults to 500 ms) before continuing. When the whole image has been sent it waits `--final-wait-ms` (defaults to 1000 ms) to let TiMo finalize the update.
|
|
190
|
+
- Once STATUS clears UPDATE_MODE the command reads the VERSION register, prints FW/HW revisions, and confirms completion. If any step fails (IRQ bit 7, transport error, malformed `.cci`) the CLI aborts with a helpful message.
|
|
191
|
+
|
|
192
|
+
Tip: combine `--flush-wait-ms 0` and `--final-wait-ms 0` with a lab DUT when replaying the same firmware repeatedly, but keep the defaults when programming production hardware to honour the vendor timing guidelines.
|
|
193
|
+
|
|
194
|
+
|
|
177
195
|
### Using the Library from Python
|
|
178
196
|
|
|
179
197
|
Use the transport helpers for HIL tests with explicit request→response pairing:
|