Firmware USB Descriptors

Device Descriptor

VID/PID: The standard OpenPilot values (0x20A0/0x415a to 0x415c)

  • OpenPilot VendorID: 0x20a0
  • OpenPilot Mainboard = 0x415a
  • OpenPilot CopterControl = 0x415b,
  • OpenPilot PipXtreme = 0x415c

BCDDevice: This is a 2 byte field that has the following breakdown:

  Board Model (MS-Byte) Board state
OpenPilot MainBoard v1 0x01 0x01 : bootloader 0x02: running
INS (no USB though but reserving for future) 0x02  
PipX v1 0x03 0x01: BL; 0x02: run
CopterControl v1 0x04 0x01:BL; 0x02: run

The Bootloader also has a concept of board model in its “DeviceID”: the board model follows the same convention as in the table above.

Note: the Board Model used in bcdDevice is obsolete by now, since the OpenPilot project has purchased several distinct ProductIDs for its various boards. It is kept as it is today until we find another need for this byte. Before we had several ProductIDs, it was used to distinguish which board was behind the (unique) VID/PID.

Vendor String:

Product String: This should indicate what the device is (OP-Board, PipX, etc.)

HID Descriptor

Note: this is partly obsolete, as we use bcdDevice to differenciate between bootloader & running mode.

Usage Page: 0xff (Custom device)


Bootloader Direct Communication Serial pass through (PipX)
0x01 0x02 0x03

In principle we could just have bootloader and non-bootloader, but then we would need to look at the BCDDevice field to know if it is a PipX or main board directly and unfortunately that’s not currently part of the rawhid implementation.


So empty here ... leave a comment!


电子邮件地址不会被公开。 必填项已用*标注