responses
This commit is contained in:
@@ -16,6 +16,10 @@ Observed on the RCP-TX7 10-pin remote connector/cable during restoration work:
|
||||
map below.
|
||||
- Yellow and yellow-white conductors are present in the cable but did not map to
|
||||
connector pins during continuity testing.
|
||||
- Multimeter reading from pin 9 ground to pin 4 serial data: about -9 V.
|
||||
- Multimeter reading from pin 9 ground to pin 7 serial data: about +0.037 V.
|
||||
- Pins 4 and 7 were the only serial-related combinations that produced a
|
||||
meaningful multimeter result during this check.
|
||||
- With power present on pins 9 and 10, the panel shows a green `PANEL ACTIVE`
|
||||
light.
|
||||
- The inside of the 10-pin cable contains 12 wires total.
|
||||
@@ -31,6 +35,10 @@ Immediate implications:
|
||||
- The three twisted pairs are likely important candidates for serial data,
|
||||
composite video, and/or power/ground pairing, but this should be confirmed by
|
||||
continuity testing rather than color or twist assumptions.
|
||||
- Pin 4 measuring around -9 V relative to pin 9 strongly suggests true RS-232
|
||||
level idle on at least the RCP-to-CCU/camera data line.
|
||||
- Pin 7 near 0 V may be inactive/floating until a CCU or camera drives the
|
||||
return data line.
|
||||
|
||||
### Working Cable Map
|
||||
|
||||
@@ -70,4 +78,362 @@ Suggested next observations to capture:
|
||||
3. Confirm whether yellow and yellow-white connect to shield, shell, or one end
|
||||
only.
|
||||
4. Resistance between pins 5, 6, and 9 with the cable disconnected.
|
||||
5. Scope/meter idle voltage on pins 4 and 7 relative to pins 5/6 and pin 9.
|
||||
5. Scope idle voltage and activity on pins 4 and 7 relative to pins 5/6 and
|
||||
pin 9 while pressing panel controls and, later, while connected to a CCU or
|
||||
camera.
|
||||
|
||||
## Serial Capture Setup
|
||||
|
||||
Initial USB serial adapter wiring for passive listening:
|
||||
|
||||
| Adapter terminal | RCP-TX7 cable pin | Cable color | Purpose |
|
||||
| --- | ---: | --- | --- |
|
||||
| `GND` | 9 | brown | Shared reference / DC return |
|
||||
| `RXD` | 4 | orange | Listen to RCP-to-CCU/camera serial data |
|
||||
|
||||
Do not connect adapter `TXD` during the first capture pass. Pin 4 measured about
|
||||
-9 V relative to pin 9, so use the adapter's RS-232 side, not TTL UART mode.
|
||||
|
||||
Capture helper:
|
||||
|
||||
```powershell
|
||||
python -m pip install pyserial
|
||||
python scripts/serial_sniff.py --list
|
||||
python scripts/serial_sniff.py --port COM3 --baud 38400 --ascii
|
||||
python scripts/serial_sniff.py --port COM3 --baud 38400 --frame-size 6 --log captures/rcp-pin4.txt
|
||||
```
|
||||
|
||||
Replace `COM3` with the adapter port shown by `--list` or Windows Device
|
||||
Manager. While the script is running, press simple RCP controls and watch for
|
||||
new hex bytes.
|
||||
|
||||
### 2026-05-13 Initial Pin 4 Capture
|
||||
|
||||
With the adapter in RS-232 mode, adapter `RXD` connected to RCP pin 4, and
|
||||
adapter `GND` connected to pin 9, the stream produced repeating 6-byte patterns:
|
||||
|
||||
```text
|
||||
00 00 00 00 80 DA
|
||||
00 00 07 80 00 DD
|
||||
```
|
||||
|
||||
Observed behavior:
|
||||
|
||||
- Frames repeat roughly every 200 ms during the sample.
|
||||
- The stream sometimes appeared split as `00` followed by five bytes, which is
|
||||
likely a read-timeout/chunking artifact rather than a protocol feature.
|
||||
- Button presses did not obviously correlate with a visible byte change in the
|
||||
first capture.
|
||||
|
||||
Current interpretation:
|
||||
|
||||
- This looks like a regular RCP-origin heartbeat/status transmission on pin 4,
|
||||
not random noise.
|
||||
- Because only pin 4 is connected, this may be the panel repeatedly trying to
|
||||
announce itself or poll a missing CCU/camera.
|
||||
- Pin 7 measured near 0 V and is probably quiet until a CCU/camera drives the
|
||||
return channel.
|
||||
|
||||
Next capture passes:
|
||||
|
||||
1. Use `--frame-size 6` to avoid misleading `1 + 5` packet splits.
|
||||
2. Capture a quiet baseline for 30 seconds.
|
||||
3. Capture separate files while pressing one control repeatedly, naming the
|
||||
action in the filename.
|
||||
4. Later, capture pin 7 when connected to a real CCU/camera or a controlled
|
||||
test transmitter.
|
||||
|
||||
### 2026-05-13 Baseline vs CAM POWER Capture
|
||||
|
||||
Capture files:
|
||||
|
||||
- `captures/rcp-pin4-baseline.txt`
|
||||
- `captures/rcp-pin4-cam-power.txt`
|
||||
- `captures/rcp-pin4-call.txt`
|
||||
|
||||
Frame counts from the available logs:
|
||||
|
||||
| Capture | Frame | Count | Current label |
|
||||
| --- | --- | ---: | --- |
|
||||
| baseline | `00 00 00 00 80 DA` | 67 | idle heartbeat |
|
||||
| CAM POWER | `00 00 00 00 80 DA` | 23 | idle heartbeat |
|
||||
| CAM POWER | `00 00 07 80 00 DD` | 4 | CAM POWER candidate |
|
||||
| CALL | `00 00 00 00 80 DA` | 17 | idle heartbeat |
|
||||
| CALL | `00 00 15 80 00 CF` | 4 | CALL candidate, state/high bit set |
|
||||
| CALL | `00 00 15 00 00 4F` | 4 | CALL candidate, state/high bit clear |
|
||||
|
||||
Current interpretation:
|
||||
|
||||
- The baseline capture contains only `00 00 00 00 80 DA`.
|
||||
- Pressing `CAM POWER` introduces `00 00 07 80 00 DD`.
|
||||
- Pressing `CALL` introduces `00 00 15 80 00 CF` and `00 00 15 00 00 4F`.
|
||||
- Other tested buttons did not obviously produce unique frames while the panel
|
||||
was not connected to a CCU/camera.
|
||||
- `CAM POWER` and `CALL` may be among the few controls the panel transmits even
|
||||
without a completed host/CCU session.
|
||||
- The CALL frames differ by byte 4 (`80` vs `00`) and final byte (`CF` vs `4F`),
|
||||
suggesting a state bit plus checksum or complement-style trailing byte.
|
||||
- Current checksum hypothesis: byte 6 is XOR checksum with seed `0x5A` over the
|
||||
first five bytes. Examples:
|
||||
- `5A xor 00 xor 00 xor 00 xor 00 xor 80 = DA`
|
||||
- `5A xor 00 xor 00 xor 07 xor 80 xor 00 = DD`
|
||||
- `5A xor 00 xor 00 xor 15 xor 80 xor 00 = CF`
|
||||
- `5A xor 00 xor 00 xor 15 xor 00 xor 00 = 4F`
|
||||
|
||||
Helper for future captures:
|
||||
|
||||
```powershell
|
||||
python scripts/analyze_capture.py captures/rcp-pin4-baseline.txt captures/rcp-pin4-cam-power.txt captures/rcp-pin4-call.txt
|
||||
```
|
||||
|
||||
## Host Response Experiments
|
||||
|
||||
The RCP currently appears to be in an offline heartbeat state. With no CCU/camera
|
||||
response present, only `CAM POWER` and `CALL` have been observed to send unique
|
||||
frames beyond the heartbeat. The next protocol step is to learn what the RCP
|
||||
expects on pin 7 (`CCU/camera -> RCP`).
|
||||
|
||||
Important wiring for host-response tests:
|
||||
|
||||
| Adapter terminal | RCP-TX7 cable pin | Cable color | Purpose |
|
||||
| --- | ---: | --- | --- |
|
||||
| `GND` | 9 | brown | Shared reference / DC return |
|
||||
| `TXD` | 7 | purple | Candidate host-to-RCP transmit line |
|
||||
|
||||
Suggested safety precautions:
|
||||
|
||||
- Use the adapter's RS-232 side, not TTL UART.
|
||||
- Keep adapter `RXD` on pin 4 if possible so the RCP output is still logged.
|
||||
- Add a series resistor, for example 1 k to 4.7 k, between adapter `TXD` and pin
|
||||
7 for early experiments.
|
||||
- Send one candidate frame at a time or repeat at a slow cadence. Avoid brute
|
||||
forcing unknown byte ranges.
|
||||
- Watch for changes in heartbeat, LCD state, panel lock state, or new frames on
|
||||
pin 4.
|
||||
|
||||
Frame sender:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_send_frame.py --port COM3 --dry-run
|
||||
python scripts/serial_send_frame.py --port COM3 --frame "00 00 00 00 80 DA" --repeat 5 --interval 0.2
|
||||
```
|
||||
|
||||
On Windows, a COM port is usually exclusive, so the sniffer and sender cannot
|
||||
open the same adapter at the same time. Use the combined probe script when RXD
|
||||
is connected to pin 4 and TXD is connected to pin 7:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_probe_response.py --port COM3 --tx-frame "00 00 00 00 80 DA" --repeat 5 --interval 0.2 --log captures/rcp-response-test.txt
|
||||
```
|
||||
|
||||
This listens first, sends the candidate response from the same serial session,
|
||||
then keeps listening for changes on pin 4.
|
||||
|
||||
Candidate first response:
|
||||
|
||||
- `00 00 00 00 80 DA` - mirror the observed heartbeat as a possible no-op/ack.
|
||||
|
||||
If mirroring the heartbeat changes nothing, the next low-risk approach is to
|
||||
capture a real CCU/camera response rather than guessing. If no host is available,
|
||||
try only checksum-valid, documented-frame-shape candidates and record every
|
||||
attempt in a separate capture log.
|
||||
|
||||
### 2026-05-13 Heartbeat Mirror Response Result
|
||||
|
||||
Experiment:
|
||||
|
||||
- Adapter `TXD` connected to RCP pin 7.
|
||||
- Sent `00 00 00 00 80 DA` on the host-to-RCP line as a mirrored heartbeat /
|
||||
possible no-op acknowledgement.
|
||||
- Capture file: `captures/rcp-response-heartbeat-mirror.txt`.
|
||||
|
||||
Observed result:
|
||||
|
||||
- The RCP screen changed to `CONNECT: NOT ACT`.
|
||||
- During this capture, pin 4 still transmitted only `00 00 00 00 80 DA`.
|
||||
- Frame count: 59 received heartbeat frames, 10 transmitted mirrored heartbeat
|
||||
frames.
|
||||
- Pin 4 heartbeat timing became more frequent during the response window, then
|
||||
returned to the slower baseline cadence afterward.
|
||||
|
||||
Current interpretation:
|
||||
|
||||
- The RCP is detecting return-channel traffic on pin 7.
|
||||
- Mirroring the heartbeat is enough to move the panel out of the simple offline
|
||||
state, but it does not complete active host/CCU negotiation.
|
||||
- `NOT ACT` likely means connected/not active, connected/not activated, or a
|
||||
similar state where the link is electrically/protocol-visible but no valid
|
||||
control session has been established.
|
||||
- The RCP did not emit a new command/status frame on pin 4 in response to the
|
||||
mirrored heartbeat, so the next handshake step is probably not simply an echo
|
||||
of its heartbeat.
|
||||
|
||||
Additional checksum-valid response tests:
|
||||
|
||||
| Capture | TX frame | RX result on pin 4 | Screen result |
|
||||
| --- | --- | --- | --- |
|
||||
| `captures/rcp-response-zero-state.txt` | `00 00 00 00 00 5A` | heartbeat only | `CONNECT: NOT ACT` |
|
||||
| `captures/rcp-response-state-byte4.txt` | `00 00 00 80 00 DA` | heartbeat only | `CONNECT: NOT ACT` |
|
||||
| `captures/rcp-response-invalid-checksum.txt` | `00 00 00 00 80 00` | heartbeat only | `CONNECT: NOT ACT` |
|
||||
| TXD connected, no transmitted bytes | RS-232 idle only | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Single-byte test | `00` | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Single-byte test | `FF` | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Short-frame test | `00 00 00` | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Frame-length test | `00 00 00 00` | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Frame-length test | `00 00 00 00 80` | heartbeat only | no `CONNECT: NOT ACT` |
|
||||
| Frame-length test | `00 00 00 00 80 DA 00` | heartbeat only | `CONNECT: NOT ACT` |
|
||||
|
||||
Updated interpretation:
|
||||
|
||||
- `CONNECT: NOT ACT` is probably a link-present state, not proof of a correct
|
||||
CCU handshake.
|
||||
- The RCP reacts to several checksum-valid 6-byte frames on pin 7, but continues
|
||||
sending only the pin 4 heartbeat.
|
||||
- An intentionally invalid checksum frame also produced `CONNECT: NOT ACT`, so
|
||||
that display state does not prove checksum acceptance.
|
||||
- The response needed to enter an active control session likely needs a specific
|
||||
status/identity/activation frame, not just a valid no-op frame shape.
|
||||
- TXD connected at idle without transmitted bytes did not produce
|
||||
`CONNECT: NOT ACT`, so the display state appears to require received byte
|
||||
activity on pin 7, not merely a driven RS-232 idle level.
|
||||
- Single-byte and three-byte transmissions did not produce `CONNECT: NOT ACT`,
|
||||
so the RCP is likely recognizing a minimum frame length or parser shape rather
|
||||
than arbitrary serial bytes.
|
||||
- Four-byte and five-byte transmissions did not produce `CONNECT: NOT ACT`, but
|
||||
a seven-byte transmission beginning with the known six-byte heartbeat did.
|
||||
This suggests the first six bytes are enough to trigger the parser/link state,
|
||||
and the seventh byte may be ignored, buffered for a later frame, or treated as
|
||||
extra data after the recognized packet.
|
||||
- None of the tested host frames have caused the RCP to emit anything on pin 4
|
||||
except the heartbeat.
|
||||
|
||||
Command-field response tests, using frame shape `00 00 CMD 00 80 CHECKSUM`:
|
||||
|
||||
| Capture | TX frame | Checksum | Screen result | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `captures/rcp-response-cmd01.txt` | `00 00 01 00 80 DB` | valid | `CONNECT: NOT ACT` | 6-byte command-shaped frame accepted enough to change display. |
|
||||
| `captures/rcp-response-cmd02.txt` | `00 00 02 00 80 DB` | invalid | `CONNECT: NOT ACT` | Bad checksum still changed display. |
|
||||
| `captures/rcp-response-cmd02.txt` | `00 00 02 00 80 D8` | valid | `CONNECT: NOT ACT` | Valid checksum also changed display. |
|
||||
| `captures/rcp-response-cmd03.txt` | `00 00 03 00 80 D9` | valid | `CONNECT: NOT ACT` | 6-byte command-shaped frame accepted enough to change display. |
|
||||
| `captures/rcp-response-cmd04.txt` | `00 00 7F 00 80 A5` | valid | no screen change | First observed checksum-valid 6-byte frame that does not trigger `CONNECT: NOT ACT`. |
|
||||
| `captures/rcp-response-cmd05.txt` | `00 00 80 00 80 5A` | valid | `CONNECT: NOT ACT` | 6-byte command-shaped frame accepted enough to change display. |
|
||||
|
||||
Implications from command-field tests:
|
||||
|
||||
- Screen change is not simply based on frame length or checksum validity.
|
||||
- The command/status byte matters: `0x7F` appears ignored or treated as
|
||||
non-link-establishing, despite a valid checksum.
|
||||
- Tested commands `0x00`, `0x01`, `0x02`, `0x03`, and `0x80` can trigger
|
||||
`CONNECT: NOT ACT`; `0x7F` did not.
|
||||
- The RCP operating manual notes that `CAM POWER`, `MASTER`/`SLAVE`, and some
|
||||
monitor functions are available only when connected to a CCU, so active state
|
||||
may depend on CCU identity/status bits.
|
||||
|
||||
Next low-risk response experiments:
|
||||
|
||||
1. Repeat the same test with logging enabled so the pin 4 output before, during,
|
||||
and after `CONNECT: NOT ACT` is captured.
|
||||
2. Try sending the mirrored heartbeat continuously at a cadence close to the RCP
|
||||
heartbeat, for example every 0.6 seconds, and watch whether the display state
|
||||
changes.
|
||||
3. Probe semantic fields within the six-byte frame shape, changing one byte at
|
||||
a time and logging both screen state and pin 4 output. Prioritize small
|
||||
command values and avoid broad brute-force sweeps.
|
||||
4. Prefer capturing a real CCU/camera pin 7 response before broad guessing.
|
||||
|
||||
### Command Sweep Helper
|
||||
|
||||
A cautious command-byte sweep helper is available at
|
||||
`scripts/serial_sweep_commands.py`. It sends only checksum-valid six-byte frames
|
||||
using the current frame/checksum hypothesis and marks any RCP output that is not
|
||||
the known heartbeat.
|
||||
|
||||
Recommended first sweep:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sweep_commands.py --port COM5 --start 0x00 --end 0x20 --after-each 1.0 --log captures/rcp-sweep-cmd-00-20.txt
|
||||
```
|
||||
|
||||
Optional dry run:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sweep_commands.py --port COM5 --start 0x00 --end 0x20 --dry-run
|
||||
```
|
||||
|
||||
Use small ranges and keep watching the RCP screen while the sweep runs. The log
|
||||
captures TX/RX bytes, but it cannot record screen messages unless they are noted
|
||||
manually afterward.
|
||||
|
||||
The `0x00-0x20` sweep produced `CONNECT: NOT ACT` roughly halfway through the
|
||||
run, but the exact command was not recorded in the log. Rerun a narrower range
|
||||
with manual screen prompts:
|
||||
|
||||
```powershell
|
||||
python scripts/serial_sweep_commands.py --port COM5 --start 0x0C --end 0x14 --after-each 1.2 --prompt-screen --log captures/rcp-sweep-cmd-0c-14-screen.txt
|
||||
```
|
||||
|
||||
At each prompt, press Enter for no screen change, type `CONNECT: NOT ACT` when
|
||||
that appears, or type `q` to stop.
|
||||
|
||||
Prompted sweep result:
|
||||
|
||||
- Capture: `captures/rcp-sweep-cmd-0c-14-screen.txt`.
|
||||
- The RCP was reset after each screen trigger to clear its state, so recorded
|
||||
triggers should be treated as independent fresh observations.
|
||||
- First recorded screen marker: after command `0x0C`, frame
|
||||
`00 00 0C 00 80 D6`, screen `CONNECT: NOT ACT`.
|
||||
- Later manual screen markers were recorded after `0x0D`, `0x10`, `0x11`,
|
||||
`0x12`, `0x13`, and `0x14`.
|
||||
- No manual screen markers were recorded after `0x0E` or `0x0F`.
|
||||
- Pin 4 output remained the heartbeat `00 00 00 00 80 DA` throughout.
|
||||
|
||||
Interpretation:
|
||||
|
||||
- Commands `0x0C`, `0x0D`, `0x10`, `0x11`, `0x12`, `0x13`, and `0x14` have
|
||||
independent evidence of triggering `CONNECT: NOT ACT` in this sweep.
|
||||
- Commands `0x0E` and `0x0F` did not have a screen marker recorded in this
|
||||
sweep and are current non-trigger candidates.
|
||||
- Because pin 4 stayed heartbeat-only, this state change is visible on the LCD
|
||||
but does not yet produce a new RCP-to-host serial response.
|
||||
|
||||
Second prompted sweep result:
|
||||
|
||||
- Capture: `captures/rcp-sweep-cmd-15-30-screen.txt`.
|
||||
- The log includes one partial/restarted pass at the beginning, then a fuller
|
||||
prompted sweep through `0x30`.
|
||||
- Pin 4 output remained the heartbeat `00 00 00 00 80 DA` throughout.
|
||||
|
||||
Commands with recorded `CONNECT: NOT ACT` screen markers:
|
||||
|
||||
| Command | TX frame |
|
||||
| ---: | --- |
|
||||
| `0x15` | `00 00 15 00 80 CF` |
|
||||
| `0x16` | `00 00 16 00 80 CC` |
|
||||
| `0x17` | `00 00 17 00 80 CD` |
|
||||
| `0x18` | `00 00 18 00 80 C2` |
|
||||
| `0x19` | `00 00 19 00 80 C3` |
|
||||
| `0x1A` | `00 00 1A 00 80 C0` |
|
||||
| `0x1B` | `00 00 1B 00 80 C1` |
|
||||
| `0x1C` | `00 00 1C 00 80 C6` |
|
||||
| `0x1D` | `00 00 1D 00 80 C7` |
|
||||
| `0x28` | `00 00 28 00 80 F2` |
|
||||
| `0x29` | `00 00 29 00 80 F3` |
|
||||
| `0x2C` | `00 00 2C 00 80 F6` |
|
||||
| `0x2D` | `00 00 2D 00 80 F7` |
|
||||
| `0x30` | `00 00 30 00 80 EA` |
|
||||
|
||||
Commands with no recorded screen marker in this sweep:
|
||||
|
||||
```text
|
||||
0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25
|
||||
0x26 0x27 0x2A 0x2B 0x2E 0x2F
|
||||
```
|
||||
|
||||
Emerging pattern:
|
||||
|
||||
- Some command byte ranges trigger `CONNECT: NOT ACT` while nearby checksum-valid
|
||||
commands do not.
|
||||
- Triggering still does not make the RCP transmit anything except the heartbeat.
|
||||
- `CONNECT: NOT ACT` appears to be a parser-recognized but not session-active
|
||||
state. It may indicate the RCP recognizes the command class as CCU-like, but
|
||||
the remaining status/identity/activation fields are wrong or incomplete.
|
||||
|
||||
Reference in New Issue
Block a user