From e2e7beef15b0a29b61e1f7ec2ac347248085891e Mon Sep 17 00:00:00 2001 From: orcunulutas <4663659+EMAIL_4> Date: Thu, 27 Aug 2026 22:41:39 +0300 Subject: [PATCH] Add Monster Tulpar TD3 AIO LCD control-traffic captures USBPcap captures of the 1d6b:0130 controller recorded while the official Monster Windows application was running (Windows 11 25H2). Filtered to the target device only; media upload traffic removed. The usb2 file contains brightness and rotate commands with device responses; the other files cover enumeration and keep-alive polling. See the folder README for details. --- .../README.md | 77 ++++++++++++++++++ .../monster-td3-usb2.pcapng | Bin 0 -> 25372 bytes .../monster-td3-usb3.pcapng | Bin 0 -> 56876 bytes .../monster-td3-usbpcap.pcapng | Bin 0 -> 118064 bytes 4 files changed, 77 insertions(+) create mode 100644 Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/README.md create mode 100644 Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb2.pcapng create mode 100644 Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb3.pcapng create mode 100644 Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usbpcap.pcapng diff --git a/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/README.md b/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/README.md new file mode 100644 index 0000000..a67e6c5 --- /dev/null +++ b/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/README.md @@ -0,0 +1,77 @@ +# Monster Tulpar TD3 AIO LCD — capture 01 + +USB traffic captures of the Monster Tulpar TD3 AIO LCD controller, recorded +while the official Monster Windows application was running. This is the raw +data from which the device control protocol implemented in liquidctl +([liquidctl/liquidctl#921]) was reconstructed. + +Media upload traffic (on-screen display file transfers, the `0x5c`-prefixed +block records and their `POST transport 1` / `POST transported 1` framing) +has been removed from these files and is not included here. + +## Device + +- USB ID: `1d6b:0130` +- Manufacturer string: `Monster Inc.` +- Product string: `Monster USB Device` +- bcdDevice: `0x0100` +- Device class: HID (`bInterfaceClass = 0x03`) +- Data endpoints: interrupt OUT `0x01`, interrupt IN `0x81` + +## Capture environment + +- OS: Windows 11 25H2 (build 26200) +- Capture backend: USBPcap (pcapng, LINKTYPE 152 / USBPcap header) +- Capture date: 2026-08-21 (all timestamps UTC+03) +- Host software: official Monster application, active for the whole session + +Note: the files were filtered down from full-bus captures; they contain only +the traffic of the target device (USB device address 8). Traffic of other +devices on the bus was removed. + +## Files + +| File | Time range (UTC+3) | Duration | Packets (after media removal) | Content | +|------------------------------|-----------------------|----------|-------------------------------|---------| +| `monster-td3-usbpcap.pcapng` | 15:07:34 – 15:07:44 | 9.8 s | 517 | enumeration, control framing | +| `monster-td3-usb2.pcapng` | 15:12:00 – 15:12:32 | 31.8 s | 262 | brightness + rotate commands with device responses | +| `monster-td3-usb3.pcapng` | 15:15:07 – 15:17:03 | 116 s | 643 | enumeration, keep-alive polling | + +## Observed traffic + +### Control commands (`monster-td3-usb2.pcapng`) + +The only file containing host-initiated control commands, after media removal: + +- `POST rotate 1` with `{"degree":...}` (2 commands); +- `POST brightness 1` with `{"value":...}` (2 commands); +- the corresponding device responses (`1 200` / `AckNumber`). + +### Keep-alive behavior + +The official Windows application keeps the LCD awake by uploading a fresh +`.osd` on-screen display file approximately once per second — i.e. the +observed Windows keep-alive is implemented through media upload. Because +media transfers were removed from these files, `monster-td3-usb3.pcapng` +(the 116 s session) contains only the accompanying interrupt polling and +enumeration traffic, not `POST power` / `STATE all` style messages. The +`POST power` / `STATE all` control-path keep-alive documented in +`docs/developer/protocol/monster_lcd.md` (liquidctl) was reconstructed from +separate Linux testing, not from these Windows captures. + +### Media upload (not included) + +`.osd` files were pushed over interrupt OUT `0x01` in 1024-byte blocks framed +by an HTTP-like envelope (`POST transport 1` ... `POST transported 1`, with +`SeqNumber`, `Date`, `ContentType`, `ContentLength` headers and JSON metadata +such as `{"type":"media","fileSize":985,"fileName":"....osd"}`). This traffic +is intentionally excluded from the files above; contact the contributor if a +reference copy is needed. + +## See also + +- liquidctl driver: [liquidctl/liquidctl#921] +- Protocol documentation: `docs/developer/protocol/monster_lcd.md` (in the PR above) +- Standalone Linux implementation: + +[liquidctl/liquidctl#921]: https://github.com/liquidctl/liquidctl/pull/921 diff --git a/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb2.pcapng b/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb2.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..e520d8280c47ca00933f25b7c4e60c9952e0f887 GIT binary patch literal 25372 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 literal 0 HcmV?d00001 diff --git a/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb3.pcapng b/Monster Tulpar TD3 AIO LCD/01 - control traffic - orcunulutas/monster-td3-usb3.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..11cadb7694f6ca6bdb653c6c18ae40520f98970a GIT binary patch literal 56876 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 literal 0 HcmV?d00001