-
Notifications
You must be signed in to change notification settings - Fork 91
Firmware Updates
This page discusses the IPP model for firmware updates as described in:
- PWG 5100.22-2025: IPP System System v1.1 (SYSTEM) - Published Candidate Standard
- IPP Firmware Update Extensions v1.0 (FWUPDATE) - Prototype Draft
The goal of this page is to discuss changes to both documents to normalize how firmware updates are modeled for IPP.
The SYSTEM spec models firmware updates as Resource objects of type 'executable-firmware'. To install new firmware, you create a Resource object with the Create-Resource operation, send the new firmware file/image using the Send-Resource-Data operation, and install it using the Install-Resource operation. FWUPDATE calls this a Directed Firmware Update, and a Client can monitor the progress of the update using Get-Resource-Attributes requests.
The FWUPDATE spec models firmware updates as abstract firmware files with associated metadata that are retrieved from one or more firmware repositories. New firmware is discovered either automatically by the Printer or manually by the Client using the Check-For-New-Printer-Firmware operation, with attributes and "printer-state-reasons" keywords that allow a Client to discover whether there is new firmware to install. New firmware can be installed autonomously by the Printer or manually by the Client using the Update-New-Printer-Firmware operation. Additional "printer-state-reasons" keywords provide hints to the Client about the current phase/state of the update.
The following tables show the corresponding SYSTEM and FWUPDATE firmware update state information:
| SYSTEM "resource-state/-reasons" | FWUPDATE "printer-state-reasons" |
|---|---|
| '3' (pending) | 'new-firmware-available' |
| '3' + 'resource-incoming' | 'new-firmware-acquisition-in-progress' |
| '4' (available) | 'new-firmware-acquisition-success' |
| '4' + 'install-requested' | 'firmware-update-in-progress' + 'new-firmware-XXX-in-progress' |
| '5' (installed) | 'firmware-update-success' + 'new-firmware-XXX-success' |
| '6' (canceled) | N/A |
| '7' (aborted) | 'firmware-update-failure' + 'new-firmware-XXX-failure' |
| '7' + 'digital-signature-XXX' | 'new-firmware-validation-failure' |
| N/A | 'firmware-repository-access-error' |
| N/A | 'firmware-repository-unreachable' |
| SYSTEM Resource Attributes | FWUPDATE Printer Attributes |
|---|---|
| "date-time-at-XXX" | N/A |
| "resource-data-uri" | N/A |
| "resource-format" | N/A |
| "resource-id" | N/A |
| "resource-info" | "printer-new-firmware-info-uri" (semantically equivalent) |
| "resource-name" (single value) | "printer-new-firmware-name" |
| "resource-k-octets" | "printer-new-firmware-k-octets" |
| "resource-natural-language" | N/A |
| "resource-patches" (single value) | "printer-new-firmware-patches" |
| "resource-signature" | N/A |
| "resource-state" | See previous table |
| "resource-state-message" | N/A |
| "resource-state-reasons" | See previous table |
| "resource-string-version" (single value) | "printer-new-firmware-string-version" |
| "resource-type" | Assumed to be 'executable-firmware' |
| "resource-use-count" | N/A |
| "resource-uuid" | N/A |
| "resource-version" (single value) | "printer-new-firmware-version" |
| "time-at-XXX" | N/A |
FWUPDATE is planning on adding a Printer Status attribute with the syntax "integer(0:MAX)" that reports the estimated number of seconds that a Printer will be inaccessible while performing a firmware update (rebooting, etc.) Several names have been proposed:
- "printer-new-firmware-restart-duration" (Smith)
- "printer-new-firmware-restart-delay" (Ira)
- "printer-new-firmware-update-time" or "printer-new-firmware-restart-time" (Mike)
The corresponding Resource Status attribute for a future SYSTEM update could then be "resource-restart-time".
Smith also noticed we do not have a "printer-state-reasons" or "system-state-reasons" keyword that indicates that the Printer or System is/will soon be restarting, and Mike has proposed adding a 'restarting' keyword for this purpose. Presumably a Client would see this immediately prior to the Printer/System doing its restart, either from a Get-Printer/System-Attributes response or via a notification event in a Get-Notifications response.
For FWUPDATE, simplify the "printer-state-reasons" keywords to the following list:
- 'firmware-repository-access-error': Unable to access the configured firmware repository (permissions/server-side issue)
- 'firmware-repository-unreachable': Unable to connect to the configured firmware repository
- 'firmware-update-acquisition-failed': Unable to download new firmware
- 'firmware-update-acquisition-in-progress': Downloading new firmware
- 'firmware-update-activation-failed': Unable to activate new firmware
- 'firmware-update-activation-in-progress': Activation in progress (might be paired with 'restarting')
- 'firmware-update-delay-until-specified': The "delay-update-until" operation attribute was specified
- 'firmware-update-failed': The most recent firmware update has failed (might be paired with other 'xxx-failed' keywords)
- 'firmware-update-in-progress': A firmware update is in progress (might be paired with other 'xxx-in-progress' keywords)
- 'firmware-update-installation-failed': Unable to install new firmware
- 'firmware-update-installation-in-progress': Installing new firmware
- 'firmware-update-pending': New firmware is scheduled to be installed
- 'firmware-update-requested': New firmware has been requested to be installed
- 'firmware-update-successful': Firmware has been updated successfully
- 'firmware-update-validation-failed': Unable to validate new firmware
- 'firmware-update-validation-in-progress': Validating new firmware
- 'restarting': Printer is/about to restart and will not be accessible for a period of time.
This uses a common "firmware-update" prefix instead of "new-firmware-update" and eliminates the "cleanup" and "recovery" values which are both implementation-specific and probably unnecessary details - all the Client cares about is "the Printer did this work for the firmware update". Also, failed cleanup/recovery isn't actionable by the Client.
Also add a "printer-new-firmware-restart-time (integer(0:MAX))" Printer Status attribute that provides the estimated number of seconds that the Printer will be inaccessible when installing/activating new firmware.
For SYSTEM, adopt the terminology/model from FWUPDATE and add (applicable) new "resource-state-reasons" keywords to correspond to the "printer-state-reasons" from FWUPDATE to reflect intermediate/terminating state for the Install-Resource operation, e.g.:
- 'activation-failed': Unable to activate new firmware
- 'activation-in-progress': Activation in progress (might be paired with 'restarting')
- 'installation-failed': Unable to install new firmware
- 'installation-in-progress': Installing new firmware
- 'validation-failed': Unable to validate new firmware
- 'validation-in-progress': Validating new firmware
Also add a "resource-restart-time (integer(0:MAX))" Resource Status attribute that provides the estimated number of seconds that the Printer/System will be inaccessible when installing/activating the resource.
The IPP Sample Software implements IPP Everywhere™, IPP 3D, and many other IPP standards and extensions.