Fundamentals 9 min read

Decode USB‑C Cable Capabilities with WhatCable: Reading E‑Marker Chips and USB‑PD

The article introduces WhatCable, an open‑source macOS menu‑bar utility that reads IOKit data to reveal a USB‑C cable’s E‑Marker specifications, supported data rates, current limits, and the negotiated USB‑PD power profile, helping users identify whether a cable can fast‑charge, transfer at high speed, or is counterfeit.

Geek Labs
Geek Labs
Geek Labs
Decode USB‑C Cable Capabilities with WhatCable: Reading E‑Marker Chips and USB‑PD

Tool Features

Cable type overview : identifies Thunderbolt/USB4, USB device, charge‑only, slow‑charge, or not connected.

Charging diagnostics :

"Cable is limiting charging speed" – cable spec lower than charger.

"Charging at 30W (charger can do up to 96W)" – Mac limited by battery state.

"Charging well at 96W" – normal operation.

E‑Marker chip information : reports real data rate (USB 2.0, 5/10/20/40/80 Gbps), current rating (3 A / 5 A, up to 60 W / 100 W / 240 W), and vendor ID.

Charger PDO list : shows all voltage levels advertised by the charger (5 V, 9 V, 12 V, 15 V, 20 V …) with the currently negotiated PDO highlighted.

Connected device info : vendor name and product type parsed from PD Discover Identity.

USB device list : enumerates storage devices, docks, etc., under the physical port they occupy.

Technical Background

USB‑C and USB Power Delivery (PD)

USB‑C defines only the connector shape; USB‑PD is the protocol that negotiates power and data speed over that connector.

When a Mac is connected to a charger via a USB‑C cable, the following handshake occurs:

The charger broadcasts its supported voltage/current levels as Power Data Objects (PDOs).

The Mac selects the most suitable PDO based on battery state and current demand.

The cable’s E‑Marker chip reports its own limits – maximum current and maximum data rate.

Both sides operate at the agreed‑upon level.

This negotiation is opaque to users; they cannot see whether a cable is mis‑advertised, how much power the charger can actually deliver, or why the Mac settles on a lower wattage.

E‑Marker Chip

Maximum data transfer rate (USB 2.0, 3.2 Gen1, 3.2 Gen2, Thunderbolt 3, Thunderbolt 4).

Maximum current (3 A or 5 A, corresponding to 60 W, 100 W, or 240 W).

Vendor ID (VID).

Physical length and other attributes.

According to the USB‑PD specification, any cable rated above 60 W must include an E‑Marker; lower‑power cables may be passive and rely on blind matching, which explains why cheap “fast‑charge” cables often deliver only 5 W.

The E‑Marker communicates via SOP (Start of Packet) messages. After insertion, the Mac sends a “Discover Identity” command; the E‑Marker replies with a VDO (Vendor Defined Object) payload that WhatCable parses to reveal the true specifications.

IOKit Services Read by WhatCable

AppleHPMInterfaceType10/11/12

(M3) / AppleTCControllerType10/11 (M1/M2) / IOPort (M4 Mac mini front‑port): provides per‑port status – connection state, protocol, plug orientation, and presence of an E‑Marker. IOPortFeaturePowerSource: supplies the full list of charger PDOs and the currently selected “winning” PDO. IOPortTransportComponentCCUSBPDSOP (SOP), SOPp (near‑end E‑Marker), SOPpp (far‑end E‑Marker): returns the VDO data from PD Discover Identity.

XHCI controller subtree: maps each USB device to its physical port.

All interfaces are native to macOS and require no special permissions.

Power Data Object (PDO)

Voltage (5 V, 9 V, 12 V, 15 V, 20 V, or fixed steps).

Maximum current.

Flag indicating Extended Power Range (EPR) for 240 W.

A charger may broadcast multiple PDOs, for example 5 V/3 A, 9 V/3 A, 12 V/3 A, 15 V/3 A, 20 V/5 A (100 W). The Mac picks the best one. WhatCable monitors the currently negotiated PDO and displays it, enabling messages such as “Charger can reach 96 W, but Mac is charging at 30 W”.

Installation

# Homebrew installation
brew tap darrylmorley/whatcable
brew install --cask whatcable
# Or manual download
# https://github.com/darrylmorley/whatcable/releases

Command‑line interface:

whatcable                # Human‑readable summary
whatcable --json        # JSON output for scripts
whatcable --watch       # Monitor plug‑in events
whatcable --raw         # Include raw IOKit attributes

Requires macOS 14 (Sonoma) or later on Apple Silicon. The M4 Mac mini front‑port uses a different IOPort interface, so the code contains separate paths for different chips.

GitHub: https://github.com/darrylmorley/whatcable<br/>Stars: 1986 | Language: Swift
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

open sourcemacOSUSB-CE-MarkerIOKitUSB Power DeliveryWhatCable
Geek Labs
Written by

Geek Labs

Daily shares of interesting GitHub open-source projects. AI tools, automation gems, technical tutorials, open-source inspiration.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.