1
0

knee auto tests

This commit is contained in:
Aiden
2026-05-26 18:35:13 +10:00
parent c007f2180c
commit a187214e06
5 changed files with 755 additions and 7 deletions

View File

@@ -43,9 +43,31 @@ Candidate mapping:
| Selector/value pair | Current meaning | | Selector/value pair | Current meaning |
| --- | --- | | --- | --- |
| `0x0007 = 0x8000/0x0000` | strongest CAM POWER lamp candidate | | `0x0007 = 0x8000/0x0000` | CAM POWER lamp blink confirmed by isolated run |
| `0x0015 = 0x8000/0x0000` | strongest CALL lamp candidate | | `0x0015 = 0x8000/0x0000` | CALL lamp blink confirmed; red tally also blinked in the same phase |
| `0x0012`, `0x0013`, `0x0016`, `0x0017`, `0x0018`, `0x001A` | BARS, MASTER, tally red/green candidates; exact assignment still needs isolation | | `0x0012`, `0x0013`, `0x0016`, `0x0017`, `0x0018`, `0x001A` | ordered candidates for SLAVE, green tally, BARS, MASTER, and neighboring lamp states |
Follow-up `lamp-isolate-cam-call` result:
- First phase blinked CAM POWER.
- Second phase blinked CALL and red tally.
Follow-up `lamp-isolate-known-neighbors` result:
- Visible order was SLAVE, then green tally, then BARS.
- The pattern repeated, and at one point SLAVE and BARS were visible together.
- Treat the ordered mapping as likely but not final until a fresh-boot single-selector run separates latch/persistence effects from the selector under test.
Follow-up `lamp-isolate-neighbor-single-boot` result:
| Fresh-boot candidate | Visible result |
| --- | --- |
| `0x0012 = 0x8000/0x0000` | no visible change reported |
| `0x0013 = 0x8000/0x0000` | SLAVE lamp |
| `0x0016 = 0x8000/0x0000` | camera tally green |
| `0x0017 = 0x8000/0x0000` | BARS lamp |
| `0x0018 = 0x8000/0x0000` | no visible result reported yet |
| `0x001A = 0x8000/0x0000` | no visible result reported yet |
This confirms that the host/CCU can directly drive panel lamps through selector-table writes. It also validates using the ROM dispatch-neighbor list around `0x0007` and `0x0015` as a high-value lamp map. This confirms that the host/CCU can directly drive panel lamps through selector-table writes. It also validates using the ROM dispatch-neighbor list around `0x0007` and `0x0015` as a high-value lamp map.
@@ -55,6 +77,7 @@ Visible result:
- KNEE AUTO lamp flashed a few times. - KNEE AUTO lamp flashed a few times.
- No other new visible result was reported. - No other new visible result was reported.
- Follow-up isolation saw KNEE AUTO toward the end of the run, then blinking.
Candidate selectors in that run: Candidate selectors in that run:
@@ -63,8 +86,25 @@ Candidate selectors in that run:
Interpretation: Interpretation:
- KNEE AUTO is likely in this broader status cluster. - KNEE AUTO is likely in this broader status cluster.
- Because the visible change happened toward the end, strongest next candidates are `0x00A7`, `0x00B7`, `0x00B9`, and `0x0110`, with `0x0092` kept as a guard candidate.
- Exact selector/value still needs isolation because the broad sweep changed several selectors in sequence. - Exact selector/value still needs isolation because the broad sweep changed several selectors in sequence.
Follow-up `lamp-isolate-knee-tail-single-boot` result:
| Fresh-boot candidate | Visible result |
| --- | --- |
| `0x0092` | iris AUTO/OFF behavior |
| `0x00A7` | no visible result reported |
| `0x00B7` | no visible result reported |
| `0x00B9` | KNEE AUTO |
| `0x0110` | KNEE AUTO |
Interpretation:
- `0x00B9` and `0x0110` are now the strongest KNEE AUTO candidates.
- Because two selectors can light the same lamp, the KNEE status may be split between camera status and panel/display state, or one selector may select the subsystem while the other sets the visible mode.
- The next useful step is a bit scan of `0x00B9` and `0x0110` to see whether `0x8000` is the only live bit or whether lower bits select other KNEE states.
## Follow-Up Isolation Scenarios ## Follow-Up Isolation Scenarios
Run these with the console visible and record the exact label shown when each lamp changes: Run these with the console visible and record the exact label shown when each lamp changes:
@@ -73,6 +113,9 @@ Run these with the console visible and record the exact label shown when each la
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-cam-call.json --parity E --log captures\lamp-isolate-cam-call.txt --result-json captures\lamp-isolate-cam-call-result.json .\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-cam-call.json --parity E --log captures\lamp-isolate-cam-call.txt --result-json captures\lamp-isolate-cam-call-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-known-neighbors.json --parity E --log captures\lamp-isolate-known-neighbors.txt --result-json captures\lamp-isolate-known-neighbors-result.json .\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-known-neighbors.json --parity E --log captures\lamp-isolate-known-neighbors.txt --result-json captures\lamp-isolate-known-neighbors-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-status-selectors.json --parity E --log captures\lamp-isolate-knee-status-selectors.txt --result-json captures\lamp-isolate-knee-status-selectors-result.json .\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-status-selectors.json --parity E --log captures\lamp-isolate-knee-status-selectors.txt --result-json captures\lamp-isolate-knee-status-selectors-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-neighbor-single-boot.json --parity E --log captures\lamp-isolate-neighbor-single-boot.txt --result-json captures\lamp-isolate-neighbor-single-boot-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-tail-single-boot.json --parity E --log captures\lamp-isolate-knee-tail-single-boot.txt --result-json captures\lamp-isolate-knee-tail-single-boot-result.json
.\.venv\Scripts\python.exe scripts\serial_scenario.py scenarios\lamp-isolate-knee-bit-scan.json --parity E --log captures\lamp-isolate-knee-bit-scan.txt --result-json captures\lamp-isolate-knee-bit-scan-result.json
``` ```
Method notes: Method notes:
@@ -80,3 +123,4 @@ Method notes:
- Record visible changes immediately during each labeled hold. Later `CONNECT: NOT ACT` cleanup is not selector evidence. - Record visible changes immediately during each labeled hold. Later `CONNECT: NOT ACT` cleanup is not selector evidence.
- If a selector causes a latch or unexpected mode, stop and keep the log instead of continuing the whole sweep. - If a selector causes a latch or unexpected mode, stop and keep the log instead of continuing the whole sweep.
- Prefer exact notes like `selector_0018_high -> tally red`, because the logs already preserve send timestamps and readback frames. - Prefer exact notes like `selector_0018_high -> tally red`, because the logs already preserve send timestamps and readback frames.
- For the single-boot follow-ups, each candidate gets a fresh power cycle. That is deliberate: it tests whether a lamp is truly driven by that selector rather than retained from a previous write.

View File

@@ -680,10 +680,10 @@ Bench lamp sweeps now prove that several panel outputs are directly driven by co
Newest confirmed behavior: Newest confirmed behavior:
- `lamp-known-button-selector-probe` made CAM, CALL, BARS, MASTER, and camera tally outputs flash individually. - `lamp-known-button-selector-probe` made CAM, CALL, BARS, MASTER, and camera tally outputs flash individually.
- `0x0007 = 0x8000/0x0000` is the strongest CAM POWER lamp candidate. - `0x0007 = 0x8000/0x0000` blinked CAM POWER in isolation.
- `0x0015 = 0x8000/0x0000` is the strongest CALL lamp candidate. - `0x0015 = 0x8000/0x0000` blinked CALL and red tally in isolation.
- Neighbor selectors `0x0012`, `0x0013`, `0x0016`, `0x0017`, `0x0018`, and `0x001A` likely contain BARS/MASTER/tally red/green assignments, pending isolation. - Fresh-boot isolation maps `0x0013` to SLAVE, `0x0016` to green tally, and `0x0017` to BARS for the `0x8000/0x0000` value pair.
- A broader status sweep made KNEE AUTO flash; candidate selectors are `0x0003`, `0x0040`, `0x0081`, `0x0092`, `0x00A7`, `0x00B7`, `0x00B9`, and `0x0110`. - Fresh-boot isolation maps `0x0092` to iris AUTO/OFF behavior, and maps both `0x00B9` and `0x0110` to KNEE AUTO behavior.
## What Is Still Unknown ## What Is Still Unknown

View File

@@ -0,0 +1,206 @@
{
"name": "lamp-isolate-knee-bit-scan",
"notes": [
"Bit-scan the two fresh-boot KNEE AUTO candidates, 0x00B9 and 0x0110.",
"Each selector gets its own fresh CONNECT OK seed, then high-byte bits are tested one at a time with clears between writes.",
"Record whether KNEE AUTO, KNEE manual, or any neighboring paint/detail lamp changes during each label."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_00b9",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_00b9",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_00b9_bit15_watch",
"frame": "00 01 39 80 00 E2",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_bit15",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_00b9_bit14_watch",
"frame": "00 01 39 40 00 22",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_bit14",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_00b9_bit13_watch",
"frame": "00 01 39 20 00 42",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_bit13",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_00b9_bit12_watch",
"frame": "00 01 39 10 00 72",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_bit12",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_00b9_bit11_watch",
"frame": "00 01 39 08 00 6A",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_bit11",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_00b9_lowff_watch",
"frame": "00 01 39 00 FF 9D",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_00b9_clear_after_lowff",
"frame": "00 01 39 00 00 62",
"listen": 0.70
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0110",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0110",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0110_bit15_watch",
"frame": "00 01 90 80 00 4B",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_bit15",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_0110_bit14_watch",
"frame": "00 01 90 40 00 8B",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_bit14",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_0110_bit13_watch",
"frame": "00 01 90 20 00 EB",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_bit13",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_0110_bit12_watch",
"frame": "00 01 90 10 00 DB",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_bit12",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_0110_bit11_watch",
"frame": "00 01 90 08 00 C3",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_bit11",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
},
{
"action": "send",
"label": "candidate_0110_lowff_watch",
"frame": "00 01 90 00 FF 34",
"listen": 1.30
},
{
"action": "send",
"label": "candidate_0110_clear_after_lowff",
"frame": "00 01 90 00 00 CB",
"listen": 0.70
}
]
}

View File

@@ -0,0 +1,260 @@
{
"name": "lamp-isolate-knee-tail-single-boot",
"notes": [
"Fresh-boot isolation for the late broad-status candidates after KNEE AUTO appeared toward the end of the previous run.",
"Selector 0x0092 is included as a guard before the stronger tail candidates 0x00A7, 0x00B7, 0x00B9, and 0x0110.",
"Each candidate tests high, clear, all bits, clear."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0092",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0092",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0092_high_watch",
"frame": "00 01 12 80 00 C9",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_0092_clear_after_high",
"frame": "00 01 12 00 00 49",
"listen": 0.90
},
{
"action": "send",
"label": "candidate_0092_all_bits_watch",
"frame": "00 01 12 FF FF 49",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_0092_clear_after_all",
"frame": "00 01 12 00 00 49",
"listen": 0.90
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_00a7",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_00a7",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_00a7_high_watch",
"frame": "00 01 27 80 00 FC",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00a7_clear_after_high",
"frame": "00 01 27 00 00 7C",
"listen": 0.90
},
{
"action": "send",
"label": "candidate_00a7_all_bits_watch",
"frame": "00 01 27 FF FF 7C",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00a7_clear_after_all",
"frame": "00 01 27 00 00 7C",
"listen": 0.90
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_00b7",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_00b7",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_00b7_high_watch",
"frame": "00 01 37 80 00 EC",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00b7_clear_after_high",
"frame": "00 01 37 00 00 6C",
"listen": 0.90
},
{
"action": "send",
"label": "candidate_00b7_all_bits_watch",
"frame": "00 01 37 FF FF 6C",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00b7_clear_after_all",
"frame": "00 01 37 00 00 6C",
"listen": 0.90
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_00b9",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_00b9",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_00b9_high_watch",
"frame": "00 01 39 80 00 E2",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00b9_clear_after_high",
"frame": "00 01 39 00 00 62",
"listen": 0.90
},
{
"action": "send",
"label": "candidate_00b9_all_bits_watch",
"frame": "00 01 39 FF FF 62",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_00b9_clear_after_all",
"frame": "00 01 39 00 00 62",
"listen": 0.90
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0110",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0110",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0110_high_watch",
"frame": "00 01 90 80 00 4B",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_0110_clear_after_high",
"frame": "00 01 90 00 00 CB",
"listen": 0.90
},
{
"action": "send",
"label": "candidate_0110_all_bits_watch",
"frame": "00 01 90 FF FF CB",
"listen": 1.80
},
{
"action": "send",
"label": "candidate_0110_clear_after_all",
"frame": "00 01 90 00 00 CB",
"listen": 0.90
}
]
}

View File

@@ -0,0 +1,238 @@
{
"name": "lamp-isolate-neighbor-single-boot",
"notes": [
"Fresh-boot isolation for the selector cluster that produced SLAVE, green tally, BARS, MASTER, and related lamps.",
"Each candidate starts from a fresh power cycle and CONNECT OK seed so latched lamps from the previous selector cannot contaminate the result.",
"Record the visible lamp during the high hold and whether the low write clears it."
],
"steps": [
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0012",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0012",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0012_high_watch",
"frame": "00 00 12 80 00 C8",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_0012_low_clear_watch",
"frame": "00 00 12 00 00 48",
"listen": 1.20
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0013",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0013",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0013_high_watch",
"frame": "00 00 13 80 00 C9",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_0013_low_clear_watch",
"frame": "00 00 13 00 00 49",
"listen": 1.20
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0016",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0016",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0016_high_watch",
"frame": "00 00 16 80 00 CC",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_0016_low_clear_watch",
"frame": "00 00 16 00 00 4C",
"listen": 1.20
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0017",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0017",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0017_high_watch",
"frame": "00 00 17 80 00 CD",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_0017_low_clear_watch",
"frame": "00 00 17 00 00 4D",
"listen": 1.20
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_0018",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_0018",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_0018_high_watch",
"frame": "00 00 18 80 00 C2",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_0018_low_clear_watch",
"frame": "00 00 18 00 00 42",
"listen": 1.20
},
{
"action": "power_cycle",
"off_seconds": 1.5
},
{
"action": "wait_ready",
"heartbeats": 2,
"timeout": 10.0,
"require": true
},
{
"action": "drain",
"seconds": 0.25
},
{
"action": "send",
"label": "selector_zero_ok_seed_1_for_001a",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "selector_zero_ok_seed_2_for_001a",
"frame": "00 00 00 80 00 DA",
"listen": 0.60
},
{
"action": "send",
"label": "candidate_001a_high_watch",
"frame": "00 00 1A 80 00 C0",
"listen": 2.00
},
{
"action": "send",
"label": "candidate_001a_low_clear_watch",
"frame": "00 00 1A 00 00 40",
"listen": 1.20
}
]
}