What's new
-
Active cable details. When an active cable's e-marker carries a second VDO (every modern Thunderbolt / USB4 active cable does), WhatCable now reports its physical medium (copper or optical), active element (re-driver or re-timer), and whether optical cables are electrically isolated end-to-end. The bullet list shows the user-facing essentials; a new "Active cable (VDO 2)" section behind the technical-details toggle exposes USB protocol support, lane count, idle power, thermal limits, and the rest.
-
Three new cable trust signals. Hedged flags raised against the e-marker, all spec-backed:
- Invalid VDO version. Passive cables must report v1.0 in the Cable VDO version field; active cables can additionally report v1.2 (deprecated) or v1.3. Other values are spec-Invalid.
- Invalid cable termination. Passive cables advertise VCONN required / not required; active cables advertise one-end-active or both-ends-active. Cross-pollinated values are spec-Invalid.
- EPR claimed with 20V max VBUS. A passive cable that reports EPR Capable but only 20V max VBUS is internally inconsistent: EPR needs 48V or 50V to operate.
-
Cable wattage limit shown in the headline. When the charger advertises more wattage than the cable is rated for, the headline now ends with
· NW cable. Example:Thunderbolt / USB4 · 96W charger · 60W cable. No suffix when cable matches or exceeds charger, so it only appears when there's something actually worth flagging. -
Bullet ordering rethought. The popover bullets are grouped into three blocks the user is mentally asking about: live link state and connected device first, cable details next, charger numbers last. Related facts now sit next to each other instead of being scattered.
-
CLI now shows trust signals. The
whatcableplain-text output gains aCable trust signals:section that mirrors the popover's orange card, so the CLI no longer silently omits flags the GUI would warn about. -
whatcable --rawsurfaces VDO 2. The CLI's deep view gets the same per-field rendering as the GUI's technical-details toggle, suitable for piping into a bug report. -
Localisation infrastructure. Swift String Catalogs are wired in for the menu bar app and
WhatCableCore. English is the default language and the only one shipping in this build. Translations welcome via the new pinned issue.
Help wanted: translations
If you'd like to see WhatCable in your language, the door is now open. Pinned issue #81 has the details.
Internal
- New
PDVDO.ActiveCableVDO2struct with all 13 fields from Table 6.44 (USB-PD R3.2 V1.2). Bits 8 / 5 / 4 ("USB4 Supported", "USB 2.0 Supported", "USB 3.2 Supported") are inverted in the spec encoding (0 = supported); the decoder inverts them so the public Swift API uses the conventionaltrue = supportedconvention. Pinned bytestDecodeActiveCableVDO2_ProtocolBitsAreInvertedso it can't drift. PDIdentity.activeCableVDO2accessor only fires on SOP' / SOP'' endpoints whose ID Header reports active-cable type and whose VDO list has at least 5 entries.- Three new
TrustFlagcases (invalidVDOVersion,invalidCableTermination,eprClaimedWithLowMaxVoltage) flow through the sameDecodeWarning -> TrustFlagpipeline as the existing reserved-encoding flags. JSON, popover, and CLI surfaces all pick them up automatically. PortSummarybullet construction split into three labelled blocks (link / cable / power); a new ordering test pins the structure so future refactors can't quietly drift the layout.- Headline cable-wattage suffix is computed once and threaded through every status path. Suppressed cleanly when either side is unknown, when cable matches charger, or when nothing is plugged in.