Plugin: Sunwinon HID

Introduction

This plugin updates Sunwinon HID devices (e.g. stylus/digitizer class) using a vendor-specific DFU-like protocol transported over hidraw channel. This protocol is derived from an update procedure originally designed by GOODIX.

GUID Generation

These devices use the standard DeviceInstanceId values, e.g.

  • HIDRAW\VEN_17EF&DEV_62CE

Firmware Format

Only unsigned firmware images are currently supported. Layout is as follows:

Content Size
firmware binary data variable, aligned to 16 bytes
image info block 40 bytes
reserved 8 bytes

The structure of trailing image info block is defined in fu-sunwinon-hid.rs as FuStructSunwinonDfuImageInfo.

Protocol ID

This plugin registers the protocol ID com.sunwinon.hid.

Update Behavior

The device will enter firmware update mode when receiving ProgramStart command, and exit when receiving ProgramEnd command or process failed/timeout in the middle.

Commands during handshake are sent under normal runtime mode.

Device will replug then reboot into normal runtime mode automatically after procedure finished. Due to a quirk in the device that it goes into unexpected state if message of HID layer is sent between BLE ‘Connected’ and ‘ServiceResolved’, a 2000ms delay is added during setup.

External Interface Access

Requires hidraw read/write access to send and receive HID reports.

Vendor ID Security

The vendor ID is set from the HID vendor ID, in this instance set to HIDRAW:0x17EF