Model support

Adding a Blade model

Each model needs its own device checks, captures, tests, and recovery plan.

Current support

See the Protocol Reference for supported models and verified firmware.

  1. Record the identity. Add the model name and number, VID/PID, supported firmware, HID usage, report lengths, and a reliable host check. Never store the laptop serial number.
  2. Find the read-only interfaces. Exactly one intended interface must match. Reject missing, blocked, ambiguous, or mismatched devices.
  3. Start with queries. Decode safe identity, thermal, fan, battery, lighting, and firmware reads before testing setters. Include malformed and unknown responses.
  4. Capture each control. Follow the safe testing guide for every value and power state. Do not copy a fixture from another model because it looks similar.
  5. Expose only verified controls. Missing evidence means fewer controls, not a guessed default.
  6. Keep model differences isolated. Reuse names such as performance preset and lighting effect, but keep byte-level differences in the model protocol code.
  7. Test safety and recovery. Unknown models must receive zero writes. Test reconnect, sleep and resume, service restart, power changes, malformed replies, other controllers, restoration, and long runs.
  8. Document the result. Add a model-specific protocol table with the exact firmware scope and reviewed core revision.

Suggested code shape

Identity

Stores VID/PID, HID usage, report lengths, product identity, and supported firmware.

Catalog

Contains the reviewed fixtures and typed commands for this model.

Protocol

Builds reports for typed operations and validates every reply.

Capabilities

Returns only the controls supported by the exact device, firmware, queries, and fixtures.

Acceptance checks

Core integration map

LayerContributor responsibilityFailure behavior
IdentityAdd a per-model descriptor for model number, VID/PID, validated BIOS or firmware scope, usage tuples, and exact report lengths.Any mismatch, missing match, or multiple matching interfaces produces no writable device.
EnvelopeReuse a report codec only when status, transaction, class, ID, payload length, checksum, report ID, padding, and terminator behavior are proven identical.Malformed or semantically unknown responses are rejected, never normalized to a default.
QueriesAdd typed request builders and command-specific response decoders before depending on a state in policy or UI.An unavailable or unknown query removes the capability or power-state decision.
SettersAdd one semantic action per sanitized fixture, with independent readback or an explicit one-shot-only response contract and restoration evidence.No raw class/ID/payload API is added; absent evidence means absent capability.
CapabilitiesExpose the intersection of exact identity, admitted commands, readable state, power constraints, and controller-ownership rules.The new model can safely support fewer features than an older model.
DocumentationAdd a model-specific table and the reviewed core revision. Keep response shapes symbolic unless exact bytes are needed to explain the contract.Docs never authorize a command that core does not already admit.

Before opening a pull request