#### Plugin: Corsair

## Introduction

This plugin allows to update firmware on Corsair mice and receivers:

- SABRE RGB PRO WIRELESS
- SLIPSTREAM WIRELESS USB Receiver
- KATAR PRO WIRELESS
- KATAR PRO XT Gaming Mouse
- SABRE PRO Gaming Mouse

## Code structure

All devices handled by one object (FuCorsairDevice). Receivers with wireless-only devices will be shown as two entities: parent device as a receiver and wireless device as a child. Difference in behavior is handled by private flags.

FuCorsairBp contains low-level protocol related routines. Device objects should call correct versions of these routines in order to update firmware. Correct routines chosen by device quirks and private flags.

## Wired mice update behavior

Mice and/or it’s wireless adapter must be connected to host via USB cable to apply an update. The device is switched to bootloader mode to flash updates, and is reset automatically to new firmware after flashing.

## Wireless mice update behavior

The receiver should be connected to host and the mouse should be turned on and not sleeping.

## Quirk Use

This plugin uses the following plugin-specific quirks:

### CorsairVendorInterfaceId

Some devices have non-standard USB interface for protocol communication. This quirk should be set if protocol interface is not 1.

Since: 1.8.0

### CorsairSubdeviceId

Specifies ID of any wireless child device which can be updated. Polling will be turned on if a subdevice is not connected when parent is being probed.

### Flags:legacy-attach

This flag is used if legacy attach command should be used

### Flags:no-version-in-bl

This flag handles cases if device reports incorrect firmware version in bootloader mode.

### Flags:is-subdevice

This flag tells device that it is a child device. All subdevice behavior tweaks will be applied.

## Version Considerations

This plugin has been available since fwupd version `1.8.0`.

## Owners

Anyone can submit a pull request to modify this plugin, but the following people should be consulted before making major or functional changes:

- Andrii Dushko: `dushko`-devx