--- type: entity tags: [parking, hardware, printer, escpos, network, usb, status] sources: [] updated: 2026-09-09 --- # K200L thermal printer (Xprinter / ICS "XP-K200L") — the park-buzi unit An 80 mm ESC/POS receipt printer, **USB + LAN**, sold under several names. Bottom label: *"THERMAL RECEIPT PRINTER — Model: K200L — Paper Width: 80mm — Print Speed: 200mm/s — Power Input: 24V 2.5A — Cash Drawer: 24V 1A — Interface: USB+LAN — Command Support: ESC/POS"*, serial `BLU2107080238`. Identified on the dev bench 2026-09-09; **it is the printer that "goes offline after a paper reload" at park-buzi** ([[printer-usb-transport]] §Field bug). The lab's older "ICS XP-K200L" (10.0.10.11, the 2026-07 USB truncation work) is the same family. Three names for one device, all seen on the bench: | Where | What it calls itself | | --- | --- | | bottom label | K200L | | USB descriptor (`lsusb`) | `1fc9:2016 NXP Semiconductors Printer-80` / "Printer POS-80" (0x1fc9 = the NXP controller chip; no brand) | | LAN board web UI | "J-Speed Ethernet Interface Module", "Ethernet WebConfig Version 1.02", copyright "POS" | The app driver is **`k200l`** ("K200L 80mm thermal printer (Xprinter / ICS, USB+LAN)", `packages/devices/src/drivers/printer-k200l.ts`). It prints through the shared generic ESC/POS path (identical bytes, TCP 9100 or `usblp`) and **adds live status from the LAN board** — see below. Before 2026-09-09 this unit ran on the generic `escpos` driver (reachability only), which is why the app could never show its cover/paper state. ## Network setup (the evening that was never written down) - **Factory address `192.168.123.100/24`, DHCP OFF.** Nothing announces it; the printer just sits there on a subnet nobody uses. To reach it, give the workstation a second address in `192.168.123.0/24` (Windows: adapter → IPv4 → Advanced → add `192.168.123.101`), then open `http://192.168.123.100/`. - The web configurator (port 80, **no authentication**) is a three-frame page: *Information* (`ip_info.htm`: MAC, IP, mask, gateway, DHCP on/off, DHCP timeout), *Configuration* (`ip_config.htm`: DHCP client on/off + timeout, fixed IP / mask / gateway as four octet fields, **Save**, Restore Default, cancel), *Printer Status* (`prt_status.htm`), *Printer Test* (`prt_test.htm`), and a **Restart** button in the menu. - **Set a fixed address on the device VLAN** (park-lab: `10.0.10.7/24`, gateway `10.0.10.1`) → Save → Restart; then remove the temporary `192.168.123.x` address from the workstation. Keep DHCP off — the app addresses printers by IP ([[rongta-printer]] §Deployment). - The self-test page (`prt_test.htm` / the "Print Test Page" button on the status page) prints the current network settings, so a unit with a forgotten address can be read back that way. - The board's HTTP server is **tiny**: the frameset reloads its frames every 1–3 s and the status page every 5 s, and it holds very few connections. **Close the browser tab while the app is polling**, or connections intermittently time out (seen on the bench: `ping` fine, port open, every second HTTP connect hanging while the page was open in a browser). > **WSL gotcha while doing this (2026-09-09):** the dev box then carried BOTH `192.168.123.101` > and `10.0.10.203` on `eth0`, and WSL sourced 10.0.10.x traffic from the 192.168.123 address — > the exact [[wsl-dev-networking]] source-address bug, except `parking-net.service` pins `eth1` > and the mirrored LAN NIC is `eth0` now. Symptom: `ping` works, `curl` times out. Run the fix for > `eth0`, or drop the temporary address once the printer is moved. ## Live status — the `/prt_status.htm` page The LAN board serves a five-row table the printer has already decoded from its own sensors: ``` Cover Is Open Yes/No Cutter Error Yes/No Paper End Yes/No Paper Near End Yes/No Printer Off-Line Yes/No ``` **Same rows, same `