#### Unknown document

# Plugin: Lenovo Accessory

## Introduction

The Lenovo Accessory plugin supports the standardized firmware update protocol for Lenovo peripherals. This protocol is MCU-agnostic and supports both HID and BLE transports.

## Protocol Support

This plugin enables firmware management across different connection types:

- USB HID: Communicates via Get/Set Feature reports on the `hidraw` subsystem.
- Bluetooth LE (BLE): Uses a custom service with dedicated Write/Read characteristics.

## Supported Devices

The plugin identifies devices using specific hardware IDs:

### HID Devices (Single-bank)

- Normal Mode:
- `HIDRAW\VEN_17EF&DEV_629D`
- `HIDRAW\VEN_17EF&DEV_6201`
- Bootloader Mode:
- `HIDRAW\VEN_17EF&DEV_6194` (Common bootloader PID)

### BLE Devices (Dual-bank)

- `BLUETOOTH\VID_17EF&PID_61FE`
- `BLUETOOTH\VID_17EF&PID_629A`

## Update Behavior

The update strategy differs based on the device’s memory architecture:

### HID (Single-bank Update)

HID devices utilize a single-bank design. For these devices:

1. The device must reboot into a dedicated bootloader mode (`DEV_6194`) to receive firmware.
2. The plugin uses `CounterpartGuid` logic to map the runtime device to its bootloader interface.
3. A final restart is performed to jump back to the new application code.

### BLE (Dual-bank / In-place Update)

BLE devices utilize a dual-bank design. For these devices:

1. No Bootloader required: Firmware is written to the secondary bank while the device is in runtime mode.
2. The device remains functional during the transfer, minimizing user downtime.
3. A reboot is only triggered at the end to swap the active banks and apply the update.