Firmware Update MD CC is mandatory for all Z-Wave Plus v2 nodes to support (v5+). The controller needs to control it - querying firmware versions, initiating updates, and transferring firmware images. This is a complex CC with a chunked transfer protocol.
Scope:
FirmwareUpdateMdCommandClass : CommandClass<FirmwareUpdateMdCommand> with [CommandClass(CommandClassId.FirmwareUpdateMetaData)]
GetMetaDataAsync() → ManufacturerID, FirmwareIDs (multiple targets), checksums, max fragment size, hardware version (v5)
RequestUpdateAsync(ushort manufacturerId, ushort firmwareId, ushort checksum, byte target, ushort fragmentSize, bool activation, byte hardwareVersion) → acceptance status
- Handle incoming
FirmwareUpdateMdGet - the node requests firmware fragments by report number
- Send
FirmwareUpdateMdReport - respond with the requested firmware data chunk
- Handle
FirmwareUpdateMdStatusReport - transfer complete status (success, checksum error, insufficient memory, etc.)
ActivationSetAsync(...) (v5) - trigger firmware activation after transfer
- Handle
ActivationStatusReport
- Transfer state machine: idle → negotiating → transferring → waiting for status → (optional) activating
- CRC-CCITT checksum calculation for firmware images
- Fragment management: break firmware binary into fragments of the negotiated size
- Resume support (v5): continue interrupted transfers
Design notes: This is one of the most complex CCs. Consider implementing the basic query (GetMetaData) first, then the full transfer protocol as a follow-up if needed. The transfer protocol benefits from Transport Service (#150) for large payloads.
Firmware Update MD CC is mandatory for all Z-Wave Plus v2 nodes to support (v5+). The controller needs to control it - querying firmware versions, initiating updates, and transferring firmware images. This is a complex CC with a chunked transfer protocol.
Scope:
FirmwareUpdateMdCommandClass : CommandClass<FirmwareUpdateMdCommand>with[CommandClass(CommandClassId.FirmwareUpdateMetaData)]GetMetaDataAsync()→ ManufacturerID, FirmwareIDs (multiple targets), checksums, max fragment size, hardware version (v5)RequestUpdateAsync(ushort manufacturerId, ushort firmwareId, ushort checksum, byte target, ushort fragmentSize, bool activation, byte hardwareVersion)→ acceptance statusFirmwareUpdateMdGet- the node requests firmware fragments by report numberFirmwareUpdateMdReport- respond with the requested firmware data chunkFirmwareUpdateMdStatusReport- transfer complete status (success, checksum error, insufficient memory, etc.)ActivationSetAsync(...)(v5) - trigger firmware activation after transferActivationStatusReportDesign notes: This is one of the most complex CCs. Consider implementing the basic query (
GetMetaData) first, then the full transfer protocol as a follow-up if needed. The transfer protocol benefits from Transport Service (#150) for large payloads.