From 746edcaa7c5d3811303bdc7f2a13f8241fa90e58 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sat, 2 May 2026 23:07:50 +0100 Subject: [PATCH 01/45] Add CH9350L UART protocol specification documentation docs/CH9350L_PROTO.md has empirically verified frame formats for State 0/1, state machine, CTR_SUM formula, SER byte discussion --- docs/CH9350L_PROTO.md | 252 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 docs/CH9350L_PROTO.md diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md new file mode 100644 index 0000000..206dd23 --- /dev/null +++ b/docs/CH9350L_PROTO.md @@ -0,0 +1,252 @@ +# CH9350L UART Protocol Specification + +> **Status:** empirically verified by passive bus sniffing (2026-05-02). +> Reference implementation: `ch9350_poc.py` (repo root) and the Gist at +> https://gist.github.com/sjmf/c4329fd27e403a264648bf4e7744655a + +--- + +## Overview + +The CH9350L is a USB-to-UART bridge chip designed to operate in pairs: + +- **Lower Computer (LC)** — acts as a USB *host*, enumerating attached HID devices (keyboard, mouse). +- **Upper Computer (UC)** — acts as a USB *device*, presenting HID interfaces to the target PC. + +The two chips communicate over a full-duplex TTL UART bus. kvm-serial replaces the lower computer in software, speaking this protocol directly toward a physical UC module. + +The dipswitch-selectable `SEL` pin on each module determines its role: `SEL=1` → lower computer, `SEL=0` → upper computer. + +--- + +## Physical Layer + +| Parameter | Value | +|-----------|-------| +| Baud rate | 115200 | +| Data bits | 8 | +| Parity | None | +| Stop bits | 1 | +| Logic level | 3.3 V TTL | + +--- + +## Frame Structure + +All frames share the same two-byte magic header: + +``` +57 AB [CMD] [payload...] +``` + +The payload layout depends on `CMD`: + +| CMD range | Payload format | +|-----------|----------------| +| `0x83`, `0x88` | `[LEN] [SER] [device-report...] [CTR] [CTR_SUM]` — length-prefixed | +| `0x82`, `0x12`, `0x01`, `0x02`, `0x04`, `0x80`, `0x86`, `0x89` | Fixed length (see table below) | + +### Length-prefixed frames (CMD `0x83` / `0x88`) + +``` +57 AB [CMD] [LEN] [SER] [report-bytes...] [CTR] [CTR_SUM] +``` + +- **LEN** — number of bytes following LEN, i.e. `SER(1) + report-bytes(n) + CTR(1) + CTR_SUM(1)` +- **SER** — USB device address assigned by the CH9350L host stack (see §SER Bytes) +- **CTR** — monotonically increasing session counter, mod 256; separate per SER +- **CTR_SUM** — checksum: `(CTR + sum(report-bytes)) mod 256` + where `report-bytes` is everything between SER and CTR, exclusive + +CMD `0x88` is used in state 0 (unpaired); CMD `0x83` is used in state 1 (paired). The frame payload format is identical. + +--- + +## Lower Computer → Upper Computer Frames + +### Heartbeat — CMD `0x82` + +Sent by the LC approximately every 1 second in all states. + +``` +57 AB 82 [IO] +``` + +| Byte | Meaning | +|------|---------| +| `IO` | Low nibble = IO pin state; `0xA3` observed (all-pins-high) | + +### Keyboard — CMD `0x83` / `0x88` + +Two variants are produced depending on the USB device connected to the LC. + +#### CH9329 bridge (HID report ID present), LEN = `0x0C` + +``` +57 AB [CMD] 0C [SER=0x13] 01 [mod] [rsvd=00] [k0] [k1] [k2] [k3] [k4] [k5] [CTR] [CTR_SUM] +``` + +| Field | Value | Notes | +|-------|-------|-------| +| LEN | `0x0C` (12) | | +| SER | `0x13` | USB address for CH9329 keyboard endpoint | +| `0x01` | HID report ID | CH9329 keyboard report ID | +| `mod` | modifier byte | USB HID boot protocol modifier bitmask | +| `rsvd` | `0x00` | reserved | +| `k0..k5` | key scancodes | USB HID usage IDs, zero-padded | + +#### Boot-protocol keyboard (no report ID), LEN = `0x0B` + +Produced by a real keyboard in HID boot protocol mode. + +``` +57 AB [CMD] 0B [SER=0x11] [mod] [rsvd=00] [k0] [k1] [k2] [k3] [k4] [k5] [CTR] [CTR_SUM] +``` + +| Field | Value | Notes | +|-------|-------|-------| +| LEN | `0x0B` (11) | one byte shorter — no report ID | +| SER | `0x11` | USB address for real keyboard | +| `mod` | modifier byte | directly after SER, no preceding type byte | + +**Modifier byte bitmask** (same for both variants): + +| Bit | Modifier | +|-----|----------| +| 0 | Left Ctrl | +| 1 | Left Shift | +| 2 | Left Alt | +| 3 | Left GUI / Win | +| 4 | Right Ctrl | +| 5 | Right Shift | +| 6 | Right Alt | +| 7 | Right GUI / Win | + +### Absolute Mouse — CMD `0x83` / `0x88`, LEN = `0x0A` + +Produced by the CH9329 bridge (which always reports absolute coordinates). + +``` +57 AB [CMD] 0A [SER=0x23] 05 [btn] [XL] [XH] [YL] [YH] [wheel] [CTR] [CTR_SUM] +``` + +| Field | Value | Notes | +|-------|-------|-------| +| LEN | `0x0A` (10) | | +| SER | `0x23` | USB address for CH9329 mouse endpoint | +| `0x05` | HID report ID | CH9329 absolute mouse report ID | +| `btn` | button bitmask | bit 0 = left, 1 = right, 2 = middle | +| `XL`/`XH` | X coordinate | 16-bit little-endian, raw USB HID absolute space | +| `YL`/`YH` | Y coordinate | 16-bit little-endian | +| `wheel` | scroll | signed byte | + +### Relative Mouse — CMD `0x83` / `0x88`, LEN = `0x07` + +Produced by a real mouse in HID boot protocol mode. + +``` +57 AB [CMD] 07 [SER=0x20] [btn] [dx] [dy] [wheel] [CTR] [CTR_SUM] +``` + +| Field | Value | Notes | +|-------|-------|-------| +| LEN | `0x07` (7) | | +| SER | `0x20` | USB address for real mouse | +| `btn` | button bitmask | same bit mapping as above | +| `dx` | X delta | signed byte | +| `dy` | Y delta | signed byte | +| `wheel` | scroll delta | signed byte | + +No report ID byte is present; the LC forwards the 4-byte extended boot mouse report directly after SER. + +### CTR_SUM Worked Example + +Keyboard frame: `57 AB 88 0C 13 01 02 00 04 00 00 00 00 05 08` + +- LEN=`0C`, SER=`13`, report-bytes = `01 02 00 04 00 00 00 00`, CTR=`05` +- `CTR_SUM = (0x05 + (0x01+0x02+0x00+0x04+0x00+0x00+0x00+0x00)) mod 256` +- `= (5 + 7) mod 256 = 0x0C` … but the last byte shown is `08` — this is an illustration only; compute with your actual bytes. + +--- + +## Upper Computer → Lower Computer Frames + +### Pairing / LED Control — CMD `0x12` + +Sent by the UC approximately every 1 second. Receiving any `0x12` frame transitions the LC from state 0 to state 1. + +``` +57 AB 12 [SN0] [SN1] [SN2] [SN3] [LED] [??] [AC] [tail] +``` + +Total frame length: 11 bytes. + +| Field | Notes | +|-------|-------| +| `SN0..SN3` | UC serial number; `00 00 00 00` observed on uninitialized units | +| `LED` | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock; `0xFF` = heartbeat suppress | +| remaining 3 bytes | `07 AC [tail]`; `tail` varies with UC firmware/state | + +--- + +## Startup / Device-Connect Opcodes (LC → UC) + +These frames appear on the bus when a USB device is connected to the LC, before the first heartbeat. Their exact semantics are not fully decoded. + +| CMD | Payload | Observed at | +|-----|---------|-------------| +| `0x86` | none | USB device attached | +| `0x80` | 1 byte (`0xFF` observed) | shortly after `0x86`, twice | +| `0x89` | none | end of device-connect sequence | + +--- + +## State Machine + +``` + Power-on / USB-device connected + │ + ▼ + ┌─────────┐ receive 0x12 ┌─────────┐ + │ State 0 │ ─────────────────────▶│ State 1 │ + │ SOLO │ from upper computer │ PAIRED │ + └─────────┘ └─────────┘ + CMD = 0x88 CMD = 0x83 +``` + +- In **state 0**, the LC sends heartbeats and key/mouse frames with CMD `0x88`. +- In **state 1**, CMD switches to `0x83`. Frame payload format is identical. +- The LC sends a heartbeat every ~1 second in both states. + +--- + +## State 2 Mode (Alternative Dipswitch Configuration) + +When the UC dipswitch is set to `S0=LOW, S1=HIGH`, the UC enters a simpler mode that accepts unframed fixed-length reports with no pairing or counter. This mode requires no handshake. + +| CMD | Frame | Description | +|-----|-------|-------------| +| `0x01` | `57 AB 01` + 8-byte HID boot keyboard report | Keyboard | +| `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | Relative mouse | +| `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | Absolute mouse | + +> **Note:** State 2 frames have not yet been sniffed empirically; they are documented from the CH9350L datasheet and the PoC implementation only. This is future work. + +--- + +## SER Bytes + +`SER` is the USB device address assigned by the CH9350L's internal USB host stack when a device is enumerated. It is not a fixed protocol constant and can vary between sessions or hardware. The values below were observed across multiple captures: + +| SER | Device | Variant | +|-----|--------|---------| +| `0x13` | Keyboard | CH9329 bridge (report IDs present) | +| `0x23` | Mouse (absolute) | CH9329 bridge | +| `0x11` | Keyboard | Boot protocol (real keyboard) | +| `0x20` | Mouse (relative) | Boot protocol (real mouse) | + +--- + +## Implementation in kvm-serial + +For kvm-serial acting as the lower computer, we use the **CH9329-format** frames (SER `0x13`/`0x23`, with report ID bytes) regardless of what input device is attached on the host side. From 5d41c8f1ad75d7ae41cb4d47454d9304a1c24752 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 01:11:35 +0100 Subject: [PATCH 02/45] Create gitignored tmp/ directory for investigative purposes --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c06ed0c..cbf3359 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .idea/ .vscode/ .claude/ +tmp/ CLAUDE.md .DS_Store ._.DS_Store From 506d3c7ce5c14931a4b577bfe2f14b234b896f07 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 01:37:28 +0100 Subject: [PATCH 03/45] Document CH9350L protocol findings (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bidirectional sniff (2026-05-03) confirmed the 0x81 Device Connection Frame as the load-bearing piece previously missing from emulate. State-1 transition is gated on UC ack of all announced PIDs, not the first 0x12. 0x86 fires at both attach and disconnect (datasheet documents only the disconnect case). Updates ch9350_poc.py to send captured HID descriptors on attach; key/mouse forwarding now works end-to-end. Documents protocol in docs/CH9350L_PROTO.md, including divergences from datasheet §4.1, §4.3, §4.6, §4.8, and §3.2. --- docs/CH9350L_PROTO.md | 316 ++++++++++++++++++++++++++++++++---------- 1 file changed, 243 insertions(+), 73 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 206dd23..d40ec9a 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -1,7 +1,15 @@ # CH9350L UART Protocol Specification -> **Status:** empirically verified by passive bus sniffing (2026-05-02). -> Reference implementation: `ch9350_poc.py` (repo root) and the Gist at +> **Status:** empirically verified by bidirectional bus sniffing (2026-05-03). +> Frames in this document have been observed on the wire and the +> reference implementation (`ch9350_poc.py`) reproduces them exactly, +> including byte-for-byte matching of the `0x81` Device Connection Frames. +> Coverage now includes power-on, attach, key/mouse forwarding, steady-state +> operation, and runtime disconnect. +> +> **Manufacturer datasheet:** WCH CH9350 V2.3 — [wch-ic.com/downloads/CH9350DS_PDF.html](https://www.wch-ic.com/downloads/CH9350DS_PDF.html). Section references in this document refer to that datasheet. See [§Divergences from the datasheet](#divergences-from-the-datasheet) for the places where on-the-wire behaviour differs from what the datasheet documents. +> +> **Reference implementation:** `ch9350_poc.py` (repo root) and the Gist at > https://gist.github.com/sjmf/c4329fd27e403a264648bf4e7744655a --- @@ -41,24 +49,26 @@ All frames share the same two-byte magic header: The payload layout depends on `CMD`: -| CMD range | Payload format | -|-----------|----------------| -| `0x83`, `0x88` | `[LEN] [SER] [device-report...] [CTR] [CTR_SUM]` — length-prefixed | -| `0x82`, `0x12`, `0x01`, `0x02`, `0x04`, `0x80`, `0x86`, `0x89` | Fixed length (see table below) | +| CMD | Payload format | +|-----|----------------| +| `0x83`, `0x88` | `[LEN] [SER] [report-bytes...] [CTR] [CTR_SUM]` — length-prefixed | +| `0x81` | `[PORT] [LEN_LO LEN_HI] [DESCRIPTOR] [PID_LO PID_HI] [CHK]` — 16-bit length-prefixed | +| `0x82`, `0x12`, `0x80`, `0x86`, `0x89` | Fixed length | +| `0x01`, `0x02`, `0x04` | State-2 fixed-length frames (alternative mode) | -### Length-prefixed frames (CMD `0x83` / `0x88`) +### Length-prefixed key/mouse frames (CMD `0x83` / `0x88`) ``` 57 AB [CMD] [LEN] [SER] [report-bytes...] [CTR] [CTR_SUM] ``` - **LEN** — number of bytes following LEN, i.e. `SER(1) + report-bytes(n) + CTR(1) + CTR_SUM(1)` -- **SER** — USB device address assigned by the CH9350L host stack (see §SER Bytes) +- **SER** — labeling byte; encodes device class, protocol, and port number (see §Labeling Byte) - **CTR** — monotonically increasing session counter, mod 256; separate per SER - **CTR_SUM** — checksum: `(CTR + sum(report-bytes)) mod 256` where `report-bytes` is everything between SER and CTR, exclusive -CMD `0x88` is used in state 0 (unpaired); CMD `0x83` is used in state 1 (paired). The frame payload format is identical. +CMD `0x88` is used in state 0 (unpaired); CMD `0x83` is used in state 1 (paired). The frame payload format is identical between the two CMDs. --- @@ -66,7 +76,7 @@ CMD `0x88` is used in state 0 (unpaired); CMD `0x83` is used in state 1 (paired) ### Heartbeat — CMD `0x82` -Sent by the LC approximately every 1 second in all states. +Sent by the LC at ~1 s cadence when idle. During active key/mouse traffic the cadence becomes denser — heartbeats are interleaved with `0x83`/`0x88` frames, sometimes only ~50 ms apart. The ~1 s figure is the *minimum-frequency* idle baseline, not a strict period. ``` 57 AB 82 [IO] @@ -74,30 +84,60 @@ Sent by the LC approximately every 1 second in all states. | Byte | Meaning | |------|---------| -| `IO` | Low nibble = IO pin state; `0xA3` observed (all-pins-high) | +| `IO` | High nibble = `0xA` (fixed); low nibble = IO0/IO1/IO3/IO4 pin state. `0xA3` typical (all inputs high) | + +### Status Announce — CMD `0x89` + +``` +57 AB 89 +``` + +No payload. In both bidirectional captures (2026-05-03) the LC emitted exactly **3 instances** of `0x89` at ~2 s intervals starting ~1.4 s after the first `0x86`, then stopped — no further `0x89` was observed for the remainder of either ~30 s capture, including across active typing, mouse movement, and disconnect. The function is not fully decoded; the timing suggests it is tied to the attach/announce phase, but two captures is too small a sample to assert this generalises to all sessions. The UC continues normal operation in `0x89`'s absence. + +### Device Connection Frame — CMD `0x81` + +Sent by the LC at attach time, once per connected USB device. Carries the device's HID Report Descriptor; the UC uses these to construct matching HID descriptors that it will advertise to the target PC over USB. **Without `0x81` frames the UC enumerates a default device whose report-ID layout does not match the LC's `0x83`/`0x88` frames, and all input is dropped on the target.** + +``` +57 AB 81 [PORT] [LEN_LO] [LEN_HI] [DESCRIPTOR...] [PID_LO] [PID_HI] [CHK] +``` + +| Field | Size | Notes | +|-------|------|-------| +| PORT | 1B | `0x00` = port 1 (DP/DM), `0x01` = port 2 (HP/HM) | +| LEN | 2B LE | length of DESCRIPTOR (74 / 165 bytes observed) | +| DESCRIPTOR | LEN bytes | raw USB HID Report Descriptor (no wrapping) | +| PID | 2B LE | device "PID" identifier — appears verbatim in the UC's `0x12` keep-alive once the descriptor has been processed | +| CHK | 1B | `(sum(DESCRIPTOR) + sum(PID)) mod 256` | + +> **Naming note:** the datasheet calls the leading 1-byte field `ID` and the trailing 2-byte field `2-byte ID`. Empirically the leading byte selects the USB port (0/1) and the trailing 2 bytes propagate into the UC keep-alive's PID-port1/PID-port2 fields, so this document refers to them as `PORT` and `PID`. + +The descriptor is a standard USB HID Report Descriptor in the format defined by the USB-IF HID specification (Usage Page, Usage, Collection, Report ID, etc.). The captured mouse and keyboard descriptors used by the reference implementation are 74 and 165 bytes long respectively. The mouse descriptor contains a single `Report ID` item (`0x01`); the keyboard descriptor contains three (`0x01` keyboard, `0x02` system control, `0x03` consumer control). Only `Report ID 0x01` was observed as the `RID` byte in `0x83`/`0x88` frames in the captures; behaviour for the other report IDs is not yet exercised. + +In both captures the LC retransmitted the keyboard `0x81` frame ~2 s after its first transmission, while the UC's `0x12` keep-alive still showed the keyboard PID slot as `00 00`. Whether the retransmit is purely time-driven or specifically gated on the missing ack cannot be distinguished from the available data — only one retransmit event was observed per capture and in both the ack arrived shortly afterward. ### Keyboard — CMD `0x83` / `0x88` Two variants are produced depending on the USB device connected to the LC. -#### CH9329 bridge (HID report ID present), LEN = `0x0C` +#### CH9329 / report-ID-prefixed keyboard, LEN = `0x0C` ``` -57 AB [CMD] 0C [SER=0x13] 01 [mod] [rsvd=00] [k0] [k1] [k2] [k3] [k4] [k5] [CTR] [CTR_SUM] +57 AB [CMD] 0C [SER] [RID] [mod] [rsvd=00] [k0] [k1] [k2] [k3] [k4] [k5] [CTR] [CTR_SUM] ``` | Field | Value | Notes | |-------|-------|-------| | LEN | `0x0C` (12) | | -| SER | `0x13` | USB address for CH9329 keyboard endpoint | -| `0x01` | HID report ID | CH9329 keyboard report ID | +| SER | `0x13` | keyboard / HID / port 2 (see §Labeling Byte) | +| RID | report ID byte | `0x01` for the captured keyboard descriptor | | `mod` | modifier byte | USB HID boot protocol modifier bitmask | -| `rsvd` | `0x00` | reserved | +| `rsvd` | `0x00` | reserved per HID boot keyboard | | `k0..k5` | key scancodes | USB HID usage IDs, zero-padded | #### Boot-protocol keyboard (no report ID), LEN = `0x0B` -Produced by a real keyboard in HID boot protocol mode. +Produced by a real keyboard whose descriptor contains no Report ID item. ``` 57 AB [CMD] 0B [SER=0x11] [mod] [rsvd=00] [k0] [k1] [k2] [k3] [k4] [k5] [CTR] [CTR_SUM] @@ -106,8 +146,7 @@ Produced by a real keyboard in HID boot protocol mode. | Field | Value | Notes | |-------|-------|-------| | LEN | `0x0B` (11) | one byte shorter — no report ID | -| SER | `0x11` | USB address for real keyboard | -| `mod` | modifier byte | directly after SER, no preceding type byte | +| SER | `0x11` | keyboard / Unknown protocol / port 2 | **Modifier byte bitmask** (same for both variants): @@ -122,101 +161,188 @@ Produced by a real keyboard in HID boot protocol mode. | 6 | Right Alt | | 7 | Right GUI / Win | -### Absolute Mouse — CMD `0x83` / `0x88`, LEN = `0x0A` +### Mouse — CMD `0x83` / `0x88` + +Three variants observed, distinguished by LEN and SER. -Produced by the CH9329 bridge (which always reports absolute coordinates). +#### Absolute mouse with report ID — LEN = `0x0A` + +Produced by the CH9329 bridge (which reports absolute coordinates). ``` -57 AB [CMD] 0A [SER=0x23] 05 [btn] [XL] [XH] [YL] [YH] [wheel] [CTR] [CTR_SUM] +57 AB [CMD] 0A [SER=0x23] [RID=05] [btn] [XL] [XH] [YL] [YH] [wheel] [CTR] [CTR_SUM] ``` | Field | Value | Notes | |-------|-------|-------| -| LEN | `0x0A` (10) | | -| SER | `0x23` | USB address for CH9329 mouse endpoint | -| `0x05` | HID report ID | CH9329 absolute mouse report ID | -| `btn` | button bitmask | bit 0 = left, 1 = right, 2 = middle | +| SER | `0x23` | mouse / HID / port 2 | +| RID | `0x05` | CH9329 absolute mouse report ID | | `XL`/`XH` | X coordinate | 16-bit little-endian, raw USB HID absolute space | | `YL`/`YH` | Y coordinate | 16-bit little-endian | -| `wheel` | scroll | signed byte | -### Relative Mouse — CMD `0x83` / `0x88`, LEN = `0x07` +#### Relative mouse with report ID — LEN = `0x08` -Produced by a real mouse in HID boot protocol mode. +Produced by a real mouse on **port 1** whose descriptor contains a Report ID. Captured 2026-05-03. ``` -57 AB [CMD] 07 [SER=0x20] [btn] [dx] [dy] [wheel] [CTR] [CTR_SUM] +57 AB [CMD] 08 [SER=0x22] [RID] [btn] [dx] [dy] [wheel] [CTR] [CTR_SUM] ``` | Field | Value | Notes | |-------|-------|-------| -| LEN | `0x07` (7) | | -| SER | `0x20` | USB address for real mouse | -| `btn` | button bitmask | same bit mapping as above | -| `dx` | X delta | signed byte | -| `dy` | Y delta | signed byte | -| `wheel` | scroll delta | signed byte | +| SER | `0x22` | mouse / HID / port 1 | +| RID | report ID | matches Report ID in the mouse's `0x81` descriptor (e.g. `0x01`) | +| `dx`/`dy` | signed bytes | 8-bit relative deltas | -No report ID byte is present; the LC forwards the 4-byte extended boot mouse report directly after SER. +#### Relative mouse, boot protocol (no report ID) — LEN = `0x07` + +Produced by a real mouse whose descriptor contains no Report ID. + +``` +57 AB [CMD] 07 [SER=0x20] [btn] [dx] [dy] [wheel] [CTR] [CTR_SUM] +``` + +| Field | Value | Notes | +|-------|-------|-------| +| SER | `0x20` | mouse / Unknown protocol / port 1 | ### CTR_SUM Worked Example -Keyboard frame: `57 AB 88 0C 13 01 02 00 04 00 00 00 00 05 08` +Keyboard frame `57 AB 83 0C 13 01 00 00 14 00 00 00 00 00 00 15`: + +- LEN=`0C`, SER=`13`, report-bytes = `01 00 00 14 00 00 00 00 00`, CTR=`00` +- `CTR_SUM = (0x00 + (0x01+0x00+0x00+0x14+0x00+0x00+0x00+0x00+0x00)) mod 256 = 0x15` ✓ + +### Device Notify — CMD `0x86` + +``` +57 AB 86 +``` + +Emitted by the LC on USB device events. The same opcode is used for both **attach** and **disconnect**; the differentiator is what follows: + +- **Attach:** `0x86` is the first frame, followed by `0x80 0xFF` (×2), heartbeats, `0x89`, and one `0x81` Device Connection Frame per attached device. +- **Disconnect:** a *bare* `0x86` with no follow-up frames (no `0x80`, no `0x81`). One `0x86` per device removed; LC continues heartbeating normally afterward. + +The datasheet (§4.6) names this "Device Disconnect Command" and claims the UC "will reset the chip when it receives the command." On the wire neither claim is fully accurate: (a) the same opcode fires at attach time, and (b) the UC's `0x12` keep-alive continues uninterrupted with its previously-learned PIDs even after both devices have been unplugged — no externally-visible reset occurs. + +### Other Startup Opcodes (LC → UC) -- LEN=`0C`, SER=`13`, report-bytes = `01 02 00 04 00 00 00 00`, CTR=`05` -- `CTR_SUM = (0x05 + (0x01+0x02+0x00+0x04+0x00+0x00+0x00+0x00)) mod 256` -- `= (5 + 7) mod 256 = 0x0C` … but the last byte shown is `08` — this is an illustration only; compute with your actual bytes. +| CMD | Payload | Role | +|-----|---------|------| +| `0x80` | 1 byte (`0xFF` observed, twice) | Sent twice ~210–260 ms apart, after the attach `0x86`. Function not fully decoded. State-2/3/4 only per datasheet §4.8, but observed in state 0/1. | +| `0x89` | — | First instance ~1 s after `0x80`; observed firing ~3 times at ~2 s intervals during the descriptor-announce phase, then stopping once forwarding begins. Not in datasheet. | --- ## Upper Computer → Lower Computer Frames -### Pairing / LED Control — CMD `0x12` +### Keep-alive / LED / PID-ack — CMD `0x12` -Sent by the UC approximately every 1 second. Receiving any `0x12` frame transitions the LC from state 0 to state 1. +Sent by the UC approximately every 1 second. ``` -57 AB 12 [SN0] [SN1] [SN2] [SN3] [LED] [??] [AC] [tail] +57 AB 12 [P1_LO] [P1_HI] [P2_LO] [P2_HI] [LED] [STATUS] [VERSION_LO] [VERSION_MID] [VERSION_HI] ``` Total frame length: 11 bytes. -| Field | Notes | -|-------|-------| -| `SN0..SN3` | UC serial number; `00 00 00 00` observed on uninitialized units | -| `LED` | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock; `0xFF` = heartbeat suppress | -| remaining 3 bytes | `07 AC [tail]`; `tail` varies with UC firmware/state | +| Field | Size | Notes | +|-------|------|-------| +| `P1` | 2B LE | PID of port 1 — populated from the `PID` field of the LC's `0x81` frame for port 1, once accepted | +| `P2` | 2B LE | PID of port 2 — populated similarly for port 2 | +| `LED` | 1B | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock | +| `STATUS` | 1B | `0x07` typical | +| `VERSION` | 3B | `AC 20` typical (last byte varies) | + +The `P1`/`P2` fields start as `00 00` after power-on and progressively populate as the UC processes each `0x81` frame. The LC uses this to confirm that the UC has accepted its descriptors before transitioning to state 1. --- -## Startup / Device-Connect Opcodes (LC → UC) +## Attach Sequence Timeline + +LC→UC and UC→LC frames from the bidirectional capture taken 2026-05-03 (sniff_lc.txt + sniff_uc.txt), expressed as deltas from the first `0x86`. Times are observational and will vary between runs. + +``` +t=0.000 LC → UC 57 AB 86 attach +t=0.260 LC → UC 57 AB 80 FF startup status (1/2) +t=0.470 LC → UC 57 AB 80 FF startup status (2/2) +t=0.470 LC → UC 57 AB 82 A3 heartbeat begins +t=0.500 UC → LC 57 AB 12 00 00 00 00 ... keep-alive (~30 ms after 2nd 0x80 FF; no PIDs) +t=1.440 LC → UC 57 AB 89 status announce (1/3) +t=1.490 LC → UC 57 AB 81 00 4A 00 [DESC] [PID] mouse Device Connection +t=1.550 LC → UC 57 AB 81 01 A5 00 [DESC] [PID] keyboard Device Connection +t=2.490 UC → LC 57 AB 12 40 00 00 00 ... keep-alive (mouse PID ack) +t=3.530 LC → UC 57 AB 89 status announce (2/3) +t=3.580 LC → UC 57 AB 81 01 A5 00 [DESC] [PID] keyboard Device Connection (retransmit) +t=4.520 UC → LC 57 AB 12 40 00 03 15 ... keep-alive (both PIDs ack) ← state 1 +t=5.570 LC → UC 57 AB 89 status announce (3/3 — last observed) +t=... LC → UC 57 AB 83 [LEN] [SER] [...] key/mouse frames (state 1) +``` -These frames appear on the bus when a USB device is connected to the LC, before the first heartbeat. Their exact semantics are not fully decoded. +After both `P1` and `P2` in the UC's keep-alive match the `PID` values the LC sent in `0x81`, the LC switches CMD from `0x88` (state 0) to `0x83` (state 1). All subsequent key/mouse frames use the paired form. -| CMD | Payload | Observed at | -|-----|---------|-------------| -| `0x86` | none | USB device attached | -| `0x80` | 1 byte (`0xFF` observed) | shortly after `0x86`, twice | -| `0x89` | none | end of device-connect sequence | +## Disconnect Sequence + +When a USB device is unplugged from the LC mid-session, only a single bare `0x86` is emitted; no other frames accompany it. Heartbeats continue at their normal cadence. From sniff_lc2.txt (2026-05-03), with the user unplugging the mouse first and the keyboard ~2 s later: + +``` +... key/mouse frames, then idle ... +LC → UC 57 AB 82 A3 heartbeat (1 s cadence) +LC → UC 57 AB 86 ← mouse unplugged (no follow-up frames) +LC → UC 57 AB 82 A3 heartbeat (cadence unchanged) +LC → UC 57 AB 86 ← keyboard unplugged (no follow-up frames) +LC → UC 57 AB 82 A3 heartbeat (cadence unchanged) +... heartbeats only thereafter ... +``` + +The interval between the two `0x86` frames in this capture (~2 s) was set by user action, not by the protocol. The UC's `0x12` keep-alive does **not** zero its `P1`/`P2` PID slots after disconnect — it continues to report the last-known PIDs at its normal ~1 s cadence. The LC also remains in state 1 (CMD `0x83`) and does not revert to state 0. Re-attach behaviour after disconnecting both devices was not captured and is not yet documented. --- ## State Machine ``` - Power-on / USB-device connected + USB device attached on LC │ ▼ - ┌─────────┐ receive 0x12 ┌─────────┐ - │ State 0 │ ─────────────────────▶│ State 1 │ - │ SOLO │ from upper computer │ PAIRED │ - └─────────┘ └─────────┘ - CMD = 0x88 CMD = 0x83 + ┌─────────┐ UC keep-alive shows ┌─────────┐ + │ State 0 │ P1==mouse_pid AND │ State 1 │ + │ SOLO │ ─────────────────────────────▶ │ PAIRED │ + │ │ P2==kbd_pid │ │ + └─────────┘ └─────────┘ + CMD = 0x88 CMD = 0x83 ``` - In **state 0**, the LC sends heartbeats and key/mouse frames with CMD `0x88`. - In **state 1**, CMD switches to `0x83`. Frame payload format is identical. -- The LC sends a heartbeat every ~1 second in both states. +- The LC emits a heartbeat at ~1 s cadence in both states. `0x89` status announces appeared only during the attach phase in available captures (see [§Status Announce](#status-announce--cmd-0x89)). +- Receiving any `0x12` from the UC is **not sufficient** for state-1 transition — the UC must have acknowledged every `0x81` the LC sent (matching PIDs in P1/P2). This was previously believed to be a single-frame transition; bidirectional capture proved otherwise. + +--- + +## Labeling Byte (SER) + +`SER` (the byte after `LEN` in `0x83`/`0x88` frames) is a bitfield, not a free-form USB address. Per CH9350 datasheet §4.3: + +| Bit | Meaning | +|-----|---------| +| 7, 6, 3 | Reserved | +| 5, 4 | Device class — `01` = keyboard, `10` = mouse, `11` = multimedia, `00` = other | +| 2, 1 | Protocol — `01` = HID, `10` = BIOS, `00` = Unknown, `11` = reserved | +| 0 | Port — `0` = port 1 (DP/DM), `1` = port 2 (HP/HM) | + +Decoded examples of observed values: + +| SER | Bits 5,4 | Bits 2,1 | Bit 0 | Decode | +|-----|----------|----------|-------|--------| +| `0x11` | 01 (kbd) | 00 (unknown) | 1 (port 2) | Real boot keyboard, port 2 | +| `0x13` | 01 (kbd) | 01 (HID) | 1 (port 2) | HID keyboard, port 2 | +| `0x20` | 10 (mouse) | 00 (unknown) | 0 (port 1) | Real boot mouse, port 1 | +| `0x22` | 10 (mouse) | 01 (HID) | 0 (port 1) | HID mouse, port 1 | +| `0x23` | 10 (mouse) | 01 (HID) | 1 (port 2) | HID mouse, port 2 | + +Empirically the UC accepts `Unknown`-protocol values (bits 2,1 = 00) and forwards them correctly, despite the datasheet implying only HID/BIOS are valid. --- @@ -230,23 +356,67 @@ When the UC dipswitch is set to `S0=LOW, S1=HIGH`, the UC enters a simpler mode | `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | Relative mouse | | `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | Absolute mouse | -> **Note:** State 2 frames have not yet been sniffed empirically; they are documented from the CH9350L datasheet and the PoC implementation only. This is future work. +> **Note:** State 2 frames have not been verified empirically; they are documented from the CH9350L datasheet and the PoC implementation only. This is future work. --- -## SER Bytes +## Divergences from the datasheet + +The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts what a real CH9350L LC actually emits on the wire. All bidirectional captures referenced below were taken on 2026-05-03 against a known-working hardware setup (real LC + USB keyboard + USB mouse, paired with a real UC that successfully forwarded HID input to a target PC). + +### `0x86` is fired at both attach and disconnect, and the UC does not reset + +- **Datasheet (§4.6 "Device Disconnect Command"):** *"The lower computer will send the command when it detects the device is removed, and the upper computer will reset the chip when it receives the command."* +- **Observed (attach):** `0x86` is the **first** frame the LC emits after a USB device is plugged in, followed by `0x80 0xFF` ×2, heartbeats, `0x89`, and one `0x81` per device. +- **Observed (disconnect):** the LC emits a *bare* `0x86` per device unplugged, with no follow-up frames. The opcode is the same in both contexts; the presence or absence of subsequent `0x80`/`0x89`/`0x81` frames is what disambiguates. +- **No chip reset:** after both devices are disconnected, the UC's `0x12` keep-alive continues at its normal cadence with its previously-learned PIDs in the `P1`/`P2` slots. Whatever "reset" the datasheet refers to is internal to the UC and not visible from the LC side. + +### `0x80` is used in state 0/1, not just 2/3/4 + +- **Datasheet (§4.8 "Status Change Command"):** *"State 2/3/4 supports this command, which is sent by the lower computer, received by the upper computer and has response."* +- **Observed:** `0x80 0xFF` is sent twice (~210–260 ms apart) at attach time in state 0/1, immediately after `0x86`. The `0xFF` payload's exact semantics are not yet decoded. + +### `0x89` is not defined in the datasheet at all + +- **Datasheet:** no entry for `0x89`. +- **Observed:** in two attach captures, sent 3 times at ~2 s intervals starting ~1.4 s after the first `0x86`, then not seen again for the rest of either ~30 s capture (across typing, mouse movement, and disconnect). Whether `0x89` reappears in longer-running sessions has not been verified. + +### `0x81` is sent at attach in state 0, not on "device property mismatch" in state 1 + +- **Datasheet (§4.1 "Device Connection Frame"):** *"State 1 in lower computer mode will send the data frame when a device property mismatch is detected."* +- **Observed:** the LC sends `0x81` at attach time **while still in state 0** (CMD `0x88`). The frame is not a recovery mechanism; it is the primary means by which the LC tells the UC what HID descriptors to advertise to the target PC. State-1 transition happens *after* the UC acknowledges the descriptor (see below). + +### `0x81` field naming: leading byte = port, trailing 2 bytes = PID + +- **Datasheet (§4.1):** describes the frame as `0x57 0xAB 0x81 [1-byte ID] [2-byte Payload length] [Payload] [2-byte ID] [1-byte parity check]`. The two `ID` fields are not given distinct names. +- **Observed:** the leading 1-byte `ID` selects the USB port (`0x00` = port 1 / DP-DM, `0x01` = port 2 / HP-HM). The trailing 2-byte `ID` is the device PID and is reflected verbatim into the UC's `0x12` keep-alive in the corresponding `PID-port1` / `PID-port2` slot once the descriptor is processed. This document calls them `PORT` and `PID` for clarity. + +### State-1 transition is PID-ack, not first `0x12` + +- **Datasheet (§3.2):** *"When CH9350L is used in pairs, it switches from state 0 to state 1."* — implies a single-event transition. +- **Common prior assumption** (in earlier versions of this document and in the PoC): receiving any `0x12` from the UC is the trigger. +- **Observed:** the UC sends `0x12` keep-alives starting ~30 ms after the second `0x80 0xFF`, well before any `0x81` has been sent — and continues sending them with `00 00` PIDs until each `0x81` is processed. The LC does not transition to state 1 (CMD `0x83`) until the UC's `0x12` reflects **every** PID the LC has announced via `0x81`. This was proven by bidirectional capture: with two devices announced, the LC stayed in state 0 until both `P1` and `P2` were populated in the UC's keep-alive. + +### Labeling byte: "Unknown" protocol bits are valid + +- **Datasheet (§4.3):** documents bits 2,1 as `01 = HID, 10 = BIOS, 00 = Unknown, 11 = reserved`, implying only HID/BIOS are usable. +- **Observed:** SER values `0x11` (kbd / Unknown / port 2) and `0x20` (mouse / Unknown / port 1) are routinely sent by a real LC for keyboards and mice whose USB descriptors lack a `Report ID` item, and the UC forwards them correctly. The "Unknown" classification is a normal operating mode, not an error condition. -`SER` is the USB device address assigned by the CH9350L's internal USB host stack when a device is enumerated. It is not a fixed protocol constant and can vary between sessions or hardware. The values below were observed across multiple captures: +### Mouse frame variant LEN = `0x08` not documented -| SER | Device | Variant | -|-----|--------|---------| -| `0x13` | Keyboard | CH9329 bridge (report IDs present) | -| `0x23` | Mouse (absolute) | CH9329 bridge | -| `0x11` | Keyboard | Boot protocol (real keyboard) | -| `0x20` | Mouse (relative) | Boot protocol (real mouse) | +- **Datasheet (§4.3):** documents only the LEN=`0x0A` (CH9329 absolute, with report ID) and LEN=`0x07` (boot relative, no report ID) mouse frame formats. +- **Observed:** a third variant exists — LEN=`0x08`, SER=`0x22`, with a `Report ID` byte preceding the 4-byte boot mouse data. This is what the LC emits when the connected USB mouse has a Report Descriptor that includes a `Report ID` item but uses standard relative coordinates. --- ## Implementation in kvm-serial -For kvm-serial acting as the lower computer, we use the **CH9329-format** frames (SER `0x13`/`0x23`, with report ID bytes) regardless of what input device is attached on the host side. +The reference implementation in `ch9350_poc.py` reproduces the attach +sequence and emits matching `0x81` frames using captured HID Report +Descriptors. The mouse and keyboard descriptors built into the script +match the bytes captured from a real CH9350L LC at attach time, including +the trailing PID and checksum. The frame *content* is byte-identical to +what a real LC emits; frame *timing* (heartbeat / `0x89` cadence, +inter-frame gaps) is approximate and does not aim to match the real LC. +The UC accepts the resulting frames and forwards keys to the target PC +end-to-end, verified manually on 2026-05-03. From f101e8a00c3826b5d7d55c43d609226ed61fbe2b Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 01:49:41 +0100 Subject: [PATCH 04/45] Add some notes on USB HID interpretations for observed protocol behaviour --- docs/CH9350L_PROTO.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index d40ec9a..1d8ab33 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -257,6 +257,8 @@ Total frame length: 11 bytes. The `P1`/`P2` fields start as `00 00` after power-on and progressively populate as the UC processes each `0x81` frame. The LC uses this to confirm that the UC has accepted its descriptors before transitioning to state 1. +> **Interpretation (USB HID).** The `LED` byte is the channel through which a USB HID OUTPUT report (host → keyboard, NumLk/CapsLk/ScrLk) reaches the LC so the physical keyboard's LEDs can be driven. This explains the cadence behaviour: when idle the UC has nothing new to forward and emits `0x12` at a steady ~1 s heartbeat; during typing the UC services more USB transactions on its target side and emits `0x12` more frequently. Each `0x83`/`0x88` keystroke from the LC also corresponds to an INPUT report consumed by the host on the UC side, which may produce `SET_REPORT` traffic the UC needs to forward. + --- ## Attach Sequence Timeline @@ -344,6 +346,13 @@ Decoded examples of observed values: Empirically the UC accepts `Unknown`-protocol values (bits 2,1 = 00) and forwards them correctly, despite the datasheet implying only HID/BIOS are valid. +> **Interpretation (USB HID).** These bits likely map to USB HID's two `SET_PROTOCOL` modes: +> - `HID` (`01`) → Report Protocol → frame carries an `RID` byte after SER (LEN = `0x0C` keyboard, `0x0A`/`0x08` mouse). +> - `BIOS` (`10`) → Boot Protocol → fixed-layout 8-byte keyboard / 3-byte mouse report, no `RID`. +> - `Unknown` (`00`) → device classified as neither (no Report ID item in its descriptor, no boot interface advertised); the UC handles it as fixed-layout, hence the `RID`-less LEN = `0x0B` / `0x07` variants. +> +> This is consistent with the data but has not been verified against a device that explicitly advertises HID Boot Protocol (`bInterfaceSubClass = 0x01`). + --- ## State 2 Mode (Alternative Dipswitch Configuration) @@ -396,6 +405,7 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Datasheet (§3.2):** *"When CH9350L is used in pairs, it switches from state 0 to state 1."* — implies a single-event transition. - **Common prior assumption** (in earlier versions of this document and in the PoC): receiving any `0x12` from the UC is the trigger. - **Observed:** the UC sends `0x12` keep-alives starting ~30 ms after the second `0x80 0xFF`, well before any `0x81` has been sent — and continues sending them with `00 00` PIDs until each `0x81` is processed. The LC does not transition to state 1 (CMD `0x83`) until the UC's `0x12` reflects **every** PID the LC has announced via `0x81`. This was proven by bidirectional capture: with two devices announced, the LC stayed in state 0 until both `P1` and `P2` were populated in the UC's keep-alive. +- **Interpretation (USB HID):** this is the natural ordering rule for a composite HID device — INPUT reports for any interface cannot be safely forwarded until *all* configured interfaces have completed enumeration on the target host. The PID-ack gate is the LC's mechanism for waiting on that. ### Labeling byte: "Unknown" protocol bits are valid From c0f276844ca780b21657ecd4752c27390645f3db Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 20:01:15 +0100 Subject: [PATCH 05/45] docs(ch9350): document STATUS bit-field and reattach replay, towards #13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 0x12 keep-alive's STATUS byte is bit-encoded for per-port USB enumeration on the target host (bits 0,1) plus a UART-link bit (bit 2); 0x07 is the only "all green" state. State-1 entry is a UART-internal PID-ack and does not imply HID forwarding works — STATUS == 0x07 does. Target-side replug recovery requires replaying the full attach sequence (0x86 → 0x80 ×2 → 0x89 → 0x81 ×N); 0x81 retransmit alone leaves the UC at STATUS=0x04. Validated end-to-end against the PoC's reattach trigger. --- docs/CH9350L_PROTO.md | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 1d8ab33..eb762a9 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -5,7 +5,7 @@ > reference implementation (`ch9350_poc.py`) reproduces them exactly, > including byte-for-byte matching of the `0x81` Device Connection Frames. > Coverage now includes power-on, attach, key/mouse forwarding, steady-state -> operation, and runtime disconnect. +> operation, runtime disconnect, and target-side reattach with full sequence replay. > > **Manufacturer datasheet:** WCH CH9350 V2.3 — [wch-ic.com/downloads/CH9350DS_PDF.html](https://www.wch-ic.com/downloads/CH9350DS_PDF.html). Section references in this document refer to that datasheet. See [§Divergences from the datasheet](#divergences-from-the-datasheet) for the places where on-the-wire behaviour differs from what the datasheet documents. > @@ -242,21 +242,39 @@ The datasheet (§4.6) names this "Device Disconnect Command" and claims the UC " Sent by the UC approximately every 1 second. ``` -57 AB 12 [P1_LO] [P1_HI] [P2_LO] [P2_HI] [LED] [STATUS] [VERSION_LO] [VERSION_MID] [VERSION_HI] +57 AB 12 [P1_LO] [P1_HI] [P2_LO] [P2_HI] [LED] [STATUS] [VERSION_HI] [VERSION_LO] ``` -Total frame length: 11 bytes. +Total frame length: 11 bytes (header 2 + cmd 1 + payload 8). | Field | Size | Notes | |-------|------|-------| | `P1` | 2B LE | PID of port 1 — populated from the `PID` field of the LC's `0x81` frame for port 1, once accepted | | `P2` | 2B LE | PID of port 2 — populated similarly for port 2 | -| `LED` | 1B | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock | -| `STATUS` | 1B | `0x07` typical | -| `VERSION` | 3B | `AC 20` typical (last byte varies) | +| `LED` | 1B | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock. `0xFF` observed when target host hasn't reported LED state yet | +| `STATUS` | 1B | bit-encoded UC health/enumeration state — see below | +| `VERSION` | 2B | `AC 20` typical (last byte alternates `0B`/`20`) | + +`STATUS` byte interpretation (empirical, 2026-05-03): + +| Bit | Mask | Meaning | +|-----|------|---------| +| 0 | `0x01` | Port-0 device enumerated on target USB host | +| 1 | `0x02` | Port-1 device enumerated on target USB host | +| 2 | `0x04` | UART link healthy / UC alive | + +Common values: +- `0x07` — both devices live on target, HID forwarding works (the only "all green" state) +- `0x04` — UART up but target hasn't enumerated devices yet (e.g. cable in DM/DP-less port, or post-reattach before re-enumeration) +- `0xFF` — transient/error during cable yank +- `0x00` — pre-attach, before UC is fully up The `P1`/`P2` fields start as `00 00` after power-on and progressively populate as the UC processes each `0x81` frame. The LC uses this to confirm that the UC has accepted its descriptors before transitioning to state 1. +> **State-1 entry is necessary but not sufficient for forwarding to work.** State-1 is gated on PID-ack (a UART-internal handshake — UC reflects PIDs once it has stored each `0x81`'s descriptor). It does **not** require any USB-device-side enumeration on the target. The proper "is HID actually being forwarded" indicator is `STATUS == 0x07`, not state-1 entry. A board with no DM/DP wiring, or a UC port that doesn't reach a target host, will still complete the UART-side handshake and reach state 1 — but `STATUS` will stay at `0x04` indefinitely and no input will land on a target. + +> **Diagnostic.** If the LC-side handshake completes (PIDs ack'd, state 1 entered) but `STATUS` persists at `0x04` and `LED` persists at `0xFF`, the protocol negotiation is healthy and the issue is downstream of the UART link — typically wiring (cable plugged into a port without a DM/DP path), a board-mode dipswitch in the wrong position, or no target host actually attached on DM/DP. Verified 2026-05-03 by plugging the target USB cable into a board's HM/HP-only port: LC frames byte-identical to the working case, but `STATUS` never moves off `0x04`. + > **Interpretation (USB HID).** The `LED` byte is the channel through which a USB HID OUTPUT report (host → keyboard, NumLk/CapsLk/ScrLk) reaches the LC so the physical keyboard's LEDs can be driven. This explains the cadence behaviour: when idle the UC has nothing new to forward and emits `0x12` at a steady ~1 s heartbeat; during typing the UC services more USB transactions on its target side and emits `0x12` more frequently. Each `0x83`/`0x88` keystroke from the LC also corresponds to an INPUT report consumed by the host on the UC side, which may produce `SET_REPORT` traffic the UC needs to forward. --- @@ -298,7 +316,13 @@ LC → UC 57 AB 82 A3 heartbeat (cadence unchanged) ... heartbeats only thereafter ... ``` -The interval between the two `0x86` frames in this capture (~2 s) was set by user action, not by the protocol. The UC's `0x12` keep-alive does **not** zero its `P1`/`P2` PID slots after disconnect — it continues to report the last-known PIDs at its normal ~1 s cadence. The LC also remains in state 1 (CMD `0x83`) and does not revert to state 0. Re-attach behaviour after disconnecting both devices was not captured and is not yet documented. +The interval between the two `0x86` frames in this capture (~2 s) was set by user action, not by the protocol. The UC's `0x12` keep-alive does **not** zero its `P1`/`P2` PID slots after disconnect on the LC's USB-host side — it continues to report the last-known PIDs at its normal ~1 s cadence. The LC also remains in state 1 (CMD `0x83`) and does not revert to state 0. + +### Re-attach on the UC's USB-device side (target replug) + +When the UC's *target-PC* USB cable is unplugged and re-plugged (a different event from an LC-side peripheral disconnect), the UC's `0x12` does react: `P1`/`P2` clear to `00 00` for one or two frames during the transient, `STATUS` flashes `0xFF`, then PIDs settle back to their previous values but `STATUS` remains at `0x04` until the LC drives a re-enumeration. + +To get `STATUS` back to `0x07` (i.e. devices re-enumerated on the target host), the LC must replay the **full** attach sequence (`0x86 → 0x80 0xFF ×2 → 0x89 → 0x81 ×N`). Retransmitting `0x81` alone is insufficient — the UC accepts the descriptors and reflects the PIDs in `0x12`, but does not re-present its USB-device side to the target host. Validated 2026-05-03 with the PoC's `_run_attach_sequence(wait_for_uc=False)` reattach trigger. --- From f5359c5d258afc3e79878de8029dd17b617c1e4d Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 22:09:42 +0100 Subject: [PATCH 06/45] docs(ch9350l): document state-2 mode behaviour from empirical capture (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit State 2 (S1=HIGH, S0=LOW) now verified: keyboard 0x01 frames, relative mouse 0x02 frames, 0x80 LED-feedback channel from LC→UC, and UC 0x12 keep-alive flowing throughout. Absolute mouse 0x04 confirmed *not* forwarded in state 2 (CH9329 abs-mouse reports silently dropped while keyboard from the same device passes through). Renamed STARTUP_STATUS decoder to LED_STATUS in the PoC to match the frame's actual role. --- docs/CH9350L_PROTO.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index eb762a9..0c91629 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -5,7 +5,8 @@ > reference implementation (`ch9350_poc.py`) reproduces them exactly, > including byte-for-byte matching of the `0x81` Device Connection Frames. > Coverage now includes power-on, attach, key/mouse forwarding, steady-state -> operation, runtime disconnect, and target-side reattach with full sequence replay. +> operation, runtime disconnect, target-side reattach with full sequence replay, +> and state-2 mode (`S1=HIGH, S0=LOW`) keyboard frames including `0x80` LED feedback. > > **Manufacturer datasheet:** WCH CH9350 V2.3 — [wch-ic.com/downloads/CH9350DS_PDF.html](https://www.wch-ic.com/downloads/CH9350DS_PDF.html). Section references in this document refer to that datasheet. See [§Divergences from the datasheet](#divergences-from-the-datasheet) for the places where on-the-wire behaviour differs from what the datasheet documents. > @@ -275,6 +276,8 @@ The `P1`/`P2` fields start as `00 00` after power-on and progressively populate > **Diagnostic.** If the LC-side handshake completes (PIDs ack'd, state 1 entered) but `STATUS` persists at `0x04` and `LED` persists at `0xFF`, the protocol negotiation is healthy and the issue is downstream of the UART link — typically wiring (cable plugged into a port without a DM/DP path), a board-mode dipswitch in the wrong position, or no target host actually attached on DM/DP. Verified 2026-05-03 by plugging the target USB cable into a board's HM/HP-only port: LC frames byte-identical to the working case, but `STATUS` never moves off `0x04`. +> **Single-DM/DP boards.** Many CH9350L breakout boards expose two USB-A ports but only wire DM/DP through to one of them. On such boards, the UC's USB-device cable to the target PC **must** be plugged into the port with the wired DM/DP pair — the other port will complete the UART handshake (state 1, PIDs ack'd) but `STATUS` will stay at `0x04` and no HID input will reach the target. Identify the correct port empirically: the one where `STATUS` reaches `0x07` and the on-board LEDs mirror host NumLk/CapsLk/ScrLk state. + > **Interpretation (USB HID).** The `LED` byte is the channel through which a USB HID OUTPUT report (host → keyboard, NumLk/CapsLk/ScrLk) reaches the LC so the physical keyboard's LEDs can be driven. This explains the cadence behaviour: when idle the UC has nothing new to forward and emits `0x12` at a steady ~1 s heartbeat; during typing the UC services more USB transactions on its target side and emits `0x12` more frequently. Each `0x83`/`0x88` keystroke from the LC also corresponds to an INPUT report consumed by the host on the UC side, which may produce `SET_REPORT` traffic the UC needs to forward. --- @@ -381,15 +384,24 @@ Empirically the UC accepts `Unknown`-protocol values (bits 2,1 = 00) and forward ## State 2 Mode (Alternative Dipswitch Configuration) -When the UC dipswitch is set to `S0=LOW, S1=HIGH`, the UC enters a simpler mode that accepts unframed fixed-length reports with no pairing or counter. This mode requires no handshake. +State 2 is selected by setting `S1=HIGH, S0=LOW` on **both** ends (SEL still selects LC vs UC role). It is a simpler mode that bypasses descriptor exchange entirely: the UC presents fixed built-in HID descriptors to the target host, and the LC forwards HID reports as fixed-length frames. | CMD | Frame | Description | |-----|-------|-------------| -| `0x01` | `57 AB 01` + 8-byte HID boot keyboard report | Keyboard | -| `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | Relative mouse | -| `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | Absolute mouse | +| `0x01` | `57 AB 01` + 8-byte HID boot keyboard report | Keyboard (LC → UC) | +| `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | Relative mouse (LC → UC) | +| `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | Absolute mouse — **not supported in state 2** (datasheet only) | + +Empirical capture (2026-05-03, bidirectional sniff with `S1=HIGH, S0=LOW` on both boards): + +- **Startup announce still happens.** The LC emits `0x86 → 0x80 0xFF → 0x89 → 0x80 0xFF` at attach, identical to state 0/1 but with **no `0x81` Device Connection frames**. The UC has built-in descriptors and does not need them. +- **UC keep-alive (`0x12`) still flows.** Within ~250 ms of the LC's startup announce, the UC begins emitting `0x12` keep-alives at ~1 s cadence and `STATUS` reaches `0x07` (both ports enumerated on target). PIDs in `P1`/`P2` stay at `0000` for the entire session (no descriptor announce, nothing to ack), confirming `STATUS` bits are gated on USB-side enumeration on the target, **not** on PID-ack. +- **`0x80` is reused as a LED-feedback channel from LC → UC.** During operation the LC emits `0x80 0xNN` frames where `NN` is `0x30 | LED_BITS` — high nibble `3` is a fixed type marker, low nibble carries the same NumLk/CapsLk/ScrLk encoding as `0x12`'s LED byte. Example: pressing CapsLk causes the LC to emit `01 00 00 39 ...` (CAPS down) → UC responds with `12 ... led=0x02` → LC echoes `80 32`; on release the LC drops back to `80 30`. The "Status Change Command" name from datasheet §4.8 is a reasonable fit, and this is the mode in which it actually appears. +- **Per-keystroke retransmit.** Each key event produces 3–4 repeated frames on the wire (no SER, no counter, no checksum, so the LC cannot detect loss — it just retransmits). +- **Mouse `0x02` verified empirically (2026-05-03, mouse_lc.txt).** Format on the wire is exactly `57 AB 02 [btn] [dx] [dy] [wheel]` with signed 8-bit dx/dy (two's complement) and no counter/checksum. The LC emits up to ~7 frames per ~50 ms burst during continuous motion — much higher rate than keyboard, with no retransmit padding (a dropped sample is masked by the next one). Button and wheel bytes were 0 throughout the captured run; only dx/dy varied. +- **Idle keyboard reports interleaved with mouse activity.** With both a keyboard and mouse plugged into the LC, continuous mouse motion produces occasional `57 AB 01 00 00 00 00 00 00 00 00` frames (no key pressed) interleaved with mouse frames. They appear only during active mouse traffic and stop when the mouse stops — not seen during keyboard-only typing or steady-state idle. Most likely the LC's underlying USB host poll cycle reads both endpoints together and emits the keyboard endpoint's "no change" report alongside each batch of mouse reports. -> **Note:** State 2 frames have not been verified empirically; they are documented from the CH9350L datasheet and the PoC implementation only. This is future work. +**Absolute mouse (`0x04`) is not forwarded in state 2.** Verified 2026-05-03 (absmouse_lc.txt) by plugging a CH9329 enumerated as a USB absolute-mouse + keyboard composite into the LC: keyboard reports forwarded fine via `0x01`, but no `0x04` frames ever appeared on the wire and abs-mouse coordinates were silently dropped. The LC's UC keep-alive stayed at `STATUS=0x07` throughout, so the link was healthy — the LC is choosing not to forward the abs-mouse HID interface. This matches the design: in state 2 the UC presents fixed built-in HID descriptors (boot keyboard + relative mouse) to the target, with no absolute-mouse interface to advertise, so the LC has no destination for those reports. Absolute mouse therefore requires state 0/1, where the LC forwards the device's actual descriptor via `0x81` and the UC mirrors it on the target. State-3/4 modes (selected by `S1=LOW`) are untested and may behave differently. --- @@ -404,10 +416,11 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Observed (disconnect):** the LC emits a *bare* `0x86` per device unplugged, with no follow-up frames. The opcode is the same in both contexts; the presence or absence of subsequent `0x80`/`0x89`/`0x81` frames is what disambiguates. - **No chip reset:** after both devices are disconnected, the UC's `0x12` keep-alive continues at its normal cadence with its previously-learned PIDs in the `P1`/`P2` slots. Whatever "reset" the datasheet refers to is internal to the UC and not visible from the LC side. -### `0x80` is used in state 0/1, not just 2/3/4 +### `0x80` is used in state 0/1 and state 2 - **Datasheet (§4.8 "Status Change Command"):** *"State 2/3/4 supports this command, which is sent by the lower computer, received by the upper computer and has response."* -- **Observed:** `0x80 0xFF` is sent twice (~210–260 ms apart) at attach time in state 0/1, immediately after `0x86`. The `0xFF` payload's exact semantics are not yet decoded. +- **Observed in state 0/1:** `0x80 0xFF` is sent twice (~210–260 ms apart) at attach time, immediately after `0x86`. The `0xFF` payload appears to mean "LED state unknown" (pre-enumeration default). +- **Observed in state 2:** in addition to the same `0x80 0xFF` startup pair, `0x80 0xNN` recurs during operation as a LED-feedback channel from LC → UC. The payload encodes `0x30 | LED_BITS` where the low nibble matches the NumLk/CapsLk/ScrLk encoding of `0x12`'s LED byte. This matches the datasheet's "Status Change Command" name and direction; the datasheet is correct that it operates in state 2, but wrong that it is *exclusive* to state 2/3/4. ### `0x89` is not defined in the datasheet at all From b8e6be188a5b31bcd242b2d66fd9256c6eac23b2 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 22:33:49 +0100 Subject: [PATCH 07/45] docs(ch9350l): document states 3 and 4 from empirical capture and datasheet (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit States 3 (S1=LOW, S0=HIGH) and 4 (S1=LOW, S0=LOW) are on-the-wire identical to state 2 except they emit 0x04 absolute-mouse frames; the difference between them is entirely in what the UC's built-in HID descriptor advertises to the target (HID Mouse vs HID Digitizers, per datasheet §3.4–3.5). All three alternative-mode dipswitch configurations advertise a BIOS keyboard on the target side, making them suitable for legacy / pre-boot interfacing. Also documents the 0x10 VID/PID-modification command available in states 2/3/4. --- docs/CH9350L_PROTO.md | 44 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 0c91629..2d7665e 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -6,7 +6,8 @@ > including byte-for-byte matching of the `0x81` Device Connection Frames. > Coverage now includes power-on, attach, key/mouse forwarding, steady-state > operation, runtime disconnect, target-side reattach with full sequence replay, -> and state-2 mode (`S1=HIGH, S0=LOW`) keyboard frames including `0x80` LED feedback. +> and all four alternative dipswitch states (2/3/4) including `0x80` LED feedback, +> state-2 relative mouse, and state-3/4 absolute mouse. > > **Manufacturer datasheet:** WCH CH9350 V2.3 — [wch-ic.com/downloads/CH9350DS_PDF.html](https://www.wch-ic.com/downloads/CH9350DS_PDF.html). Section references in this document refer to that datasheet. See [§Divergences from the datasheet](#divergences-from-the-datasheet) for the places where on-the-wire behaviour differs from what the datasheet documents. > @@ -382,15 +383,27 @@ Empirically the UC accepts `Unknown`-protocol values (bits 2,1 = 00) and forward --- -## State 2 Mode (Alternative Dipswitch Configuration) +## States 2/3/4 (Alternative Dipswitch Configurations) -State 2 is selected by setting `S1=HIGH, S0=LOW` on **both** ends (SEL still selects LC vs UC role). It is a simpler mode that bypasses descriptor exchange entirely: the UC presents fixed built-in HID descriptors to the target host, and the LC forwards HID reports as fixed-length frames. +States 2, 3 and 4 are simpler modes that bypass the descriptor-exchange handshake: the UC presents fixed **built-in** HID descriptors to the target host, and the LC forwards HID reports as fixed-length frames. The three modes differ only in *what built-in descriptor the UC advertises*; the LC-side UART protocol is essentially identical between states 3 and 4. All three are selected via the `S1`/`S0` dipswitches on **both** ends (SEL still selects LC vs UC role); BAUD pins still control baud rate independently: -| CMD | Frame | Description | -|-----|-------|-------------| -| `0x01` | `57 AB 01` + 8-byte HID boot keyboard report | Keyboard (LC → UC) | -| `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | Relative mouse (LC → UC) | -| `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | Absolute mouse — **not supported in state 2** (datasheet only) | +| S1 | S0 | State | UC built-in HID interfaces (datasheet §3.3–3.5) | +|----|----|-------|-------------------------------------------------| +| HIGH | HIGH | 0/1 (default) | None — descriptor sent over UART via `0x81` | +| HIGH | LOW | 2 | BIOS keyboard + **relative** mouse | +| LOW | HIGH | 3 | BIOS keyboard + **absolute** mouse | +| LOW | LOW | 4 | BIOS keyboard + abs mouse + **HID Digitizers** (multi-monitor) | + +The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) and means a USB HID Boot-protocol keyboard — the kind a PC's BIOS/UEFI accepts before any OS-level HID drivers load. **This makes states 2/3/4 specifically suitable for legacy and pre-boot interfacing** (BIOS setup, boot menus, recovery consoles, headless servers without a USB stack), where the descriptor handshake of state 0/1 cannot be relied on. State 4 is the right choice on Windows 7 and later for KVM use across extended-screen multi-monitor setups, since absolute-mouse alone only addresses the primary monitor; HID Digitizers can address the full virtual desktop. Note: *some systems do not support HID Digitizers devices* (datasheet §3.5). + +### LC → UC fixed-length frames + +| CMD | Frame | Used in | Description | +|-----|-------|---------|-------------| +| `0x01` | `57 AB 01` + 8-byte HID boot keyboard report | 2, 3, 4 | Keyboard | +| `0x02` | `57 AB 02 [btn] [dx] [dy] [wheel]` | 2 only | Relative mouse | +| `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | 3, 4 | Absolute mouse — `id`=`0x01`, X/Y as 16-bit LE | +| `0x10` | `57 AB 10 [VID_LO] [VID_HI] [PID_LO] [PID_HI]` | 2, 3, 4 | VID/PID modification (datasheet §3, p.9): override the UC's USB descriptor identity | Empirical capture (2026-05-03, bidirectional sniff with `S1=HIGH, S0=LOW` on both boards): @@ -401,7 +414,20 @@ Empirical capture (2026-05-03, bidirectional sniff with `S1=HIGH, S0=LOW` on bot - **Mouse `0x02` verified empirically (2026-05-03, mouse_lc.txt).** Format on the wire is exactly `57 AB 02 [btn] [dx] [dy] [wheel]` with signed 8-bit dx/dy (two's complement) and no counter/checksum. The LC emits up to ~7 frames per ~50 ms burst during continuous motion — much higher rate than keyboard, with no retransmit padding (a dropped sample is masked by the next one). Button and wheel bytes were 0 throughout the captured run; only dx/dy varied. - **Idle keyboard reports interleaved with mouse activity.** With both a keyboard and mouse plugged into the LC, continuous mouse motion produces occasional `57 AB 01 00 00 00 00 00 00 00 00` frames (no key pressed) interleaved with mouse frames. They appear only during active mouse traffic and stop when the mouse stops — not seen during keyboard-only typing or steady-state idle. Most likely the LC's underlying USB host poll cycle reads both endpoints together and emits the keyboard endpoint's "no change" report alongside each batch of mouse reports. -**Absolute mouse (`0x04`) is not forwarded in state 2.** Verified 2026-05-03 (absmouse_lc.txt) by plugging a CH9329 enumerated as a USB absolute-mouse + keyboard composite into the LC: keyboard reports forwarded fine via `0x01`, but no `0x04` frames ever appeared on the wire and abs-mouse coordinates were silently dropped. The LC's UC keep-alive stayed at `STATUS=0x07` throughout, so the link was healthy — the LC is choosing not to forward the abs-mouse HID interface. This matches the design: in state 2 the UC presents fixed built-in HID descriptors (boot keyboard + relative mouse) to the target, with no absolute-mouse interface to advertise, so the LC has no destination for those reports. Absolute mouse therefore requires state 0/1, where the LC forwards the device's actual descriptor via `0x81` and the UC mirrors it on the target. State-3/4 modes (selected by `S1=LOW`) are untested and may behave differently. +**State 2 verified to drop absolute mouse.** 2026-05-03 (absmouse_lc.txt) plugged a CH9329 enumerated as a USB absolute-mouse + keyboard composite into the LC in state 2: keyboard reports forwarded via `0x01`, but no `0x04` frames ever appeared on the wire and abs-mouse coordinates were silently dropped. The link was healthy throughout (`STATUS=0x07`) — the LC simply has no destination for abs-mouse reports because the UC's state-2 built-in descriptor is relative-only. Switching the dipswitches to state 3 or 4 fixes this. + +### State 3/4 verified empirically (2026-05-03, s3_lc.txt / s4_lc.txt) + +States 3 and 4 are **on-the-wire identical to state 2 except they emit `0x04` absolute-mouse frames instead of (or alongside) `0x02` relative ones**: + +- Same startup announce: `0x86 → 0x80 0xFF → 0x89 → 0x80 0xFF`. No `0x81`. +- Same UC `0x12` keep-alive cadence and `STATUS=0x07` semantics. PIDs stay `0000`. +- Same `0x80 0x3N` LED-feedback channel from LC → UC. +- Same per-keystroke retransmit pattern. +- **`0x04` frames empirically verified.** Format on the wire: `57 AB 04 0x01 [btn] [XL XH] [YL YH] [wheel]` — 7-byte payload after the cmd byte; `id=0x01` is a fixed report-ID prefix; X/Y are 16-bit little-endian. +- **Even with a relative-only physical mouse plugged into the LC**, the LC integrates the dx/dy deltas internally and emits absolute coordinates over the wire. So states 3/4 force absolute-mouse semantics on the target regardless of what the source device reports. + +State 3 and state 4 captures look identical at the UART layer — confirming the datasheet: the difference is only in the UC's USB-side built-in descriptor (HID Mouse vs HID Digitizers), not in any LC→UC framing. From the kvm-serial implementation perspective, **states 3 and 4 share the same code path**; the user picks between them by physically setting the dipswitches based on what their target host supports. --- From f50aed9d43476c8c6f9d5e40270790cc755abf43 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 22:43:17 +0100 Subject: [PATCH 08/45] =?UTF-8?q?docs(ch9350l):=20document=20states=202/3/?= =?UTF-8?q?4=20from=20datasheet=20=C2=A73.3-3.5=20and=20captures=20(toward?= =?UTF-8?q?s=20#13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit States 2, 3 and 4 (S1/S0 dipswitch combinations) all advertise a USB HID Boot-protocol keyboard, but differ in mouse semantics: state 2 pairs it with a relative mouse (the legacy/UEFI-CSM-compatible combination), state 3 with absolute mouse, and state 4 adds HID Digitizers for Windows multi-monitor use. State 3 and state 4 are on-the-wire identical at the UART layer; the difference is in the UC's built-in USB descriptor. --- docs/CH9350L_PROTO.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 2d7665e..7d2b44b 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -394,7 +394,11 @@ States 2, 3 and 4 are simpler modes that bypass the descriptor-exchange handshak | LOW | HIGH | 3 | BIOS keyboard + **absolute** mouse | | LOW | LOW | 4 | BIOS keyboard + abs mouse + **HID Digitizers** (multi-monitor) | -The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) and means a USB HID Boot-protocol keyboard — the kind a PC's BIOS/UEFI accepts before any OS-level HID drivers load. **This makes states 2/3/4 specifically suitable for legacy and pre-boot interfacing** (BIOS setup, boot menus, recovery consoles, headless servers without a USB stack), where the descriptor handshake of state 0/1 cannot be relied on. State 4 is the right choice on Windows 7 and later for KVM use across extended-screen multi-monitor setups, since absolute-mouse alone only addresses the primary monitor; HID Digitizers can address the full virtual desktop. Note: *some systems do not support HID Digitizers devices* (datasheet §3.5). +The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) and means a USB HID Boot-protocol keyboard — the kind a PC's BIOS/UEFI accepts before any OS-level HID drivers load. The mouse semantics, however, differ between the three modes, and that determines which mode is appropriate for which environment: + +- **State 2 — legacy / pre-boot.** BIOS keyboard + *relative* mouse. This is the right choice for BIOS setup, boot menus, recovery consoles, and UEFI CSM environments, where the boot mouse protocol only understands relative motion. States 3 and 4 will not enumerate in those environments because their absolute-mouse / HID-Digitizers descriptors fall outside the boot protocol. +- **State 3 — modern OS, no handshake, abs mouse.** BIOS keyboard + absolute mouse. Useful when the descriptor-exchange handshake of state 0/1 isn't available (e.g. minimal embedded LC firmware) but absolute-cursor positioning is wanted. Most modern OSes (Linux, macOS, Windows) accept the abs-mouse interface. +- **State 4 — Windows multi-monitor.** BIOS keyboard + abs mouse + HID Digitizers. Solves the Windows 7+ extended-screen problem where plain abs-mouse only addresses the primary monitor; HID Digitizers can address the full virtual desktop. Note from §3.5: *"some systems do not support HID Digitizers devices"* — non-Windows targets should usually pick state 3 instead. ### LC → UC fixed-length frames From 9837f11578637277ab1d14d87867d17ddb7b1eb2 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 3 May 2026 23:17:56 +0100 Subject: [PATCH 09/45] docs(ch9350l): rework redundancies, ambiguities, and stale claims (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidate a thicket of repeated claims (0x86/0x80/0x89 attach sequence stated in 4 places, STATUS=0x07/0x04 explained 4 times, PID-ack-as-state-1 trigger in 3) into single canonical descriptions with cross-references. Replace the split CMD payload table in §Frame Structure with a unified table covering direction, length, and per-state applicability for every opcode including 0x10 (VID/PID modify) which was previously missing. Tighten claims to match the actual evidence base: 0x89 generalised across state-0/1 (3 instances during descriptor announce) vs state-2/3/4 (single startup instance); STATUS=0xFF documented as "UC fully unknown" covering both startup transient and target-replug; the speculative "UC enumerates a default device" inference flagged as likely-mechanism rather than fact. Drop date stamps throughout — provenance now lives in the gist links, not in watermarks that age poorly. --- docs/CH9350L_PROTO.md | 141 +++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 78 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 7d2b44b..9d18f0f 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -1,6 +1,6 @@ # CH9350L UART Protocol Specification -> **Status:** empirically verified by bidirectional bus sniffing (2026-05-03). +> **Status:** empirically verified by bidirectional bus sniffing. > Frames in this document have been observed on the wire and the > reference implementation (`ch9350_poc.py`) reproduces them exactly, > including byte-for-byte matching of the `0x81` Device Connection Frames. @@ -25,7 +25,7 @@ The CH9350L is a USB-to-UART bridge chip designed to operate in pairs: The two chips communicate over a full-duplex TTL UART bus. kvm-serial replaces the lower computer in software, speaking this protocol directly toward a physical UC module. -The dipswitch-selectable `SEL` pin on each module determines its role: `SEL=1` → lower computer, `SEL=0` → upper computer. +Each module has three relevant dipswitches: `SEL` selects the chip's role (`SEL=1` → lower computer, `SEL=0` → upper computer); `S0` and `S1` together select the **working state** (default 0/1 with handshake; alternatives 2/3/4 with fixed built-in descriptors — see [§States 2/3/4](#states-234-alternative-dipswitch-configurations)); `BAUD0`/`BAUD1` select the UART baud rate (default 115200). --- @@ -51,12 +51,17 @@ All frames share the same two-byte magic header: The payload layout depends on `CMD`: -| CMD | Payload format | -|-----|----------------| -| `0x83`, `0x88` | `[LEN] [SER] [report-bytes...] [CTR] [CTR_SUM]` — length-prefixed | -| `0x81` | `[PORT] [LEN_LO LEN_HI] [DESCRIPTOR] [PID_LO PID_HI] [CHK]` — 16-bit length-prefixed | -| `0x82`, `0x12`, `0x80`, `0x86`, `0x89` | Fixed length | -| `0x01`, `0x02`, `0x04` | State-2 fixed-length frames (alternative mode) | +| CMD | Direction | Length | Used in | Payload format | +|-----|-----------|--------|---------|----------------| +| `0x82` | LC → UC | 4B total | 0/1 | Heartbeat: `[IO]` | +| `0x86` | LC → UC | 3B total | 0/1, 2, 3, 4 | Device Notify: no payload | +| `0x80` | LC → UC | 4B total | 0/1, 2, 3, 4 | Startup status (`0xFF`) / LED feedback (`0x3N`) | +| `0x89` | LC → UC | 3B total | 0/1, 2, 3, 4 | Status announce: no payload | +| `0x81` | LC → UC | variable | 0/1 only | `[PORT] [LEN_LO LEN_HI] [DESCRIPTOR] [PID_LO PID_HI] [CHK]` | +| `0x83`, `0x88` | LC → UC | length-prefixed | 0/1 only | `[LEN] [SER] [report-bytes...] [CTR] [CTR_SUM]` | +| `0x01`, `0x02`, `0x04` | LC → UC | fixed (8 / 5 / 8B) | 2 / 2 / 3, 4 | State-2/3/4 keyboard / rel-mouse / abs-mouse | +| `0x10` | LC → UC | 7B total | 2, 3, 4 | VID/PID modify: `[VID_LO VID_HI] [PID_LO PID_HI]` | +| `0x12` | UC → LC | 11B total | 0/1, 2, 3, 4 | Keep-alive: `[P1] [P2] [LED] [STATUS] [VERSION]` | ### Length-prefixed key/mouse frames (CMD `0x83` / `0x88`) @@ -70,7 +75,7 @@ The payload layout depends on `CMD`: - **CTR_SUM** — checksum: `(CTR + sum(report-bytes)) mod 256` where `report-bytes` is everything between SER and CTR, exclusive -CMD `0x88` is used in state 0 (unpaired); CMD `0x83` is used in state 1 (paired). The frame payload format is identical between the two CMDs. +The CMD byte selects state 0 (`0x88`) vs state 1 (`0x83`); the payload format is identical between the two. See [§State Machine](#state-machine) for the transition rule. --- @@ -94,11 +99,11 @@ Sent by the LC at ~1 s cadence when idle. During active key/mouse traffic the ca 57 AB 89 ``` -No payload. In both bidirectional captures (2026-05-03) the LC emitted exactly **3 instances** of `0x89` at ~2 s intervals starting ~1.4 s after the first `0x86`, then stopped — no further `0x89` was observed for the remainder of either ~30 s capture, including across active typing, mouse movement, and disconnect. The function is not fully decoded; the timing suggests it is tied to the attach/announce phase, but two captures is too small a sample to assert this generalises to all sessions. The UC continues normal operation in `0x89`'s absence. +No payload. In state 0/1 captures the LC emits 3 instances at ~2 s intervals starting ~1.4 s after the first `0x86`, then stops for the rest of the session. In states 2/3/4 captures only a single `0x89` is observed, at startup. This is consistent with `0x89` being tied to the descriptor-announce phase: states 2/3/4 have no `0x81` descriptor exchange to wait on, so the opcode is sent once and not repeated. The UC continues normal operation in `0x89`'s absence. See [§Divergences](#divergences-from-the-datasheet) for what the datasheet does (and does not) say about this opcode. ### Device Connection Frame — CMD `0x81` -Sent by the LC at attach time, once per connected USB device. Carries the device's HID Report Descriptor; the UC uses these to construct matching HID descriptors that it will advertise to the target PC over USB. **Without `0x81` frames the UC enumerates a default device whose report-ID layout does not match the LC's `0x83`/`0x88` frames, and all input is dropped on the target.** +Sent by the LC at attach time, once per connected USB device. Carries the device's HID Report Descriptor; the UC uses these to construct matching HID descriptors that it will advertise to the target PC over USB. **Without `0x81` frames in state 0/1 the LC's subsequent `0x83`/`0x88` input frames produce no effect on the target host** — observed empirically. The likely mechanism is that the UC has no descriptor to advertise so its target-side endpoints either fail to enumerate or enumerate with mismatched report IDs; the LC has no way to detect this from its side. ``` 57 AB 81 [PORT] [LEN_LO] [LEN_HI] [DESCRIPTOR...] [PID_LO] [PID_HI] [CHK] @@ -114,9 +119,9 @@ Sent by the LC at attach time, once per connected USB device. Carries the device > **Naming note:** the datasheet calls the leading 1-byte field `ID` and the trailing 2-byte field `2-byte ID`. Empirically the leading byte selects the USB port (0/1) and the trailing 2 bytes propagate into the UC keep-alive's PID-port1/PID-port2 fields, so this document refers to them as `PORT` and `PID`. -The descriptor is a standard USB HID Report Descriptor in the format defined by the USB-IF HID specification (Usage Page, Usage, Collection, Report ID, etc.). The captured mouse and keyboard descriptors used by the reference implementation are 74 and 165 bytes long respectively. The mouse descriptor contains a single `Report ID` item (`0x01`); the keyboard descriptor contains three (`0x01` keyboard, `0x02` system control, `0x03` consumer control). Only `Report ID 0x01` was observed as the `RID` byte in `0x83`/`0x88` frames in the captures; behaviour for the other report IDs is not yet exercised. +The descriptor is a standard USB HID Report Descriptor in the format defined by the USB-IF HID specification (Usage Page, Usage, Collection, Report ID, etc.). The captured mouse and keyboard descriptors used by the reference implementation are 74 and 165 bytes long respectively. The mouse descriptor contains a single `Report ID` item (`0x01`); the keyboard descriptor contains three (`0x01` keyboard, `0x02` system control, `0x03` consumer control). In all observed `0x83`/`0x88` traffic the `RID` byte is `0x01`; the keyboard's secondary report IDs (system control, consumer control) were not exercised. In states 3/4, `0x04` absolute-mouse frames likewise carry `id=0x01` as a fixed prefix. -In both captures the LC retransmitted the keyboard `0x81` frame ~2 s after its first transmission, while the UC's `0x12` keep-alive still showed the keyboard PID slot as `00 00`. Whether the retransmit is purely time-driven or specifically gated on the missing ack cannot be distinguished from the available data — only one retransmit event was observed per capture and in both the ack arrived shortly afterward. +The LC retransmits the keyboard `0x81` frame ~2 s after its first transmission if the UC's `0x12` keep-alive has not yet reflected the keyboard PID. Whether the retransmit is purely time-driven or specifically gated on the missing ack is not pinned down — every observed retransmit was followed shortly by the matching ack, so the two are not separable from the available captures. ### Keyboard — CMD `0x83` / `0x88` @@ -165,7 +170,7 @@ Produced by a real keyboard whose descriptor contains no Report ID item. ### Mouse — CMD `0x83` / `0x88` -Three variants observed, distinguished by LEN and SER. +Three variants observed, distinguished by LEN and SER. The LEN=`0x08` form is not in the datasheet; see [§Divergences](#divergences-from-the-datasheet). #### Absolute mouse with report ID — LEN = `0x0A` @@ -184,7 +189,7 @@ Produced by the CH9329 bridge (which reports absolute coordinates). #### Relative mouse with report ID — LEN = `0x08` -Produced by a real mouse on **port 1** whose descriptor contains a Report ID. Captured 2026-05-03. +Produced by a real mouse on **port 1** whose descriptor contains a Report ID. ``` 57 AB [CMD] 08 [SER=0x22] [RID] [btn] [dx] [dy] [wheel] [CTR] [CTR_SUM] @@ -221,19 +226,18 @@ Keyboard frame `57 AB 83 0C 13 01 00 00 14 00 00 00 00 00 00 15`: 57 AB 86 ``` -Emitted by the LC on USB device events. The same opcode is used for both **attach** and **disconnect**; the differentiator is what follows: +Emitted by the LC on USB device events. The same opcode is used for both **attach** and **disconnect**; what disambiguates is the follow-up traffic. See [§Attach Sequence Timeline](#attach-sequence-timeline) for the attach case and [§Disconnect Sequence](#disconnect-sequence) for the disconnect case. The datasheet (§4.6) names this "Device Disconnect Command" and is partially incorrect on both opcode reuse and the claimed UC reset; see [§Divergences](#divergences-from-the-datasheet). -- **Attach:** `0x86` is the first frame, followed by `0x80 0xFF` (×2), heartbeats, `0x89`, and one `0x81` Device Connection Frame per attached device. -- **Disconnect:** a *bare* `0x86` with no follow-up frames (no `0x80`, no `0x81`). One `0x86` per device removed; LC continues heartbeating normally afterward. +### Status / LED — CMD `0x80` -The datasheet (§4.6) names this "Device Disconnect Command" and claims the UC "will reset the chip when it receives the command." On the wire neither claim is fully accurate: (a) the same opcode fires at attach time, and (b) the UC's `0x12` keep-alive continues uninterrupted with its previously-learned PIDs even after both devices have been unplugged — no externally-visible reset occurs. +``` +57 AB 80 [VAL] +``` -### Other Startup Opcodes (LC → UC) +Single-byte payload, dual-purpose: -| CMD | Payload | Role | -|-----|---------|------| -| `0x80` | 1 byte (`0xFF` observed, twice) | Sent twice ~210–260 ms apart, after the attach `0x86`. Function not fully decoded. State-2/3/4 only per datasheet §4.8, but observed in state 0/1. | -| `0x89` | — | First instance ~1 s after `0x80`; observed firing ~3 times at ~2 s intervals during the descriptor-announce phase, then stopping once forwarding begins. Not in datasheet. | +- **Startup (`VAL=0xFF`):** sent twice ~210–260 ms apart immediately after the attach `0x86`. Means "LED state unknown" (pre-enumeration default). +- **State-2/3/4 LED feedback (`VAL=0x3N`):** during operation the LC emits `0x80 (0x30 | LED_BITS)` to mirror the target host's keyboard LED state back to the source keyboard. Low nibble matches the NumLk/CapsLk/ScrLk encoding of `0x12`'s `LED` byte (bit 0/1/2). Not observed in state 0/1 captures. --- @@ -255,9 +259,9 @@ Total frame length: 11 bytes (header 2 + cmd 1 + payload 8). | `P2` | 2B LE | PID of port 2 — populated similarly for port 2 | | `LED` | 1B | keyboard LED state: bit 0 = Num Lock, bit 1 = Caps Lock, bit 2 = Scroll Lock. `0xFF` observed when target host hasn't reported LED state yet | | `STATUS` | 1B | bit-encoded UC health/enumeration state — see below | -| `VERSION` | 2B | `AC 20` typical (last byte alternates `0B`/`20`) | +| `VERSION` | 2B | high byte `0xAC` constant; low byte observed as `0x20` at steady state and `0x0B` during transients (first frame after attach, frame after a `STATUS` change). Purpose not decoded | -`STATUS` byte interpretation (empirical, 2026-05-03): +`STATUS` byte interpretation (empirical): | Bit | Mask | Meaning | |-----|------|---------| @@ -267,25 +271,19 @@ Total frame length: 11 bytes (header 2 + cmd 1 + payload 8). Common values: - `0x07` — both devices live on target, HID forwarding works (the only "all green" state) -- `0x04` — UART up but target hasn't enumerated devices yet (e.g. cable in DM/DP-less port, or post-reattach before re-enumeration) -- `0xFF` — transient/error during cable yank +- `0x04` — UART up, no target-side enumeration. Reasons include: cable in a DM/DP-less port, target replug pending re-enumeration (see [§Reattach](#re-attach-on-the-ucs-usb-device-side-target-replug)), board-mode dipswitch wrong, or no target host attached +- `0xFF` — UC's "fully unknown" state. Observed at startup (one or two frames before the UC settles into `0x07` or `0x04`), and during target-side cable yank - `0x00` — pre-attach, before UC is fully up -The `P1`/`P2` fields start as `00 00` after power-on and progressively populate as the UC processes each `0x81` frame. The LC uses this to confirm that the UC has accepted its descriptors before transitioning to state 1. - -> **State-1 entry is necessary but not sufficient for forwarding to work.** State-1 is gated on PID-ack (a UART-internal handshake — UC reflects PIDs once it has stored each `0x81`'s descriptor). It does **not** require any USB-device-side enumeration on the target. The proper "is HID actually being forwarded" indicator is `STATUS == 0x07`, not state-1 entry. A board with no DM/DP wiring, or a UC port that doesn't reach a target host, will still complete the UART-side handshake and reach state 1 — but `STATUS` will stay at `0x04` indefinitely and no input will land on a target. - -> **Diagnostic.** If the LC-side handshake completes (PIDs ack'd, state 1 entered) but `STATUS` persists at `0x04` and `LED` persists at `0xFF`, the protocol negotiation is healthy and the issue is downstream of the UART link — typically wiring (cable plugged into a port without a DM/DP path), a board-mode dipswitch in the wrong position, or no target host actually attached on DM/DP. Verified 2026-05-03 by plugging the target USB cable into a board's HM/HP-only port: LC frames byte-identical to the working case, but `STATUS` never moves off `0x04`. +The `P1`/`P2` fields start at `00 00` after power-on and populate as the UC processes each `0x81` frame. State-1 entry is gated on PID-ack (matching `P1`/`P2`), not on receiving any `0x12`. **`STATUS == 0x07` is the real "is HID actually being forwarded" indicator, not state-1 entry** — a board can complete the UART-side handshake and reach state 1 yet have `STATUS` stuck at `0x04` indefinitely with no input reaching the target. See [§State Machine](#state-machine) for the transition rule and [§Divergences](#divergences-from-the-datasheet) for the comparison with the datasheet. -> **Single-DM/DP boards.** Many CH9350L breakout boards expose two USB-A ports but only wire DM/DP through to one of them. On such boards, the UC's USB-device cable to the target PC **must** be plugged into the port with the wired DM/DP pair — the other port will complete the UART handshake (state 1, PIDs ack'd) but `STATUS` will stay at `0x04` and no HID input will reach the target. Identify the correct port empirically: the one where `STATUS` reaches `0x07` and the on-board LEDs mirror host NumLk/CapsLk/ScrLk state. - -> **Interpretation (USB HID).** The `LED` byte is the channel through which a USB HID OUTPUT report (host → keyboard, NumLk/CapsLk/ScrLk) reaches the LC so the physical keyboard's LEDs can be driven. This explains the cadence behaviour: when idle the UC has nothing new to forward and emits `0x12` at a steady ~1 s heartbeat; during typing the UC services more USB transactions on its target side and emits `0x12` more frequently. Each `0x83`/`0x88` keystroke from the LC also corresponds to an INPUT report consumed by the host on the UC side, which may produce `SET_REPORT` traffic the UC needs to forward. +> **Diagnostic — `STATUS` stuck at `0x04`.** If the LC-side handshake completes (PIDs ack'd, state 1 entered) but `STATUS` persists at `0x04` and `LED` persists at `0xFF`, the protocol negotiation is healthy and the issue is downstream of the UART link. The most common cause is a single-DM/DP-port board where the target cable is plugged into the unwired port — the board used for these captures has two USB-A ports but only one wired DM/DP pair, and only the wired port reaches `STATUS=0x07`. Confirmed by swapping ports: LC frames were byte-identical, but `STATUS` never moved off `0x04` on the wrong port. Identify the correct port empirically: the one where `STATUS` reaches `0x07` and the on-board LEDs mirror host NumLk/CapsLk/ScrLk state. --- ## Attach Sequence Timeline -LC→UC and UC→LC frames from the bidirectional capture taken 2026-05-03 (sniff_lc.txt + sniff_uc.txt), expressed as deltas from the first `0x86`. Times are observational and will vary between runs. +LC→UC and UC→LC frames from a bidirectional state-0/1 capture ([gist](https://gist.github.com/sjmf/c1412b40e38f44738278c52416d5c0a9)), expressed as deltas from the first `0x86`. Times are observational and will vary between runs. ``` t=0.000 LC → UC 57 AB 86 attach @@ -308,7 +306,7 @@ After both `P1` and `P2` in the UC's keep-alive match the `PID` values the LC se ## Disconnect Sequence -When a USB device is unplugged from the LC mid-session, only a single bare `0x86` is emitted; no other frames accompany it. Heartbeats continue at their normal cadence. From sniff_lc2.txt (2026-05-03), with the user unplugging the mouse first and the keyboard ~2 s later: +When a USB device is unplugged from the LC mid-session, only a single bare `0x86` is emitted; no other frames accompany it. Heartbeats continue at their normal cadence. From a capture with the mouse unplugged first and the keyboard ~2 s later: ``` ... key/mouse frames, then idle ... @@ -320,13 +318,13 @@ LC → UC 57 AB 82 A3 heartbeat (cadence unchanged) ... heartbeats only thereafter ... ``` -The interval between the two `0x86` frames in this capture (~2 s) was set by user action, not by the protocol. The UC's `0x12` keep-alive does **not** zero its `P1`/`P2` PID slots after disconnect on the LC's USB-host side — it continues to report the last-known PIDs at its normal ~1 s cadence. The LC also remains in state 1 (CMD `0x83`) and does not revert to state 0. +The interval between the two `0x86` frames in this capture (~2 s) reflects the operator's actions, not any protocol timer. The UC's `0x12` keep-alive does **not** zero its `P1`/`P2` PID slots after disconnect on the LC's USB-host side — it continues to report the last-known PIDs at its normal ~1 s cadence. The LC also remains in state 1 (CMD `0x83`) and does not revert to state 0. ### Re-attach on the UC's USB-device side (target replug) When the UC's *target-PC* USB cable is unplugged and re-plugged (a different event from an LC-side peripheral disconnect), the UC's `0x12` does react: `P1`/`P2` clear to `00 00` for one or two frames during the transient, `STATUS` flashes `0xFF`, then PIDs settle back to their previous values but `STATUS` remains at `0x04` until the LC drives a re-enumeration. -To get `STATUS` back to `0x07` (i.e. devices re-enumerated on the target host), the LC must replay the **full** attach sequence (`0x86 → 0x80 0xFF ×2 → 0x89 → 0x81 ×N`). Retransmitting `0x81` alone is insufficient — the UC accepts the descriptors and reflects the PIDs in `0x12`, but does not re-present its USB-device side to the target host. Validated 2026-05-03 with the PoC's `_run_attach_sequence(wait_for_uc=False)` reattach trigger. +To get `STATUS` back to `0x07` (i.e. devices re-enumerated on the target host), the LC must replay the **full** attach sequence (`0x86 → 0x80 0xFF ×2 → 0x89 → 0x81 ×N`). Retransmitting `0x81` alone is insufficient — the UC accepts the descriptors and reflects the PIDs in `0x12`, but does not re-present its USB-device side to the target host. Validated by the PoC's `_run_attach_sequence(wait_for_uc=False)` reattach trigger. --- @@ -344,16 +342,13 @@ To get `STATUS` back to `0x07` (i.e. devices re-enumerated on the target host), CMD = 0x88 CMD = 0x83 ``` -- In **state 0**, the LC sends heartbeats and key/mouse frames with CMD `0x88`. -- In **state 1**, CMD switches to `0x83`. Frame payload format is identical. -- The LC emits a heartbeat at ~1 s cadence in both states. `0x89` status announces appeared only during the attach phase in available captures (see [§Status Announce](#status-announce--cmd-0x89)). -- Receiving any `0x12` from the UC is **not sufficient** for state-1 transition — the UC must have acknowledged every `0x81` the LC sent (matching PIDs in P1/P2). This was previously believed to be a single-frame transition; bidirectional capture proved otherwise. +State 0 (`0x88`) is the unpaired form; state 1 (`0x83`) is the paired form. The CMD byte switches; the frame payload is identical. Heartbeats run at ~1 s cadence in both states. **Transition trigger:** the UC's `0x12` keep-alive must reflect every PID the LC announced via `0x81` in its `P1`/`P2` fields — receiving any single `0x12` is *not* sufficient. See [§Divergences](#divergences-from-the-datasheet) for how this differs from the datasheet's wording. --- ## Labeling Byte (SER) -`SER` (the byte after `LEN` in `0x83`/`0x88` frames) is a bitfield, not a free-form USB address. Per CH9350 datasheet §4.3: +`SER` (the byte after `LEN` in `0x83`/`0x88` frames) is a packed bitfield encoding device class, USB protocol mode, and port number. Per CH9350 datasheet §4.3: | Bit | Meaning | |-----|---------| @@ -409,35 +404,33 @@ The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) an | `0x04` | `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` | 3, 4 | Absolute mouse — `id`=`0x01`, X/Y as 16-bit LE | | `0x10` | `57 AB 10 [VID_LO] [VID_HI] [PID_LO] [PID_HI]` | 2, 3, 4 | VID/PID modification (datasheet §3, p.9): override the UC's USB descriptor identity | -Empirical capture (2026-05-03, bidirectional sniff with `S1=HIGH, S0=LOW` on both boards): +Verified empirically across all three modes by bidirectional sniff: [state-2 gist](https://gist.github.com/sjmf/9bf8975412ecbb0985bd4e5c549a915d), [state-3/4 gist](https://gist.github.com/sjmf/5a3fd16fbe81668eddacb0fb4951e09b). -- **Startup announce still happens.** The LC emits `0x86 → 0x80 0xFF → 0x89 → 0x80 0xFF` at attach, identical to state 0/1 but with **no `0x81` Device Connection frames**. The UC has built-in descriptors and does not need them. -- **UC keep-alive (`0x12`) still flows.** Within ~250 ms of the LC's startup announce, the UC begins emitting `0x12` keep-alives at ~1 s cadence and `STATUS` reaches `0x07` (both ports enumerated on target). PIDs in `P1`/`P2` stay at `0000` for the entire session (no descriptor announce, nothing to ack), confirming `STATUS` bits are gated on USB-side enumeration on the target, **not** on PID-ack. -- **`0x80` is reused as a LED-feedback channel from LC → UC.** During operation the LC emits `0x80 0xNN` frames where `NN` is `0x30 | LED_BITS` — high nibble `3` is a fixed type marker, low nibble carries the same NumLk/CapsLk/ScrLk encoding as `0x12`'s LED byte. Example: pressing CapsLk causes the LC to emit `01 00 00 39 ...` (CAPS down) → UC responds with `12 ... led=0x02` → LC echoes `80 32`; on release the LC drops back to `80 30`. The "Status Change Command" name from datasheet §4.8 is a reasonable fit, and this is the mode in which it actually appears. -- **Per-keystroke retransmit.** Each key event produces 3–4 repeated frames on the wire (no SER, no counter, no checksum, so the LC cannot detect loss — it just retransmits). -- **Mouse `0x02` verified empirically (2026-05-03, mouse_lc.txt).** Format on the wire is exactly `57 AB 02 [btn] [dx] [dy] [wheel]` with signed 8-bit dx/dy (two's complement) and no counter/checksum. The LC emits up to ~7 frames per ~50 ms burst during continuous motion — much higher rate than keyboard, with no retransmit padding (a dropped sample is masked by the next one). Button and wheel bytes were 0 throughout the captured run; only dx/dy varied. -- **Idle keyboard reports interleaved with mouse activity.** With both a keyboard and mouse plugged into the LC, continuous mouse motion produces occasional `57 AB 01 00 00 00 00 00 00 00 00` frames (no key pressed) interleaved with mouse frames. They appear only during active mouse traffic and stop when the mouse stops — not seen during keyboard-only typing or steady-state idle. Most likely the LC's underlying USB host poll cycle reads both endpoints together and emits the keyboard endpoint's "no change" report alongside each batch of mouse reports. +**Common to all three modes (2, 3, 4):** -**State 2 verified to drop absolute mouse.** 2026-05-03 (absmouse_lc.txt) plugged a CH9329 enumerated as a USB absolute-mouse + keyboard composite into the LC in state 2: keyboard reports forwarded via `0x01`, but no `0x04` frames ever appeared on the wire and abs-mouse coordinates were silently dropped. The link was healthy throughout (`STATUS=0x07`) — the LC simply has no destination for abs-mouse reports because the UC's state-2 built-in descriptor is relative-only. Switching the dipswitches to state 3 or 4 fixes this. +- **Startup announce.** The LC emits `0x86 → 0x80 0xFF → 0x89 → 0x80 0xFF` at attach, identical to state 0/1 but with **no `0x81` Device Connection frames** — the UC has built-in descriptors and does not need them. +- **UC keep-alive (`0x12`) flows.** Within ~250 ms of the startup announce, the UC begins emitting `0x12` keep-alives at ~1 s cadence and `STATUS` reaches `0x07`. `P1`/`P2` stay at `0000` for the entire session (no descriptor announce, nothing to ack), confirming that `STATUS` bits are gated on USB-side enumeration on the target, **not** on PID-ack. +- **`0x80 0x3N` LED-feedback channel** from LC → UC during operation, mirroring the host's keyboard LED state back to the source keyboard. Example: pressing CapsLk → LC emits `01 00 00 39 ...` → UC responds with `12 ... led=0x02` → LC echoes `80 32`; on release the LC drops back to `80 30`. +- **Per-keystroke retransmit.** Each key event produces 3–4 repeated frames on the wire (no SER, no counter, no checksum, so the LC cannot detect loss — it just retransmits). -### State 3/4 verified empirically (2026-05-03, s3_lc.txt / s4_lc.txt) +**State 2 (relative mouse):** -States 3 and 4 are **on-the-wire identical to state 2 except they emit `0x04` absolute-mouse frames instead of (or alongside) `0x02` relative ones**: +- **Mouse `0x02` format verified.** `57 AB 02 [btn] [dx] [dy] [wheel]` with signed 8-bit dx/dy (two's complement). The LC emits up to ~7 frames per ~50 ms burst during continuous motion — higher rate than keyboard, with no retransmit padding (a dropped sample is masked by the next). +- **Idle keyboard reports during mouse activity.** With both a keyboard and mouse plugged into the LC, continuous mouse motion produces occasional `57 AB 01 00 00 00 00 00 00 00 00` frames (no key pressed) interleaved with mouse frames. They appear only during active mouse traffic — not during keyboard-only typing or steady-state idle. Most likely the LC's USB host poll cycle reads both endpoints together and emits the keyboard endpoint's "no change" report alongside each batch of mouse reports. +- **State 2 silently drops absolute mouse.** Plugging a CH9329 (abs-mouse + keyboard composite) into the LC in state 2: keyboard reports forwarded via `0x01`, but no `0x04` frames ever appeared on the wire and abs-mouse coordinates were silently dropped. The link was healthy throughout (`STATUS=0x07`); the LC simply has no destination for abs-mouse reports because the UC's state-2 built-in descriptor is relative-only. Switching to state 3 or 4 fixes this. -- Same startup announce: `0x86 → 0x80 0xFF → 0x89 → 0x80 0xFF`. No `0x81`. -- Same UC `0x12` keep-alive cadence and `STATUS=0x07` semantics. PIDs stay `0000`. -- Same `0x80 0x3N` LED-feedback channel from LC → UC. -- Same per-keystroke retransmit pattern. -- **`0x04` frames empirically verified.** Format on the wire: `57 AB 04 0x01 [btn] [XL XH] [YL YH] [wheel]` — 7-byte payload after the cmd byte; `id=0x01` is a fixed report-ID prefix; X/Y are 16-bit little-endian. -- **Even with a relative-only physical mouse plugged into the LC**, the LC integrates the dx/dy deltas internally and emits absolute coordinates over the wire. So states 3/4 force absolute-mouse semantics on the target regardless of what the source device reports. +**States 3 and 4 (absolute mouse):** -State 3 and state 4 captures look identical at the UART layer — confirming the datasheet: the difference is only in the UC's USB-side built-in descriptor (HID Mouse vs HID Digitizers), not in any LC→UC framing. From the kvm-serial implementation perspective, **states 3 and 4 share the same code path**; the user picks between them by physically setting the dipswitches based on what their target host supports. +- **No `0x02` frames on the wire** — only `0x04`. State-2 relative-mouse and state-3/4 absolute-mouse modes are mutually exclusive. +- **`0x04` format verified.** `57 AB 04 0x01 [btn] [XL XH] [YL YH] [wheel]` — 7-byte payload after the cmd byte; `id=0x01` is a fixed report-ID prefix; X/Y are 16-bit little-endian. +- **The LC integrates relative motion into absolute coordinates** when the source device is a relative-motion mouse. So states 3/4 force absolute-mouse semantics on the target regardless of what the source device reports. +- **States 3 and 4 are indistinguishable at the UART layer.** The difference is only in the UC's USB-side built-in descriptor (HID Mouse vs HID Digitizers), not in any LC→UC framing. From an implementation perspective, **states 3 and 4 share the same code path**; the operator picks between them via dipswitches based on the target host. --- ## Divergences from the datasheet -The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts what a real CH9350L LC actually emits on the wire. All bidirectional captures referenced below were taken on 2026-05-03 against a known-working hardware setup (real LC + USB keyboard + USB mouse, paired with a real UC that successfully forwarded HID input to a target PC). +The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts what a real CH9350L LC actually emits on the wire. The captures referenced below were all taken against a known-working hardware setup (real LC + USB keyboard + USB mouse, paired with a real UC that successfully forwarded HID input to a target PC). ### `0x86` is fired at both attach and disconnect, and the UC does not reset @@ -446,16 +439,16 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Observed (disconnect):** the LC emits a *bare* `0x86` per device unplugged, with no follow-up frames. The opcode is the same in both contexts; the presence or absence of subsequent `0x80`/`0x89`/`0x81` frames is what disambiguates. - **No chip reset:** after both devices are disconnected, the UC's `0x12` keep-alive continues at its normal cadence with its previously-learned PIDs in the `P1`/`P2` slots. Whatever "reset" the datasheet refers to is internal to the UC and not visible from the LC side. -### `0x80` is used in state 0/1 and state 2 +### `0x80` is used in every state, not only state 2/3/4 - **Datasheet (§4.8 "Status Change Command"):** *"State 2/3/4 supports this command, which is sent by the lower computer, received by the upper computer and has response."* -- **Observed in state 0/1:** `0x80 0xFF` is sent twice (~210–260 ms apart) at attach time, immediately after `0x86`. The `0xFF` payload appears to mean "LED state unknown" (pre-enumeration default). -- **Observed in state 2:** in addition to the same `0x80 0xFF` startup pair, `0x80 0xNN` recurs during operation as a LED-feedback channel from LC → UC. The payload encodes `0x30 | LED_BITS` where the low nibble matches the NumLk/CapsLk/ScrLk encoding of `0x12`'s LED byte. This matches the datasheet's "Status Change Command" name and direction; the datasheet is correct that it operates in state 2, but wrong that it is *exclusive* to state 2/3/4. +- **Observed in state 0/1:** `0x80 0xFF` is sent twice (~210–260 ms apart) at attach time, immediately after `0x86`. The `0xFF` payload means "LED state unknown" (pre-enumeration default). +- **Observed in states 2/3/4:** the same `0x80 0xFF` startup pair, plus a recurring `0x80 0xNN` LED-feedback channel during operation (`NN = 0x30 | LED_BITS`). The datasheet's "Status Change Command" naming is consistent with this LED-feedback role; the datasheet is wrong that the opcode is *exclusive* to states 2/3/4. ### `0x89` is not defined in the datasheet at all - **Datasheet:** no entry for `0x89`. -- **Observed:** in two attach captures, sent 3 times at ~2 s intervals starting ~1.4 s after the first `0x86`, then not seen again for the rest of either ~30 s capture (across typing, mouse movement, and disconnect). Whether `0x89` reappears in longer-running sessions has not been verified. +- **Observed:** sent 3 times at ~2 s intervals during the descriptor-announce phase in state 0/1, and once at startup in states 2/3/4 (where there is no descriptor announce). Not seen during steady-state operation, typing, mouse movement, or disconnect. ### `0x81` is sent at attach in state 0, not on "device property mismatch" in state 1 @@ -486,14 +479,6 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts --- -## Implementation in kvm-serial - -The reference implementation in `ch9350_poc.py` reproduces the attach -sequence and emits matching `0x81` frames using captured HID Report -Descriptors. The mouse and keyboard descriptors built into the script -match the bytes captured from a real CH9350L LC at attach time, including -the trailing PID and checksum. The frame *content* is byte-identical to -what a real LC emits; frame *timing* (heartbeat / `0x89` cadence, -inter-frame gaps) is approximate and does not aim to match the real LC. -The UC accepts the resulting frames and forwards keys to the target PC -end-to-end, verified manually on 2026-05-03. +## Reference Implementation + +`ch9350_poc.py` ([gist](https://gist.github.com/sjmf/c4329fd27e403a264648bf4e7744655a)) reproduces the attach sequence and emits matching `0x81` frames using HID Report Descriptors captured byte-for-byte from a real CH9350L LC. Frame *content* is byte-identical to what a real LC emits; frame *timing* (heartbeat / `0x89` cadence, inter-frame gaps) is approximate. For the curious, the reverse-engineering process for each stage of the protocol is described in more detail on [issue #13](https://github.com/sjmf/kvm-serial/issues/13). From e2d612e47c86b5db400e238a16be74ae40ca7277 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 10:44:14 +0100 Subject: [PATCH 10/45] docs(ch9350l): update docs regarding HID Digitizers for state-3/4 cursor motion The defining feature of state 4 is that the UC identifies on the target USB bus as a HID Digitizers device class (graphics-tablet/pen input), not as a regular mouse: clear that up. Real S4 LC emits 0x04 abs-mouse frames with sub-pixel ~50 ms deltas during continuous motion. An emulator that fires one isolated frame per move command produces no visible cursor movement on the target even though the report does reach the target's USB host (screen un-dims). The possible mechanism is that HID Digitizers / abs-mouse drivers treat isolated reports as glitches and only act on a sustained stream. Any S3/4 LC integration that wants cursor motion can burst frames per move event, mimicking the real LC's poll-driven cadence. --- docs/CH9350L_PROTO.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 9d18f0f..aa24fae 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -387,13 +387,13 @@ States 2, 3 and 4 are simpler modes that bypass the descriptor-exchange handshak | HIGH | HIGH | 0/1 (default) | None — descriptor sent over UART via `0x81` | | HIGH | LOW | 2 | BIOS keyboard + **relative** mouse | | LOW | HIGH | 3 | BIOS keyboard + **absolute** mouse | -| LOW | LOW | 4 | BIOS keyboard + abs mouse + **HID Digitizers** (multi-monitor) | +| LOW | LOW | 4 | BIOS keyboard + **HID Digitizers** (replaces abs mouse for multi-monitor) | The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) and means a USB HID Boot-protocol keyboard — the kind a PC's BIOS/UEFI accepts before any OS-level HID drivers load. The mouse semantics, however, differ between the three modes, and that determines which mode is appropriate for which environment: - **State 2 — legacy / pre-boot.** BIOS keyboard + *relative* mouse. This is the right choice for BIOS setup, boot menus, recovery consoles, and UEFI CSM environments, where the boot mouse protocol only understands relative motion. States 3 and 4 will not enumerate in those environments because their absolute-mouse / HID-Digitizers descriptors fall outside the boot protocol. - **State 3 — modern OS, no handshake, abs mouse.** BIOS keyboard + absolute mouse. Useful when the descriptor-exchange handshake of state 0/1 isn't available (e.g. minimal embedded LC firmware) but absolute-cursor positioning is wanted. Most modern OSes (Linux, macOS, Windows) accept the abs-mouse interface. -- **State 4 — Windows multi-monitor.** BIOS keyboard + abs mouse + HID Digitizers. Solves the Windows 7+ extended-screen problem where plain abs-mouse only addresses the primary monitor; HID Digitizers can address the full virtual desktop. Note from §3.5: *"some systems do not support HID Digitizers devices"* — non-Windows targets should usually pick state 3 instead. +- **State 4 — Windows multi-monitor.** **The defining feature of state 4 is that the UC identifies on the target USB bus as a HID Digitizer** (the same device class as a graphics tablet / pen input), not as a regular mouse. That's the entire point of state 4's existence: the chip exposes a different USB device class so the host OS routes pointer reports through its digitizer/pen pipeline rather than its mouse pipeline. The HID Digitizers class itself is widely supported (Linux `hid-multitouch`, macOS, Android, iOS, Windows all parse the descriptors), but **how the OS routes those reports is implementation-dependent.** On Windows 7+, digitizer abs-coords map cleanly to the full virtual desktop spanning multiple monitors — solving the limitation that a plain abs-mouse only addresses the primary monitor. On Linux, macOS, and other targets, a digitizer report may land in a tablet/pen input pipeline rather than driving the system cursor, depending on the desktop environment and its input stack. The datasheet's terse §3.5 caveat — *"some systems do not support HID Digitizers devices"* — is best read as "OS routing of digitizer events to the cursor varies; verify on your target" rather than as a strict OS allowlist. State 3 (UC identifies as a regular HID Mouse with absolute coords) is the safer default for plain cursor-positioning KVM use. ### LC → UC fixed-length frames @@ -424,7 +424,8 @@ Verified empirically across all three modes by bidirectional sniff: [state-2 gis - **No `0x02` frames on the wire** — only `0x04`. State-2 relative-mouse and state-3/4 absolute-mouse modes are mutually exclusive. - **`0x04` format verified.** `57 AB 04 0x01 [btn] [XL XH] [YL YH] [wheel]` — 7-byte payload after the cmd byte; `id=0x01` is a fixed report-ID prefix; X/Y are 16-bit little-endian. - **The LC integrates relative motion into absolute coordinates** when the source device is a relative-motion mouse. So states 3/4 force absolute-mouse semantics on the target regardless of what the source device reports. -- **States 3 and 4 are indistinguishable at the UART layer.** The difference is only in the UC's USB-side built-in descriptor (HID Mouse vs HID Digitizers), not in any LC→UC framing. From an implementation perspective, **states 3 and 4 share the same code path**; the operator picks between them via dipswitches based on the target host. +- **States 3 and 4 are indistinguishable at the UART layer** because the choice between them is made on the UC, not the LC. The UC reads its own dipswitch and selects which built-in descriptor to advertise to the target — HID Mouse for state 3, HID Digitizers for state 4 — without any signalling from the LC. The LC just emits `0x04` abs-coordinate frames either way, and the UC routes them to whichever of its built-in descriptors is active. From an implementation perspective, **states 3 and 4 share the same LC code path**; the operator picks between them via dipswitches on the UC based on what the target host supports. +- **Sustained frame stream required for cursor motion.** A real LC emits `0x04` frames at ~50 ms intervals during continuous motion (typically hundreds of frames over a few seconds, with sub-pixel deltas rolled forward into each next frame). An emulator that fires one isolated `0x04` per command does *not* produce visible cursor movement on the target — even though the target's USB host controller still receives the report (the screen un-dims, indicating the OS sees activity). The likely mechanism is that HID Digitizers / abs-mouse drivers require a sustained stream to treat reports as active input rather than as glitches; isolated reports wake the bus but do not update the cursor. The PoC's REPL `m X Y` issues one frame per command and reproduces this "screen wakes, cursor doesn't move" symptom; an LC integration that wants S3/4 cursor motion must emit a continuous burst per move event, mimicking the real LC's poll-driven cadence. --- From 0f18e48615ec249bf95b41f87cfaa8cc5bf788c4 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 10:45:55 +0100 Subject: [PATCH 11/45] docs(ch9350l): swap labelling spellings to British English (towards #13) "Digitizer" kept as-is since it's the formal USB HID device class name. --- docs/CH9350L_PROTO.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index aa24fae..0c79b16 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -70,7 +70,7 @@ The payload layout depends on `CMD`: ``` - **LEN** — number of bytes following LEN, i.e. `SER(1) + report-bytes(n) + CTR(1) + CTR_SUM(1)` -- **SER** — labeling byte; encodes device class, protocol, and port number (see §Labeling Byte) +- **SER** — labelling byte; encodes device class, protocol, and port number (see §Labelling Byte) - **CTR** — monotonically increasing session counter, mod 256; separate per SER - **CTR_SUM** — checksum: `(CTR + sum(report-bytes)) mod 256` where `report-bytes` is everything between SER and CTR, exclusive @@ -136,7 +136,7 @@ Two variants are produced depending on the USB device connected to the LC. | Field | Value | Notes | |-------|-------|-------| | LEN | `0x0C` (12) | | -| SER | `0x13` | keyboard / HID / port 2 (see §Labeling Byte) | +| SER | `0x13` | keyboard / HID / port 2 (see §Labelling Byte) | | RID | report ID byte | `0x01` for the captured keyboard descriptor | | `mod` | modifier byte | USB HID boot protocol modifier bitmask | | `rsvd` | `0x00` | reserved per HID boot keyboard | @@ -346,7 +346,7 @@ State 0 (`0x88`) is the unpaired form; state 1 (`0x83`) is the paired form. The --- -## Labeling Byte (SER) +## Labelling Byte (SER) `SER` (the byte after `LEN` in `0x83`/`0x88` frames) is a packed bitfield encoding device class, USB protocol mode, and port number. Per CH9350 datasheet §4.3: @@ -393,7 +393,7 @@ The "BIOS keyboard" wording comes straight from the datasheet (§3.3 et seq.) an - **State 2 — legacy / pre-boot.** BIOS keyboard + *relative* mouse. This is the right choice for BIOS setup, boot menus, recovery consoles, and UEFI CSM environments, where the boot mouse protocol only understands relative motion. States 3 and 4 will not enumerate in those environments because their absolute-mouse / HID-Digitizers descriptors fall outside the boot protocol. - **State 3 — modern OS, no handshake, abs mouse.** BIOS keyboard + absolute mouse. Useful when the descriptor-exchange handshake of state 0/1 isn't available (e.g. minimal embedded LC firmware) but absolute-cursor positioning is wanted. Most modern OSes (Linux, macOS, Windows) accept the abs-mouse interface. -- **State 4 — Windows multi-monitor.** **The defining feature of state 4 is that the UC identifies on the target USB bus as a HID Digitizer** (the same device class as a graphics tablet / pen input), not as a regular mouse. That's the entire point of state 4's existence: the chip exposes a different USB device class so the host OS routes pointer reports through its digitizer/pen pipeline rather than its mouse pipeline. The HID Digitizers class itself is widely supported (Linux `hid-multitouch`, macOS, Android, iOS, Windows all parse the descriptors), but **how the OS routes those reports is implementation-dependent.** On Windows 7+, digitizer abs-coords map cleanly to the full virtual desktop spanning multiple monitors — solving the limitation that a plain abs-mouse only addresses the primary monitor. On Linux, macOS, and other targets, a digitizer report may land in a tablet/pen input pipeline rather than driving the system cursor, depending on the desktop environment and its input stack. The datasheet's terse §3.5 caveat — *"some systems do not support HID Digitizers devices"* — is best read as "OS routing of digitizer events to the cursor varies; verify on your target" rather than as a strict OS allowlist. State 3 (UC identifies as a regular HID Mouse with absolute coords) is the safer default for plain cursor-positioning KVM use. +- **State 4 — HID Digitizer.** The defining feature of state 4 is that the UC identifies on the target USB bus as a HID Digitizer (the same device class as a graphics tablet / pen input), not as a regular mouse. The chip exposes a different USB device class so the host OS routes pointer reports through its digitizer/pen pipeline rather than its mouse pipeline. The HID Digitizers class itself is widely supported (Linux `hid-multitouch`, macOS, Android, iOS, Windows all parse the descriptors), but **how the OS routes those reports is implementation-dependent.** On Windows 7+, digitizer abs-coords map cleanly to the full virtual desktop spanning multiple monitors — solving the limitation that a plain abs-mouse only addresses the primary monitor. On Linux, macOS, and other targets, a digitizer report may land in a tablet/pen input pipeline rather than driving the system cursor, depending on the desktop environment and its input stack. The datasheet's §3.5 caveat — *"some systems do not support HID Digitizers devices"* — is best read as "OS routing of digitizer events to the cursor varies; verify on your target" rather than as a strict OS allowlist. State 3 (UC identifies as a regular HID Mouse with absolute coords) is the safer default for plain cursor-positioning KVM use. ### LC → UC fixed-length frames @@ -468,7 +468,7 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Observed:** the UC sends `0x12` keep-alives starting ~30 ms after the second `0x80 0xFF`, well before any `0x81` has been sent — and continues sending them with `00 00` PIDs until each `0x81` is processed. The LC does not transition to state 1 (CMD `0x83`) until the UC's `0x12` reflects **every** PID the LC has announced via `0x81`. This was proven by bidirectional capture: with two devices announced, the LC stayed in state 0 until both `P1` and `P2` were populated in the UC's keep-alive. - **Interpretation (USB HID):** this is the natural ordering rule for a composite HID device — INPUT reports for any interface cannot be safely forwarded until *all* configured interfaces have completed enumeration on the target host. The PID-ack gate is the LC's mechanism for waiting on that. -### Labeling byte: "Unknown" protocol bits are valid +### Labelling byte: "Unknown" protocol bits are valid - **Datasheet (§4.3):** documents bits 2,1 as `01 = HID, 10 = BIOS, 00 = Unknown, 11 = reserved`, implying only HID/BIOS are usable. - **Observed:** SER values `0x11` (kbd / Unknown / port 2) and `0x20` (mouse / Unknown / port 1) are routinely sent by a real LC for keyboards and mice whose USB descriptors lack a `Report ID` item, and the UC forwards them correctly. The "Unknown" classification is a normal operating mode, not an error condition. From 070907a63892f05c27b162276c996f420f2ba728 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 12:27:55 +0100 Subject: [PATCH 12/45] Refactor DataComm into ABC + CH9329Comm subclass, towards #13 DataComm becomes an abstract base for chip-family protocol implementations, with abstract send_scancode/release matching the surface every *op caller already uses. Existing CH9329 packet building moves into CH9329Comm. BaseOp.__init__ takes a comm_cls kwarg (default CH9329Comm) so future code paths can plug in CH9350Comm without further changes. Tests patching DataComm in baseop / mouse paths now patch CH9329Comm. test_communication.py TestDataComm renamed to TestCH9329Comm to be honest about what it covers; CH9350Comm will get its own suite. The ValueError raised for a malformed packet header now reads "CH9329 packet header..." to match. --- kvm_serial/backend/implementations/baseop.py | 23 +++++++--- kvm_serial/utils/communication.py | 46 +++++++++++++++----- tests/backend/implementations/test_baseop.py | 2 +- tests/backend/test_mouse.py | 8 ++-- tests/utils/test_communication.py | 23 +++++----- 5 files changed, 70 insertions(+), 32 deletions(-) diff --git a/kvm_serial/backend/implementations/baseop.py b/kvm_serial/backend/implementations/baseop.py index 9e989b9..ac1d43f 100644 --- a/kvm_serial/backend/implementations/baseop.py +++ b/kvm_serial/backend/implementations/baseop.py @@ -1,6 +1,7 @@ from abc import ABC, abstractmethod +from typing import Type from serial import Serial -from kvm_serial.utils.communication import DataComm +from kvm_serial.utils.communication import DataComm, CH9329Comm class BaseOp(ABC): @@ -13,15 +14,25 @@ class BaseOp(ABC): hid_serial_out: DataComm layout: str - def __init__(self, serial_port: Serial, layout: str = "en_GB"): - """ - Initialize the operation with the given serial port, and - establish DataComm class for ch9329 communication + def __init__( + self, + serial_port: Serial, + layout: str = "en_GB", + comm_cls: Type[DataComm] | None = None, + ): + """ + Initialise the operation with the given serial port, and + instantiate the protocol implementation that will encapsulate + HID events for the target chip family. + :param serial_port: The serial port to communicate with. :param layout: Keyboard layout to use (default: 'en_GB') + :param comm_cls: DataComm subclass to use (default: CH9329Comm) """ self.serial_port = serial_port - self.hid_serial_out = DataComm(self.serial_port) + if comm_cls is None: + comm_cls = CH9329Comm + self.hid_serial_out = comm_cls(self.serial_port) self.layout = layout @abstractmethod diff --git a/kvm_serial/utils/communication.py b/kvm_serial/utils/communication.py index f231bd9..1664735 100644 --- a/kvm_serial/utils/communication.py +++ b/kvm_serial/utils/communication.py @@ -1,5 +1,6 @@ import sys import logging +from abc import ABC, abstractmethod from serial import Serial, SerialException from serial.tools import list_ports @@ -10,10 +11,15 @@ termios = None -class DataComm: +class DataComm(ABC): """ - DataComm class based on beijixiaohu/ch9329Comm module; simplified and commented - Original: https://github.com/beijixiaohu/CH9329_COMM/ / https://pypi.org/project/ch9329Comm/ + Abstract base for protocol implementations that drive a UART-to-USB-HID + bridge chip from kvm-serial. Subclasses implement the wire framing for a + specific chip family (CH9329, CH9350L, ...). + + Callers interact through the high-level methods below; concrete subclasses + handle packet construction and any chip-specific state (pairing handshake, + descriptor announce, working-state selection, etc.). """ SCANCODE_LENGTH = 8 @@ -21,6 +27,24 @@ class DataComm: def __init__(self, port: Serial): self.port = port + @abstractmethod + def send_scancode(self, scancode: bytes) -> bool: + """Send an 8-byte USB HID boot-protocol keyboard report.""" + + @abstractmethod + def release(self) -> bool: + """Send an empty (all keys released) keyboard report.""" + + +class CH9329Comm(DataComm): + """ + CH9329 UART-to-USB-HID bridge. Frame format: + header(2B: 0x57 0xAB) + addr(1B) + cmd(1B) + len(1B) + data + checksum(1B) + + Originally derived from beijixiaohu/ch9329Comm: + https://github.com/beijixiaohu/CH9329_COMM/ + """ + def send( self, data: bytes, @@ -29,19 +53,19 @@ def send( cmd: bytes = b"\x02", ) -> bool: """ - Convert input to data packet and send command over serial. + Build a CH9329 data packet and write it to the serial port. Args: - data: data packet to encapsulate and send - head: Packet header - addr: Address - cmd: Data command (0x02 = Keyboard; 0x04 = Absolute mouse; 0x05 = Relative mouse) + data: payload bytes to encapsulate and send + head: Packet header (2 bytes) + addr: address byte + cmd: Data command byte (0x02 = Keyboard; 0x04 = Absolute mouse; 0x05 = Relative mouse) Returns: Returns: True if successful, otherwise throws an exception """ # Check inputs if len(head) != 2 or len(addr) != 1 or len(cmd) != 1: - raise ValueError("DataComm packet header MUST have: header 2b; addr 1b; cmd 1b") + raise ValueError("CH9329 packet header MUST have: header 2b; addr 1b; cmd 1b") length = len(data).to_bytes(1, "little") @@ -64,7 +88,7 @@ def send( def send_scancode(self, scancode: bytes) -> bool: """ - Send function for use with scancodes + Send an 8-byte HID keyboard scancode. Does additional length checking and returns False if long Args: @@ -79,7 +103,7 @@ def send_scancode(self, scancode: bytes) -> bool: def release(self): """ - Release the button. + Sends the all-zeros scancode (release all keys). Return: bool: True if successful diff --git a/tests/backend/implementations/test_baseop.py b/tests/backend/implementations/test_baseop.py index b1c1b4b..d8d1806 100644 --- a/tests/backend/implementations/test_baseop.py +++ b/tests/backend/implementations/test_baseop.py @@ -20,7 +20,7 @@ def test_baseop_init(self, mock_serial, sys_modules_patch): with ( # I don't know why this makes test_mouse work, but at this point I'm too tired to care. patch.dict("sys.modules", sys_modules_patch), - patch("kvm_serial.utils.communication.DataComm") as mock_datacomm, + patch("kvm_serial.backend.implementations.baseop.CH9329Comm") as mock_datacomm, ): from kvm_serial.backend.implementations.baseop import BaseOp diff --git a/tests/backend/test_mouse.py b/tests/backend/test_mouse.py index d19b781..cbf0add 100644 --- a/tests/backend/test_mouse.py +++ b/tests/backend/test_mouse.py @@ -34,7 +34,7 @@ def test_mouse_listener(self, mock_serial, sys_modules_patch): from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "DataComm") as mock_datacomm: + with patch.object(baseop_mod, "CH9329Comm") as mock_datacomm: MouseListener(mock_serial) mock_datacomm.assert_called_once_with(mock_serial) @@ -96,7 +96,7 @@ def calculate_expected_data(x, y, width, height): from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "DataComm") as mock_comm: + with patch.object(baseop_mod, "CH9329Comm") as mock_comm: # Set up a MouseListener with known screen size listener = MouseListener(mock_serial) listener.op.hid_serial_out = mock_comm @@ -155,7 +155,7 @@ def test_on_click(self, mock_serial, sys_modules_patch): from kvm_serial.backend.mouse import MouseListener from kvm_serial.backend.implementations.mouseop import MouseButton - with patch.object(baseop_mod, "DataComm") as mock_comm: + with patch.object(baseop_mod, "CH9329Comm") as mock_comm: listener = MouseListener(mock_serial) listener.op.hid_serial_out = mock_comm @@ -208,7 +208,7 @@ def test_on_scroll(self, mock_serial, sys_modules_patch): from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "DataComm") as mock_comm: + with patch.object(baseop_mod, "CH9329Comm") as mock_comm: listener = MouseListener(mock_serial) listener.op.hid_serial_out = mock_comm listener._width = 1920 diff --git a/tests/utils/test_communication.py b/tests/utils/test_communication.py index 5d3a4a5..a8946ca 100644 --- a/tests/utils/test_communication.py +++ b/tests/utils/test_communication.py @@ -1,17 +1,20 @@ import pytest import termios from unittest.mock import patch -from kvm_serial.utils.communication import DataComm, list_serial_ports +from kvm_serial.utils.communication import CH9329Comm, list_serial_ports from tests._utilities import MockSerial, mock_serial -class TestDataComm: - """Test Suite for DataComm class""" +class TestCH9329Comm: + """Test suite for CH9329Comm — verifies CH9329 wire-level packet framing. + + The abstract DataComm base has no behaviour of its own to exercise here. + """ @patch("serial.Serial", MockSerial) def test_init(self, mock_serial): - """Test initialization and basic operations of DataComm. + """Test initialization and basic operations of CH9329Comm. Tests: 1. Proper initialization with mock serial port @@ -27,7 +30,7 @@ def test_init(self, mock_serial): mock_serial.is_open = True mock_serial.baudrate = 9600 - dc = DataComm(mock_serial) + dc = CH9329Comm(mock_serial) assert dc.port == mock_serial @@ -64,7 +67,7 @@ def test_send_scancode_invalid_length(self, mock_serial): 1. Sending a scancode that's too short returns False 2. No write operation is performed on the serial port """ - dc = DataComm(mock_serial) + dc = CH9329Comm(mock_serial) result = dc.send_scancode(bytes([0x0, 0x0])) # Too short assert result is False mock_serial.write.assert_not_called() @@ -78,10 +81,10 @@ def test_packet_sizes(self, packet_size, mock_serial): packet_size: Size of the packet to test (1, 8, 100, or 255 bytes) mock_serial: Mock serial port fixture - Verify that DataComm can handle various packet sizes up to 255 bytes. + Verify that CH9329Comm can handle various packet sizes up to 255 bytes. Larger sizes result in OverflowError. """ - dc = DataComm(mock_serial) + dc = CH9329Comm(mock_serial) data = b"x" * packet_size if packet_size < 256: @@ -161,13 +164,13 @@ def mock_serial_init(self, port=None): @patch("serial.Serial", MockSerial) def test_packet_format_error(self, mock_serial): """Test ValueError is correctly raised on L40 when called with a bad header""" - dc = DataComm(mock_serial) + dc = CH9329Comm(mock_serial) # Error with packet format char_to_send = bytes((0x0)) with pytest.raises(ValueError) as exc_info: dc.send(char_to_send, head=char_to_send) - assert "DataComm packet header MUST have" in str(exc_info.value) + assert "CH9329 packet header MUST have" in str(exc_info.value) # TODO: fix to correctly use mock. @pytest.mark.skip("Broken: serial.Serial imported; fix to use mock.") From 194f9aebe9553f12800519d6a80a23085e7568df Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 16:09:19 +0100 Subject: [PATCH 13/45] Migrate mouseop to high-level mouse API; fix scroll wire format (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DataComm gains abstract send_mouse_absolute / send_mouse_relative methods; CH9329Comm implements them with the spec-correct frame layouts: abs (cmd 0x04): 02 btn xL xH yL yH wheel (7 bytes) rel (cmd 0x05): 01 btn dx dy wheel (5 bytes; 1-byte signed) mouseop.on_move / on_click / on_scroll become forwarders. * on_move and on_click are equivalent to the previous implementation. on_scroll is a behaviour fix: previous code had dx/dy as 2-byte big-endian values into a 5-byte payload, which CH9329 interpreted as: `01 dx_hi dx_lo dy_hi dy_lo → btn=dx_hi, dx=dx_lo, dy=dy_hi, wheel=dy_lo`. Vertical scrolls (dy=±1) accidentally landed the value in the wheel slot and worked. Horizontal scrolls (dx≠0) moved the cursor sideways and, for negative dx, asserted spurious button bits: both now fixed. Horizontal scroll itself isn't recoverable: CH9329's relative-mouse frame has only one wheel byte (vertical), so dx is dropped at the mouseop layer. Tests rebalanced to match the new layering. test_mouse.py asserts on the high-level API calls (mouseop's actual contract) rather than raw bytes; its on_move case shrinks from four nameless tuples to one, since mouseop no longer does the scaling. The four monitor-edge cases (centre, -x, -y, both negative) move to TestCH9329Comm.test_send_mouse_absolute, where the 4096+dx wrap actually lives. New test_send_mouse_relative covers the 5-byte relative frame including signed-byte clamping. --- kvm_serial/backend/implementations/mouseop.py | 42 +---- kvm_serial/utils/communication.py | 65 ++++++++ tests/backend/test_mouse.py | 156 ++++-------------- tests/utils/test_communication.py | 43 +++++ 4 files changed, 153 insertions(+), 153 deletions(-) diff --git a/kvm_serial/backend/implementations/mouseop.py b/kvm_serial/backend/implementations/mouseop.py index 0ce86d9..728c14d 100644 --- a/kvm_serial/backend/implementations/mouseop.py +++ b/kvm_serial/backend/implementations/mouseop.py @@ -30,47 +30,23 @@ def run(self): raise Exception("Run not supported for MouseOp mode. Call from handler class") def on_move(self, x, y, width, height): - # Prepare data payload - data = bytearray(b"\x02\x00") # Absolute coordinates (0x02); No mouse buttons (0x0) - - # Scale coordinates to device range - dx = int((4096 * x) // width) - dy = int((4096 * y) // height) - - # Handle negative coordinates (e.g., dual monitor setups) - if dx < 0: - dx = abs(4096 + dx) - if dy < 0: - dy = abs(4096 + dy) - - data += dx.to_bytes(2, "little") - data += dy.to_bytes(2, "little") - - # Ensure data is exactly 7 bytes for abs move - data = data[:7] if len(data) > 7 else data.ljust(7, b"\x00") - - self.hid_serial_out.send(data, cmd=b"\x04") + # No buttons, no wheel — pure positional update. + self.hid_serial_out.send_mouse_absolute(0, x, y, width, height) logging.debug(f"Mouse moved to ({x}, {y})") return True def on_click(self, x, y, button: MouseButton, down): - data = bytearray(b"\x01") # Relative coordinates (0x01) - data += button.value if down else b"\x00" # Mouse button - data += b"\x00\x00" # Rel. mouse position x/y coordinate (2 bytes 0x0) - data += b"\x00" # pad to length 5 - - self.hid_serial_out.send(data, cmd=b"\x05") - + # Click events ride the relative-mouse path with zero motion deltas. + # MouseButton enum values are single-byte bitmasks; release decays to 0. + button_byte = button.value[0] if down else 0 + self.hid_serial_out.send_mouse_relative(button_byte, 0, 0, 0) logging.debug(f"Mouse click at ({x}, {y}) with {button} (down={down})") return True # Suppress the click event (pynput) def on_scroll(self, x, y, dx, dy): - data = bytearray(b"\x01") # Relative coordinates (0x01) - data += dx.to_bytes(2, "big", signed=True) - data += dy.to_bytes(2, "big", signed=True) - - self.hid_serial_out.send(data, cmd=b"\x05") - + # CH9329 has a single wheel axis (vertical); horizontal dx is dropped. + # Clamping happens in the comm layer. + self.hid_serial_out.send_mouse_relative(0, 0, 0, int(dy)) logging.debug(f"Mouse scroll ({x}, {y}, {dx}, {dy})") return True diff --git a/kvm_serial/utils/communication.py b/kvm_serial/utils/communication.py index 1664735..58e94cc 100644 --- a/kvm_serial/utils/communication.py +++ b/kvm_serial/utils/communication.py @@ -35,6 +35,25 @@ def send_scancode(self, scancode: bytes) -> bool: def release(self) -> bool: """Send an empty (all keys released) keyboard report.""" + @abstractmethod + def send_mouse_absolute( + self, buttons: int, x: int, y: int, width: int, height: int, wheel: int = 0 + ) -> bool: + """Send an absolute-positioning mouse report. + + x, y are in source pixel coordinates; width, height bound the source + surface so subclasses can scale into the chip's native coordinate + space (CH9329: 0..4095; CH9350 state 3/4: 0..0xFFFF). + """ + + @abstractmethod + def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: + """Send a relative-motion mouse report. + + dx, dy, wheel are signed 8-bit deltas (-127..+127); callers pass 0 for + unused fields (e.g. button-only events or pure scroll events). + """ + class CH9329Comm(DataComm): """ @@ -110,6 +129,52 @@ def release(self): """ return self.send(b"\x00" * self.SCANCODE_LENGTH) + def send_mouse_absolute( + self, buttons: int, x: int, y: int, width: int, height: int, wheel: int = 0 + ) -> bool: + """ + Build and send a CH9329 absolute mouse report (cmd=0x04). + Wire payload (7 bytes): direction(0x02) + buttons + xL xH + yL yH + wheel. + Source x/y are scaled into the chip's 12-bit absolute space (0..4095). + """ + # Scale source coordinates into CH9329's 12-bit absolute space. + dx = int((4096 * x) // max(1, width)) + dy = int((4096 * y) // max(1, height)) + + # Wrap negatives (e.g. multi-monitor setups where x or y can be < 0). + if dx < 0: + dx = abs(4096 + dx) + if dy < 0: + dy = abs(4096 + dy) + + data = bytearray(b"\x02") # absolute-coordinate marker + data += bytes([buttons & 0xFF]) + + data += dx.to_bytes(2, "little") + data += dy.to_bytes(2, "little") + + data += _signed_byte(wheel) + return self.send(bytes(data), cmd=b"\x04") + + def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: + """ + Build and send a CH9329 relative mouse report (cmd=0x05). + Wire payload (5 bytes): direction(0x01) + buttons + dx + dy + wheel. + dx, dy, wheel are 1-byte signed values (-127..+127). + """ + data = bytearray(b"\x01") # relative-coordinate marker + data += bytes([buttons & 0xFF]) + data += _signed_byte(dx) + data += _signed_byte(dy) + data += _signed_byte(wheel) + return self.send(bytes(data), cmd=b"\x05") + + +def _signed_byte(value: int) -> bytes: + """Clamp an int to the signed 8-bit range and return its 1-byte encoding.""" + clamped = max(-127, min(127, value)) + return clamped.to_bytes(1, "big", signed=True) + def list_serial_ports(): """ diff --git a/tests/backend/test_mouse.py b/tests/backend/test_mouse.py index cbf0add..6b13c02 100644 --- a/tests/backend/test_mouse.py +++ b/tests/backend/test_mouse.py @@ -71,84 +71,29 @@ def test_thread_calls(self, mock_serial, sys_modules_patch): def test_on_move(self, mock_serial, sys_modules_patch): """ - Test MouseListener.on_move sends the correct data to comm.send and returns True. - Mocks: - - DataComm: To track send calls - Asserts: - - comm.send is called with the expected data and cmd - - on_move returns True + Test MouseListener.on_move forwards positional events to + send_mouse_absolute with the listener's screen dimensions and returns + True. Wire-level scaling and negative-coordinate wrapping live in + CH9329Comm — verified in tests/utils/test_communication.py. """ - - # Calculate expected dx, dy in a helper function - def calculate_expected_data(x, y, width, height): - dx = int((4096 * x) // width) - dy = int((4096 * y) // height) - if dx < 0: - dx = abs(4096 + dx) - if dy < 0: - dy = abs(4096 + dy) - expected_data = bytearray(b"\x02\x00") - expected_data += dx.to_bytes(2, "little") - expected_data += dy.to_bytes(2, "little") - return expected_data[:7] if len(expected_data) > 7 else expected_data.ljust(7, b"\x00") - with patch.dict("sys.modules", sys_modules_patch): from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener with patch.object(baseop_mod, "CH9329Comm") as mock_comm: - # Set up a MouseListener with known screen size listener = MouseListener(mock_serial) listener.op.hid_serial_out = mock_comm listener._width = 1920 listener._height = 1080 - # Case 1: Center of the screen (positive dx/dy) - x, y = 960, 540 - result = listener.on_move(x, y) - expected_data = calculate_expected_data(x, y, listener._width, listener._height) - mock_comm.send.assert_called_once_with(expected_data, cmd=b"\x04") + result = listener.on_move(960, 540) + mock_comm.send_mouse_absolute.assert_called_once_with(0, 960, 540, 1920, 1080) assert result is True - mock_comm.send.reset_mock() - - # Case 2: Negative dx (monitor to the left) - x_neg, y_neg = -100, 540 - result_neg = listener.on_move(x_neg, y_neg) - expected_data_neg = calculate_expected_data( - x_neg, y_neg, listener._width, listener._height - ) - mock_comm.send.assert_called_once_with(expected_data_neg, cmd=b"\x04") - assert result_neg is True - mock_comm.send.reset_mock() - - # Case 3: Negative dy (monitor above) - x_neg2, y_neg2 = 960, -100 - result_neg2 = listener.on_move(x_neg2, y_neg2) - expected_data_neg2 = calculate_expected_data( - x_neg2, y_neg2, listener._width, listener._height - ) - mock_comm.send.assert_called_once_with(expected_data_neg2, cmd=b"\x04") - assert result_neg2 is True - mock_comm.send.reset_mock() - - # Case 4: Both dx and dy negative (monitor above and left) - x_neg3, y_neg3 = -100, -100 - result_neg3 = listener.on_move(x_neg3, y_neg3) - expected_data_neg3 = calculate_expected_data( - x_neg3, y_neg3, listener._width, listener._height - ) - mock_comm.send.assert_called_once_with(expected_data_neg3, cmd=b"\x04") - assert result_neg3 is True - mock_comm.send.reset_mock() def test_on_click(self, mock_serial, sys_modules_patch): """ - Test MouseListener.on_click sends correct data for button press/release and returns True. - Mocks: - - DataComm: To track send calls - Asserts: - - comm.send is called with expected data and cmd for press and release - - on_click returns True + Test MouseListener.on_click forwards press/release events to + send_mouse_relative with the right button mask and zero motion. """ with patch.dict("sys.modules", sys_modules_patch): from kvm_serial.backend.implementations import baseop as baseop_mod @@ -157,52 +102,35 @@ def test_on_click(self, mock_serial, sys_modules_patch): with patch.object(baseop_mod, "CH9329Comm") as mock_comm: listener = MouseListener(mock_serial) - listener.op.hid_serial_out = mock_comm listener._width = 1920 listener._height = 1080 - # Mock button values left_button = MagicMock() right_button = MagicMock() - # Patch control_chars to accept our mock buttons listener.pynput_button_mapping = { # type: ignore left_button: MouseButton.LEFT, right_button: MouseButton.RIGHT, } - # Test left button press - result_press = listener.on_click(100, 200, left_button, True) - expected_data_press = bytearray(b"\x01\x01\x00\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_press, cmd=b"\x05") - assert result_press is True - mock_comm.send.reset_mock() - # Test left button release - result_release = listener.on_click(100, 200, left_button, False) - expected_data_release = bytearray(b"\x01\x00\x00\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_release, cmd=b"\x05") - assert result_release is True - mock_comm.send.reset_mock() - # Test right button press - result_press_r = listener.on_click(100, 200, right_button, True) - expected_data_press_r = bytearray(b"\x01\x02\x00\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_press_r, cmd=b"\x05") - assert result_press_r is True - mock_comm.send.reset_mock() - # Test right button release - result_release_r = listener.on_click(100, 200, right_button, False) - expected_data_release_r = bytearray(b"\x01\x00\x00\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_release_r, cmd=b"\x05") - assert result_release_r is True - mock_comm.send.reset_mock() + + # (button, down, expected_button_byte) + cases = [ + (left_button, True, 0x01), + (left_button, False, 0x00), + (right_button, True, 0x02), + (right_button, False, 0x00), + ] + for button, down, expected_byte in cases: + result = listener.on_click(100, 200, button, down) + mock_comm.send_mouse_relative.assert_called_once_with(expected_byte, 0, 0, 0) + assert result is True + mock_comm.send_mouse_relative.reset_mock() def test_on_scroll(self, mock_serial, sys_modules_patch): """ - Test MouseListener.on_scroll sends correct data for scroll events and returns True. - Mocks: - - DataComm: To track send calls - Asserts: - - comm.send is called with expected data and cmd for scroll up/down/left/right - - on_scroll returns True + Test MouseListener.on_scroll forwards vertical scroll deltas as the + wheel argument to send_mouse_relative; horizontal dx is dropped + (CH9329's relative-mouse frame has no horizontal wheel axis). """ with patch.dict("sys.modules", sys_modules_patch): from kvm_serial.backend.implementations import baseop as baseop_mod @@ -214,30 +142,18 @@ def test_on_scroll(self, mock_serial, sys_modules_patch): listener._width = 1920 listener._height = 1080 - # Test scroll up - result_up = listener.on_scroll(100, 200, 0, 1) - expected_data_up = bytearray(b"\x01\x00\x00\x00\x01") - mock_comm.send.assert_called_once_with(expected_data_up, cmd=b"\x05") - assert result_up is True - mock_comm.send.reset_mock() - # Test scroll down - result_down = listener.on_scroll(100, 200, 0, -1) - expected_data_down = bytearray(b"\x01\x00\x00\xff\xff") - mock_comm.send.assert_called_once_with(expected_data_down, cmd=b"\x05") - assert result_down is True - mock_comm.send.reset_mock() - # Test scroll right - result_right = listener.on_scroll(100, 200, 1, 0) - expected_data_right = bytearray(b"\x01\x00\x01\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_right, cmd=b"\x05") - assert result_right is True - mock_comm.send.reset_mock() - # Test scroll left - result_left = listener.on_scroll(100, 200, -1, 0) - expected_data_left = bytearray(b"\x01\xff\xff\x00\x00") - mock_comm.send.assert_called_once_with(expected_data_left, cmd=b"\x05") - assert result_left is True - mock_comm.send.reset_mock() + # (dx, dy, expected_wheel) — dx is intentionally discarded. + cases = [ + (0, 1, 1), + (0, -1, -1), + (1, 0, 0), + (-1, 0, 0), + ] + for dx, dy, expected_wheel in cases: + result = listener.on_scroll(100, 200, dx, dy) + mock_comm.send_mouse_relative.assert_called_once_with(0, 0, 0, expected_wheel) + assert result is True + mock_comm.send_mouse_relative.reset_mock() # --- diff --git a/tests/utils/test_communication.py b/tests/utils/test_communication.py index a8946ca..5c03846 100644 --- a/tests/utils/test_communication.py +++ b/tests/utils/test_communication.py @@ -94,6 +94,49 @@ def test_packet_sizes(self, packet_size, mock_serial): with pytest.raises(OverflowError): dc.send(data) + @patch("serial.Serial", MockSerial) + def test_send_mouse_absolute(self, mock_serial): + """Verify the wire format for absolute mouse reports (cmd=0x04). + + Payload is 7 bytes: marker(0x02) + buttons + xL xH + yL yH + wheel. + Source x/y are scaled into the chip's 12-bit absolute space (0..4095); + negative source coordinates (multi-monitor setups) wrap via 4096+dx. + """ + dc = CH9329Comm(mock_serial) + + # All four cases use a 1920x1080 source surface. Scaling: dx maps to + # 0x800 at x=960, wraps to 0x0F2A at x=-100. dy maps to 0x800 at y=540, + # wraps to 0x0E84 at y=-100. + cases = [ + # (x, y, expected wire bytes) + (960, 540, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x00\x08\x00\x1f"), + (-100, 540, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x00\x08\x00\x50"), + (960, -100, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x84\x0e\x00\xa9"), + (-100, -100, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x84\x0e\x00\xda"), + ] + for x, y, expected in cases: + dc.send_mouse_absolute(0, x, y, 1920, 1080) + mock_serial.write.assert_called_once_with(expected) + mock_serial.write.reset_mock() + + @patch("serial.Serial", MockSerial) + def test_send_mouse_relative(self, mock_serial): + """Verify the wire format for relative mouse reports (cmd=0x05). + + Payload is 5 bytes: marker(0x01) + buttons + dx + dy + wheel, + with dx/dy/wheel as 1-byte signed values (-127..+127). + """ + dc = CH9329Comm(mock_serial) + + # Left button down, +5 right, -3 up, wheel +1. + dc.send_mouse_relative(0x01, 5, -3, 1) + mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x01\x05\xfd\x01\x11") + mock_serial.write.reset_mock() + + # Out-of-range deltas clamp to the signed-byte limits (±127), not wrap. + dc.send_mouse_relative(0, 200, -200, 200) + mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x00\x7f\x81\x7f\x8c") + # TODO: fix to correctly use mock. @pytest.mark.skip("Broken: serial.Serial imported; fix to use mock.") @patch("kvm_serial.utils.communication.glob.glob") From f908389510349b2be21309c178248cb33f6f01cb Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 16:14:40 +0100 Subject: [PATCH 14/45] Move CH9329Comm into its own module (towards #13) CH9329Comm and its _signed_byte helper move from communication.py into a new kvm_serial/utils/ch9329.py. communication.py keeps the DataComm ABC and list_serial_ports. CH9350Comm will land alongside in ch9350.py. baseop.py and tests/utils/test_communication.py updated to import from the new module path. No behaviour change. --- kvm_serial/backend/implementations/baseop.py | 3 +- kvm_serial/utils/ch9329.py | 131 +++++++++++++++++++ kvm_serial/utils/communication.py | 121 ----------------- tests/utils/test_communication.py | 3 +- 4 files changed, 135 insertions(+), 123 deletions(-) create mode 100644 kvm_serial/utils/ch9329.py diff --git a/kvm_serial/backend/implementations/baseop.py b/kvm_serial/backend/implementations/baseop.py index ac1d43f..e169d81 100644 --- a/kvm_serial/backend/implementations/baseop.py +++ b/kvm_serial/backend/implementations/baseop.py @@ -1,7 +1,8 @@ from abc import ABC, abstractmethod from typing import Type from serial import Serial -from kvm_serial.utils.communication import DataComm, CH9329Comm +from kvm_serial.utils.communication import DataComm +from kvm_serial.utils.ch9329 import CH9329Comm class BaseOp(ABC): diff --git a/kvm_serial/utils/ch9329.py b/kvm_serial/utils/ch9329.py new file mode 100644 index 0000000..348c94d --- /dev/null +++ b/kvm_serial/utils/ch9329.py @@ -0,0 +1,131 @@ +""" +CH9329 UART-to-USB-HID bridge protocol implementation. + +The CH9329 is a host-driven, command-style chip: this module sends framed +commands over the serial port and the chip translates them into USB HID +reports on the target side. Frame layout: + + header(2B: 0x57 0xAB) + addr(1B) + cmd(1B) + len(1B) + data + checksum(1B) +""" + +from kvm_serial.utils.communication import DataComm + + +class CH9329Comm(DataComm): + """ + CH9329 UART-to-USB-HID bridge. + + Originally derived from beijixiaohu/ch9329Comm: + https://github.com/beijixiaohu/CH9329_COMM/ + """ + + def send( + self, + data: bytes, + head: bytes = b"\x57\xab", + addr: bytes = b"\x00", + cmd: bytes = b"\x02", + ) -> bool: + """ + Build a CH9329 data packet and write it to the serial port. + + Args: + data: payload bytes to encapsulate and send + head: Packet header (2 bytes) + addr: address byte + cmd: Data command byte (0x02 = Keyboard; 0x04 = Absolute mouse; 0x05 = Relative mouse) Returns: + Returns: + True if successful, otherwise throws an exception + """ + # Check inputs + if len(head) != 2 or len(addr) != 1 or len(cmd) != 1: + raise ValueError("CH9329 packet header MUST have: header 2b; addr 1b; cmd 1b") + + length = len(data).to_bytes(1, "little") + + # Calculate checksum + checksum = ( + sum(head) + + int.from_bytes(addr, "big") + + int.from_bytes(cmd, "big") + + int.from_bytes(length, "big") + + sum(data) + ) % 256 + + # Build data packet + packet = head + addr + cmd + length + data + bytes([checksum]) + + # Write command to serial port + self.port.write(packet) + + return True + + def send_scancode(self, scancode: bytes) -> bool: + """ + Send an 8-byte HID keyboard scancode. + Does additional length checking and returns False if long + + Args: + scancode: An 8-byte scancode representing keyboard state + Returns: + bool: True if successful, False otherwise + """ + if len(scancode) < self.SCANCODE_LENGTH: + return False + + return self.send(scancode) + + def release(self): + """ + Sends the all-zeros scancode (release all keys). + + Return: + bool: True if successful + """ + return self.send(b"\x00" * self.SCANCODE_LENGTH) + + def send_mouse_absolute( + self, buttons: int, x: int, y: int, width: int, height: int, wheel: int = 0 + ) -> bool: + """ + Build and send a CH9329 absolute mouse report (cmd=0x04). + Wire payload (7 bytes): direction(0x02) + buttons + xL xH + yL yH + wheel. + Source x/y are scaled into the chip's 12-bit absolute space (0..4095). + """ + # Scale source coordinates into CH9329's 12-bit absolute space. + dx = int((4096 * x) // max(1, width)) + dy = int((4096 * y) // max(1, height)) + + # Wrap negatives (e.g. multi-monitor setups where x or y can be < 0). + if dx < 0: + dx = abs(4096 + dx) + if dy < 0: + dy = abs(4096 + dy) + + data = bytearray(b"\x02") # absolute-coordinate marker + data += bytes([buttons & 0xFF]) + + data += dx.to_bytes(2, "little") + data += dy.to_bytes(2, "little") + + data += _signed_byte(wheel) + return self.send(bytes(data), cmd=b"\x04") + + def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: + """ + Build and send a CH9329 relative mouse report (cmd=0x05). + Wire payload (5 bytes): direction(0x01) + buttons + dx + dy + wheel. + dx, dy, wheel are 1-byte signed values (-127..+127). + """ + data = bytearray(b"\x01") # relative-coordinate marker + data += bytes([buttons & 0xFF]) + data += _signed_byte(dx) + data += _signed_byte(dy) + data += _signed_byte(wheel) + return self.send(bytes(data), cmd=b"\x05") + + +def _signed_byte(value: int) -> bytes: + """Clamp an int to the signed 8-bit range and return its 1-byte encoding.""" + clamped = max(-127, min(127, value)) + return clamped.to_bytes(1, "big", signed=True) diff --git a/kvm_serial/utils/communication.py b/kvm_serial/utils/communication.py index 58e94cc..14e9853 100644 --- a/kvm_serial/utils/communication.py +++ b/kvm_serial/utils/communication.py @@ -55,127 +55,6 @@ def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> """ -class CH9329Comm(DataComm): - """ - CH9329 UART-to-USB-HID bridge. Frame format: - header(2B: 0x57 0xAB) + addr(1B) + cmd(1B) + len(1B) + data + checksum(1B) - - Originally derived from beijixiaohu/ch9329Comm: - https://github.com/beijixiaohu/CH9329_COMM/ - """ - - def send( - self, - data: bytes, - head: bytes = b"\x57\xab", - addr: bytes = b"\x00", - cmd: bytes = b"\x02", - ) -> bool: - """ - Build a CH9329 data packet and write it to the serial port. - - Args: - data: payload bytes to encapsulate and send - head: Packet header (2 bytes) - addr: address byte - cmd: Data command byte (0x02 = Keyboard; 0x04 = Absolute mouse; 0x05 = Relative mouse) Returns: - Returns: - True if successful, otherwise throws an exception - """ - # Check inputs - if len(head) != 2 or len(addr) != 1 or len(cmd) != 1: - raise ValueError("CH9329 packet header MUST have: header 2b; addr 1b; cmd 1b") - - length = len(data).to_bytes(1, "little") - - # Calculate checksum - checksum = ( - sum(head) - + int.from_bytes(addr, "big") - + int.from_bytes(cmd, "big") - + int.from_bytes(length, "big") - + sum(data) - ) % 256 - - # Build data packet - packet = head + addr + cmd + length + data + bytes([checksum]) - - # Write command to serial port - self.port.write(packet) - - return True - - def send_scancode(self, scancode: bytes) -> bool: - """ - Send an 8-byte HID keyboard scancode. - Does additional length checking and returns False if long - - Args: - scancode: An 8-byte scancode representing keyboard state - Returns: - bool: True if successful, False otherwise - """ - if len(scancode) < self.SCANCODE_LENGTH: - return False - - return self.send(scancode) - - def release(self): - """ - Sends the all-zeros scancode (release all keys). - - Return: - bool: True if successful - """ - return self.send(b"\x00" * self.SCANCODE_LENGTH) - - def send_mouse_absolute( - self, buttons: int, x: int, y: int, width: int, height: int, wheel: int = 0 - ) -> bool: - """ - Build and send a CH9329 absolute mouse report (cmd=0x04). - Wire payload (7 bytes): direction(0x02) + buttons + xL xH + yL yH + wheel. - Source x/y are scaled into the chip's 12-bit absolute space (0..4095). - """ - # Scale source coordinates into CH9329's 12-bit absolute space. - dx = int((4096 * x) // max(1, width)) - dy = int((4096 * y) // max(1, height)) - - # Wrap negatives (e.g. multi-monitor setups where x or y can be < 0). - if dx < 0: - dx = abs(4096 + dx) - if dy < 0: - dy = abs(4096 + dy) - - data = bytearray(b"\x02") # absolute-coordinate marker - data += bytes([buttons & 0xFF]) - - data += dx.to_bytes(2, "little") - data += dy.to_bytes(2, "little") - - data += _signed_byte(wheel) - return self.send(bytes(data), cmd=b"\x04") - - def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: - """ - Build and send a CH9329 relative mouse report (cmd=0x05). - Wire payload (5 bytes): direction(0x01) + buttons + dx + dy + wheel. - dx, dy, wheel are 1-byte signed values (-127..+127). - """ - data = bytearray(b"\x01") # relative-coordinate marker - data += bytes([buttons & 0xFF]) - data += _signed_byte(dx) - data += _signed_byte(dy) - data += _signed_byte(wheel) - return self.send(bytes(data), cmd=b"\x05") - - -def _signed_byte(value: int) -> bytes: - """Clamp an int to the signed 8-bit range and return its 1-byte encoding.""" - clamped = max(-127, min(127, value)) - return clamped.to_bytes(1, "big", signed=True) - - def list_serial_ports(): """ List available serial port names on Windows, Mac, and Linux. diff --git a/tests/utils/test_communication.py b/tests/utils/test_communication.py index 5c03846..65f5e61 100644 --- a/tests/utils/test_communication.py +++ b/tests/utils/test_communication.py @@ -1,7 +1,8 @@ import pytest import termios from unittest.mock import patch -from kvm_serial.utils.communication import CH9329Comm, list_serial_ports +from kvm_serial.utils.communication import list_serial_ports +from kvm_serial.utils.ch9329 import CH9329Comm from tests._utilities import MockSerial, mock_serial From e2fa502b5bcd872989c8cc44b975fc2924a99b55 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 16:17:54 +0100 Subject: [PATCH 15/45] Split CH9329 tests into their own file (towards #13) Move TestCH9329Comm from tests/utils/test_communication.py to a new tests/utils/test_ch9329.py, mirroring the production-side split. The remaining test_communication.py keeps the (currently all-skipped) list_serial_ports tests under TestListSerialPorts; they're left as a TODO marker rather than deleted, since list_serial_ports itself remains in communication.py and warrants coverage once mocked correctly. That's a separate issue to raise. --- tests/utils/test_ch9329.py | 145 ++++++++++++++++++++++++++++++ tests/utils/test_communication.py | 145 ++---------------------------- 2 files changed, 150 insertions(+), 140 deletions(-) create mode 100644 tests/utils/test_ch9329.py diff --git a/tests/utils/test_ch9329.py b/tests/utils/test_ch9329.py new file mode 100644 index 0000000..86ca690 --- /dev/null +++ b/tests/utils/test_ch9329.py @@ -0,0 +1,145 @@ +import pytest +from unittest.mock import patch +from kvm_serial.utils.ch9329 import CH9329Comm + +from tests._utilities import MockSerial, mock_serial + + +class TestCH9329Comm: + """Test suite for CH9329Comm — verifies CH9329 wire-level packet framing.""" + + @patch("serial.Serial", MockSerial) + def test_init(self, mock_serial): + """Test initialization and basic operations of CH9329Comm. + + Tests: + 1. Proper initialization with mock serial port + 2. Sending a single character ('a') scancode + 3. Direct scancode sending + 4. Key release functionality + + Verifies correct packet formation including headers, address, command, + data length, and checksum for each method called. + """ + + mock_serial.port = "/dev/ttyUSB0" + mock_serial.is_open = True + mock_serial.baudrate = 9600 + + dc = CH9329Comm(mock_serial) + + assert dc.port == mock_serial + + # Scancode for letter 'a' + char_to_send = bytes((0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0)) + + # Assert the output contains: + # Header: 0x57 0xAB; Address: 0x00; Command 0x02; + # Data length 0x08; Data packet (as above hex: 0000 4000 0000 0000) + # Checksum 0x10 + dc.send(char_to_send) + mock_serial.write.assert_called_once_with( + b"\x57\xab\x00\x02\x08\x00\x00\x04\x00\x00\x00\x00\x00\x10" + ) + mock_serial.write.reset_mock() + + dc.send_scancode(char_to_send) + mock_serial.write.assert_called_once_with( + b"\x57\xab\x00\x02\x08\x00\x00\x04\x00\x00\x00\x00\x00\x10" + ) + mock_serial.write.reset_mock() + + dc.release() + mock_serial.write.assert_called_once_with( + b"\x57\xab\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x0c" + ) + mock_serial.write.reset_mock() + + @patch("serial.Serial", MockSerial) + def test_send_scancode_invalid_length(self, mock_serial): + """Test error handling for invalid scancode length. + + Verifies: + 1. Sending a scancode that's too short returns False + 2. No write operation is performed on the serial port + """ + dc = CH9329Comm(mock_serial) + result = dc.send_scancode(bytes([0x0, 0x0])) # Too short + assert result is False + mock_serial.write.assert_not_called() + + @patch("serial.Serial", MockSerial) + @pytest.mark.parametrize("packet_size", [1, 8, 100, 255, 512]) # >255 results in OverflowError + def test_packet_sizes(self, packet_size, mock_serial): + """Test handling of different packet sizes. + + Args: + packet_size: Size of the packet to test (1, 8, 100, or 255 bytes) + mock_serial: Mock serial port fixture + + Verify that CH9329Comm can handle various packet sizes up to 255 bytes. + Larger sizes result in OverflowError. + """ + dc = CH9329Comm(mock_serial) + data = b"x" * packet_size + + if packet_size < 256: + dc.send(data) + mock_serial.write.assert_called_once() + else: + with pytest.raises(OverflowError): + dc.send(data) + + @patch("serial.Serial", MockSerial) + def test_send_mouse_absolute(self, mock_serial): + """Verify the wire format for absolute mouse reports (cmd=0x04). + + Payload is 7 bytes: marker(0x02) + buttons + xL xH + yL yH + wheel. + Source x/y are scaled into the chip's 12-bit absolute space (0..4095); + negative source coordinates (multi-monitor setups) wrap via 4096+dx. + """ + dc = CH9329Comm(mock_serial) + + # All four cases use a 1920x1080 source surface. Scaling: dx maps to + # 0x800 at x=960, wraps to 0x0F2A at x=-100. dy maps to 0x800 at y=540, + # wraps to 0x0E84 at y=-100. + cases = [ + # (x, y, expected wire bytes) + (960, 540, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x00\x08\x00\x1f"), + (-100, 540, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x00\x08\x00\x50"), + (960, -100, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x84\x0e\x00\xa9"), + (-100, -100, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x84\x0e\x00\xda"), + ] + for x, y, expected in cases: + dc.send_mouse_absolute(0, x, y, 1920, 1080) + mock_serial.write.assert_called_once_with(expected) + mock_serial.write.reset_mock() + + @patch("serial.Serial", MockSerial) + def test_send_mouse_relative(self, mock_serial): + """Verify the wire format for relative mouse reports (cmd=0x05). + + Payload is 5 bytes: marker(0x01) + buttons + dx + dy + wheel, + with dx/dy/wheel as 1-byte signed values (-127..+127). + """ + dc = CH9329Comm(mock_serial) + + # Left button down, +5 right, -3 up, wheel +1. + dc.send_mouse_relative(0x01, 5, -3, 1) + mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x01\x05\xfd\x01\x11") + mock_serial.write.reset_mock() + + # Out-of-range deltas clamp to the signed-byte limits (±127), not wrap. + dc.send_mouse_relative(0, 200, -200, 200) + mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x00\x7f\x81\x7f\x8c") + + @patch("serial.Serial", MockSerial) + def test_packet_format_error(self, mock_serial): + """Test ValueError is correctly raised on L40 when called with a bad header""" + dc = CH9329Comm(mock_serial) + + # Error with packet format + char_to_send = bytes((0x0)) + with pytest.raises(ValueError) as exc_info: + dc.send(char_to_send, head=char_to_send) + assert "CH9329 packet header MUST have" in str(exc_info.value) diff --git a/tests/utils/test_communication.py b/tests/utils/test_communication.py index 65f5e61..84b6141 100644 --- a/tests/utils/test_communication.py +++ b/tests/utils/test_communication.py @@ -2,142 +2,18 @@ import termios from unittest.mock import patch from kvm_serial.utils.communication import list_serial_ports -from kvm_serial.utils.ch9329 import CH9329Comm from tests._utilities import MockSerial, mock_serial -class TestCH9329Comm: - """Test suite for CH9329Comm — verifies CH9329 wire-level packet framing. +class TestListSerialPorts: + """Test suite for the cross-platform list_serial_ports() helper. - The abstract DataComm base has no behaviour of its own to exercise here. + All tests in this suite are currently skipped — they predate the move to + pyserial's list_ports API and need rewriting to mock that surface rather + than the prior glob-based enumeration. Kept in place as a TODO marker. """ - @patch("serial.Serial", MockSerial) - def test_init(self, mock_serial): - """Test initialization and basic operations of CH9329Comm. - - Tests: - 1. Proper initialization with mock serial port - 2. Sending a single character ('a') scancode - 3. Direct scancode sending - 4. Key release functionality - - Verifies correct packet formation including headers, address, command, - data length, and checksum for each method called. - """ - - mock_serial.port = "/dev/ttyUSB0" - mock_serial.is_open = True - mock_serial.baudrate = 9600 - - dc = CH9329Comm(mock_serial) - - assert dc.port == mock_serial - - # Scancode for letter 'a' - char_to_send = bytes((0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0)) - - # Assert the output contains: - # Header: 0x57 0xAB; Address: 0x00; Command 0x02; - # Data length 0x08; Data packet (as above hex: 0000 4000 0000 0000) - # Checksum 0x10 - dc.send(char_to_send) - mock_serial.write.assert_called_once_with( - b"\x57\xab\x00\x02\x08\x00\x00\x04\x00\x00\x00\x00\x00\x10" - ) - mock_serial.write.reset_mock() - - dc.send_scancode(char_to_send) - mock_serial.write.assert_called_once_with( - b"\x57\xab\x00\x02\x08\x00\x00\x04\x00\x00\x00\x00\x00\x10" - ) - mock_serial.write.reset_mock() - - dc.release() - mock_serial.write.assert_called_once_with( - b"\x57\xab\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x0c" - ) - mock_serial.write.reset_mock() - - @patch("serial.Serial", MockSerial) - def test_send_scancode_invalid_length(self, mock_serial): - """Test error handling for invalid scancode length. - - Verifies: - 1. Sending a scancode that's too short returns False - 2. No write operation is performed on the serial port - """ - dc = CH9329Comm(mock_serial) - result = dc.send_scancode(bytes([0x0, 0x0])) # Too short - assert result is False - mock_serial.write.assert_not_called() - - @patch("serial.Serial", MockSerial) - @pytest.mark.parametrize("packet_size", [1, 8, 100, 255, 512]) # >255 results in OverflowError - def test_packet_sizes(self, packet_size, mock_serial): - """Test handling of different packet sizes. - - Args: - packet_size: Size of the packet to test (1, 8, 100, or 255 bytes) - mock_serial: Mock serial port fixture - - Verify that CH9329Comm can handle various packet sizes up to 255 bytes. - Larger sizes result in OverflowError. - """ - dc = CH9329Comm(mock_serial) - data = b"x" * packet_size - - if packet_size < 256: - dc.send(data) - mock_serial.write.assert_called_once() - else: - with pytest.raises(OverflowError): - dc.send(data) - - @patch("serial.Serial", MockSerial) - def test_send_mouse_absolute(self, mock_serial): - """Verify the wire format for absolute mouse reports (cmd=0x04). - - Payload is 7 bytes: marker(0x02) + buttons + xL xH + yL yH + wheel. - Source x/y are scaled into the chip's 12-bit absolute space (0..4095); - negative source coordinates (multi-monitor setups) wrap via 4096+dx. - """ - dc = CH9329Comm(mock_serial) - - # All four cases use a 1920x1080 source surface. Scaling: dx maps to - # 0x800 at x=960, wraps to 0x0F2A at x=-100. dy maps to 0x800 at y=540, - # wraps to 0x0E84 at y=-100. - cases = [ - # (x, y, expected wire bytes) - (960, 540, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x00\x08\x00\x1f"), - (-100, 540, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x00\x08\x00\x50"), - (960, -100, b"\x57\xab\x00\x04\x07\x02\x00\x00\x08\x84\x0e\x00\xa9"), - (-100, -100, b"\x57\xab\x00\x04\x07\x02\x00\x2a\x0f\x84\x0e\x00\xda"), - ] - for x, y, expected in cases: - dc.send_mouse_absolute(0, x, y, 1920, 1080) - mock_serial.write.assert_called_once_with(expected) - mock_serial.write.reset_mock() - - @patch("serial.Serial", MockSerial) - def test_send_mouse_relative(self, mock_serial): - """Verify the wire format for relative mouse reports (cmd=0x05). - - Payload is 5 bytes: marker(0x01) + buttons + dx + dy + wheel, - with dx/dy/wheel as 1-byte signed values (-127..+127). - """ - dc = CH9329Comm(mock_serial) - - # Left button down, +5 right, -3 up, wheel +1. - dc.send_mouse_relative(0x01, 5, -3, 1) - mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x01\x05\xfd\x01\x11") - mock_serial.write.reset_mock() - - # Out-of-range deltas clamp to the signed-byte limits (±127), not wrap. - dc.send_mouse_relative(0, 200, -200, 200) - mock_serial.write.assert_called_once_with(b"\x57\xab\x00\x05\x05\x01\x00\x7f\x81\x7f\x8c") - # TODO: fix to correctly use mock. @pytest.mark.skip("Broken: serial.Serial imported; fix to use mock.") @patch("kvm_serial.utils.communication.glob.glob") @@ -205,17 +81,6 @@ def mock_serial_init(self, port=None): assert "COM2" not in ports assert len(ports) == 2 - @patch("serial.Serial", MockSerial) - def test_packet_format_error(self, mock_serial): - """Test ValueError is correctly raised on L40 when called with a bad header""" - dc = CH9329Comm(mock_serial) - - # Error with packet format - char_to_send = bytes((0x0)) - with pytest.raises(ValueError) as exc_info: - dc.send(char_to_send, head=char_to_send) - assert "CH9329 packet header MUST have" in str(exc_info.value) - # TODO: fix to correctly use mock. @pytest.mark.skip("Broken: serial.Serial imported; fix to use mock.") @patch("kvm_serial.utils.communication.serial.Serial") From 206b0ebfd94648892397e1014255438b21560ff0 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 16:28:39 +0100 Subject: [PATCH 16/45] Add CH9350Comm with states 2/3/4 (Phase A), towards #13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CH9350Comm wraps the CH9350L's "simple" working states: fixed-format LC→UC frames with no descriptor handshake, no checksum, no per-frame counter. State 2 (BIOS keyboard + relative mouse) is the legacy BIOS / UEFI CSM compatible path; states 3 and 4 (absolute mouse, optionally HID Digitizers) target modern OS hosts. State 0/1 (paired-mode descriptor handshake) raises ValueError at construction: TODO. The class translates between the DataComm abstract API and each state's native frame: - send_scancode/release: HEADER + 0x01 + 8-byte HID boot report. Identical across all three states. - send_mouse_absolute: states 3/4 emit 0x04 frames with x/y scaled to the chip's 16-bit absolute space. State 2 has no abs path on the wire; calls are translated to a relative delta from the previous absolute position (each axis clamped to ±127 px per frame, which pynput's event rate covers in practice). - send_mouse_relative: state 2 emits a native 0x02 frame. States 3/4 re-emit the last known absolute position with the new button/wheel bytes — so clicks and scroll events reach the target via the absolute frame, without mouseop needing to know which state is active. Tests cover wire format per state, cross-state mouse translation, state-3/4 wire equivalence, and constructor rejection of state 0/1/5. --- kvm_serial/utils/ch9350.py | 159 +++++++++++++++++++++++++++++++++++++ tests/utils/test_ch9350.py | 157 ++++++++++++++++++++++++++++++++++++ 2 files changed, 316 insertions(+) create mode 100644 kvm_serial/utils/ch9350.py create mode 100644 tests/utils/test_ch9350.py diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py new file mode 100644 index 0000000..188747a --- /dev/null +++ b/kvm_serial/utils/ch9350.py @@ -0,0 +1,159 @@ +""" +CH9350L UART-to-USB-HID extender protocol implementation. + +The CH9350L is a paired-chip extender: a *lower computer* (LC, USB host; +reads keyboard/mouse) talks to an *upper computer* (UC, USB device; presents +HID to the target PC) over UART. kvm-serial drives the UART side, replacing +the LC in software, so the CH9350L on the other end of the link enumerates +USB HID devices on the target. + +This module currently implements working states 2, 3, and 4 — the +"simple" modes selected by the chip's S0/S1 dipswitches. State 0/1 +(paired mode with descriptor announcement and PID-ack handshake) is on +the roadmap; see issue #13 and docs/CH9350L_PROTO.md. + +Working states (set on the UC's S0/S1 dipswitches): + state 2: BIOS keyboard + relative mouse + — legacy BIOS / UEFI CSM compatible + state 3: BIOS keyboard + absolute mouse + — modern OS, single monitor + state 4: BIOS keyboard + absolute mouse + HID Digitizers + — modern OS, multi-monitor +""" + +from kvm_serial.utils.communication import DataComm + +HEADER = b"\x57\xab" + + +class CH9350Comm(DataComm): + """ + CH9350L extender, simple-mode (states 2/3/4) implementation. + + Frames carry no SER, no checksum, no per-frame counter — much simpler + than CH9329's command framing. Each LC→UC frame is a fixed shape per + its leading command byte: + 0x01: keyboard — 11 bytes (HEADER + 0x01 + 8-byte HID report) + 0x02: relative mouse — 7 bytes (HEADER + 0x02 + btn dx dy wheel) + 0x04: absolute mouse — 10 bytes (HEADER + 0x04 + 0x01 + btn xL xH yL yH wheel) + + The chosen state determines which mouse path is active on the wire. + State 2 only emits 0x02; states 3/4 only emit 0x04. The two state-3/4 + UC variants are wire-identical from the LC's perspective; the dipswitch + selects what HID descriptor the UC advertises to the target host (HID + Mouse vs HID Digitizers). + """ + + STATE_2 = 2 + STATE_3 = 3 + STATE_4 = 4 + SUPPORTED_STATES = (STATE_2, STATE_3, STATE_4) + + def __init__(self, port, state: int = STATE_2): + if state not in self.SUPPORTED_STATES: + raise ValueError( + f"CH9350Comm currently supports states {self.SUPPORTED_STATES}; " + f"state 0/1 (paired mode) is not yet implemented" + ) + super().__init__(port) + self.state = state + # Cursor-position bookkeeping. State 3/4 needs the last absolute + # position so that button/scroll events (which arrive via + # send_mouse_relative with zero motion) can re-emit it with the new + # button/wheel state. State 2 uses the previous position to translate + # send_mouse_absolute calls into on-the-wire relative deltas. + self._last_x = 0 + self._last_y = 0 + self._last_width = 1 + self._last_height = 1 + + def send_scancode(self, scancode: bytes) -> bool: + """ + Send an 8-byte HID boot-protocol keyboard report. + Wire frame (11 bytes): HEADER + 0x01 + [mod rsvd k0..k5]. + + Identical across states 2/3/4 — the keyboard descriptor on the UC is + a BIOS keyboard in all three modes; the difference between them is + purely in mouse semantics. + """ + if len(scancode) < self.SCANCODE_LENGTH: + return False + self.port.write(HEADER + b"\x01" + scancode[: self.SCANCODE_LENGTH]) + return True + + def release(self) -> bool: + """Release all keys (send the all-zeros HID report).""" + return self.send_scancode(b"\x00" * self.SCANCODE_LENGTH) + + def send_mouse_absolute( + self, buttons: int, x: int, y: int, width: int, height: int, wheel: int = 0 + ) -> bool: + """ + Emit a positional update. + + States 3/4: scale pixel coordinates into the chip's 16-bit absolute + space and emit a 0x04 frame. + State 2: no absolute-mouse path exists on the wire. Translate to a + relative delta from the previous absolute call and emit a 0x02 + frame instead. This means a fresh-from-origin pointer move clamps + each step to ±127 px (the signed-byte range), but pynput's frequent + event firing covers the gap in practice. + """ + if self.state == self.STATE_2: + dx = x - self._last_x + dy = y - self._last_y + self._last_x, self._last_y = x, y + self._last_width, self._last_height = width, height + return self._send_relative_frame(buttons, dx, dy, wheel) + + nx = max(0, min(0xFFFF, int((0xFFFF * x) // max(1, width)))) + ny = max(0, min(0xFFFF, int((0xFFFF * y) // max(1, height)))) + self._last_x, self._last_y = x, y + self._last_width, self._last_height = width, height + return self._send_absolute_frame(buttons, nx, ny, wheel) + + def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: + """ + Emit a button or scroll event (or, in state 2, a true relative motion). + + State 2: emit a native 0x02 relative-mouse frame. + States 3/4: re-emit the last known absolute position with the new + button/wheel bytes — there's no relative path on the wire, so + button-only and scroll events ride the absolute frame. + """ + if self.state == self.STATE_2: + return self._send_relative_frame(buttons, dx, dy, wheel) + + nx = max(0, min(0xFFFF, int((0xFFFF * self._last_x) // max(1, self._last_width)))) + ny = max(0, min(0xFFFF, int((0xFFFF * self._last_y) // max(1, self._last_height)))) + return self._send_absolute_frame(buttons, nx, ny, wheel) + + def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bool: + # dx/dy/wheel are 1-byte signed values; clamp to the signed range + # and let &0xFF produce the two's-complement encoding on the wire. + dx_b = max(-127, min(127, dx)) & 0xFF + dy_b = max(-127, min(127, dy)) & 0xFF + wh_b = max(-127, min(127, wheel)) & 0xFF + self.port.write(HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b])) + return True + + def _send_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: + # x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is + # a fixed report-ID prefix matching empirical captures from real LCs. + wh_b = max(-127, min(127, wheel)) & 0xFF + self.port.write( + HEADER + + bytes( + [ + 0x04, + 0x01, + buttons & 0xFF, + x & 0xFF, + (x >> 8) & 0xFF, + y & 0xFF, + (y >> 8) & 0xFF, + wh_b, + ] + ) + ) + return True diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py new file mode 100644 index 0000000..d23ced9 --- /dev/null +++ b/tests/utils/test_ch9350.py @@ -0,0 +1,157 @@ +import pytest +from unittest.mock import patch +from kvm_serial.utils.ch9350 import CH9350Comm + +from tests._utilities import MockSerial, mock_serial + + +class TestCH9350Comm: + """ + Test suite for CH9350Comm — verifies CH9350L wire-level packet framing + in working states 2, 3, and 4. + + State 0/1 (paired-mode descriptor handshake) is not yet implemented and + will get its own test coverage when it lands. + """ + + @patch("serial.Serial", MockSerial) + def test_init_rejects_unsupported_state(self, mock_serial): + """Constructor refuses states outside the implemented range.""" + for unsupported in (0, 1, 5, -1): + with pytest.raises(ValueError): + CH9350Comm(mock_serial, state=unsupported) + + @patch("serial.Serial", MockSerial) + def test_send_scancode_wire_format(self, mock_serial): + """ + Keyboard frame is identical across states 2/3/4: HEADER + 0x01 + + the 8-byte HID boot report. Verify on each state, plus length + rejection and release(). + """ + # Scancode for letter 'a' (USB HID code 0x04 in the third byte). + scancode = bytes((0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00)) + expected = b"\x57\xab\x01\x00\x00\x04\x00\x00\x00\x00\x00" + + for state in (2, 3, 4): + dc = CH9350Comm(mock_serial, state=state) + mock_serial.write.reset_mock() + + assert dc.send_scancode(scancode) is True + mock_serial.write.assert_called_once_with(expected) + mock_serial.write.reset_mock() + + # release() emits the all-zeros HID report. + assert dc.release() is True + mock_serial.write.assert_called_once_with( + b"\x57\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00" + ) + mock_serial.write.reset_mock() + + # Short input is rejected without writing. + assert dc.send_scancode(b"\x00\x00") is False + mock_serial.write.assert_not_called() + + @patch("serial.Serial", MockSerial) + def test_state2_relative_wire_format(self, mock_serial): + """ + State 2 emits 7-byte 0x02 frames: + HEADER + 0x02 + btn + dx + dy + wheel + dx/dy/wheel are 1-byte signed; out-of-range values clamp to ±127. + """ + dc = CH9350Comm(mock_serial, state=2) + + dc.send_mouse_relative(0, 5, -3, 1) + mock_serial.write.assert_called_once_with(b"\x57\xab\x02\x00\x05\xfd\x01") + mock_serial.write.reset_mock() + + # Out-of-range values clamp: -200 → -127 (0x81), 200 → 127 (0x7F). + dc.send_mouse_relative(0x01, -200, 200, -200) + mock_serial.write.assert_called_once_with(b"\x57\xab\x02\x01\x81\x7f\x81") + + @patch("serial.Serial", MockSerial) + def test_state2_absolute_translates_to_relative_delta(self, mock_serial): + """ + State 2 has no absolute path on the wire. send_mouse_absolute calls + emit relative deltas computed against the previous absolute call. + First call's prior position defaults to (0, 0). + """ + dc = CH9350Comm(mock_serial, state=2) + + # First absolute call: delta from origin → dx=10, dy=20. + dc.send_mouse_absolute(0, 10, 20, 1920, 1080) + mock_serial.write.assert_called_once_with(b"\x57\xab\x02\x00\x0a\x14\x00") + mock_serial.write.reset_mock() + + # Subsequent call: delta from (10,20) → (15,22) is dx=5, dy=2. + dc.send_mouse_absolute(0, 15, 22, 1920, 1080) + mock_serial.write.assert_called_once_with(b"\x57\xab\x02\x00\x05\x02\x00") + + @patch("serial.Serial", MockSerial) + def test_state3_absolute_wire_format(self, mock_serial): + """ + States 3/4 emit 10-byte 0x04 frames: + HEADER + 0x04 + 0x01 + btn + xL xH + yL yH + wheel + x and y scale to the chip's unsigned 16-bit space (0..0xFFFF). + """ + dc = CH9350Comm(mock_serial, state=3) + + # Centre of a 1920x1080 surface scales to 0x7FFF in both axes. + dc.send_mouse_absolute(0, 960, 540, 1920, 1080) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x7f\xff\x7f\x00") + mock_serial.write.reset_mock() + + # Origin → (0, 0). + dc.send_mouse_absolute(0, 0, 0, 1920, 1080) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x00\x00\x00\x00") + mock_serial.write.reset_mock() + + # Bottom-right corner → (0xFFFF, 0xFFFF). + dc.send_mouse_absolute(0, 1920, 1080, 1920, 1080) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\xff\xff\xff\x00") + + @patch("serial.Serial", MockSerial) + def test_state3_relative_re_emits_last_position(self, mock_serial): + """ + State 3/4: send_mouse_relative carries no positional info on the + wire. We re-emit the last known absolute position with the new + button/wheel state — that's how clicks and scroll events reach the + target via the absolute-only frame. + """ + dc = CH9350Comm(mock_serial, state=3) + + # No prior absolute call: last position is (0, 0). + dc.send_mouse_relative(0x01, 0, 0, 0) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x00\x00\x00\x00") + mock_serial.write.reset_mock() + + # Set the cursor to centre, then a button-only click re-uses that + # position with the new button byte. + dc.send_mouse_absolute(0, 960, 540, 1920, 1080) + mock_serial.write.reset_mock() + + dc.send_mouse_relative(0x01, 0, 0, 0) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\xff\x7f\xff\x7f\x00") + mock_serial.write.reset_mock() + + # Scroll event: same position, wheel byte set. + dc.send_mouse_relative(0, 0, 0, 1) + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x7f\xff\x7f\x01") + + @patch("serial.Serial", MockSerial) + def test_state4_wire_identical_to_state3(self, mock_serial): + """ + States 3 and 4 are wire-identical from the LC's perspective; the + difference is purely in what the UC advertises on USB to the target + host (HID Mouse vs HID Digitizers, selected by dipswitch). + """ + dc3 = CH9350Comm(mock_serial, state=3) + dc4 = CH9350Comm(mock_serial, state=4) + + dc3.send_mouse_absolute(0, 960, 540, 1920, 1080) + state3_bytes = mock_serial.write.call_args[0][0] + mock_serial.write.reset_mock() + + dc4.send_mouse_absolute(0, 960, 540, 1920, 1080) + state4_bytes = mock_serial.write.call_args[0][0] + + assert state3_bytes == state4_bytes From b540f933a257455559b88616d2c4da2fdd8e32e9 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 20:56:23 +0100 Subject: [PATCH 17/45] Add CH9350Comm state 0/1 paired mode (towards #13) Ports the PoC's LowerComputer state machine into CH9350Comm: - start() spawns rx + tx-maintenance daemon threads. - Initial attach: 0x86 -> 0x80 x2 -> 0x89 -> 0x81 xN; tx loop heartbeats every ~1 s and retransmits any 0x81 with an un-acked PID. - rx loop dispatches to _handle_frame, gating state-0 -> state-1 on full PID-ack and triggering reattach replay on PID drop. - send_* emit framed 0x83/0x88 payloads with per-SER counters; abs mouse translates to relative deltas (default descriptor is rel). Default descriptors / PIDs baked in from real-LC captures; constructor accepts overrides. State 1 is internal-only (constructor rejects it). 11 new tests cover frame builders, _parse_frames, state-machine transitions, short-frame handling, and start/stop no-op for states 2/3/4. Limitation: LED echo (0x80 0x3N) for states 2/3 isn't wired up yet: the rx loop only runs in state 0. Threading + live I/O still to hardware-test. --- kvm_serial/utils/ch9350.py | 567 ++++++++++++++++++++++++++++++++----- tests/utils/test_ch9350.py | 171 ++++++++++- 2 files changed, 666 insertions(+), 72 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 188747a..69a981b 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -7,53 +7,206 @@ the LC in software, so the CH9350L on the other end of the link enumerates USB HID devices on the target. -This module currently implements working states 2, 3, and 4 — the -"simple" modes selected by the chip's S0/S1 dipswitches. State 0/1 -(paired mode with descriptor announcement and PID-ack handshake) is on -the roadmap; see issue #13 and docs/CH9350L_PROTO.md. - -Working states (set on the UC's S0/S1 dipswitches): - state 2: BIOS keyboard + relative mouse - — legacy BIOS / UEFI CSM compatible - state 3: BIOS keyboard + absolute mouse - — modern OS, single monitor - state 4: BIOS keyboard + absolute mouse + HID Digitizers - — modern OS, multi-monitor +This module covers all four working states (selected on the UC's S0/S1 +dipswitches): + + state 0/1: paired mode with descriptor announce + PID-ack handshake + — full HID Report Descriptor passthrough + state 2: BIOS keyboard + relative mouse + — legacy BIOS / UEFI CSM compatible + state 3: BIOS keyboard + absolute mouse + — modern OS, single monitor + state 4: BIOS keyboard + absolute mouse + HID Digitizers + — modern OS, multi-monitor + +State 0/1 is a single user choice (the chip boots into state 0 and +transitions to state 1 internally once the UC has acknowledged every +announced PID). States 2/3/4 are dipswitch-fixed and need no handshake. +See docs/CH9350L_PROTO.md for the on-the-wire framing detail. """ +import logging +import threading +import time + from kvm_serial.utils.communication import DataComm +logger = logging.getLogger(__name__) + HEADER = b"\x57\xab" +# LC -> UC heartbeat. Low nibble = IO pin state; a real LC sends 0xA3 +# (IO0/IO1 high). The UC also accepts 0xA0. +HEARTBEAT_FRAME = HEADER + bytes([0x82, 0xA3]) + +# Captured HID Report Descriptors from a real CH9350L LC. The LC announces +# these over 0x81 frames so the UC can present matching descriptors to the +# target. PIDs are reflected back in the UC's 0x12 keep-alive once each +# descriptor has been processed; the LC waits for that ack before +# transitioning state 0 -> state 1. +DEFAULT_MOUSE_DESC = bytes.fromhex( + "05010902a10185010901a1000509190129031500250175019503810275059501" + "810105010930093109381581257f750895038106c005ff09021500250175019501" + "b12275079501b101c0" +) +DEFAULT_MOUSE_PID = bytes.fromhex("4000") +DEFAULT_KBD_DESC = bytes.fromhex( + "05010906a1018501050719e029e7150025017501950881029501750881019503" + "750105081901290391029505750191019506750826ff000507190029918100c0" + "05010980a10185021981298315002501950375018102950175058101c0050c09" + "01a10185031500250109e909ea09e209cd19b529b87501950881020a8a010a21" + "020a2a021a23022a270281020a83010a96010a92010a9e010a94010a060209b2" + "09b48102c0" +) +DEFAULT_KBD_PID = bytes.fromhex("0315") + +# Known fixed payload lengths (bytes after the cmd byte) for UC -> LC +# decode. 0x83/0x88 are length-prefixed and 0x81 has its own 2-byte LE +# length field; both are handled separately in _parse_frames. +_PAYLOAD_LEN = { + 0x82: 1, # heartbeat (IO status byte) + 0x12: 8, # UC keep-alive (8 bytes after cmd) + 0x01: 8, # state-2 keyboard (8-byte HID boot report) + 0x02: 4, # state-2 relative mouse (btn, dx, dy, wheel) + 0x04: 7, # state-3/4 absolute mouse (id, btn, xL, xH, yL, yH, wheel) + 0x80: 1, # LED status / "unknown" (0xFF or 0x3N) + 0x86: 0, # device-notify (no payload) + 0x89: 0, # status announce (no payload) +} + + +def _parse_frames(buf: bytearray) -> tuple[list[tuple[int, bytes]], bytearray]: + """ + Extract complete frames from buf. Returns (frames, remaining_buf) where + frames is a list of (cmd, payload) tuples. cmd == -1 represents bytes + skipped while resyncing on HEADER (logged as a hint that something is + off in the receive stream). + """ + frames: list[tuple[int, bytes]] = [] + while True: + idx = buf.find(HEADER) + if idx == -1: + # No header in buf: keep the last byte in case it starts a header. + buf = bytearray(buf[-1:]) if buf else bytearray() + break + if idx > 0: + # Pre-header bytes are framing noise (mid-frame sniff start, a + # corrupted byte, etc.); surface them so the caller can log. + skipped = bytes(buf[:idx]) + buf = buf[idx:] + frames.append((-1, skipped)) + + if len(buf) < 3: + break # need at least header + cmd + + cmd = buf[2] + + if cmd in (0x83, 0x88): + # Length-prefixed: payload[0] = LEN, total payload = 1 + LEN bytes. + if len(buf) < 4: + break + plen = buf[3] + needed = 4 + plen + if len(buf) < needed: + break + payload = bytes(buf[3:needed]) + buf = buf[needed:] + frames.append((cmd, payload)) + continue + + if cmd == 0x81: + # Device Connection: 57 AB 81 [PORT:1] [LEN:2 LE] [PAYLOAD] [PID:2] [CHK:1] + if len(buf) < 6: + break + plen = buf[4] | (buf[5] << 8) + needed = 9 + plen # 3 (hdr+cmd) + 1 (PORT) + 2 (LEN) + plen + 2 (PID) + 1 (CHK) + if len(buf) < needed: + break + payload = bytes(buf[3:needed]) + buf = buf[needed:] + frames.append((cmd, payload)) + continue + + known_len = _PAYLOAD_LEN.get(cmd) + if known_len is not None: + needed = 3 + known_len + if len(buf) < needed: + break + payload = bytes(buf[3:needed]) + buf = buf[needed:] + frames.append((cmd, payload)) + else: + # Unknown cmd: scan for next header to bound the frame. + next_hdr = buf.find(HEADER, 3) + if next_hdr == -1: + if len(buf) > 128: + payload = bytes(buf[3:]) + frames.append((cmd, payload)) + buf = bytearray() + else: + break + else: + payload = bytes(buf[3:next_hdr]) + frames.append((cmd, payload)) + buf = buf[next_hdr:] + + return frames, buf + class CH9350Comm(DataComm): """ - CH9350L extender, simple-mode (states 2/3/4) implementation. - - Frames carry no SER, no checksum, no per-frame counter — much simpler - than CH9329's command framing. Each LC→UC frame is a fixed shape per - its leading command byte: - 0x01: keyboard — 11 bytes (HEADER + 0x01 + 8-byte HID report) - 0x02: relative mouse — 7 bytes (HEADER + 0x02 + btn dx dy wheel) - 0x04: absolute mouse — 10 bytes (HEADER + 0x04 + 0x01 + btn xL xH yL yH wheel) - - The chosen state determines which mouse path is active on the wire. - State 2 only emits 0x02; states 3/4 only emit 0x04. The two state-3/4 - UC variants are wire-identical from the LC's perspective; the dipswitch - selects what HID descriptor the UC advertises to the target host (HID - Mouse vs HID Digitizers). + CH9350L extender — supports all four working states. + + State 0/1 (paired mode) requires a full attach handshake against a real + UC: send 0x86 -> 0x80 x2 -> 0x89, wait for the UC's 0x12 keep-alive, then + announce the LC's HID Report Descriptors via 0x81 xN. The state machine + transitions 0 -> 1 once every announced PID is reflected back in the + UC's keep-alive. Frames after that point use cmd 0x83 (paired); before + it, cmd 0x88 (unpaired) — payloads are otherwise identical. + + States 2/3/4 are dipswitch-fixed simple modes with no handshake; LC->UC + frames carry no SER, no checksum, no per-frame counter. + + For state 0/1 callers must invoke ``start()`` to spawn the rx and + maintenance threads and run the attach sequence; ``stop()`` halts them. + States 2/3/4 don't need start/stop — those calls are no-ops there. """ + STATE_0 = 0 + STATE_1 = 1 STATE_2 = 2 STATE_3 = 3 STATE_4 = 4 - SUPPORTED_STATES = (STATE_2, STATE_3, STATE_4) - def __init__(self, port, state: int = STATE_2): + # State 1 is reached internally via the state-0 handshake; not user-selectable. + SUPPORTED_STATES = (STATE_0, STATE_2, STATE_3, STATE_4) + + # State-0/1 frame SER + report-ID bytes. These must agree with the + # announced descriptors' Report ID items — RID values prefix each + # 0x83/0x88 payload. + KB_SER = 0x13 # keyboard / HID / port 2 + KB_RID = 0x01 # 8-byte boot keyboard report follows + MOU_SER = 0x22 # mouse / HID / port 1 + MOU_RID = 0x01 # 4-byte relative mouse report follows + + # How long to wait between 0x81 retransmits while a PID remains un-acked. + _ANNOUNCE_RETRY_INTERVAL = 2.0 + _HEARTBEAT_INTERVAL = 1.0 + + def __init__( + self, + port, + state: int = STATE_2, + mouse_desc: bytes | None = None, + mouse_pid: bytes | None = None, + kbd_desc: bytes | None = None, + kbd_pid: bytes | None = None, + ): if state not in self.SUPPORTED_STATES: raise ValueError( - f"CH9350Comm currently supports states {self.SUPPORTED_STATES}; " - f"state 0/1 (paired mode) is not yet implemented" + f"CH9350Comm supports states {self.SUPPORTED_STATES}; " + f"state 1 is reached internally via the state-0 handshake " + f"and is not user-selectable" ) super().__init__(port) self.state = state @@ -67,18 +220,78 @@ def __init__(self, port, state: int = STATE_2): self._last_width = 1 self._last_height = 1 + # State 0/1 plumbing — irrelevant for states 2/3/4 but cheap to set + # up unconditionally and keeps the attribute access uniform. + self.mouse_desc = mouse_desc if mouse_desc is not None else DEFAULT_MOUSE_DESC + self.kbd_desc = kbd_desc if kbd_desc is not None else DEFAULT_KBD_DESC + self.mouse_pid = mouse_pid if mouse_pid is not None else DEFAULT_MOUSE_PID + self.kbd_pid = kbd_pid if kbd_pid is not None else DEFAULT_KBD_PID + if len(self.mouse_pid) != 2 or len(self.kbd_pid) != 2: + raise ValueError("mouse_pid and kbd_pid must each be exactly 2 bytes") + self._kbd_counter = 0 + self._mou_counter = 0 + self._uc_p1 = b"\x00\x00" + self._uc_p2 = b"\x00\x00" + self._uc_status = 0x00 + self._last_hb = 0.0 + self._last_mouse_announce = 0.0 + self._last_kbd_announce = 0.0 + self._stop = threading.Event() + self._uc_seen = threading.Event() + self._reattach_needed = threading.Event() + # Serialise port writes — rx callbacks (LED echo), tx maintenance + # (heartbeat / retransmit), and user sends all converge on port.write. + self._tx_lock = threading.Lock() + self._rx_thread: threading.Thread | None = None + self._tx_thread: threading.Thread | None = None + + # ------------------------------------------------------------------ public + + def start(self) -> None: + """ + Begin the state-0/1 attach handshake and spawn the rx + maintenance + threads. No-op for states 2/3/4. + """ + if self.state != self.STATE_0: + return + if self._rx_thread is not None: + raise RuntimeError("CH9350Comm.start() called twice") + self._stop.clear() + self._rx_thread = threading.Thread(target=self._rx_loop, daemon=True) + self._rx_thread.start() + # Run the initial attach in the maintenance thread so start() returns + # immediately; the caller is then free to send frames (which will + # emit 0x88 unpaired until the UC acks all PIDs and we transition + # to state 1). + self._tx_thread = threading.Thread(target=self._tx_maint_loop, daemon=True) + self._tx_thread.start() + + def stop(self) -> None: + """Halt the rx + maintenance threads. No-op for states 2/3/4.""" + if self.state != self.STATE_0: + return + self._stop.set() + if self._tx_thread is not None: + self._tx_thread.join(timeout=2.0) + self._tx_thread = None + if self._rx_thread is not None: + self._rx_thread.join(timeout=2.0) + self._rx_thread = None + def send_scancode(self, scancode: bytes) -> bool: """ Send an 8-byte HID boot-protocol keyboard report. - Wire frame (11 bytes): HEADER + 0x01 + [mod rsvd k0..k5]. - - Identical across states 2/3/4 — the keyboard descriptor on the UC is - a BIOS keyboard in all three modes; the difference between them is - purely in mouse semantics. + State 0/1 wraps it in a SER + counter framed payload (cmd 0x83/0x88); + states 2/3/4 use the simple 11-byte 0x01 frame. """ if len(scancode) < self.SCANCODE_LENGTH: return False - self.port.write(HEADER + b"\x01" + scancode[: self.SCANCODE_LENGTH]) + if self.state in (self.STATE_0, self.STATE_1): + modifier = scancode[0] + keys = list(scancode[2 : self.SCANCODE_LENGTH]) + frame = self._build_state01_kbd_frame(modifier, keys) + return self._send_locked(frame) + self._send_locked(HEADER + b"\x01" + scancode[: self.SCANCODE_LENGTH]) return True def release(self) -> bool: @@ -93,13 +306,14 @@ def send_mouse_absolute( States 3/4: scale pixel coordinates into the chip's 16-bit absolute space and emit a 0x04 frame. - State 2: no absolute-mouse path exists on the wire. Translate to a - relative delta from the previous absolute call and emit a 0x02 - frame instead. This means a fresh-from-origin pointer move clamps - each step to ±127 px (the signed-byte range), but pynput's frequent - event firing covers the gap in practice. + States 0/1 and 2: no absolute-mouse path exists on the wire (the + announced descriptor is a relative-mouse boot report). Translate to + a relative delta from the previous absolute call. This means a + fresh-from-origin pointer move clamps each step to ±127 px (the + signed-byte range), but pynput's frequent event firing covers the + gap in practice. """ - if self.state == self.STATE_2: + if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): dx = x - self._last_x dy = y - self._last_y self._last_x, self._last_y = x, y @@ -114,46 +328,269 @@ def send_mouse_absolute( def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: """ - Emit a button or scroll event (or, in state 2, a true relative motion). + Emit a button or scroll event (or, in state 0/1/2, a true relative motion). - State 2: emit a native 0x02 relative-mouse frame. + States 0/1 and 2: emit a native relative-mouse frame. States 3/4: re-emit the last known absolute position with the new button/wheel bytes — there's no relative path on the wire, so button-only and scroll events ride the absolute frame. """ - if self.state == self.STATE_2: + if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): return self._send_relative_frame(buttons, dx, dy, wheel) nx = max(0, min(0xFFFF, int((0xFFFF * self._last_x) // max(1, self._last_width)))) ny = max(0, min(0xFFFF, int((0xFFFF * self._last_y) // max(1, self._last_height)))) return self._send_absolute_frame(buttons, nx, ny, wheel) + # ------------------------------------------------------------- frame builders + def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bool: - # dx/dy/wheel are 1-byte signed values; clamp to the signed range - # and let &0xFF produce the two's-complement encoding on the wire. - dx_b = max(-127, min(127, dx)) & 0xFF - dy_b = max(-127, min(127, dy)) & 0xFF - wh_b = max(-127, min(127, wheel)) & 0xFF - self.port.write(HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b])) - return True + if self.state in (self.STATE_0, self.STATE_1): + frame = self._build_state01_mou_frame(buttons, dx, dy, wheel) + else: + # State 2 simple frame: 7 bytes total. + dx_b = max(-127, min(127, dx)) & 0xFF + dy_b = max(-127, min(127, dy)) & 0xFF + wh_b = max(-127, min(127, wheel)) & 0xFF + frame = HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b]) + return self._send_locked(frame) def _send_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: # x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is # a fixed report-ID prefix matching empirical captures from real LCs. wh_b = max(-127, min(127, wheel)) & 0xFF - self.port.write( + frame = HEADER + bytes( + [ + 0x04, + 0x01, + buttons & 0xFF, + x & 0xFF, + (x >> 8) & 0xFF, + y & 0xFF, + (y >> 8) & 0xFF, + wh_b, + ] + ) + return self._send_locked(frame) + + def _build_state01_kbd_frame(self, modifier: int, keycodes: list[int]) -> bytes: + """ + State-0/1 keyboard frame: + HEADER + cmd + LEN + SER + RID + [mod rsvd k0..k5] + CTR + CTRSUM + cmd is 0x88 in state 0 (unpaired) or 0x83 in state 1 (paired). + CTR is a per-SER counter (mod-256) and CTRSUM = (CTR + sum(hid)) & 0xFF. + """ + cmd = 0x83 if self.state == self.STATE_1 else 0x88 + keys = (keycodes + [0] * 6)[:6] + hid = bytes([self.KB_RID, modifier & 0xFF, 0x00] + keys) + ctr = self._kbd_counter & 0xFF + self._kbd_counter += 1 + ctr_sum = (ctr + sum(hid)) & 0xFF + plen = 1 + len(hid) + 2 # SER + hid + CTR + CTRSUM + return HEADER + bytes([cmd, plen, self.KB_SER]) + hid + bytes([ctr, ctr_sum]) + + def _build_state01_mou_frame(self, btn: int, dx: int, dy: int, wheel: int) -> bytes: + """ + State-0/1 relative mouse frame: + HEADER + cmd + LEN + SER + RID + [btn dx dy wheel] + CTR + CTRSUM + cmd is 0x88 (state 0) or 0x83 (state 1). dx/dy clamp to ±127. + """ + cmd = 0x83 if self.state == self.STATE_1 else 0x88 + dx_b = max(-127, min(127, dx)) & 0xFF + dy_b = max(-127, min(127, dy)) & 0xFF + data = bytes([self.MOU_RID, btn & 0xFF, dx_b, dy_b, wheel & 0xFF]) + ctr = self._mou_counter & 0xFF + self._mou_counter += 1 + ctr_sum = (ctr + sum(data)) & 0xFF + plen = 1 + len(data) + 2 + return HEADER + bytes([cmd, plen, self.MOU_SER]) + data + bytes([ctr, ctr_sum]) + + def _build_device_connect_frame( + self, descriptor: bytes, port_id: int, device_pid: bytes + ) -> bytes: + """ + Build a 0x81 Device Connection Frame: + HEADER + 0x81 + [PORT:1] + [LEN:2 LE] + DESCRIPTOR + [PID:2] + [CHK:1] + CHK = (sum(DESCRIPTOR) + sum(PID)) & 0xFF. + """ + if len(device_pid) != 2: + raise ValueError("device_pid must be 2 bytes") + plen = len(descriptor) + chk = (sum(descriptor) + sum(device_pid)) & 0xFF + return ( HEADER - + bytes( - [ - 0x04, - 0x01, - buttons & 0xFF, - x & 0xFF, - (x >> 8) & 0xFF, - y & 0xFF, - (y >> 8) & 0xFF, - wh_b, - ] - ) + + bytes([0x81, port_id, plen & 0xFF, (plen >> 8) & 0xFF]) + + descriptor + + device_pid + + bytes([chk]) ) + + # ------------------------------------------------------------------ tx helpers + + def _send_locked(self, data: bytes) -> bool: + """Serialised port write — used by user sends, rx callbacks, and the + tx maintenance thread.""" + with self._tx_lock: + self.port.write(data) return True + + def _heartbeat(self) -> None: + self._send_locked(HEARTBEAT_FRAME) + self._last_hb = time.time() + + def _send_announce(self) -> None: + """Send a 0x89 status announce. Real LCs emit ~3 of these during + attach; the LC sends one as part of the attach sequence here.""" + self._send_locked(HEADER + bytes([0x89])) + + def _announce_descriptors(self) -> None: + """Send 0x81 Device Connection Frames for each configured device.""" + now = time.time() + if self.mouse_desc: + self._send_locked( + self._build_device_connect_frame( + self.mouse_desc, port_id=0x00, device_pid=self.mouse_pid + ) + ) + self._last_mouse_announce = now + time.sleep(0.05) + if self.kbd_desc: + self._send_locked( + self._build_device_connect_frame( + self.kbd_desc, port_id=0x01, device_pid=self.kbd_pid + ) + ) + self._last_kbd_announce = now + time.sleep(0.05) + + def _maybe_retransmit_descriptors(self, now: float) -> None: + """Retransmit any 0x81 whose PID isn't yet reflected in the UC's + keep-alive. Recovers from UC restart or transient UART loss.""" + if self.mouse_desc and self._uc_p1 != self.mouse_pid: + if now - self._last_mouse_announce >= self._ANNOUNCE_RETRY_INTERVAL: + self._send_locked( + self._build_device_connect_frame( + self.mouse_desc, port_id=0x00, device_pid=self.mouse_pid + ) + ) + self._last_mouse_announce = now + if self.kbd_desc and self._uc_p2 != self.kbd_pid: + if now - self._last_kbd_announce >= self._ANNOUNCE_RETRY_INTERVAL: + self._send_locked( + self._build_device_connect_frame( + self.kbd_desc, port_id=0x01, device_pid=self.kbd_pid + ) + ) + self._last_kbd_announce = now + + def _run_attach_sequence(self, *, wait_for_uc: bool) -> None: + """ + Replay the LC->UC attach sequence: + 0x86 -> 0x80 0xFF (x2) -> heartbeat -> 0x89 -> 0x81 xN + Used at startup (wait_for_uc=True: defer 0x81 until a UC keep-alive + is observed) and on reconnect (wait_for_uc=False: UC is already + keep-aliving but its USB-device side dropped and needs 0x86/0x80 to + re-present to the target). + """ + self._send_locked(HEADER + bytes([0x86])) + time.sleep(0.25) + self._send_locked(HEADER + bytes([0x80, 0xFF])) + time.sleep(0.23) + self._send_locked(HEADER + bytes([0x80, 0xFF])) + self._heartbeat() + time.sleep(1.0) + self._send_announce() + + if not (self.mouse_desc or self.kbd_desc): + return + if wait_for_uc and not self._uc_seen.is_set(): + logger.info("Waiting for UC keep-alive before announcing devices...") + while not self._uc_seen.wait(timeout=self._HEARTBEAT_INTERVAL): + if self._stop.is_set(): + return + self._heartbeat() + self._announce_descriptors() + + # ---------------------------------------------------------- background loops + + def _tx_maint_loop(self) -> None: + """ + Heartbeat, 0x81 retransmit, and full attach replay on reconnect. + Decoupled from user sends so a slow caller doesn't starve the UC of + heartbeats or stall reconnect handling. + """ + self._run_attach_sequence(wait_for_uc=True) + while not self._stop.is_set(): + if self._reattach_needed.is_set(): + self._reattach_needed.clear() + logger.info("Reattach: replaying attach sequence") + self._run_attach_sequence(wait_for_uc=False) + continue + now = time.time() + if now - self._last_hb >= self._HEARTBEAT_INTERVAL: + self._heartbeat() + self._maybe_retransmit_descriptors(now) + self._stop.wait(timeout=0.2) + + def _rx_loop(self) -> None: + """Read + decode incoming frames from upper computer.""" + buf = bytearray() + while not self._stop.is_set(): + try: + chunk = self.port.read(64) + except Exception: + # Serial errors during shutdown are expected; fall through + # to the stop check on the next iteration. + break + if chunk: + buf.extend(chunk) + frames, buf = _parse_frames(buf) + for cmd, payload in frames: + if cmd == -1: + logger.debug("rx sync skip: %d bytes", len(payload)) + continue + self._handle_frame(cmd, payload) + + def _handle_frame(self, cmd: int, payload: bytes) -> None: + """ + State-0/1 receive-side state machine. Pure function modulo + ``self``: tests can drive it directly with synthetic UC frames. + + Decodes the UC's 0x12 keep-alive (PIDs in P1/P2, STATUS, LED byte) + and: + - sets _uc_seen on the first 0x12 (cleared to send 0x81 frames) + - transitions state 0 -> state 1 once every announced PID is + reflected back + - reverts state 1 -> state 0 and triggers _reattach_needed when + the UC drops a previously-acked PID (target-side replug) + """ + logger.debug("rx cmd=%02x payload=%s", cmd, payload.hex(" ")) + if cmd != 0x12 or len(payload) < 4: + return + self._uc_p1 = bytes(payload[0:2]) + self._uc_p2 = bytes(payload[2:4]) + if len(payload) >= 6: + self._uc_status = payload[5] + if not self._uc_seen.is_set(): + logger.info("UC keep-alive observed — announce phase cleared") + self._uc_seen.set() + + want_p1 = self.mouse_pid if self.mouse_desc else b"\x00\x00" + want_p2 = self.kbd_pid if self.kbd_desc else b"\x00\x00" + any_announced = bool(self.mouse_desc or self.kbd_desc) + all_acked = self._uc_p1 == want_p1 and self._uc_p2 == want_p2 + + if self.state == self.STATE_0 and any_announced and all_acked: + logger.info("UC acknowledged all PIDs — entering state 1") + self.state = self.STATE_1 + elif self.state == self.STATE_1 and not all_acked: + # UC dropped a PID — likely target-side USB replug. Revert to + # state 0 and trigger the maintenance thread to replay the full + # attach sequence (0x81 alone won't make the UC re-enumerate). + logger.info( + "UC PIDs no longer match (p1=%s p2=%s) — reverting to state 0, triggering reattach", + self._uc_p1.hex(), + self._uc_p2.hex(), + ) + self.state = self.STATE_0 + self._reattach_needed.set() diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index d23ced9..4c1be4f 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -1,6 +1,12 @@ import pytest from unittest.mock import patch -from kvm_serial.utils.ch9350 import CH9350Comm +from kvm_serial.utils.ch9350 import ( + CH9350Comm, + DEFAULT_KBD_PID, + DEFAULT_MOUSE_PID, + HEADER, + _parse_frames, +) from tests._utilities import MockSerial, mock_serial @@ -8,16 +14,16 @@ class TestCH9350Comm: """ Test suite for CH9350Comm — verifies CH9350L wire-level packet framing - in working states 2, 3, and 4. - - State 0/1 (paired-mode descriptor handshake) is not yet implemented and - will get its own test coverage when it lands. + across all four working states. State 1 is reached internally via the + state-0 handshake and is not user-selectable from the constructor. """ @patch("serial.Serial", MockSerial) def test_init_rejects_unsupported_state(self, mock_serial): - """Constructor refuses states outside the implemented range.""" - for unsupported in (0, 1, 5, -1): + """Constructor refuses states outside the supported range; state 1 + is rejected because it's reached via the state-0 handshake, not + user-selectable.""" + for unsupported in (1, 5, -1): with pytest.raises(ValueError): CH9350Comm(mock_serial, state=unsupported) @@ -155,3 +161,154 @@ def test_state4_wire_identical_to_state3(self, mock_serial): state4_bytes = mock_serial.write.call_args[0][0] assert state3_bytes == state4_bytes + + # ----------------------------------------------------- state 0/1 builders + + @patch("serial.Serial", MockSerial) + def test_state0_kbd_frame_format(self, mock_serial): + """ + State 0 keyboard frame: + HEADER + 0x88 + LEN + SER + RID + [mod rsvd k0..k5] + CTR + CTRSUM + Per-frame counter starts at 0 and increments; CTRSUM = (CTR + sum(hid)) & 0xFF. + """ + dc = CH9350Comm(mock_serial, state=0) + + # First send: 'a' (0x04) with LSHIFT (0x02). hid sum = 0x01+0x02+0+0x04 = 7. + dc.send_scancode(bytes([0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00])) + mock_serial.write.assert_called_once_with( + b"\x57\xab\x88\x0c\x13\x01\x02\x00\x04\x00\x00\x00\x00\x00\x00\x07" + ) + mock_serial.write.reset_mock() + + # Second send: same scancode, but CTR=1 → CTRSUM=(1+7)&0xFF=0x08. + dc.send_scancode(bytes([0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00])) + mock_serial.write.assert_called_once_with( + b"\x57\xab\x88\x0c\x13\x01\x02\x00\x04\x00\x00\x00\x00\x00\x01\x08" + ) + + @patch("serial.Serial", MockSerial) + def test_state1_kbd_cmd_byte_only_difference(self, mock_serial): + """State 1 keyboard frames differ from state 0 only in the cmd byte + (0x83 vs 0x88) — payload, SER, CTR are unchanged.""" + dc = CH9350Comm(mock_serial, state=0) + dc.state = CH9350Comm.STATE_1 # simulate post-handshake transition + + dc.send_scancode(bytes([0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00])) + mock_serial.write.assert_called_once_with( + b"\x57\xab\x83\x0c\x13\x01\x02\x00\x04\x00\x00\x00\x00\x00\x00\x07" + ) + + @patch("serial.Serial", MockSerial) + def test_state0_mouse_frame_format(self, mock_serial): + """ + State 0 relative mouse frame: + HEADER + 0x88 + LEN + SER + RID + [btn dx dy wheel] + CTR + CTRSUM + """ + dc = CH9350Comm(mock_serial, state=0) + dc.send_mouse_relative(0x01, 5, -3, 1) + # data sum: 0x01 + 0x01 + 0x05 + 0xFD + 0x01 = 0x105 & 0xFF = 0x05 + mock_serial.write.assert_called_once_with( + b"\x57\xab\x88\x08\x22\x01\x01\x05\xfd\x01\x00\x05" + ) + + @patch("serial.Serial", MockSerial) + def test_device_connect_frame_format(self, mock_serial): + """0x81 frame: HEADER + 0x81 + PORT + LEN(LE) + DESC + PID + CHK.""" + dc = CH9350Comm(mock_serial, state=0) + # CHK = (sum(desc) + sum(pid)) & 0xFF = (0xab + 0xcd + 0x01 + 0x02) & 0xFF = 0x7b + frame = dc._build_device_connect_frame(b"\xab\xcd", port_id=0x00, device_pid=b"\x01\x02") + assert frame == b"\x57\xab\x81\x00\x02\x00\xab\xcd\x01\x02\x7b" + + @patch("serial.Serial", MockSerial) + def test_device_connect_frame_rejects_bad_pid(self, mock_serial): + dc = CH9350Comm(mock_serial, state=0) + with pytest.raises(ValueError): + dc._build_device_connect_frame(b"\xab", port_id=0x00, device_pid=b"\x01") + + def test_parse_frames_basic(self): + """_parse_frames extracts complete (cmd, payload) tuples, leaves + partials in the buffer, and surfaces pre-header bytes as cmd=-1.""" + # Single complete 0x12 keep-alive (8-byte payload). + buf = bytearray(HEADER + b"\x12" + b"\x40\x00\x03\x15\x00\x07\xac\x20") + frames, remaining = _parse_frames(buf) + assert frames == [(0x12, b"\x40\x00\x03\x15\x00\x07\xac\x20")] + assert remaining == bytearray() + + # Pre-header noise + a 0x86 frame (no payload). + buf = bytearray(b"\xff\x00" + HEADER + b"\x86") + frames, remaining = _parse_frames(buf) + assert frames == [(-1, b"\xff\x00"), (0x86, b"")] + assert remaining == bytearray() + + # 0x88 length-prefixed: payload[0]=LEN means total payload = 1+LEN. + buf = bytearray(HEADER + b"\x88\x04\xaa\xbb\xcc\xdd") + frames, remaining = _parse_frames(buf) + assert frames == [(0x88, b"\x04\xaa\xbb\xcc\xdd")] + assert remaining == bytearray() + + # Partial frame: header + cmd + incomplete payload — leave in buffer. + buf = bytearray(HEADER + b"\x12\x40\x00") + frames, remaining = _parse_frames(buf) + assert frames == [] + assert remaining == bytearray(HEADER + b"\x12\x40\x00") + + @patch("serial.Serial", MockSerial) + def test_handle_frame_pid_ack_transitions_to_state1(self, mock_serial): + """When the UC's 0x12 reflects every announced PID, _handle_frame + moves state 0 → state 1 and sets _uc_seen.""" + dc = CH9350Comm(mock_serial, state=0) + assert dc.state == CH9350Comm.STATE_0 + assert not dc._uc_seen.is_set() + + # Payload with both PIDs matching the defaults → all-acked. + payload = DEFAULT_MOUSE_PID + DEFAULT_KBD_PID + b"\x00\x07\xac\x20" + dc._handle_frame(0x12, payload) + + assert dc._uc_seen.is_set() + assert dc.state == CH9350Comm.STATE_1 + assert dc._uc_p1 == DEFAULT_MOUSE_PID + assert dc._uc_p2 == DEFAULT_KBD_PID + + @patch("serial.Serial", MockSerial) + def test_handle_frame_pid_drop_triggers_reattach(self, mock_serial): + """In state 1, a 0x12 with cleared PIDs (target-side replug) drops + us back to state 0 and signals _reattach_needed.""" + dc = CH9350Comm(mock_serial, state=0) + # Bring us up to state 1 with full ack. + dc._handle_frame(0x12, DEFAULT_MOUSE_PID + DEFAULT_KBD_PID + b"\x00\x07\xac\x20") + assert dc.state == CH9350Comm.STATE_1 + assert not dc._reattach_needed.is_set() + + # UC clears PIDs to 00 00 → STATUS drops → reattach. + dc._handle_frame(0x12, b"\x00\x00\x00\x00\x00\x04\xac\x20") + assert dc.state == CH9350Comm.STATE_0 + assert dc._reattach_needed.is_set() + + @patch("serial.Serial", MockSerial) + def test_handle_frame_ignores_short_or_irrelevant(self, mock_serial): + """Non-0x12 frames and short 0x12 payloads are ignored (no state + change, no exceptions).""" + dc = CH9350Comm(mock_serial, state=0) + + dc._handle_frame(0x82, b"\xa3") # heartbeat — ignored + dc._handle_frame(0x12, b"\x00\x00") # too short for PIDs + assert dc.state == CH9350Comm.STATE_0 + assert not dc._uc_seen.is_set() + + @patch("serial.Serial", MockSerial) + def test_init_rejects_bad_pid_length(self, mock_serial): + """PIDs must be exactly 2 bytes.""" + with pytest.raises(ValueError): + CH9350Comm(mock_serial, state=0, mouse_pid=b"\x40") + with pytest.raises(ValueError): + CH9350Comm(mock_serial, state=0, kbd_pid=b"\x03\x15\x00") + + @patch("serial.Serial", MockSerial) + def test_start_stop_no_op_for_simple_states(self, mock_serial): + """States 2/3/4 don't need a handshake, so start()/stop() do nothing.""" + for state in (2, 3, 4): + dc = CH9350Comm(mock_serial, state=state) + dc.start() # no thread spawned + assert dc._rx_thread is None + assert dc._tx_thread is None + dc.stop() # no-op From 0f2d03c4ae6e67c2474b0e3f6c0cf05e97de306c Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Mon, 4 May 2026 21:00:09 +0100 Subject: [PATCH 18/45] Wire LED echo for CH9350Comm states 2/3/4 (towards #13) The CH9350L mirrors the target host's keyboard LED state back to the source keyboard via 0x80 0x3N (low nibble = NumLk/CapsLk/ScrLk bits). Wire that up in the simple modes: - start() now spawns the rx thread for states 2/3/4 too (no tx maintenance is needed- there's no handshake, just LED feedback). - _handle_frame's state-2/3/4 branch echoes the UC's 0x12 byte-4 LED state on change; never echoes the 0xFF pre-enum sentinel. Two new tests cover the echo path (change-only, FF-skip) and verify the simple-mode early-return keeps state-0 PID logic from running in state 2. --- kvm_serial/utils/ch9350.py | 74 ++++++++++++++++++++++++-------------- tests/utils/test_ch9350.py | 50 +++++++++++++++++++++++--- 2 files changed, 92 insertions(+), 32 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 69a981b..a46eb0f 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -239,6 +239,10 @@ def __init__( self._stop = threading.Event() self._uc_seen = threading.Event() self._reattach_needed = threading.Event() + # Last LED byte echoed back to the UC via 0x80 0x3N (states 2/3/4). + # Sentinel 0xFF means "nothing echoed yet"; the UC's pre-enum default + # is also 0xFF and we deliberately do not echo that. + self._echoed_led = 0xFF # Serialise port writes — rx callbacks (LED echo), tx maintenance # (heartbeat / retransmit), and user sends all converge on port.write. self._tx_lock = threading.Lock() @@ -249,27 +253,29 @@ def __init__( def start(self) -> None: """ - Begin the state-0/1 attach handshake and spawn the rx + maintenance - threads. No-op for states 2/3/4. + Spawn the rx thread, plus (state 0 only) the tx-maintenance thread + that drives the attach handshake, heartbeats, and reattach replay. + + State 0: rx + tx-maintenance. + States 2/3/4: rx only - there's no handshake, but the rx loop drives + LED echo back to the source keyboard from the UC's 0x12 + keep-alive. """ - if self.state != self.STATE_0: - return if self._rx_thread is not None: raise RuntimeError("CH9350Comm.start() called twice") self._stop.clear() self._rx_thread = threading.Thread(target=self._rx_loop, daemon=True) self._rx_thread.start() - # Run the initial attach in the maintenance thread so start() returns - # immediately; the caller is then free to send frames (which will - # emit 0x88 unpaired until the UC acks all PIDs and we transition - # to state 1). - self._tx_thread = threading.Thread(target=self._tx_maint_loop, daemon=True) - self._tx_thread.start() + if self.state == self.STATE_0: + # Run the initial attach in the maintenance thread so start() + # returns immediately; the caller is then free to send frames + # (which will emit 0x88 unpaired until the UC acks all PIDs and + # we transition to state 1). + self._tx_thread = threading.Thread(target=self._tx_maint_loop, daemon=True) + self._tx_thread.start() def stop(self) -> None: - """Halt the rx + maintenance threads. No-op for states 2/3/4.""" - if self.state != self.STATE_0: - return + """Halt the rx (and, in state 0, tx-maintenance) threads.""" self._stop.set() if self._tx_thread is not None: self._tx_thread.join(timeout=2.0) @@ -553,16 +559,18 @@ def _rx_loop(self) -> None: def _handle_frame(self, cmd: int, payload: bytes) -> None: """ - State-0/1 receive-side state machine. Pure function modulo - ``self``: tests can drive it directly with synthetic UC frames. - - Decodes the UC's 0x12 keep-alive (PIDs in P1/P2, STATUS, LED byte) - and: - - sets _uc_seen on the first 0x12 (cleared to send 0x81 frames) - - transitions state 0 -> state 1 once every announced PID is - reflected back - - reverts state 1 -> state 0 and triggers _reattach_needed when - the UC drops a previously-acked PID (target-side replug) + Receive-side state machine. Pure function modulo ``self``: tests + can drive it directly with synthetic UC frames. + + Decodes the UC's 0x12 keep-alive (PIDs in P1/P2, LED byte at index 4, + STATUS at index 5) and dispatches: + - State 0: sets _uc_seen on first 0x12 (cleared to send 0x81), + transitions to state 1 once every announced PID is reflected. + - State 1: reverts to state 0 + sets _reattach_needed when the UC + drops a previously-acked PID (target-side USB replug). + - States 2/3/4: echoes the UC's reported LED state back as a + 0x80 0x3N frame so the source keyboard's lock-key LEDs mirror + the target host. Echoes only on change to avoid flooding. """ logger.debug("rx cmd=%02x payload=%s", cmd, payload.hex(" ")) if cmd != 0x12 or len(payload) < 4: @@ -572,23 +580,35 @@ def _handle_frame(self, cmd: int, payload: bytes) -> None: if len(payload) >= 6: self._uc_status = payload[5] if not self._uc_seen.is_set(): - logger.info("UC keep-alive observed — announce phase cleared") + logger.info("UC keep-alive observed -- announce phase cleared") self._uc_seen.set() + # LED echo for the simple modes. The UC's 0x12 byte 4 carries the + # target host's keyboard LED state (NumLk/CapsLk/ScrLk in the low + # three bits); we mirror it back to the LC's USB-host side via + # 0x80 0x3N so the source keyboard's lock LEDs follow the target. + # 0xFF means "UC has no target enumerated yet"; never echo that. + if self.state in (self.STATE_2, self.STATE_3, self.STATE_4) and len(payload) >= 5: + led_byte = payload[4] + if led_byte != 0xFF and led_byte != self._echoed_led: + self._send_locked(HEADER + bytes([0x80, 0x30 | (led_byte & 0x07)])) + self._echoed_led = led_byte + return + want_p1 = self.mouse_pid if self.mouse_desc else b"\x00\x00" want_p2 = self.kbd_pid if self.kbd_desc else b"\x00\x00" any_announced = bool(self.mouse_desc or self.kbd_desc) all_acked = self._uc_p1 == want_p1 and self._uc_p2 == want_p2 if self.state == self.STATE_0 and any_announced and all_acked: - logger.info("UC acknowledged all PIDs — entering state 1") + logger.info("UC acknowledged all PIDs - entering state 1") self.state = self.STATE_1 elif self.state == self.STATE_1 and not all_acked: - # UC dropped a PID — likely target-side USB replug. Revert to + # UC dropped a PID - likely target-side USB replug. Revert to # state 0 and trigger the maintenance thread to replay the full # attach sequence (0x81 alone won't make the UC re-enumerate). logger.info( - "UC PIDs no longer match (p1=%s p2=%s) — reverting to state 0, triggering reattach", + "UC PIDs no longer match (p1=%s p2=%s) - reverting to state 0, triggering reattach", self._uc_p1.hex(), self._uc_p2.hex(), ) diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index 4c1be4f..5f61530 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -304,11 +304,51 @@ def test_init_rejects_bad_pid_length(self, mock_serial): CH9350Comm(mock_serial, state=0, kbd_pid=b"\x03\x15\x00") @patch("serial.Serial", MockSerial) - def test_start_stop_no_op_for_simple_states(self, mock_serial): - """States 2/3/4 don't need a handshake, so start()/stop() do nothing.""" + def test_start_stop_simple_states_spawns_rx_only(self, mock_serial): + """States 2/3/4 spawn just the rx thread (for LED echo); no + tx-maintenance thread is needed since there's no handshake.""" for state in (2, 3, 4): dc = CH9350Comm(mock_serial, state=state) - dc.start() # no thread spawned - assert dc._rx_thread is None + dc.start() + assert dc._rx_thread is not None assert dc._tx_thread is None - dc.stop() # no-op + dc.stop() + assert dc._rx_thread is None + + @patch("serial.Serial", MockSerial) + def test_led_echo_simple_states(self, mock_serial): + """ + States 2/3/4 mirror the UC's reported LED state back as 0x80 0x3N + so the source keyboard's lock LEDs follow the target host. Echoed + only on change; the 0xFF pre-enum sentinel is never echoed. + """ + for state in (2, 3, 4): + dc = CH9350Comm(mock_serial, state=state) + mock_serial.write.reset_mock() + + # 0xFF (UC has no target yet) is never echoed. + dc._handle_frame(0x12, b"\x00\x00\x00\x00\xff\x04\xac\x20") + mock_serial.write.assert_not_called() + + # NumLk on (LED bits 0x01) -> echo 0x80 0x31. + dc._handle_frame(0x12, b"\x00\x00\x00\x00\x01\x07\xac\x20") + mock_serial.write.assert_called_once_with(b"\x57\xab\x80\x31") + mock_serial.write.reset_mock() + + # Same LED byte twice -> no re-echo (avoids flooding). + dc._handle_frame(0x12, b"\x00\x00\x00\x00\x01\x07\xac\x20") + mock_serial.write.assert_not_called() + + # CapsLk added (LED bits 0x03) -> echo 0x80 0x33. + dc._handle_frame(0x12, b"\x00\x00\x00\x00\x03\x07\xac\x20") + mock_serial.write.assert_called_once_with(b"\x57\xab\x80\x33") + + @patch("serial.Serial", MockSerial) + def test_led_echo_does_not_run_state0_pid_logic(self, mock_serial): + """Simple-mode 0x12 handling early-returns before the state-0 PID + bookkeeping; state stays at the user-selected mode and _reattach_needed + is never set even when PIDs are 'wrong' (since they're not used here).""" + dc = CH9350Comm(mock_serial, state=2) + dc._handle_frame(0x12, b"\x00\x00\x00\x00\x01\x07\xac\x20") + assert dc.state == CH9350Comm.STATE_2 + assert not dc._reattach_needed.is_set() From b12989316f06a884b6546db83bf76fa9e387b0b5 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 00:46:59 +0100 Subject: [PATCH 19/45] Wire CH9350Comm through BaseOp + kvm-control CLI (towards #13) DataComm: added no-op start()/stop() lifecycle hooks (CH9350Comm overrides; CH9329Comm no-ops). BaseOp's comm_cls annotation widens to Callable[[Serial], DataComm]: callers pass a class directly or a lambda/partial when constructor args are needed (e.g. CH9350 state). __init__ calls hid_serial_out.start() and the default cleanup() calls stop() so any background threads exit cleanly. KeyboardListener and MouseListener: pass comm_cls through to the underlying op; the keyboard runner wraps op.run() in try/finally so cleanup runs on the listener thread. kvm-control gains a mutually-exclusive --ch9329 / --ch9350 protocol flag (default CH9329; --ch9329 is imperative-only) plus --ch9350-state in {0, 2, 3, 4}, defaulting to 2 (legacy-BIOS / UEFI CSM compatible). Without --ch9350 the CH9329 path is unchanged. 6 new tests: BaseOp comm_cls invocation, BaseOp cleanup, CLI defaults, --ch9350 --ch9350-state=3 producing a CH9350Comm in state 3, --ch9329 parsing as a no-op, and --ch9329 + --ch9350 erroring as mutex. Existing baseop and keyboard tests updated for the new kwarg. --- kvm_serial/backend/implementations/baseop.py | 25 +++++++--- kvm_serial/backend/keyboard.py | 8 +++- kvm_serial/backend/mouse.py | 5 +- kvm_serial/control.py | 44 ++++++++++++++++- kvm_serial/utils/communication.py | 13 +++++ tests/backend/implementations/test_baseop.py | 50 +++++++++++++++++++- tests/backend/test_keyboard.py | 12 +++-- tests/test_control.py | 41 ++++++++++++++++ 8 files changed, 181 insertions(+), 17 deletions(-) diff --git a/kvm_serial/backend/implementations/baseop.py b/kvm_serial/backend/implementations/baseop.py index e169d81..990b15f 100644 --- a/kvm_serial/backend/implementations/baseop.py +++ b/kvm_serial/backend/implementations/baseop.py @@ -1,10 +1,13 @@ from abc import ABC, abstractmethod -from typing import Type +from typing import Callable from serial import Serial from kvm_serial.utils.communication import DataComm from kvm_serial.utils.ch9329 import CH9329Comm +CommCls = Callable[[Serial], DataComm] + + class BaseOp(ABC): """ Abstract base class for input capture implementations. @@ -19,22 +22,28 @@ def __init__( self, serial_port: Serial, layout: str = "en_GB", - comm_cls: Type[DataComm] | None = None, + comm_cls: CommCls | None = None, ): """ - Initialise the operation with the given serial port, and - instantiate the protocol implementation that will encapsulate - HID events for the target chip family. + Initialise the operation with the given serial port, and instantiate + the protocol implementation that will encapsulate HID events for the + target chip family. :param serial_port: The serial port to communicate with. :param layout: Keyboard layout to use (default: 'en_GB') - :param comm_cls: DataComm subclass to use (default: CH9329Comm) + :param comm_cls: Callable taking a Serial and returning a DataComm. + Defaults to CH9329Comm. Pass a lambda / partial to select an + alternative protocol (e.g. ``lambda p: CH9350Comm(p, state=2)``). """ self.serial_port = serial_port if comm_cls is None: comm_cls = CH9329Comm self.hid_serial_out = comm_cls(self.serial_port) self.layout = layout + # Start any background threads or handshake the comm needs. CH9329Comm + # inherits the ABC's no-op; CH9350Comm overrides for state 0/1 + # descriptor announce + state 2/3/4 LED echo. + self.hid_serial_out.start() @abstractmethod def run(self): @@ -52,5 +61,7 @@ def name(self) -> str: def cleanup(self): """ - Optional cleanup method for implementations that need it. + Stop the comm's background activity. Override to add implementation- + specific cleanup, but call ``super().cleanup()`` to release the comm. """ + self.hid_serial_out.stop() diff --git a/kvm_serial/backend/keyboard.py b/kvm_serial/backend/keyboard.py index 8b0486e..6ce697d 100755 --- a/kvm_serial/backend/keyboard.py +++ b/kvm_serial/backend/keyboard.py @@ -52,6 +52,7 @@ def __init__( mode: Mode | str = "pynput", baud: int = 9600, layout: str = "en_GB", + comm_cls=None, ): if isinstance(serial_port, str): @@ -65,6 +66,7 @@ def __init__( self.mode = mode self.layout = layout + self.comm_cls = comm_cls self.running = False self.thread = threading.Thread(target=self.run_keyboard) @@ -87,7 +89,11 @@ def run_keyboard(self): module_name, class_name = _MODE_IMPLEMENTATIONS[self.mode] Impl = _load_implementation(module_name, class_name) - Impl(self.serial_port, layout=self.layout).run() + op = Impl(self.serial_port, layout=self.layout, comm_cls=self.comm_cls) + try: + op.run() + finally: + op.cleanup() def keyboard_main(): diff --git a/kvm_serial/backend/mouse.py b/kvm_serial/backend/mouse.py index 13d3ca7..db61850 100755 --- a/kvm_serial/backend/mouse.py +++ b/kvm_serial/backend/mouse.py @@ -11,8 +11,8 @@ class MouseListener(InputHandler): - def __init__(self, serial, block=True): - self.op = MouseOp(serial) + def __init__(self, serial, block=True, comm_cls=None): + self.op = MouseOp(serial, comm_cls=comm_cls) self.thread = Listener( on_move=self.on_move, @@ -59,6 +59,7 @@ def start(self): def stop(self): self.thread.stop() self.thread.join() + self.op.cleanup() def on_move(self, x, y): return self.op.on_move(x, y, self._width, self._height) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index a8e8a61..b03fa08 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -38,6 +38,19 @@ def signal_handler_ignore(sig, frame): logging.debug("Ignoring Ctrl+C") +def _build_comm_cls(args): + """ + Resolve --ch9350 / --ch9350-state into a DataComm implementation; + None preserves the existing CH9329Comm path inside BaseOp. + """ + if not args.ch9350: + return None + from kvm_serial.utils.ch9350 import CH9350Comm + + state = args.ch9350_state + return lambda port: CH9350Comm(port, state=state) + + def start_threads(args, serial_port): """Start handler threads based on command line arguments. @@ -47,18 +60,25 @@ def start_threads(args, serial_port): """ global ml, keeb + comm_cls = _build_comm_cls(args) + # Start mouse listner on --mouse (-e) if args.mouse: from kvm_serial.backend.mouse import MouseListener - ml = MouseListener(serial_port) + ml = MouseListener(serial_port, comm_cls=comm_cls) ml.start() # Do not capture keyboard with --no-keyboard (-n) if not args.no_keyboard: from kvm_serial.backend.keyboard import KeyboardListener - keeb = KeyboardListener(serial_port, mode=args.mode, layout=args.keyboard_layout) + keeb = KeyboardListener( + serial_port, + mode=args.mode, + layout=args.keyboard_layout, + comm_cls=comm_cls, + ) keeb.start() @@ -140,6 +160,26 @@ def parse_args(): help="Capture mouse input", action="store_true", ) + proto_group = parser.add_mutually_exclusive_group() + proto_group.add_argument( + "--ch9329", + help="Use the CH9329 protocol (default; flag for imperative declaration)", + action="store_true", + ) + proto_group.add_argument( + "--ch9350", + help="Use the CH9350L extender protocol", + action="store_true", + ) + parser.add_argument( + "--ch9350-state", + help="CH9350L working state to drive (default 2: legacy BIOS / UEFI CSM " + "compatible). 0 = paired-mode descriptor handshake; 3 = absolute mouse; " + "4 = HID Digitizers. See docs/CH9350L_PROTO.md.", + type=int, + default=2, + choices=[0, 2, 3, 4], + ) vids_group = parser.add_argument_group( "Video Options (removed)", description="Headless video display has been removed. Switches accepted " diff --git a/kvm_serial/utils/communication.py b/kvm_serial/utils/communication.py index 14e9853..2ca1fba 100644 --- a/kvm_serial/utils/communication.py +++ b/kvm_serial/utils/communication.py @@ -54,6 +54,19 @@ def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> unused fields (e.g. button-only events or pure scroll events). """ + def start(self) -> None: + """ + Optional lifecycle hook invoked once the comm is wired into a BaseOp. + Implementations that need background threads or a handshake (e.g. + CH9350Comm state 0) override this; default is a no-op. + """ + + def stop(self) -> None: + """ + Optional lifecycle hook invoked at shutdown. Pairs with start(); + default is a no-op. + """ + def list_serial_ports(): """ diff --git a/tests/backend/implementations/test_baseop.py b/tests/backend/implementations/test_baseop.py index d8d1806..290c406 100644 --- a/tests/backend/implementations/test_baseop.py +++ b/tests/backend/implementations/test_baseop.py @@ -44,6 +44,54 @@ def name(self): assert op.serial_port == mock_serial assert op.name == "test_keyboard" - # Verify DataComm was initialized with correct serial port + # Verify DataComm was initialized with correct serial port and + # that BaseOp called start() on the comm to kick off any + # background activity (handshake threads, LED echo). assert isinstance(op.hid_serial_out, MagicMock) mock_datacomm.assert_called_once_with(mock_serial) + op.hid_serial_out.start.assert_called_once() + + def test_baseop_uses_comm_cls(self, mock_serial, sys_modules_patch): + """A custom comm_cls is invoked with the serial port and its + return value becomes hid_serial_out.""" + + with patch.dict("sys.modules", sys_modules_patch): + from kvm_serial.backend.implementations.baseop import BaseOp + + class ConcreteBaseOp(BaseOp): + def run(self): + return True + + @property + def name(self): + return "test" + + mock_comm = MagicMock() + mock_factory = MagicMock(return_value=mock_comm) + + op = ConcreteBaseOp(mock_serial, comm_cls=mock_factory) + + mock_factory.assert_called_once_with(mock_serial) + assert op.hid_serial_out is mock_comm + mock_comm.start.assert_called_once() + + def test_baseop_cleanup_stops_comm(self, mock_serial, sys_modules_patch): + """Default cleanup() forwards to the comm's stop() so background + threads (CH9350 state 0) can exit cleanly.""" + + with patch.dict("sys.modules", sys_modules_patch): + from kvm_serial.backend.implementations.baseop import BaseOp + + class ConcreteBaseOp(BaseOp): + def run(self): + return True + + @property + def name(self): + return "test" + + mock_comm = MagicMock() + op = ConcreteBaseOp(mock_serial, comm_cls=MagicMock(return_value=mock_comm)) + + op.cleanup() + mock_comm.stop.assert_called_once() diff --git a/tests/backend/test_keyboard.py b/tests/backend/test_keyboard.py index 443708b..720b51c 100644 --- a/tests/backend/test_keyboard.py +++ b/tests/backend/test_keyboard.py @@ -224,25 +224,29 @@ def test_run_keyboard_selects_correct_handler_and_runs( # USB mode listener = KeyboardListener(mock_serial, mode=Mode.USB) listener.run_keyboard() - mock_pyusbop.PyUSBOp.assert_called_once_with(mock_serial, layout="en_GB") + mock_pyusbop.PyUSBOp.assert_called_once_with(mock_serial, layout="en_GB", comm_cls=None) mock_pyusbop.PyUSBOp.return_value.run.assert_called_once() # PYNPUT mode listener = KeyboardListener(mock_serial, mode=Mode.PYNPUT) listener.run_keyboard() - mock_pynputop.PynputOp.assert_called_once_with(mock_serial, layout="en_GB") + mock_pynputop.PynputOp.assert_called_once_with( + mock_serial, layout="en_GB", comm_cls=None + ) mock_pynputop.PynputOp.return_value.run.assert_called_once() # TTY mode listener = KeyboardListener(mock_serial, mode=Mode.TTY) listener.run_keyboard() - mock_ttyop.TtyOp.assert_called_once_with(mock_serial, layout="en_GB") + mock_ttyop.TtyOp.assert_called_once_with(mock_serial, layout="en_GB", comm_cls=None) mock_ttyop.TtyOp.return_value.run.assert_called_once() # CURSES mode listener = KeyboardListener(mock_serial, mode=Mode.CURSES) listener.run_keyboard() - mock_cursesop.CursesOp.assert_called_once_with(mock_serial, layout="en_GB") + mock_cursesop.CursesOp.assert_called_once_with( + mock_serial, layout="en_GB", comm_cls=None + ) mock_cursesop.CursesOp.return_value.run.assert_called_once() # NONE mode (should do nothing) diff --git a/tests/test_control.py b/tests/test_control.py index 3c62efb..c605a90 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -44,6 +44,47 @@ def test_parse_args_default_values(self): assert not args.verbose assert not args.mouse assert not args.video + # CH9329 is the default; --ch9350 is opt-in. + assert not args.ch9350 + assert args.ch9350_state == 2 + + @patch("sys.argv", ["control.py", "/dev/ttyUSB0"]) + def test_build_comm_cls_default_is_none(self): + """Without --ch9350, the factory is None so BaseOp falls back to CH9329.""" + from kvm_serial.control import _build_comm_cls, parse_args + + assert _build_comm_cls(parse_args()) is None + + @patch("sys.argv", ["control.py", "/dev/ttyUSB0", "--ch9329"]) + def test_explicit_ch9329_flag_is_a_no_op(self): + """--ch9329 declares the default explicitly; factory is still None.""" + from kvm_serial.control import _build_comm_cls, parse_args + + args = parse_args() + assert args.ch9329 + assert not args.ch9350 + assert _build_comm_cls(args) is None + + @patch("sys.argv", ["control.py", "/dev/ttyUSB0", "--ch9329", "--ch9350"]) + def test_protocol_flags_are_mutually_exclusive(self): + """--ch9329 and --ch9350 cannot both be passed.""" + from kvm_serial.control import parse_args + + with pytest.raises(SystemExit): + parse_args() + + @patch("sys.argv", ["control.py", "/dev/ttyUSB0", "--ch9350", "--ch9350-state", "3"]) + def test_build_comm_cls_ch9350(self): + """With --ch9350, the factory yields a CH9350Comm in the requested state.""" + from kvm_serial.control import _build_comm_cls, parse_args + from kvm_serial.utils.ch9350 import CH9350Comm + from tests._utilities import MockSerial + + factory = _build_comm_cls(parse_args()) + assert factory is not None + comm = factory(MockSerial()) + assert isinstance(comm, CH9350Comm) + assert comm.state == 3 def test_stop_threads(self): """Test stop_threads function with mock objects""" From 8b474700cf3e46a8b7a7fec4f144c5e703915e8a Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 08:26:28 +0100 Subject: [PATCH 20/45] Wire CH9350Comm via DataCommManager + kvm-control CLI flag (towards #13) Introduce DataCommManager as a singleton owning the DataComm instance and the input-listener lifecycle for a kvm-serial run. Two MouseOp / KeyboardOp instances would otherwise each instantiate their own CH9350Comm, racing for the UART, running the descriptor handshake twice, and emitting frames with desynchronised counters. DataCommManager(serial_port, comm_cls=CH9329Comm) constructs the comm via the callable and registers itself as the singleton. Subsequent BaseOp.__init__ calls fetch self.hid_serial_out via DataCommManager.get().comm; ownership of start()/stop() is the manager's, never BaseOp's. attach() registers listeners; start() runs comm-then-listeners, stop() runs listeners-then-comm (best-effort), join() blocks on the keyboard listener (which owns the exit key) when present, otherwise the first attached. KeyboardListener / MouseListener drop the comm kwarg; the underlying op fetches the shared comm via the manager. control.py collapses start_threads/join_threads/stop_threads onto manager calls and grows a mutually-exclusive --ch9329 / --ch9350 protocol flag (default CH9329; --ch9329 is imperative-only) plus --ch9350-state in {0, 2, 3, 4}, defaulting to 2 (legacy-BIOS / UEFI CSM compatible). Tests: - new tests/backend/test_manager.py (12 tests) covers init guard, get/reset, attach, start/stop ordering, exception-safe stop, and join's keyboard-preference fallback. - tests/backend/implementations/conftest.py autouse-installs a manager wrapping a MagicMock comm for every op test in the subtree. - root conftest pre-mocks usb/usb.core (with USBError as a real Exception class) and pre-imports kvm_serial.backend.keyboard + .implementations.pyusbop, anchoring them in sys.modules before later patch.dict("sys.modules", ...) blocks can evict them and leave parent-attribute paths resolving to stale modules. - test_baseop / test_mouse / test_control updated for the new signatures. --- kvm_serial/backend/implementations/baseop.py | 43 ++--- kvm_serial/backend/keyboard.py | 8 +- kvm_serial/backend/manager.py | 115 +++++++++++++ kvm_serial/backend/mouse.py | 5 +- kvm_serial/control.py | 73 ++++---- tests/backend/implementations/conftest.py | 36 ++++ tests/backend/implementations/test_baseop.py | 155 +++++++---------- tests/backend/test_keyboard.py | 12 +- tests/backend/test_manager.py | 171 +++++++++++++++++++ tests/backend/test_mouse.py | 125 +++++++------- tests/conftest.py | 52 ++++++ tests/test_control.py | 14 +- 12 files changed, 561 insertions(+), 248 deletions(-) create mode 100644 kvm_serial/backend/manager.py create mode 100644 tests/backend/implementations/conftest.py create mode 100644 tests/backend/test_manager.py diff --git a/kvm_serial/backend/implementations/baseop.py b/kvm_serial/backend/implementations/baseop.py index 990b15f..69be8da 100644 --- a/kvm_serial/backend/implementations/baseop.py +++ b/kvm_serial/backend/implementations/baseop.py @@ -1,49 +1,36 @@ from abc import ABC, abstractmethod -from typing import Callable from serial import Serial from kvm_serial.utils.communication import DataComm -from kvm_serial.utils.ch9329 import CH9329Comm - - -CommCls = Callable[[Serial], DataComm] class BaseOp(ABC): """ Abstract base class for input capture implementations. - All implementations must provide a run() method that takes a serial_port argument. + + All implementations must provide a run() method. The shared DataComm + instance is fetched from the DataCommManager singleton; lifecycle + (start/stop) is the manager's responsibility, not the op's. """ serial_port: Serial hid_serial_out: DataComm layout: str - def __init__( - self, - serial_port: Serial, - layout: str = "en_GB", - comm_cls: CommCls | None = None, - ): + def __init__(self, serial_port: Serial, layout: str = "en_GB"): """ - Initialise the operation with the given serial port, and instantiate - the protocol implementation that will encapsulate HID events for the - target chip family. + Initialise the operation, binding the shared protocol implementation + from the active DataCommManager. :param serial_port: The serial port to communicate with. :param layout: Keyboard layout to use (default: 'en_GB') - :param comm_cls: Callable taking a Serial and returning a DataComm. - Defaults to CH9329Comm. Pass a lambda / partial to select an - alternative protocol (e.g. ``lambda p: CH9350Comm(p, state=2)``). """ + # Import locally to avoid a circular import at module load time + # (manager -> keyboard -> backend.implementations.* -> baseop). + from kvm_serial.backend.manager import DataCommManager + self.serial_port = serial_port - if comm_cls is None: - comm_cls = CH9329Comm - self.hid_serial_out = comm_cls(self.serial_port) self.layout = layout - # Start any background threads or handshake the comm needs. CH9329Comm - # inherits the ABC's no-op; CH9350Comm overrides for state 0/1 - # descriptor announce + state 2/3/4 LED echo. - self.hid_serial_out.start() + self.hid_serial_out = DataCommManager.get().comm @abstractmethod def run(self): @@ -61,7 +48,7 @@ def name(self) -> str: def cleanup(self): """ - Stop the comm's background activity. Override to add implementation- - specific cleanup, but call ``super().cleanup()`` to release the comm. + Hook for implementation-specific cleanup. The shared comm's + lifecycle is owned by DataCommManager.stop(), not by individual + BaseOps. """ - self.hid_serial_out.stop() diff --git a/kvm_serial/backend/keyboard.py b/kvm_serial/backend/keyboard.py index 6ce697d..8b0486e 100755 --- a/kvm_serial/backend/keyboard.py +++ b/kvm_serial/backend/keyboard.py @@ -52,7 +52,6 @@ def __init__( mode: Mode | str = "pynput", baud: int = 9600, layout: str = "en_GB", - comm_cls=None, ): if isinstance(serial_port, str): @@ -66,7 +65,6 @@ def __init__( self.mode = mode self.layout = layout - self.comm_cls = comm_cls self.running = False self.thread = threading.Thread(target=self.run_keyboard) @@ -89,11 +87,7 @@ def run_keyboard(self): module_name, class_name = _MODE_IMPLEMENTATIONS[self.mode] Impl = _load_implementation(module_name, class_name) - op = Impl(self.serial_port, layout=self.layout, comm_cls=self.comm_cls) - try: - op.run() - finally: - op.cleanup() + Impl(self.serial_port, layout=self.layout).run() def keyboard_main(): diff --git a/kvm_serial/backend/manager.py b/kvm_serial/backend/manager.py new file mode 100644 index 0000000..924ae76 --- /dev/null +++ b/kvm_serial/backend/manager.py @@ -0,0 +1,115 @@ +""" +DataCommManager: lifecycle owner for the protocol comm and the input +listeners attached to it. + +The manager exists because a single serial port can drive at most one +comm instance — CH9350L state 0/1 in particular spawns rx + tx-maintenance +threads, so two MouseOp/KeyboardOp ops each instantiating their own +CH9350Comm would race for the UART, run the descriptor handshake twice, +and emit interleaved frames with desynchronised counters. + +Singleton-of-one: ``DataCommManager(serial_port, comm_cls=...)`` constructs +the comm and registers itself; ``DataCommManager.get()`` returns the same +instance from anywhere (typically from BaseOp.__init__, which fetches the +shared comm). ``reset()`` is the test escape hatch. +""" + +from __future__ import annotations + +import logging +from typing import Callable, ClassVar + +from serial import Serial + +from kvm_serial.backend.inputhandler import InputHandler +from kvm_serial.utils.communication import DataComm + +logger = logging.getLogger(__name__) + +CommCls = Callable[[Serial], DataComm] + + +class DataCommManager: + """ + Singleton owning the DataComm instance and the input listeners + attached to it. Centralises start/join/stop so individual ops and + listeners don't manage lifecycle. + """ + + _instance: ClassVar["DataCommManager | None"] = None + + def __init__(self, serial_port: Serial, comm_cls: CommCls): + if DataCommManager._instance is not None: + raise RuntimeError( + "DataCommManager already initialised; call reset() first or " + "use DataCommManager.get() to retrieve the existing instance" + ) + self.serial_port = serial_port + self.comm: DataComm = comm_cls(serial_port) + self._listeners: list[InputHandler] = [] + DataCommManager._instance = self + + @classmethod + def get(cls) -> "DataCommManager": + """Return the singleton. Raises if no manager has been initialised.""" + if cls._instance is None: + raise RuntimeError( + "DataCommManager not initialised; construct one before " "instantiating any BaseOp" + ) + return cls._instance + + @classmethod + def reset(cls) -> None: + """ + Test hook: drop the singleton so the next constructor call succeeds. + Stops the comm and any attached listeners first, best-effort, so + background threads don't leak across tests. + """ + if cls._instance is None: + return + try: + cls._instance.stop() + except Exception: + logger.exception("DataCommManager.reset(): stop() raised, ignoring") + cls._instance = None + + def attach(self, listener: InputHandler) -> None: + """Register an input listener. Listeners are started in attach order.""" + self._listeners.append(listener) + + def start(self) -> None: + """Start the comm (handshake / threads) then every attached listener.""" + self.comm.start() + for listener in self._listeners: + listener.start() + + def join(self) -> None: + """ + Block on the primary listener's thread. The keyboard listener owns + the exit key (e.g. Ctrl+ESC) when present; otherwise fall back to + the first attached listener. + """ + # Avoid a circular import: KeyboardListener imports manager indirectly. + from kvm_serial.backend.keyboard import KeyboardListener + + primary = next( + (l for l in self._listeners if isinstance(l, KeyboardListener)), + self._listeners[0] if self._listeners else None, + ) + if primary is None: + return + thread = getattr(primary, "thread", None) + if thread is not None and hasattr(thread, "join"): + thread.join() + + def stop(self) -> None: + """Stop every listener (best-effort) then the comm.""" + for listener in self._listeners: + try: + listener.stop() + except Exception: + logger.exception("Listener stop() raised, continuing") + try: + self.comm.stop() + except Exception: + logger.exception("Comm stop() raised") diff --git a/kvm_serial/backend/mouse.py b/kvm_serial/backend/mouse.py index db61850..13d3ca7 100755 --- a/kvm_serial/backend/mouse.py +++ b/kvm_serial/backend/mouse.py @@ -11,8 +11,8 @@ class MouseListener(InputHandler): - def __init__(self, serial, block=True, comm_cls=None): - self.op = MouseOp(serial, comm_cls=comm_cls) + def __init__(self, serial, block=True): + self.op = MouseOp(serial) self.thread = Listener( on_move=self.on_move, @@ -59,7 +59,6 @@ def start(self): def stop(self): self.thread.stop() self.thread.join() - self.op.cleanup() def on_move(self, x, y): return self.op.on_move(x, y, self._width, self._height) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index b03fa08..a821f78 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -21,9 +21,8 @@ logger = logging.getLogger(__name__) -# Globally visible listener objects for thread stop -ml = None -keeb = None +# The single DataCommManager for this run; stop_threads() joins it. +mgr = None # Provide different options for handling SIGINT so Ctrl+C can be passed to controller @@ -40,69 +39,63 @@ def signal_handler_ignore(sig, frame): def _build_comm_cls(args): """ - Resolve --ch9350 / --ch9350-state into a DataComm implementation; - None preserves the existing CH9329Comm path inside BaseOp. + Resolve --ch9350 / --ch9350-state into a DataComm-producing callable. + Defaults to CH9329Comm (the class itself, which is callable). """ - if not args.ch9350: - return None - from kvm_serial.utils.ch9350 import CH9350Comm + if args.ch9350: + from kvm_serial.utils.ch9350 import CH9350Comm - state = args.ch9350_state - return lambda port: CH9350Comm(port, state=state) + state = args.ch9350_state + return lambda port: CH9350Comm(port, state=state) + from kvm_serial.utils.ch9329 import CH9329Comm + + return CH9329Comm def start_threads(args, serial_port): - """Start handler threads based on command line arguments. + """Construct the DataCommManager, attach listeners per CLI flags, and + start everything. Args: args: Parsed command line arguments. serial_port: Serial port object for communication. """ - global ml, keeb + global mgr + from kvm_serial.backend.manager import DataCommManager - comm_cls = _build_comm_cls(args) + mgr = DataCommManager(serial_port, comm_cls=_build_comm_cls(args)) - # Start mouse listner on --mouse (-e) + # Start mouse listener on --mouse (-e) if args.mouse: from kvm_serial.backend.mouse import MouseListener - ml = MouseListener(serial_port, comm_cls=comm_cls) - ml.start() + mgr.attach(MouseListener(serial_port)) # Do not capture keyboard with --no-keyboard (-n) if not args.no_keyboard: from kvm_serial.backend.keyboard import KeyboardListener - keeb = KeyboardListener( - serial_port, - mode=args.mode, - layout=args.keyboard_layout, - comm_cls=comm_cls, - ) - keeb.start() + mgr.attach(KeyboardListener(serial_port, mode=args.mode, layout=args.keyboard_layout)) + mgr.start() -def join_threads(args): - global ml, keeb - # Wait for threads to finish. The main thread depends on which inputs are active. - if (args.mode == "none" or args.no_keyboard) and ml is not None: - # Mouse-only: Ctrl+C raises KeyboardInterrupt and exits. - logging.info("Waiting for mouse listener...") - ml.thread.join() - elif not args.no_keyboard and keeb is not None: - # Keyboard listener owns the exit key (e.g. Ctrl+ESC). - logging.info("Waiting for keyboard listener...") - keeb.thread.join() +def join_threads(): + if mgr is not None: + mgr.join() def stop_threads(): - global ml, keeb - if ml is not None and ml.thread.is_alive(): - ml.stop() + global mgr + if mgr is not None: + mgr.stop() + # Drop the singleton so a subsequent run (e.g. from tests) can + # build a fresh manager without tripping the "already initialised" + # guard. + from kvm_serial.backend.manager import DataCommManager - if keeb is not None and keeb.thread.is_alive(): - keeb.stop() + DataCommManager.reset() + mgr = None def parse_args(): @@ -235,7 +228,7 @@ def main(): try: start_threads(args, serial_port) - join_threads(args) + join_threads() except KeyboardInterrupt: logging.warning("^C caught. Cleaning up!") except Exception as e: diff --git a/tests/backend/implementations/conftest.py b/tests/backend/implementations/conftest.py new file mode 100644 index 0000000..b145173 --- /dev/null +++ b/tests/backend/implementations/conftest.py @@ -0,0 +1,36 @@ +""" +Per-directory pytest configuration for backend op tests. + +Op tests (PyUSBOp, TtyOp, CursesOp, PynputOp, MouseOp, ...) all instantiate +a BaseOp subclass, which fetches its DataComm from the active +DataCommManager singleton. This autouse fixture installs a fresh manager +wrapping a MagicMock comm so op constructors succeed without each test +having to wire one up by hand. + +The fixture deliberately lives in this subdirectory rather than the root +conftest: importing kvm_serial.backend.manager pre-loads kvm_serial.backend +into sys.modules, which interacts badly with patch.dict-based sys.modules +manipulation in tests that load other backend submodules inside a +patch.dict block (the patch evicts the submodule on exit, but the parent +package's stale attribute survives, leaving sys.modules and attribute-path +imports resolving to different module objects). Scoping the manager +import to the implementations/ subtree keeps the rest of tests/backend/ +unaffected. +""" + +from unittest.mock import MagicMock +import pytest + + +@pytest.fixture(autouse=True) +def _datacomm_manager(): + """Install a fresh DataCommManager singleton wrapping a MagicMock comm + for every op test in this subtree. Reset on teardown.""" + from kvm_serial.backend.manager import DataCommManager + + DataCommManager.reset() + mgr = DataCommManager(MagicMock(), comm_cls=lambda port: MagicMock()) + try: + yield mgr + finally: + DataCommManager.reset() diff --git a/tests/backend/implementations/test_baseop.py b/tests/backend/implementations/test_baseop.py index 290c406..7145593 100644 --- a/tests/backend/implementations/test_baseop.py +++ b/tests/backend/implementations/test_baseop.py @@ -1,97 +1,72 @@ -from pytest import fixture from unittest.mock import patch, MagicMock from tests._utilities import MockSerial, mock_serial -CLASS_PATH = "kvm_serial.backend.implementations.baseop" - - -@fixture -def sys_modules_patch(): - return { - "serial": MagicMock(), - } - class TestBaseOpImplementation: """Test suite for BaseOp base class implementation""" - def test_baseop_init(self, mock_serial, sys_modules_patch): - - with ( - # I don't know why this makes test_mouse work, but at this point I'm too tired to care. - patch.dict("sys.modules", sys_modules_patch), - patch("kvm_serial.backend.implementations.baseop.CH9329Comm") as mock_datacomm, - ): - from kvm_serial.backend.implementations.baseop import BaseOp - - class ConcreteBaseOp(BaseOp): - """Concrete implementation of BaseOp for testing""" - - def run(self): - return True - - def cleanup(self): - pass - - @property - def name(self): - return "test_keyboard" - - # Create instance - op = ConcreteBaseOp(mock_serial) - - # Verify initialization - assert op.serial_port == mock_serial - assert op.name == "test_keyboard" - - # Verify DataComm was initialized with correct serial port and - # that BaseOp called start() on the comm to kick off any - # background activity (handshake threads, LED echo). - assert isinstance(op.hid_serial_out, MagicMock) - mock_datacomm.assert_called_once_with(mock_serial) - op.hid_serial_out.start.assert_called_once() - - def test_baseop_uses_comm_cls(self, mock_serial, sys_modules_patch): - """A custom comm_cls is invoked with the serial port and its - return value becomes hid_serial_out.""" - - with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations.baseop import BaseOp - - class ConcreteBaseOp(BaseOp): - def run(self): - return True - - @property - def name(self): - return "test" - - mock_comm = MagicMock() - mock_factory = MagicMock(return_value=mock_comm) - - op = ConcreteBaseOp(mock_serial, comm_cls=mock_factory) - - mock_factory.assert_called_once_with(mock_serial) - assert op.hid_serial_out is mock_comm - mock_comm.start.assert_called_once() - - def test_baseop_cleanup_stops_comm(self, mock_serial, sys_modules_patch): - """Default cleanup() forwards to the comm's stop() so background - threads (CH9350 state 0) can exit cleanly.""" - - with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations.baseop import BaseOp - - class ConcreteBaseOp(BaseOp): - def run(self): - return True - - @property - def name(self): - return "test" - - mock_comm = MagicMock() - op = ConcreteBaseOp(mock_serial, comm_cls=MagicMock(return_value=mock_comm)) - - op.cleanup() - mock_comm.stop.assert_called_once() + def test_baseop_init_uses_manager_comm(self, mock_serial, _datacomm_manager): + """BaseOp fetches its DataComm from the active DataCommManager + rather than instantiating one itself.""" + from kvm_serial.backend.implementations.baseop import BaseOp + + class ConcreteBaseOp(BaseOp): + def run(self): + return True + + @property + def name(self): + return "test" + + op = ConcreteBaseOp(mock_serial) + + assert op.serial_port is mock_serial + assert op.name == "test" + # The autouse _datacomm_manager fixture installs a singleton whose + # comm is a MagicMock; BaseOp should hand out exactly that instance. + assert op.hid_serial_out is _datacomm_manager.comm + + def test_baseop_init_raises_without_manager(self, mock_serial): + """Constructing a BaseOp with no manager initialised raises a + clear error rather than silently auto-creating a comm.""" + from kvm_serial.backend.implementations.baseop import BaseOp + from kvm_serial.backend.manager import DataCommManager + + class ConcreteBaseOp(BaseOp): + def run(self): + return True + + @property + def name(self): + return "test" + + # The autouse fixture has a manager set up; tear it down for this + # test to assert the no-manager error path. + DataCommManager.reset() + try: + import pytest + + with pytest.raises(RuntimeError, match="not initialised"): + ConcreteBaseOp(mock_serial) + finally: + # Restore a fresh manager so the autouse fixture's teardown + # doesn't trip a stale singleton. + DataCommManager(MagicMock(), comm_cls=lambda port: MagicMock()) + + def test_baseop_cleanup_is_a_noop(self, mock_serial, _datacomm_manager): + """BaseOp.cleanup() no longer touches the comm (lifecycle is the + manager's responsibility); subclasses can override for their own + cleanup needs.""" + from kvm_serial.backend.implementations.baseop import BaseOp + + class ConcreteBaseOp(BaseOp): + def run(self): + return True + + @property + def name(self): + return "test" + + op = ConcreteBaseOp(mock_serial) + op.cleanup() + _datacomm_manager.comm.stop.assert_not_called() diff --git a/tests/backend/test_keyboard.py b/tests/backend/test_keyboard.py index 720b51c..443708b 100644 --- a/tests/backend/test_keyboard.py +++ b/tests/backend/test_keyboard.py @@ -224,29 +224,25 @@ def test_run_keyboard_selects_correct_handler_and_runs( # USB mode listener = KeyboardListener(mock_serial, mode=Mode.USB) listener.run_keyboard() - mock_pyusbop.PyUSBOp.assert_called_once_with(mock_serial, layout="en_GB", comm_cls=None) + mock_pyusbop.PyUSBOp.assert_called_once_with(mock_serial, layout="en_GB") mock_pyusbop.PyUSBOp.return_value.run.assert_called_once() # PYNPUT mode listener = KeyboardListener(mock_serial, mode=Mode.PYNPUT) listener.run_keyboard() - mock_pynputop.PynputOp.assert_called_once_with( - mock_serial, layout="en_GB", comm_cls=None - ) + mock_pynputop.PynputOp.assert_called_once_with(mock_serial, layout="en_GB") mock_pynputop.PynputOp.return_value.run.assert_called_once() # TTY mode listener = KeyboardListener(mock_serial, mode=Mode.TTY) listener.run_keyboard() - mock_ttyop.TtyOp.assert_called_once_with(mock_serial, layout="en_GB", comm_cls=None) + mock_ttyop.TtyOp.assert_called_once_with(mock_serial, layout="en_GB") mock_ttyop.TtyOp.return_value.run.assert_called_once() # CURSES mode listener = KeyboardListener(mock_serial, mode=Mode.CURSES) listener.run_keyboard() - mock_cursesop.CursesOp.assert_called_once_with( - mock_serial, layout="en_GB", comm_cls=None - ) + mock_cursesop.CursesOp.assert_called_once_with(mock_serial, layout="en_GB") mock_cursesop.CursesOp.return_value.run.assert_called_once() # NONE mode (should do nothing) diff --git a/tests/backend/test_manager.py b/tests/backend/test_manager.py new file mode 100644 index 0000000..7249f33 --- /dev/null +++ b/tests/backend/test_manager.py @@ -0,0 +1,171 @@ +""" +Tests for DataCommManager — the singleton that owns the comm + listener +lifecycle for a kvm-serial run. +""" + +from unittest.mock import MagicMock, call +import pytest + +from kvm_serial.backend.manager import DataCommManager + + +@pytest.fixture(autouse=True) +def _reset_singleton(): + """Make sure no stale singleton from another test leaks into this file.""" + DataCommManager.reset() + yield + DataCommManager.reset() + + +def test_init_invokes_comm_cls_with_serial_port(): + """The comm_cls callable receives the serial port and the resulting + comm becomes the manager's ``comm`` attribute.""" + serial = MagicMock() + comm = MagicMock() + cls = MagicMock(return_value=comm) + + mgr = DataCommManager(serial, comm_cls=cls) + + cls.assert_called_once_with(serial) + assert mgr.comm is comm + assert mgr.serial_port is serial + + +def test_double_init_raises(): + """Attempting to construct a second manager without resetting raises.""" + DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + with pytest.raises(RuntimeError, match="already initialised"): + DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + + +def test_get_without_init_raises(): + """get() before any constructor surfaces a clear error rather than + silently auto-creating one.""" + with pytest.raises(RuntimeError, match="not initialised"): + DataCommManager.get() + + +def test_get_returns_singleton(): + """get() hands back the same instance on repeated calls.""" + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + assert DataCommManager.get() is mgr + assert DataCommManager.get() is mgr + + +def test_reset_drops_singleton_and_stops_comm(): + """reset() stops the comm and clears the singleton so a fresh one can + be constructed.""" + comm = MagicMock() + DataCommManager(MagicMock(), comm_cls=lambda p: comm) + + DataCommManager.reset() + + comm.stop.assert_called_once() + with pytest.raises(RuntimeError): + DataCommManager.get() + + +def test_attach_registers_listeners_in_order(): + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + a, b = MagicMock(), MagicMock() + + mgr.attach(a) + mgr.attach(b) + + assert mgr._listeners == [a, b] + + +def test_start_runs_comm_then_listeners(): + """start() calls comm.start() before any listener.start() so handshake + completes (CH9350 state 0) before user input can fire.""" + comm = MagicMock() + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: comm) + a, b = MagicMock(), MagicMock() + mgr.attach(a) + mgr.attach(b) + + # Use an order-preserving manager mock to verify call sequencing. + order = MagicMock() + order.attach_mock(comm.start, "comm_start") + order.attach_mock(a.start, "a_start") + order.attach_mock(b.start, "b_start") + + mgr.start() + + assert order.mock_calls == [call.comm_start(), call.a_start(), call.b_start()] + + +def test_stop_runs_listeners_then_comm(): + """stop() halts listeners first then the comm, mirroring start().""" + comm = MagicMock() + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: comm) + a, b = MagicMock(), MagicMock() + mgr.attach(a) + mgr.attach(b) + + order = MagicMock() + order.attach_mock(a.stop, "a_stop") + order.attach_mock(b.stop, "b_stop") + order.attach_mock(comm.stop, "comm_stop") + + mgr.stop() + + assert order.mock_calls == [call.a_stop(), call.b_stop(), call.comm_stop()] + + +def test_stop_continues_past_listener_exception(): + """A listener whose stop() raises shouldn't prevent the others from + being stopped, nor the comm.""" + comm = MagicMock() + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: comm) + bad = MagicMock() + bad.stop.side_effect = RuntimeError("listener exploded") + good = MagicMock() + mgr.attach(bad) + mgr.attach(good) + + mgr.stop() + + bad.stop.assert_called_once() + good.stop.assert_called_once() + comm.stop.assert_called_once() + + +def test_join_blocks_on_keyboard_listener_when_present(): + """join() prefers the keyboard listener (it owns the exit key + Ctrl+ESC); falls back to the first attached otherwise.""" + from kvm_serial.backend.keyboard import KeyboardListener + + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + + mouse_listener = MagicMock() + mouse_listener.thread = MagicMock() + keeb_listener = MagicMock(spec=KeyboardListener) + keeb_listener.thread = MagicMock() + + mgr.attach(mouse_listener) + mgr.attach(keeb_listener) + + mgr.join() + + keeb_listener.thread.join.assert_called_once() + mouse_listener.thread.join.assert_not_called() + + +def test_join_falls_back_to_first_listener(): + """No keyboard listener attached: join() blocks on the first one.""" + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + + listener = MagicMock() + listener.thread = MagicMock() + mgr.attach(listener) + + mgr.join() + + listener.thread.join.assert_called_once() + + +def test_join_with_no_listeners_is_a_noop(): + """No listeners = nothing to wait on; join() returns silently.""" + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) + mgr.join() # should not raise diff --git a/tests/backend/test_mouse.py b/tests/backend/test_mouse.py index 6b13c02..386bc72 100644 --- a/tests/backend/test_mouse.py +++ b/tests/backend/test_mouse.py @@ -27,18 +27,17 @@ def sys_modules_patch(): @patch("serial.Serial", MockSerial) class TestMouse: - def test_mouse_listener(self, mock_serial, sys_modules_patch): - """Test basic MouseListener initialization""" + def test_mouse_listener(self, mock_serial, sys_modules_patch, _datacomm_manager): + """MouseListener constructs a MouseOp that fetches the shared + comm from the active DataCommManager.""" with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "CH9329Comm") as mock_datacomm: - MouseListener(mock_serial) - mock_datacomm.assert_called_once_with(mock_serial) + listener = MouseListener(mock_serial) + assert listener.op.hid_serial_out is _datacomm_manager.comm - def test_thread_calls(self, mock_serial, sys_modules_patch): + def test_thread_calls(self, mock_serial, sys_modules_patch, _datacomm_manager): """ Test that MouseListener.run(), start(), and stop() call correct Listener thread methods. Mocks: @@ -69,91 +68,85 @@ def test_thread_calls(self, mock_serial, sys_modules_patch): mock_thread.join.assert_called_once() mock_thread.reset_mock() - def test_on_move(self, mock_serial, sys_modules_patch): + def test_on_move(self, mock_serial, sys_modules_patch, _datacomm_manager): """ Test MouseListener.on_move forwards positional events to send_mouse_absolute with the listener's screen dimensions and returns True. Wire-level scaling and negative-coordinate wrapping live in - CH9329Comm — verified in tests/utils/test_communication.py. + CH9329Comm — verified in tests/utils/test_ch9329.py. """ with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "CH9329Comm") as mock_comm: - listener = MouseListener(mock_serial) - listener.op.hid_serial_out = mock_comm - listener._width = 1920 - listener._height = 1080 + mock_comm = _datacomm_manager.comm + listener = MouseListener(mock_serial) + listener._width = 1920 + listener._height = 1080 - result = listener.on_move(960, 540) - mock_comm.send_mouse_absolute.assert_called_once_with(0, 960, 540, 1920, 1080) - assert result is True + result = listener.on_move(960, 540) + mock_comm.send_mouse_absolute.assert_called_once_with(0, 960, 540, 1920, 1080) + assert result is True - def test_on_click(self, mock_serial, sys_modules_patch): + def test_on_click(self, mock_serial, sys_modules_patch, _datacomm_manager): """ Test MouseListener.on_click forwards press/release events to send_mouse_relative with the right button mask and zero motion. """ with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener from kvm_serial.backend.implementations.mouseop import MouseButton - with patch.object(baseop_mod, "CH9329Comm") as mock_comm: - listener = MouseListener(mock_serial) - listener.op.hid_serial_out = mock_comm - listener._width = 1920 - listener._height = 1080 - - left_button = MagicMock() - right_button = MagicMock() - listener.pynput_button_mapping = { # type: ignore - left_button: MouseButton.LEFT, - right_button: MouseButton.RIGHT, - } - - # (button, down, expected_button_byte) - cases = [ - (left_button, True, 0x01), - (left_button, False, 0x00), - (right_button, True, 0x02), - (right_button, False, 0x00), - ] - for button, down, expected_byte in cases: - result = listener.on_click(100, 200, button, down) - mock_comm.send_mouse_relative.assert_called_once_with(expected_byte, 0, 0, 0) - assert result is True - mock_comm.send_mouse_relative.reset_mock() - - def test_on_scroll(self, mock_serial, sys_modules_patch): + mock_comm = _datacomm_manager.comm + listener = MouseListener(mock_serial) + listener._width = 1920 + listener._height = 1080 + + left_button = MagicMock() + right_button = MagicMock() + listener.pynput_button_mapping = { # type: ignore + left_button: MouseButton.LEFT, + right_button: MouseButton.RIGHT, + } + + # (button, down, expected_button_byte) + cases = [ + (left_button, True, 0x01), + (left_button, False, 0x00), + (right_button, True, 0x02), + (right_button, False, 0x00), + ] + for button, down, expected_byte in cases: + result = listener.on_click(100, 200, button, down) + mock_comm.send_mouse_relative.assert_called_once_with(expected_byte, 0, 0, 0) + assert result is True + mock_comm.send_mouse_relative.reset_mock() + + def test_on_scroll(self, mock_serial, sys_modules_patch, _datacomm_manager): """ Test MouseListener.on_scroll forwards vertical scroll deltas as the wheel argument to send_mouse_relative; horizontal dx is dropped (CH9329's relative-mouse frame has no horizontal wheel axis). """ with patch.dict("sys.modules", sys_modules_patch): - from kvm_serial.backend.implementations import baseop as baseop_mod from kvm_serial.backend.mouse import MouseListener - with patch.object(baseop_mod, "CH9329Comm") as mock_comm: - listener = MouseListener(mock_serial) - listener.op.hid_serial_out = mock_comm - listener._width = 1920 - listener._height = 1080 - - # (dx, dy, expected_wheel) — dx is intentionally discarded. - cases = [ - (0, 1, 1), - (0, -1, -1), - (1, 0, 0), - (-1, 0, 0), - ] - for dx, dy, expected_wheel in cases: - result = listener.on_scroll(100, 200, dx, dy) - mock_comm.send_mouse_relative.assert_called_once_with(0, 0, 0, expected_wheel) - assert result is True - mock_comm.send_mouse_relative.reset_mock() + mock_comm = _datacomm_manager.comm + listener = MouseListener(mock_serial) + listener._width = 1920 + listener._height = 1080 + + # (dx, dy, expected_wheel) — dx is intentionally discarded. + cases = [ + (0, 1, 1), + (0, -1, -1), + (1, 0, 0), + (-1, 0, 0), + ] + for dx, dy, expected_wheel in cases: + result = listener.on_scroll(100, 200, dx, dy) + mock_comm.send_mouse_relative.assert_called_once_with(0, 0, 0, expected_wheel) + assert result is True + mock_comm.send_mouse_relative.reset_mock() # --- diff --git a/tests/conftest.py b/tests/conftest.py index 8af0683..6f3ea45 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,6 +9,8 @@ import sys from unittest.mock import MagicMock +import pytest + # Mock serial modules BEFORE any test imports happen def pytest_configure(config): @@ -31,3 +33,53 @@ def pytest_configure(config): sys.modules["serial"] = mock_serial_mod sys.modules["serial.tools"] = mock_tools sys.modules["serial.tools.list_ports"] = mock_list_ports + + # Mock usb / usb.core for pyusbop. USBError must be a real Exception + # class so the `except USBError as e:` clause inside pyusbop validates. + class _MockUSBError(Exception): + pass + + mock_usb_core = MagicMock() + mock_usb_core.USBError = _MockUSBError + mock_usb = MagicMock() + mock_usb.core = mock_usb_core + sys.modules["usb"] = mock_usb + sys.modules["usb.core"] = mock_usb_core + sys.modules["usb.util"] = MagicMock() + + # Pre-import backend submodules that tests later pull in inside + # `patch.dict("sys.modules", ...)` blocks. If a submodule is loaded + # *during* the patch, patch.dict evicts it on exit and the parent + # package's stale `.` attribute survives, causing later + # `from kvm_serial.backend import x as mod` (attribute path) and + # `from kvm_serial.backend.x import Y` (sys.modules path) to resolve + # to *different* module objects. Pre-loading anchors the modules in + # sys.modules before any patch sees them. + import kvm_serial.backend.keyboard # noqa: F401 + import kvm_serial.backend.implementations.pyusbop # noqa: F401 + + +@pytest.fixture +def _datacomm_manager(): + """ + Provide a fresh DataCommManager singleton wrapping a MagicMock comm to + every test. Ops constructed during the test fetch the mock via + ``DataCommManager.get().comm`` and any writes are observable on it. + The singleton is reset on teardown so tests don't pollute each other. + + Tests that need to assert on specific comm behaviour can grab the mock + with ``DataCommManager.get().comm``; tests that want to install their + own manager can call ``DataCommManager.reset()`` first and re-init. + """ + try: + from kvm_serial.backend.manager import DataCommManager + except ImportError: + yield + return + + DataCommManager.reset() + mgr = DataCommManager(MagicMock(), comm_cls=lambda port: MagicMock()) + try: + yield mgr + finally: + DataCommManager.reset() diff --git a/tests/test_control.py b/tests/test_control.py index c605a90..b1dc127 100644 --- a/tests/test_control.py +++ b/tests/test_control.py @@ -49,21 +49,23 @@ def test_parse_args_default_values(self): assert args.ch9350_state == 2 @patch("sys.argv", ["control.py", "/dev/ttyUSB0"]) - def test_build_comm_cls_default_is_none(self): - """Without --ch9350, the factory is None so BaseOp falls back to CH9329.""" + def test_build_comm_cls_defaults_to_ch9329(self): + """Without --ch9350, the comm class defaults to CH9329Comm.""" from kvm_serial.control import _build_comm_cls, parse_args + from kvm_serial.utils.ch9329 import CH9329Comm - assert _build_comm_cls(parse_args()) is None + assert _build_comm_cls(parse_args()) is CH9329Comm @patch("sys.argv", ["control.py", "/dev/ttyUSB0", "--ch9329"]) - def test_explicit_ch9329_flag_is_a_no_op(self): - """--ch9329 declares the default explicitly; factory is still None.""" + def test_explicit_ch9329_flag_yields_ch9329(self): + """--ch9329 declares the default explicitly; same class, same behaviour.""" from kvm_serial.control import _build_comm_cls, parse_args + from kvm_serial.utils.ch9329 import CH9329Comm args = parse_args() assert args.ch9329 assert not args.ch9350 - assert _build_comm_cls(args) is None + assert _build_comm_cls(args) is CH9329Comm @patch("sys.argv", ["control.py", "/dev/ttyUSB0", "--ch9329", "--ch9350"]) def test_protocol_flags_are_mutually_exclusive(self): From 4c487fa0c6879365ca3a607178090f259d3151e4 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 14:16:05 +0100 Subject: [PATCH 21/45] Wire CH9350Comm via DataCommManager + kvm-control CLI flag (towards #13) Add a Protocol submenu under Options: CH9329 (default) plus CH9350L state 0/1 paired, state 2 BIOS, state 3 abs mouse, state 4 Digitizers. Selecting an item updates protocol_var / ch9350_state_var and re-runs __init_serial; the choice persists in .kvm_settings.ini. __init_serial now stops any active DataCommManager before reopening the serial port, constructs a fresh manager bound to _build_comm_cls() (CH9329Comm or a state-bound CH9350Comm lambda), starts it (so the CH9350 state-0 handshake / state-2/3/4 LED-echo rx threads spin up), and instantiates QtOp / MouseOp which fetch the shared comm via DataCommManager.get(). closeEvent stops the manager so background threads exit cleanly. 5 new GUI tests cover the protocol-default load path, restoring ch9350 + state, invalid-state fallback, and _build_comm_cls returning the correct callable for each protocol. _setup_mock_menus now mocks protocol_menu too; the existing save-settings test was updated for the two new keys. --- kvm_serial/kvm.py | 142 ++++++++++++++++++++- tests/kvm/test_kvm_settings_persistence.py | 76 +++++++++++ 2 files changed, 215 insertions(+), 3 deletions(-) diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index dd4c7c8..b2f7965 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -147,6 +147,11 @@ class KVMQtGui(QMainWindow): video_device_var: str = "Loading cameras..." keyboard_layout_var: str = "en_GB" resolution_var: str = "" # "WIDTHxHEIGHT", empty means auto (from camera enumeration) + # Protocol selection: "ch9329" (default) or "ch9350" with a working state + # in {0, 2, 3, 4}. State 0 enters paired mode (descriptor handshake); + # 2/3/4 are the dipswitch-fixed simple modes. + protocol_var: str = "ch9329" + ch9350_state_var: int = 2 window_var: bool = False show_status_var: bool = True @@ -166,6 +171,9 @@ class KVMQtGui(QMainWindow): serial_port: Serial | None = None keyboard_op: QtOp | None = None mouse_op: MouseOp | None = None + # The DataCommManager owning the active comm + its lifecycle. Reset + # alongside the serial port whenever __init_serial reopens the link. + comm_manager: object | None = None # Dimensions window_default_width: int = 1280 @@ -285,12 +293,13 @@ def __init_menu(self): options_menu = menubar.addMenu("Options") options_menu = cast(QMenu, options_menu) # hush PyLance - # Serial Port, Baud, Video, Resolution, and Keyboard Layout submenus + # Serial Port, Baud, Video, Resolution, Keyboard Layout, Protocol submenus self.serial_port_menu = options_menu.addMenu("Serial Port") self.baud_rate_menu = options_menu.addMenu("Baud Rate") self.video_device_menu = options_menu.addMenu("Video Device") self.resolution_menu = options_menu.addMenu("Resolution") self.keyboard_layout_menu = options_menu.addMenu("Keyboard Layout") + self.protocol_menu = options_menu.addMenu("Protocol") options_menu.addSeparator() @@ -469,6 +478,7 @@ def __init_devices(self): self._populate_baud_rates() self._populate_video_devices() self._populate_keyboard_layouts() + self._populate_protocol_menu() QTimer.singleShot(10, lambda: self._load_settings(self.CONFIG_FILE)) def _update_status_bar(self): @@ -596,6 +606,29 @@ def _load_settings(self, config_file: str): self.keyboard_layout_var = self._detect_system_keyboard_layout() logging.info(f"Auto-detected keyboard layout: {self.keyboard_layout_var}") + # Load protocol selection (default CH9329 if missing or invalid) + saved_protocol = kvm.get("protocol", "ch9329") + if saved_protocol == "ch9350": + try: + saved_state = int(kvm.get("ch9350_state", "2")) + except ValueError: + saved_state = 2 + if saved_state in (0, 2, 3, 4): + self.protocol_var = "ch9350" + self.ch9350_state_var = saved_state + else: + logging.warning( + f"Invalid ch9350_state in settings: {kvm.get('ch9350_state')}; " + "falling back to CH9329" + ) + self.protocol_var = "ch9329" + else: + self.protocol_var = "ch9329" + if hasattr(self, "protocol_menu") and self.protocol_menu is not None: + target = self._protocol_label(self.protocol_var, self.ch9350_state_var) + for action in self.protocol_menu.actions(): + action.setChecked(action.text() == target) + # Apply mouse cursor state if needed if hasattr(self, "video_view"): if self.hide_mouse_var: @@ -689,6 +722,8 @@ def _save_settings(self): "verbose": str(self.verbose_var), "hide_mouse": str(self.hide_mouse_var), "keyboard_layout": str(self.keyboard_layout_var), + "protocol": self.protocol_var, + "ch9350_state": str(self.ch9350_state_var), } settings_util.save_settings(self.CONFIG_FILE, "KVM", settings_dict) logging.info("Settings saved to INI file.") @@ -814,6 +849,58 @@ def _populate_keyboard_layouts(self): if layout == self.keyboard_layout_var: action.setChecked(True) + # The full set of options the Protocol submenu offers. Each entry is + # (label, protocol, ch9350_state). State is unused for CH9329 but kept + # here for menu uniformity. + _PROTOCOL_OPTIONS = [ + ("CH9329", "ch9329", 0), + ("CH9350L (state 0/1, paired)", "ch9350", 0), + ("CH9350L (state 2, BIOS)", "ch9350", 2), + ("CH9350L (state 3, abs mouse)", "ch9350", 3), + ("CH9350L (state 4, Digitizers)", "ch9350", 4), + ] + + def _protocol_label(self, protocol: str, state: int) -> str: + """Return the menu label corresponding to (protocol, state).""" + for label, p, s in self._PROTOCOL_OPTIONS: + if p == protocol and (p == "ch9329" or s == state): + return label + return self._PROTOCOL_OPTIONS[0][0] # fall back to CH9329 + + def _populate_protocol_menu(self): + """ + Populate the Protocol submenu with checkable items for CH9329 and + the four CH9350L working modes. + """ + if self.protocol_menu is None: + raise TypeError("Initialise protocol_menu before calling _populate_protocol_menu()") + + self.protocol_menu.clear() + current = self._protocol_label(self.protocol_var, self.ch9350_state_var) + for label, protocol, state in self._PROTOCOL_OPTIONS: + action = QAction(label, self) + action.setCheckable(True) + action.triggered.connect( + lambda checked, p=protocol, s=state: self._on_protocol_selected(p, s) + ) + self.protocol_menu.addAction(action) + if label == current: + action.setChecked(True) + + def _on_protocol_selected(self, protocol: str, state: int): + """Handle selection of a protocol/state from the Protocol submenu.""" + if self.protocol_menu is None: + raise TypeError("Initialise protocol_menu before calling _on_protocol_selected()") + + target_label = self._protocol_label(protocol, state) + for action in self.protocol_menu.actions(): + action.setChecked(action.text() == target_label) + + self.protocol_var = protocol + self.ch9350_state_var = state + logging.info(f"Selected protocol: {target_label}") + self.__init_serial() + def _on_keyboard_layout_selected(self, layout): """ Handle selection of a keyboard layout. @@ -831,11 +918,41 @@ def _on_keyboard_layout_selected(self, layout): logging.info(f"Selected keyboard layout: {layout}") self.__init_serial() + def _build_comm_cls(self): + """ + Resolve the active protocol/state into a DataComm-producing callable + for DataCommManager to instantiate. CH9329Comm is callable directly; + CH9350Comm needs the chosen state bound via a lambda. + """ + if self.protocol_var == "ch9350": + from kvm_serial.utils.ch9350 import CH9350Comm + + state = self.ch9350_state_var + return lambda port: CH9350Comm(port, state=state) + + from kvm_serial.utils.ch9329 import CH9329Comm + + return CH9329Comm + + def _stop_comm_manager(self): + """Stop and discard the active DataCommManager, if any.""" + from kvm_serial.backend.manager import DataCommManager + + if self.comm_manager is not None: + try: + self.comm_manager.stop() # type: ignore[attr-defined] + except Exception as e: + logging.error(f"Error stopping DataCommManager: {e}") + self.comm_manager = None + DataCommManager.reset() + def __init_serial(self): """ - Initialise or reinitialise serial port and keyboard/mouse operations. + Initialise or reinitialise serial port, DataCommManager, and the + keyboard/mouse operations bound to the shared comm. """ - # Close existing serial connection if open + # Stop the active manager (if any) before closing the underlying port. + self._stop_comm_manager() self._close_serial_port() # Clear existing operations @@ -856,6 +973,20 @@ def __init_serial(self): f"Opened serial port {self.serial_port_var} at {self.baud_rate_var} baud" ) + # Construct the DataCommManager for this port. Ops fetch the + # shared comm via DataCommManager.get(); the manager owns + # comm lifecycle (start/stop) so individual ops don't. + from kvm_serial.backend.manager import DataCommManager + + self.comm_manager = DataCommManager( + self.serial_port, comm_cls=self._build_comm_cls() + ) + self.comm_manager.start() + logging.info( + f"DataCommManager started: protocol={self.protocol_var}" + + (f" (state {self.ch9350_state_var})" if self.protocol_var == "ch9350" else "") + ) + # Initialise keyboard and mouse operations self.keyboard_op = QtOp(self.serial_port, layout=self.keyboard_layout_var) self.mouse_op = MouseOp(self.serial_port) @@ -867,6 +998,7 @@ def __init_serial(self): self, "Serial Error", f"Failed to open serial port {self.serial_port_var}:\n{e}" ) # Reset to None if initialisation failed + self._stop_comm_manager() self.serial_port = None self.keyboard_op = None self.mouse_op = None @@ -1670,6 +1802,10 @@ def closeEvent(self, event): logging.debug(f"Error stopping QCamera on close: {e}") self.qcamera = None + # Stop the DataCommManager (background threads, descriptor handshake + # for CH9350 state 0/1) before closing the underlying port. + self._stop_comm_manager() + # Close serial port if open self._close_serial_port() diff --git a/tests/kvm/test_kvm_settings_persistence.py b/tests/kvm/test_kvm_settings_persistence.py index 33a6769..9749149 100644 --- a/tests/kvm/test_kvm_settings_persistence.py +++ b/tests/kvm/test_kvm_settings_persistence.py @@ -171,6 +171,8 @@ def test_save_settings_success(self): "verbose": "True", "hide_mouse": "True", "keyboard_layout": "en_GB", + "protocol": "ch9329", + "ch9350_state": "2", } with ( @@ -426,12 +428,86 @@ def _setup_mock_menus(self, app): app.baud_rate_menu = MagicMock() app.video_device_menu = MagicMock() app.keyboard_layout_menu = MagicMock() + app.protocol_menu = MagicMock() # Default empty actions app.serial_port_menu.actions.return_value = [] app.baud_rate_menu.actions.return_value = [] app.video_device_menu.actions.return_value = [] app.keyboard_layout_menu.actions.return_value = [] + app.protocol_menu.actions.return_value = [] + + def test_build_comm_cls_default_is_ch9329(self): + """_build_comm_cls returns CH9329Comm when protocol_var is 'ch9329'.""" + from kvm_serial.utils.ch9329 import CH9329Comm + + app = self.create_kvm_app() + app.protocol_var = "ch9329" + assert app._build_comm_cls() is CH9329Comm + + def test_build_comm_cls_ch9350_binds_state(self): + """_build_comm_cls returns a callable that constructs CH9350Comm + with the chosen state.""" + from kvm_serial.utils.ch9350 import CH9350Comm + from tests._utilities import MockSerial + + app = self.create_kvm_app() + app.protocol_var = "ch9350" + app.ch9350_state_var = 3 + + cls = app._build_comm_cls() + comm = cls(MockSerial()) + assert isinstance(comm, CH9350Comm) + assert comm.state == 3 + + def test_load_protocol_default_is_ch9329(self): + """Settings without a protocol entry default to CH9329.""" + app = self.create_kvm_app() + app.baud_rates = self.get_default_baud_rates() + self._setup_mock_menus(app) + + settings = self.create_test_settings({}) + + with ( + patch("kvm_serial.kvm.settings_util.load_settings", return_value=settings), + self.patch_kvm_method(app, "_KVMQtGui__init_serial"), + ): + app._load_settings("test_config.ini") + + self.assertEqual(app.protocol_var, "ch9329") + + def test_load_protocol_ch9350_state(self): + """Saved CH9350 protocol with state restores both fields.""" + app = self.create_kvm_app() + app.baud_rates = self.get_default_baud_rates() + self._setup_mock_menus(app) + + settings = self.create_test_settings({"protocol": "ch9350", "ch9350_state": "3"}) + + with ( + patch("kvm_serial.kvm.settings_util.load_settings", return_value=settings), + self.patch_kvm_method(app, "_KVMQtGui__init_serial"), + ): + app._load_settings("test_config.ini") + + self.assertEqual(app.protocol_var, "ch9350") + self.assertEqual(app.ch9350_state_var, 3) + + def test_load_protocol_invalid_state_falls_back(self): + """An out-of-range ch9350_state falls back to CH9329 with a warning.""" + app = self.create_kvm_app() + app.baud_rates = self.get_default_baud_rates() + self._setup_mock_menus(app) + + settings = self.create_test_settings({"protocol": "ch9350", "ch9350_state": "99"}) + + with ( + patch("kvm_serial.kvm.settings_util.load_settings", return_value=settings), + self.patch_kvm_method(app, "_KVMQtGui__init_serial"), + ): + app._load_settings("test_config.ini") + + self.assertEqual(app.protocol_var, "ch9329") def test_load_keyboard_layout_from_settings(self): """Test loading keyboard layout from saved settings.""" From 7565913679e63eca98a16d201ff8acb01cdf6c27 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 20:45:18 +0100 Subject: [PATCH 22/45] Add protocol documentation for ch9329 for parity Co-authored-by: Copilot --- docs/CH9329_PROTO.md | 217 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 docs/CH9329_PROTO.md diff --git a/docs/CH9329_PROTO.md b/docs/CH9329_PROTO.md new file mode 100644 index 0000000..e71e368 --- /dev/null +++ b/docs/CH9329_PROTO.md @@ -0,0 +1,217 @@ +# CH9329 UART Protocol Specification + +> **Manufacturer datasheet:** WCH CH9329 V1.1 — [wch.cn](http://wch.cn). Pin and electrical +> parameter references in this document refer to that datasheet. +> +> **Reference implementation:** `kvm_serial/utils/ch9329.py` — originally derived from +> [beijixiaohu/CH9329_COMM](https://github.com/beijixiaohu/CH9329_COMM/). + +--- + +## Overview + +The CH9329 is a UART-to-USB-HID bridge chip. It presents itself on the target PC as a composite +USB device (keyboard + mouse + optional custom HID) and receives framed commands over a TTL +UART from the host controller — kvm-serial in this case. The protocol is entirely +**host-driven**: the host sends command frames and the chip executes them. There is no +handshake, no descriptor exchange, and no state machine to track. + +kvm-serial uses Serial Communication **Mode 0** (Protocol Transmission mode, the default), which +requires all data to be sent as framed packets per the format below. + +--- + +## Physical Layer + +| Parameter | Value | +|-----------|-------| +| Baud rate | 9600 bps (default; configurable) | +| Data bits | 8 | +| Parity | None | +| Stop bits | 1 | +| Logic level | 3.3 V or 5 V TTL | + +Supported baud rates: 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200. +Note: 115200 bps is not supported when the chip operates at 3.3 V. + +--- + +## Frame Structure + +Every command is a single self-contained packet with the following layout: + +``` +[HEAD_HI] [HEAD_LO] [ADDR] [CMD] [LEN] [DATA...] [SUM] + 0x57 0xAB 1B 1B 1B LEN bytes 1B +``` + +| Field | Size | Description | +|-------|------|-------------| +| `HEAD` | 2B | Fixed magic header `0x57 0xAB` | +| `ADDR` | 1B | Device address — `0x00` by default; non-zero when multiple CH9329 chips share one UART bus | +| `CMD` | 1B | Command type — selects keyboard, absolute mouse, or relative mouse | +| `LEN` | 1B | Number of data bytes that follow (0–255) | +| `DATA` | LEN bytes | Payload — format is CMD-specific, described below | +| `SUM` | 1B | Checksum: `(sum(HEAD) + ADDR + CMD + LEN + sum(DATA)) mod 256` | + +Maximum `LEN` is 255; a payload of 256 or more bytes causes an `OverflowError` in the +`len.to_bytes(1)` call before the packet is even sent. + +### Checksum Worked Example + +Keyboard frame for 'a' (`scancode = 0x04`): + +``` +57 AB 00 02 08 00 00 04 00 00 00 00 00 10 +``` + +- Header sum: `0x57 + 0xAB = 0x102`; modular carry is included in the final mod-256 step. +- `SUM = (0x57 + 0xAB + 0x00 + 0x02 + 0x08 + 0x00 + 0x00 + 0x04 + 0x00×5) mod 256` +- `= (0x102 + 0x0A + 0x04) mod 256 = 0x110 mod 256 = 0x10` ✓ + +--- + +## Commands + +### Keyboard — CMD `0x02` + +Sends an 8-byte USB HID boot-protocol keyboard report directly to the chip. + +``` +57 AB [ADDR] 02 08 [mod] [rsvd] [k0] [k1] [k2] [k3] [k4] [k5] [SUM] +``` + +| Field | Size | Description | +|-------|------|-------------| +| `LEN` | `0x08` | Fixed — boot keyboard report is always 8 bytes | +| `mod` | 1B | Modifier bitmask (see below) | +| `rsvd` | 1B | Reserved — always `0x00` | +| `k0..k5` | 6B | USB HID usage IDs of currently held keys; zero-padded | + +**Modifier byte bitmask:** + +| Bit | Modifier | +|-----|----------| +| 0 | Left Ctrl | +| 1 | Left Shift | +| 2 | Left Alt | +| 3 | Left GUI / Win | +| 4 | Right Ctrl | +| 5 | Right Shift | +| 6 | Right Alt | +| 7 | Right GUI / Win | + +Sending `00 00 00 00 00 00 00 00` releases all keys (the `release()` call). + +### Absolute Mouse — CMD `0x04` + +``` +57 AB [ADDR] 04 07 02 [btn] [XL] [XH] [YL] [YH] [wheel] [SUM] +``` + +| Field | Value | Description | +|-------|-------|-------------| +| `LEN` | `0x07` | Fixed payload length | +| marker | `0x02` | Absolute-coordinate mode indicator | +| `btn` | 1B | Button bitmask — bit 0 = left, bit 1 = right, bit 2 = middle | +| `XL`/`XH` | 2B LE | X coordinate in the chip's 12-bit absolute space (0–4095) | +| `YL`/`YH` | 2B LE | Y coordinate in the chip's 12-bit absolute space (0–4095) | +| `wheel` | 1B signed | Scroll wheel delta, encoded as a signed byte (see §Signed Byte Encoding) | + +**Coordinate scaling.** Source pixel coordinates are scaled into the chip's 12-bit space: + +$$dx = \left\lfloor \frac{4096 \times x}{\max(1,\, width)} \right\rfloor$$ + +Negative coordinates (e.g. from multi-monitor setups where a pointer can be off-screen left/above +the primary display) wrap via `abs(4096 + dx)` rather than clamping, so motion remains continuous +across monitor boundaries. + +### Relative Mouse — CMD `0x05` + +``` +57 AB [ADDR] 05 05 01 [btn] [dx] [dy] [wheel] [SUM] +``` + +| Field | Value | Description | +|-------|-------|-------------| +| `LEN` | `0x05` | Fixed payload length | +| marker | `0x01` | Relative-coordinate mode indicator | +| `btn` | 1B | Button bitmask — same encoding as absolute mouse | +| `dx` | 1B signed | Horizontal delta (−127..+127) | +| `dy` | 1B signed | Vertical delta (−127..+127) | +| `wheel` | 1B signed | Scroll wheel delta (−127..+127) | + +Out-of-range deltas are **clamped** (not wrapped) to the signed-byte limits. + +--- + +## Signed Byte Encoding + +All signed single-byte fields (`dx`, `dy`, `wheel`) use standard two's-complement encoding, +clamped to −127..+127 (not the full −128..+127 — the implementation deliberately excludes −128 +to keep encoding unambiguous). Python's `int.to_bytes(1, signed=True)` encodes this directly. + +| Decimal | Hex | +|---------|-----| +| +127 | `0x7F` | +| +1 | `0x01` | +| 0 | `0x00` | +| −1 | `0xFF` | +| −127 | `0x81` | + +--- + +## Multi-Chip Addressing + +The `ADDR` byte allows multiple CH9329 chips to share a single UART bus. Each chip can be +configured with a non-zero address; a frame is only acted on by the chip whose address matches. +`0x00` is the factory default and the value used by kvm-serial in all frames. + +> **Note:** Multi-chip addressing on the same serial bus is not available in kvm-serial. Users +> requiring multiple device control can use multiple serial devices to interface to multiple chips. + +--- + +## Operating Mode and Communication Mode + +The chip's mode is set at hardware level via the `MODE0`/`MODE1` and `CFG0`/`CFG1` input pins +(pulled high by default → Mode 0 / Communication Mode 0). + +| MODE1 | MODE0 | Operating Mode | USB Device Identity | +|-------|-------|---------------|---------------------| +| 1 | 1 | **0 (default)** | Composite: keyboard + mouse + custom HID | +| 1 | 0 | 1 | Keyboard only (no multimedia keys) | +| 0 | 1 | 2 | Keyboard + mouse (no custom HID) — recommended for Linux/macOS | +| 0 | 0 | 3 | Custom HID only (raw data passthrough) | + +kvm-serial uses **Mode 0** (both pins high / floating). All three HID functions — keyboard, +absolute mouse, and relative mouse — are available simultaneously in this mode. + +| CFG1 | CFG0 | Serial Communication Mode | +|------|------|--------------------------| +| 1 | 1 | **0 (default)** — Protocol Transmission (framed packets) | +| 1 | 0 | 1 — ASCII mode (printable characters only) | +| 0 | 1 | 2 — Transparent mode (raw 8-byte keyboard data) | + +kvm-serial requires **Communication Mode 0**. ASCII and transparent modes are outside the scope +of this document. + +--- + +## No Handshake Required + +Unlike the CH9350L (which needs a descriptor handshake before forwarding input), the CH9329 +acts on command frames immediately after USB enumeration completes. There are no startup frames +the host must send, no keep-alive to maintain, and no state machine to track. The chip's +`ACT#` output pin goes low once USB enumeration has succeeded, but kvm-serial does not monitor +this pin — it simply begins sending frames when the serial port is opened. + +--- + +## Summary of Command Bytes + +| CMD | Description | `LEN` | Payload | +|-----|-------------|-------|---------| +| `0x02` | Keyboard | `0x08` | `mod rsvd k0 k1 k2 k3 k4 k5` | +| `0x04` | Absolute mouse | `0x07` | `0x02 btn XL XH YL YH wheel` | +| `0x05` | Relative mouse | `0x05` | `0x01 btn dx dy wheel` | From cefed15cbd21a82f277af96ad5376e296d31856d Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 20:59:13 +0100 Subject: [PATCH 23/45] Update references to specific chip to generalise across both supported families --- kvm_serial/control.py | 8 ++++---- kvm_serial/kvm.py | 3 ++- pyproject.toml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index a821f78..7948d05 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# CH9329 keyboard controller +# Serial KVM controller for USB HID Serial Bridges (CH9329, CH9350L) import signal import sys import argparse @@ -102,9 +102,9 @@ def parse_args(): # Parse arguments using argparse module. Example call: # python control.py /dev/cu.usbserial --verbose --mode usb parser = argparse.ArgumentParser( - prog="CH9329 Control Script", - description="Use a serial terminal as a USB keyboard!", - epilog="(c) 2023 Samantha Finnigan. MIT License", + prog="Serial KVM Control Script", + description="Use a serial terminal as a USB keyboard and mouse!", + epilog="(c) 2023-25 Samantha Finnigan and contributors. MIT License", ) parser.add_argument("-v", "--verbose", action="store_true") diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index b2f7965..eb892d5 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -124,7 +124,8 @@ class KVMQtGui(QMainWindow): """ Main GUI class for the Serial KVM application (Qt version). - A graphical user interface (GUI) for controlling a CH9329-based software KVM (Keyboard, Video, Mouse) switch. + A graphical user interface (GUI) for controlling software KVM (Keyboard, Video, Mouse) switches + using CH9329 or CH9350L UART-to-USB-HID bridge chips. Provides a PyQt5-based interface for configuring and controlling serial, video, keyboard, and mouse devices. Handles device selection, status display, event processing, and persistent diff --git a/pyproject.toml b/pyproject.toml index c598101..96e3902 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta" name = "kvm-serial" version = "1.5.5" authors = [{ name="Samantha Finnigan", email="1038320+sjmf@users.noreply.github.com" }] -description = "Python package for interfacing with CH9329 KVM devices" +description = "Python package for controlling remote computers using UART-to-USB-HID bridge chips" readme = "README.md" requires-python = ">=3.10" From d6f940afc25e0220f476c860ff8d1b5e486a26d0 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 21:28:27 +0100 Subject: [PATCH 24/45] (docs) Generate documentation homepage from a script instead of redundant copy in repo (towards #6) - Introduced `generate_docs_index.py` to create the documentation homepage from README. - Updated `.gitignore` to exclude generated `docs/index.md`. - Modified `mkdocs.yml` to include a new navigation item for supported devices. - Removed old `docs/index.md` file as it will now be generated dynamically. --- .github/workflows/docs.yml | 3 + .gitignore | 1 + docs/index.md | 161 --------------------------------- mkdocs.yml | 1 + scripts/generate_docs_index.py | 32 +++++++ 5 files changed, 37 insertions(+), 161 deletions(-) delete mode 100644 docs/index.md create mode 100644 scripts/generate_docs_index.py diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 41ace49..5e223de 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,5 +28,8 @@ jobs: - name: Install MkDocs and Material theme run: pip install mkdocs-material + - name: Generate docs homepage from README + run: python scripts/generate_docs_index.py + - name: Deploy to GitHub Pages run: mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore index cbf3359..8d14111 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ uv.lock # MkDocs build output site/ +docs/index.md # Icon generation intermediate files assets/icon.iconset/ diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 85dd24a..0000000 --- a/docs/index.md +++ /dev/null @@ -1,161 +0,0 @@ -# Serial KVM Controller (CH9329) - -[![PyPI](https://img.shields.io/pypi/v/kvm-serial)](https://pypi.org/project/kvm-serial/) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/sjmf/kvm-serial/blob/main/LICENSE.md) -[![Black](https://img.shields.io/badge/code%20style-black-black)](https://github.com/sjmf/kvm-serial/actions/workflows/lint.yml) -[![Run Tests](https://img.shields.io/github/actions/workflow/status/sjmf/kvm-serial/test.yml?label=Unit%20Tests)](https://github.com/sjmf/kvm-serial/actions/workflows/test.yml) -[![codecov](https://img.shields.io/codecov/c/gh/sjmf/kvm-serial)](https://codecov.io/gh/sjmf/kvm-serial) - -A Software KVM, using the CH9329 UART Serial to USB HID controller. - -Control your computers using an emulated keyboard and mouse! - -This app and python module allows you to control to a second device using a CH9329 module (or cable) -and a video capture device. You can find these from vendors on eBay and AliExpress for a low price. -However, there is very little software support available for these modules, and CH9329 -protocol documentation is sparse. - -This software captures keyboard and mouse inputs from the local computer, sending these over a -serial UART connection to the CH9329 USB HID module, which will output USB HID mouse and keyboard -movements and scan codes to the remote computer. - -The `kvm_serial` package provides options for running the GUI, or as a script providing flexible options. - - App icon - -
- -__[Download the latest release](https://github.com/sjmf/kvm-serial/releases/latest/)__ for Windows, Mac or Linux. - -*See [Installation](INSTALLATION.md) for information on installing serial drivers, if required.* - - -## GUI Usage - -Run the GUI using the [executable for your platform](https://github.com/sjmf/kvm-serial/releases/latest/), or with Python using `python -m kvm_serial`. - -![KVM Window](https://wp.finnigan.dev/wp-content/uploads/2025/09/output-4.gif) -*The Serial KVM window running on OSX, controlling a Windows remote machine* - -The module can be [installed from PyPI](https://pypi.org/project/kvm-serial/) (`pip install kvm-serial`), -or locally from a cloned git repo (`pip install -e .`). - -The GUI app will do a lot of the work for you: it will enumerate video devices and serial ports, -and give you a window to interact with the guest in. Application settings can be changed from the -menus (File, Options, View), for example if the app doesn't select the correct devices by default. - -## Kit List - -This module requires a little bit of hardware to get going. You will need: - -* CH9329 module or cable -* Video capture card (e.g. HDMI) - -You can likely get everything you need for under £30, which is incredible when compared to the -price of a KVM crash cart adapter. - -### CH9329 module/cable assembled as cables - -_PLEASE NOTE: I am a hobbyist. I have no affiliation with any manufacturer developing or selling CH9329 hardware._ - -[![Home-made serial KVM module](https://wp.finnigan.dev/wp-content/uploads/2023/11/mini-uart.jpg)](https://wp.finnigan.dev/?p=682) -*A home-made serial KVM module: CH9329 module soldered to SILabs CP2102. CH340 works, too.* - -So, I don't have a specific vendor to recommend, but if you put "*CH9329 cable usb*" into a search -engine, you will find the right thing. Just make sure what you buy has "CH9329" in the name: a USB-A -to USB-A cable won't do, and can damage your machine. - -The modules have a USB-A male connector on one end, and serial connector on the other. The cables -have USB-A both ends, as they are already put together and should pretty much be plug-and-play: just -make sure it's the right way around. I just soldered a CH9329 module to a UART transceiver chip -myself, as above. - -### Video capture card - -You also need a capture card that takes the display output from your remote machine, and presents it -as a USB device to your local system. I found the "*UGREEN Video Capture Card HDMI to USB C Capture -Device*" was a good balance of price versus value. The more you spend on a capture device, the more -responsive your video feed will likely be (to a point). HDMI and VGA hardware is available. - -## Installing Python Dependencies - -_Note:_ These instructions are not required if using the executables, but you may need to do some other setup. See [Installation](INSTALLATION.md) for information on installing serial drivers. - -**Standard installation** (running the application from `pip`): - -```bash -# OPTIONAL: Create and activate a Virtual environment -python -m venv ./.venv -./.venv/scripts/activate - -# Install the module from PyPI and run the GUI -pip install kvm-serial -python -m kvm-serial -``` - -OR using [`uv` package manager](https://docs.astral.sh/uv) (a faster alternative to pip, if available): -*Note: `uv run` may not work on Windows. See [#15](https://github.com/sjmf/kvm-serial/issues/15).* - -```bash -uv run kvm-gui -``` - -**Install from source** (for development- includes PyInstaller for building executables, pytest for testing, etc.): - -```bash -pip install -e ".[dev]" -``` - -## Script Usage - -A script called `control.py` is also provided for use directly from the terminal, so you can also control remotes from a headless environment! (e.g. Pi to Pi!) - -Packages must be installed first. Use your preferred python package manager. E.g.: - - - -Usage examples for the `control.py` script: - -```bash -# Run using module -python -m kvm_serial.control - -# Run using `uv` -uv run kvm-control - -# Run with mouse and video support; use a Mac OSX serial port: -python -m kvm_serial.control -ex /dev/cu.usbserial-A6023LNH - -# Run the script using keyboard 'tty' mode (no mouse, no video) -python control.py --mode tty /dev/tty.usbserial0 - -# Run using `pyusb` keyboard mode (which requires root): -sudo python control.py --mode usb /dev/tty.usbserial0 - -# Increase logging using --verbose (or -v), and use COM1 serial port (Windows) -python control.py --verbose COM1 -``` - -Use `python control.py --help` to view all available options. Keyboard capture and transmission is the default functionality of control.py: a couple of extra parameters are used to enable mouse and video. For most purposes, the default capture mode will suffice. - -Mouse capture is provided using the parameter `--mouse` (`-e`). It uses pynput for capturing mouse input and transmits this over the serial link simultaneously to keyboard input. Appropriate system permissions (Privacy and Security) may be required to use mouse capture. - -Video capture is provided using the parameter `--video` (`-x`). It uses OpenCV for capturing frames from the camera device. Again, system permissions for webcam access may need to be granted. - -See [Keyboard Modes](MODES.md) for more information on the various other options to the script. -Implementations are provided for all the main python input capture methods. - -## Troubleshooting - -**Permissions errors on Linux**: -if your system user does not have serial write permissions (resulting in a permission error), you can add your user to the `dialout` group: e.g. `sudo usermod -a -G dialout $USER`. You must fully log out of the system to apply the change. - -**Difficulty installing requirements**: If you get `command not found: pip` or similar when installing requirements, try: `python -m pip [...]` to run pip instead. - -## Acknowledgements -With thanks to [@beijixiaohu](https://github.com/beijixiaohu), the author of the [ch9329Comm PyPi package](https://pypi.org/project/ch9329Comm/) and [GitHub repo](https://github.com/beijixiaohu/CH9329_COMM/) (in Chinese), some code of which is re-used under the MIT License. - -Thank you, once again, to everyone who has [contributed](CONTRIBUTING.md) to this project. - -## License -(c) 2023-25 Samantha Finnigan and contributors (except where acknowledged) and released under [MIT License](https://github.com/sjmf/kvm-serial/blob/main/LICENSE.md). diff --git a/mkdocs.yml b/mkdocs.yml index 85e999b..26e585f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,6 +24,7 @@ theme: nav: - Home: index.md - Installation: INSTALLATION.md + - Supported Devices: SUPPORTED_DEVICES.md - Keyboard Modes: MODES.md - Building: BUILD.md - Testing: TESTING.md diff --git a/scripts/generate_docs_index.py b/scripts/generate_docs_index.py new file mode 100644 index 0000000..0350b00 --- /dev/null +++ b/scripts/generate_docs_index.py @@ -0,0 +1,32 @@ +from pathlib import Path +import re + +ROOT = Path(__file__).resolve().parents[1] +README = ROOT / "README.md" +DOCS_INDEX = ROOT / "docs" / "index.md" +URL = "https://github.com/sjmf/kvm-serial" + + +def main() -> None: + content = README.read_text(encoding="utf-8") + + # Strip docs/ prefix from all markdown link paths: (docs/X) -> (X) + content = re.sub(r"\(docs/([^\)]+)\)", r"(\1)", content) + # Also handle ./docs/ paths: (./docs/X) -> (X) + content = re.sub(r"\(\./docs/([^\)]+)\)", r"(\1)", content) + + # External root-level docs need GitHub URLs + content = content.replace("(LICENSE.md)", f"({URL}/blob/main/LICENSE.md)") + content = content.replace("(CONTRIBUTING.md)", f"({URL}/blob/main/CONTRIBUTING.md)") + + # Asset URLs need to be absolute for docs site + content = content.replace( + 'src="assets/icon.png"', + 'src="https://raw.githubusercontent.com/sjmf/kvm-serial/main/assets/icon.png"', + ) + + DOCS_INDEX.write_text(content, encoding="utf-8") + + +if __name__ == "__main__": + main() From 4b49abdc930097bfdb3bd8b972fd131372a19466 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 21:32:18 +0100 Subject: [PATCH 25/45] (docs) Update README and add SUPPORTED_DEVICES documentation for CH9350L support (towards #13) --- README.md | 54 +++++++++++++++++++++++---------------- docs/SUPPORTED_DEVICES.md | 34 ++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 22 deletions(-) create mode 100644 docs/SUPPORTED_DEVICES.md diff --git a/README.md b/README.md index 14a6dae..e95fb40 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serial KVM Controller (CH9329) +# Serial KVM Controller (CH9329 and CH9350L) [![PyPI](https://img.shields.io/pypi/v/kvm-serial)](https://pypi.org/project/kvm-serial/) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md) @@ -6,17 +6,17 @@ [![Run Tests](https://img.shields.io/github/actions/workflow/status/sjmf/kvm-serial/test.yml?label=Unit%20Tests)](https://github.com/sjmf/kvm-serial/actions/workflows/test.yml) [![codecov](https://img.shields.io/codecov/c/gh/sjmf/kvm-serial)](https://codecov.io/gh/sjmf/kvm-serial) -A Software KVM, using the CH9329 UART Serial to USB HID controller. +A Software KVM for UART-to-USB-HID bridge chips (CH9329 and CH9350L). Control your computers using an emulated keyboard and mouse! -This app and python module allows you to control to a second device using a CH9329 module (or cable) -and a video capture device. You can find these from vendors on eBay and AliExpress for a low price. -However, there is very little software support available for these modules, and CH9329 -protocol documentation is sparse. +This app and python module allows you to control a second device using a UART-to-USB-HID bridge chip +(CH9329 or CH9350L) and a video capture device. You can find these from vendors on eBay and AliExpress +for a low price. However, there is very little software support available for these modules, and protocol +documentation is sparse. This software captures keyboard and mouse inputs from the local computer, sending these over a -serial UART connection to the CH9329 USB HID module, which will output USB HID mouse and keyboard +serial UART connection to the bridge chip, which will output USB HID mouse and keyboard movements and scan codes to the remote computer. The `kvm_serial` package provides options for running the GUI, or as a script providing flexible options. @@ -44,36 +44,40 @@ The GUI app will do a lot of the work for you: it will enumerate video devices a and give you a window to interact with the guest in. Application settings can be changed from the menus (File, Options, View), for example if the app doesn't select the correct devices by default. +kvm-serial supports both CH9329 and CH9350L bridge hardware. See [SUPPORTED_DEVICES.md](docs/SUPPORTED_DEVICES.md) for the protocol and hardware differences. + ## Kit List This module requires a little bit of hardware to get going. You will need: -* CH9329 module or cable +* A UART-to-USB-HID bridge chip (CH9329 or CH9350L) — optionally with an assembled cable or module * Video capture card (e.g. HDMI) You can likely get everything you need for under £30, which is incredible when compared to the price of a KVM crash cart adapter. -### CH9329 module/cable assembled as cables +### Bridge Module/Cable -_PLEASE NOTE: I am a hobbyist. I have no affiliation with any manufacturer developing or selling CH9329 hardware._ +_PLEASE NOTE: I am a hobbyist. I have no affiliation with any manufacturer developing or selling bridge hardware._ [![Home-made serial KVM module](https://wp.finnigan.dev/wp-content/uploads/2023/11/mini-uart.jpg)](https://wp.finnigan.dev/?p=682) *A home-made serial KVM module: CH9329 module soldered to SILabs CP2102. CH340 works, too.* -So, I don't have a specific vendor to recommend, but if you put "*CH9329 cable usb*" into a search -engine, you will find the right thing. Just make sure what you buy has "CH9329" in the name: a USB-A -to USB-A cable won't do, and can damage your machine. +Pre-assembled cables and modules are available from eBay and AliExpress: + +- **CH9329 cables:** Search for "*CH9329 cable usb*". Just make sure it has "CH9329" in the name: + a USB-A to USB-A cable won't do and can damage your machine. The modules have a USB-A male + connector on one end and a serial connector on the other. Cables have USB-A both ends and should + be pretty much plug-and-play — just make sure it's the right way around. +- **CH9350L modules:** Less common than CH9329 but available; typically come as breakout boards + with serial connector and dipswitches. -The modules have a USB-A male connector on one end, and serial connector on the other. The cables -have USB-A both ends, as they are already put together and should pretty much be plug-and-play: just -make sure it's the right way around. I just soldered a CH9329 module to a UART transceiver chip -myself, as above. +You can also build your own by soldering a bridge chip to a UART transceiver chip (e.g. SILabs CP2102 or CH340). -### Video capture card +### Video Capture Card -You also need a capture card that takes the display output from your remote machine, and presents it -as a USB device to your local system. I found the "*UGREEN Video Capture Card HDMI to USB C Capture +You also need a capture card that takes the display output from your remote machine and presents it +as a USB device to your local system. The "*UGREEN Video Capture Card HDMI to USB C Capture Device*" was a good balance of price versus value. The more you spend on a capture device, the more responsive your video feed will likely be (to a point). HDMI and VGA hardware is available. @@ -134,15 +138,21 @@ sudo python control.py --mode usb /dev/tty.usbserial0 # Increase logging using --verbose (or -v), and use COM1 serial port (Windows) python control.py --verbose COM1 + +# Use CH9350L in state 2 (default BIOS keyboard + relative mouse) +python control.py --ch9350 /dev/cu.usbserial-XXXX + +# Use CH9350L in state 0 (full descriptor handshake) +python control.py --ch9350 --ch9350-state 0 /dev/cu.usbserial-XXXX ``` -Use `python control.py --help` to view all available options. Keyboard capture and transmission is the default functionality of control.py: a couple of extra parameters are used to enable mouse and video. For most purposes, the default capture mode will suffice. +Use `python control.py --help` to view all available options. Keyboard capture and transmission is the default functionality of control.py: a couple of extra parameters are used to enable mouse and video. For most purposes, the default capture mode will suffice. By default, the CH9329 protocol is used; pass `--ch9350` to switch to CH9350L protocol. Mouse capture is provided using the parameter `--mouse` (`-e`). It uses pynput for capturing mouse input and transmits this over the serial link simultaneously to keyboard input. Appropriate system permissions (Privacy and Security) may be required to use mouse capture. Video capture is provided using the parameter `--video` (`-x`). It uses OpenCV for capturing frames from the camera device. Again, system permissions for webcam access may need to be granted. -See [MODES.md](./docs/MODES.MD) for more information on the various other options to the script. +See [MODES.md](docs/MODES.md) for more information on the various other options to the script. Implementations are provided for all the main python input capture methods. ## Troubleshooting diff --git a/docs/SUPPORTED_DEVICES.md b/docs/SUPPORTED_DEVICES.md new file mode 100644 index 0000000..f89e50f --- /dev/null +++ b/docs/SUPPORTED_DEVICES.md @@ -0,0 +1,34 @@ +# Supported Devices + +kvm-serial supports two UART-to-USB-HID bridge chip families. + +## CH9329 + +The CH9329 is a command-driven chip where the host sends HID reports over UART and the chip translates them into USB HID input on the target machine. + +- Simple command-style protocol +- 4095x4095 12-bit absolute mouse coordinate space +- Relative mouse support +- Keyboard boot protocol + +Protocol reference: [CH9329 Protocol](CH9329_PROTO.md) + +## CH9350L + +The CH9350L is a paired-chip extender. kvm-serial replaces the lower computer (LC) side in software and drives an upper computer (UC) module that presents USB HID to the target machine. + +- Four working states selected via UC dipswitches +- State 0/1: full HID descriptor passthrough with pairing handshake +- State 2: BIOS keyboard + relative mouse for legacy BIOS / UEFI CSM +- State 3: BIOS keyboard + absolute mouse for modern OS use +- State 4: BIOS keyboard + absolute mouse + HID Digitizers for multi-monitor setups +- 65535x65535 16-bit absolute mouse coordinate space in states 3/4 +- Heartbeat and keep-alive synchronization + +Protocol reference: [CH9350L Protocol](CH9350L_PROTO.md) + +## Hardware Notes + +- CH9329 hardware is commonly sold as pre-assembled cables or small modules. +- CH9350L hardware is more commonly sold as breakout boards with dipswitches. +- Both families are typically used with a USB-to-UART adapter such as CP2102, CH340, FTDI, or similar. \ No newline at end of file From e48e09a80f63602a5cb18c1863abdd1c644dfdef Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 22:03:25 +0100 Subject: [PATCH 26/45] Change run as module vs run as script import strategy Add project root to sys.path for local imports when kvm.py or control.py are run as scripts (__name__ == "__main__") Co-authored-by: Copilot --- kvm_serial/control.py | 12 +++++------- kvm_serial/kvm.py | 31 ++++++++++++++----------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index 7948d05..e1f9e45 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -7,15 +7,13 @@ import platform # Allow running as a script directly (python kvm_serial/control.py) by ensuring -# the project root is on sys.path so that `kvm_serial.*` imports resolve. -try: - from importlib import import_module - - import_module("kvm_serial.backend") -except ModuleNotFoundError: +# the project root is first on sys.path so local `kvm_serial.*` imports resolve. +if __name__ == "__main__" and (__package__ is None or __package__ == ""): import os - sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + if project_root not in sys.path: + sys.path.insert(0, project_root) from serial import Serial diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index eb892d5..0b1bfb7 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -5,6 +5,14 @@ import time import math from typing import cast, Optional + +# Allow running as a script directly (python kvm_serial/kvm.py) by ensuring +# the project root is first on sys.path so local `kvm_serial.*` imports resolve. +if __name__ == "__main__" and (__package__ is None or __package__ == ""): + project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + if project_root not in sys.path: + sys.path.insert(0, project_root) + from serial import Serial, SerialException from PyQt5.QtCore import Qt, QTimer, QSizeF, QRectF, QEvent, QLocale, pyqtSignal from PyQt5.QtGui import ( @@ -34,23 +42,12 @@ QSizePolicy, ) -try: - import kvm_serial.utils.settings as settings_util - from kvm_serial.utils.communication import list_serial_ports - from kvm_serial.utils import scancode_to_ascii, string_to_scancodes - from kvm_serial.backend.video import CameraProperties, enumerate_cameras - from kvm_serial.backend.implementations.qtop import QtOp - from kvm_serial.backend.implementations.mouseop import MouseOp, MouseButton - -except ModuleNotFoundError: - # Allow running as a script directly - sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) - import utils.settings as settings_util - from utils.communication import list_serial_ports - from utils import scancode_to_ascii, string_to_scancodes - from backend.video import CameraProperties, enumerate_cameras - from backend.implementations.qtop import QtOp - from backend.implementations.mouseop import MouseOp, MouseButton +import kvm_serial.utils.settings as settings_util +from kvm_serial.utils.communication import list_serial_ports +from kvm_serial.utils import scancode_to_ascii, string_to_scancodes +from kvm_serial.backend.video import CameraProperties, enumerate_cameras +from kvm_serial.backend.implementations.qtop import QtOp +from kvm_serial.backend.implementations.mouseop import MouseOp, MouseButton # Subclass QGraphicsView so clicks inside the view can receive focus and From 29c0da2ddbab094fb8bb457bdc09ccf1a97c4875 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Tue, 5 May 2026 22:23:41 +0100 Subject: [PATCH 27/45] Fix type casting for mouse movement deltas in CH9350Comm class (towards #13) --- kvm_serial/utils/ch9350.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index a46eb0f..edd9f4f 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -320,8 +320,8 @@ def send_mouse_absolute( gap in practice. """ if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): - dx = x - self._last_x - dy = y - self._last_y + dx = int(x - self._last_x) + dy = int(y - self._last_y) self._last_x, self._last_y = x, y self._last_width, self._last_height = width, height return self._send_relative_frame(buttons, dx, dy, wheel) @@ -355,9 +355,9 @@ def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bo frame = self._build_state01_mou_frame(buttons, dx, dy, wheel) else: # State 2 simple frame: 7 bytes total. - dx_b = max(-127, min(127, dx)) & 0xFF - dy_b = max(-127, min(127, dy)) & 0xFF - wh_b = max(-127, min(127, wheel)) & 0xFF + dx_b = max(-127, min(127, int(dx))) & 0xFF + dy_b = max(-127, min(127, int(dy))) & 0xFF + wh_b = max(-127, min(127, int(wheel))) & 0xFF frame = HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b]) return self._send_locked(frame) @@ -402,8 +402,8 @@ def _build_state01_mou_frame(self, btn: int, dx: int, dy: int, wheel: int) -> by cmd is 0x88 (state 0) or 0x83 (state 1). dx/dy clamp to ±127. """ cmd = 0x83 if self.state == self.STATE_1 else 0x88 - dx_b = max(-127, min(127, dx)) & 0xFF - dy_b = max(-127, min(127, dy)) & 0xFF + dx_b = max(-127, min(127, int(dx))) & 0xFF + dy_b = max(-127, min(127, int(dy))) & 0xFF data = bytes([self.MOU_RID, btn & 0xFF, dx_b, dy_b, wheel & 0xFF]) ctr = self._mou_counter & 0xFF self._mou_counter += 1 From 0c501ed6cc2ff0d72dd7654f0b99321d3ae4b494 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Wed, 6 May 2026 00:24:41 +0100 Subject: [PATCH 28/45] Add support for composite mouse descriptor in CH9350Comm class (towards 13) Co-authored-by: Copilot --- kvm_serial/control.py | 8 +++-- kvm_serial/kvm.py | 8 +++-- kvm_serial/utils/ch9350.py | 73 ++++++++++++++++++++++++++++++++------ 3 files changed, 75 insertions(+), 14 deletions(-) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index e1f9e45..f476716 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -41,10 +41,14 @@ def _build_comm_cls(args): Defaults to CH9329Comm (the class itself, which is callable). """ if args.ch9350: - from kvm_serial.utils.ch9350 import CH9350Comm + from kvm_serial.utils.ch9350 import CH9350Comm, COMPOSITE_MOUSE_DESC state = args.ch9350_state - return lambda port: CH9350Comm(port, state=state) + return lambda port: CH9350Comm( + port, + state=state, + mouse_desc=COMPOSITE_MOUSE_DESC, + ) from kvm_serial.utils.ch9329 import CH9329Comm return CH9329Comm diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index 0b1bfb7..e6e070f 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -923,10 +923,14 @@ def _build_comm_cls(self): CH9350Comm needs the chosen state bound via a lambda. """ if self.protocol_var == "ch9350": - from kvm_serial.utils.ch9350 import CH9350Comm + from kvm_serial.utils.ch9350 import CH9350Comm, COMPOSITE_MOUSE_DESC state = self.ch9350_state_var - return lambda port: CH9350Comm(port, state=state) + return lambda port: CH9350Comm( + port, + state=state, + mouse_desc=COMPOSITE_MOUSE_DESC, + ) from kvm_serial.utils.ch9329 import CH9329Comm diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index edd9f4f..fec1ac9 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -45,16 +45,40 @@ # descriptor has been processed; the LC waits for that ack before # transitioning state 0 -> state 1. DEFAULT_MOUSE_DESC = bytes.fromhex( - "05010902a10185010901a1000509190129031500250175019503810275059501" - "810105010930093109381581257f750895038106c005ff09021500250175019501" - "b12275079501b101c0" + # Relative mouse application + "05010902a101" # Usage Page (Generic Desktop), Usage (Mouse), Collection (Application) + "8501" # Report ID 1 + "0901a100" # Usage (Pointer), Collection (Physical) + "0509190129031500250175019503810275059501" # 5 buttons + X/Y relative + wheel + "810105010930093109381581257f750895038106c0" # Extended features + "05ff09021500250175019501b12275079501b101c0" # Vendor-specific +) +COMPOSITE_MOUSE_DESC = bytes.fromhex( + # A mouse presenting both relative and absolute reports + # ---- Report ID 1: Relative mouse ---- + "05010902A1010901A100" # Generic Desktop / Mouse / Application + "8501" # Report ID 1 + "0509190129031500250175019503810275059501810305010930093115812" # Buttons + relative X/Y + "57F750895028106C0C0" + # ---- Report ID 2: Absolute mouse ---- + "05010902A1010901A100" # Generic Desktop / Mouse / Application + "8502" # Report ID 2 + "050919012903150025017501950381027505950181030501093009311500" # Buttons + "26FF7F751095028102C0C0" # Absolute X/Y (16-bit, 0-4095) ) DEFAULT_MOUSE_PID = bytes.fromhex("4000") DEFAULT_KBD_DESC = bytes.fromhex( - "05010906a1018501050719e029e7150025017501950881029501750881019503" - "750105081901290391029505750191019506750826ff000507190029918100c0" - "05010980a10185021981298315002501950375018102950175058101c0050c09" - "01a10185031500250109e909ea09e209cd19b529b87501950881020a8a010a21" + # ---- Keyboard application ---- + "05010906a101" # Generic Desktop / Keyboard + "8501050719e029e7150025017501950881029501750881019503750105081901" # Report ID 1: modifiers + keycodes + "2903910295017505910195067508150026ff000507190029918100c0" + # ---- System Control application ---- + "05010980a101" # Generic Desktop / System Control + "850219812983150025019503750181029501750581" + "01c0" + # ---- Consumer Control application ---- + "050c0901a101" # Consumer / Consumer Control + "85031500250109e909ea09e209cd19b529b87501950881020a8a010a21" "020a2a021a23022a270281020a83010a96010a92010a9e010a94010a060209b2" "09b48102c0" ) @@ -186,8 +210,10 @@ class CH9350Comm(DataComm): # 0x83/0x88 payload. KB_SER = 0x13 # keyboard / HID / port 2 KB_RID = 0x01 # 8-byte boot keyboard report follows - MOU_SER = 0x22 # mouse / HID / port 1 - MOU_RID = 0x01 # 4-byte relative mouse report follows + MOU_SER = 0x22 # mouse / HID / port 1 (relative) + MOU_RID = 0x01 # relative mouse report ID + MOU_ABS_SER = 0x23 # mouse / HID / port 2 (absolute, composite) + MOU_ABS_RID = 0x02 # absolute mouse report ID (use composite descriptor!!) # How long to wait between 0x81 retransmits while a PID remains un-acked. _ANNOUNCE_RETRY_INTERVAL = 2.0 @@ -361,8 +387,35 @@ def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bo frame = HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b]) return self._send_locked(frame) + def _send_state01_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: + """ + State-0/1 absolute mouse frame (CH9329): + HEADER + cmd + LEN + SER + RID + [btn xL xH yL yH wheel] + CTR + CTRSUM + cmd is 0x88 (state 0) or 0x83 (state 1). LEN = 0x0A (10 bytes). + """ + cmd = 0x83 if self.state == self.STATE_1 else 0x88 + wh_b = max(-127, min(127, wheel)) & 0xFF + data = bytes( + [ + self.MOU_ABS_RID, + buttons & 0xFF, + x & 0xFF, + (x >> 8) & 0xFF, + y & 0xFF, + (y >> 8) & 0xFF, + wh_b, + ] + ) + ctr = self._mou_counter & 0xFF + self._mou_counter += 1 + ctr_sum = (ctr + sum(data)) & 0xFF + plen = 1 + len(data) + 2 # SER + data + CTR + CTRSUM + return self._send_locked( + HEADER + bytes([cmd, plen, self.MOU_ABS_SER]) + data + bytes([ctr, ctr_sum]) + ) + def _send_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: - # x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is + # States 3/4: x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is # a fixed report-ID prefix matching empirical captures from real LCs. wh_b = max(-127, min(127, wheel)) & 0xFF frame = HEADER + bytes( From 3307d4f333e7dedfa0df4faa69590615ea8a2846 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 13:45:43 +0100 Subject: [PATCH 29/45] (docs) Document CH9350L state-0/1 absolute mouse limitation (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The UC silently drops LEN=0x0A absolute mouse frames in state 0/1 despite valid descriptor handshakes. Verified with PoC-generated frames under multiple descriptor variants and with a real CH9329 chip as the LC's USB-host source. State 3/4 (UC-owned descriptors, cmd 0x04 frames) is the only working absolute-mouse path on this hardware. - §Mouse LEN=0x0A: warning callout pointing to §Divergences - §State Machine: capability note on relative-only forwarding - §Divergences: full evidence and interpretation --- docs/CH9350L_PROTO.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 0c79b16..17b9106 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -174,7 +174,7 @@ Three variants observed, distinguished by LEN and SER. The LEN=`0x08` form is no #### Absolute mouse with report ID — LEN = `0x0A` -Produced by the CH9329 bridge (which reports absolute coordinates). +Wire format produced by a CH9329 bridge, which presents both relative (RID `0x04`) and absolute (RID `0x05`) mouse reports as part of its composite USB descriptor. Documented in datasheet §4.3 as a valid LC→UC frame. ``` 57 AB [CMD] 0A [SER=0x23] [RID=05] [btn] [XL] [XH] [YL] [YH] [wheel] [CTR] [CTR_SUM] @@ -187,6 +187,10 @@ Produced by the CH9329 bridge (which reports absolute coordinates). | `XL`/`XH` | X coordinate | 16-bit little-endian, raw USB HID absolute space | | `YL`/`YH` | Y coordinate | 16-bit little-endian | +> **⚠ The CH9350L UC does not forward LEN=`0x0A` mouse frames to the target host in state 0/1.** Verified empirically: the LC sends valid `0x83 0x0A` absolute frames with correct framing, the UC's `0x12` keep-alive shows `STATUS=0x07` (both ports enumerated), the target host's HID enumeration completes — and yet the cursor does not respond. Reproduced both with PoC-generated frames under several descriptor variants, and with **a real CH9329 chip plugged into the LC's USB-host port** as the source of absolute reports. See [§Divergences](#divergences-from-the-datasheet) for the full evidence. +> +> **Implication: state 0/1 paired mode supports relative mouse only.** For absolute cursor positioning on a CH9350L UC, configure the UC for state 3 or state 4 (dipswitch) where absolute coords flow as fixed-format `0x04` frames and the UC owns the USB device descriptors directly. See [§States 2/3/4](#states-234-alternative-dipswitch-configurations). + #### Relative mouse with report ID — LEN = `0x08` Produced by a real mouse on **port 1** whose descriptor contains a Report ID. @@ -344,6 +348,8 @@ To get `STATUS` back to `0x07` (i.e. devices re-enumerated on the target host), State 0 (`0x88`) is the unpaired form; state 1 (`0x83`) is the paired form. The CMD byte switches; the frame payload is identical. Heartbeats run at ~1 s cadence in both states. **Transition trigger:** the UC's `0x12` keep-alive must reflect every PID the LC announced via `0x81` in its `P1`/`P2` fields — receiving any single `0x12` is *not* sufficient. See [§Divergences](#divergences-from-the-datasheet) for how this differs from the datasheet's wording. +> **Capability note: state 0/1 supports relative mouse only.** Although datasheet §4.3 documents the LEN=`0x0A` absolute-mouse frame as a valid state-0/1 LC→UC frame, the UC's frame-forwarding firmware silently drops it. Verified against multiple descriptor variants and against a real CH9329 chip as the LC USB-host source. For absolute cursor positioning, use state 3 or 4. See [§Mouse — CMD `0x83` / `0x88`](#mouse--cmd-0x83--0x88) and [§Divergences](#divergences-from-the-datasheet). + --- ## Labelling Byte (SER) @@ -478,6 +484,18 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Datasheet (§4.3):** documents only the LEN=`0x0A` (CH9329 absolute, with report ID) and LEN=`0x07` (boot relative, no report ID) mouse frame formats. - **Observed:** a third variant exists — LEN=`0x08`, SER=`0x22`, with a `Report ID` byte preceding the 4-byte boot mouse data. This is what the LC emits when the connected USB mouse has a Report Descriptor that includes a `Report ID` item but uses standard relative coordinates. +### LEN = `0x0A` absolute mouse frames are silently dropped by the UC in state 0/1 + +- **Datasheet (§4.3):** documents the LEN=`0x0A`, RID=`0x05` absolute mouse frame as a normal LC→UC frame in state 0/1, alongside the relative variants. The descriptor-announce mechanism (`0x81`) is presented as a general-purpose channel for declaring arbitrary HID Report Descriptors to the UC. +- **Observed:** the UC accepts the descriptor handshake (the announced descriptor's PID is reflected in `0x12`'s `P1`/`P2` slot, `STATUS` reaches `0x07`, the target host enumerates the device with the expected HID interfaces). But absolute mouse reports never reach the target's input pipeline — the cursor does not move. The same UC accepts and forwards LEN=`0x07`/`0x08` relative-mouse frames and LEN=`0x0B`/`0x0C` keyboard frames immediately, against the same descriptor exchange. +- **Evidence (multiple sources):** + - PoC-generated `0x83 0x0A` frames with several composite-mouse descriptor variants — two-Application TLCs, single Pointer Physical with two reports, with/without `Wheel` declarations, with 0..65535 / 0..32767 / 0..4095 absolute coordinate ranges, with Report IDs `0x02` and `0x05`. Relative reports (RID `0x01`) moved the cursor in every variant; absolute reports (any RID, LEN=`0x0A`) produced no cursor motion at any coordinate, including screen edges. + - PoC-generated relative frames using RID `0x04` instead of RID `0x01` against a descriptor declaring both — to test whether the UC's frame validator is RID-pinned independent of frame length. (Result included for completeness; see capture `tmp/sniff/test-abs-LC-5.txt`.) + - **Real CH9329 chip** plugged into the LC's USB-host port as the report source. The LC announced the genuine 359-byte CH9329 composite descriptor (`PID=0x29e1`); the UC accepted it (`p2=29e1`, `STATUS=0x07`); the LC forwarded ~80 absolute frames (`57 ab 83 0a 23 05 …`) during stylus activity; the cursor did not move. Repeated across both LC ports. +- **Interpretation:** the UC's frame-forwarding firmware is hard-bound to a subset of report shapes — relative mouse (LEN=`0x07`/`0x08`) and keyboard (LEN=`0x0B`/`0x0C`). The descriptor handshake forwards descriptor bytes verbatim to the target host for enumeration purposes, but report payloads outside the firmware's expected set are swallowed before reaching the USB device endpoints, regardless of whether the descriptor declares them. The chip's lineage is a BIOS keyboard-and-mouse extender; arbitrary HID classes were apparently never within scope for state-0/1's report path. +- **Implication:** absolute mouse positioning on a CH9350L UC requires state 3 or state 4 (dipswitch-fixed BIOS modes), where the UC owns the USB device stack with built-in absolute-mouse / digitizer descriptors and frames flow as fixed-format `0x04` packets. State 0/1 cannot be made to support absolute mouse from the LC side alone; this is a UC firmware constraint, not a protocol negotiation issue. +- **Caveat:** observed against one CH9350L board (single-DM/DP wired port; the same hardware used for all captures in this document). Whether other CH9350L boards or firmware revisions behave differently has not been tested. + --- ## Reference Implementation From 822d39e4d277068e807d3b93f5b1061f977ca0d5 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 13:50:11 +0100 Subject: [PATCH 30/45] Revert composite mouse descriptor support in CH9350Comm (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts the main body of 0c501ed. State-0/1 absolute mouse on the CH9350L UC is silently dropped by the chip's frame-forwarder regardless of the announced descriptor — proven empirically with PoC frames and a real CH9329 chip as the LC USB-host source. See the documentation update in 3307d4f for the full evidence. Removed: - COMPOSITE_MOUSE_DESC constant - MOU_ABS_SER, MOU_ABS_RID class constants - _send_state01_absolute_frame method - control.py / kvm.py wiring that passed the composite descriptor Preserved from 0c501ed: the descriptor-section structural comments in DEFAULT_KBD_DESC (Keyboard / System Control / Consumer Control) and DEFAULT_MOUSE_DESC. Those document what each chunk of the hex blob corresponds to and are useful independently of the absolute-mouse question they were authored alongside. --- kvm_serial/control.py | 8 ++---- kvm_serial/kvm.py | 8 ++---- kvm_serial/utils/ch9350.py | 50 +++----------------------------------- 3 files changed, 8 insertions(+), 58 deletions(-) diff --git a/kvm_serial/control.py b/kvm_serial/control.py index f476716..e1f9e45 100755 --- a/kvm_serial/control.py +++ b/kvm_serial/control.py @@ -41,14 +41,10 @@ def _build_comm_cls(args): Defaults to CH9329Comm (the class itself, which is callable). """ if args.ch9350: - from kvm_serial.utils.ch9350 import CH9350Comm, COMPOSITE_MOUSE_DESC + from kvm_serial.utils.ch9350 import CH9350Comm state = args.ch9350_state - return lambda port: CH9350Comm( - port, - state=state, - mouse_desc=COMPOSITE_MOUSE_DESC, - ) + return lambda port: CH9350Comm(port, state=state) from kvm_serial.utils.ch9329 import CH9329Comm return CH9329Comm diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index e6e070f..0b1bfb7 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -923,14 +923,10 @@ def _build_comm_cls(self): CH9350Comm needs the chosen state bound via a lambda. """ if self.protocol_var == "ch9350": - from kvm_serial.utils.ch9350 import CH9350Comm, COMPOSITE_MOUSE_DESC + from kvm_serial.utils.ch9350 import CH9350Comm state = self.ch9350_state_var - return lambda port: CH9350Comm( - port, - state=state, - mouse_desc=COMPOSITE_MOUSE_DESC, - ) + return lambda port: CH9350Comm(port, state=state) from kvm_serial.utils.ch9329 import CH9329Comm diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index fec1ac9..0878c3c 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -45,7 +45,7 @@ # descriptor has been processed; the LC waits for that ack before # transitioning state 0 -> state 1. DEFAULT_MOUSE_DESC = bytes.fromhex( - # Relative mouse application + # ---- Relative mouse application ---- "05010902a101" # Usage Page (Generic Desktop), Usage (Mouse), Collection (Application) "8501" # Report ID 1 "0901a100" # Usage (Pointer), Collection (Physical) @@ -53,19 +53,6 @@ "810105010930093109381581257f750895038106c0" # Extended features "05ff09021500250175019501b12275079501b101c0" # Vendor-specific ) -COMPOSITE_MOUSE_DESC = bytes.fromhex( - # A mouse presenting both relative and absolute reports - # ---- Report ID 1: Relative mouse ---- - "05010902A1010901A100" # Generic Desktop / Mouse / Application - "8501" # Report ID 1 - "0509190129031500250175019503810275059501810305010930093115812" # Buttons + relative X/Y - "57F750895028106C0C0" - # ---- Report ID 2: Absolute mouse ---- - "05010902A1010901A100" # Generic Desktop / Mouse / Application - "8502" # Report ID 2 - "050919012903150025017501950381027505950181030501093009311500" # Buttons - "26FF7F751095028102C0C0" # Absolute X/Y (16-bit, 0-4095) -) DEFAULT_MOUSE_PID = bytes.fromhex("4000") DEFAULT_KBD_DESC = bytes.fromhex( # ---- Keyboard application ---- @@ -210,10 +197,8 @@ class CH9350Comm(DataComm): # 0x83/0x88 payload. KB_SER = 0x13 # keyboard / HID / port 2 KB_RID = 0x01 # 8-byte boot keyboard report follows - MOU_SER = 0x22 # mouse / HID / port 1 (relative) - MOU_RID = 0x01 # relative mouse report ID - MOU_ABS_SER = 0x23 # mouse / HID / port 2 (absolute, composite) - MOU_ABS_RID = 0x02 # absolute mouse report ID (use composite descriptor!!) + MOU_SER = 0x22 # mouse / HID / port 1 + MOU_RID = 0x01 # 4-byte relative mouse report follows # How long to wait between 0x81 retransmits while a PID remains un-acked. _ANNOUNCE_RETRY_INTERVAL = 2.0 @@ -387,35 +372,8 @@ def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bo frame = HEADER + bytes([0x02, buttons & 0xFF, dx_b, dy_b, wh_b]) return self._send_locked(frame) - def _send_state01_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: - """ - State-0/1 absolute mouse frame (CH9329): - HEADER + cmd + LEN + SER + RID + [btn xL xH yL yH wheel] + CTR + CTRSUM - cmd is 0x88 (state 0) or 0x83 (state 1). LEN = 0x0A (10 bytes). - """ - cmd = 0x83 if self.state == self.STATE_1 else 0x88 - wh_b = max(-127, min(127, wheel)) & 0xFF - data = bytes( - [ - self.MOU_ABS_RID, - buttons & 0xFF, - x & 0xFF, - (x >> 8) & 0xFF, - y & 0xFF, - (y >> 8) & 0xFF, - wh_b, - ] - ) - ctr = self._mou_counter & 0xFF - self._mou_counter += 1 - ctr_sum = (ctr + sum(data)) & 0xFF - plen = 1 + len(data) + 2 # SER + data + CTR + CTRSUM - return self._send_locked( - HEADER + bytes([cmd, plen, self.MOU_ABS_SER]) + data + bytes([ctr, ctr_sum]) - ) - def _send_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: - # States 3/4: x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is + # x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is # a fixed report-ID prefix matching empirical captures from real LCs. wh_b = max(-127, min(127, wheel)) & 0xFF frame = HEADER + bytes( From 574715d923c976793041875448ca221ca57933f4 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 13:57:06 +0100 Subject: [PATCH 31/45] Improve CH9350Comm absolute-mouse handling for relative-only states (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two refinements to send_mouse_absolute behaviour in states 0/1/2 (the relative-only modes per docs/CH9350L_PROTO.md §Divergences): 1. Fan out large deltas across multiple consecutive frames instead of clamping to ±127 in a single frame and losing displacement. A teleport from off-window or a focus event with no preceding move would otherwise leave the cursor short of the target by up to one axis-clamp per event. Equivalent in spirit to the on-chip pen-to-mouse conversion a Wacom-style device does in firmware -- diff successive absolute positions, emit relative deltas, fan out when needed. Frame count = ceil(max(|dx|, |dy|) / 127); wheel rides only the first chunk so a single scroll request isn't multiplied. 2. Add a CH9350Comm.supports_absolute_mouse property surfacing whether this comm forwards absolute reports natively (states 3/4) or translates to relative deltas (states 0/1/2). Lets application code surface mode info or pick UX accordingly without duplicating the state-to-capability mapping. Tests cover both: _split_relative_delta unit tests for chunk bounds and sum-preservation across positive/negative axes; integration tests asserting state-0 and state-2 wire frames fan out correctly with the right cmd byte and the wheel-on-first-chunk behaviour; property tests for each supported state and the internal state-0 -> state-1 promotion. --- kvm_serial/utils/ch9350.py | 62 ++++++++++++++++--- tests/utils/test_ch9350.py | 120 +++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 9 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 0878c3c..2ae4f94 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -86,6 +86,30 @@ } +def _split_relative_delta(dx: int, dy: int, max_step: int = 127): + """ + Yield (chunk_dx, chunk_dy) tuples, each within ±max_step, summing to (dx, dy). + + State-0/1/2 mouse frames carry signed-byte deltas; a single send for + |delta| > 127 would clamp at the comm layer and lose displacement. Splitting + proportionally lets a single absolute target translate to a short burst of + relative frames that the host integrates back into the requested motion -- + same approach as Wacom's on-device pen-to-mouse conversion. Frames-per-axis + is ceil(max(|dx|, |dy|) / max_step); each yielded chunk respects max_step + by construction. + """ + if abs(dx) <= max_step and abs(dy) <= max_step: + yield dx, dy + return + n = (max(abs(dx), abs(dy)) - 1) // max_step + 1 + sent_dx = sent_dy = 0 + for i in range(1, n + 1): + target_dx = dx * i // n + target_dy = dy * i // n + yield target_dx - sent_dx, target_dy - sent_dy + sent_dx, sent_dy = target_dx, target_dy + + def _parse_frames(buf: bytearray) -> tuple[list[tuple[int, bytes]], bytearray]: """ Extract complete frames from buf. Returns (frames, remaining_buf) where @@ -321,21 +345,30 @@ def send_mouse_absolute( """ Emit a positional update. - States 3/4: scale pixel coordinates into the chip's 16-bit absolute - space and emit a 0x04 frame. - States 0/1 and 2: no absolute-mouse path exists on the wire (the - announced descriptor is a relative-mouse boot report). Translate to - a relative delta from the previous absolute call. This means a - fresh-from-origin pointer move clamps each step to ±127 px (the - signed-byte range), but pynput's frequent event firing covers the - gap in practice. + States 3/4: native absolute path. Pixel coords scale into the chip's + 16-bit absolute space and emit a 0x04 frame. + States 0/1 and 2: no absolute path exists on the wire (UC firmware + silently drops LEN=0x0A in state 0/1; state 2's BIOS boot mouse is + relative-only by design — see docs/CH9350L_PROTO.md §Divergences). + Translate to a relative delta from the last reported absolute + position. When |delta| > 127 in either axis (e.g. cursor teleport, + focus-into-window from far away) the displacement fans out into a + short burst of consecutive frames so the cursor reaches the true + target rather than stopping ~127 px short — equivalent to what a + Wacom-style device does on-chip in pen-to-mouse mode. """ if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): dx = int(x - self._last_x) dy = int(y - self._last_y) self._last_x, self._last_y = x, y self._last_width, self._last_height = width, height - return self._send_relative_frame(buttons, dx, dy, wheel) + ok = True + for i, (chunk_dx, chunk_dy) in enumerate(_split_relative_delta(dx, dy)): + # Wheel rides only the first chunk so a multi-frame fan-out + # doesn't multiply a single scroll request. + chunk_wheel = wheel if i == 0 else 0 + ok = self._send_relative_frame(buttons, chunk_dx, chunk_dy, chunk_wheel) and ok + return ok nx = max(0, min(0xFFFF, int((0xFFFF * x) // max(1, width)))) ny = max(0, min(0xFFFF, int((0xFFFF * y) // max(1, height)))) @@ -343,6 +376,17 @@ def send_mouse_absolute( self._last_width, self._last_height = width, height return self._send_absolute_frame(buttons, nx, ny, wheel) + @property + def supports_absolute_mouse(self) -> bool: + """ + True if this comm forwards absolute-mouse reports natively to the + target host (states 3/4); False if `send_mouse_absolute` translates + the requested position into relative deltas (states 0/1/2). Useful + for application code surfacing mode information or selecting + different UX for absolute-aware vs relative-only modes. + """ + return self.state in (self.STATE_3, self.STATE_4) + def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> bool: """ Emit a button or scroll event (or, in state 0/1/2, a true relative motion). diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index 5f61530..ea3ed61 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -6,6 +6,7 @@ DEFAULT_MOUSE_PID, HEADER, _parse_frames, + _split_relative_delta, ) from tests._utilities import MockSerial, mock_serial @@ -352,3 +353,122 @@ def test_led_echo_does_not_run_state0_pid_logic(self, mock_serial): dc._handle_frame(0x12, b"\x00\x00\x00\x00\x01\x07\xac\x20") assert dc.state == CH9350Comm.STATE_2 assert not dc._reattach_needed.is_set() + + @patch("serial.Serial", MockSerial) + def test_supports_absolute_mouse_property(self, mock_serial): + """States 3/4 forward absolute reports natively; states 0/1/2 translate + absolute targets into relative deltas. The property surfaces this.""" + for state in (0, 2): + assert CH9350Comm(mock_serial, state=state).supports_absolute_mouse is False + for state in (3, 4): + assert CH9350Comm(mock_serial, state=state).supports_absolute_mouse is True + + # State 1 is reached internally from state 0 via the PID-ack handshake; + # an instance promoted to state 1 still maps to relative-only forwarding. + dc = CH9350Comm(mock_serial, state=0) + dc.state = CH9350Comm.STATE_1 + assert dc.supports_absolute_mouse is False + + +class TestSplitRelativeDelta: + """ + State-0/1/2 mouse frames carry signed-byte deltas (±127 per axis). For + absolute targets that translate to a delta exceeding that range, + _split_relative_delta fans the displacement out into a short burst of + chunks each within ±127 that sum to the original delta. + """ + + def test_within_range_passes_through(self): + """A single-frame delta is yielded unchanged.""" + assert list(_split_relative_delta(0, 0)) == [(0, 0)] + assert list(_split_relative_delta(50, -30)) == [(50, -30)] + assert list(_split_relative_delta(127, -127)) == [(127, -127)] + + def test_large_dx_splits(self): + """|dx| > 127 fans out; chunks within ±127 and sum equal to original.""" + chunks = list(_split_relative_delta(300, 0)) + assert len(chunks) == 3 # ceil(300 / 127) = 3 + assert all(abs(cdx) <= 127 and abs(cdy) <= 127 for cdx, cdy in chunks) + assert sum(c[0] for c in chunks) == 300 + assert sum(c[1] for c in chunks) == 0 + + def test_large_dy_splits(self): + chunks = list(_split_relative_delta(0, -400)) + assert len(chunks) == 4 # ceil(400 / 127) = 4 + assert all(abs(cdx) <= 127 and abs(cdy) <= 127 for cdx, cdy in chunks) + assert sum(c[1] for c in chunks) == -400 + + def test_diagonal_split_preserves_ratio(self): + """Both axes split together; chunk-count driven by the larger axis.""" + chunks = list(_split_relative_delta(300, 50)) + assert len(chunks) == 3 + assert all(abs(cdx) <= 127 and abs(cdy) <= 127 for cdx, cdy in chunks) + assert sum(c[0] for c in chunks) == 300 + assert sum(c[1] for c in chunks) == 50 + + def test_negative_axes(self): + chunks = list(_split_relative_delta(-500, -250)) + assert all(abs(cdx) <= 127 and abs(cdy) <= 127 for cdx, cdy in chunks) + assert sum(c[0] for c in chunks) == -500 + assert sum(c[1] for c in chunks) == -250 + + def test_state0_absolute_fans_out_on_wire(self, mock_serial): + """Verify the integration: a state-0 send_mouse_absolute call with a + delta > 127 produces multiple consecutive 0x88 mouse frames whose + chunk dx/dy sum to the requested displacement.""" + from unittest.mock import patch + + with patch("serial.Serial", MockSerial): + dc = CH9350Comm(mock_serial, state=0) + # First call establishes baseline at (0, 0); second call requests + # a 300-pixel jump in x. Expect three 0x88 frames, each within ±127 + # in dx, summing to 300. + dc.send_mouse_absolute(0, 0, 0, 1920, 1080) + mock_serial.write.reset_mock() + dc.send_mouse_absolute(0, 300, 0, 1920, 1080) + assert mock_serial.write.call_count == 3 + total_dx = 0 + for call in mock_serial.write.call_args_list: + frame = call.args[0] + # 0x88 frame: header + cmd + LEN + SER + RID + btn + dx + dy + wheel + ctr + sum + assert frame[2] == 0x88 # cmd + dx_byte = frame[7] + dx_signed = dx_byte - 256 if dx_byte > 127 else dx_byte + assert -127 <= dx_signed <= 127 + total_dx += dx_signed + assert total_dx == 300 + + def test_state2_absolute_fans_out_on_wire(self, mock_serial): + """State 2 also fans out; emits multiple 0x02 simple frames.""" + from unittest.mock import patch + + with patch("serial.Serial", MockSerial): + dc = CH9350Comm(mock_serial, state=2) + dc.send_mouse_absolute(0, 0, 0, 1920, 1080) + mock_serial.write.reset_mock() + dc.send_mouse_absolute(0, 0, 250, 1920, 1080) + assert mock_serial.write.call_count == 2 # ceil(250 / 127) = 2 + total_dy = 0 + for call in mock_serial.write.call_args_list: + frame = call.args[0] + assert frame[2] == 0x02 # state-2 cmd byte + dy_byte = frame[5] + dy_signed = dy_byte - 256 if dy_byte > 127 else dy_byte + assert -127 <= dy_signed <= 127 + total_dy += dy_signed + assert total_dy == 250 + + def test_wheel_only_on_first_chunk(self, mock_serial): + """When fan-out applies, the wheel value rides only the first frame + so a single scroll request isn't multiplied by the fan-out count.""" + from unittest.mock import patch + + with patch("serial.Serial", MockSerial): + dc = CH9350Comm(mock_serial, state=2) + dc.send_mouse_absolute(0, 0, 0, 1920, 1080) + mock_serial.write.reset_mock() + dc.send_mouse_absolute(0, 300, 0, 1920, 1080, wheel=3) + assert mock_serial.write.call_count == 3 + # State-2 frame: header(2) + cmd(1) + btn(1) + dx(1) + dy(1) + wheel(1) = 7B + wheels = [call.args[0][6] for call in mock_serial.write.call_args_list] + assert wheels == [3, 0, 0] From 33f852935db36fbcaabb83a9b2c93110405cc49b Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 14:58:09 +0100 Subject: [PATCH 32/45] (docs) add CH9329 and CH9350L user guides (towards #13) - Add docs/CH9329_GUIDE.md: hardware sourcing, DIY wiring (with 5 V backfeed warning), physical setup, GUI/CLI usage, troubleshooting - Add docs/CH9350L_GUIDE.md: dipswitch configuration (SEL/S0/S1/BAUD), working state selection guide, RS-485 vs TTL UART section (with voltage damage warning), physical setup, GUI/CLI usage, state 0/1 handshake explanation, troubleshooting - Add docs/img/ch9350l-front.jpg and ch9350l-back.jpg (from issue #13) - Add docs/img/mini-uart.jpg (CH9329 DIY module photo) - Update README: signpost both guides from Kit List and Script Usage; remove --video/-x (removed feature); trim prose now covered by guides --- README.md | 39 ++--- docs/CH9329_GUIDE.md | 172 ++++++++++++++++++++++ docs/CH9350L_GUIDE.md | 287 +++++++++++++++++++++++++++++++++++++ docs/img/ch9350l-back.jpg | Bin 0 -> 270664 bytes docs/img/ch9350l-front.jpg | Bin 0 -> 547568 bytes docs/img/mini-uart.jpg | Bin 0 -> 111517 bytes 6 files changed, 479 insertions(+), 19 deletions(-) create mode 100644 docs/CH9329_GUIDE.md create mode 100644 docs/CH9350L_GUIDE.md create mode 100644 docs/img/ch9350l-back.jpg create mode 100644 docs/img/ch9350l-front.jpg create mode 100644 docs/img/mini-uart.jpg diff --git a/README.md b/README.md index e95fb40..7641926 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,10 @@ The GUI app will do a lot of the work for you: it will enumerate video devices a and give you a window to interact with the guest in. Application settings can be changed from the menus (File, Options, View), for example if the app doesn't select the correct devices by default. -kvm-serial supports both CH9329 and CH9350L bridge hardware. See [SUPPORTED_DEVICES.md](docs/SUPPORTED_DEVICES.md) for the protocol and hardware differences. +kvm-serial supports both CH9329 and CH9350L bridge hardware. See the user guides for hardware-specific setup: +- [CH9329 User Guide](docs/CH9329_GUIDE.md) — cables, wiring, and usage for CH9329 modules +- [CH9350L User Guide](docs/CH9350L_GUIDE.md) — dipswitch configuration, working states, and usage for CH9350L modules +- [SUPPORTED_DEVICES.md](docs/SUPPORTED_DEVICES.md) — protocol and feature comparison ## Kit List @@ -65,14 +68,14 @@ _PLEASE NOTE: I am a hobbyist. I have no affiliation with any manufacturer devel Pre-assembled cables and modules are available from eBay and AliExpress: -- **CH9329 cables:** Search for "*CH9329 cable usb*". Just make sure it has "CH9329" in the name: - a USB-A to USB-A cable won't do and can damage your machine. The modules have a USB-A male - connector on one end and a serial connector on the other. Cables have USB-A both ends and should - be pretty much plug-and-play — just make sure it's the right way around. +- **CH9329 cables:** Search for "*CH9329 cable usb*". Just make sure it has "CH9329" in the name; + a USB-A to USB-A cable won't do and can damage your machine. See the [CH9329 User Guide](docs/CH9329_GUIDE.md) + for full hardware and wiring details. - **CH9350L modules:** Less common than CH9329 but available; typically come as breakout boards - with serial connector and dipswitches. + with serial connector and dipswitches. See the [CH9350L User Guide](docs/CH9350L_GUIDE.md) for + dipswitch configuration and working state selection. -You can also build your own by soldering a bridge chip to a UART transceiver chip (e.g. SILabs CP2102 or CH340). +You can build your own by soldering a bridge chip to a UART transceiver chip (e.g. SILabs CP2102 or CH340). ### Video Capture Card @@ -114,9 +117,7 @@ pip install -e ".[dev]" A script called `control.py` is also provided for use directly from the terminal, so you can also control remotes from a headless environment! (e.g. Pi to Pi!) -Packages must be installed first. Use your preferred python package manager. E.g.: - - +Packages must be installed first. Use your preferred python package manager, e.g. `pip`, `uv` Usage examples for the `control.py` script: @@ -128,7 +129,7 @@ python -m kvm_serial.control uv run kvm-control # Run with mouse and video support; use a Mac OSX serial port: -python -m kvm_serial.control -ex /dev/cu.usbserial-A6023LNH +python -m kvm_serial.control -e /dev/cu.usbserial-A6023LNH # Run the script using keyboard 'tty' mode (no mouse, no video) python control.py --mode tty /dev/tty.usbserial0 @@ -139,21 +140,21 @@ sudo python control.py --mode usb /dev/tty.usbserial0 # Increase logging using --verbose (or -v), and use COM1 serial port (Windows) python control.py --verbose COM1 -# Use CH9350L in state 2 (default BIOS keyboard + relative mouse) -python control.py --ch9350 /dev/cu.usbserial-XXXX +# Use CH9350L in state 3 (absolute mouse — recommended for desktop use) +python control.py --ch9350 --ch9350-state 3 /dev/cu.usbserial-XXXX + +# Use CH9350L in state 2 (BIOS keyboard + relative mouse — for BIOS/UEFI use) +python control.py --ch9350 --ch9350-state 2 /dev/cu.usbserial-XXXX # Use CH9350L in state 0 (full descriptor handshake) python control.py --ch9350 --ch9350-state 0 /dev/cu.usbserial-XXXX ``` -Use `python control.py --help` to view all available options. Keyboard capture and transmission is the default functionality of control.py: a couple of extra parameters are used to enable mouse and video. For most purposes, the default capture mode will suffice. By default, the CH9329 protocol is used; pass `--ch9350` to switch to CH9350L protocol. - -Mouse capture is provided using the parameter `--mouse` (`-e`). It uses pynput for capturing mouse input and transmits this over the serial link simultaneously to keyboard input. Appropriate system permissions (Privacy and Security) may be required to use mouse capture. +Use `python control.py --help` to view all available options. By default, the CH9329 protocol is used; pass `--ch9350` to switch to CH9350L protocol. See the [CH9329 User Guide](docs/CH9329_GUIDE.md) and [CH9350L User Guide](docs/CH9350L_GUIDE.md) for hardware-specific setup and usage. -Video capture is provided using the parameter `--video` (`-x`). It uses OpenCV for capturing frames from the camera device. Again, system permissions for webcam access may need to be granted. +Mouse capture is provided using the parameter `--mouse` (`-e`). Appropriate system permissions (Privacy and Security) may be required on macOS. -See [MODES.md](docs/MODES.md) for more information on the various other options to the script. -Implementations are provided for all the main python input capture methods. +For live video, use the GUI (`kvm-gui`). See [MODES.md](docs/MODES.md) for keyboard capture mode options. ## Troubleshooting diff --git a/docs/CH9329_GUIDE.md b/docs/CH9329_GUIDE.md new file mode 100644 index 0000000..a413800 --- /dev/null +++ b/docs/CH9329_GUIDE.md @@ -0,0 +1,172 @@ +# CH9329 User Guide + +The CH9329 is a UART-to-USB-HID bridge chip. It presents itself on the target PC as a composite +USB keyboard and mouse device, and receives framed commands over a TTL UART from the host +controller (kvm-serial). It is the simpler of the two supported bridge chips: no pairing handshake +or dipswitch configuration is needed, and no special flags are required in kvm-serial. CH9329 is +the default protocol. + +> **Protocol reference:** [CH9329 Protocol Specification](CH9329_PROTO.md) +> **Supported devices overview:** [Supported Devices](SUPPORTED_DEVICES.md) + +--- + +## Hardware + +### What you need + +- A CH9329 module or cable (UART-to-USB-HID) +- A USB-to-UART adapter to connect the CH9329 to your host computer, **unless** using a + pre-assembled all-in-one cable +- A USB video capture card (optional, for video feed from the remote machine) + +### Pre-assembled cables and modules + +Pre-assembled CH9329 cables are sold on eBay and AliExpress. Search for **"CH9329 cable usb"**. + +There are two common form factors: + +| Form factor | Description | +|-------------|-------------| +| **Cable** | USB-A at both ends. One end connects to the host (serial), the other to the target (USB HID). Plug-and-play — no soldering required. Make sure it has the CH9329 chip label; a plain USB-A to USB-A cable has no serial conversion and **will not work**. | +| **Module** | A small breakout board with serial header pins. Requires a separate USB-to-UART adapter (CP2102, CH340, FTDI, etc.) wired to the host computer. | + +> _Note: the author has no affiliation with any manufacturer or seller._ + +### DIY wiring + +[![Home-made serial KVM module](img/mini-uart.jpg)](https://wp.finnigan.dev/?p=682) +*A home-made serial KVM module: CH9329 chip soldered to a SILabs CP2102 USB-to-UART adapter. CH340 works too. +Note: this photo shows the 5 V pins connected — see the warning below before replicating this wiring.* + +You can build your own module by wiring a CH9329 chip to a USB-to-UART adapter: + +``` +Host PC (USB) ──► USB-to-UART adapter (e.g. CP2102 / CH340) + │ + │ TX ──► RX ┐ + │ RX ◄── TX ├─ CH9329 module + │ GND ─── GND ┘ + │ + ▼ + USB-A (target PC) +``` + +The CH9329 operates at 3.3 V or 5 V TTL. Default baud rate is **9600 bps**; the chip also supports +1200, 2400, 4800, 14400, 19200, 38400, 57600, and 115200 bps (note: 115200 is not supported at +3.3 V). For most uses, keep the default 9600 bps. + +> **⚠ Warning — do not connect the 5 V power pins together.** +> The CH9329 module is already powered by the target machine's USB port. If you also connect +> the 5 V output of the USB-to-UART adapter to the CH9329's VCC pin (as per the image above), +> you create two power sources driving the same rail. This can backfeed voltage into one or +> both USB ports, which may damage hardware that lacks modern reverse-power protection. Wire +> only **TX, RX, and GND** between the adapter and the CH9329; leave the 5 V / VCC pins unconnected. + +--- + +## Physical Setup + +1. Connect the CH9329 module/cable to the **target machine** via USB. +2. Connect the serial end (or USB-to-UART adapter) to your **host machine** via USB. +3. Verify the device appears as a serial port on the host: + - **macOS/Linux:** `/dev/cu.usbserial-XXXX` or `/dev/ttyUSB0` + - **Windows:** `COM3`, `COM4`, etc. (check Device Manager → Ports) +4. On the target machine, the CH9329 should enumerate as a USB keyboard + mouse. No drivers + are needed on the target side. + +> **Driver installation:** If the serial port does not appear on your host, you may need to install +> a USB-to-UART driver. See [INSTALLATION.md](INSTALLATION.md) for platform-specific instructions. + +--- + +## GUI Usage + +No special configuration is needed for CH9329 — it is the default protocol. + +1. Launch the GUI (`python -m kvm_serial` or the packaged executable). +2. Open **File → Connect** (or the connection toolbar). +3. Select your serial port from the drop-down list and click **Connect**. +4. If using a video capture card, select the camera under **Options → Camera**. +5. The app will begin forwarding your keyboard and mouse input to the remote machine. + +The GUI detects CH9329 automatically; no additional menu options are required. + +--- + +## Headless / CLI Usage + +Use `kvm_serial.control` for terminal-based usage without a GUI (e.g. Raspberry Pi to Pi, or +headless servers): + +```bash +# Basic keyboard forwarding only (default mode) +python -m kvm_serial.control /dev/cu.usbserial-A6023LNH + +# With mouse capture enabled +python -m kvm_serial.control --mouse /dev/cu.usbserial-A6023LNH + +# With video, use the GUI: python -m kvm_serial + +# Windows COM port +python -m kvm_serial.control COM3 + +# Verbose logging +python -m kvm_serial.control --verbose /dev/cu.usbserial-A6023LNH + +# Using uv +uv run kvm-control /dev/cu.usbserial-A6023LNH +``` + +CH9329 is the default protocol; no `--ch9350` flag is needed. Run with `--help` to see all options. + +### Keyboard capture modes + +By default, `curses` mode is used for keyboard-only, and `pynput` when mouse or video is enabled. +Other modes can be selected with `--mode`: + +```bash +python -m kvm_serial.control --mode tty /dev/cu.usbserial-A6023LNH +python -m kvm_serial.control --mode usb /dev/cu.usbserial-A6023LNH # requires root +``` + +See [MODES.md](MODES.md) for a full comparison of capture modes and their trade-offs. + +--- + +## Troubleshooting + +### Serial port not detected + +- Check that the USB-to-UART driver is installed. See [INSTALLATION.md](INSTALLATION.md). +- On Linux, your user may need serial port access: `sudo usermod -a -G dialout $USER` (then log out and back in). +- On macOS, run `ls /dev/cu.*` to list available serial ports after connecting the device. + +### No keyboard/mouse response on the target + +- Ensure the USB end of the CH9329 is connected to the **target** machine and a USB HID device + has enumerated (check the target's device manager or `lsusb`). +- Double-check you have not connected the USB-A ends the wrong way around (target ↔ host reversed). +- Try a different USB port or cable. +- Check baud rate: kvm-serial defaults to 9600 bps which matches the CH9329 factory default. + If the chip has been reconfigured to a different baud rate, pass `--baud `. + +### Keyboard input not captured on the host + +- On macOS, pynput requires **Input Monitoring** permission (System Settings → Privacy & Security). +- Try `--mode curses` or `--mode tty` as alternatives that do not require this permission. + +### Mouse coordinates appear wrong + +- CH9329 uses a 12-bit absolute coordinate space (0–4095 × 0–4095). +- kvm-serial maps screen/scene coordinates to this range automatically in the GUI. +- In headless mode, absolute mouse is sent when `--mouse` is active. + +--- + +## Further Reading + +- [CH9329 Protocol Specification](CH9329_PROTO.md) — full frame format, command reference, and worked examples +- [MODES.md](MODES.md) — keyboard capture mode comparison +- [INSTALLATION.md](INSTALLATION.md) — platform-specific driver and permission setup +- [SUPPORTED_DEVICES.md](SUPPORTED_DEVICES.md) — comparison of CH9329 and CH9350L diff --git a/docs/CH9350L_GUIDE.md b/docs/CH9350L_GUIDE.md new file mode 100644 index 0000000..ce958b7 --- /dev/null +++ b/docs/CH9350L_GUIDE.md @@ -0,0 +1,287 @@ +# CH9350L User Guide + +The CH9350L is a paired-chip USB extender. Unlike the single-chip CH9329, it is designed to +operate as a matched pair: a **Lower Computer (LC)** module (USB host side) and an **Upper +Computer (UC)** module (USB device side). kvm-serial replaces the LC in software, speaking the +CH9350L UART protocol directly to a physical UC module, which presents USB HID keyboard and +mouse to your target machine. + +> **Protocol reference:** [CH9350L Protocol Specification](CH9350L_PROTO.md) +> **Supported devices overview:** [Supported Devices](SUPPORTED_DEVICES.md) + +--- + +## Hardware + +### What you need + +- A CH9350L UC (Upper Computer) module — the end that connects to the target machine +- A short USB-A to USB-A male to male cable to connect the CH9350L module to the target +- A USB-to-UART adapter connecting the UC's serial header to your host computer + (e.g. CP2102, CH340, FTDI, or similar at 3.3 V TTL) +- A USB video capture card (optional, for video feed from the remote machine) + +> **Note:** You only need the UC board. kvm-serial software replaces the LC. While you don't need +> two CH9350L modules many sellers only sell them in pairs, and redundancy is sometimes useful. + +### Sourcing hardware + +CH9350L modules are less common than CH9329 cables but are available from eBay and AliExpress. +They typically come as small breakout boards with: + +- A USB-A connector for the target machine (this is the UC's USB device port) +- A serial/UART header for communication +- Three dipswitches: **SEL**, **S0**, **S1** (and sometimes **BAUD0**/**BAUD1**) + +Look for listings describing a "CH9350 KVM extender" or "CH9350L module" breakout board. + +Here is an example of a typical CH9350L breakout module (TTL UART variant): + +![CH9350L module front — USB-A connector, CH9350L chip, and DIP switches](img/ch9350l-front.jpg) +*Front: USB-A target connector (left), CH9350L chip (centre), DIP switches S0/S1/BA0/BA1/SEL (right), and serial header* + +--- + +## Dipswitch Configuration + +This is the most important setup step. The dipswitches on the UC board control its role and +working state. + +![CH9350L module back — dipswitch silkscreen in Chinese with English translations below](img/ch9350l-back.jpg) +*Back silkscreen: 功能设置 (Function Settings) — labels for S0, S1, BA0, BA1, SEL, and 485控制 (RS-485 direction control)* + +The silkscreen labels translate as: + +| Label | Translation | +|-------|-------------| +| S0 | Working state setting | +| S1 | Default is 0/1 | +| BA0 | Baud rate setting, default is | +| BA1 | 115200 | +| SEL | 1: Lower computer (LC) — 0: Upper computer (UC) | +| 485控制 | Direction control pin for external RS-485 connection | + +Out of the box, all switches are set to 1 (HIGH). The silkscreen on the front reads `0` and `1` at the ends of the DIP switch block, indicating switch orientation (1 = ON/HIGH, 0 = OFF/LOW). + +### SEL — Role selection + +| SEL | Role | +|-----|------| +| 1 (ON) | Lower Computer (LC) — USB host side | +| 0 (OFF) | Upper Computer (UC) — USB device side | + +Set **SEL = 0** (OFF) to configure the module as a UC. kvm-serial is the LC. + +### S0 / S1 — Working state + +The working state determines what USB HID descriptors the UC presents to the target machine +and which UART frame format is used. + +| S0 | S1 | State | Description | +|----|----|-------|-------------| +| HIGH | HIGH | 0/1 (default) | Full descriptor handshake — kvm-serial sends HID descriptors over UART | +| LOW | HIGH | 2 | BIOS keyboard + **relative** mouse (legacy/BIOS compatible) | +| HIGH | LOW | 3 | BIOS keyboard + **absolute** mouse (recommended for most desktop use) | +| LOW | LOW | 4 | BIOS keyboard + **HID Digitizers** (multi-monitor absolute positioning) | + +**Which state should I use?** + +- **State 3** is the recommended starting point for most users controlling a modern desktop OS + with an absolute mouse pointer (the cursor goes exactly where you click in the video feed). +- **State 2** is the right choice for BIOS/UEFI setup screens, boot menus, PXE boot, and + recovery consoles. Legacy BIOS and UEFI CSM only enumerate USB HID boot-protocol devices + with a relative mouse; the absolute-mouse descriptor used in states 3/4 will not enumerate + in those environments. +- **State 4** is for multi-monitor setups using HID Digitizer absolute positioning. +- **State 0/1** is the most advanced option: the UC mirrors descriptors from real USB HID + devices. It supports relative mouse only (absolute mouse frames are silently dropped by the + UC firmware in this state). Most users should prefer state 3 or 4. + +> **BIOS/UEFI tip:** If you need to access the BIOS on the target machine, temporarily +> switch to state 2 (change S0/S1 and power-cycle the board). You can switch back to state 3 +> after booting into the OS. + +> **Important:** Set S0/S1 on the **UC board only**. When using kvm-serial as the software LC, +> only the UC board's dipswitches matter. If you purchased a pair of modules, keep the unused +> LC board aside as a spare. + +### BAUD0 / BAUD1 — Baud rate + +| BAUD1 | BAUD0 | Baud rate | +|-------|-------|-----------| +| 0 | 0 | 115200 (default) | +| 0 | 1 | 57600 | +| 1 | 0 | 38400 | +| 1 | 1 | 9600 | + +CH9350L defaults to **115200 bps**. You will need to select the correct baud rate for the hardware +in the `baud` menu in kvm-serial. + +--- + +## Physical Setup + +1. Set the dipswitch **SEL = 0** (UC mode) and choose a working state (S0/S1). +2. Connect the UC module's USB-A connector to the **target machine**. +3. Connect the UC module's serial/UART header to your **host machine** via a 3.3 V USB-to-UART + adapter (e.g. CP2102, CH340): + + ``` + Host PC (USB) ──► USB-to-UART adapter (3.3 V TTL) + │ + │ TX ──► RX ┐ + │ RX ◄── TX ├─ CH9350L UC module + │ GND ── GND ┘ + │ + ▼ + USB-A (target PC) + ``` + +4. Verify the serial port appears on the host: + - **macOS/Linux:** `/dev/cu.usbserial-XXXX` or `/dev/ttyUSB0` + - **Windows:** `COM3`, `COM4`, etc. (check Device Manager → Ports) + +5. On the target machine, the UC should enumerate as a USB keyboard + mouse device. + +> **Driver installation:** If the serial port is not detected, see [INSTALLATION.md](INSTALLATION.md) +> for platform-specific USB-to-UART driver instructions. + +### USB port note + +The CH9350L module has two USB-A port positions on the target side. The front silkscreen marks +them: + +- **Upper row: DM / DP** — this is typically the wired USB port +- **Lower row: HM / HP** — this may not have signal lines connected on some boards + +If the target machine does not enumerate a USB HID device, try the other port. The correct port +is the one where the target's keyboard LED indicators (Num Lock, Caps Lock) react when toggled +from the host. + +--- + +## RS-485 vs TTL UART + +The CH9350L supports both plain TTL UART and RS-485 on the same UART pins. + +**TTL UART (3.3 V single-ended)** — recommended for most kvm-serial setups. Direct wiring to a +USB-to-UART adapter (CP2102, CH340, FTDI, etc.) works fine for typical desktop or lab distances. +A Raspberry Pi GPIO header can also be wired directly. + +**RS-485 (differential, half-duplex)** — extends the link to tens of metres at 115200 bps, +or up to ~1200 m at lower baud rates, using a balanced twisted-pair cable. + +> **⚠ Warning — do not connect RS-485 bus lines directly to the CH9350L.** +> RS-485 uses differential voltages in the range of −7 V to +12 V. The CH9350L's UART pins +> are 3.3 V TTL and will be damaged by RS-485 bus voltages. This could even potentially damage +> the machine you are connecting to, over-volting its USB lines. You **must** use a separate +> RS-485 transceiver board (e.g. one based on the MAX485 or SN75176) to convert between the +> CH9350L's TTL UART and the RS-485 bus. + +The CH9350L's **TNOW** pin (labelled "485控制" / "485 Control" on the board silkscreen) goes +HIGH during transmission. Wire this to the RE/DE direction-control pins of the transceiver +board to switch it between transmit and receive — this is required because RS-485 is +half-duplex. The `0x57 0xAB` UART frames are identical over RS-485; no protocol change is +needed in kvm-serial. + +For most users, **TTL UART is sufficient and requires no additional hardware**. + +--- + +## GUI Usage + +1. Launch the GUI (`python -m kvm_serial` or the packaged executable). +2. Open **Options → Protocol** and select a CH9350L option. + * **CH9350L (state 3, absolute mouse)** is recommended for GUI usage. + * Ensure the dipswitches on your hardware match the selected option. +3. Open **Options → Baud** and select **115200** as the default for this chip. +4. kvm-serial will automatically perform any startup handshake and begin forwarding keyboard and mouse input. +5. Open **File → Save Configuration** to persist this configuration across restarts. + +The GUI will indicate the connection state. For state 0/1, a descriptor handshake occurs on +first connect; for states 2/3/4 the UC accepts input frames immediately after the startup +sequence. + +You can tell the handshake has succeeded when keyboard and mouse input starts working on the +target machine. If input does not work after a few seconds, see +[Troubleshooting](#troubleshooting) below. + +--- + +## Headless / CLI Usage + +Use `kvm_serial.control` with the `--ch9350` flag: + +```bash +# CH9350L in state 3 (absolute mouse — recommended for desktop use) +python -m kvm_serial.control --ch9350 --ch9350-state 3 /dev/cu.usbserial-XXXX + +# CH9350L in state 2 (relative mouse — for BIOS/UEFI use) +python -m kvm_serial.control --ch9350 --ch9350-state 2 /dev/cu.usbserial-XXXX + +# CH9350L in default state (0/1 — descriptor handshake, relative mouse only) +python -m kvm_serial.control --ch9350 /dev/cu.usbserial-XXXX + +# With mouse capture +python -m kvm_serial.control --ch9350 --ch9350-state 3 --mouse /dev/cu.usbserial-XXXX + +# For video, use the GUI: python -m kvm_serial + +# Verbose logging (useful for diagnosing handshake issues) +python -m kvm_serial.control --ch9350 --verbose /dev/cu.usbserial-XXXX + +# Windows COM port +python -m kvm_serial.control --ch9350 --ch9350-state 3 COM3 +``` + +Run with `--help` to see all available options. + +--- + +## Troubleshooting + +### No keyboard or mouse input on the target + +The UART link may be healthy while the UC's USB port has not enumerated on the target host. +Common causes: + +- **Wrong USB port on the UC board.** The module has two USB-A port positions (DM/DP upper, + HM/HP lower); on some boards only one has the signal lines wired. Try the other if you're + not having luck with the first. +- **Dipswitch mismatch.** Ensure SEL = 0 (UC) and S0/S1 match the state you specified with + `--ch9350-state`. Power-cycle the board after changing dipswitches. +- **Wrong baud rate selected** Check the `BA0/BA1` dipswitches from the table above, and + the baud rate setting in `kvm-serial`. These MUST match for the link to work. +- **Wrong end of the cable.** The USB-A connector must go to the **target**, not the host. +- **Target USB port issues.** Try a different USB port on the target machine. + +### Cursor does not move in state 0/1 + +Absolute mouse is silently dropped by the CH9350L UC firmware in state 0/1. This is a +hardware/firmware limitation. Use **state 3** or **state 4** for absolute mouse positioning. + +### Descriptor handshake never completes (state 0/1) + +- Run with `--verbose` to see handshake progress. +- The handshake requires the UC to echo back PID values in its keep-alive (`0x12`). If the + UC's keep-alive never appears, check baud rate (115200), wiring (TX/RX not crossed?), and + that the UART adapter is 3.3 V TTL. +- Try a target machine replug: if the handshake completes but input still does not work, unplug + and re-plug the USB cable on the **target** side. kvm-serial will replay the attach sequence + automatically. + +### Serial port not detected on the host + +See [INSTALLATION.md](INSTALLATION.md) for USB-to-UART driver installation instructions. +On Linux, add your user to the `dialout` group: `sudo usermod -a -G dialout $USER` (then log +out and back in). + +--- + +## Further Reading + +- [CH9350L Protocol Specification](CH9350L_PROTO.md) — full frame format, state machine, attach + sequence, and worked examples +- [MODES.md](MODES.md) — keyboard capture mode comparison +- [INSTALLATION.md](INSTALLATION.md) — platform-specific driver and permission setup +- [SUPPORTED_DEVICES.md](SUPPORTED_DEVICES.md) — comparison of CH9329 and CH9350L diff --git a/docs/img/ch9350l-back.jpg b/docs/img/ch9350l-back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86d59a6b437cc45baa50f652cdbc3a0728065d5b GIT binary patch literal 270664 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

*`*oBqnXL_%IJ?97GeZaU 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

~A$VXJ1B#_IZBX zVYGzRJWM+#C8%*_l;?iU47v*hYy$qj|qsSf?gL)mh0|dwlP7% z9ZNLl8ju!Dm*Lj`@y49H2>L`ByKqX literal 0 HcmV?d00001 diff --git a/docs/img/ch9350l-front.jpg b/docs/img/ch9350l-front.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ebe1e37e1c47448d52f8a41b62b04722ba2213d GIT binary patch literal 547568 zcmeFYcRXAF`#&5rs8UK%B3fE|*B(J@wpQ($Evl#yd&ekhrZ%NU)vCSs9x-Z^+FR@z zv4e;^@6UJq?tkvbvgV~+nL){O01%n?Rx+~T^+y$002k; z#CX&I0^A4>_WmB$70083l5DEwh3C7|5*BB3<0FeDZ`vnCAvhn`U5wr3C=ZGX>*#!SH#-IK{{NHo_ zbCQ2I|03`&0{O02K-TG)Wi%-eUkh6&?W<-fa)wcU%&J=)XApA2D!z;ur&xkdocG2f)W8AiyUi zAj0vBo9X{gDuIxSi29MBJn?<)x4_3x8lj-L91>QA%1+wXzfo+$?_7dO$sW+rGdz6q zl%0c<>zRnCn7D-G^B0Or$||aAI=XuL28Kp&EUm2H+kCLKb9Hm~@bvQb3HcNn7XCRR zGCmKhuHy1ILM`w;yDgX0r_Ca0!nX6IJdkn0

+|Hy-f?}>X6P!SS65+tUU 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%0ALLJcxwaz+>YD*|0bA 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%0DH`*>=GJN@vdY(pp=)n1Su4?}PUh@3SG8FUY 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

c`~`+o!dArmv)bZCuCpc^yQ2h6G@7 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

E41~L~J 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ϓ)ZNZF?acoyoA)O-(`amgvdIe3STOf)bT9hiYp=m$P9bjtCtO=m1eRZ zAmH#@>U`lzYbCxe4h3-L`++9Kp?!44rm~e=P>C;x`9S56Eu_Qfm}$KIP-Qm)Y?vkV`AGkTlk&VchVm4Y1lmHX2_*@2jK$_fKTpp-3H!DJ-G@P*y8UG zXJNN3?)o8o;aB7ZIYwI-sa!1OJhsz?m$+Hm^Lb$2wGo%HER)rv82}BDJEy#xvt`5I z05lu^3iORx@Mpsf=BgPp8jpgxXYIX7X2*K-70NnI zScJFQ@x>wFsh7VPH+yqfr(Ppb(-4rJA9XoSfZ=P%miXQDjj<~C?fI_*;>uU9`$p%Z zxlfc8#b>Yq)7QSJtRg$x=hM5g6hp}`aAd_p$2W|JP*w;!r&$nX&(2HJS0zEe-B%I= z3j!4r{V1m=;f6gVgR~D6je~ZBgB0CNWH(_UKFVpWdz4Bm+QBz*0MtGQ+1}es2@;ZH z#0X7ie@=WE;I;BvDtx#G>EPpuN4iX>S5 zo;i7S_1k+QXpaInogeLwRN5rPD!w;LdEf0X&O~`~dkLFnjW8jZ7Hv~Fq7AW1fZ!bS zhe!np5eP$6yrR3)IjjF<*!1g2+@`{)Cz&?B34L}L@78z_FxJj^mI6%$6WB}dS}DCP z?RpF)dqbxM_2+>BCu>&s7CqA)3+mT_8Gc6P#RQ7~xUxnDk9@(0(6G~8^(mM|dVk-P zGSh7W@-2)-()wh;%s6a3)X_vJjy2h)$A|L`PB8+nidceKmbXx{bT8Hl?{sr+9e=03 zh*VW$iZoi;Lr$}A2hlz`fws;m@PPm$#)T!lTF<%}2b!07)=1)_t?Mm|C7ih<RV0g*Shfet$L7%AP;M*f}|{Bh*hObp!MzDm^tQYcm?h zBMYeY;%gE&tc>q$_1{m+X;ZP|y>XAQW6iCQeR0?Olq(~S0}96k4fcoYOk|DYv+dJU zpf5v}4$o4?rWsRrEI+=KIEgb!zK%kXEp}h{|7-4fb{oVC&Hi^_!aV(@Nx17_$jjsg zMA#6saQYs0Ld^zh@Kfg!^a9I{9Zw&zO%Np~;bfzws?r|nCoJ%q!-!#xtg9(Ea#Ww&R# z=?yRsHwb6bi&f?ABo=VVuFF1uy!=>cHJ2%YkA7ty4m zrAskxeDuk_6hzbd1pU&kxqZn|k)oCR_Gg?5TDm8&ChR)N?)`BFlgl5b;fkDivfKwj zMTZd0{k8eYgMA(u*Q#V!3h4~nF^x$a>PsNCO^x8-DZ{tzRwRo?YLj6K_EbCJ5~d=V znP2~ISgRpoi=YTC*Yz~@ks0nwc{~?-AU6ZUI}Y3m>tBC59?KB1Ej0^BYEN8D6LjbW zJl_ZUu+pv)Mv%B_cXfZmF%=#CFVeqZtS;I^j1hP-;EYwyB%4X4lK#y%xc)tvIX!ci zce?Stkle62?TsbS!fIck@kGimOdb>N5uwji;DX7CF+7V8obhd({dqtm;CuJqaHNgk ze_%qWoP|5MxO^6*K$aOFNZc3h$cX-G%V)LWaU-plysYn!1L7u}%2G+8k`p`y9mQ>^ zdFuLej(kp>`-CI%#{Bd5s`c&e-5ixG`|3I=vk zvIQrL4%1J@R89t$-nYnR1X+4Qsnw*t{VYy# z0AhD9awfY{4lm=g`lK(<KVhPJTx8kZ~})yoD`Mk;H;tcuN>RB0vX> zL*i7REt#qHf!i)F#hrYRR2Sh_Q=dVjCByTmG3qG6)g$2!rTEdhY#X^ilxv&JkecgD{sy2gF6vC}zq z4*Cljb=5(II#_Vm@2Ka}*By6y%v8-01fX*D8UlEY6=$U{16w~3;d0=2-M&3HgbL3U ze5`(DC<5}%oQv%+?;z`*#d4e?7lf5J@|9;C@O}?41w2Io%P~Vu{U!4F4|GQcN#vrq zrrqcgNPK<&c(Zn4zBJ%0(J1pHN1WMy*avFYV<8@HIi7KnaC~kC)vkr_pftAX6e}&+ z-ajdO+oG^}VC2I%^qp@XFDHYkG*yuV5&8v^{HBkd;#;96-|~U} za{rW`*t15jO5G=jws9V!rM5+^Jv@W5z_N|Zyb%*1Gh+k)xAv@$jrsr8&8sB^GqMHx zGM!72rNJgO=uj!f2CvFqvNJxA=Io<8U}PqcwaW=^)n`fbq46-{q}|?DpUx&i>S)t{ zBHmk58bQ>dH`f-DYl-?jJe>KyHN`-?N+(s@^(d{OUth~h?wFb@D|p1Y7} ze-N#3)>Q|86V>5Q8yXt^kX#;^#_ofIv6AC}nuPpCcyPT_B7X#qTkuQ?;(Vvs>__4x zizi!s8ae~*G(&S9{x}CD|U9sW0O2XWTQGH~%xkb} ztA-Dh5zw`b54POG+>sV$;CMJ8zz4^?DFL%N^uO_tWD4HLQeQHSvM`TKF7!QmXSAdK z-ZR zx4K`elSzh>IsO;aFm^vbs{6q^FT7Bwvc&H1@sGNFL62)T4{xGgB_Nh9b&$BeVNstU!L}s)(k;!=PAB|R1#mr_D={8>>59uToh|+7%o|9vNUP^ zXYXYZ#v++Sl@wd*lLN6p>W~KWQvZQJdg+*PU3_a_emWa3DCXYOteAjHXtO`g`n%F? zu=V51_)0P&4mTtUT;(Tr>XEyt_GLu5>VcL_3B$lj4+Z%anLX3z3TCoQe(AsW=Rk2L z70|mFhkSkJw79Dk>J(kjJa$Ydtu3i_KpN=255P50v>)nEJ;SbF#Ad2KwFy1`e#IVS ze*wlmaz2&TxX%K8F&5OL`7@{e&+LKPWY7TJZPx)F8Hn5mU3`!VrX}ZPI+mFm`XaJh zV?C?rSH1mXW|Ze$R}C*KxDDRe-7OwGTO-EU#EioPmgO~S#uPof1IMo=q|F!_C!2n^ zvOPXE7PrLJ_py%J-b~rVzo0wi=~z7GjOSBvkz(@knZezssp5Dh;;L!V%12}_Y}5wL zb>+ccH5xb~cm6$ZteC1|*!Lt+s}IncmMzPT+V6b;Mtnu?Lh-$iUb_lEeoj~BnR;RL zOw;4fq&uPgeS!I8zWt-Y!#?fo9ct}obXtpz#S9Q32XnO#d~<}`Tr%$ETNBJLU_bI2 znjzdF7N|Df3j~&U6wQpXzwWqCuNS1SO%XQs%6M0A-H=Rc-|9`KnJ_k?cmkuoTHR07 zUC#f8Gzr~+Q7pZGG<~IvS+dO&9*oE%pc|OG{6qa&zn%e#$s#}ZKg$Ud#4v8Eu92`&J-$C|pzuHtO90HCjaY2P^#}9p?S4y>S3Z;&P?-O$R^)X;^|^N}i%Pg;!+f-` z#82ED?Yhq=j@N?-T6Ip!Ek`rx@+ZHkhE2H>6+c({$j_Jo2XNuor=o-hs*wnaMt0&? zZs*XD{IzEhBVX84%*EHw$x;96Q(pe8$-IpXck6LS;KA!H3>DZ`n2(Qt$LC)%dEOMz z;IkQTS@Q0^xy1Q)b5m?0q$&QYsL0g*)4{WHy|cKCQ|AA0c=9+EtWr;)v=cs2=GBkG z^wc$0x)uq1n1G>I2(PzQ3+*X$nBrer%6$*f*lLVdD$-ed7R^%QjPvkTy7 zT7a_sHnFFh_A9m9c@Cf8mJcq{$Yk}gyhP4Jj4bMG^FN#*2uHZUyiu=b=(k%TNkgpxpi1SWC8Cw zfBO$-UR$ZoBkAKA(PLVrG^LbbP-{;@D3XAg!jdqqtf*UhX7 zQqkiNH_Tp;?GUckd`|KaQ5kx90#{81=gA8R!@)Z|Ni5>QnF%phu#`E( zc%PW9$Dt>v4Z`bmBrsm!mVVOfzMe)|cl&U++|TEHIc|A`?~0nOY<*JyS2i=T zW&ZRc-@rCC+TKFsmWhJNG$sak-52b0(r-h@M>pTRc?bla?EsNs$!iUBk;hIZh#m*h z<`idP_{&A%E@r}MnM@r=TI?fzwB5lLvq%r$ypuOw=gA=)8k!EP=(2fHS&RwI!P|fYn@5Cnw6n@o6AP+oHIQ=%M zKk!rokZZscWt%_@uh%+`!%@WdG^aV3CtTM(?P}L@^y!cI!>?D+Rfqd6&^Df}wNsUj zB~EGIvRjN0E{{thMJIWs7d!kxZ8i_ywSdy*T&!5hmw$RH=j6P{uULYvIUB`izCC(D zB~mT1pBXpY4nJEv3O+mOZs%>B{N_)cc>YTMlhPK5?4Eb*#eEu9@ZE3mp9jlZG|aBk z)WW@8SB%|i?lRo4E2@rGPxflr_T=X?Cziwl90Ga2S4@)JPNg@kGE1J`z3W;=ILVzf zF^5^8YB%7~GIXCOha>@(DHq9{T#&&^Uk0rGMz2IN5pzd@t!+BCHc#ED z&Nq!e<9M6VNvWg$-Cmx9tQGV4!v23amTTXmw-1}u^F&_~CwpWuOB@JqhY(_j+kf5z z`iS+CRSA^ZX#gmAjYO=3#kQQiPBHkD<^`j0GDc}1GH%pCA>-^5=jd6wOqYWjWD(=* zQ6Am))_2KLwUA2knG?v%LdKeT=(1c#q^90W&B1vH!TRK2F1Gjpd?LEA?6=DWFcXlF zJ-~cKaBFu17)3tbD;ZTScv|Nxi5T&5JRufWO)+W2vhM*&>bE<%kEG3b|M+4vuQNlyB#Y?3a)HNvu4P8b&^G$l9>>73fiytnW*0KE z_Whnn+00hN`S~zJn#F6s6SjxA4hD)ScNEP{uLsQS3{lFPps-hQ4}F_X z)KK)c2u@^V`sA_%^ZJhw%0t(?K^>ZH6dIvfbc}#QhCBR$#K_D$|G)p?*v-gL7PowV zzK(wLe%;Jvp85X1trXs?F(0wv+;bA{vC1)vrL&)XE#)HUD+4ySvWcfLe?TS&vAXlI zVlwiOS^z1zl)}B4Tp#Z6_DZig7@Ds3>?u~BfL3h z+>s_~+!Z>0h0fXB-fNAR{5!ukv<1QMxq29is{mR=J@;L-O}UHh{^r%UYcj*4YD`(_ zJ=8Mcw#?PpW2kC7ufgxuLGL#Px6e_@%6$mGn)hjvqGhNl`!@fLX8>rb;{yg%jP0EB z@TAdNJOoKDn}E{14ugos2+>^BKQ{d#*Fw#ZYLvZllfI_;Bl>oEHq$Mb1+)$iu5eNB z?ptP`HicZ|KGu~TMvOd$qZiNvO#T|oWq$%Gyx^LXrl(o|#twPuRlDg<^G{uo^Tc;G z#(~$6nQ|6KC5?`YxtAS6^z5ki|8QUq?l6V3(cL3k>Mh7=tnE$s+HmYvDu-gtYpoXc z{UN%tm~vavxUnYpmRV2nX^~;QaIN55$MwyIV;K>y1zq=_w#tzn}x`6v#1?CXeh(~z&S;e;0Y*FJnje?tze@8`*=f9%Ri z7{4<)RtpjZFkHT#EN2Y=+#A|OE&81HN?6fS_Hjj!W*~4HUv5c;*VRS`7yF*Y@Jo*i+mrp zOHZS>E0@0=`InvM=xZ#z@>lqn`XNa-YVqZQzyq$6*TsJway#irV;7K99RR{)NxCze z1;}As|7r4cR%7m7CHtSFkL$pHqsU)kTbc7}j5(4)6)+oHogbQB=kC;$5Jb2Gc=7of)+IVtu zQwleprAafKiO|^u7GTMM8M$TDxh&^H`EzxN0rg}a>W1LR1cW8)^N*I-0gOe%abe)Z1(?Y!e(Pb#L}6TwQQtNp0`R#h7~gJ+f*kM|@s z8L-s{-3+Kp&*cnGEvdk9p|6AoF^!dpsvYp^3j!RIw>Q^^24k{n2UD|ySueu)DJ#@f zO>2D;Cd^C5IrWp<-zQ~Dj(9%!Eiz&^`JN3J#N+LG_iGdqQtNEmf1z;r@$h?CU&SPU^OT)e3l8;lZO_g;$ti0z8X^JKgHS1Zo?@&$J#-WQWjvro|&HJ{|)zKDw%g zBfyvUDIfR>?NSHqE&Jy)i|H$y#E#35Z}G~3oph0^O>|2WZhh|kv|y#&@Bj2u%Q=FK z@tb&)b*+awpDV#w{?%IpCevHWLh|F`OCBY8ePIs%h;;Uu*h=|Zb&+W}b%gg>PItOp zhQIDaF|Y(JO#NB|c}%*$qBPPFCPH0XzXHoQ3oL!=+e55x)n^`G;34+!zFd#Uk|+R~2>4-RN(<#;4;tb;I*=#X{NEa?*UV zG8zYng+#h8OYi2834qYhAmdx(yuYTS##cEbl6&49-~qD}46j=9F23DU){I+=NtVR) zx!s#IPv-d%PWf`B?_^F%4?4=IHv}#YS#iZTGR{+u%fsVlD{OVaQfTAeDThSd_@MQq zx%g$)?n*C(>zmWnA4P%IL-=iX%ECW1AL5-?mIf|eY$)d05#;9Sg|ZI)%6tCiT2>e} zd+>c~{=8%JOHH=NPbeF@TPk`Xuy^e52ZrJ=j31<1@DXt+GP`ucqrSFL*n$yG9`ztw8*bqO%NZ!fm7Y zC_z9F5dn#zfC!_zCn_OGh`?x+kdp2kA)*MIfCK3Uk?!soA>AFLd*py^|99`_ec{?Q zp67nfea`Pplpbb>6yDoXesmm2d>3C6qwXb;tq=uPYtGx}rJI-N$*ZWY?OV0}v-^Ib zWl+)kyJC()3+P|lT2?FFa(DcaS>IoO3KR!k5m7;YNOcm&)OB}5`Zfm`;d(0r{?1+_ zlq>lfKem&75!r{dBVi%|MviBtEB^{!mw0s)`5$0P-*Y5tg}Stwx8|BHVVv`8JS(xV zTY3@+Im2c${7~#f)FkI#%#q{;w;z_GcyCG0@FtKv+DQLXgSCHJqX|XIAyfbEd^wj! zQNWdOSw15Hr{8um3cb5gYf?Q)hiKbO0t+K6O8svyBQTCGjPnMoaw0mC?y8*gX^PNF z_@A8hJ7!W1hjl(m+jga|NUBd1B5V|k*#0h>D-z8X-8Yxn(cUzFXM6i1P_flk^*8>o zl9t(d5#rz#L*8wyySP*JUCO=vLx`*u+<)n%qd|b-=k>3g>JP*=(PSN>ubjJtm|4>m zQ-k$~^Nao%sVX$uSf;&1EUWDfKRhq`xw~wgKP&iVCmo@(-hXI_l;|zPB6O_m zLOfH*-!2z9>#b&oXssZl;hXQxko+@Fo?`KEM0v2THdS5piP)jK?v9O2sT1{((oZ(f@xEL7IO^YNFOEgnk8fJO7f*!6m(W)hWE4C92fOc7pAHEI!V=X;CfGq`6rD5gT z$&(;s@G87lOPc{7Bn7PY>Hg8L?{s0WcQ~x^2sx(8)Z=k8a>$6fwsL$^!^~F8{tBTK z8XKBQIZ(n?U2#_atD$t{+z%6EMd+rR|7Q$|Z2p)pu{7(#N1jH~x?FFHR{#{@1zo;O zr#qEwM~VNjskNdyjs?)PHXP5cw+&UP;qrocjhA}<%r2R#iu-{;>iZKUoGjWC3=0;) zQ~v=TmT@7xSgtqxYQHmceNz1l^ATADQ+68qiy9QtPuvXU_*UVFglG?z{?^UaxG?V= z3nf-FG`@gLglO;U*pFg~##Z_!upjfk<>-KCGC8*Ebb>(GO9|k-ZO@fxj$)oiqabB& zv3{hMyEgOr--_VTWy!~}c1K&gqqTQr-PL#qO@z$@iwdDB80wEHGxOUw{Mx9tIov}f zq3H8+&b29ktdu1Kk&5Od=QnU0DF08tJVvqA6c{5+Vwy$^b~>-4-X!h zQ&-5{SEw2eQbd<%V=R`1tD~eDb?Ox@q?aKJ3sJrD%n1ssu!xiyycLew3-}#cIh3A1 z?~hsTm0I}4GQ)a)z4fU~{!?JNNE~U$aXPT}2iX0yJjk`o3JmLwr>AR@&zZ<^B zBJc7@KeBqg34A-A($lyo={~2hSjfJZbC*Je9KnPnhauA3)?*wlc^~b)7wk6W+jb|w zCf!W+CS*n8-Y`tn7Odvjq3VodoWK6wCyjK!xIj(72WoS|zDPvz<@q==lu6uEag8&5 zB2tJPkSV@uIEAtEX5snkhLBoI3L<7^5l87ITVNuQ3JY>(g*FC9x}L}E~+3y2KK zO6S}0kBKil)kRIes8|L1>53&E^VN{eZ=Z6r%%90d9R2S zS(kEt3(G{MYpId5e#)J-`iUGY_}Avc%D#ew<_Uw$U)>Kg9M>1AAoT>q&yX+dn|63V zkjVKn5HvGFf{ofM)i8aLP#jIkz#%E~Haa$ft$x>Z4kl4=`wPfld*_ZCKlwW($wMMb z=4XI~ZXftM`2yi~Gm%v|iD?}l3TyMyL)jf?tZ@Pn*7j#33|&LgN>sQWas(1sW?u7Y zDOBvPdcsIESHVA*V^6Gz=`!+th5ClK zuxz;~dypJN`M!Ry@81)p#}^#$4~=F;dMS1ZOaq1)t*8n?1MW2X-y6~>aN_lO@fb*h zCy6g+pnd^AEd8vOZVoc2BcHP$vXTfMFC3_2L4495z&4np>NZW>X#}^y;&15!Gu5wj zWiH!`{SHvf8CJZ2RroJ_P|=^H+6-tTNOZHSS80bZ9J_35zMTIxUU9Jmb(m<8dg}Yt^GA#a-=JskW04Rqk<(d$63(Bzqzi4^j`VL*-MUcY$ev6@-GjhB2?} z^FL|ZQHKnz&U!S>R#`~kI}5#$wf^((Yl+tCLOE|VV5)441*9}?=DqAb28t%kRAM7| zG2aIkj62ipqNDupUPp7Ji?*H4k~D;v3%_7EYs2y#)BOh+RRrG>_Leb0OKUNFXWg;= zIrdNOB}J0f;L?598UT@f7=myrcNU|Cu-9h6ns|w(GKs9H94g>{Q}{yC%aUiKET=^k z{SN~7ns3jGo1Q;j{Q9#Ag-ZuzYRV6NmkoG~y#ZxinZz0*A7+&@1C$oMN7S7*7ax5% zW_hunE}~bn^m0MjMoQNY%F9tI7YvMiXF(qb!DVKsMQyI?C0VU*oQj;E7xNiFHdRjY zgWi;4kT1)>hl|oJhRH$Nfvja%9yH6_#xcQ9Fd3kt`PD+Ae2Bd#DGx#msi4ETqn2{6`MCs5ej@9PJ4^0dNmZ=jpWtF#utI<8qRJSI zN^O=ZX|6b$2=DDWw%N4+H;cTueFJx2=)h#1*58y+R_{G>0+H-> z16urXm=Vm8bqx?;0qf@M!o*;RBAb({u13zV;kc$C8uAykE}g}uzWE~u-~HRM z&8dMo3!7|i^A#z`anrQe4)*t(ntvWffR94sU*-wGa*JWhLXqaoecB?y&^1;lUmW<} ze8JKBci~8~6Iv}1bN^-Dgnx(cn_CsH9GteJFL+B5NPU;GoaVIV)*G!}8i;;A4=B4s zSouE~inbDojy~J1W7UUK_`dHnxG9=*PFp+IXF~1w!Zk9D=7s5Cu9sxP@NT~dH9s4qC$O^RB7!#gd|f#P9DaLtK-{C zRp3)pIC8vs2LAv^R}$6lZ3127osixTz64lSx?GfKUB~Hti)mYu2kvT)S?MZ9m!C)` z6&m;7gU2#aO>Qb7Wt?Tv=Vj8lsGAT;utIj4GmIS%b=YvF(xd|4(r%h> z-s{b9{u|pI;7hG&HY-oiXX*MK*FVZGb?1FOIfkh~wH7@~GjvW?W1wQ2F$@C z6EH+dhuQ#xEYKPg)uj~wYKeRN@MB0Z(F;)-9htHuq3Re~?Q|s~mABa994ZXuhIpC@ zlJUN#mEXfe9=uT;1ps(bywJkaeP&9q+(BvpR0|TGC&_auD-{!(IXhS20Q-@vuVm)6 zV^{&Zbt9|jp_l?z5?B`&N_ocH%z$EE@!At3mbUIEA*2c7fOmasl~*1d%x3xAS7Ct{ zj5nDZ&n1Ey4n}A~jv0FDj^8YNA*U1X_1VvN3m}QfdC<$AlmVog3w?3#dhlfUkkut&H|R-ov;Ow8-Uuwr9tZF z3=y0d@Sunw!-!HZl<$l=kO+OpH;zZ>DNXJw0$Go*NeMW)?d7!_yY}nrJ@CL-r4sU6 zH>sPIPbL&J)ThN+G;)&_HKgCt!4vZx$GyxfI?%mNxiQvr!%ECD45$0PLP#n%{yvr} zfG9Ca2Gv%#W*qA)*5g=!%a#A_mhK)2j*v=hGFMAifd^H`cYgi%Ryd?jxPTRXerWpZ zrr>LCTe_TOsD^7QH8d3x)z&2hG$U(f6z%PwSK*+WAg>2TfC5F(%zVtq3?9AN9_jNB z`b7!(cb{oA?8g+^Z7{|r2)AHv3{3HyCyVZB3K)-t0+O~`PzW@FUGOw&;9q*0|7DLs z{OZj2$DZ|Kn$LWWNJ6xvSG^dbD{l|P{aIyOBdp^sHxg`68RmCrGfUgvqJ!f<=$=X$ zJynhQZ7VNiimE81sl@QCyAYT>cGR+~CqascNuKsJf8yHH;t1~5_*AQ1qvCpJ>KhGp zT=sd3d~wxN(;VDkIQM;TrgK)?lj0HjK$nx?l26;}U1E|4tVGowFhXgX&=US%IxoF4 zF0qk_eJz9*K)5yRc@9u07TqU5+@)_bfh~B33Dy>Y(MfRy0~dCCsnUws=XSrWOI4SF z-HKt^)tJN_!8W#@^99t8KL@VTOl4v-B z!nM1NjQIcfeNKq1v$#cg?tN@8Ij1xZ#I*U`?Tv!=t4X{R)tjvl#0rbk{69`-8nIyo z_;|%Zs~mTA8QGY{C;4sg-~@S%`*`r6IqzilN^qi>^pPLe)j898hRrQ6CVTP6H+tK@ zQatBel=}st@1#;WN6&ZgGCPtL-(l9*D&DO!#}l=@W5J{B^o_0w@2joDPfwIMpaD;t zG58_b^_U6k09t$-LwZJKaK*#?0~d;wu2aHT51E{*mbose*mptycoRFWpDOWRNJn}QLGm9>Iz{sW8`_1tn|qCgYw zLx}iNx8!YKDj0)H!@M?nLUXJPc$mntkQN%1(KWeUQ1f{YSZ!^kf;dlj-T1sh#afG~ zaCx_urLmw2gnHu!g;I*zPY-BU3qbJv7`Np;wNAgNKRL<(hO4kw;GQ_?g!?kZv)tur<#Rzo;rC-Nod0wohtuSSq^M)eCmCnI6Dmb zRfo$fF5wn(kI?C_X1HxHBMKpXd_ah@S(|wuZLw6Vd}LnpJ|dXBHs8IvWm^_M1SYIi znjvQF$*6 zba7<@r7VnZ_Xcrjq}HnK4FoZZE`=-+vG9Bevy?QJj7_6BMfln zOpO^l#OOh-I&azJ`?C+AHBA~a@SjosM140tPn$Hf7bq7z4f=%;k}rEPx49Qfun^jh zrm6n{Dua5eRcxw68Q^vwGDFj8%{_KQO&(cPYL!SN4>F|YzwY&p*rXr?aQ^BUzaCNn z6^`#iYrf7RYN&R+Ol;)d(*CY&_v(w%7E!Gwb7%YyP)i#r^x?5{nw5(c$A5ry2Y^ey z2)1Y%OLa@zS|*KOh|mSDoe_0z_t)Qx8F%Ml@X_;Lg2ktEBFMbP;{qngxyE{eW8qj!5*{;U!QcmoM04tW`Z zrUb*q%1e(fvN0YC(eeZf&+U);2h6abA(vFRNY9dIC;e;tcD8iS^^GVGEf<9WVa#v# zclBf1$Me|k=6&y)L}ZR^CBDa%3c4JzpDJyAb}H-@*{^=U!j5@3Xfc1h$wD{HWmasl z%>h5kM3KfO5a1HE7PGc%wG}?Rqs3Mx51~J;;#3W|PTw$`A(6Cmk!w<+k5EQo<1Dti zCeCywS@VK?`jXQH{ru!%- zsm8OD-)fGQijfDd4Vg1RtowP$nTWtQ7s`sfHf3TUvZ!aG?GEwiCFEwZLf@INmj8QqIh=C)+0NhX$@#)r zXu~Bn84qD*%QGfO_f8s)`%o$MD7)XZ&8xwt!TKj$D|F{9ehGVKVdfhE{}V-X-@;7{ z{ByV`yY>))?`XB704n@2vEwN}z<)EXy};NjCHf8Di3SBtYrV2MDa^u^HovYchP>;C zADz-Npu53z=M)6|k;#KUSETIzlw6piyvkp(_rL6zLdicOq3@!`jhrr3=#lO_L1OFL z^Y7o)H`-@a`=);oWdg|&^=)df21{f(-Kt~8rB|D3zaxJwTBFV-&LXjb(of)Y)$iOX z=0g=tQ5ZO(_)ikk^Etgx?6SHE&%>7H&JO7-vjw%AV0i*he~;%zmN z(b;Hc<7!N(gk-EZXHUGf!px{<(Cx;X<$e(3M8d>oz&MA+23&10_ujiV_L8Zb5hnf= zX?dWGV}G{=5(dQT2+3ZnLTLVY&hqZ*As}#en}lJ^ZiOahI6JzWD_-r^ShAg}ExdNdM<2S6`iUSKJ?zRfDXz zff0VTu(nT5VqI|@N$@mwsb0o(-(C;`ei>X-87IRL!D3XL-n?f$8)AM`&_s> z>6-iYjeR=LN!hp12?6{F*K6qC>v)pF4nhzwAGCga-#5~tO|NQFFgHo@lZ%9F@DCW` zCZ2%%Fbg+rPUr=_7ZfcvGv1y%!Jg!79$(*6T8P5H@ zS(dkK5ix~BnTENQcMz+KAGu$FTp{rpoi&z-T3QZa>boqBtTer8`G%bwx;}T#5Al8_ z{Cop8M=Q@1S|S~e1JdOT?mhCeg!jeYQ98rcbE~S5hr|4-J&Ur*qO0!kYfGcDR!Ks5 zMX0s1Jno1!M6$Qg2Dk8~N)``mB+k-6n4Fe3E^jPDS!6v$jjH5`ty%w&fG`jdexu2` z(rfPxDW&t$e?bYtMfFD{1<*6XCvFV6iR}BUf$5x&ITR^z1OO$ zquP2s6gnzpHoKo3Q*I@Pc~XDlS)yT0^@#DP?A3g@UFjE)J!_%{OIM;$ss&=i9D}bltq9xG>0wV;|e#m;8RA9=CMK@O6GX)@7oagN+To*TBjV8?4Z`c+gblC9ZzWVy8M@zh@0(LA!e(auM#QBEHk`!AT-$F*$ z&xM!u0Q7jJ%HPV`9sutM&kAtOz)L_YK=(FPTFwogXU&=17SX&$A)`P<@W7SX=3Kk} z2gqGpDL*eYM!kcA51EGNkBhyYbB8|TjPC$uU?^K%If8(mq}PV*nFb=&AGV|upZMQU z9(-+Z4)5m-@9}V#iTL-u56|y&Uig_bium_RwSGlDCtSi0nP*#?#UiX(GrnMEqR^HQ zY2tSh{sh})Wbz5WasV82owAh`&+Zu5;CFbm%Fu_ph?Q%~~(OrR&_tsw^% zwS{C%$FwWH>Z?Fonlg7U{sZjmE$eotBgb=0?}i>iTv;ffKca3v!S5x#q~GX^(97f? z@JCtksg#3=d&NH_@ysDJY1T`h~l}zU=-Bjy4Y__~Iz}@w9E-(1&}wPF&tA zjsc0WuPJg;>DzbQF3RGcV#049+1Hi`7NJQrZ#g1dxso|l*0Ay$Zu=Hp$A_`E8u+nG zLO7`|s+DGMS$tC9+~W_6)#vy=f#&iTI-H~=Gpsa@!+3st-(wp@vi)VoefBfMbb)<4 zdj1?hH2#cJX7zI^C0*qe9CE85;VX7wf~WLD$6vmlR1|P%l|6y~D82~$o3V3w%k0|3 zP!1W>n_0E}K>$qwzr0uDI@v?o-*$d_kray}xjVd`yPZzU9@a`k@SYwsV{9Rf;}Q|E z)SrWW49rky;D&w~HI}>qeJ9NcN*xj2mN39X%u0QJu27E+cwhX-lfqo_5ME@3D-NW* z%;Oe%#B|~=nzOsyN{lI7$8q-J`J1NCEBIZ97h<^ql5e=SUD!@qr!K17D&RjPSPU1m zAkVx0VwcF@QWnr2u%JJg2uVs0G<+a_!@}Fa;lox$={x`M>QmL=-jqRVOn$`~feX|0KU)b;%#q)i}#5FAX3;5I|oopraw$%e$Bvo4+|m zw9nMEHskqI;YUAZrwN0_M{vyJi`~f!%hRPdr-_ODCTyYs`Xk?k2MZTy7|Z%Au5&Ie zbtT7&$WlPhFw9`IFSTNvxm(d5nhebxP-Nwwk>Hq>`TEV|kGaR1X$Z~WH_rnf z;0R!|)r?j-^y^@@ncyd{^7j%wO8X4#E+2BaT1c~A?A}23Qo)tv?F2yE!BiksY2VY- zJ7-VhK$%M&ui%L%Wv5{$@J=>MRL`hyz}qJ4ntFi^^*N%S_f@>lM@XKwy=`R-Nzpt#R7)f}^-mS}7BxKh?>)I@M0|dJAPmZe$x^MqE>7-$b^s-~q3Go`Z>6!U zQx~)(4y_6k&R$OZp*Ie9?+y^^Y(j;&zcK^ioA9nzi4TX?ayox(-TGK zqF9SA@}7(k3kI;Q_PpGS6V)EG*F(<=+?-?=k)Ys9DYy8Mf3!^7yB14{9SctW+wBI% z`44-izi~2Mht*PyIFqwa?T!~Re}*%%ycFMaPe(WFAzkw`O20RvPJuy@CbuP)F!r?!z%mlUcZw6KqKAzN~*vdah-@N1Ne@p zPU#-&*80w0SLVXk&+*L=lQr59r=^shJM)LhGpVV?v6tx; zw>E*Y$)g%pX}kSzWw&?S!Y!U*Ju$eS3W5OBeonPB`am!to|>B4-` z>&1tBQqJVH!Xjo8Ggx{8nC^R$WqCAxZ(v6`?b{oJA8e6%Wx`pBQ$@M&t`G9sspjmj zEky{Ro)r9D6k3-{CtjKJKLC@yoZC*ZmiFi$c7%9Fxifd<6FcE*-rIT!oh4aM?>;ck=HG2@wTTh(MgzL|M$D zE(0bRgbs3@DCZO{&P_sDdG?z)FBtHq8I;G(j)Ix}PV0r|O+n9#%a4-ZlB5&=kzS=) zgzTw?RKH($p)}vmc!1~GgH$%Z5!P@lWNu#m5&P_A#Liukg?!N8e5;otZ}#;0^Ys~} zL~x~87nfOD2nKjiOp|Adt-vdGRmrE=< zRmqMY^tCKK<=pS6K5hF|ws3n%jxIRZKXL4YR`X$B*Pxx_*SBNd@`^DF7@=sger2S% zJo!eFOt9@*nUScp;$q|_N=&Rx6k|Tq9DJO7ol1g%%8sWwxW|mkr+#9d027Y;oRic` zARAV@pf`-7H&2=_G$x9Lubz#}S0dx60pBK|)xy0$aE52WdI?7_{MlbBRPa6|e#vdA7jW|r?+?8}|36e&+ z%$z(-Y<<`~$)(|IYsB=xJz$&lhMFkq+|P5+#4v%P_wqS_ysVUbf+5mggm$CvtHjb5 zfm7^qT74;k<&lS!F>`Yb|G4@oC(#z`=W9I<)(5T+1N6C0F0x~tiY*>4iV6q6r8Qr{ z`5z0c!*zhRzYZS|F^>#LeLykoV<=0Loe~fqJzRtZ9!7qeyF33v-itsV3kGI%w8%M`dy+c&BA1n3LpvIXsNk22mAW2%g3)ihDaLrhS!ofDB;7iRPVq8hG zghi5uM;%GJLeKpjI`jVkIo}N}1y&hG5!GUjb|@BI2L6%Lhil~Q)PQmc3jro zN{MFdB?N;I311Rc>>Hhkr`I2vH)Y4X*)H`y0vqEgd42@)lJ3dZTkxjmZcyKsK{DVI zS5CBsgt4Cp(jk2g<{6Whoc6(QP7n+I9nSBhp;aSf6&FlpV98uuM!mmG;CK~eP-41zPT=?ALhJSeblAWjk^K;`EC$@`|Jc;wtaVYu-4w-qzTQ@55d%I^{tp0S zR1}zMRzB$m)J<+KO4~K(4XYo{`?A*)1h&p9!HW`!{q+tvvnKiUi|e$z%IQIzW+ZjDe=6SaF9am+ci+A2 zDy5D!_Q0?GieYA9#|NS-b%fEoH&Oqz>cWC%uHWZTh9^7;e|Ge|@SO1ATtJs8=!by~ z^I|d)*JJ%378jVa$pT|T>aSa5*lV)f{uE1!N)Iq{Jgq$BEcMtm^Fn^Hjn3<-NGq?` z-T!5oL*nR$K-MVvttn{hM!8p2~5s5$=r1+ zNwi8U3uSr6@GkRbFlkthW9?I_z`w!;`_rX|jTJFzdZnW(ZinaRe=fhbFw+%jxh&eU zd1dd3IhH1t3+lhEx9RJ|7TB}79h!&c+TS?mxH^erMLS}v1DdY>+2ZS)*|z_$Hg@>m+r+m#E|Yg z^0C!_*kf*_i;cxlBFCNH-}=vAS|r7Wx{3^(6F|c=n)K~giXtc0Qo$r9Nk_v|aosP5 zZkw$(f8Ni8L-Rg9j^Da6!p@*@Zv_Iy9|@Z8fqARjFg!=$HZF>Vg;Htsfw9Uw1B3qo zi2KMDr$Td~9dhz_OU(Y&d1!vvbCqHnC@6356+2GG`Bq{S&~oph#9K~Uiykioq5|LE zr9x7wg3S^04g{PL?BX6oySaM8i_!{i-}MVqZ{{-N1Sxt)PRwvCq{}0* z7v6VBg}*zJGqUVo1%jMsgQ5+$cu;a&>g35H*ZQwHvJ> z7U@=wqG>==frR84>0YFE5`Rs9Qj&jo7q#2Oxy0@JRYFv``c4Y-RCSQhJJnihbg_=y zbMPWFNm;9ip?_qj3oQ9-O#rSg)4|(E_J?2Q5HnANKFUtv z7d|8h#XS2OT56_kvzC`bAOKWI)bX4&{wM%<6! z#~QbizI!v;t#RX9gICl2id@g0J<+(M+2;4n)Vl{NRmXlWu}k(}vd#L@sbQGkhHZ3o zus*KFmy?h%jOY0h=(vXS=fneTEAfa?<1)rMIDb2(DfkN;-KYL$!@+n z4pY=VUwkEWTVq`nPf8;hTE}ea7Byff;KCJ@ac9dEt;Knelf36=Dhf32gfdAZnS6sI=NFn3J!2f}xxkNhE{ z7SvcV58JiDh=yz1IHj;f+FyZP`@4rmmVd`KM{yeA!so(M3S0i*ucgj!cLVzh!|o_v z4fwAYpi|xQZdO3631q4kiMX--@v7=U(65??FX4^sk>qyl83-Hm-TCxfvcvF}_Se0E zwE*wc^Y!LdyP6!ZUY>4hUT&;n&Bxq5pD}a$-vJ(xcDd$K=ne~QE99C%pu(zx1v2@@ z*Q%?WJofYz#`KEE08~(p#ru3Ocfl zh9vUp2Au&czv3FG`eatq*Rz?v3_D1eNe5qfjBMF`H*!`I6;Jt&B%@_64$>Ol+hYje zoY)+3rmfpGhZouX6A~~UaI|lo?y*$)%}F;RM{!#e;t!K9<)d2ok)l>snoal0RqEya z56^+TOBXWjrStATjKya1zC{Wgy^E6ni>vb9IM?w78W*}(HGVcSkiPnvyZPSX{5EsF ziN%Dp<;M`5nz2-tvcENq!@F)VG2#kYS7YkXD>{|jTTS1b3lr4{+3x>VB=izeut#Q6 z_knz36AQ|em1s2CA{#z%=i?p^I0Pg7Y3a$?Xrk()0vp8?MX94|wtx>4)Xr6WVH3kN zp!ug0VdbQdWUOVmFP3);p2#e72tVubyLSB1&3VnZs~n>d2~zFDKn&H|sv;J7C#$Sr3S>{1QQqmYO9+N zg~VQL?O&bpw9L#eFE}+&hW`QF8L2ogHK)70TH)A)GqVz&@W6qRxBUNlbXW^?d;tOI z2?7+hb%^ph<>~d;yYK2a(6ASrFvOVE;MTL>CJWi~i%ttMnBXs{Yd5{4M?Htk)$Jw1 zM3c1jTK>SzL$iXg_)f`m&Zv=I*}%kvx-Q2z4^xcgU71)zPhmOo=fy(?E3Y+;ZN}CW zwJw$2unsg2Q8UvO+jPiRAALRycu{csF7QP#Ny~q*C0(VS+WhzP*W2G601-~E&-cR5 zhgXKHlYL8O4u<~?1Rt&J8cm3+U8^Cu0%?C8p;A3pS;N4T!%Ied6frL5)33xG>#YzZ zA+o_{6=p79ytK*tv&`mwlSLCtm;>IlT83oDmlK|)>i}jZHpl4SexP#dukAKGOyn?a zEoB8}6pOX~Y}<3TDB87=KlyPDRu^hpNmea&O1xI71W4H^5z4lA0+I>>wwUacRdQNBaee` z@4+x644`gBCEPLrWe~@BE8hBP$|{V)r6EiN*+Oa>QTsGOPX-uifv?exDVeH_-3(a$ z5Db{=lkbg<-~3!aIg4Twr6GgB2O0;=Sp%C?7HL#7+3YjjSt`uU8SU8MOsFWg2S1#y z9;_0qrAUS)+7)$D$jL!-c>- z=?Lknw4`MtfMr&YTlns7)RRe$8ZYfC{!?2@KN6T7GdTXK+K4xR^IrIst6Ui?dXln_ z!hNvm>r&_FAD+&dX-BEpBn;-p}18n;DRoYRTZ(X4@ zlSCv+)D=M~ckeGXiUzNNN8g*BIS;InYp1EMs+JdDn@t{_PBQk2UA<`Eg>c%=)r#ul z7@3f6Ur9Z)n1?l4*jXlygf4!3P+N`^4iRf3355}~@MCDl3iZ4(#(jBOl_ry%T4f4w z0o0N%>#_*Htn~rXSAS#Wcf;kn0y;N*K8E%{Uz*cYYiP>wXPdfJcubH&m7=cMpV@aI zGBRCr6~}hycBc)#O{2TZ)k+4gz!B2(#3DFQcAN~CO8xIUetx9hf8VhC9mvjXmBOvg zpC5X#9I&+Nh+%XRb|N?BVROhGkk25=FKO|3lb2R!Gn)(31+%|Ah9iBz|Hd|dampKf z86%-vyh|1kaB@#qgzI(On_;^#}w^5V_6d2%cnRGAsN zn52(3A6j1xHo5W$)RBh|OJf}`$O3@^%c1OCqTjqr-45s51cT}S?V=NvnnbEU+L|6p zlgD=4%p94;RCW}Y0U(G|%zPrupK#O3xglMe2(Ymp&#JgGmDswn0=ystItY-P?a?vx(UK4PJTz>J|i z)&({oE>fIR{IN zAJ5^B`llt~ZqJ(;6($nvqC|)OZ z>SQOcQI^U5f`Er{;L=fksojQu*qB)H3<4SLLX~PZvr25zSh<-cVI$)gZ+dARCN)K; z)&50gB5-`TN;4V+A<+;>V*hpXOU9L!>UuQc@dBHk%m6%98&#q}z63~P$sKN^RY`lRYJ&^c`VfjuWR)&)h+^fY<*>8rR;g;F06Sv~8 zk9-k7y^3m$8F1K64W=;FF%lsynLbpV`Z(R^VKq$H_NrO#KT^jto=oKSd*m&6$hGUB zb^u7I*U&?a9!lJB=LZT-339zaGe41!^A2r4AX)^|nIk{02C#rUVQNV2-F-8+$k^dc zt21yXw94!#tGeI0yvTJmpGKjcusyp}#U*^!{A1`e{g6qAhC=#3fFk1NZe{0lgXJaf z=Wp-7K(b#T1h#ezc<%#h3Z4oVimiQz+Bi|#&G5$5_fe|u@pa*c{0--IX@#Sy?=Prb zAeYEj7%o?m04!#1$qmE{sULj{FRhhkF>%^+;cB;PUZHw)!ySi8xa4!Qtl)uM_L$n% z4dI3QS@Q9eOX0ZhOzwIlJHcV4;)7lpuh#4cc*hvo^^e4_vlXvd-Hgle|BM6L;z<<^ z7v0@LCze~69|=F9qQo7mS0_ZMsP&k-u=O0~IRcptgNGhT#>!?c9n1pXzGuAjtE{t( zQ{GZpa?J_HK;~l{W22&HqXWB$8yQUE^2gBKZB<*bq(-;0XSgv_?0_)EUCW>=ZUpaj-^*I0sQk!=Ca9OD+4h@mji^Yx#jdbi9Ay;YA9+$MVv{IgP zKo*eJZBIJLM-6OxqWVu?*E=s7NH|LJNCp~aRBgquz!mQo%O08@otGwR;L^{jz8YEOxk|-GAn`9vb%e^TE%E)2oYtBF~M$4tH7q z>0eM%agV1G<7Iu)^Q}|I%NB#D(G#IIz~|d+AYbhl@4YKl2T$H>!`=fZE@v0RU1ZKB z+>xuTkz{Qnj*q3h+QEo`pXq^tt3>aTxOtvvfxy-g|8CQt6DTmAwQ||tANo6y+!$yg zJ5m_rqMt!5qw5rtL7&jB$A6WjOX$J$#c= z77w5uXiYbfX2g9G<{h;9Z2C~gp3k}|Lxj+sKD#!~y(mjZE6{dkmNY<>4+LA%OrqaENZ%?9QhnQCPacjStu%Ax(0Ah?2axLj9q zi+gcFT(p-+TQy+AZZ7lb5azE}Uzg2x!+B(Aw}CUht?J zg@PX!(i<(36RMuC-8O6o+sS9@rPtdk%jWgpW>D537Ipe_ z-mC#;B*;)|Jx^F?5~oH7TOgPoOQj`^#1sy)0RPBBdV?Ox%?3~WDau?F9;)8Bi32cP zUUiIoTc$y?{gE`zH90Z1`3e8^=Nh1J`ho#_u$vfPRBSTKYlg9!WCzX4-$mVykehdK zH&;HpBDa(0yR-;|G@f3t!DX3pZu(B{pX4{(%e#nJ?zQQMY-ACz7j&@}Cido!$Bzzk z>a+>rhbL>KUs+F-2$k{M@KvEh7F&UCgT^mMg&gf0)>ixHWwUKx{sS;p6PB@adHD#C z=F_slXFencv=dRF{d}aCyzdXfnP|*-Eajga` zfS&hurD-7-GiU<^)?ye<7TnPmy;P)TnY;?*S~Ri*%;jaoDvs*?1OgHT^+gunjCA^G}{iVNSgw&1-iGmA|fVUN=b=>sym zIMGcfyWsf1mzd2}FzG+fLqS8%IGNXiAE{!t!OtKV*tp1n!wP{}-~gmtnJb^Wo&8F4 zKpo(&9L$e7LxEvl_XLW?Z#~?oX>Su?0wMP)sJl|{-(~Y12K5wUz0fAz|D))<NZ`y&+Pms3Dye{J!eEYV2a&{7I!jbOQ}Z` z@4fnufaBgx8M;jSGds`h;jDgVGKNMiK7-VsrI;Qoo>8#iboYI0rba2}<&>{0oqS>V z0`7gwcQdqo2etP8sF_oxpOl>mrrhoBjv1k$f8MAai?UbjCL$_zf4h79#TCdZuot!U zDU_yAZ07f#$40_OJ6?_l@)x95He`vASW z5^mdM1o6warPei$qx!B!a;{-!A=u)smXzyS3!9vm;(g1GH&@Vaudo_jsf^lOqIF4v z1gbBiK+%vCXt03J%beHzTI0e4as#Ry{}E&x$O;Z+%tJn|M&NhEc46(x9(4BCC6c z$}9Pgy~BrHNqQ^8R|(HmZwaPhj>zbzwh4a@1hO+E_?Y&EyH9sa9L_%kA<`_X`75Hb{d%RI zI&weFzKYpjUTdl~knM9fJ@ss%bX5W%Er+#t_r})2rN=5#? z-!Oeu7&F=3%-w4}BbNI4O2dmgj?r{W9 zu5-<^%pw0pdGQudi`;(%kF6>ga)@wzs3oqw9NO6jyI+-a{J-;uBD3!vr&k?jTU!Sk zV>PekpwpSd&2>kcW&YM_pF1X!=m|EA6WXQZ%FZ-aw+5*}d(zjqIQ1jB##9E??C(QV z6i>UD#!1oUCgp51NEMQdl8(2aDe9>FDY15OO{$*p4PEl$L#FbG=zR9{!O2$1wuiE8 zOf&DkI7qTAB*B&;e>?bZbN?d%3J9Y!lmETKI#miDJR7oqiea%o5}{F6ygEfpwyU6u zdplYCSs%U6WlDHLuAELFVXaI!78>UI;<7v}>b|yk!=Fnu$|}+w%JaK%Lh0N#vFar6 zo=N1dyMeNIq){Cn!0{Yr<05r*Lo1sZS-c1VU(q#AEgJ8=k2eEHR<$*$36$1)7<@h_xT7ng|~F#TKCVEQrciCTcf?>=9?ZH4Y_zE_k_^R8~i zFLf{BD8WxPf#BZWzWHx8isW~;6K&cCb{Z4VQ>T@KN=JBj*lLp)bv-!9rpWEK7dC%sz4HNbfuZ@#e^oPWA>R{zdu3jQ#9$V#bJ);fp<%Y{B(4(&4AJ_3+ z5-yHxOCRn>iY%@sNZWQ=$Qq-N;g;kQra%m?lGdy=8DvwfP>rymf%sKtyA#o0UZMoq zmT|pr-Ke{MRXfd2{nS~AqTsQ&{?#t;@uo0XQfkzNUED@ZMITLiG|*XzL*Rip_I`15 zP^2bJyz1rP2)!DUY~o;jSP-zR8b?8Fa{rYFMh|4Y|NC?5FCPJCh}LL=@D%eccnAK) zidt6Xn)8MRQfJ&R?C|5Q)8FpTExMa(kC_bO17(vSg|J7kMnOz7T6_KiRe;OcHI9B& z8~5xxg4=fA%u#Z2X>JPu{q72-hq;FiaL-+up&Ap~USVPVnaI9eh9%irtHm+7Hn$rJ z&eR3C>)AO%{*z4p_4X7kJ%GM9-mOW7rk9xPARw^LUaH5#um60 zOXZXid)^D?P?NEP0yW0RntrVI3j^f;5qOz2UiOQa`JB@?#2EZX5ESh-d&B>l@?nj= zNIntMIVg%4E@D{@_u~I_DX$-A$5zI(_#!zq{ki;^i>9B%IV`j6SS=B$du6CW@TxBM z?oAZIm2LQIti-$;P4Vv!lNE!ku=hGXz<8uJR&B{zId_Zpt|8}Y7K8$XkO|I-RV+QeH^vS=z zVGkzuvE1`!#EKQ}@nM3)5u%^ulehwQlp)~s>ej2fQowi7#y2G6U6=sO2P%{l*p+0H z#>{NhdU`ecjVB*0EFffcW!$_cVT9+JBEdaF9x6nI4KKNnGtA__>gfVr8b98|Uq!JIhgF&M@~qHD)%=_oXokD7~TNp{@!p z63*ivH{jw&p&>5=>8~n?}vl{j|chJ8b*?58WEB!lMPf;M0dPSD`?O0jx^zB zRTcN_Bs4be4ah0IdMS&2Z1Oh4FuM8>Pham5P$S>~+W)(MC55Mlq$u9~I{D@aQ7#m0 zP)OaP!{rB&9>9Zs<+-?@G7_XT*>~;k}JtgNy58opz+Q>W_SuItbM5DZMK*N zo5d?DvpN;Iy8&)pH%hRago5DNi$iI(ujBpSJf*)v-gsH!)hhJIe#^~^Tek*` z>~g#H0UC|Uod$u)@+Id6U$Tc}H&I064K(Ep>9bh?{y{C-cWtCk5z*=${~NL@mNc={ z!1+nSp0FW@aI19C^~&g^pY_s_z?^|!yO+W!NZU3%tJ_PTS&f#29~`ir;KN9)3)|pvb{@< zQi5f17ta1W#Qcc6>-8k%M2_(A0DSwb)8^JgZwmH4mtw4BA*eCtM>ki}e*~j1me>h7 zOPQ~{Og4pTRAaM#!tPl$49`64T+Nr~eN?S9SnLFx|s7FyvrzPs&MGL?CrTC9*GYB2B} zi=BIWASqC(YgGVrI>Ip_*tGLn@hjv26L;NY`6+IH-{x4I3nH{=kaAyf&?_Mj9kKN{ z(-fqUvcm#OhS7?({zt%qgAN7$m~~r8WqvzRuq+g89S5+SCqp0OJZ#GLq~%kBi60CL zITpm(fB&UozP?UpnTVCJs>9Mb8qt{qk=Zyjh&~=Li)hW;4+PSu71u(G8bA};BqmkJ zh+y?#HOWK-pKY8RQ&N#%7W?Mb??`ZeE6>TO#XsMPwxTTO!7cEi$wCd!sQVA2@N`wp zlS=I^@I?g6oedRc$w9Q0=HiXm6sCiHJM(XZ6IV+S@#K8O@$jRs5+4@gp!8p^wR_p) z3j+NPOfE0@M}843RNdT$RYzEXGc^`BRi@X$7cn5tS4StkNn`yjPoG^xhJ?KT+(w`0 z^ruC`gV`8*PY2j-cV1jit#1`Uicw%&$aAmr)*la4iz6jjl$E8=2EePldi%HXFAN(b zYgcc{DY3U16xb2UPTYa`=_x%+AYCuW`2z3D>^dYO#c51?nwLN9*KmajYFl6Ao&t zZ@5C?!NGNyw<54?fSK!LsI!NKvF=G)%P4xG~(zZlgpA_&u9h}dLwEd5zb^s zk6Edojd1ma#a)=nVR}ZL-R)@7n{7@AkFg8#>4>{n_Afze+ViGtrew=9K^5q)2~h=} z)fm}`Y@f-FqJj%Ol~JS8+WpX8?8yLx2Fin<#nZH7`}+>*R!sU`xW?KlI_K|v&*`0- z@9aDzb4w15nqpoIKl+c;+9cfgr9aG;!Xl_;|)Pb$ytT*^NvtcgDPa^NlgA+h6c(0W$w- zO0)gycuzb4Yh-yDdl#IArr zhGcl=piSvo-&C_?fkmfbjoA7_(_QqAWy}$*8}_hLo-L4HJHe7Jj6#EBuyE1h^+f%u zZnG7wuYxcVDp}!mcDrzwbkP))zVe{$K?}V9@>Elks0hyV`7*@w?Tooy9;<|9c$|J( zPoi_0v{;tue(df}cVL&r9t#O`_v(FiX?9`DS~ND`SE%=FoKcqw_a+e)%Lbvs=>Ume z!xek89a@{p(R(f|lka&K+zUyXik8Pmc0e2E*;~@gK(?U}oJ4_RKxSCQ%!iR#9>{Zr z46BUDn{_H7sT=Tt2ki~}(ZKf-m51Vq5l`-zQ&CAS%D02tChM?;q4L!U=S#EidQ^xf z;!YYRWw+dA?ATLgZ(dSR6+0BAx78#*pKQBJG&ei4nfdyfirp&?p7Rc8v9@h3a+@QX zFgJKs-hG7Z>2xsLsELm}CLoG~N+Gmn-0@bm%DvoOgO}$e&tM_U4RLNXQAqUQ86v3# zqFShFa=ddxx@NYv`Rc(XHIuE1T+=>(8;qV*SQhX7_`$hf{&J^7Xm`fVOe_1oL64t*w zC7PZ^ii2v>qS}1QcoN@{o3$3O4h7KWc`J*%5zTTLFGvV0m%H6NA$G|QkR&PsJFE$G z+-t>>oVe&RZ91y=Ck0T>jl>s*QL|z#H!Wf|7ID8(u@JIQiz8mOBkI0(jqaRHm4|g?7BWrS`3aQ-QG|UN36VHgg+v>H3 zJ>Ltkp|~Tz|G|;e5mRRe^qAp@3|g?peL%oeV(JyEf|(kbA2LfM$~-2-TIe#YY}W?j zr^c?uE*vKi=y3B;!>skFbAN3O^wGE>U%uOaO7TT&>dT+3;Vgf=2A%OgVD`v+&NTQw zJX7st<@f5f?d+k7#FK%Saj+V%Ty?xYFaVZ9xu!#HDsUm{jqj2um~T=!d|ml5H)Oon zbHtwhxjmMuo^=1++OXRX)zI%Ww)~_cFt3d`YW-QUQz7G`AMk{6kKeHG0PbC*VAs?b z5SNOl7e%{E##!R~zAvdKcv+GP&=v&ElE&OsAfk!bRSILge&a0Rjh}>y&WLdl{ho0b zYFE_d9g*>>qjK5$lK3J4dzaltSw`(_yEsxffg}XyIL{z&+p>`om(DhiRZL{AjT&^H zDK1oT6M)TKMQ}%i4t4hCTDi(Boc0y)8`<$H(%ejwmvZSIY!>pgPA3O zx;-JK>BsNYF$bCXvZu#KbRIUlDpQkXZyF^4HnThb+!lP0)!@hpaUSEYs+m8sp`eQ+ zymdZ1)$kDM`O?YDMQsa9A>owv6WUkS@2uKa#Ta^^EZ&RNPN%fRMZ%(8{0S~9LedW& z8;Wcgbb_8M(1XoupD;tc>ZFKa4~7VWb@b!oSR9MZDoPV~Qe=Tt#-4tnO-qaLZ=vCZ zA_$?Gc#n}^j%Fb!IZ{$`XDas7-B^vh>QZ>Nh+Q#S;p?Ynvz9z(`N5IiIJWEFZgLYXT#{9!7;i;eQ$Ux6`(;|yZF(IXxf zuOalb@gDq!P6AKfj=jK>t)c8;lyAgfR8Lb_R9iv^(+)w*>}~8bmv6oz!9)+=)t(S# z2mei}{8=+(WHR$eo{4^3a^D%OG;A`TqGbfrl5V_VUAuN2M*l~EQ}-n-g1x)U>a3}J zmQtXb!x*@Z-3^q*#$E;VbsqV746qsXj05gL({~>yc%E}6{vHLpbw3RRBRPzZA3Ue^ zeqz=>qGlz4;Ed|hU-S+i}r&scRkcQS};k0+bfJ^zqcbE&?`)fQ` z2gx6S3UPQHQ(n?ruGez^jtht+(X6@7SP+o9IMPAV0>)c~wpVsyTRoqjleCoc?k9%U zK%BTP#p80VsHeEr+!fb0y{t%(eOI_0E+<+et$i25AYn zq02>W*4bex5mD%gwKkTUpWM}$a4k{~=hGKJXeku`N7|xicV7F`q~lZs!@0_Q!B>$c z`TA>`YfIoL>$E?Nl;^Im#c34J<6>XkyVg#jrGAfw|=PENpx zUHr&!MEyomNz$z|ghhp?4WV#bj%VC9o@Kzk6^b#pm9nt2AL>Tipb<8+^tbPLF(AOA zxP4n(KlB0~ox@ev`B(7mW<$-~mlWhUy_tY;+_4nKYWzQf8%82L*@n%UAn$oJPOu=o z{5)#Ly1~4}Rzam}fLa!7J}1vMIVB$-_N;d6yiVR^7SMnMqcY20oWHTwYUBS(4f{rw zt7u+@`*(EOB48TpmYiqLG`K2Feq(77q8ob;p6O5DLnSFEuVXPetJC=0#!C0^p zl^Q9N-_}g@CEMQRiJR7Y10&tG91ZGrc<5Qhp2tJysy2 zu9K_Nl32+t63{Cy?K9P>USGH?A=>&Jb1nHSE=)R@y!TcqVJCYUn%>+mwM^@9$_ONz ze%z+rJYL1gLP~I2<2&P_3+=I!J}35fUyTP|?+t2YxeUm2gqq;qq2g`Mtf>3hQko3R z9}|kkv6FVbF-GN-`Grti^7zLL4e6<(GG!IR*mEA3(^HHRX5$TDrEacBJEGG+zqec4 zk$*)|Z~%nsv9L-Q9KQr1-wzc-A)>0ChjKWz>&+UMkJl*%B>SNvh|kY$z?|A(_l=ZK zl7I(`OfEV&>Dr_{mE*io1e~C}h_}q99;t(qTqN#|?jSQ3Omf@iRr-+s7G6&07)GEH zp{t^o1@9%-I)p-#KkwPYS&KN9h@F?mK|9lHBljIZUsH|R4+@ENQ8$_m1e-hp%+$f73G(UX*Ha@ zQF7rg(|XQfX1g3q$B|9cZIwTS=m`;wzd9&6}5!qmR=p+FdCn?0mN{u zcubj!liaXVTLi1}(+hUG(S?aXR&OP<3E)6(>ukWJoH%Quo<28~tonMJXwyi!0eCrz_7pSFO@STyKFsteuh43NTLq3)jf zCm?#%%EBLfQXL2f_P}W5hd%ZAtP}bscF$^Ni5verBoH)o-Q8r<1{N)RA5pYBua7 z`Teu*jDnQ>(w=m)8z19B>JII7r*j2P)&aj zfi_RA2FC88+ZsPGnd@Qwj->>P{w86X2S?*Nsbc1hY3sE9{+DCuSvFtSDhVek_E0m^ zetS6{A{cDwdoGzL8jw$!!pIqw5+ zL;(tNl)<)OO&sF`)M0=)bm%Sc@8SV-D^#5qWL)m{**x(49YqdrDQyt03%)XPh=Z-x zq^7K%}6eHoRU*y%D6^@U-JInvt{+isPb+@2;% zFq*PFi??%tVt@RciB0;c*s;&Mujq|IsVkrV2>$*$vgmhfSw;y(bcJmJ_qKI9$1vFt z8`}-$&Wa1OI5|_rw(373nOoElKf5-{oZ$1UC+r;-aqw^}uaan!OUIa`n4yn^^ z{7R0DmKYDRkn??8uKo3V_;6|$@A)?M&31YPeZS=$Bkf`t8BXWtB>a9VXacu3%A%;XK zv)S~153lQWkE|^&V(?c<4!YJ{YcFGbiMllBZ0YIxz-**`^Yz8u`fG91ooda}f3BHJ z@MP(a_kr$aic~2}REyx9-Q4O=h#!_trXM|AiA000!#%fJ&>S=ivG`#3(6{AWdKA~6 zGJWu+4El+Y(z$Q^D~(`md&b^nFOz=o-J1)2uFWjDiWj4ZT))bgx$;0y2if?X*ZV;t zg#%mZ>U(#bnpINKK5mfb!47f&-8~Qg=tk}K%jEKjDs~`INJ-hgRl$BhONw8C39+T> za#e5;OEF*+U!`C>cd?aM$}w~Jb1I3YLBLaa$0U0zB7p!DQJQw=Y*WhRR?0{E>-ya7 z4X*4besp3xcfRxfnYY9DZ|PY@R5E7+(sx`ok^3?-jVnc}337^C$B5yq{|M-vcQ~3{ z{w~LsH3|qZhD)&LLB%xibO>6SY7Y}yNs0@z#wDhkac}`)k7!Y&oGjziicley8t2)f z$y?K=gahArxVHjk;Rqp#%l{Sl+=EKHa9LwhBGu4ar110kp;eXbMl$E(7V8sOR|fZ zVD-@+l;=ix8qbVt)IW;fKUx%P8_7alhjYBQ$i6UI_ZQp9v8;9pyzp8Kx8o{wDSZNwc$L7=IQ>pDk8w4A;Z_*X0I8Nk0>6nq z{tA(yUfxOw_AM4`d$MZInSbK_^Fr2BcwsUp0yDtkk=6(TyA!~nDY~DtM-H~%0Zq!h zS_BKZ<5{fkAfO`n7Lt2f#E)c2pQYe6Z}h@wpKv7lH`v>6_r`bXnld*)2o==4n+dSp z$QNC9zKdBFiroi3b6y(6p1<*~86&5Zrx&G0%p!k{Y17Yn(}g{U)u9OQ6KKNZJe711gNfRo6-M`fj>tN!h$`29Wn} zZI|e*#i>Vo=>Ejbh}pi~Ss^~F5E1-5|F&a&(Q+W%j^NJ9n$-kpH2Y(lhkanRdC}QO zWnrB0iQ%ft=NF(y^Shc~FuFu}roF#-o};Dc&n6t#+J|IJTf~67XDrl# zc3?jDhi6^E2rA^h8*3u55=VkiEVSL}9fi<8Cf9@oHrOc#M16{qek$z8Z`b=P0XuJ! zn4yzh4I+|==na(xy_6sJb=;imwm$U2ydYa+&zK!{Jrf*{^I~XVD@mNdQN};ibzIGc>sP?sxPC zOkli`6^j%B7y(a_QZ}#Q9tqXxyV2tPddU3S00bShWuEnylj( z;m+OI!)1;(eUXLbfD4X$Mk??y9Wc*2ms^Ht9L;fDPB1`VB@AVLe~ddA)%kd-JZX?j z3U3{Q_Ti`pK?~l`M!zyq9;k2-9nWqw_8=&}tLTPgFo?c*weBr+d1`0niK9K#n|NEd zr&D7cejvpPV0FFtZ<3qvh;ex13lL3@KuT}qiV!7`fO+Fzv4T^JzB#2o>4-uJK9>D* zboYBND%&Pki0oM zKqh%?TNGE0Xlj+POhJ|}rw`fFUKi*0ZHvjgmGGOHCSvxU7cf zfU8-T`>z~rrBCG`j}2brQfjcOkC3SlC<`NH*@4=Cu*PUX&R4AAUpx7+lMUw{rQ_?d zV47nbs&tqRMrUvA=dkuAE4&)RCDB;ugotn_Bi9X=pHYvB!qCcoyNnAEaqu8u2P@0S zDLc-NX#(Rk)pGGJc%dB6tm1Vq3H?zvXT`s@RglaPn?B4k61Ese(hsq3rNdN)UKa&= z=uH(HwpFZeI28uN`TH(5X5Dl}k_hFfgSTtuBJ2g8$QtR&tlxu; zgB`r-!w=dU-VHw@@Tr$o(G);vc+tx7JHn1QN&J!^cD#SV&-wN!E zq{OQ@W2=(lFqWbVm4MzvQk}yO^iVFg|3axt7@mjDAsf}T>)wSgzz1qNCa;}qW%r>v zDr-ifh*UrFpX@1y2LaD#D%~tSJqP8d!%9^IJV{LnCR0}+9Z!-*dIVl1!4wUWP!evx zG=bLYxa5JSd@72Ec8>D6g~J4x7DWB4=|J_GI_B0n)BHBS`gT4$?6*Nvl97v;2xTvTxDJ*DEzLe8ZcMF%d=H4PZ0>< z`%p#B>%LfkM+NVbe@w0UY9qbHYJAxi`sSMAMrroo8B>s#mGtw&_Q>CimqwR%?IG;$ z&ZpJG-7j7${Puom2iNMUG~G4Qw|JV~f-aJjpNXMWBeda9xr&2HS9sC)xmOPDQZI4c zhcY3`ezmYuB5jUxaDJ}D~OcMi^>O(x&O)w1UFBDOVQ0+x?(tz|eX{do8HBsFrt zMT37w|B*4KBD9vd{+^MDOpS(e_(#qH;=JZt1iP!}I(DtXYN z?nt&R}qQ+K}O1$O1;Ve5Iw zB$sqf?mJc~Vrs2> zm5bc`@%u`ldT;Q_@&x#CSY0&6p_r$hKK%&sNp?MQbMug9gz=Mqf(WU{4pQul6hnvQ z#gmNza_h$<@*6|khl=k$1Gx?h4mMkZVw;7}#dDX!m(86nzO1_uG4lfA3@wNbwpzVX zKNxod;f)MsMro>O)_i^VwO@v|>lO`PJ0FlwxeP)fXn@jV>d#zQ#@Kp_FP9q-*+#v~ zat+TQDGuXieu;!)HuZ~OP+{kh-U^PNbifM7$M}UI%u;+ZRPKG>ypyNIP+s-D!(H|B zvu;$UkgrC6gx+j45e-3ppwz;+)Ly@U|JNYJ3aG=^9LPuFZ7OLy`pJbAQzv1uf&2$c z;`CI60;DqDl3ko)mCW81RKZED+(s%9l@w7FkK+=qXB(&JiKD}ZfnrMIR$Ad^#{jJ^ z{Jv+a7t)Th<4`#T$&Wpj)n@srCRctm?PD!gZ2+)5J z^>)t&Qa%coGC2=t+%zn(hSUxOz|?1L+T8Sa-lXWg63|sjP4q{Aw(2#E=wikO=|(EJ z`<&RRx)ecchNfyy(wy(3t4=Ezt1O<2C#~5j&C@inrn<%nkCYDW+`35pj7W292tep# z)UPPqi0_DVZ*cpEF8UEwRWKRR5ws|eAB5e4pPPODYqAj)a2KVdC7)5DY8~&z)>7^q z%(@zUQEt{GWim-sM4Mr)3KY6nXl7Rh`JY#Q41~_u?uv+C`*v5x zif7KdDjoM%YrVvNFE}He{PgkX7z^p&XYL(S*3iIg4AC@I8_@L%*+*P!!+IVa^`g?h z^m>w}*RUHg6T(Ha7wa1O>Q9`pF zV@$nI<+GN2M|XOvX<~N;1AE^+B>g6mni8%-o$$>UQbHY-d!z@CXJ?P8%W4&TreKte zd0K{ zq`d5_F&k1mPEde6W#aU_UYz~&f6#+f)H1jY-jg=typVT#~Bnl@e zm_)cb{4oaB9%_gS9LLGnWfhegko(}}t|eC^F!88`q(2J!*<=|3wRY z)JR@yq4}KPcK&0Zs_V9T=2m^iNw=($G48HK zkxR2N_CK1g|-BxfW2;*zP7_!AM=SY8V>Q@Oqu8{*)R0R5ueNOEtOuxT&#X#R#l z`SK?_r(N5*xX~szhaqNHzjHas9o@y@umI=7r*zi82wU^Fk_zHZ$4pXw27UDUo=2U= z>KP0guj-o>R^MK47I zE`ECmU5W&$|GKbr80JynEI}tsPk3_7|LPR#UKvIs3#r`PvIJ}WeZq)>RO0=)iU z!62YAO!6&%(xO_JfP??0jsiffst)?(iuO7Jf*IgP%Rd@u4*tQKUWK zXBuj5lU!Z{W>VK5a&iV5E1$bzR%9ZeOJFRZ_d>2U{{?QX{bXmH-UK(EuK5%2;xztksX|)~KlJI+_LzNqLjp z@#$3eW*XKF+(odv{hUPMyy#T$-z1v-nO{l(4XW#yTks`S)P19|`{AiZ;|GhUgKJhn zux=HYBg=mTa9ACCaS2OzfNMm4qbDJW;X>lh0Kxg44z5YJC#fcV4Jhp<@8Hl*Wqit6 zvl5lbiRd7bC%2V0+wHnuF8AR27OW>ucAOm9bV_V=R{z8NW%aU1*YAe}O><2H+Oza# zI#U}B#=<-r4|I_S=H#jGnzBY0leP7Mxr4>RSGtLBMuP+tbkKAzk;UVLF$~3RK zl^skznELeN$OR4Ii(+!c9n}$gV_VLsXP7~|`SSF%;RLXyDn|pJ91j}F&tw{{6(@f{ zU^jr?!(dE%Q?WKa`}f;zsZ|?OKN9s_R1F8 z7yRw&Vn1Uo!-|4`dxF#Rp&QLA9|(|UMM?|{rmb^GhEMDyAw7&g;2wKcJ0Gseojn)v z!#NBm3JDUEYtL0c0ULM)D1Cy6`C>lzA*dIGv09ZQ?EyTcRP_k)e1ev=J{J6NLfmg* zq|GgO8xb!rJR|E?(2<31&9YlEhKtO7Mv&!Do=3bTA&+pn8_2 z8tcLQyZ$sKs$2Ts49w$i@9D2hwg;RW*2Z3=7!oTLA@gG3C^#~v;9ni{SJj91*-z+@ zELB26;Nk4%)M$f8?t`aicBnlB&gjZ;IhSeWz6%XyZ^WZ;Mg%jObAhdFQ#(N~@PjUv z;ady##EoIPy_)mjoP!;(H1VHdCsR~?hsm*D&-DgHG|S+I`+d? z$WZAQG_BBlGxH!ve4d-D9dTILuZPt4bDbKm3n~wx;I(2(Ux=ZGBIcpd?LGYAn$ct9 z;{wAW`6cJ%g^J(3V~Z?*46wZqvGQHxqg|FM3?kVU`;LKuJQ+(lQivM=X3<+3~yeT_nJeRnQlI6U9d*e0f3UU0-@9^jF^xwfV!TlofgA1Xk z`N9ZU%5wh_W*OK=YrNNu&&>1s+_*~3tbPr2Z3Wn&sy)(tE-8WE0_T+40>Rj=wd>~kXgk)ZHRe$~abSbP z#@k>hQq0P=9rQ17!5%7eG=QfGa#+n@?-l!AGg$W|NaN%w@lDx^m!x@i>_O*hXRz-h zUW{nL@>{J7+NF7iQQnQuzJzM%91*bKxxsC|JYA^hQNo8+K}r+tfD&gfWk0e8c~5IO_xV=uUME3+o}#^(~c|{1Ui756hG9VOQvA35q)Wk@T9HolH1? zm6b|`lQqKfJ2n+Xh-!V9^lG!$;}J1tKh7+&9_e zxS4fm!M!qi_fYF&^MSOI$Mar~B#3gF&MH5sVU;RwryH~bR$JPKOr$fdNxq-vi(&m_LVM_~}(!#1Rk$|r(-%Bd8?SQh4 z_z=OKRCc1;zs0SoYx(UB@w#^!crL{o$XMeD2TKrTBc50>@V)5OEYkK4hL-G;ul(-Ukjy2zCACX&I&Wu5j_LC8#b*66zK0fc9Yz%HuIdY~w^g^*9V4!LH$d*wT%*6f|3t%a zGyY#?w9*f{W??x`mghTeP?uTZAWrx=*y|GhE`blhP_AH z`utep6bA;eM|7^nKy)tl$D`t>qRZVFLcO`mMn0o?`KBB2Wef0q>I*e$nGTg&^N7Gd zJuaNNc~&|~zy9^O=`%3_dvE6^_=@c|)t5rf?EKju8_Fm*N?{IQcmT*nTlvh*f9~JJ|F~zp8YzlVm&~#F zmdnFIn;{~3RIXP^9fMYkd+R3CiAE6|^1 zAekj|MzT-YI(sSvlj%FNv3IpwkI~87K+3B0zVK2LKRQKfa0zIzAzGlPT(2ODWr794 zQ(vm-keWwPd>CYN6#pVz&*UoK?Nbt;_$z<@=f(#r9Q)Y-o9dhZpZ$LMng%~RHEY8f za?K*4!0n+UN0a`>h{(euRpi+q{Q-S4g6JTEnw3f+M?`2 z<-cjlVOs zWT;|Q(UARP$uf1UHrG^loruuVi34lE*xSgd(d+_Yl0O6w?QbFcOKnqb&zL!?WUNTZ z8S}QdZ*TbqUZ<2lTr%ftGE~t~p7d%$b083FZ`!_uLw%iUNaG91(>t37Cc`vbUTLcdVLW zHK0$Yh!3FZPthL!q1AajcN&yFf;!!XrwI|)maAkjm7m*>{%g&xT&>D1dJ(jKCsdn4v|tOIFf5< zaOQu@X`+SSxxqvK!AP=JK^S^eZuA{aU?IL)c|Slvb1+0sYE30|ipa1{kb3g;-r%*Y z@hKqxlG26B9Tk59I0s=YeZgYCx}V*agrp7-XYcF7r}6YR7y%K@8YM~1=B+t&oU!Gj zVdfEkf7QgcEFB;I7}e{gmvHl7G@{<%noH-`7iLtJzt;L;Li2wFvW7#mI&I%549FUr zdyeFgOoKabgLkZ8(AUy;?3tvtHqHkT z>e1k&Ocw(Q{pmxafJi6C5$lg0ufRYN)Bh+s4@ao~KaP`(kUcYtl9idwkwS#*J&$B( zWMz+x&Kh(8gs}a9y z$7_F>c%-&D!^6U|2MIFv71x#2ch1OsjCaq(e%B>ZFfyZcSDOuq0wB~pX5NpA1l`GWay4M?+ zEA`2^78-*!nOgYvCVk?|{!*!Ai!^P>XS5!jdJ4!d$P4O~;3nj8vY(V~&N7H5}$N*_Hn2iQ( z*-C#rg~IX2v14aoRz!==cM4pqR8fHys67PjavOn zqVJDC8wKGCB4%#CnvF7nqpWl@@vK_a2WyO3=O&{kThkJxxAAJn zYIXP>v7Xc8gbQ7ot}kx;R0$D0#*W>C1WH}ABct7A?~yB>GXKag@J5wV_q6I_eb`g9 zxW95gJ7W!EClBcy*hPsmZmL`QPAFM}k}Je^4|H>a$5OtB?(=%A<@ja1fc{OiLM#Ga)GA`e78TDO4>sY#<% zd#`uTiOW}PP<@7-d{#rDmR05PSC9yBZ~B=u-MbcC;$1|tpm7v{OH|H*XvO5Mc0^>Z zga;ys_7@BcM?B9TQVmth>X}rn8L&VPOmcGW|Bg{quTfdb15NJ;(k1hXw488sgJ;-(KFudP3`N6C(q6SGk>&&d8ofqat66k0hJmAB#r z4Jo^#IgseCe-Rcy2FY>ydWfqqRU{C;-$?&_I1%)>99LkctPq;(W%$hF``KR88$oVF zi*^33i$&Ze#pCrd)mUp%7WR*b>H15e9nZ*36NlDeF5q_Xg6smZuk%*>fzJh~`V_}@aZ3& z(_JbhOL7^#P68`l-KW!Vm@aT+@#HO7&Ct>R2#7@BPP$}kPRi-JO2P$!=uM1od>l8m z$8E(9JRa0I6tCbK_A%`7zhCKoPWFGob;4pY@)kxWHO~c9_V|WUBBCaJqD=4dXZK*RkxO9K==hCe` zFe{O`Nd3AxO08QtZvAAD9a&fJ0SZVV@F)_J3o_Y>#WDGsk6~3YDO+S&zxkNHK-~51 z2Y0&vbv%>VV@%`Y^A?=Tc(Qk1;w2=Vm0E9+`#oc4_#^=6CTnr9^OP0WOn6hP7J!%wqY=cLt|%YjH9bBIpoQ@E4Ppc8*KKqxq(I zV((#`Dzoo#!Z`?tP0 zRpy<+Ssk`@QsH9XWc;38b??7*6ky0rJcx5nn`GYIh8S{D;zo#*L8CRc}#q{^FrN9B=-(NTJREvOX!;pPI}xpXi^Nn5TumM0kfagRqT}8%xSyBfkPPi?tuXI3Grjhg zlDKD>IZ1t61SwNG)Am!QB;w#4QC ze$J^V2;KS2hrecjyZgvgFE{-%`y@ZrDa)o|@IX3h`~JFk*#UK!-BNObwo4Vowf2M0 ziV{=*5m*b{_DAYI+h=x8Cgl0fazLu1dsewj_(&P`no=JzYBdD%nlF$&peD*oUH;8I z`DFhw8Tgfr1go{z+1|BraWzk;G-W$(V8QU@9T5jrK*c=Mob;c}8l#TpH{vzy&>Zyt zbFH=Mz59p`S~otPpmwIGi2{NS{$gj6|!rxPBz$R#ACaCuMhQ-nk<=d++r*n(B8aag(A0mqd*VO zPP?I=rTK5}@G_`It(kc17~zEaPD1XgU+Q_?ka8P7_WG@Oi}rwCH)kJ{TX za*8j!YHWI(o>H&87d%tX$cWZCJ}B}Z*mGaokxSzz!QC4S z+gM6yD%v#qQ+T&Q2h5zDIN7RG%H_FeNfo6^O^3DvivP!y3BqaDL%>|TjVjJ zrR~M!MFEw20eQOx1a*zNF(_Q&S#|3R`k-r*QFcou`0=}|@;i+&=w@sUyV1M)=HZ;+ zA7~E6r$oZGaT*U3weHD@9Z*~67aJruPdu_&lU9L};pFG~lSYJe(ucqGaevsL9U^5n zd=Q%NzQd;ewuLsFz2RSL>2SrTgUl!R(+k!x(32w5$dEv(pq@a`U#s#~B{ zQzId}sHy*tz#jf3J(LR7jxjOndSBI4I=5nbVk4I0{*LuJL_EZ`XR?%kS}7ye%X-2O z6kO%;xK+O{JVJ*`o=ewdsx9v+s?9&G+Vy3|c*JKEEgM7@`X*f_z{=SQ&bFgk_OZyE{;u7SP`7&U{Vw*jz7TNqeSc5#dsj-9_2xeU&6}{k2kgei zTK*EWk7urPsJ=j8y+ufy*u=pMu4Q-a;+d8#dl}gwBq|xIyJP)r6Xj{^5ZkYreN3{; z)fY)dbjCQNMdZU5SFZryQfp%VyhIct6Tw1BAHxoTb`^M81B*}!wwM1A6r_e-P0z>S zXW)#&+klEzzsX9Zj%b3Rckl-2l>2QSF{r1DC6GFitXp){YZ72 z-nJ*m^pwZq%Hio3l~xQN4XU@=^v(dUi4xOoz8Z}SDKBTcS2z0DIxh6VLg;=+4mezF zJ^}r&(%tRrPci+$I<*oB(szgd6vc4mMcR)XjT(LzB8z{#uM6Z3e19j$zoPkuI7f%2 zL`UrO&}u%tdSQ}bQJCI&qj#>a4T=` zF;BjE`lCu^1ta1msyh&<9Pqde9ui$t*7(3l} zzEmZsPzofmA?Ds# zR4f$gKu3m7#uyf_-o{o7^6;moQ5~TxM!3cX)WCOrCxK?UFhn{4t(JKGeVfj*T; zjeBT#oq+qYpOE>Jlu?^k$y`Ktx=9#f7cMhYfWYAySiec!W8O6ar9Jf_KUN(xQR7^e z*BH=rZ=8=CEq={FIH-_8g;n)2>YAc^3zfaB&N3B_+L0OXF-e9=?CkCGf@g{e%+9|& zqdC{Ro~ikrgC&n)DD)W8^cvn@hD~P0Yj#^`?VIcppmgcw6S2))=9LmH#paRR{rvkn zLS(!Wh%ifk#5MS4c470}Zmk2DOxw+AE&7Y{T#Z@m1!F89u)p-~o!+Pg?xfSz!i~Ra zmsI@@Ej;Olh7b5D#rjwXAfl9^tqfb05@}lUrBRZl%znYpIv{n9gL#hBN^RgE5r_qwgyTaOdkN}`ot4^3SZXq%RgfA3QL zdaNI7cUC(nsP+OvM&1FP)pYFL@a~hnnwSD57ra_fvWt3ITK;{4K#|(T{cCWKE*HK$ z3-LBwm+nPgd(Zw14GiUQ(8CGp?&Tgxy}beWBKx3#!5Il;%#qTpz#E1x0# zBRj+6A-e&I(JVfydxGnr>Bj2q`!42|M@Az{64TK#C&6g|EM3bEd1aalPq-6>zblm! zLijr@mun!iumuC(GVSQfXdy2xf{3|sm97Fj!#_pn=xKmT)OTyV_{brt-})hxMRZUQ zcNylwb$>kosO3Zn7Y?$s{Y-^~4EUrO?Dw!#Lvl;v{+^u&{0mT35r7YmGw`#;jU491 zE+>3{lFzF#Eq*^PDYdFbxX-y4a&{2Ef2W-R)E$;%TNpfQ`lv@q3FuUhf@~V{V@{v z#U7m4TDGi7i-ogc4m?vafCE@Poqkm8cgUR`C9ex9a_zpJVL5FgdtKJb(dxR^JuRx zR?7bo$c9k_KfttXDL!w4QDKbnXF{ZO7Ck(K?Gcb?R4P@S5@?&-f=jLZI_FUOSqoQU zwUpJQ3SVm$Fgys4=%B~?hxYv9EX5N{9|0A5hkCV^nY3WqvOyBEks)P5rCBtv76urE z_(?8?U}d(AR52GnYg0Qv)cy8OB}Y=lU&cOzXZ=fwS)j=X_y*u|X_4G%6*dN`u?9~IP>o=+&x@krXsKm8Zf%Wt^pN!DHc#c^s+O%*UuFZWDuz&2HY9llnU1cGz zUzZqCvZ_rh7j5nEZ9I_ZQT<5NHzDS6`9XHi~Aw2VDg zkXBM8iNnY+vEv-4{v2CUxndI_wcvuMrMTZien6f=#G5DXQ2;SJ&=e=#in z1zm5o6u&zA)T6KYY^W1sF>uzEK1p2rtyN=UJ)4i+x2jVWZFF0xpvQvJj*V^-jBeZU z>*ht2Zg`Vk)ck~RZ&z20%PuLQE`)^NQsxmriIZ=}bBZTe~j zR7$oA+ga7E*ct3_bfPbAOgKy}Y|&-TVBAQD4OS5M5jptv3A{SMz^J*!+G=gh5wQ6M z|C|DC7$Jg~I=6K1Tk0v}d^^h5;js7XNB}d!SBx zAGVQal`1PzKvLxL1@VCx>ZI>k}u}|;$ zAnANl(E716_St&qm< z-!$0|s5Xs>%u73ao>$15=#Z!^yTkyg$71tc07JgWa{H!rB0@JjYc5K%HiM}e{H@D9 zoN@zJa|b@*gQrzoGPZVR zCvpMHfO@umD!<7cQHG~`=Xj%W+zZTeRK}(hX(CQK?B`MMXWUApuddeb(1=3Rf^8=lmDX^iwaJhMVyg!)$ZFW=oru3F{ir@)Wv4>?Wzo3 z$zLIP+lZXd=l2IX``>04bTeFTggn)MqsdEKE@t^1Dt@Q=&wT!#73)k>3sl0fWK!VK zhnH_cjpQRXKA9Zo;%Kqx_br$|SQXQQ(1#6LU+&APeVcOwlgkc!^u!j2IS1(;@gpCh zW!#S?DV`)}3jlD{{A`};J9u{EkGBih@0wQB=T=<}2@{9M=n-BYO364iSv2Xjaio=yXkwM!_E=$$L-3X+SOqYi?%#e3)+@DC=whv77P$WUv6WK2dh@E5aQN6JGrt*z zqczwV`f_oN(?Xun7HU%p@2Jz@AMc%kN?dx+HP2MhSqpfjE$9xfI*f-)AU_os)w)D_ zR-WbYtvcZ3KLRX$PmtSH4UIuFFPP8k%8;FMZW4+UEDI3qmy3CH$LRy{n=4uVe4L}U6Uh|*rzK?2GGmCp%OG03okY;>SxFg6l5;GqY ztiAbZVETD3Cz_&w@SY@{x~PYo;M40*zNH^Us9n+puAWRIcJ+K7s{KyUnzy+)n_> z_i58V5zk_2gW;UxkTz;jeO{S999I*ORLOHm1VPszfc_AME+F(ac6$F{>UrmC^r!ZHAr{l1q?_c!moi4Fx|K`lq{CRtWW)ghHvy58qTw;bPlBt~$yXX#svPO36&rtm<(FV&9r+J9U(s~O}$iv{&$8}%w zo@3`+)Mn!jL;q`0#g_(AB(Ipj9hxP>W}8i~F(OqnF&tQ03$O3)WJ%<1OZU9Nh$*3wtGQ z^FB;DwgltB>7jn?QO9R{9Ex=|Mz77KltABF#>b7Ln;N*~RSpyt#opAv-pivfZ4gOW z0e=2Z&_i8#_{muo54Y#}45QyT2g#qkcE{)=p?nc#zyoSrH#Mq(=+N~?zcyFak}QE~ z7eQcds2d|IlE?0ke`M0Ey;}j3rjY9N<;}*1@f_Y{t3u$Zx*XxxwWRax#<|5Qxr(CO z@&3{!AoI0d{j}IMU9Ws$y|*4K(f&kH*MI3VcYRY#ub@-}{}cnNK4Tx46%Ta0qVVN- z0r8hb6g$ONYus74`|u@V2*b6bF>%EXclwxC0tortdk@ut^f?38_dU@I8HM1^vrqN~ zv{vyMAJ`mZy8ls!hT9r|Q%;W4Sq=HA^L6KOTe*!=nuB@yLFqTCbQ;UbNkq^Br~F}) zn>YBrU(llOp~Ke93EHx}6h#or_EK5?nRld?D4RWsjbjn@S)86z!9hdZadFDShxc1yq;94Jt}C_}UaFJAx5)eO8U^z>*Qq+bR~epB@c9KoUgTzpxZFlkwH z?7Vhds{wy=D|k=?90TN=u*I4|C6Qk!zs}8npNoQa&FaM_36NgD0~OYh8lH}WUSc}lvd@A_+^@JO zKgAL@@WlP@p+f(VLV`3e$?MD9TE^ufE0*8|iMsfE6iA{muM*{OAr&JVpWMa40CxL2 zci<0R;mPd{6Ql(xb#@&K8cw~vD;c^`&fQ9k^JMm1o*0aI7&y$+m2)BF=uZgqaC^U;IN z9)jxE#0_63Nf&EfFR*?2wKjuaIHb)mu_1Kk`zgzfQ$6xe9f#yIx5<-gnV<#Sy|!pw7p#R|||R7fdtwd)mnJ*XLEC zJPTp(ZQ9PI$1*&#%RIs-2UDZ(*u&Y6$RVty~hs*^e<5DaEl zy~C2t<3TzCtGQ;pKHtd4JX!DIisY2}GB~I70D6x$x^%kwNGdFvN{;KNAez1>jOwEe zO~9kQ0Z!%w{$n@$YjoPkNBx1f;1q&E!Ws{zpKZEabhkf;Q0l;QMrY{#!e9%ntP78@ ztRq}&JS;bqbdt@EGv(fJNq*BFQEY4bB;B8qAMrK&e_|imUgHZJbd;Hv4`fWHF4R zN27Mi6fOHJ^AivJVxE+2fv69ZI1P42g5qiJy4~HNqJD!^O1l*dfZ^}KkaG9~si;0b zFE-ekBM+gPx^A{Y2tkE^ZC_Of2n3 z5WEKzBln~ed8IYip-U;1VJ`Gi+du7`W5t0|bpH&xK}SLyT!m8KEa}%}4p#Yld7pgA zqC)wEw&-oB<)&0Jz@k&ebA0%szDyEzg{Qy-CNTdeY@-^^;eN7J*WQ)4=_up3x&sMoXi5!D+tl9}SDo9N z*Gl|1u(ZV0R)?QhXGb)e+9FrVQ$*I{5w?fRNnzyUtr#wp{hCcfR}xAmvFUEl3vXo} z?r>3AQjT9#O#ls-9#7#@vtsUybS652xw>!5s|t$wQS`Axh;n=qke)GNNIhy;K4Yl( zzqNaRpMUcZ{y38UT+8#@^U^J_kEihI1PLwyJejmPqU7Dg`$q1w!pd)c5y>^j9;-D+Ap}Z=q7Q> z%}F0cU?1qBNQaC$`LYe#Xq*KynCb74g^7J;cqVh4V=@nK$?r}y=?76Abv!IN{MCrA z7Yi(qejFX4bfRY%+;;magv2UYCsh%Fkg#0KdsOZPg8ajM0)lw>8RO6=sDXBuAWG>! z&EMHo{8@@@b-DwNuT3uOs>6CdgxRe+4auqQD{;&srU6b4ktN&5@QoVU@}qOg6_RV{J&CIy=vV=XU>m4`;e}P8&`=ue5?SDN375b$Xv;8p~$- zAAyw364eA+Q^bG7J6qI^k0e`m4c4i$~*dgTE8vU8~=<=W68Au49hV~ztj0EsX z3ZGCF1I(OU$jjM_uQsm*6@Pgc8Kf|pw1fGgraLr3$3czkD89vD*-s2MzK&9LL-z7v zF(Gg29=HTt+Pn;qv$T9IH@y5nT*d6g2LHcMYtc`JT4lnc%xwZ=YQWG75Y zUWtycjmdgchgg8o1`wGmG|f)zXOADndk5N1+m?(L*A1~FI4b_>VL9;A(hoedxjuUw zZBM)yF0Iy)=jLOaFvE}LH*y@~jA5H23;oz1^bzcFL$$Kolplz}$1@Ao>aas5u>)q& z^%1UYHYpNaWi<^>p!0F7>v4e1fU_5KJWhh{+OJefEkRTaKOr_WWwNLZpgMv({w{04 z`eqc@Gxivb_{azdB4v0HEH&TpY@tIojVIrWIRr#Vbf&+l;xRwosX_$q3VBmcr)0_P zZ|3c7d-hh54rFD-od(+k#O@iN6G1%r0MSrgCnuC~|L|_o8dqb3l{u^2xDYP5;-oy2I^A`!1V6W7d#%VtBZ0IM=$?iatc z`O5)M@Q&872)$OTzgpajf@ZR%HXg)M{o>pNv|#&eiHayQfVRs zo|I!05znJCc*FoSimX8-mDojP-V?#qcl9OidbgJN1-Z1A9-9S=0l7#CHDSrY1_%|k zb_LAM9zHQMXr4A$RHgI7Bjpv4?DEOW*ZB;e`hq9V-|&p*Vgdf|V1c4(U`g@N%;P!7 z@12f#R@$Ftu?mz<5l4a;FI3o(7xvY@f4nGi->)Suad>nY#*OQaxY?>N3;APm6dWV? z;;2xf)%~r{JW&baqB5%7O`}?0&D$~!QnRu=c%s;D^5=o)Q4?0(HKkzM_Y$gQ>fa$g zOd0c8>21ONABYzASwMDNXh%b)kC?6Jf#Z+~lXLt4xJX9%^UlUKk6kwCC0)p7PNXE;&LdE_-2DpTBmGIqrX4xk4$~$KJ>JqP!J? zD4FW-f?GoVdW}GE#gUhGmv??yoG#3uYZ@D()Zu@uO^x3!C(pvtL9x~H`bP3pY+THR z>W+fy^rXqLbWVkclTSB#?qJE{%x9|K7ryPp0qnf*&p?i0U($mHcE43A`+7Do_&Vp_ z`Q4G*&b%`*B|D@e(1H_p>R;a9Zcj}4P;~kujzsJ$MEXp@z(7(@LH=kCWq}(N_u=sX ziM~U?ek!G@{BV|j=(X#%R07*szSCLlxwyW?l=r0mFIqB+x{lYN>7KkPdXGa~l-OfG zte$V6Q(Y5^o`1uv?)4NkoT(TqO9ahzHPRC%O3RlW@qTfV7!6^4<4{dv=&LmQyjOVl zu#8zg4b3MkH^`{`0EMYy0Y5Vw-3er~WBgK^_8xs?%!@h>(%(}E zB47idV1a#z`+$t8{FPVd?u4yX4KzrMembG*Kt&>9Bw4elija=4OuNX|F#HS)ivN3T zjDJ*slsPTj|V>mH|;(sIa)<=y`FuT@Vf}BO2jQo6%J-oL4cA< zCO;PF45M7LT`Qck=8lI>M$_*iNnVx;W;3}e`f+ibk>LHfI!Q3~gWzgDu}l*4^?cJTj(0MEzI z!C;j7B;dMnUQ+CsABj8RIj4J*SSbfaR+NuX@Klr6ap{&^)D*9y4KaK7A$}QtqS*mS zM}j{0mH=hrE5vu-vN;heiBm-hj~g3DQY%QOcR74llV?u|u55amr|3hm!iSD_X*FIt zglu}9QBns@)Fy74bxb2<5?_3zNLv2CMa#y<#ink3=r`Tqu3(kiEa~W(z=}ZGTNwq; zzO3_Hd9)j*B^|2>p*Vj=H1;54p?um6Z`FG}Yl_{g?s^8qodTrye8 zCAz9O4)&GRwZkc0v`C0Arp38GBccm}`Z?w0YhJa5IeD`0>)w9zwat3f(=RQST7(4M{Wd3W@yS0m;;3?HWwZ6hWPcJzgIrw-9r1hcq|DjV zq510ycly-!o1VDUGvs2;&?H6(3X!yduJHu$rTBLO&5*dB7ZDLdDrXR^iNd2c-iaLb zUf7;Ue^AHz`(KH&&hqq88UF|_f7`#$E}1IG@&^n63oPynvUh<#(X={GTeKV;9rO36 zp|hC4pv=7-O31q}aZER7ua8Zhj(_kwW;q_xyLEjdcSSq!bRi9_#s*fXQ4XTgI0*4d zm`fUl2v_Z{uon%BCAIw%SG@lgrW*+V$m2O_*TXsi%9V}U_d``32D&oo4D3U5xMnWO zv;Wb?S2)$UbaBppwTVf4tp0fPcK)DPc`pYN;v(z0+;3j7%Dtqz6F*{EJ8TIqtptDc z^7p#U^`sF??3WiACSt!l>YnTP6<%*>!E(+yJ=C^3<-2c|#_ucfu_E5xfk}(uy{3%(`biqScpmgZvWim- zGp9_ndaxKeDcSr5Us>&_dPWm46l{xl&KoaK*f~kwZHw6X=hYJKs{i~mhvJV{dv|fU zO2M2_GmOShxoIdqRLMd8l5_|zhU#vg-hnz&J73quH#1Hvrw1|MGeWwPiu_S*4EPgvH7}De7C99 zc=WdT_Sp}rRl#PIb(7;3hsyH`Yu;SF1b2d`hk$<~e>ze}h}QG$)x=5L@tZ)_1^~K_ zJXXIMn@~ELx%R8rXX`!K5AUOtn1bQqnv}eij@NyotMruU8|bWbW{P=73cpak00P?d zNw*>4HEwLc=35J}?TG$Bz(_n}=`r34rkeG%o1uV}?oCH&xJi*XJmyVemSOV)649KU z5;@cb6{L!Wh)9r5>ftH>n-|0zejJ2D?AVLavpZ=YWe&XNmGV_o9C}%UtFprhP5A1T zlf?c7KBw8$h_|0sqaFf-z1-d1Lq4T zC%o6A;cXk#1wR%Z$W3Mn|DkcSOM{Kej?#xORvr#?yi1v0h5Hb^faL7)?0P6_A__KU zu^P|W4vpJdwRhx*hglB4;u(eug0IP5^XJr8GZ1#OhkTlTCMIgl^6YzZjbU*43jnsM zBPg$HvHIjhSZC5(4maEfHB2G9@wztg|M}yIRfC4@m!ib%2CMwIO5d?MrbOF91#a?% z?YxdqqO(fD9!;rtjWx{Uu%-M(X>`P&E=i0I2fLdOfgaOBmn$1t}70iG1DNw3wm$sTYiA{#Z?$G8B08xT+vSR*h z4C73`XBKuC{XVXLlM^!wIRxKT$?a~4($grxjsnVPCkPd(K>`?D^OLZ_4sh_DCu8Bz(%Z#tWI> zeJr6?|0zt8l~+f_T79~cr*DmD=67_M(*(E2-rb}?p%6jFsNfq`tUGxaweS-9K(OLZ zZ;l;QY?2gtXswM^34Zej$5D7d;VO`BKcShVC4Rx~%g!n2zXcz%p$MSrHLV&~Ly5P4 zWmD!lg65@R%urZFSIL%@+U~!VN8OC;Q7{kU5NnIbu6hN9A66dF4zAK%hMKqv_&w6w(2{U!cD#A z4wDg6;j6$+cPZAlfo+O}ty%2N{So1>vWfy7=`z;|DN1Py%#{1}5}2^dgL@+8V%sIE zeNHn=zZl#LSdTqj0ydn!muCcd$HnV(0A`Jf>8B1@b!E|lAS&51$Hgaqk`wlFMP=s_ z85cm~A6PgumD2P!Mb6YTQzX*3X)PKo9&Q+cJ^tKB5ojF0FeYNPe-+Hg1}nI%a&--a z&p)CoYGnr!ovu%<9n$~N5boWnRw2`{;;}E{i|Rfc+J7_XfYjI^=wmEmD4+=e6+4ja z7_`d{70a{}o|Dh9(RnB&kFX}fh+DigBbL;B2|lyzE!FDVWbag&K5+vVn`s)eHPLw{ zA?A5XrVPK3cl3?pM$pIl-w?L;{E-0@G7Q7D=TE^AE%|*dJEpA{^p2Sqmn*z@F6+Pf z2R~^OTF^-eFSt^Xq{RY{1mpA1s_ZKtJuUQ4y+fsx_UR}dr^*9Zf%{1m3v6dzMm33V zK-j+Aso5=%KkH zEv>XvRxy}M_OdeT^O>^Y@;U$U<vT_Xa~@KbN_McGb!@Wt)e_Zfz`MV{k~PE z(bJ-|Kf}nUDD*U|qVF1~+Lq&rvYMPrKpDH51;&NWLlM*AVnwY>8=UvuUdi(h%5qfD zA++;kufA^s4R*$bO~1&=CVKuKzEt_a6jd$a2Ujo%owkjFv4XrLW$6 zAa-T6m6e*oPaO4gWml6D%`g@dH^R6kS}(e{n%)^EH*foByu-?YOMeoB9m-o%?X!9H z#%P=F#dt_SXDR1B5?;mv1+LnkkG?j3?CHimeV_o_Qp&z9Db6+$c%Tes`{lk58-+&# zt&{7$T7W18YW(|a#yrmbQUgie><^$^c~-z@HK%=+8b5&gDR`X>S1dk_R2_5K{KlgQ&nlx2%b_}*W!@=HuhC&L1AK~PJSRvMTx*Rk z#-L2aeQP_LyvsG>^FO7$+1+{}NVbKC98hV-IEMo@iDRR$hYr_nDBdVh|+z+wq; zdb5op5B7sz)d$vT96WxCu_{)V-3M;2V%7j>i@18W`gwkMqU4FeWHkTs$omD(%+qeh zb9Ed&Ttm7`p|&MnI_FGznEe4hvm+2I8~haYF2)mx%TNR66ags@@>1<6P(Srqm5+i_ zQgSYTF%#_E1>=b2#s7iRSDF}M0yh;^_3MI(f6+*1oNW+P#gJa^Tkisn>h%_nh96p6 zB$!XWbIsWLY2sKJuHbhXBLGbJ7WWWkfL6pf5xws-o;d0q7R&l`^LVk!EhQ23+`?w>jW7~ubiNq2NtufNs=Gb&j!8DAlrGZ zXvR+D%xjq8{IqMDjM*Juq6j=AWA;w{lawpiek}f8Q~{>K0QEVZB=J$h!xv*y8&J|_ zb)tQnzwmypMPm>&j|3|X%@U*_q&~er-tz)UdN(Ju5Kay_8B#;3t>`91n3h%GBd{yC zJ~l`Qai9&3F(2KIncVW^TEH=20!uCTQJ%{RQqzoUnouR{*|Z=X577|H^cJNR92uIwrOSv(KiB=$4$;~nkhR@Dz{hpk!Q)-UWhN zkDdMnOc)r_EnVoxIA75He;FClD!s=E%p*L_UJ+)RKbZSzBe3UyL0|(j?Q6sJUZpxg zRq~J8Q2+rQW5YG9n|=vi@;{EwGOo$@ZR3=*bV^JqX#|vpfl4DGB_KHkX-4-50i{Dg zrKL-xQ<{wuknS3YfP;-3F!p=y|MO-q_ZjznT^Hwdp2zV$JQMRpumuv)Vs+s(qW5CI z=?qutpA0LYOm_g<#EHQTKYk2=nDz{C1sE)ZLbnu4n$2l={Ofs|!) zggNL=O&8ZDaD#eQbfBWuDmz^@(yqb$iiRA?Tk3T0sH{vXCOxF6K)Jl6hl>HMk)e1^sw56E3b8x5fhdq!!$Me{bc%iSIQz6 z09K9`FVmVpT7-Pz`=svSSR^!WGm&^B{;ZBUlpJdT`zD*v&A;#LbGLrfAdH*DUL)Ks znQW8nr?1&1&5oDD{i$OYrFx@_D(E(^R_R`$>bB$a2g7 z2vkxSEf*~UtNtJ~hK6cb8Q4Gsr0nobGBmR2l3C8iiNnN9rcPg`18fOQkIiLY;tXe+ zAIN6kY-;Nh$PMCWww@#8c8&ga-ArV8bw!$gtHP;iwWg z*CoUm)W2AVlt5NY*<;tXW2R0-)z6|Bl*tJHBe-`9Z2KtpP=o9NTlOZ~2FH*B1)i!6 z-$LlZNo`rFrxPUj2Y?6<>DjCYHAuwa0?_ciZI2X(q{?@Pe;!9ZdgVdYhfoK^>LS3` zJPeGpXq%DfQkotkXzKspjXhZ^ynF73?8ffZez(|d-V<%lZ)xhkvhE4u58`?qx=R3@ z8bSigmz84gjLg#ze5O+mpa7QiDe1bG$k5vj#jI3iPJ-4xAi#jf;+r65+sB&VcUs)P zKlxNL@m2&&h;7|;?V-gl2dr~XLlQNXKPzUM>RgS}_!oRm)>KRB@0sdB{F%dX|0Xf? z9?iQX>N-aBJe%%GGf3Q zxDUa0_E+Q*)`$L{y`@Vf&U>=?>PIw(f7!a`tofEXj#ZzEy~h!l0c_~Fm&E^(eOVqA za0e8@{&3$&epG);=W8M@lGI&B-a)rrHIW3##T1<~|HA_kFGJN6j9x^|x76}Fe+p6@ z=VyEe8bI8?rqcl5`{HiWJ;#^-c@r~JSc?oH3NB~`qt!Q9T(mJr&89{Gf|R$zN|Jg{ zU&EX`PRab-;3hD9DqQ3?SA}RJ^ac9UFXmrOe5$GgBB_%95iDHP?NsB*mz?}z&h89U ze0S~uBqPM|z#ZseV&*0DtrD=y?H-$U-X?`U^Em9#62tYSboO}D-t71oz5JFoMz!$_ z4cgqmv79132f)oX2N;36fXbklk{;X4#q&iq(@joDzM}atP<>2ZOwNGaL6nnafz@wY zS_-7q*_UIKNgn}eENHd2?##b_f3*1eM6hCM1mUgRXxjrrt4naZEQ3+Z&Rf4|CGL!i zFcsoSkm%Y>a|z#t#dDR9z%twmA6~zUp7;X6m=E03ibZ_~&paf#I~Lj6fa~n^8$PQm zgl)#$YyAL0ix*}zCioe#j^*_T)3*|r+k{mg(PBmF;vOf3T)dit*D~q~)1hNtZ>0r7 zlA{wB271uX5_V>k?tb6Tc4FB+L5TJpBOLb|33f*H3M3M`zcFF-j@GoN*Nqv8L>fuPO7+klO}o)}FgSGUlE zm1zC2FsNV_z4bz7B4mWu-!Bc~`05AQ!*>TkY$)6DiIh!Rj@1qRPxstcGxWxGB|cs4 z!&hl$U+%t~^#XU&0#YxO`Zj3!bZaLGnfUX}E^1eek~M-&g816Eu9p@o&ie1RJX9Dv z;Jj^pk5+v8w&YYYk)18eY!iuXLl*S+xB)9W9()Jqiq6?=3eHa2Os7iN-$~mFXLq3P zl!SYa<%^uG;HfZ}l>Tl3Y+f-=q9uv@dX7a~ALcJ7sL90<0FDuTb05!8-W_+E3EJ4!EL&q2c19Hus38X0ZJH0ENksEt{PUKpTcRYtWlNyq^}if8=^1G6X}LfTQlIeBqy{-VSEo+6M4uOE=L}Eq-#-m4%`0fq>J?t8+k6vY<{an*Ux%v+|ZL@a7_N`pjK$b!l*( z?zv3PSVL8f=AF#28;>EFLP6^Wj@eTmUBepAgnn^w&=K38ZcR;BWWb}m)&|!E=g_^~L=_Wrjx(~cAakssB$LVc5jfk@`7rAmXEz^Fgkem_rsJ$&#vf+kE#8Ekp} z?(NsLbj5EdRr*UMF! ztPVH*h@ar>@KlcVCPP}^#TVa}yy#j?EMq+&_y@Z_>lmDGdGw+Gh|`MzTuxN);r`uo zo2sn$O=?QkBgtzbP43x}8t-CV)tQ~yW0q;QOa|i*m-&I4dsF6I$XkC3-<2fs5zeqL zSuDNOZwMI1%h~$V5`)bf*FUJRJ8yF={yvh}<^<)8_V2ao<(iMrS5G6nr59FGMr$?8!@dQ5OGJ7dD1&v%pZu`!k3JzDM)e|y z@~&C=yhp@~s6Tp3a*&WoZnfKa6@vx=Hiz*AP?|*b;a=ZnDr)M5%9KH-;N8m)`)7NJ;h7vR{ERnjv*69m$q2lt z|Gb|v(Y{AHAIhvBQf{lStdi+JhNmIC%@yqrvSI2xiQ2LZ(&Bb%h@4TDZd$<1xdteI z^3uDGPYX&8ShnRiI#j*P(jYTK{ZnzHuHV zLf$wS6(W=qre-T?DfHE#v54C;^z(75!VEttxmKS@docALwH$Lk4-j;eR^#ej{d{xt zx0u_`xU9j(E*Zfav@Ew=oj-mB0~_+Bd4=Vj(E8W(hK3JLDS1ajwRd=rWFb?eW@P6C zAzI>o447wXsi)BGS|OQzb+Qy@!7Tt zzfp#E-S9m!zwqmRH+85JHXF^j&77U0#9q;oSGCyC_1uok@ENm`m%c~^Ixdk3`$bHA zEir(uKv@gE7QG{shKfF~lg3=cxeL^W+>O&JG2#v!e?wD{vTr%_d#PAx*1rKI zLu=?iL5$(l=jPR;y>?m75<2<4wP5?Y*00 z!gNMwAop|@u3U=~vx6EZ)z1)S5e?e&IUUbu;*3jgD zh<`qhUb=P&Jb2S>w-IZ8qMB4;<+wP~%oY(57R;bv>?yXzpj@w7-78w9xs|bxdiKfe zBga$8gOq<8TQD4FDcTp?X*%C69jc%?v-?5Qm8+8?XeFtWkB$9*Q7%510X$U^24;iJ zgw}(;Ezn{C_@?Ms;(umeSGO_w*f z)_25fuf!&%hz1u;9w^Q;zPG4TNFK%)hcm$X5Gveg^`mUs1Qqsy+7ilGXX+u2@t5+3 z2v4`XCDQI+SfDB+)4-zkSc&I~S`0>djHwFh6Dt7Ru=@%JYbN(UkpwU_zg)*&Xl#l09%n zyP91hws54s=_F5=-ijmZ1xbI~j@G4Jg!q$D->NACrwO&$+b*r&qlO+nbNT=lFz}nX z>$5B!rG@(2AuI?_Q;JnCS=NTI_G>gskWOE;T0K)p{Qe)os)wLdNUl>eOd1TB2XIV? zZCg|{M%rS5Tif>+$Vk!rg#}x$nj4Z6I@!8qn@921lb2wW)jw#MxV7Bnmz9-k!r#&F z`}d!vzY_Lamdx*Ns#HUG@5%X^@y;o!3A9%5{~D@!WdBqmD}n^Bz@Xg+SGc^MdC=LA znbe@ZE5$Gn@C+^`y<96(;9`6uCGl0OcRa$~<~=$Dxm>kY^C6+q`S1(GDCTZcE;JFi zx(hEer4>m3HHy_0$g4$ieEC5EE+3U+o(_ZzF7FL&&|6{4`x!>cH!P&tN^HAIDhXqQ zq02wI2A8-?UYZ0wm4@R|NA*K|iE$Uzm#y?R{|Y#Nu{%KjhABdg6^#Cwu-`HOZ$bgQ z*$v3Yz;9B>)&p%3M!MTcC#341QN-ZDdbpLR9ch@zc{xxh`i8Ckq>X9}Jx%J{X7mTt#fI)+32|Y5ac}cssfc{RcL6!5| z9aRBtfVtU_0|!7&sD!g0Or;r}|5)4Pv&xwN1H~vbzlz@bq>a+>hrk2S0B^S0a)8}g zttFnI?+IscwLuGiNz*V%ncv96~9y zr?9GTD=a_ORCwk_@Vu7x;`eP)I7nBiL#F3Z*i)8dZFb^J;-j>J4#f9eI4xU^tHBB_ zvP*yYJhnaH;v*ZgGsid$?WnE@>E)lU)GAwRDhORn3Sr6_Sx+h5-*9Jpwk6^pTjtb5 z&@nH`=;)!~(2oZbBHt0M?_jM4D4{KPOQbP+@8iSz_72qyo%qtlA9vc|t3-0j1ZT(V zi@+ae0Cvlh!TxgJ-j7$ZC-Hs;QiK0Pz2z%#5ZSecXu1lV2&fy$^^cNy8jMyi|Gnqk z?wYH0^E9Hw<8?@wNMOaHcuG|luqW>b+*XI`LN2KCg17o^*2q4udiOCA6z4w@nZzmI z_~U0(h~^*soPJ_4?xV&0<&#bvSX`!|p&C+z;0!TO?oKM<$xhPW*?GgY@sS;*($#~0m z`Y6E^k5#WAl!dU4!hOwe7Wl;;&YEWUoVm^HcQzF#@CdtDq5gbOQOn{>_`07^^NGfc!lQj{UT+9W2U`h9!;btsLfb5;R*bMRM zEsbzZ62!Fla0BRx8i75)Y->U50+{v2fNs84d(QYA$xBs3S^_~%yPJiSz=Vrl?A3PT zZBcDtEZzc@{YFYUlkYzQ->Qq_Nj=I_kpwxEhth14mV1w0^nAn0Cg;K{Ba6 z_+E-*jBvIx<;=x5?8vsVkdk8c!KHNd$PYKZPd+nB-rBuH#Z9;6cv0uCoE;=KeBJ5G zPs=^O`d6YN<%=MmJy;m^im z?jvstYTs1)C}!)Irkv&9{zO?JHhxTg=u+Ft$zUlW1zO$~?#XNsMHAEARcb18_@Is+ z6bA;%lc8m831t+4jHgX#97RC#<3P7A{}DW!j0l*<`Q65xzisw|f~b6tmXU z_h9xI`PtrBs$~ihy->~_clQ0;@kJqa3r6xt_Csk))P^L2a!hdf{n-O19HRaq^Pm0& z9ahCJs(x3{)sV0|mMsm_sBiD69V{$P$oEQhi|B3Zz5gRX(hl7X|80LSX&}h+5Byci zBgT`IL7yqgTcEWY9r_R>kpOeM)ilB||2uj-c6ayf)u+x}8tItLH=J+calAKoYK+=n zw8zWKdBhR#k{u4g3~kZwaRXMFvt8QATgP!t>IMYo%lo|Vp2}*FO3su*K13OHX#5V} zzjVTJf-r=>p3(QXQy8uSWTi#x8!)Frb_%dgTev8U2?r@3MqPA%F3g+!()__jZc$ls zx#ycLRt~&fvs{PZpd~U8xKZTr>0Xsxb>x)0CcJ8f$;uWR%&vl@!*z*qDx1iSYqK-R z(b{L5U0LkVcAV6crt~oi_ilr)Loyc+{nd>?j7m_FeE*CvA7XJRgPb6ZLTDjvDY5R4 zX2%=mo-B?^We%LAUi$jOs~i_eXj7fY4EuI%>Ehj=65AVtAxzn(O|xaqUd()H{AuhH z;YTLPaWk0h4qb_57}CT@cG1u31e5Y}@9cb1C3BEZ^7zEgfS=zT340(tp%_D^QaoMY zQ@XN(dXI=Yq5YyjxUoV4wUF}{61y|k4Gw*U0i_9aR#{7F6lMDm{nPxekLoGaED80- zMp7!*7`LSs%Tk+awj1?5Zsn(jpd#A(R-Yz*S2>7WHF>Dh_%jYgzZGdHr7_(TW8!=+ z9sXQ8)Cki&QET^=-C`=G9BLtQIi%#DTV{TonBF*;xz%qg;0#Xen!OxI z)CRb)obp{<2!O#-kqmu?X_A}_sbCGHyn2}}M=04UzxUGzg@GWC*A(3b2x5ApSg!u1|X#5k2jp2wZf`{t#*kzQXTvH8>f?+1oG>2n*2ECO70Q5r+oaW zS9%9TQJQ70^4&vl!J`M*F%0|t_9&{Qbj9H;Av&GDul#%ORs%U9$s%8}w?QA@M6{o> zX*WGm-0$3! zlDWOx+xk;Ge*^(#Z5T$;=4qTxy4I?Q#)Q?~rnD1eBBcJJ=2b0D3DX( z_{@o`_{*D6o-$@=M#|CGtiDc$0~=+`i<=3Iff87%Xz)D|0bUd^*a>!GE|a;TeqyIe z$I+a*p}S`_YDm372#$%}bp1G#+y7AcT0bZWa+f1>Z%U_#cBFC2_>)MaGBM zv>cZTq*jgX)H|%&?f4@+OBwvt2aNyU(m@>f)e3N^B#*8EgN|m@pxdwfQ|U^w88%$? zNdTVma{J4<=Q8nNshc8H+_u1SO3K%am!GX7QuILbqO|1Ml8->47dHM$t1xN~0B z;YVFhIq;NATPSf*%DPBvJ2mF%$`6{2++{cIja(oOc)dVd)K>C|xA^(8ZFS+M{!n)epBk=K>4zsIkXG9%uL#4X> zUye#-vPepn_IXH|JwwGuAgG;;cEPDkF@8f9>dcFxhJ{gXGqCcrB}(28@qJQHscE`B zdH1i%-Oi5ssblem z<&BhlV9QZzMqaNkAO49C6{W-dq#Y#NXv&Gg-g313hmOFO*!$@sh}=)len1)$o&4Mf zO4ayh14N_;4bU{E8j^`lpi=*QdaNl%Vq3X+qIfG$*b3`rYU#;GO8B9_g1fsJPBL4w zCv*LtL5+_FlJ?fRR11|jrR~C;^(I|hH(8TS30k0^_fzP%OUt)yx!)>Ra>|Q0+}qUy zUeBj}TIHB6rxnSI2}FobKCMb7OU4s4j5#cS@b445#Own}dUgI^J(s&@-0xXMw5d`_ z=YtcP)v3P<)u&INb*xEyBu2@gK>aWtS6e36KV_kBGTDx zn0#xgk#HMol`hX`80g3u+P-N*_jsd2H)9N>PH5gf5kiZuvQ!@$4~Wboab=8f)R)!B z`wUH8I@^v=bRLvpX;?wDk@xaXax|!}OsdSKF6c@M+wFRrsV%~Mfdrx^PrfX+a;>pr z)z#EZ&j~^~ccuxit-uMjn{v-lMUW+BVvVCdbvo^1?;wJ()sTx{!Fy2-O@T?x zvr%$vbYvd63mLCd#K*O{O^Wth^Ln!NGi?T5wM6pzLP)auqI_n89!5_Ukb#(9JGfne3&M(+8m);&@FKe^qS1L;)^+(gt@PA_a7$HyIBz@-TK7qv` z$Z!`G^wS(4mFgG6F0ShLBY{K#=R}MSy?>P~VdsrQW0sKnDQ8+{=s9A&@a@lkR+V>A zGq^~z2ko7$54u(xF5!SvkpyFrZ@-^-fzZ$7869-nN9Y9`lAKC)#jIX=C_=#as`uI# zkvG4Seolg7m9I@95?@1i_n>_Uj~DtiMZwz+Xl613oc20YE@a|M1Hf*JL+2D$&la@UdHU?Z5e`UH} zCdP0W-p3z1K(EZqN|m6h0w>EFan$1!@BugyE~P9|hlN!;qdY72@q8kFcYifL=_dQd zw8mJsMwU#76RN(a_BpLB*2Izh?i}oWO08Mc$*Wz9wO7yqr#3P+oZPiZfJ|%4Q!R0h z@nz2X(pkB>xsGTnTecWpYbT3BUp&l&3Vl^& z7ML84^D>%+aQdKLnSQGhd2CIsS2>CShpCW-ufgti3t2Ax#Ve-V$Qs`lZ4@$12_j&< zYRpa5hYp2xmcQN)=WQbc*j{yy?dm>hOnvP9quiO6FLK2dKZ+N6F)IDIFVEO{nRSfZ zKn*{2Y^xKhd|RRNAdvJ?R<K`wesNq3fPcsoZ%TSaHS5`pD{&gDF!+ljNpX@TqNNIMAeziV9VY9%sEQ zkR8i>s`RtO>k-lR&l%v_9Tn>mEH;_5ocj5ch0HZV3ZkI;kZT$Abl4pnq+`a|_dZm>l2-ln&eGVNQC4&KKcPw8AY_8@6j z^7}eHxuVs=lf7=BE{lo|Jh)YAJE!1(k92A8CF7Mp2c#3Z0>ERJH;N}c;r}xjPHLpi$`b4tF^VdTr04-Y9PkV2S*yY56#Vx^-%sToB4Ax3A7<7_X=Ko z6^qr6*tvZ{pdv^8AHfqiQ$hHD1TR@rdTCu=Nz^>v@qA1pVqXg%B5gZFiL-z2z4|y= z&guW%?)fhsmu#3Id?q)9zW4hm-$@$%i26Bksonmv_tR?0trVlP&G4v><1BU4r?e;E zt4z*j*|lTNJA*>D(yWRowLvfCm@`5IO6dNv@AvKl9RAfyy6?Tk=nDI{nE{eJW+NFa zhOx&lJ5$E;iSMPD@`80bm`dJ2(v~}(0C>Q}L}Pd!M_x)U^-f*5;!CLDPAh$LPOEXDt-^IG3UETI+72>#)fD`|IExc@eJE4&R;q(BA}(<*l3QaP5%1he9v3i~ zpFfMuRNGR;xo8QPsB@+v#<0dZh+Mx5X2zOCiUdyjk^N_y?ThaG69l~FMz|Q)yTJTZ z?rF6<{3xz<%YcsYQba~ZFD}KOkBlQ$Wxo&E?6RT_M^5=wGwOLRl^T3WVJd(3n%I0X z?nA}#}0ejfPeN(gJkPoud4M;pm2%e~B)na6qlR9KxvFJU8 z4C7yD8lG8A@GFngi4oN!n>Hn1WE!sOUGg8|Crs)B(KNkI#O#Ru=~{RikB0_3NL;x> z>T&UMW#6Cb&eWwcLB~xm7un`E<-58ch+m}j!4(&jfkm+|zS2sg=+Ly;oUgp@sZ;Lb zW~BtxU5bqR6Q^hr|C2o$s47%_deO!5|h^4?Rnym65^A*kz^Yf(=VFZ#)kU3%W}1Hgv9KdZGYiY zv;wOa-VI2C*2k$dS2}aG>9ww z&&6LS>W8ag=lO@m9y{^g$1~@+%m`S@wQ~sv4KA%Jxm?8R<4l?8iJPy@tcQ?F_TJB~ z&2000I6HHiUw%%W^ROo#F-n{ZdQ0%uVE1)lr+?T_AyjBF)75?S&II<6mY7#1xqkl<9GWW- zMXk19>0~4?RvT{gcOjWG!}e6Eo|8Ln7yZan8ESx@?)`LUA;rw{LOUc86@P_4WefNT z7syUG91n~Lt3xgg428mn_>8WgZPatBFZjHr=;}fJsoC+*{W#+nXSTiatxo(4b}g&R z`O+wOui}Brh@b#MsM11Fuyc7OV)M?(*}m-;SZm6^T|dn6CIH18Q-ngj-Cuo^n-qQ| zxo=yWVJX4`P|BeSgDl>EIIz=diBQBzog(|w*ImCI>!ZHzI9&x`$9lgW52P^J1d3R< zzAJCYoBJKfwv<}J2*mQ{SUoy%r%0CNcD*hI&hLrv{$;b~^0iPKY=B$V0?Y591vSDQ zQZD~w7$x55pC8NnFElKAr!l>3Yb7H>SNOH*_J5IX311ku=L_UT%kOG;C-xs!upN1MRjINlA45Rj6Kl#H$P0?pa z!Sx8>Zv=p7R1FvgrS%rnjJST6HFgb=OyBpNqT(#z6^mD#a`nBgx=VFuVKPKOOW6dX>IucHv{2a-e za{C3)vx>KES?}hT`88Ar<37^LUHPPh`ku*`DzuuluTZIuzZVf~e<|bByJ=^ac(W63 zTI>$>t{U;-gV2Ee$C;z@4{wkAi^3EwqLzgqKQeKv**p|PC^KYhA#)byuFk(c2FU2Z zgJm^@UC?&>r|l;BDotye${hjTRGkw#`Y2W|=<#xQ-0kO3p06n%>|Q7@=3So zpdn-447SOUDGtsW8+mg#!Ylms-GWNqecLGs97E^DeGC~K#0-F8GdxQN&9r&o(rLL5 zxl}<~W#Y|p)Z1-?W#L0aiw)?L z^f-LluKh*ZN>9ErX8)}2KoLoc(!JpeALt>U(Z~4JWCw_l9i_<-AqXIqN=}hYd(%BK zIAAPy#}=TYO0k7L_!ekp-aX3)d|q`mv-g1o`!0H~%{kv1&HnkZMYETJp8($B9eIY8 zl{H(Kqx1ZbVfM2A@7Y4WUD&2v-PD@#0IY>2&xye@@Zf0T;_Yfp8iISR7e>*mi= zm+++VCmUP2`S;tJS^kK4KK8t_kc4X;C|6(o1gNDiasJrG8%rCUA~xiESh`^OquhF` z&*<7tB_}=z^LmBPm^IPM-QOVnz-T;$EXDwk)F+55y}+y>mdn09A=T_uf9N(^Lx%2V zyieGFlic6EjRm~ZB=Fm;a8j(d7+4*Bp3~uI%s=?tn^0fuLcAI-n9HjaD*a` zww=pMiS4nkyNmVaa_Z~I{|E{8Z%|G9Hu9IK+uN!LNCw}_+_Ftve==3B;F0NTO5dL9 z(@7iwUC1>*115ST)wf^6d2nGE_kt806#DSu=_ARNtwrh09Zp}+Fy^(->m!7y1576v zUWzX6w|s6RgE0ZQ&$v67yV`Z34nln3(8J!k2}N71P+Z@}z0d$#VjMU6c1OW2JxKEB zq1|`3ojW9`{a!%WL<>AXXVCi&n;djsD07{Qp+)UKcUQNfzE7d$lmsIWo5L0GlQ6Wt z1P4|EXe12IBId$e4v1OlV!$bm&Gl_DIsa04A2U?#M5t0U0n>J5 z{O#y%ZO>*Ah^)uKAf^n=_^xF+@86eKU0W%i>-7APXduz_0$T)p(KWiPbu-DhKWm*n zBxLL_JLHp$F`vCxz$0Xfu!vcAz2YOx%(~{OCnkIn!Oe~-U5M&}dcXLUoA~Cro5s_$ zg1XoEOeCwB*|&FlG3;}T!mXjcBz}|o@kgOBqY=; zrH-B`^Xn8H8wy}GvZF3D!@JBeKwbgKQqu~iST%}(gy-PVP|B|X@5PHclmv1pv%4H^ zYZz|E)a2&A^}#5UdvO!bq+@O_{|M7m1Iz7!?>}h3ZfwUjUm2YX;p$t33Bg6YE6d#g z*CZ-f*U24|qjuw4uk6jz;ei}5 zBmQ21);wN9nqV_9Sz_UG0nRPbCGpr*ssLMku+HD4z*-NbK6y2bhZp>qTxWDBXV%eK zRZ%Owz`wgS8bqnEXSRu8wC?1;v5kcA2kjq8G_=*+(=ylyZysH#PWadYg<7A6lD6lj z=hB#s_0yfcZcu*7#fHT*<5ioAUcpPG5=Z}>9H0c9VHulZ7vN#Bm1E)M%WJ)gO|mh_tNiM2cE;# z!>#Zutv|2<7g6Y#!&TYq$A_m*m#;Rie3@_9w?1n$Zv{4&^_>>e{^5R4Cx<}3n#j>L zTB@B?27*;53I7JKwML3__%{aj*_*h7!6F~-};%Zy%SDJeT)Ag{;=5ETaf(wi6@f^G|l1MLD=qU`8&0Nki z-8a4-hmnBLyYiDiWkBqJ{WQq`)Q)vLmbmv}PSdVR0TMZD`j@_>*?@-=P71&BIduYR zg2$4oG2+17X{n925H1MK8vpb!d>GdEfE|K8FLt3r^Lz;oAlNiNX9jkKY5rQz8&AfP zq0p8lsob>7rz|4Z;hDGrSRdEpm8)=NXXy>WWIY^pssYn8YNG8YUcQlQTb=MuTp#FN+5(xM(f zpsrakF_5=UbPAfMhk{}Hgd)!a=6|#TP0_)Z!Zss;b^iPK3GK&#%H7m%6LkcqQ_(qG z(n>=|aE0lUKiCeoS*ZZe{DvR1OnU(!!NnM_-oK$E+s%*ak%eu>*Y9U5kT!^YOiMiI zgT3GK3hP|>U4VYQ0d&Lf-R3$pB()4cq4zMCUERU>`v8d#gno8cW&XIY<5T6sJb~NW zM@+J0Cqp)XCIw|{e6g?{@Goy`cnJ{uOy^K1T^gYBIq77J@@eGs>+16y>7 z3QZ_I1~ll&6qr7y@6Nprp}$N>cK(S_OH`ZAAecJg&&vtJmuD7{G~oYb>}#kejlF6(@hrWF+k9a8qW zz4O-USH;tY8cJzFk^=pZ`KACF6e-`8qfK`lfI?vJ`)k%YBer|Hj50m?)r;J}HZz=Y zFV5s%@EH25y0c)+dQ3XocYRiYpZLCRztY*gUJ!F97e{Ba^jd2^r4d$iv%c|fel0tt z%f1wj4l8zmwjJ*f{?&YK()~P$1HJ{&<1)o&c8J*(pC-%i&o|_ekNLcsPhUJFLlk_t zxXUq6Ir>1)V>dR0M*3EGXM;QZzLNON0fWk)E0ZWKz%m%IVXVv zjRNJ)GW^o8n`J?Lyq(PB-*@Hi%vJUBK3A#LZ*QXXCw`^Hf1O^}W$W5A$Q4dnJP0EL z27+veH$JnqLVogZrgmFEP9Jl(+C)nrN?wZd2hP2jZS8WBp?O}=nNpYbQ{te3qw|;k zw~82jnF5JVm5prf#kq_rrM_x^pE){aQ2*|r8YmFU>^0annlt!rURU(X0OsTD`ta-T zra)qjAML5!1~(;k?x^|l*%pib#&)XYFBesqzrk_w=enL0&UCM>Uw>heDkCSH%@m1D z?FvPdvlZuYs9VqtdmQuIHddwwN%1Dh+pTZGwlw$y3^N7+>t!ofadYk==S z&u>x(r6jrKc?U;3!{39+OI>4UTY)@$k;`4 z6HE{juomdgWxVmpHAwL5p~Kdh%g8NHdwBkRfiqt>Pvz(~uW+O@a;8PeLT515 z7u}$!VOYuVbPq<$@IQiHRfJx^6KT1R&kZ*L|CSnib+pvi_QVs%gGW8$!S4@rE|q(P z8=2BqC7nQ0txEnEC`%&?3fs^aR?du6No|Sr>H3!Yb;QZ%0UF`sF-0Gd4}QbeA6}c# zKl?K*EA$``{xmWCiL=GiotEE+FK_cWqk8ENbA7-4t>`TlYkFi;@S|}BgVWLoJb#iz z&FUIVotCv13xvGY(T$o}f3{!9k3Ok}+%I|!J)ABbZzTOAlpi4Nu1!k5av8W|_O?pt zL~D8=oze4i++3t^v9jD@vgEN<@`;UdzkZLPO>`x~{(RqbD4{p`q$*DM-Xlh5{cs>1 z9{C;ma)+0m30_BHrNv2ogNEtkT77t0#uVLu8U?)-(OXh~QrOwHEMA}blQp?OC$y#2 zTfbqg#w8)&H1Z+uLYaul%N*(Vp4@C)#Yz}>nDoA}*pKEV{_)ti4h)YIk>awP=?Vnk z{@USwiBFu=e#A;Ni`9(QE6+$?-cBJ1p(_PtcVF_StNZeF2x!GKb5ci9aE%-qj(N{K zcWCiiVH8l`VOdM+3im4(Ss8hdO#)qXtoV>mCMACbIx1wt{hgvj_qL=B$50+YhWC_d z!gEcB|3#z*@%r}oia-}A4RB;n-um9ii+$C$&a1}}6NI_^to_mw|6u9v|%oojfjjylTs|HV)3&s z7Wsz(hCu#jSeQ?p!bsKqje7*IVJx)!a6vKEy@w6DLEArj9aA0#R45VRs&thd9)$3B zrig3*Ft`MWn@>fYm*vwOlGIirQ5FiB5j{T`1}MbbaHs?5WiWsV5rz*pC3}7~9VU6h zU63q1u=Kw~fbkwDk^FK(QUzp`W;0~JqxgWOR9sb?w=Z3KD)9_ut7OcJVYpsO-6~gBx=CvCcVMR^WDIyY=6GiGeN$4lkJa`YfM{RWbMaDCof)?{Ij~exzOk zh43IbWe5Q*&$S_%N;N4N;aP#YGE*+?9wsKWrF=C^4&6y1M$xrA@O zQQ1Ns939=`TRRoLJ?B;OUojPEZ>2*e$v}>FxK+B$P(xqUx%ZGt)N`GRK~|UcMseLj zA*NGIG%A9q(!t*z3=h`{#3%L1cjjhAYa=bC)SL74LcE}SMR zde?K3z2~{z*g99~xpfJf&l0zPkyKv{3iOjdzoyhRrcSsgEiOwxsTVn27gj#%DK68C z@BlP$V0W%~FNi3yJ4-^`vrB_;;o&^`4_{T=HXj&DUs3)nS93V{{esPrSXg@nudc3= ze=@<-`jRcL?MjCB^6BZ-{D`ds>z8cd;VDriX%+t+WZ~pVm1No1-=(F4qsh_;5-;hM zYqQy9w}qFYqG}W;5kGYSX3Cvkwe@XkyGIm#VBaV*eP>;@YYHa9z7zdT6(A#zGXoA? z}zl;5Nqlmas!glQ5pZ6uVVT$=o z{8+8~MYPf;jMp|FjJDob?52%dmx{iKM&JE#&#^?$GP!q9gyEZvqQV=DZ5$9J0!Dy2 z0PHXOiAyl!n)yaM$ZRHTm8phtU z8Qnu(pw`}ihUPqOL&N~0kol{l@vBf%2M~Xe%UKr#6Q3O7nT3tV&;XO&yz6xeR7IHV^--FTm z1xw$@E|hM+Y)<{j80kos&EFaZNmuPogptbOltlp5%v%F2??PWn#PSZ96(>^i&q_uz z=m@SKP3SYpuI#$kgB7_%6_E9N#`T~pLMg(;N>PInoPP*sxi#3lm2WFehlHMG35a7Z z4fbsDlzy19Nu)VSvNkY(-9CWz>pZ4gg9hFQiZd8szA94s2yJ(FA9U*pOkRs|cL}b$ zSlgTxztk$M7e{3IL>c^Xj#W?RKh>NFoRB>Go~X2gbo|hu!3kZh9N~ks>g10qChZB= z$0-x^C;IdPba9=jz`zrWmPeZzxT=tMcY2QdNC>q+dH>uDP`uwxC!}}EU)PbA9h8P9Kh;o<6=#}Yguy~ZWRy~s;E8D}P%Y8G=V|fpm zvnu*@V_~6fgU{-@l7AIvPs`{s`%%;x_dh<*(HcG=1Cs59-hRp%6aAgRkp7I>6fDTS zI#(eOQ%c^(?_GPO)r+ed9Akohs~F)5gp(hy>|1H9Q5reE>HH*_!7c_Tim}y$rd>^c zEBp83Djb6gHcg7v*Ic_9M3z2#GV<}W$7%^RVDZr3Qh1Z0>4A|F?AvZ135X>xM1eEi zMMwPDqNwj~c-13#a~ZGknP$$stzK;ZR>M^_#|}qOGfcT@6K7MCS_J{}hKk7YQoSEl zavAJ9r^hLKX74e=?sEMx8P0e*4WP$DtK*xoBKm4eSJ2DgQi1vc^{Ty$@2PiCna6A7 z2_q-nD6{%}7VSGWK z%f}PjgXwGNACo(g@wRbC1p6aTD*eb9UrEIniMkGNif>eGV$91Tg2dWDohvhCKC_g+ z7Hae71+2=n*FD|_#mjN`0x-01iI{{Ff@ocH_nzSsNpdOgQum^8cg289gAL9ZiCA#00xjTr#k zczGx*GIM2wo=SJ{Sf&+rI3$7)gTM;K0w6``n2JDKW5bE#t;gDJS{?H5VI7`l70xB< zU%u9s4Sgq|m%lz;WfPznw8@=nel@0ES|iAg z9wV_ta=-00{euv$na=Dn7>))F7f&Wg043fX^O?$V7d}08y9euOZa0eL`Om0uPbz{| zYpGWz|In@mz1{sA(w<832vzjH9+j2+sK@K_*h-r#PUqpFBeT{uR0KSNuafEgMUjq& z=!p^hjWQD`kP&A7@%OWcAB_gvug@=GO8B!PzJ}x48gDcTIZdH)01YBAHStk{BXO;#(b)OVYA)0-Gy zydtixg(`TBnP_mhHqul@0xm!2B%|1C&mw3#dmnOKDw`BO<#g-*_M>o-vv^2^RXIv^ z_v12NFxd`mWAaLv0}^(l7jNibsZyhrOPkg$1fCZQ|`4e<|67r#>snYeEdntzDEnIiDwah{toqZ2(OdndGHgT`XJuY9C2u`R z@Xx1_;gdYF%yxX5f*zx7uxGx0Igjbc_g=&9AH8a;Rf6|z^464wH5)o`DFo?bWtfGM zWu8TF$zT*1H~-4z(V9$XuC`u=GlxxrHj5hqjfJE;Bkwoao#ZBIb;bFzO#Q0!lMu#y z`>-q(=Zo5Yxj3(Ly-?(&=l*j1FzgqpKabvr=NdBPVm*d!LBsJJyl!OGC^H9O*T&4uHo;rCau&YVj{-~a6P1&XxL~p zV{?_e_7buN_J%{!yI^4EFv!A_+33U zkXxcrS<$yJoV6o0efX(A&yBJKYLz;&?8BrN%pqL3t&QP4KXCKgu<-OzjsCEvXqm)2H zUaX&>;qE592ad40r6jshMus`vh-j7M&lNGrPkZ`7U6YN%bL8FH89zob$;sW19~(Nr zng3^jRem>Vci?A^i@L~D$>b*}6Oa7G;wh7Hz(>Q0=??DQ+#U(+?=)$__SF*ni2Ea# z9?M$d?%f)yhz+KyYp9~9*{_3q%b34$bxC*seqV0mrUw?|q=#R$zZ6LTXqVBDTHD2YCxIw>h%vhIk;x(Gd3Y}z3wCVO2?Z}pk8e3Gy(U^F?C zEBZcv=g;fsUOx3r0y`riU%ZU?6Gw_>HY7WvpywkmK7wBuM}8x- z)s;I(8yekXi0nkYt9#&YBEe1duH7yC&scRyXXsrO&s{ThX6O0Eq$T4T9hPAmDMtT| zWa5jF;{A&dB1~vTqDs(o#LSYJ_l&E|eD$S}ibHHMS2Z7xhv2FcMQ~ebJnw*0o70++ zOg3|Mg3y(Dm8C;=pt1K@QX1%(xHA2vv#0S^4{I_LmvYI5h zbz%4%TeX;YQ~w@^Dko#cs6KA`Gj)#XyiB%iy~U?)UMTMMl#11`hX#etb`Dr&jt8+P ztU7-g>9}NHP4mNdCjFt@O72q|A9D%Gvysp?DQKKYQK~_J~j&* z;Gs>`JM!GsU)11eDgVZ_e)h9t_(VsDa`8e_iF;aUBTmP;faa8ZqMUB*x)#V-8~o^6 z_D+$|m5vp~6f1>G;QWv_MUb z?d7wkZ~0R%Q)=SKMvJwJMScx94EZfyK*$!tm=&I)oD*~HC3IxQH6uO3t7`)6iyKmRg8&V1Z`o0>hxAi`qeBbrc=$nBBL75}lu_CA`9sFDm#}#Xn8IMr5`?PI@iE06?0|IU7QE0P zg9CcoIGcRPHn&@UkndE*?b(ytd{M*q7GrZXc|`~bp0C)Vx$V8rN-Ns*v_&Ww-si0c zCQKW=O9=xYtgqCs&+_x^!rLxi8?fFGIFvLb!qOj;xm>%y0?px4;VOA`<}IateJE zg&05c84zQ_v@plyA?yy|_h%@M6Hsr)umaj*H=*piCwlAg>IR;? z>YpyDaJ8i0Fs}<=$HbA0(Pj4C*b|_?PToaQ8LMmsZ*a)HscVTzO-&I}3t96*?^?t7 z3Jn(i8)A=&*91zIQXHDC_>78j^vZg%?G4wy*8kc(zw8C3r5D}TVXgIgwz z>}zVqxd5lz7Beo}WFJUofn5B@43q{p0gHjqp5c5#sLDQ1&B9Z91BRUh1>gEV1q}h8G3trw-(6@27~JyA;RM9AgHDBDEc$-%rlb^ z7um*ff**g4Y1h!N1LCxRt|3?j4w9g6)I�$jU%ipIu=;ux|38{OGPjmx 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 literal 0 HcmV?d00001 diff --git a/docs/img/mini-uart.jpg b/docs/img/mini-uart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cad0cb32e860888c2655b219c61f2f7d6879290d GIT binary patch literal 111517 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%0Diy#ukeuhwiI!IC)xa+P@7 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 L1KO~0xHJFREoiHO literal 0 HcmV?d00001 From c27f82d66689b615ba3240b6e5a7f64fe8166e9a Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:13:34 +0100 Subject: [PATCH 33/45] Fix CH9350Comm state-3/4 absolute mouse over-scaling (towards #13) State 3/4 absolute mouse was scaling source pixel coords to 0..0xFFFF (16-bit) on the assumption that the chip's built-in absolute descriptor declared a full 16-bit logical range. Empirically, the chip declares 0..4095 (12-bit) -- matching the CH9329's identical wire format -- and sending values up to 65535 produced classic mod-4096 wrap behaviour on the target host: a tiny on-host motion teleported the cursor wildly, crossing the screen and back as values crossed 4096 boundaries. Confirmed by comparison against the working CH9329 path (kvm_serial/utils/ch9329.py:96), which scales to 0..4095 and works correctly with the same wire frame format. Centralised as a class constant CH9350Comm._ABS_MAX = 0x0FFF; both the absolute-emit path (send_mouse_absolute) and the relative-re-emit path in state 3/4 (send_mouse_relative, which carries position via the absolute frame) now use it. The 16-bit LE wire field is unchanged -- upper 4 bits are unused / Const padding per the chip's descriptor. Tests updated to reflect the new wire bytes. --- kvm_serial/utils/ch9350.py | 35 +++++++++++++++++++++++++++++------ tests/utils/test_ch9350.py | 16 +++++++++------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 2ae4f94..4c8fe2f 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -224,6 +224,16 @@ class CH9350Comm(DataComm): MOU_SER = 0x22 # mouse / HID / port 1 MOU_RID = 0x01 # 4-byte relative mouse report follows + # State-3/4 absolute coordinate range. The chip's built-in absolute mouse + # descriptor declares a 12-bit logical range (0..4095), matching the + # CH9329's identical wire format. Sending values outside this range + # produces mod-4096 wrap behaviour as the host parses the value against + # the descriptor's LogicalMax — a "tiny on-host motion creates enormous + # cursor jumps that wrap" symptom. The X/Y wire fields are 16-bit LE + # regardless; the upper 4 bits are unused / Const padding per the + # descriptor. + _ABS_MAX = 0x0FFF + # How long to wait between 0x81 retransmits while a PID remains un-acked. _ANNOUNCE_RETRY_INTERVAL = 2.0 _HEARTBEAT_INTERVAL = 1.0 @@ -370,8 +380,8 @@ def send_mouse_absolute( ok = self._send_relative_frame(buttons, chunk_dx, chunk_dy, chunk_wheel) and ok return ok - nx = max(0, min(0xFFFF, int((0xFFFF * x) // max(1, width)))) - ny = max(0, min(0xFFFF, int((0xFFFF * y) // max(1, height)))) + nx = max(0, min(self._ABS_MAX, int(((self._ABS_MAX + 1) * x) // max(1, width)))) + ny = max(0, min(self._ABS_MAX, int(((self._ABS_MAX + 1) * y) // max(1, height)))) self._last_x, self._last_y = x, y self._last_width, self._last_height = width, height return self._send_absolute_frame(buttons, nx, ny, wheel) @@ -399,8 +409,19 @@ def send_mouse_relative(self, buttons: int, dx: int, dy: int, wheel: int = 0) -> if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): return self._send_relative_frame(buttons, dx, dy, wheel) - nx = max(0, min(0xFFFF, int((0xFFFF * self._last_x) // max(1, self._last_width)))) - ny = max(0, min(0xFFFF, int((0xFFFF * self._last_y) // max(1, self._last_height)))) + nx = max( + 0, + min( + self._ABS_MAX, int(((self._ABS_MAX + 1) * self._last_x) // max(1, self._last_width)) + ), + ) + ny = max( + 0, + min( + self._ABS_MAX, + int(((self._ABS_MAX + 1) * self._last_y) // max(1, self._last_height)), + ), + ) return self._send_absolute_frame(buttons, nx, ny, wheel) # ------------------------------------------------------------- frame builders @@ -417,8 +438,10 @@ def _send_relative_frame(self, buttons: int, dx: int, dy: int, wheel: int) -> bo return self._send_locked(frame) def _send_absolute_frame(self, buttons: int, x: int, y: int, wheel: int) -> bool: - # x and y are unsigned 16-bit; the leading 0x01 after the cmd byte is - # a fixed report-ID prefix matching empirical captures from real LCs. + # x and y are 12-bit values (0..4095) carried in 16-bit LE fields with + # the upper 4 bits unused / Const padding per the chip's built-in + # absolute descriptor. The leading 0x01 after the cmd byte is a fixed + # report-ID prefix matching empirical captures from real LCs. wh_b = max(-127, min(127, wheel)) & 0xFF frame = HEADER + bytes( [ diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index ea3ed61..0c3fa59 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -98,13 +98,15 @@ def test_state3_absolute_wire_format(self, mock_serial): """ States 3/4 emit 10-byte 0x04 frames: HEADER + 0x04 + 0x01 + btn + xL xH + yL yH + wheel - x and y scale to the chip's unsigned 16-bit space (0..0xFFFF). + x and y scale to the chip's 12-bit absolute space (0..4095) carried + in 16-bit LE fields. Matches the CH9329's identical wire format. """ dc = CH9350Comm(mock_serial, state=3) - # Centre of a 1920x1080 surface scales to 0x7FFF in both axes. + # Centre of a 1920x1080 surface scales to 0x0800 in both axes + # ((4096 * 960) // 1920 = 2048 = 0x0800). dc.send_mouse_absolute(0, 960, 540, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x7f\xff\x7f\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x08\x00\x08\x00") mock_serial.write.reset_mock() # Origin → (0, 0). @@ -112,9 +114,9 @@ def test_state3_absolute_wire_format(self, mock_serial): mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x00\x00\x00\x00") mock_serial.write.reset_mock() - # Bottom-right corner → (0xFFFF, 0xFFFF). + # Bottom-right corner → (0x0FFF, 0x0FFF) (clamped at the 12-bit max). dc.send_mouse_absolute(0, 1920, 1080, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\xff\xff\xff\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x0f\xff\x0f\x00") @patch("serial.Serial", MockSerial) def test_state3_relative_re_emits_last_position(self, mock_serial): @@ -137,12 +139,12 @@ def test_state3_relative_re_emits_last_position(self, mock_serial): mock_serial.write.reset_mock() dc.send_mouse_relative(0x01, 0, 0, 0) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\xff\x7f\xff\x7f\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x08\x00\x08\x00") mock_serial.write.reset_mock() # Scroll event: same position, wheel byte set. dc.send_mouse_relative(0, 0, 0, 1) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x7f\xff\x7f\x01") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x08\x00\x08\x01") @patch("serial.Serial", MockSerial) def test_state4_wire_identical_to_state3(self, mock_serial): From b53f45f5cfae7f786482b9e4618c0900f41cea52 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:14:39 +0100 Subject: [PATCH 34/45] Add debug log for state-0/1/2 abs->rel mouse translation (towards #13) When tracking a relative-mode magnitude issue ("crossing 0.25 of the view window crosses the whole screen of the remote") it's useful to see exactly what scene coordinates the comm layer is receiving, what camera resolution is in scope, and what dx/dy the abs-to-rel translation produces per call. Logs at DEBUG level only -- silent by default; enabled via logging.getLogger("kvm_serial.utils.ch9350").setLevel(logging.DEBUG) or the application's existing log-level controls. --- kvm_serial/utils/ch9350.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 4c8fe2f..d817526 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -370,6 +370,18 @@ def send_mouse_absolute( if self.state in (self.STATE_0, self.STATE_1, self.STATE_2): dx = int(x - self._last_x) dy = int(y - self._last_y) + logger.debug( + "mouse_abs->rel state=%d xy=(%s,%s) wh=(%s,%s) last=(%s,%s) dxdy=(%d,%d)", + self.state, + x, + y, + width, + height, + self._last_x, + self._last_y, + dx, + dy, + ) self._last_x, self._last_y = x, y self._last_width, self._last_height = width, height ok = True From 28371ca736c24394b0a66fb0a36b5aae414c689c Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:32:08 +0100 Subject: [PATCH 35/45] Recalibrate CH9350Comm state-3/4 absolute range to 14-bit (towards #13) Previous fix (c27f82d) assumed the chip's built-in absolute mouse descriptor declared a 12-bit range (0..4095), matching the CH9329's. Empirical re-test on the same hardware shows that's not right: sending 4095 lands the cursor at ~25% across a 1920x1080 target, implying the chip declares ~16383 (14-bit) and we're still 4x short. Bumping _ABS_MAX from 0x0FFF to 0x3FFF. The X/Y wire fields are 16-bit LE regardless; upper 2 bits remain unused / Const padding per the chip's descriptor. Also adds a debug log line in the state-3/4 native-absolute path mirroring the existing one in state-0/1/2: shows scene xy, camera wh, and the scaled chip coords with the active _ABS_MAX. Useful for any follow-up calibration if a different board declares a different range. --- kvm_serial/utils/ch9350.py | 29 ++++++++++++++++++++--------- tests/utils/test_ch9350.py | 18 +++++++++--------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index d817526..a69c4d5 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -224,15 +224,15 @@ class CH9350Comm(DataComm): MOU_SER = 0x22 # mouse / HID / port 1 MOU_RID = 0x01 # 4-byte relative mouse report follows - # State-3/4 absolute coordinate range. The chip's built-in absolute mouse - # descriptor declares a 12-bit logical range (0..4095), matching the - # CH9329's identical wire format. Sending values outside this range - # produces mod-4096 wrap behaviour as the host parses the value against - # the descriptor's LogicalMax — a "tiny on-host motion creates enormous - # cursor jumps that wrap" symptom. The X/Y wire fields are 16-bit LE - # regardless; the upper 4 bits are unused / Const padding per the - # descriptor. - _ABS_MAX = 0x0FFF + # State-3/4 absolute coordinate range. Empirically calibrated against + # cursor landing position vs view input on a 1920x1080 target: + # sending 4095 (12-bit max, the CH9329's range) produced cursor-at-25%, + # implying the chip's built-in descriptor declares ~16383 (14-bit). The + # X/Y wire fields are 16-bit LE regardless; the upper 2 bits are unused + # / Const padding per the chip's descriptor. Sending values >16383 + # produces mod-wrap behaviour ("tiny motion creates enormous cursor + # jumps that wrap") — the symptom that motivated this calibration. + _ABS_MAX = 0x3FFF # How long to wait between 0x81 retransmits while a PID remains un-acked. _ANNOUNCE_RETRY_INTERVAL = 2.0 @@ -394,6 +394,17 @@ def send_mouse_absolute( nx = max(0, min(self._ABS_MAX, int(((self._ABS_MAX + 1) * x) // max(1, width)))) ny = max(0, min(self._ABS_MAX, int(((self._ABS_MAX + 1) * y) // max(1, height)))) + logger.debug( + "mouse_abs->native state=%d xy=(%s,%s) wh=(%s,%s) -> nxny=(%d,%d) of max=%d", + self.state, + x, + y, + width, + height, + nx, + ny, + self._ABS_MAX, + ) self._last_x, self._last_y = x, y self._last_width, self._last_height = width, height return self._send_absolute_frame(buttons, nx, ny, wheel) diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index 0c3fa59..002e731 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -98,15 +98,15 @@ def test_state3_absolute_wire_format(self, mock_serial): """ States 3/4 emit 10-byte 0x04 frames: HEADER + 0x04 + 0x01 + btn + xL xH + yL yH + wheel - x and y scale to the chip's 12-bit absolute space (0..4095) carried - in 16-bit LE fields. Matches the CH9329's identical wire format. + x and y scale to the chip's 14-bit absolute space (0..16383) + carried in 16-bit LE fields. Range empirically calibrated. """ dc = CH9350Comm(mock_serial, state=3) - # Centre of a 1920x1080 surface scales to 0x0800 in both axes - # ((4096 * 960) // 1920 = 2048 = 0x0800). + # Centre of a 1920x1080 surface scales to 0x2000 in both axes + # ((16384 * 960) // 1920 = 8192 = 0x2000). dc.send_mouse_absolute(0, 960, 540, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x08\x00\x08\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x20\x00\x20\x00") mock_serial.write.reset_mock() # Origin → (0, 0). @@ -114,9 +114,9 @@ def test_state3_absolute_wire_format(self, mock_serial): mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x00\x00\x00\x00") mock_serial.write.reset_mock() - # Bottom-right corner → (0x0FFF, 0x0FFF) (clamped at the 12-bit max). + # Bottom-right corner → (0x3FFF, 0x3FFF) (clamped at the 14-bit max). dc.send_mouse_absolute(0, 1920, 1080, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x0f\xff\x0f\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x3f\xff\x3f\x00") @patch("serial.Serial", MockSerial) def test_state3_relative_re_emits_last_position(self, mock_serial): @@ -139,12 +139,12 @@ def test_state3_relative_re_emits_last_position(self, mock_serial): mock_serial.write.reset_mock() dc.send_mouse_relative(0x01, 0, 0, 0) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x08\x00\x08\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x20\x00\x20\x00") mock_serial.write.reset_mock() # Scroll event: same position, wheel byte set. dc.send_mouse_relative(0, 0, 0, 1) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x08\x00\x08\x01") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x20\x00\x20\x01") @patch("serial.Serial", MockSerial) def test_state4_wire_identical_to_state3(self, mock_serial): From 0c8f233e1c4f9461fa8b8786528675758a7745ac Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:45:08 +0100 Subject: [PATCH 36/45] Recalibrate CH9350Comm state-3/4 absolute range to 10-bit (towards #13) Empirical sweep across a 1920x1080 target reveals a periodic clip-sweep-clip-sweep pattern with period 2048 in nx: cursor sweeps fully on nx 0..1023, clamps to the left edge for nx 1024..2047, sweeps again on nx 2048..3071, and so on. That's the signature of an 11-bit signed field in the chip's built-in HID descriptor (LogicalMin=-1024, LogicalMax=+1023, RepSize=11) with bit 10 as the sign bit and bits 11+ silently ignored. Effective usable range from the LC is 0..1023, not the previous guesses of 0..0xFFFF (16-bit) or 0..0x3FFF (14-bit). Setting _ABS_MAX = 0x03FF and updating tests to match. This is empirically calibrated against one CH9350L board and may differ between revisions; if a future board declares a different range the constant is now isolated and easy to override. The state-3/4 debug log added previously gives the data needed for any such re-calibration. --- kvm_serial/utils/ch9350.py | 23 ++++++++++++++--------- tests/utils/test_ch9350.py | 16 ++++++++-------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index a69c4d5..236b7ff 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -224,15 +224,20 @@ class CH9350Comm(DataComm): MOU_SER = 0x22 # mouse / HID / port 1 MOU_RID = 0x01 # 4-byte relative mouse report follows - # State-3/4 absolute coordinate range. Empirically calibrated against - # cursor landing position vs view input on a 1920x1080 target: - # sending 4095 (12-bit max, the CH9329's range) produced cursor-at-25%, - # implying the chip's built-in descriptor declares ~16383 (14-bit). The - # X/Y wire fields are 16-bit LE regardless; the upper 2 bits are unused - # / Const padding per the chip's descriptor. Sending values >16383 - # produces mod-wrap behaviour ("tiny motion creates enormous cursor - # jumps that wrap") — the symptom that motivated this calibration. - _ABS_MAX = 0x3FFF + # State-3/4 absolute coordinate range. Empirically calibrated by + # sweeping scene-x across a 1920x1080 target and recording cursor + # landing position: cursor sweeps fully on nx 0..1023, then clamps to + # the left edge for nx 1024..2047, sweeps again on nx 2048..3071, etc. + # Pattern is consistent with a host descriptor declaring an 11-bit + # signed field (LogicalMin=-1024, LogicalMax=+1023, RepSize=11) with + # bit 10 as the sign bit; values with bit 10 set are interpreted as + # negative, off-screen-left, and clamped to the LogicalMin. Bits 11+ + # are silently ignored, producing the period-2048 wrap. Effective + # usable range from the LC is 0..1023. + # + # The X/Y wire fields are 16-bit LE regardless; the upper 6 bits are + # unused / Const padding per the chip's descriptor. + _ABS_MAX = 0x03FF # How long to wait between 0x81 retransmits while a PID remains un-acked. _ANNOUNCE_RETRY_INTERVAL = 2.0 diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index 002e731..4dac056 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -98,15 +98,15 @@ def test_state3_absolute_wire_format(self, mock_serial): """ States 3/4 emit 10-byte 0x04 frames: HEADER + 0x04 + 0x01 + btn + xL xH + yL yH + wheel - x and y scale to the chip's 14-bit absolute space (0..16383) + x and y scale to the chip's 10-bit absolute space (0..1023) carried in 16-bit LE fields. Range empirically calibrated. """ dc = CH9350Comm(mock_serial, state=3) - # Centre of a 1920x1080 surface scales to 0x2000 in both axes - # ((16384 * 960) // 1920 = 8192 = 0x2000). + # Centre of a 1920x1080 surface scales to 0x0200 in both axes + # ((1024 * 960) // 1920 = 512 = 0x0200). dc.send_mouse_absolute(0, 960, 540, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x20\x00\x20\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x02\x00\x02\x00") mock_serial.write.reset_mock() # Origin → (0, 0). @@ -114,9 +114,9 @@ def test_state3_absolute_wire_format(self, mock_serial): mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x00\x00\x00\x00") mock_serial.write.reset_mock() - # Bottom-right corner → (0x3FFF, 0x3FFF) (clamped at the 14-bit max). + # Bottom-right corner → (0x03FF, 0x03FF) (clamped at the 10-bit max). dc.send_mouse_absolute(0, 1920, 1080, 1920, 1080) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x3f\xff\x3f\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\xff\x03\xff\x03\x00") @patch("serial.Serial", MockSerial) def test_state3_relative_re_emits_last_position(self, mock_serial): @@ -139,12 +139,12 @@ def test_state3_relative_re_emits_last_position(self, mock_serial): mock_serial.write.reset_mock() dc.send_mouse_relative(0x01, 0, 0, 0) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x20\x00\x20\x00") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x01\x00\x02\x00\x02\x00") mock_serial.write.reset_mock() # Scroll event: same position, wheel byte set. dc.send_mouse_relative(0, 0, 0, 1) - mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x20\x00\x20\x01") + mock_serial.write.assert_called_once_with(b"\x57\xab\x04\x01\x00\x00\x02\x00\x02\x01") @patch("serial.Serial", MockSerial) def test_state4_wire_identical_to_state3(self, mock_serial): From 7e6350723b8c668aaa15f5c0598005f8583bac50 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:46:55 +0100 Subject: [PATCH 37/45] Document CH9350L state-3/4 absolute X/Y range (towards #13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 0x04 frame's X/Y fields are 16-bit on the wire but the chip's USB-side descriptor declares an 11-bit signed range. Effective usable range from the LC is 0..1023 (10-bit), not 0..0xFFFF or even the CH9329's 0..4095 -- the matching wire format does not imply a matching declared range. Two updates: - §States 2/3/4: extends the "0x04 format verified" bullet with the range note and the periodic clip-sweep diagnostic signature. - §Divergences: full entry recording the symptom, the prior assumption, the observation, and the cross-chip difference. --- docs/CH9350L_PROTO.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/CH9350L_PROTO.md b/docs/CH9350L_PROTO.md index 17b9106..c45df61 100644 --- a/docs/CH9350L_PROTO.md +++ b/docs/CH9350L_PROTO.md @@ -429,6 +429,7 @@ Verified empirically across all three modes by bidirectional sniff: [state-2 gis - **No `0x02` frames on the wire** — only `0x04`. State-2 relative-mouse and state-3/4 absolute-mouse modes are mutually exclusive. - **`0x04` format verified.** `57 AB 04 0x01 [btn] [XL XH] [YL YH] [wheel]` — 7-byte payload after the cmd byte; `id=0x01` is a fixed report-ID prefix; X/Y are 16-bit little-endian. +- **Effective X/Y range is 0..1023 (10-bit), not the 16-bit field width.** The chip's built-in absolute-mouse descriptor declares an 11-bit signed field (`LogicalMin=-1024, LogicalMax=+1023, RepSize=11`); bit 10 is the sign bit and bits 11+ are silently ignored. Sending values outside 0..1023 produces a periodic clip-sweep-clip-sweep pattern with period 2048 in the value: cursor sweeps left-to-right on `nx ∈ 0..1023`, clamps at the left edge for `nx ∈ 1024..2047` (negative-interpreted), sweeps again on `nx ∈ 2048..3071` (low 11 bits positive), and so on. Note: this is *different* from the CH9329, which uses a 12-bit (0..4095) range despite emitting the same `0x04` wire frame format — the chip's USB-side descriptor differs even though the UART-side framing matches. Calibrate empirically per board if the symptom recurs. - **The LC integrates relative motion into absolute coordinates** when the source device is a relative-motion mouse. So states 3/4 force absolute-mouse semantics on the target regardless of what the source device reports. - **States 3 and 4 are indistinguishable at the UART layer** because the choice between them is made on the UC, not the LC. The UC reads its own dipswitch and selects which built-in descriptor to advertise to the target — HID Mouse for state 3, HID Digitizers for state 4 — without any signalling from the LC. The LC just emits `0x04` abs-coordinate frames either way, and the UC routes them to whichever of its built-in descriptors is active. From an implementation perspective, **states 3 and 4 share the same LC code path**; the operator picks between them via dipswitches on the UC based on what the target host supports. - **Sustained frame stream required for cursor motion.** A real LC emits `0x04` frames at ~50 ms intervals during continuous motion (typically hundreds of frames over a few seconds, with sub-pixel deltas rolled forward into each next frame). An emulator that fires one isolated `0x04` per command does *not* produce visible cursor movement on the target — even though the target's USB host controller still receives the report (the screen un-dims, indicating the OS sees activity). The likely mechanism is that HID Digitizers / abs-mouse drivers require a sustained stream to treat reports as active input rather than as glitches; isolated reports wake the bus but do not update the cursor. The PoC's REPL `m X Y` issues one frame per command and reproduces this "screen wakes, cursor doesn't move" symptom; an LC integration that wants S3/4 cursor motion must emit a continuous burst per move event, mimicking the real LC's poll-driven cadence. @@ -496,6 +497,14 @@ The CH9350 V2.3 datasheet is broadly accurate but in several places contradicts - **Implication:** absolute mouse positioning on a CH9350L UC requires state 3 or state 4 (dipswitch-fixed BIOS modes), where the UC owns the USB device stack with built-in absolute-mouse / digitizer descriptors and frames flow as fixed-format `0x04` packets. State 0/1 cannot be made to support absolute mouse from the LC side alone; this is a UC firmware constraint, not a protocol negotiation issue. - **Caveat:** observed against one CH9350L board (single-DM/DP wired port; the same hardware used for all captures in this document). Whether other CH9350L boards or firmware revisions behave differently has not been tested. +### State-3/4 `0x04` X/Y is 11-bit signed, not 16-bit unsigned + +- **Datasheet (§4.3):** documents the `0x04` absolute mouse frame as `57 AB 04 [id] [btn] [XL] [XH] [YL] [YH] [wheel]` with X/Y as 16-bit LE fields; no statement is made about the chip's USB-side LogicalMin/LogicalMax declarations. +- **Common assumption** (in earlier versions of this document and in the implementation): the field width = the usable range, i.e. X/Y are full 16-bit unsigned 0..0xFFFF. The CH9329's identical `0x04` wire format uses 12-bit (0..4095), so 12-bit was a plausible fallback hypothesis. +- **Observed:** cursor sweeps on `nx ∈ 0..1023`, clamps at left edge on `nx ∈ 1024..2047`, sweeps again on `nx ∈ 2048..3071`, and so on with period 2048. The signature of an 11-bit signed field on the host side: bit 10 acts as the sign bit, negative-interpreted values are out of `LogicalMin=0` and clamp to the left edge, and bits 11+ are silently ignored. +- **Effective LC-side range: 0..1023 (10-bit unsigned).** X/Y on the wire remain 16-bit LE; the upper 6 bits are unused / Const padding per the chip's descriptor. A value of e.g. `0xFFFF` becomes `0x07FF` after low-bit masking, gets bit-10-sign-extended to `-1`, and the host clamps to 0. +- **The chip declares a different range than the CH9329** despite the matching wire format. Implementations should treat the X/Y range as a per-chip property and calibrate empirically — the periodic clip-sweep symptom is the diagnostic signature. + --- ## Reference Implementation From 85d759d956cb730aae4bc5324625e236b5ca9ba0 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 18:55:54 +0100 Subject: [PATCH 38/45] Document target-side pointer acceleration in state 0/1/2 (towards #13) States 0/1 and 2 ship relative deltas, so the cursor on the target inherits the OS's pointer-acceleration curve: slow drags track the source faithfully, fast drags overshoot. This is a property of relative-mouse-over-anything, not a kvm-serial bug -- but worth flagging in the user guide so the next user noticing the asymmetry doesn't go hunting for it in the code path the way we did. State-selection bullets: extends the state 2 / 0/1 entries with a one-line note on the acceleration inheritance, and the state 3 entry with a corresponding "no acceleration" callout (since reports carry positions, not deltas). Troubleshooting: new entry "Cursor lags behind on fast drags" with mitigations -- switch to state 3, or disable acceleration on Windows / macOS / Linux. --- docs/CH9350L_GUIDE.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/CH9350L_GUIDE.md b/docs/CH9350L_GUIDE.md index ce958b7..d681cd0 100644 --- a/docs/CH9350L_GUIDE.md +++ b/docs/CH9350L_GUIDE.md @@ -88,14 +88,18 @@ and which UART frame format is used. - **State 3** is the recommended starting point for most users controlling a modern desktop OS with an absolute mouse pointer (the cursor goes exactly where you click in the video feed). + Because reports carry positions rather than deltas, target-side pointer acceleration has no + effect — the cursor lands exactly where the source pointer is in the video feed. - **State 2** is the right choice for BIOS/UEFI setup screens, boot menus, PXE boot, and recovery consoles. Legacy BIOS and UEFI CSM only enumerate USB HID boot-protocol devices with a relative mouse; the absolute-mouse descriptor used in states 3/4 will not enumerate - in those environments. + in those environments. The cursor is driven by relative deltas, so target-side pointer + acceleration applies (see the troubleshooting note below). - **State 4** is for multi-monitor setups using HID Digitizer absolute positioning. - **State 0/1** is the most advanced option: the UC mirrors descriptors from real USB HID devices. It supports relative mouse only (absolute mouse frames are silently dropped by the - UC firmware in this state). Most users should prefer state 3 or 4. + UC firmware in this state) and inherits target-side pointer acceleration as a result. Most + users should prefer state 3 or 4. > **BIOS/UEFI tip:** If you need to access the BIOS on the target machine, temporarily > switch to state 2 (change S0/S1 and power-cycle the board). You can switch back to state 3 @@ -260,6 +264,25 @@ Common causes: Absolute mouse is silently dropped by the CH9350L UC firmware in state 0/1. This is a hardware/firmware limitation. Use **state 3** or **state 4** for absolute mouse positioning. +### Cursor lags behind on fast drags (states 0/1, 2) + +In states 0/1 and 2 kvm-serial converts the source pointer's absolute position into relative +deltas, which means the cursor on the target is driven by the same path as any USB mouse +plugged in directly — including the target's **pointer acceleration**. A slow drag tracks +the source faithfully; a fast drag overshoots; a deliberate slow-down lets the source catch +up. This is a property of relative-mouse input on accelerated OSes, not a kvm-serial bug. + +Mitigations: + +- **Switch to state 3** if the target supports it. State 3 ships positions rather than deltas + so target-side acceleration has no effect. +- **Disable target-side pointer acceleration** if state 3 isn't an option: + - Windows: Settings → Devices → Mouse → Additional mouse options → Pointer Options → + uncheck *Enhance pointer precision* + - macOS: `defaults write -g com.apple.mouse.scaling -1` then log out (no GUI toggle) + - Linux: per-DE — typically `xinput set-prop` for X11, or the desktop environment's + mouse settings panel + ### Descriptor handshake never completes (state 0/1) - Run with `--verbose` to see handshake progress. From 5c43bc42f56e6f49fb0fe5cbe6d54871140e1c43 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 19:03:20 +0100 Subject: [PATCH 39/45] Fix drag broken by on_move clearing held button (towards #13) A drag is mouse-down -> on_move(s) while held -> mouse-up. MouseOp.on_move was always sending buttons=0, so the very first move event during a drag released the held button on the target -- drag failed on first motion in every state (0/1, 2, 3/4 alike). MouseOp now tracks held buttons in a bitmask: - on_click sets the bit on press, clears it on release; bits are independent so e.g. holding LEFT while pressing RIGHT correctly yields 0x03 and releasing LEFT alone leaves 0x02 held. - on_move and on_scroll pass the current bitmask through so drags and (uncommon) button-held scroll preserve target-side button state. Tests cover the regression (drag preserves the bit through multiple on_move events) and the multi-button-held bitmask path. --- kvm_serial/backend/implementations/mouseop.py | 39 +++++++--- tests/backend/test_mouse.py | 77 +++++++++++++++++++ 2 files changed, 106 insertions(+), 10 deletions(-) diff --git a/kvm_serial/backend/implementations/mouseop.py b/kvm_serial/backend/implementations/mouseop.py index 728c14d..4ea14de 100644 --- a/kvm_serial/backend/implementations/mouseop.py +++ b/kvm_serial/backend/implementations/mouseop.py @@ -22,6 +22,15 @@ class MouseOp(BaseOp): Mouse operation mode: handle mouse movement """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Bitmask of currently-held mouse buttons. Updated by on_click and + # carried through on_move/on_scroll so that drags (button held while + # moving) preserve the held button on the target. Without this every + # move event during a drag would clear the button bit and the target + # would see release-on-first-motion. + self._buttons = 0 + @property def name(self): return "mouse" @@ -30,23 +39,33 @@ def run(self): raise Exception("Run not supported for MouseOp mode. Call from handler class") def on_move(self, x, y, width, height): - # No buttons, no wheel — pure positional update. - self.hid_serial_out.send_mouse_absolute(0, x, y, width, height) - logging.debug(f"Mouse moved to ({x}, {y})") + # Carry the current held-button state so drags work. + self.hid_serial_out.send_mouse_absolute(self._buttons, x, y, width, height) + logging.debug(f"Mouse moved to ({x}, {y}) buttons={self._buttons:#x}") return True def on_click(self, x, y, button: MouseButton, down): + # Update held-button bitmask: set on press, clear on release. Other + # buttons remain held -- supports e.g. middle-click held while + # left-click is pressed. + bit = button.value[0] + if down: + self._buttons |= bit + else: + self._buttons &= ~bit & 0xFF # Click events ride the relative-mouse path with zero motion deltas. - # MouseButton enum values are single-byte bitmasks; release decays to 0. - button_byte = button.value[0] if down else 0 - self.hid_serial_out.send_mouse_relative(button_byte, 0, 0, 0) - logging.debug(f"Mouse click at ({x}, {y}) with {button} (down={down})") + self.hid_serial_out.send_mouse_relative(self._buttons, 0, 0, 0) + logging.debug( + f"Mouse click at ({x}, {y}) with {button} (down={down}) " + f"-> buttons={self._buttons:#x}" + ) return True # Suppress the click event (pynput) def on_scroll(self, x, y, dx, dy): # CH9329 has a single wheel axis (vertical); horizontal dx is dropped. - # Clamping happens in the comm layer. - self.hid_serial_out.send_mouse_relative(0, 0, 0, int(dy)) - logging.debug(f"Mouse scroll ({x}, {y}, {dx}, {dy})") + # Clamping happens in the comm layer. Carry held-button state so that + # button-held-while-scrolling is preserved (uncommon but valid). + self.hid_serial_out.send_mouse_relative(self._buttons, 0, 0, int(dy)) + logging.debug(f"Mouse scroll ({x}, {y}, {dx}, {dy}) buttons={self._buttons:#x}") return True diff --git a/tests/backend/test_mouse.py b/tests/backend/test_mouse.py index 386bc72..6578acf 100644 --- a/tests/backend/test_mouse.py +++ b/tests/backend/test_mouse.py @@ -121,6 +121,83 @@ def test_on_click(self, mock_serial, sys_modules_patch, _datacomm_manager): assert result is True mock_comm.send_mouse_relative.reset_mock() + def test_drag_preserves_held_button(self, mock_serial, sys_modules_patch, _datacomm_manager): + """ + Regression: a drag is mouse-down → on_move(s) while held → mouse-up. + Previously on_move always sent buttons=0, so the very first move event + during a drag released the held button on the target. on_click must + update MouseOp._buttons and on_move must pass it through. + """ + with patch.dict("sys.modules", sys_modules_patch): + from kvm_serial.backend.mouse import MouseListener + from kvm_serial.backend.implementations.mouseop import MouseButton + + mock_comm = _datacomm_manager.comm + listener = MouseListener(mock_serial) + listener._width = 1920 + listener._height = 1080 + + left_button = MagicMock() + listener.pynput_button_mapping = {left_button: MouseButton.LEFT} # type: ignore + + # Press LEFT. + listener.on_click(100, 200, left_button, True) + mock_comm.send_mouse_relative.assert_called_once_with(0x01, 0, 0, 0) + mock_comm.reset_mock() + + # Move while held: button must still be set in the abs frame. + listener.on_move(150, 250) + mock_comm.send_mouse_absolute.assert_called_once_with(0x01, 150, 250, 1920, 1080) + mock_comm.reset_mock() + + # Another move while held. + listener.on_move(200, 300) + mock_comm.send_mouse_absolute.assert_called_once_with(0x01, 200, 300, 1920, 1080) + mock_comm.reset_mock() + + # Release LEFT: button bit clears. + listener.on_click(200, 300, left_button, False) + mock_comm.send_mouse_relative.assert_called_once_with(0x00, 0, 0, 0) + mock_comm.reset_mock() + + # Subsequent move with no buttons held: buttons=0. + listener.on_move(250, 350) + mock_comm.send_mouse_absolute.assert_called_once_with(0x00, 250, 350, 1920, 1080) + + def test_multi_button_held_independently( + self, mock_serial, sys_modules_patch, _datacomm_manager + ): + """ + Holding LEFT and pressing RIGHT (e.g. while LEFT is still down) + produces a combined bitmask 0x03; releasing one clears only that bit. + """ + with patch.dict("sys.modules", sys_modules_patch): + from kvm_serial.backend.mouse import MouseListener + from kvm_serial.backend.implementations.mouseop import MouseButton + + mock_comm = _datacomm_manager.comm + listener = MouseListener(mock_serial) + listener._width = 1920 + listener._height = 1080 + left = MagicMock() + right = MagicMock() + listener.pynput_button_mapping = { # type: ignore + left: MouseButton.LEFT, + right: MouseButton.RIGHT, + } + + listener.on_click(0, 0, left, True) # 0x01 + mock_comm.send_mouse_relative.assert_called_with(0x01, 0, 0, 0) + + listener.on_click(0, 0, right, True) # 0x01 | 0x02 = 0x03 + mock_comm.send_mouse_relative.assert_called_with(0x03, 0, 0, 0) + + listener.on_click(0, 0, left, False) # 0x03 & ~0x01 = 0x02 + mock_comm.send_mouse_relative.assert_called_with(0x02, 0, 0, 0) + + listener.on_click(0, 0, right, False) # 0x02 & ~0x02 = 0x00 + mock_comm.send_mouse_relative.assert_called_with(0x00, 0, 0, 0) + def test_on_scroll(self, mock_serial, sys_modules_patch, _datacomm_manager): """ Test MouseListener.on_scroll forwards vertical scroll deltas as the From a46ca746928695df2887a76f9d53b28bbe0bf684 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 19:51:02 +0100 Subject: [PATCH 40/45] Fix CH9350L abs coordinate range in DataComm docstring (towards #13) _ABS_MAX is 0x03FF (10-bit, 0..1023); the docstring said 0xFFFF. Co-Authored-By: Claude Sonnet 4.6 --- kvm_serial/utils/communication.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kvm_serial/utils/communication.py b/kvm_serial/utils/communication.py index 2ca1fba..22b66bc 100644 --- a/kvm_serial/utils/communication.py +++ b/kvm_serial/utils/communication.py @@ -43,7 +43,7 @@ def send_mouse_absolute( x, y are in source pixel coordinates; width, height bound the source surface so subclasses can scale into the chip's native coordinate - space (CH9329: 0..4095; CH9350 state 3/4: 0..0xFFFF). + space (CH9329: 0..4095; CH9350 state 3/4: 0..0x3FF). """ @abstractmethod From 58020f799a4bd8edc590df4b9945afe99ab51337 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 20:09:50 +0100 Subject: [PATCH 41/45] =?UTF-8?q?Clamp=20wheel=20delta=20to=20=C2=B1127=20?= =?UTF-8?q?in=20state-0/1=20mouse=20frame=20(towards=20#13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _build_state01_mou_frame clamped dx/dy but applied only & 0xFF to wheel, which would silently wrap large values rather than clamp them. Consistent with the signed-byte encoding used everywhere else. Co-Authored-By: Claude Sonnet 4.6 --- kvm_serial/utils/ch9350.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kvm_serial/utils/ch9350.py b/kvm_serial/utils/ch9350.py index 236b7ff..602b0be 100644 --- a/kvm_serial/utils/ch9350.py +++ b/kvm_serial/utils/ch9350.py @@ -505,12 +505,13 @@ def _build_state01_mou_frame(self, btn: int, dx: int, dy: int, wheel: int) -> by """ State-0/1 relative mouse frame: HEADER + cmd + LEN + SER + RID + [btn dx dy wheel] + CTR + CTRSUM - cmd is 0x88 (state 0) or 0x83 (state 1). dx/dy clamp to ±127. + cmd is 0x88 (state 0) or 0x83 (state 1). dx/dy/wheel clamp to ±127. """ cmd = 0x83 if self.state == self.STATE_1 else 0x88 dx_b = max(-127, min(127, int(dx))) & 0xFF dy_b = max(-127, min(127, int(dy))) & 0xFF - data = bytes([self.MOU_RID, btn & 0xFF, dx_b, dy_b, wheel & 0xFF]) + wh_b = max(-127, min(127, int(wheel))) & 0xFF + data = bytes([self.MOU_RID, btn & 0xFF, dx_b, dy_b, wh_b]) ctr = self._mou_counter & 0xFF self._mou_counter += 1 ctr_sum = (ctr + sum(data)) & 0xFF From 1f6ebc790ec674684c0447d379816c10f8c54356 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 20:11:56 +0100 Subject: [PATCH 42/45] Type comm_manager as DataCommManager via TYPE_CHECKING import (towards #13) Avoids the circular runtime import while giving type checkers (and readers) the correct type, removing the need for # type: ignore on the stop() call. Co-Authored-By: Claude Sonnet 4.6 --- kvm_serial/kvm.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index 0b1bfb7..3cdebad 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -4,7 +4,10 @@ import logging import time import math -from typing import cast, Optional +from typing import TYPE_CHECKING, cast, Optional + +if TYPE_CHECKING: + from kvm_serial.backend.manager import DataCommManager # Allow running as a script directly (python kvm_serial/kvm.py) by ensuring # the project root is first on sys.path so local `kvm_serial.*` imports resolve. @@ -171,7 +174,7 @@ class KVMQtGui(QMainWindow): mouse_op: MouseOp | None = None # The DataCommManager owning the active comm + its lifecycle. Reset # alongside the serial port whenever __init_serial reopens the link. - comm_manager: object | None = None + comm_manager: "DataCommManager | None" = None # Dimensions window_default_width: int = 1280 @@ -938,7 +941,7 @@ def _stop_comm_manager(self): if self.comm_manager is not None: try: - self.comm_manager.stop() # type: ignore[attr-defined] + self.comm_manager.stop() except Exception as e: logging.error(f"Error stopping DataCommManager: {e}") self.comm_manager = None From 1ff0de6492943ba3f6ee0734951ce2cae5a37b49 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 20:13:34 +0100 Subject: [PATCH 43/45] Use -1 sentinel for CH9329 state in _PROTOCOL_OPTIONS (towards #13) state=0 was ambiguous with CH9350L state 0. Also guard the ch9350_state_var assignment in _on_protocol_selected so selecting CH9329 does not clobber the remembered CH9350L working state. Co-Authored-By: Claude Sonnet 4.6 --- kvm_serial/kvm.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kvm_serial/kvm.py b/kvm_serial/kvm.py index 3cdebad..b955e02 100755 --- a/kvm_serial/kvm.py +++ b/kvm_serial/kvm.py @@ -854,7 +854,7 @@ def _populate_keyboard_layouts(self): # (label, protocol, ch9350_state). State is unused for CH9329 but kept # here for menu uniformity. _PROTOCOL_OPTIONS = [ - ("CH9329", "ch9329", 0), + ("CH9329", "ch9329", -1), ("CH9350L (state 0/1, paired)", "ch9350", 0), ("CH9350L (state 2, BIOS)", "ch9350", 2), ("CH9350L (state 3, abs mouse)", "ch9350", 3), @@ -898,7 +898,8 @@ def _on_protocol_selected(self, protocol: str, state: int): action.setChecked(action.text() == target_label) self.protocol_var = protocol - self.ch9350_state_var = state + if protocol == "ch9350": + self.ch9350_state_var = state logging.info(f"Selected protocol: {target_label}") self.__init_serial() From e8ce22429e47d70c733c2e5995de1b7cd72c62d1 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 20:24:04 +0100 Subject: [PATCH 44/45] Add tests for ch9350 internals, parse_frames edge cases, manager error paths (towards #13) Covers _parse_frames partial-buffer and unknown-cmd branches, start/stop lifecycle (state-0 tx thread spawn, double-start guard), heartbeat, send_announce, announce_descriptors, maybe_retransmit_descriptors, and run_attach_sequence. Also covers the swallowed-exception paths in DataCommManager.reset() and stop(). ch9350.py: 73% -> 92%. manager.py: 93% -> 100%. Co-Authored-By: Claude Sonnet 4.6 --- tests/backend/test_manager.py | 26 ++++++ tests/utils/test_ch9350.py | 158 ++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) diff --git a/tests/backend/test_manager.py b/tests/backend/test_manager.py index 7249f33..38279be 100644 --- a/tests/backend/test_manager.py +++ b/tests/backend/test_manager.py @@ -169,3 +169,29 @@ def test_join_with_no_listeners_is_a_noop(): """No listeners = nothing to wait on; join() returns silently.""" mgr = DataCommManager(MagicMock(), comm_cls=lambda p: MagicMock()) mgr.join() # should not raise + + +def test_reset_continues_when_stop_raises(): + """reset() swallows exceptions from stop() and still clears the singleton.""" + comm = MagicMock() + comm.stop.side_effect = RuntimeError("stop exploded") + DataCommManager(MagicMock(), comm_cls=lambda p: comm) + + DataCommManager.reset() # must not raise + + with pytest.raises(RuntimeError): + DataCommManager.get() + + +def test_stop_continues_when_comm_stop_raises(): + """Exceptions from comm.stop() are swallowed; listener shutdown still completes.""" + comm = MagicMock() + comm.stop.side_effect = RuntimeError("comm stop failed") + mgr = DataCommManager(MagicMock(), comm_cls=lambda p: comm) + listener = MagicMock() + mgr.attach(listener) + + mgr.stop() # must not raise + + listener.stop.assert_called_once() + comm.stop.assert_called_once() diff --git a/tests/utils/test_ch9350.py b/tests/utils/test_ch9350.py index 4dac056..8c954d6 100644 --- a/tests/utils/test_ch9350.py +++ b/tests/utils/test_ch9350.py @@ -1,3 +1,4 @@ +import time import pytest from unittest.mock import patch from kvm_serial.utils.ch9350 import ( @@ -5,6 +6,7 @@ DEFAULT_KBD_PID, DEFAULT_MOUSE_PID, HEADER, + HEARTBEAT_FRAME, _parse_frames, _split_relative_delta, ) @@ -474,3 +476,159 @@ def test_wheel_only_on_first_chunk(self, mock_serial): # State-2 frame: header(2) + cmd(1) + btn(1) + dx(1) + dy(1) + wheel(1) = 7B wheels = [call.args[0][6] for call in mock_serial.write.call_args_list] assert wheels == [3, 0, 0] + + +class TestCH9350ParseFramesEdgeCases: + """Edge-case coverage for _parse_frames: partial buffers and uncommon cmds.""" + + def test_partial_header_only_returns_empty(self): + """Only the 2-byte header in buffer: need cmd byte too, so hold.""" + frames, remaining = _parse_frames(bytearray(b"\x57\xab")) + assert frames == [] + assert remaining == bytearray(b"\x57\xab") + + def test_partial_0x83_missing_len_byte(self): + """0x83 cmd present but LEN byte not yet received.""" + frames, remaining = _parse_frames(bytearray(b"\x57\xab\x83")) + assert frames == [] + + def test_partial_0x83_truncated_payload(self): + """LEN says 5 bytes but only 2 payload bytes present.""" + buf = bytearray(b"\x57\xab\x83\x05\x13\x01") # need 4+5=9, have 6 + frames, remaining = _parse_frames(buf) + assert frames == [] + + def test_complete_0x81_device_connection_frame(self): + """A well-formed 0x81 Device Connection Frame parses to (0x81, payload).""" + desc = b"\x01\x02\x03" + pid = b"\x40\x00" + chk = (sum(desc) + sum(pid)) & 0xFF + plen = len(desc) + raw = ( + b"\x57\xab\x81\x00" + + bytes([plen & 0xFF, (plen >> 8) & 0xFF]) + + desc + + pid + + bytes([chk]) + ) + frames, remaining = _parse_frames(bytearray(raw)) + assert len(frames) == 1 + assert frames[0][0] == 0x81 + assert remaining == bytearray() + + def test_partial_0x81_missing_len_field(self): + """0x81 present but fewer than 6 bytes total: hold until LEN is readable.""" + frames, remaining = _parse_frames(bytearray(b"\x57\xab\x81\x00")) + assert frames == [] + + def test_partial_0x81_truncated_payload(self): + """LEN field present but payload bytes incomplete.""" + plen = 10 + buf = bytearray(b"\x57\xab\x81\x00" + bytes([plen, 0x00]) + b"\x01\x02") + frames, remaining = _parse_frames(buf) + assert frames == [] + + def test_unknown_cmd_bounded_by_next_header(self): + """Unknown cmd bytes are collected up to the start of the next header.""" + heartbeat = b"\x57\xab\x82\xa3" + buf = bytearray(b"\x57\xab\xff\x01\x02") + bytearray(heartbeat) + frames, _ = _parse_frames(buf) + cmds = [f[0] for f in frames] + assert 0xFF in cmds + assert 0x82 in cmds + + def test_unknown_cmd_large_buffer_no_header_flushed(self): + """Unknown cmd, no next header, buf > 128 bytes: frame emitted, buffer cleared.""" + buf = bytearray(b"\x57\xab\xff") + bytearray(200) + frames, remaining = _parse_frames(buf) + assert any(f[0] == 0xFF for f in frames) + assert remaining == bytearray() + + def test_unknown_cmd_small_buffer_no_header_held(self): + """Unknown cmd, no next header, buf <= 128 bytes: hold and wait for more data.""" + buf = bytearray(b"\x57\xab\xff\x01\x02") + frames, remaining = _parse_frames(buf) + assert frames == [] + assert remaining == buf + + +class TestCH9350CommInternals: + """Direct tests of CH9350Comm lifecycle hooks and internal frame helpers.""" + + def test_start_called_twice_raises(self, mock_serial): + dc = CH9350Comm(mock_serial, state=2) + with patch.object(dc, "_rx_loop"): + dc.start() + with pytest.raises(RuntimeError, match="start\\(\\) called twice"): + dc.start() + dc.stop() + + def test_start_state0_spawns_tx_thread(self, mock_serial): + """State 0 creates both rx and tx-maintenance threads.""" + dc = CH9350Comm(mock_serial, state=0) + with patch.object(dc, "_rx_loop"), patch.object(dc, "_tx_maint_loop"): + dc.start() + assert dc._tx_thread is not None + assert dc._rx_thread is not None + dc.stop() + assert dc._tx_thread is None + assert dc._rx_thread is None + + def test_start_state2_no_tx_thread(self, mock_serial): + """States 2/3/4 spawn the rx thread but no tx-maintenance thread.""" + dc = CH9350Comm(mock_serial, state=2) + with patch.object(dc, "_rx_loop"): + dc.start() + assert dc._tx_thread is None + dc.stop() + + def test_heartbeat_sends_frame_and_updates_timestamp(self, mock_serial): + dc = CH9350Comm(mock_serial, state=2) + before = time.time() + dc._heartbeat() + mock_serial.write.assert_called_once_with(HEARTBEAT_FRAME) + assert dc._last_hb >= before + + def test_send_announce_sends_0x89_frame(self, mock_serial): + dc = CH9350Comm(mock_serial, state=2) + dc._send_announce() + mock_serial.write.assert_called_once_with(b"\x57\xab\x89") + + def test_announce_descriptors_sends_two_0x81_frames(self, mock_serial): + dc = CH9350Comm(mock_serial, state=0) + with patch("kvm_serial.utils.ch9350.time.sleep"): + dc._announce_descriptors() + assert mock_serial.write.call_count == 2 + for c in mock_serial.write.call_args_list: + frame = c.args[0] + assert frame[:2] == b"\x57\xab" + assert frame[2] == 0x81 + + def test_maybe_retransmit_sends_when_unacked_and_interval_elapsed(self, mock_serial): + dc = CH9350Comm(mock_serial, state=0) + dc._last_mouse_announce = 0.0 + dc._last_kbd_announce = 0.0 + # _uc_p1/p2 default to b"\x00\x00", which differs from both PIDs + dc._maybe_retransmit_descriptors(time.time()) + assert mock_serial.write.call_count == 2 + + def test_maybe_retransmit_skips_when_recently_announced(self, mock_serial): + dc = CH9350Comm(mock_serial, state=0) + now = time.time() + dc._last_mouse_announce = now + dc._last_kbd_announce = now + dc._maybe_retransmit_descriptors(now) + mock_serial.write.assert_not_called() + + def test_run_attach_sequence_no_wait_sends_full_sequence(self, mock_serial): + """wait_for_uc=False skips the UC-seen guard and sends the full attach sequence.""" + dc = CH9350Comm(mock_serial, state=0) + with patch("kvm_serial.utils.ch9350.time.sleep"): + dc._run_attach_sequence(wait_for_uc=False) + cmds = [c.args[0][2] for c in mock_serial.write.call_args_list] + # 0x86 + 0x80 x2 + 0x82 (heartbeat) + 0x89 + 0x81 x2 (descriptors) = 7 writes + assert mock_serial.write.call_count == 7 + assert 0x86 in cmds + assert 0x80 in cmds + assert 0x89 in cmds + assert 0x81 in cmds From dd0b53ad44ed44896395f5e71e58775eb12de544 Mon Sep 17 00:00:00 2001 From: Samantha Finnigan <1038320+sjmf@users.noreply.github.com> Date: Sun, 10 May 2026 20:26:27 +0100 Subject: [PATCH 45/45] Bump year and version number --- README.md | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7641926..711075e 100644 --- a/README.md +++ b/README.md @@ -169,4 +169,4 @@ With thanks to [@beijixiaohu](https://github.com/beijixiaohu), the author of the Thank you, once again, to everyone who has [contributed](CONTRIBUTING.md) to this project. ## License -(c) 2023-25 Samantha Finnigan and contributors (except where acknowledged) and released under [MIT License](LICENSE.md). +(c) 2023-26 Samantha Finnigan and contributors (except where acknowledged) and released under [MIT License](LICENSE.md). diff --git a/pyproject.toml b/pyproject.toml index 96e3902..6f9aa8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "kvm-serial" -version = "1.5.5" +version = "1.5.6" authors = [{ name="Samantha Finnigan", email="1038320+sjmf@users.noreply.github.com" }] description = "Python package for controlling remote computers using UART-to-USB-HID bridge chips" readme = "README.md"