Added support for Streamdeck Pedal and updated UI to better fit the Packed UI style

This commit is contained in:
2026-02-27 22:47:08 +01:00
committed by erik
parent 5a70f775f1
commit 93faae5cc8
1463 changed files with 306917 additions and 0 deletions

View File

@@ -0,0 +1,420 @@
# HIDAPI device info struct:
dev->vendor_id = 0x045E
dev->product_id = 0x02FF
dev->manufacturer_string = ""
dev->product_string = "Controller (Xbox One For Windows)"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0005
dev->usage_page = 0x0001
dev->path = "\\?\HID#VID_045E&PID_02FF&IG_00#7&5ea4a81&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0005
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 7
pp_data->caps_info[0]->NumberOfCaps = 7
pp_data->caps_info[0]->ReportByteLength = 16
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 7
pp_data->caps_info[1]->LastCap = 7
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 7
pp_data->caps_info[2]->LastCap = 7
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x02D8
pp_data->NumberLinkCollectionNodes = 4
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0001
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 16
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0003
pp_data->cap[0]->BitCount = 16
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0005
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0000
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 0
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0031
pp_data->cap[0]->NotRange.Reserved1 = 0x0031
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->NotButton.HasNull = 0
pp_data->cap[0]->NotButton.Reserved4 = 0x000000
pp_data->cap[0]->NotButton.LogicalMin = 0
pp_data->cap[0]->NotButton.LogicalMax = -1
pp_data->cap[0]->NotButton.PhysicalMin = 0
pp_data->cap[0]->NotButton.PhysicalMax = -1
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 16
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 16
pp_data->cap[1]->BitField = 0x02
pp_data->cap[1]->NextBytePosition = 0x0003
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0000
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0030
pp_data->cap[1]->NotRange.Reserved1 = 0x0030
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = 0
pp_data->cap[1]->NotButton.LogicalMax = -1
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = -1
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 16
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0007
pp_data->cap[2]->BitCount = 16
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0009
pp_data->cap[2]->LinkCollection = 0x0002
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0000
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0034
pp_data->cap[2]->NotRange.Reserved1 = 0x0034
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 2
pp_data->cap[2]->NotRange.Reserved4 = 2
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = 0
pp_data->cap[2]->NotButton.LogicalMax = -1
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = -1
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x00
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 16
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0005
pp_data->cap[3]->BitCount = 16
pp_data->cap[3]->BitField = 0x02
pp_data->cap[3]->NextBytePosition = 0x0007
pp_data->cap[3]->LinkCollection = 0x0002
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0000
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 1
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0033
pp_data->cap[3]->NotRange.Reserved1 = 0x0033
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 3
pp_data->cap[3]->NotRange.Reserved4 = 3
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = 0
pp_data->cap[3]->NotButton.LogicalMax = -1
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = -1
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x0001
pp_data->cap[4]->ReportID = 0x00
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 16
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0009
pp_data->cap[4]->BitCount = 16
pp_data->cap[4]->BitField = 0x02
pp_data->cap[4]->NextBytePosition = 0x000B
pp_data->cap[4]->LinkCollection = 0x0003
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0000
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 1
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0032
pp_data->cap[4]->NotRange.Reserved1 = 0x0032
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 4
pp_data->cap[4]->NotRange.Reserved4 = 4
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = 0
pp_data->cap[4]->NotButton.LogicalMax = -1
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = -1
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
pp_data->cap[5]->UsagePage = 0x0009
pp_data->cap[5]->ReportID = 0x00
pp_data->cap[5]->BitPosition = 0
pp_data->cap[5]->BitSize = 1
pp_data->cap[5]->ReportCount = 16
pp_data->cap[5]->BytePosition = 0x000B
pp_data->cap[5]->BitCount = 16
pp_data->cap[5]->BitField = 0x02
pp_data->cap[5]->NextBytePosition = 0x000D
pp_data->cap[5]->LinkCollection = 0x0000
pp_data->cap[5]->LinkUsagePage = 0x0001
pp_data->cap[5]->LinkUsage = 0x0005
pp_data->cap[5]->IsMultipleItemsForArray = 0
pp_data->cap[5]->IsButtonCap = 1
pp_data->cap[5]->IsPadding = 0
pp_data->cap[5]->IsAbsolute = 1
pp_data->cap[5]->IsRange = 1
pp_data->cap[5]->IsAlias = 0
pp_data->cap[5]->IsStringRange = 0
pp_data->cap[5]->IsDesignatorRange = 0
pp_data->cap[5]->Reserved1 = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[5]->Range.UsageMin = 0x0001
pp_data->cap[5]->Range.UsageMax = 0x0010
pp_data->cap[5]->Range.StringMin = 0
pp_data->cap[5]->Range.StringMax = 0
pp_data->cap[5]->Range.DesignatorMin = 0
pp_data->cap[5]->Range.DesignatorMax = 0
pp_data->cap[5]->Range.DataIndexMin = 5
pp_data->cap[5]->Range.DataIndexMax = 20
pp_data->cap[5]->Button.LogicalMin = 0
pp_data->cap[5]->Button.LogicalMax = 0
pp_data->cap[5]->Units = 0
pp_data->cap[5]->UnitsExp = 0
pp_data->cap[6]->UsagePage = 0x0001
pp_data->cap[6]->ReportID = 0x00
pp_data->cap[6]->BitPosition = 0
pp_data->cap[6]->BitSize = 4
pp_data->cap[6]->ReportCount = 1
pp_data->cap[6]->BytePosition = 0x000D
pp_data->cap[6]->BitCount = 4
pp_data->cap[6]->BitField = 0x42
pp_data->cap[6]->NextBytePosition = 0x000E
pp_data->cap[6]->LinkCollection = 0x0000
pp_data->cap[6]->LinkUsagePage = 0x0001
pp_data->cap[6]->LinkUsage = 0x0005
pp_data->cap[6]->IsMultipleItemsForArray = 0
pp_data->cap[6]->IsButtonCap = 0
pp_data->cap[6]->IsPadding = 0
pp_data->cap[6]->IsAbsolute = 1
pp_data->cap[6]->IsRange = 0
pp_data->cap[6]->IsAlias = 0
pp_data->cap[6]->IsStringRange = 0
pp_data->cap[6]->IsDesignatorRange = 0
pp_data->cap[6]->Reserved1 = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[6]->NotRange.Usage = 0x0039
pp_data->cap[6]->NotRange.Reserved1 = 0x0039
pp_data->cap[6]->NotRange.StringIndex = 0
pp_data->cap[6]->NotRange.Reserved2 = 0
pp_data->cap[6]->NotRange.DesignatorIndex = 0
pp_data->cap[6]->NotRange.Reserved3 = 0
pp_data->cap[6]->NotRange.DataIndex = 21
pp_data->cap[6]->NotRange.Reserved4 = 21
pp_data->cap[6]->NotButton.HasNull = 1
pp_data->cap[6]->NotButton.Reserved4 = 0x000000
pp_data->cap[6]->NotButton.LogicalMin = 1
pp_data->cap[6]->NotButton.LogicalMax = 8
pp_data->cap[6]->NotButton.PhysicalMin = 0
pp_data->cap[6]->NotButton.PhysicalMax = 4155
pp_data->cap[6]->Units = 14
pp_data->cap[6]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0005
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 3
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 3
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0000
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000
pp_data->LinkCollectionArray[2]->LinkUsage = 0x0000
pp_data->LinkCollectionArray[2]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[2]->Parent = 0
pp_data->LinkCollectionArray[2]->NumberOfChildren = 0
pp_data->LinkCollectionArray[2]->NextSibling = 1
pp_data->LinkCollectionArray[2]->FirstChild = 0
pp_data->LinkCollectionArray[2]->CollectionType = 0
pp_data->LinkCollectionArray[2]->IsAlias = 0
pp_data->LinkCollectionArray[2]->Reserved = 0x00000000
pp_data->LinkCollectionArray[3]->LinkUsage = 0x0000
pp_data->LinkCollectionArray[3]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[3]->Parent = 0
pp_data->LinkCollectionArray[3]->NumberOfChildren = 0
pp_data->LinkCollectionArray[3]->NextSibling = 2
pp_data->LinkCollectionArray[3]->FirstChild = 0
pp_data->LinkCollectionArray[3]->CollectionType = 0
pp_data->LinkCollectionArray[3]->IsAlias = 0
pp_data->LinkCollectionArray[3]->Reserved = 0x00000000

View File

@@ -0,0 +1,12 @@
0x05, 0x01, 0x09, 0x05, 0xA1, 0x01, 0x09, 0x00, 0xA1, 0x00,
0x09, 0x30, 0x09, 0x31, 0x15, 0x00, 0x25, 0xFF, 0x35, 0x00,
0x45, 0xFF, 0x75, 0x10, 0x95, 0x02, 0x81, 0x02, 0xC0, 0x09,
0x00, 0xA1, 0x00, 0x09, 0x33, 0x09, 0x34, 0x15, 0x00, 0x25,
0xFF, 0x75, 0x10, 0x95, 0x02, 0x81, 0x02, 0xC0, 0x09, 0x00,
0xA1, 0x00, 0x09, 0x32, 0x15, 0x00, 0x25, 0xFF, 0x75, 0x10,
0x95, 0x01, 0x81, 0x02, 0xC0, 0x05, 0x09, 0x19, 0x01, 0x29,
0x10, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x10, 0x45,
0x00, 0x81, 0x02, 0x05, 0x01, 0x09, 0x39, 0x15, 0x01, 0x25,
0x08, 0x35, 0x00, 0x46, 0x3B, 0x10, 0x65, 0x0E, 0x75, 0x04,
0x95, 0x01, 0x81, 0x42, 0x75, 0x04, 0x95, 0x01, 0x81, 0x03,
0x75, 0x08, 0x95, 0x02, 0x81, 0x03, 0xC0,

View File

@@ -0,0 +1,64 @@
// Special cases of this device:
// 2 full padding bytes at the end
// Multiple child collections inside of the same report (byte position of Input items defines collection order)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x05, // Usage (Game Pad)
0xA1, 0x01, // Collection (Application)
0xA1, 0x00, // Collection (Physical)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0xFF, // Logical Maximum (-1)
0x35, 0x00, // Physical Minimum (0)
0x46, 0xFF, 0xFF, // Physical Maximum (-1)
0x95, 0x02, // Report Count (2)
0x75, 0x10, // Report Size (16)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xA1, 0x00, // Collection (Physical)
0x09, 0x33, // Usage (Rx)
0x09, 0x34, // Usage (Ry)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0xFF, // Logical Maximum (-1)
0x35, 0x00, // Physical Minimum (0)
0x46, 0xFF, 0xFF, // Physical Maximum (-1)
0x95, 0x02, // Report Count (2)
0x75, 0x10, // Report Size (16)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xA1, 0x00, // Collection (Physical)
0x09, 0x32, // Usage (Z)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0xFF, // Logical Maximum (-1)
0x35, 0x00, // Physical Minimum (0)
0x46, 0xFF, 0xFF, // Physical Maximum (-1)
0x95, 0x01, // Report Count (1)
0x75, 0x10, // Report Size (16)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x10, // Usage Maximum (0x10)
0x95, 0x10, // Report Count (16)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x39, // Usage (Hat switch)
0x15, 0x01, // Logical Minimum (1)
0x25, 0x08, // Logical Maximum (8)
0x35, 0x00, // Physical Minimum (0)
0x46, 0x3B, 0x10, // Physical Maximum (4155)
0x66, 0x0E, 0x00, // Unit (None)
0x75, 0x04, // Report Size (4)
0x95, 0x01, // Report Count (1)
0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)
0x75, 0x04, // Report Size (4)
0x95, 0x01, // Report Count (1)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x75, 0x08, // Report Size (8)
0x95, 0x02, // Report Count (2)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 120 bytes

View File

@@ -0,0 +1,183 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046A
dev->product_id = 0x0011
dev->manufacturer_string = "dev->product_string = "dev->release_number = 0x0100
dev->interface_number = -1
dev->usage = 0x0006
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046a&pid_0011#7&2c7fd0a5&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0006
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 2
pp_data->caps_info[0]->NumberOfCaps = 2
pp_data->caps_info[0]->ReportByteLength = 9
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 2
pp_data->caps_info[1]->LastCap = 3
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 2
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 3
pp_data->caps_info[2]->LastCap = 3
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0138
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0007
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 8
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0006
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x00E0
pp_data->cap[0]->Range.UsageMax = 0x00E7
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 7
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0007
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0003
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0009
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0006
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 1
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->Range.UsageMin = 0x0000
pp_data->cap[1]->Range.UsageMax = 0x00DD
pp_data->cap[1]->Range.StringMin = 0
pp_data->cap[1]->Range.StringMax = 0
pp_data->cap[1]->Range.DesignatorMin = 0
pp_data->cap[1]->Range.DesignatorMax = 0
pp_data->cap[1]->Range.DataIndexMin = 8
pp_data->cap[1]->Range.DataIndexMax = 229
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 221
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[2]->UsagePage = 0x0008
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 3
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 3
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0006
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 1
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->Range.UsageMin = 0x0001
pp_data->cap[2]->Range.UsageMax = 0x0003
pp_data->cap[2]->Range.StringMin = 0
pp_data->cap[2]->Range.StringMax = 0
pp_data->cap[2]->Range.DesignatorMin = 0
pp_data->cap[2]->Range.DesignatorMax = 0
pp_data->cap[2]->Range.DataIndexMin = 0
pp_data->cap[2]->Range.DataIndexMax = 2
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0006
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,7 @@
0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x05, 0x07, 0x19, 0xE0,
0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08,
0x81, 0x02, 0x75, 0x08, 0x95, 0x01, 0x81, 0x03, 0x19, 0x00,
0x29, 0xDD, 0x15, 0x00, 0x26, 0xDD, 0x00, 0x75, 0x08, 0x95,
0x06, 0x81, 0x00, 0x05, 0x08, 0x19, 0x01, 0x29, 0x03, 0x15,
0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x03, 0x91, 0x02, 0x75,
0x05, 0x95, 0x01, 0x91, 0x03, 0xC0,

View File

@@ -0,0 +1,7 @@
0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x05, 0x07, 0x19, 0xE0,
0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08,
0x81, 0x02, 0x75, 0x08, 0x95, 0x01, 0x81, 0x03, 0x19, 0x00,
0x29, 0xDD, 0x15, 0x00, 0x26, 0xDD, 0x00, 0x75, 0x08, 0x95,
0x06, 0x81, 0x00, 0x05, 0x08, 0x19, 0x01, 0x29, 0x03, 0x15,
0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x03, 0x91, 0x02, 0x75,
0x05, 0x95, 0x01, 0x91, 0x03, 0xC0,

View File

@@ -0,0 +1,532 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0x0A37
dev->manufacturer_string = "Logitech Inc "
dev->product_string = "Logitech USB Headset H540"
dev->release_number = 0x0122
dev->interface_number = 3
dev->usage = 0x0001
dev->usage_page = 0x000C
dev->path = "\\?\hid#vid_046d&pid_0a37&mi_03#8&1717f300&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0x000C
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 7
pp_data->caps_info[0]->NumberOfCaps = 9
pp_data->caps_info[0]->ReportByteLength = 33
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 9
pp_data->caps_info[1]->LastCap = 12
pp_data->caps_info[1]->NumberOfCaps = 3
pp_data->caps_info[1]->ReportByteLength = 37
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 12
pp_data->caps_info[2]->LastCap = 12
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x04E0
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x000C
pp_data->cap[0]->ReportID = 0x01
pp_data->cap[0]->BitPosition = 1
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 1
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000C
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x00EA
pp_data->cap[0]->NotRange.Reserved1 = 0x00EA
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x000C
pp_data->cap[1]->ReportID = 0x01
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 1
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 1
pp_data->cap[1]->BitField = 0x02
pp_data->cap[1]->NextBytePosition = 0x0002
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x000C
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x00E9
pp_data->cap[1]->NotRange.Reserved1 = 0x00E9
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x000C
pp_data->cap[2]->ReportID = 0x01
pp_data->cap[2]->BitPosition = 2
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 1
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x000C
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x00E2
pp_data->cap[2]->NotRange.Reserved1 = 0x00E2
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 2
pp_data->cap[2]->NotRange.Reserved4 = 2
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0009
pp_data->cap[3]->ReportID = 0x01
pp_data->cap[3]->BitPosition = 5
pp_data->cap[3]->BitSize = 2
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0001
pp_data->cap[3]->BitCount = 2
pp_data->cap[3]->BitField = 0x40
pp_data->cap[3]->NextBytePosition = 0x0002
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x000C
pp_data->cap[3]->LinkUsage = 0x0036
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 1
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 1
pp_data->cap[3]->IsRange = 1
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->Range.UsageMin = 0x0001
pp_data->cap[3]->Range.UsageMax = 0x0002
pp_data->cap[3]->Range.StringMin = 0
pp_data->cap[3]->Range.StringMax = 0
pp_data->cap[3]->Range.DesignatorMin = 0
pp_data->cap[3]->Range.DesignatorMax = 0
pp_data->cap[3]->Range.DataIndexMin = 3
pp_data->cap[3]->Range.DataIndexMax = 4
pp_data->cap[3]->Button.LogicalMin = 1
pp_data->cap[3]->Button.LogicalMax = 2
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x000C
pp_data->cap[4]->ReportID = 0x02
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 1
pp_data->cap[4]->ReportCount = 16
pp_data->cap[4]->BytePosition = 0x0001
pp_data->cap[4]->BitCount = 16
pp_data->cap[4]->BitField = 0x02
pp_data->cap[4]->NextBytePosition = 0x0003
pp_data->cap[4]->LinkCollection = 0x0000
pp_data->cap[4]->LinkUsagePage = 0x000C
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 1
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 1
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0000
pp_data->cap[4]->NotRange.Reserved1 = 0x0000
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 5
pp_data->cap[4]->NotRange.Reserved4 = 5
pp_data->cap[4]->Button.LogicalMin = 0
pp_data->cap[4]->Button.LogicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
pp_data->cap[5]->UsagePage = 0x000C
pp_data->cap[5]->ReportID = 0x05
pp_data->cap[5]->BitPosition = 0
pp_data->cap[5]->BitSize = 8
pp_data->cap[5]->ReportCount = 32
pp_data->cap[5]->BytePosition = 0x0001
pp_data->cap[5]->BitCount = 256
pp_data->cap[5]->BitField = 0x02
pp_data->cap[5]->NextBytePosition = 0x0021
pp_data->cap[5]->LinkCollection = 0x0000
pp_data->cap[5]->LinkUsagePage = 0x000C
pp_data->cap[5]->LinkUsage = 0x0001
pp_data->cap[5]->IsMultipleItemsForArray = 0
pp_data->cap[5]->IsButtonCap = 0
pp_data->cap[5]->IsPadding = 0
pp_data->cap[5]->IsAbsolute = 1
pp_data->cap[5]->IsRange = 0
pp_data->cap[5]->IsAlias = 0
pp_data->cap[5]->IsStringRange = 0
pp_data->cap[5]->IsDesignatorRange = 0
pp_data->cap[5]->Reserved1 = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[5]->NotRange.Usage = 0x0000
pp_data->cap[5]->NotRange.Reserved1 = 0x0000
pp_data->cap[5]->NotRange.StringIndex = 0
pp_data->cap[5]->NotRange.Reserved2 = 0
pp_data->cap[5]->NotRange.DesignatorIndex = 0
pp_data->cap[5]->NotRange.Reserved3 = 0
pp_data->cap[5]->NotRange.DataIndex = 6
pp_data->cap[5]->NotRange.Reserved4 = 6
pp_data->cap[5]->NotButton.HasNull = 0
pp_data->cap[5]->NotButton.Reserved4 = 0x000000
pp_data->cap[5]->NotButton.LogicalMin = 0
pp_data->cap[5]->NotButton.LogicalMax = 1
pp_data->cap[5]->NotButton.PhysicalMin = 0
pp_data->cap[5]->NotButton.PhysicalMax = 0
pp_data->cap[5]->Units = 0
pp_data->cap[5]->UnitsExp = 0
pp_data->cap[6]->UsagePage = 0x000C
pp_data->cap[6]->ReportID = 0x07
pp_data->cap[6]->BitPosition = 0
pp_data->cap[6]->BitSize = 8
pp_data->cap[6]->ReportCount = 32
pp_data->cap[6]->BytePosition = 0x0001
pp_data->cap[6]->BitCount = 256
pp_data->cap[6]->BitField = 0x02
pp_data->cap[6]->NextBytePosition = 0x0021
pp_data->cap[6]->LinkCollection = 0x0000
pp_data->cap[6]->LinkUsagePage = 0x000C
pp_data->cap[6]->LinkUsage = 0x0001
pp_data->cap[6]->IsMultipleItemsForArray = 0
pp_data->cap[6]->IsButtonCap = 0
pp_data->cap[6]->IsPadding = 0
pp_data->cap[6]->IsAbsolute = 1
pp_data->cap[6]->IsRange = 0
pp_data->cap[6]->IsAlias = 0
pp_data->cap[6]->IsStringRange = 0
pp_data->cap[6]->IsDesignatorRange = 0
pp_data->cap[6]->Reserved1 = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[6]->NotRange.Usage = 0x0000
pp_data->cap[6]->NotRange.Reserved1 = 0x0000
pp_data->cap[6]->NotRange.StringIndex = 0
pp_data->cap[6]->NotRange.Reserved2 = 0
pp_data->cap[6]->NotRange.DesignatorIndex = 0
pp_data->cap[6]->NotRange.Reserved3 = 0
pp_data->cap[6]->NotRange.DataIndex = 7
pp_data->cap[6]->NotRange.Reserved4 = 7
pp_data->cap[6]->NotButton.HasNull = 0
pp_data->cap[6]->NotButton.Reserved4 = 0x000000
pp_data->cap[6]->NotButton.LogicalMin = 0
pp_data->cap[6]->NotButton.LogicalMax = 1
pp_data->cap[6]->NotButton.PhysicalMin = 0
pp_data->cap[6]->NotButton.PhysicalMax = 0
pp_data->cap[6]->Units = 0
pp_data->cap[6]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[9]->UsagePage = 0x000C
pp_data->cap[9]->ReportID = 0x03
pp_data->cap[9]->BitPosition = 0
pp_data->cap[9]->BitSize = 1
pp_data->cap[9]->ReportCount = 16
pp_data->cap[9]->BytePosition = 0x0001
pp_data->cap[9]->BitCount = 16
pp_data->cap[9]->BitField = 0x02
pp_data->cap[9]->NextBytePosition = 0x0003
pp_data->cap[9]->LinkCollection = 0x0000
pp_data->cap[9]->LinkUsagePage = 0x000C
pp_data->cap[9]->LinkUsage = 0x0001
pp_data->cap[9]->IsMultipleItemsForArray = 0
pp_data->cap[9]->IsButtonCap = 1
pp_data->cap[9]->IsPadding = 0
pp_data->cap[9]->IsAbsolute = 1
pp_data->cap[9]->IsRange = 0
pp_data->cap[9]->IsAlias = 0
pp_data->cap[9]->IsStringRange = 0
pp_data->cap[9]->IsDesignatorRange = 0
pp_data->cap[9]->Reserved1 = 0x000000
pp_data->cap[9]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[9]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[9]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[9]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[9]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[9]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[9]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[9]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[9]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[9]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[9]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[9]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[9]->NotRange.Usage = 0x0000
pp_data->cap[9]->NotRange.Reserved1 = 0x0000
pp_data->cap[9]->NotRange.StringIndex = 0
pp_data->cap[9]->NotRange.Reserved2 = 0
pp_data->cap[9]->NotRange.DesignatorIndex = 0
pp_data->cap[9]->NotRange.Reserved3 = 0
pp_data->cap[9]->NotRange.DataIndex = 0
pp_data->cap[9]->NotRange.Reserved4 = 0
pp_data->cap[9]->Button.LogicalMin = 0
pp_data->cap[9]->Button.LogicalMax = 0
pp_data->cap[9]->Units = 0
pp_data->cap[9]->UnitsExp = 0
pp_data->cap[10]->UsagePage = 0x000C
pp_data->cap[10]->ReportID = 0x04
pp_data->cap[10]->BitPosition = 0
pp_data->cap[10]->BitSize = 8
pp_data->cap[10]->ReportCount = 36
pp_data->cap[10]->BytePosition = 0x0001
pp_data->cap[10]->BitCount = 288
pp_data->cap[10]->BitField = 0x02
pp_data->cap[10]->NextBytePosition = 0x0025
pp_data->cap[10]->LinkCollection = 0x0000
pp_data->cap[10]->LinkUsagePage = 0x000C
pp_data->cap[10]->LinkUsage = 0x0001
pp_data->cap[10]->IsMultipleItemsForArray = 0
pp_data->cap[10]->IsButtonCap = 0
pp_data->cap[10]->IsPadding = 0
pp_data->cap[10]->IsAbsolute = 1
pp_data->cap[10]->IsRange = 0
pp_data->cap[10]->IsAlias = 0
pp_data->cap[10]->IsStringRange = 0
pp_data->cap[10]->IsDesignatorRange = 0
pp_data->cap[10]->Reserved1 = 0x000000
pp_data->cap[10]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[10]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[10]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[10]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[10]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[10]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[10]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[10]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[10]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[10]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[10]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[10]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[10]->NotRange.Usage = 0x0000
pp_data->cap[10]->NotRange.Reserved1 = 0x0000
pp_data->cap[10]->NotRange.StringIndex = 0
pp_data->cap[10]->NotRange.Reserved2 = 0
pp_data->cap[10]->NotRange.DesignatorIndex = 0
pp_data->cap[10]->NotRange.Reserved3 = 0
pp_data->cap[10]->NotRange.DataIndex = 1
pp_data->cap[10]->NotRange.Reserved4 = 1
pp_data->cap[10]->NotButton.HasNull = 0
pp_data->cap[10]->NotButton.Reserved4 = 0x000000
pp_data->cap[10]->NotButton.LogicalMin = 0
pp_data->cap[10]->NotButton.LogicalMax = 1
pp_data->cap[10]->NotButton.PhysicalMin = 0
pp_data->cap[10]->NotButton.PhysicalMax = 0
pp_data->cap[10]->Units = 0
pp_data->cap[10]->UnitsExp = 0
pp_data->cap[11]->UsagePage = 0x000C
pp_data->cap[11]->ReportID = 0x06
pp_data->cap[11]->BitPosition = 0
pp_data->cap[11]->BitSize = 8
pp_data->cap[11]->ReportCount = 36
pp_data->cap[11]->BytePosition = 0x0001
pp_data->cap[11]->BitCount = 288
pp_data->cap[11]->BitField = 0x02
pp_data->cap[11]->NextBytePosition = 0x0025
pp_data->cap[11]->LinkCollection = 0x0000
pp_data->cap[11]->LinkUsagePage = 0x000C
pp_data->cap[11]->LinkUsage = 0x0001
pp_data->cap[11]->IsMultipleItemsForArray = 0
pp_data->cap[11]->IsButtonCap = 0
pp_data->cap[11]->IsPadding = 0
pp_data->cap[11]->IsAbsolute = 1
pp_data->cap[11]->IsRange = 0
pp_data->cap[11]->IsAlias = 0
pp_data->cap[11]->IsStringRange = 0
pp_data->cap[11]->IsDesignatorRange = 0
pp_data->cap[11]->Reserved1 = 0x000000
pp_data->cap[11]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[11]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[11]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[11]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[11]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[11]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[11]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[11]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[11]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[11]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[11]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[11]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[11]->NotRange.Usage = 0x0000
pp_data->cap[11]->NotRange.Reserved1 = 0x0000
pp_data->cap[11]->NotRange.StringIndex = 0
pp_data->cap[11]->NotRange.Reserved2 = 0
pp_data->cap[11]->NotRange.DesignatorIndex = 0
pp_data->cap[11]->NotRange.Reserved3 = 0
pp_data->cap[11]->NotRange.DataIndex = 2
pp_data->cap[11]->NotRange.Reserved4 = 2
pp_data->cap[11]->NotButton.HasNull = 0
pp_data->cap[11]->NotButton.Reserved4 = 0x000000
pp_data->cap[11]->NotButton.LogicalMin = 0
pp_data->cap[11]->NotButton.LogicalMax = 1
pp_data->cap[11]->NotButton.PhysicalMin = 0
pp_data->cap[11]->NotButton.PhysicalMax = 0
pp_data->cap[11]->Units = 0
pp_data->cap[11]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0036
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 2
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,16 @@
0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x01, 0x09, 0xE9,
0x09, 0xEA, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x02,
0x81, 0x02, 0x09, 0xE2, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01,
0x95, 0x01, 0x81, 0x06, 0x75, 0x02, 0x95, 0x01, 0x81, 0x03,
0x09, 0x36, 0xA1, 0x02, 0x05, 0x09, 0x19, 0x01, 0x29, 0x02,
0x15, 0x01, 0x25, 0x02, 0x75, 0x02, 0x95, 0x01, 0x81, 0x40,
0x75, 0x01, 0x95, 0x01, 0x81, 0x03, 0xC0, 0x85, 0x02, 0x05,
0x0C, 0x09, 0x00, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95,
0x10, 0x81, 0x02, 0x85, 0x05, 0x09, 0x00, 0x15, 0x00, 0x25,
0x01, 0x75, 0x08, 0x95, 0x20, 0x81, 0x02, 0x85, 0x07, 0x09,
0x00, 0x15, 0x00, 0x25, 0x01, 0x75, 0x08, 0x95, 0x20, 0x81,
0x02, 0x85, 0x03, 0x09, 0x00, 0x15, 0x00, 0x25, 0x01, 0x75,
0x01, 0x95, 0x10, 0x91, 0x02, 0x85, 0x04, 0x09, 0x00, 0x15,
0x00, 0x25, 0x01, 0x75, 0x08, 0x95, 0x24, 0x91, 0x02, 0x85,
0x06, 0x09, 0x00, 0x15, 0x00, 0x25, 0x01, 0x75, 0x08, 0x95,
0x24, 0x91, 0x02, 0xC0,

View File

@@ -0,0 +1,61 @@
Usage Page (Consumer Devices) 05 0C
Usage (Consumer Control) 09 01
Collection (Application) A1 01
Report ID (1) 85 01
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Usage (Volume Increment) 09 E9
Usage (Volume Decrement) 09 EA
Report Size (1) 75 01
Report Count (2) 95 02
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage (Mute) 09 E2
Report Count (1) 95 01
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06
Usage (Undefined) 09 00
Report Count (2) 95 02
Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
Usage (Function Buttons) 09 36
Collection (Logical) A1 02
Usage Page (Button) 05 09
Usage Minimum (Button 1) 19 01
Usage Maximum (Button 2) 29 02
Report Size (2) 75 02
Report Count (1) 95 01
Logical Minimum (1) 15 01
Logical Maximum (2) 25 02
Input (Data,Ary,Abs) 81 40
End Collection C0
Usage Page (Consumer Devices) 05 0C
Usage (Undefined) 09 00
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Size (1) 75 01
Report Count (1) 95 01
Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03
Report ID (2) 85 02
Usage Page (Consumer Devices) 05 0C
Usage (Undefined) 09 00
Report Count (16) 95 10
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Report ID (3) 85 03
Usage (Undefined) 09 00
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
Report ID (4) 85 04
Usage (Undefined) 09 00
Report Size (8) 75 08
Report Count (36) 95 24
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
Report ID (5) 85 05
Usage (Undefined) 09 00
Report Count (32) 95 20
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Report ID (6) 85 06
Usage (Undefined) 09 00
Report Count (36) 95 24
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
Report ID (7) 85 07
Usage (Undefined) 09 00
Report Count (32) 95 20
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
End Collection C0

View File

@@ -0,0 +1,97 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xB010
dev->manufacturer_string = "Logitech"
dev->product_string = "Logitech Bluetooth Wireless Mouse"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0001
dev->usage_page = 0x000C
dev->path = "\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&0002046d_pid&b010&col02#8&1cf1c1b9&3&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0x000C
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 2
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 1
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 1
pp_data->caps_info[2]->LastCap = 1
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0068
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0006
pp_data->cap[0]->ReportID = 0x03
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000C
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 0
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0020
pp_data->cap[0]->NotRange.Reserved1 = 0x0020
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->NotButton.HasNull = 0
pp_data->cap[0]->NotButton.Reserved4 = 0x000000
pp_data->cap[0]->NotButton.LogicalMin = 0
pp_data->cap[0]->NotButton.LogicalMax = 100
pp_data->cap[0]->NotButton.PhysicalMin = 0
pp_data->cap[0]->NotButton.PhysicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,3 @@
0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x03, 0x05, 0x06,
0x09, 0x20, 0x15, 0x00, 0x25, 0x64, 0x75, 0x08, 0x95, 0x01,
0x81, 0x02, 0xC0,

View File

@@ -0,0 +1,38 @@
mac-hid-dump on  main ./mac-hid-dump
mac-hid-dump:
...
046D B010: Unknown - Bluetooth Mouse M557
DESCRIPTOR:
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01
29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30
09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38
15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75
08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05
06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06
00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff
00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1
01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00
09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95
08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75
08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95
01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07
19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15
00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95
01 75 06 81 03 c0
(246 bytes)
Parser output:
0x05, 0x0C, // Usage Page (Consumer)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x03, // Report ID (3)
0x05, 0x06, // Usage Page (Generic Dev Ctrls)
0x09, 0x20, // Usage (Battery Strength)
0x15, 0x00, // Logical Minimum (0)
0x26, 0x64, 0x00, // Logical Maximum (100)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xB010
dev->manufacturer_string = "Logitech"
dev->product_string = "Logitech Bluetooth Wireless Mouse"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0001
dev->usage_page = 0xFF00
dev->path = "\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&0002046d_pid&b010&col03#8&1cf1c1b9&3&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 7
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 7
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x10
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 6
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 48
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0007
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0001
pp_data->cap[0]->NotRange.Reserved1 = 0x0001
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x10
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0007
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0001
pp_data->cap[1]->NotRange.Reserved1 = 0x0001
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x10, 0x09,
0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x06,
0x81, 0x00, 0x09, 0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x06, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,39 @@
mac-hid-dump on  main ./mac-hid-dump
mac-hid-dump:
...
046D B010: Unknown - Bluetooth Mouse M557
DESCRIPTOR:
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01
29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30
09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38
15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75
08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05
06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06
00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff
00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1
01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00
09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95
08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75
08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95
01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07
19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15
00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95
01 75 06 81 03 c0
(246 bytes)
Parser output:
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, // Usage (0x01)
0xA1, 0x01, // Collection (Application)
0x85, 0x10, // Report ID (16)
0x75, 0x08, // Report Size (8)
0x95, 0x06, // Report Count (6)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x09, 0x01, // Usage (0x01)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x01, // Usage (0x01)
0x91, 0x00, // Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection

View File

@@ -0,0 +1,302 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xB010
dev->manufacturer_string = "Logitech"
dev->product_string = "Logitech Bluetooth Wireless Mouse"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0002
dev->usage_page = 0x0001
dev->path = "\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&0002046d_pid&b010&col01#8&1cf1c1b9&3&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 5
pp_data->caps_info[0]->NumberOfCaps = 5
pp_data->caps_info[0]->ReportByteLength = 7
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 5
pp_data->caps_info[1]->LastCap = 5
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 5
pp_data->caps_info[2]->LastCap = 5
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0208
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0009
pp_data->cap[0]->ReportID = 0x02
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 8
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x0008
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 7
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x02
pp_data->cap[1]->BitPosition = 4
pp_data->cap[1]->BitSize = 12
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0003
pp_data->cap[1]->BitCount = 12
pp_data->cap[1]->BitField = 0x06
pp_data->cap[1]->NextBytePosition = 0x0005
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 0
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0031
pp_data->cap[1]->NotRange.Reserved1 = 0x0031
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 8
pp_data->cap[1]->NotRange.Reserved4 = 8
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = -2047
pp_data->cap[1]->NotButton.LogicalMax = 2047
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x02
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 12
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0002
pp_data->cap[2]->BitCount = 12
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0004
pp_data->cap[2]->LinkCollection = 0x0001
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0030
pp_data->cap[2]->NotRange.Reserved1 = 0x0030
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 9
pp_data->cap[2]->NotRange.Reserved4 = 9
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = -2047
pp_data->cap[2]->NotButton.LogicalMax = 2047
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x02
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 8
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0005
pp_data->cap[3]->BitCount = 8
pp_data->cap[3]->BitField = 0x06
pp_data->cap[3]->NextBytePosition = 0x0006
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 0
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0038
pp_data->cap[3]->NotRange.Reserved1 = 0x0038
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 10
pp_data->cap[3]->NotRange.Reserved4 = 10
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = -127
pp_data->cap[3]->NotButton.LogicalMax = 127
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x000C
pp_data->cap[4]->ReportID = 0x02
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 8
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0006
pp_data->cap[4]->BitCount = 8
pp_data->cap[4]->BitField = 0x06
pp_data->cap[4]->NextBytePosition = 0x0007
pp_data->cap[4]->LinkCollection = 0x0001
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 0
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0238
pp_data->cap[4]->NotRange.Reserved1 = 0x0238
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 11
pp_data->cap[4]->NotRange.Reserved4 = 11
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = -127
pp_data->cap[4]->NotButton.LogicalMax = 127
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,8 @@
0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00,
0x85, 0x02, 0x05, 0x09, 0x19, 0x01, 0x29, 0x08, 0x15, 0x00,
0x25, 0x01, 0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x05, 0x01,
0x09, 0x30, 0x09, 0x31, 0x16, 0x01, 0xF8, 0x26, 0xFF, 0x07,
0x75, 0x0C, 0x95, 0x02, 0x81, 0x06, 0x09, 0x38, 0x15, 0x81,
0x25, 0x7F, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0x05, 0x0C,
0x0A, 0x38, 0x02, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95,
0x01, 0x81, 0x06, 0xC0, 0xC0,

View File

@@ -0,0 +1,61 @@
mac-hid-dump on  main ./mac-hid-dump
mac-hid-dump:
...
046D B010: Unknown - Bluetooth Mouse M557
DESCRIPTOR:
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01
29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30
09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38
15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75
08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05
06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06
00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff
00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1
01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00
09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95
08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75
08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95
01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07
19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15
00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95
01 75 06 81 03 c0
(246 bytes)
Parser output:
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x02, // Usage (Mouse)
0xA1, 0x01, // Collection (Application)
0x85, 0x02, // Report ID (2)
0x09, 0x01, // Usage (Pointer)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x08, // Usage Maximum (0x08)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x16, 0x01, 0xF8, // Logical Minimum (-2047)
0x26, 0xFF, 0x07, // Logical Maximum (2047)
0x75, 0x0C, // Report Size (12)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x38, // Usage (Wheel)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x0C, // Usage Page (Consumer)
0x0A, 0x38, 0x02, // Usage (AC Pan)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xB010
dev->manufacturer_string = "Logitech"
dev->product_string = "Logitech Bluetooth Wireless Mouse"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0002
dev->usage_page = 0xFF00
dev->path = "\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&0002046d_pid&b010&col04#8&1cf1c1b9&3&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 20
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 20
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x11
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 19
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 152
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0014
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0002
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0002
pp_data->cap[0]->NotRange.Reserved1 = 0x0002
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x11
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 19
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 152
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0014
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0002
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0002
pp_data->cap[1]->NotRange.Reserved1 = 0x0002
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x02, 0xA1, 0x01, 0x85, 0x11, 0x09,
0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x13,
0x81, 0x00, 0x09, 0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x13, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,39 @@
mac-hid-dump on  main ./mac-hid-dump
mac-hid-dump:
...
046D B010: Unknown - Bluetooth Mouse M557
DESCRIPTOR:
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01
29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30
09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38
15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75
08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05
06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06
00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff
00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1
01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00
09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95
08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75
08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95
01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07
19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15
00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95
01 75 06 81 03 c0
(246 bytes)
Parser output:
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00)
0x09, 0x02, // Usage (0x02)
0xA1, 0x01, // Collection (Application)
0x85, 0x11, // Report ID (17)
0x75, 0x08, // Report Size (8)
0x95, 0x13, // Report Count (19)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x09, 0x02, // Usage (0x02)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x02, // Usage (0x02)
0x91, 0x00, // Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection

View File

@@ -0,0 +1,185 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xB010
dev->manufacturer_string = "Logitech"
dev->product_string = "Logitech Bluetooth Wireless Mouse"
dev->release_number = 0x0000
dev->interface_number = -1
dev->usage = 0x0006
dev->usage_page = 0x0001
dev->path = "\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&0002046d_pid&b010&col05#8&1cf1c1b9&3&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}\kbd"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0006
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 2
pp_data->caps_info[0]->NumberOfCaps = 2
pp_data->caps_info[0]->ReportByteLength = 9
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 2
pp_data->caps_info[1]->LastCap = 3
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 2
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 3
pp_data->caps_info[2]->LastCap = 3
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0138
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0007
pp_data->cap[0]->ReportID = 0x04
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 8
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0006
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x00E0
pp_data->cap[0]->Range.UsageMax = 0x00E7
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 7
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0007
pp_data->cap[1]->ReportID = 0x04
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0003
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0009
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0006
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 1
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->Range.UsageMin = 0x0000
pp_data->cap[1]->Range.UsageMax = 0x00FF
pp_data->cap[1]->Range.StringMin = 0
pp_data->cap[1]->Range.StringMax = 0
pp_data->cap[1]->Range.DesignatorMin = 0
pp_data->cap[1]->Range.DesignatorMax = 0
pp_data->cap[1]->Range.DataIndexMin = 8
pp_data->cap[1]->Range.DataIndexMax = 263
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[2]->UsagePage = 0x0008
pp_data->cap[2]->ReportID = 0x04
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 5
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 5
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0006
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 1
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->Range.UsageMin = 0x0001
pp_data->cap[2]->Range.UsageMax = 0x0005
pp_data->cap[2]->Range.StringMin = 0
pp_data->cap[2]->Range.StringMax = 0
pp_data->cap[2]->Range.DesignatorMin = 0
pp_data->cap[2]->Range.DesignatorMax = 0
pp_data->cap[2]->Range.DataIndexMin = 0
pp_data->cap[2]->Range.DataIndexMax = 4
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0006
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,7 @@
0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x85, 0x04, 0x05, 0x07,
0x19, 0xE0, 0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01,
0x95, 0x08, 0x81, 0x02, 0x75, 0x08, 0x95, 0x01, 0x81, 0x03,
0x19, 0x00, 0x29, 0xFF, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x06, 0x81, 0x00, 0x05, 0x08, 0x19, 0x01, 0x29,
0x05, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x05, 0x91,
0x02, 0x75, 0x03, 0x95, 0x01, 0x91, 0x03, 0xC0,

View File

@@ -0,0 +1,58 @@
mac-hid-dump on  main ./mac-hid-dump
mac-hid-dump:
...
046D B010: Unknown - Bluetooth Mouse M557
DESCRIPTOR:
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01
29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30
09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38
15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75
08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05
06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06
00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff
00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1
01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00
09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95
08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75
08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95
01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07
19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15
00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95
01 75 06 81 03 c0
(246 bytes)
Parser output:
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x04, // Report ID (4)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0xE0, // Usage Minimum (0xE0)
0x29, 0xE7, // Usage Maximum (0xE7)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x05, // Report Count (5)
0x75, 0x01, // Report Size (1)
0x05, 0x08, // Usage Page (LEDs)
0x19, 0x01, // Usage Minimum (Num Lock)
0x29, 0x05, // Usage Maximum (Kana)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3)
0x91, 0x03, // Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x06, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0x00, // Usage Minimum (0x00)
0x29, 0xFF, // Usage Maximum (0xFF)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection

View File

@@ -0,0 +1,252 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC077
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Optical Mouse"
dev->release_number = 0x7200
dev->interface_number = -1
dev->usage = 0x0002
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c077#7&1875dbae&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 4
pp_data->caps_info[0]->NumberOfCaps = 4
pp_data->caps_info[0]->ReportByteLength = 5
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 4
pp_data->caps_info[1]->LastCap = 4
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 4
pp_data->caps_info[2]->LastCap = 4
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x01A0
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0009
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 8
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x0003
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 2
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0004
pp_data->cap[1]->BitCount = 8
pp_data->cap[1]->BitField = 0x06
pp_data->cap[1]->NextBytePosition = 0x0005
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 0
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0038
pp_data->cap[1]->NotRange.Reserved1 = 0x0038
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 3
pp_data->cap[1]->NotRange.Reserved4 = 3
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = -127
pp_data->cap[1]->NotButton.LogicalMax = 127
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 8
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0003
pp_data->cap[2]->BitCount = 8
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0004
pp_data->cap[2]->LinkCollection = 0x0001
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0031
pp_data->cap[2]->NotRange.Reserved1 = 0x0031
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 4
pp_data->cap[2]->NotRange.Reserved4 = 4
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = -127
pp_data->cap[2]->NotButton.LogicalMax = 127
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x00
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 8
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0002
pp_data->cap[3]->BitCount = 8
pp_data->cap[3]->BitField = 0x06
pp_data->cap[3]->NextBytePosition = 0x0003
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 0
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0030
pp_data->cap[3]->NotRange.Reserved1 = 0x0030
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 5
pp_data->cap[3]->NotRange.Reserved4 = 5
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = -127
pp_data->cap[3]->NotButton.LogicalMax = 127
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,5 @@
0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00,
0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x05, 0x01, 0x09, 0x30,
0x09, 0x31, 0x09, 0x38, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08,
0x95, 0x03, 0x81, 0x06, 0xC0, 0xC0,

View File

@@ -0,0 +1,24 @@
Usage Page (Generic Desktop) 05 01
Usage (Mouse) 09 02
Collection (Application) A1 01
Usage (Pointer) 09 01
Collection (Physical) A1 00
Usage Page (Button) 05 09
Usage Minimum (Button 1) 19 01
Usage Maximum (Button 3) 29 03
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Count (8) 95 08
Report Size (1) 75 01
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage Page (Generic Desktop) 05 01
Usage (X) 09 30
Usage (Y) 09 31
Usage (Wheel) 09 38
Logical Minimum (-127) 15 81
Logical Maximum (127) 25 7F
Report Size (8) 75 08
Report Count (3) 95 03
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06
End Collection C0
End Collection C0

View File

@@ -0,0 +1,520 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC283
dev->manufacturer_string = "Logitech Inc."
dev->product_string = "WingMan Force 3D"
dev->release_number = 0x0106
dev->interface_number = -1
dev->usage = 0x0004
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c283#7&d7fb4bf&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0004
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 8
pp_data->caps_info[0]->NumberOfCaps = 8
pp_data->caps_info[0]->ReportByteLength = 8
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 8
pp_data->caps_info[1]->LastCap = 9
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 9
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 9
pp_data->caps_info[2]->LastCap = 9
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x03A8
pp_data->NumberLinkCollectionNodes = 4
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0001
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0002
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0003
pp_data->cap[0]->LinkCollection = 0x0002
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 0
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0031
pp_data->cap[0]->NotRange.Reserved1 = 0x0031
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->NotButton.HasNull = 0
pp_data->cap[0]->NotButton.Reserved4 = 0x000000
pp_data->cap[0]->NotButton.LogicalMin = 0
pp_data->cap[0]->NotButton.LogicalMax = 255
pp_data->cap[0]->NotButton.PhysicalMin = 0
pp_data->cap[0]->NotButton.PhysicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 8
pp_data->cap[1]->BitField = 0x02
pp_data->cap[1]->NextBytePosition = 0x0002
pp_data->cap[1]->LinkCollection = 0x0002
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0030
pp_data->cap[1]->NotRange.Reserved1 = 0x0030
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = 0
pp_data->cap[1]->NotButton.LogicalMax = 255
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0xFF00
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 4
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0003
pp_data->cap[2]->BitCount = 4
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0004
pp_data->cap[2]->LinkCollection = 0x0002
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0001
pp_data->cap[2]->NotRange.Reserved1 = 0x0001
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 2
pp_data->cap[2]->NotRange.Reserved4 = 2
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = 0
pp_data->cap[2]->NotButton.LogicalMax = 15
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 255
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x00
pp_data->cap[3]->BitPosition = 4
pp_data->cap[3]->BitSize = 4
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0003
pp_data->cap[3]->BitCount = 4
pp_data->cap[3]->BitField = 0x42
pp_data->cap[3]->NextBytePosition = 0x0004
pp_data->cap[3]->LinkCollection = 0x0002
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 1
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0039
pp_data->cap[3]->NotRange.Reserved1 = 0x0039
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 3
pp_data->cap[3]->NotRange.Reserved4 = 3
pp_data->cap[3]->NotButton.HasNull = 1
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = 0
pp_data->cap[3]->NotButton.LogicalMax = 7
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 315
pp_data->cap[3]->Units = 20
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x0001
pp_data->cap[4]->ReportID = 0x00
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 8
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0004
pp_data->cap[4]->BitCount = 8
pp_data->cap[4]->BitField = 0x02
pp_data->cap[4]->NextBytePosition = 0x0005
pp_data->cap[4]->LinkCollection = 0x0002
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 1
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0035
pp_data->cap[4]->NotRange.Reserved1 = 0x0035
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 4
pp_data->cap[4]->NotRange.Reserved4 = 4
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = 0
pp_data->cap[4]->NotButton.LogicalMax = 255
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 255
pp_data->cap[4]->Units = 20
pp_data->cap[4]->UnitsExp = 0
pp_data->cap[5]->UsagePage = 0x0009
pp_data->cap[5]->ReportID = 0x00
pp_data->cap[5]->BitPosition = 0
pp_data->cap[5]->BitSize = 1
pp_data->cap[5]->ReportCount = 7
pp_data->cap[5]->BytePosition = 0x0005
pp_data->cap[5]->BitCount = 7
pp_data->cap[5]->BitField = 0x02
pp_data->cap[5]->NextBytePosition = 0x0006
pp_data->cap[5]->LinkCollection = 0x0001
pp_data->cap[5]->LinkUsagePage = 0x0001
pp_data->cap[5]->LinkUsage = 0x0000
pp_data->cap[5]->IsMultipleItemsForArray = 0
pp_data->cap[5]->IsButtonCap = 1
pp_data->cap[5]->IsPadding = 0
pp_data->cap[5]->IsAbsolute = 1
pp_data->cap[5]->IsRange = 1
pp_data->cap[5]->IsAlias = 0
pp_data->cap[5]->IsStringRange = 0
pp_data->cap[5]->IsDesignatorRange = 0
pp_data->cap[5]->Reserved1 = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[5]->Range.UsageMin = 0x0001
pp_data->cap[5]->Range.UsageMax = 0x0007
pp_data->cap[5]->Range.StringMin = 0
pp_data->cap[5]->Range.StringMax = 0
pp_data->cap[5]->Range.DesignatorMin = 0
pp_data->cap[5]->Range.DesignatorMax = 0
pp_data->cap[5]->Range.DataIndexMin = 5
pp_data->cap[5]->Range.DataIndexMax = 11
pp_data->cap[5]->Button.LogicalMin = 0
pp_data->cap[5]->Button.LogicalMax = 0
pp_data->cap[5]->Units = 0
pp_data->cap[5]->UnitsExp = 0
pp_data->cap[6]->UsagePage = 0x0001
pp_data->cap[6]->ReportID = 0x00
pp_data->cap[6]->BitPosition = 0
pp_data->cap[6]->BitSize = 8
pp_data->cap[6]->ReportCount = 1
pp_data->cap[6]->BytePosition = 0x0006
pp_data->cap[6]->BitCount = 8
pp_data->cap[6]->BitField = 0x02
pp_data->cap[6]->NextBytePosition = 0x0007
pp_data->cap[6]->LinkCollection = 0x0001
pp_data->cap[6]->LinkUsagePage = 0x0001
pp_data->cap[6]->LinkUsage = 0x0000
pp_data->cap[6]->IsMultipleItemsForArray = 0
pp_data->cap[6]->IsButtonCap = 0
pp_data->cap[6]->IsPadding = 0
pp_data->cap[6]->IsAbsolute = 1
pp_data->cap[6]->IsRange = 0
pp_data->cap[6]->IsAlias = 0
pp_data->cap[6]->IsStringRange = 0
pp_data->cap[6]->IsDesignatorRange = 0
pp_data->cap[6]->Reserved1 = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[6]->NotRange.Usage = 0x0036
pp_data->cap[6]->NotRange.Reserved1 = 0x0036
pp_data->cap[6]->NotRange.StringIndex = 0
pp_data->cap[6]->NotRange.Reserved2 = 0
pp_data->cap[6]->NotRange.DesignatorIndex = 0
pp_data->cap[6]->NotRange.Reserved3 = 0
pp_data->cap[6]->NotRange.DataIndex = 12
pp_data->cap[6]->NotRange.Reserved4 = 12
pp_data->cap[6]->NotButton.HasNull = 0
pp_data->cap[6]->NotButton.Reserved4 = 0x000000
pp_data->cap[6]->NotButton.LogicalMin = 0
pp_data->cap[6]->NotButton.LogicalMax = 255
pp_data->cap[6]->NotButton.PhysicalMin = 0
pp_data->cap[6]->NotButton.PhysicalMax = 255
pp_data->cap[6]->Units = 0
pp_data->cap[6]->UnitsExp = 0
pp_data->cap[7]->UsagePage = 0xFF00
pp_data->cap[7]->ReportID = 0x00
pp_data->cap[7]->BitPosition = 0
pp_data->cap[7]->BitSize = 8
pp_data->cap[7]->ReportCount = 1
pp_data->cap[7]->BytePosition = 0x0007
pp_data->cap[7]->BitCount = 8
pp_data->cap[7]->BitField = 0x02
pp_data->cap[7]->NextBytePosition = 0x0008
pp_data->cap[7]->LinkCollection = 0x0001
pp_data->cap[7]->LinkUsagePage = 0x0001
pp_data->cap[7]->LinkUsage = 0x0000
pp_data->cap[7]->IsMultipleItemsForArray = 0
pp_data->cap[7]->IsButtonCap = 0
pp_data->cap[7]->IsPadding = 0
pp_data->cap[7]->IsAbsolute = 1
pp_data->cap[7]->IsRange = 0
pp_data->cap[7]->IsAlias = 0
pp_data->cap[7]->IsStringRange = 0
pp_data->cap[7]->IsDesignatorRange = 0
pp_data->cap[7]->Reserved1 = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[7]->NotRange.Usage = 0x0001
pp_data->cap[7]->NotRange.Reserved1 = 0x0001
pp_data->cap[7]->NotRange.StringIndex = 0
pp_data->cap[7]->NotRange.Reserved2 = 0
pp_data->cap[7]->NotRange.DesignatorIndex = 0
pp_data->cap[7]->NotRange.Reserved3 = 0
pp_data->cap[7]->NotRange.DataIndex = 13
pp_data->cap[7]->NotRange.Reserved4 = 13
pp_data->cap[7]->NotButton.HasNull = 0
pp_data->cap[7]->NotButton.Reserved4 = 0x000000
pp_data->cap[7]->NotButton.LogicalMin = 0
pp_data->cap[7]->NotButton.LogicalMax = 255
pp_data->cap[7]->NotButton.PhysicalMin = 0
pp_data->cap[7]->NotButton.PhysicalMax = 255
pp_data->cap[7]->Units = 0
pp_data->cap[7]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[8]->UsagePage = 0xFF00
pp_data->cap[8]->ReportID = 0x00
pp_data->cap[8]->BitPosition = 0
pp_data->cap[8]->BitSize = 8
pp_data->cap[8]->ReportCount = 8
pp_data->cap[8]->BytePosition = 0x0001
pp_data->cap[8]->BitCount = 64
pp_data->cap[8]->BitField = 0x02
pp_data->cap[8]->NextBytePosition = 0x0009
pp_data->cap[8]->LinkCollection = 0x0003
pp_data->cap[8]->LinkUsagePage = 0xFF00
pp_data->cap[8]->LinkUsage = 0x0000
pp_data->cap[8]->IsMultipleItemsForArray = 0
pp_data->cap[8]->IsButtonCap = 0
pp_data->cap[8]->IsPadding = 0
pp_data->cap[8]->IsAbsolute = 1
pp_data->cap[8]->IsRange = 0
pp_data->cap[8]->IsAlias = 0
pp_data->cap[8]->IsStringRange = 0
pp_data->cap[8]->IsDesignatorRange = 0
pp_data->cap[8]->Reserved1 = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[8]->NotRange.Usage = 0x0002
pp_data->cap[8]->NotRange.Reserved1 = 0x0002
pp_data->cap[8]->NotRange.StringIndex = 0
pp_data->cap[8]->NotRange.Reserved2 = 0
pp_data->cap[8]->NotRange.DesignatorIndex = 0
pp_data->cap[8]->NotRange.Reserved3 = 0
pp_data->cap[8]->NotRange.DataIndex = 0
pp_data->cap[8]->NotRange.Reserved4 = 0
pp_data->cap[8]->NotButton.HasNull = 0
pp_data->cap[8]->NotButton.Reserved4 = 0x000000
pp_data->cap[8]->NotButton.LogicalMin = 0
pp_data->cap[8]->NotButton.LogicalMax = 255
pp_data->cap[8]->NotButton.PhysicalMin = 0
pp_data->cap[8]->NotButton.PhysicalMax = 255
pp_data->cap[8]->Units = 0
pp_data->cap[8]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0004
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 2
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 3
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0000
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 1
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 2
pp_data->LinkCollectionArray[1]->CollectionType = 2
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000
pp_data->LinkCollectionArray[2]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[2]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[2]->Parent = 1
pp_data->LinkCollectionArray[2]->NumberOfChildren = 0
pp_data->LinkCollectionArray[2]->NextSibling = 0
pp_data->LinkCollectionArray[2]->FirstChild = 0
pp_data->LinkCollectionArray[2]->CollectionType = 0
pp_data->LinkCollectionArray[2]->IsAlias = 0
pp_data->LinkCollectionArray[2]->Reserved = 0x00000000
pp_data->LinkCollectionArray[3]->LinkUsage = 0x0000
pp_data->LinkCollectionArray[3]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[3]->Parent = 0
pp_data->LinkCollectionArray[3]->NumberOfChildren = 0
pp_data->LinkCollectionArray[3]->NextSibling = 1
pp_data->LinkCollectionArray[3]->FirstChild = 0
pp_data->LinkCollectionArray[3]->CollectionType = 2
pp_data->LinkCollectionArray[3]->IsAlias = 0
pp_data->LinkCollectionArray[3]->Reserved = 0x00000000

View File

@@ -0,0 +1,18 @@
0x05, 0x01, 0x09, 0x04, 0xA1, 0x01, 0x09, 0x00, 0xA1, 0x02,
0x09, 0x01, 0xA1, 0x00, 0x09, 0x30, 0x09, 0x31, 0x15, 0x00,
0x26, 0xFF, 0x00, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75, 0x08,
0x95, 0x02, 0x81, 0x02, 0x06, 0x00, 0xFF, 0x09, 0x01, 0x15,
0x00, 0x25, 0x0F, 0x75, 0x04, 0x95, 0x01, 0x81, 0x02, 0x05,
0x01, 0x09, 0x39, 0x15, 0x00, 0x25, 0x07, 0x35, 0x00, 0x46,
0x3B, 0x01, 0x65, 0x14, 0x75, 0x04, 0x95, 0x01, 0x81, 0x42,
0x09, 0x35, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x35, 0x00, 0x46,
0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 0x81, 0x02, 0xC0, 0x05,
0x09, 0x19, 0x01, 0x29, 0x07, 0x15, 0x00, 0x25, 0x01, 0x75,
0x01, 0x95, 0x07, 0x45, 0x00, 0x65, 0x00, 0x81, 0x02, 0x75,
0x01, 0x95, 0x01, 0x81, 0x03, 0x05, 0x01, 0x09, 0x36, 0x15,
0x00, 0x26, 0xFF, 0x00, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x01, 0x81, 0x02, 0x06, 0x00, 0xFF, 0x09, 0x01,
0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 0x81,
0x02, 0xC0, 0x09, 0x00, 0xA1, 0x02, 0x09, 0x02, 0x15, 0x00,
0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x08, 0x91, 0x02, 0xC0,
0xC0,

View File

@@ -0,0 +1,18 @@
0x05, 0x01, 0x09, 0x04, 0xA1, 0x01, 0x09, 0x00, 0xA1, 0x02,
0x09, 0x01, 0xA1, 0x00, 0x09, 0x30, 0x09, 0x31, 0x15, 0x00,
0x26, 0xFF, 0x00, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75, 0x08,
0x95, 0x02, 0x81, 0x02, 0x06, 0x00, 0xFF, 0x09, 0x01, 0x15,
0x00, 0x25, 0x0F, 0x75, 0x04, 0x95, 0x01, 0x81, 0x02, 0x05,
0x01, 0x09, 0x39, 0x15, 0x00, 0x25, 0x07, 0x35, 0x00, 0x46,
0x3B, 0x01, 0x65, 0x14, 0x75, 0x04, 0x95, 0x01, 0x81, 0x42,
0x09, 0x35, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x35, 0x00, 0x46,
0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 0x81, 0x02, 0xC0, 0x05,
0x09, 0x19, 0x01, 0x29, 0x07, 0x15, 0x00, 0x25, 0x01, 0x75,
0x01, 0x95, 0x07, 0x45, 0x00, 0x65, 0x00, 0x81, 0x02, 0x75,
0x01, 0x95, 0x01, 0x81, 0x03, 0x05, 0x01, 0x09, 0x36, 0x15,
0x00, 0x26, 0xFF, 0x00, 0x35, 0x00, 0x46, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x01, 0x81, 0x02, 0x06, 0x00, 0xFF, 0x09, 0x01,
0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x01, 0x81,
0x02, 0xC0, 0x09, 0x00, 0xA1, 0x02, 0x09, 0x02, 0x15, 0x00,
0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x08, 0x91, 0x02, 0xC0,
0xC0,

View File

@@ -0,0 +1,93 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC52F
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2200
dev->interface_number = 1
dev->usage = 0x0001
dev->usage_page = 0x000C
dev->path = "\\?\hid#vid_046d&pid_c52f&mi_01&col01#8&28ca146b&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0x000C
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 5
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 1
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 1
pp_data->caps_info[2]->LastCap = 1
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0068
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x000C
pp_data->cap[0]->ReportID = 0x03
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 16
pp_data->cap[0]->ReportCount = 2
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 32
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0005
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000C
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x028C
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 651
pp_data->cap[0]->Button.LogicalMin = 1
pp_data->cap[0]->Button.LogicalMax = 652
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,3 @@
0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x03, 0x19, 0x01,
0x2A, 0x8C, 0x02, 0x15, 0x01, 0x26, 0x8C, 0x02, 0x75, 0x10,
0x95, 0x02, 0x81, 0x00, 0xC0,

View File

@@ -0,0 +1,12 @@
Usage Page (Consumer Devices) 05 0C
Usage (Consumer Control) 09 01
Collection (Application) A1 01
Report ID (3) 85 03
Report Size (16) 75 10
Report Count (2) 95 02
Logical Minimum (1) 15 01
Logical Maximum (652) 26 8C 02
Usage Minimum (Consumer Control) 19 01
Usage Maximum (AC Send) 2A 8C 02
Input (Data,Ary,Abs) 81 00
End Collection C0

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC52F
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2200
dev->interface_number = 1
dev->usage = 0x0001
dev->usage_page = 0xFF00
dev->path = "\\?\hid#vid_046d&pid_c52f&mi_01&col02#8&28ca146b&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 7
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 7
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x10
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 6
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 48
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0007
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0001
pp_data->cap[0]->NotRange.Reserved1 = 0x0001
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x10
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0007
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0001
pp_data->cap[1]->NotRange.Reserved1 = 0x0001
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x10, 0x09,
0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x06,
0x81, 0x00, 0x09, 0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x06, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,13 @@
Usage Page (Vendor-Defined 1) 06 00 FF
Usage (Vendor-Defined 1) 09 01
Collection (Application) A1 01
Report ID (16) 85 10
Report Size (8) 75 08
Report Count (6) 95 06
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Usage (Vendor-Defined 1) 09 01
Input (Data,Ary,Abs) 81 00
Usage (Vendor-Defined 1) 09 01
Output (Data,Ary,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 00
End Collection C0

View File

@@ -0,0 +1,302 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC52F
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2200
dev->interface_number = 0
dev->usage = 0x0002
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c52f&mi_00#8&1599f82d&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 5
pp_data->caps_info[0]->NumberOfCaps = 5
pp_data->caps_info[0]->ReportByteLength = 9
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 5
pp_data->caps_info[1]->LastCap = 5
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 5
pp_data->caps_info[2]->LastCap = 5
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0208
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0009
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 16
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 16
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0003
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x0010
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 15
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 16
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0005
pp_data->cap[1]->BitCount = 16
pp_data->cap[1]->BitField = 0x06
pp_data->cap[1]->NextBytePosition = 0x0007
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 0
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0031
pp_data->cap[1]->NotRange.Reserved1 = 0x0031
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 16
pp_data->cap[1]->NotRange.Reserved4 = 16
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = -32767
pp_data->cap[1]->NotButton.LogicalMax = 32767
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 16
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0003
pp_data->cap[2]->BitCount = 16
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0005
pp_data->cap[2]->LinkCollection = 0x0001
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0030
pp_data->cap[2]->NotRange.Reserved1 = 0x0030
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 17
pp_data->cap[2]->NotRange.Reserved4 = 17
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = -32767
pp_data->cap[2]->NotButton.LogicalMax = 32767
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x00
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 8
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0007
pp_data->cap[3]->BitCount = 8
pp_data->cap[3]->BitField = 0x06
pp_data->cap[3]->NextBytePosition = 0x0008
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 0
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0038
pp_data->cap[3]->NotRange.Reserved1 = 0x0038
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 18
pp_data->cap[3]->NotRange.Reserved4 = 18
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = -127
pp_data->cap[3]->NotButton.LogicalMax = 127
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x000C
pp_data->cap[4]->ReportID = 0x00
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 8
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0008
pp_data->cap[4]->BitCount = 8
pp_data->cap[4]->BitField = 0x06
pp_data->cap[4]->NextBytePosition = 0x0009
pp_data->cap[4]->LinkCollection = 0x0001
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 0
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0238
pp_data->cap[4]->NotRange.Reserved1 = 0x0238
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 19
pp_data->cap[4]->NotRange.Reserved4 = 19
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = -127
pp_data->cap[4]->NotButton.LogicalMax = 127
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,8 @@
0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00,
0x05, 0x09, 0x19, 0x01, 0x29, 0x10, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x10, 0x81, 0x02, 0x05, 0x01, 0x09, 0x30,
0x09, 0x31, 0x16, 0x01, 0x80, 0x26, 0xFF, 0x7F, 0x75, 0x10,
0x95, 0x02, 0x81, 0x06, 0x09, 0x38, 0x15, 0x81, 0x25, 0x7F,
0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0x05, 0x0C, 0x0A, 0x38,
0x02, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x01, 0x81,
0x06, 0xC0, 0xC0,

View File

@@ -0,0 +1,33 @@
Usage Page (Generic Desktop) 05 01
Usage (Mouse) 09 02
Collection (Application) A1 01
Usage (Pointer) 09 01
Collection (Physical) A1 00
Usage Page (Button) 05 09
Usage Minimum (Button 1) 19 01
Usage Maximum (Button 16) 29 10
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Count (16) 95 10
Report Size (1) 75 01
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage Page (Generic Desktop) 05 01
Logical Minimum (-32767) 16 01 80
Logical Maximum (32767) 26 FF 7F
Report Size (16) 75 10
Report Count (2) 95 02
Usage (X) 09 30
Usage (Y) 09 31
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06
Logical Minimum (-127) 15 81
Logical Maximum (127) 25 7F
Report Size (8) 75 08
Report Count (1) 95 01
Usage (Wheel) 09 38
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06
Usage Page (Consumer Devices) 05 0C
Usage (AC Pan) 0A 38 02
Report Count (1) 95 01
Input (Data,Var,Rel,NWrp,Lin,Pref,NNul,Bit) 81 06
End Collection C0
End Collection C0

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC52F
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2200
dev->interface_number = 1
dev->usage = 0x0002
dev->usage_page = 0xFF00
dev->path = "\\?\hid#vid_046d&pid_c52f&mi_01&col03#8&28ca146b&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 20
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 20
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x11
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 19
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 152
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0014
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0002
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0002
pp_data->cap[0]->NotRange.Reserved1 = 0x0002
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x11
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 19
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 152
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0014
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0002
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0002
pp_data->cap[1]->NotRange.Reserved1 = 0x0002
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x02, 0xA1, 0x01, 0x85, 0x11, 0x09,
0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x13,
0x81, 0x00, 0x09, 0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x13, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,13 @@
Usage Page (Vendor-Defined 1) 06 00 FF
Usage (Vendor-Defined 2) 09 02
Collection (Application) A1 01
Report ID (17) 85 11
Report Size (8) 75 08
Report Count (19) 95 13
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Usage (Vendor-Defined 2) 09 02
Input (Data,Ary,Abs) 81 00
Usage (Vendor-Defined 2) 09 02
Output (Data,Ary,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 00
End Collection C0

View File

@@ -0,0 +1,93 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 1
dev->usage = 0x0001
dev->usage_page = 0x000C
dev->path = "\\?\hid#vid_046d&pid_c534&mi_01&col02#7&1ebb799e&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0x000C
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 5
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 1
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 1
pp_data->caps_info[2]->LastCap = 1
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0068
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x000C
pp_data->cap[0]->ReportID = 0x03
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 16
pp_data->cap[0]->ReportCount = 2
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 32
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0005
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000C
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x028C
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 651
pp_data->cap[0]->Button.LogicalMin = 1
pp_data->cap[0]->Button.LogicalMax = 652
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,3 @@
0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x03, 0x19, 0x01,
0x2A, 0x8C, 0x02, 0x15, 0x01, 0x26, 0x8C, 0x02, 0x75, 0x10,
0x95, 0x02, 0x81, 0x00, 0xC0,

View File

@@ -0,0 +1,18 @@
macOS USB prober output for Logitech USB Receiver
05 0C 09 01 A1 01
85 03 75 10 95 02 15 01 26 8C 02 19 01 2A 8C 02 81 00
C0
Parser output:
0x05, 0x0C, // Usage Page (Consumer)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x03, // Report ID (3)
0x75, 0x10, // Report Size (16)
0x95, 0x02, // Report Count (2)
0x15, 0x01, // Logical Minimum (1)
0x26, 0x8C, 0x02, // Logical Maximum (652)
0x19, 0x01, // Usage Minimum (Consumer Control)
0x2A, 0x8C, 0x02, // Usage Maximum (AC Send)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 1
dev->usage = 0x0001
dev->usage_page = 0xFF00
dev->path = "\\?\hid#vid_046d&pid_c534&mi_01&col04#7&1ebb799e&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 7
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 7
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x10
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 6
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 48
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0007
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0001
pp_data->cap[0]->NotRange.Reserved1 = 0x0001
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x10
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0007
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0001
pp_data->cap[1]->NotRange.Reserved1 = 0x0001
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x10, 0x09,
0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x06,
0x81, 0x00, 0x09, 0x01, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x06, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,20 @@
macOS USB prober output for Logitech USB Receiver
06 00 FF 09 01 A1 01 85 10 75 08 95 06
15 00 26 FF 00 09 01 81
00 09 01 91 00 C0
Parser Output:
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00)
0x09, 0x01, // Usage (0x01)
0xA1, 0x01, // Collection (Application)
0x85, 0x10, // Report ID (16)
0x75, 0x08, // Report Size (8)
0x95, 0x06, // Report Count (6)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x09, 0x01, // Usage (0x01)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x01, // Usage (0x01)
0x91, 0x00, // Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection

View File

@@ -0,0 +1,302 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 1
dev->usage = 0x0002
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c534&mi_01&col01#7&1ebb799e&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 5
pp_data->caps_info[0]->NumberOfCaps = 5
pp_data->caps_info[0]->ReportByteLength = 8
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 5
pp_data->caps_info[1]->LastCap = 5
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 5
pp_data->caps_info[2]->LastCap = 5
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0208
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0009
pp_data->cap[0]->ReportID = 0x02
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 16
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 16
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0003
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x0010
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 15
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x02
pp_data->cap[1]->BitPosition = 4
pp_data->cap[1]->BitSize = 12
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0004
pp_data->cap[1]->BitCount = 12
pp_data->cap[1]->BitField = 0x06
pp_data->cap[1]->NextBytePosition = 0x0006
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 0
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0031
pp_data->cap[1]->NotRange.Reserved1 = 0x0031
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 16
pp_data->cap[1]->NotRange.Reserved4 = 16
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = -2047
pp_data->cap[1]->NotButton.LogicalMax = 2047
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x02
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 12
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0003
pp_data->cap[2]->BitCount = 12
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0005
pp_data->cap[2]->LinkCollection = 0x0001
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0030
pp_data->cap[2]->NotRange.Reserved1 = 0x0030
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 17
pp_data->cap[2]->NotRange.Reserved4 = 17
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = -2047
pp_data->cap[2]->NotButton.LogicalMax = 2047
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x02
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 8
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0006
pp_data->cap[3]->BitCount = 8
pp_data->cap[3]->BitField = 0x06
pp_data->cap[3]->NextBytePosition = 0x0007
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 0
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0038
pp_data->cap[3]->NotRange.Reserved1 = 0x0038
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 18
pp_data->cap[3]->NotRange.Reserved4 = 18
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = -127
pp_data->cap[3]->NotButton.LogicalMax = 127
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x000C
pp_data->cap[4]->ReportID = 0x02
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 8
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0007
pp_data->cap[4]->BitCount = 8
pp_data->cap[4]->BitField = 0x06
pp_data->cap[4]->NextBytePosition = 0x0008
pp_data->cap[4]->LinkCollection = 0x0001
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 0
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0238
pp_data->cap[4]->NotRange.Reserved1 = 0x0238
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 19
pp_data->cap[4]->NotRange.Reserved4 = 19
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = -127
pp_data->cap[4]->NotButton.LogicalMax = 127
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,8 @@
0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00,
0x85, 0x02, 0x05, 0x09, 0x19, 0x01, 0x29, 0x10, 0x15, 0x00,
0x25, 0x01, 0x75, 0x01, 0x95, 0x10, 0x81, 0x02, 0x05, 0x01,
0x09, 0x30, 0x09, 0x31, 0x16, 0x01, 0xF8, 0x26, 0xFF, 0x07,
0x75, 0x0C, 0x95, 0x02, 0x81, 0x06, 0x09, 0x38, 0x15, 0x81,
0x25, 0x7F, 0x75, 0x08, 0x95, 0x01, 0x81, 0x06, 0x05, 0x0C,
0x0A, 0x38, 0x02, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95,
0x01, 0x81, 0x06, 0xC0, 0xC0,

View File

@@ -0,0 +1,44 @@
05 01 09 02 A1 01 85 02 09 01 A1 00 05 09 19 01
29 10 15 00 25 01 95 10 75 01 81 02 05 01 16 01
F8 26 FF 07 75 0C 95 02 09 30 09 31 81 06 15 81
25 7F 75 08 95 01 09 38 81 06 05 0C 0A 38 02 95
01 81 06 C0 C0
Parser Output:
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x02, // Usage (Mouse)
0xA1, 0x01, // Collection (Application)
0x85, 0x02, // Report ID (2)
0x09, 0x01, // Usage (Pointer)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x10, // Usage Maximum (0x10)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0x10, // Report Count (16)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x16, 0x01, 0xF8, // Logical Minimum (-2047)
0x26, 0xFF, 0x07, // Logical Maximum (2047)
0x75, 0x0C, // Report Size (12)
0x95, 0x02, // Report Count (2)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x09, 0x38, // Usage (Wheel)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x0C, // Usage Page (Consumer)
0x0A, 0x38, 0x02, // Usage (AC Pan)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
// 69 bytes

View File

@@ -0,0 +1,139 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 1
dev->usage = 0x0002
dev->usage_page = 0xFF00
dev->path = "\\?\hid#vid_046d&pid_c534&mi_01&col05#7&1ebb799e&0&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0xFF00
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 1
pp_data->caps_info[0]->NumberOfCaps = 1
pp_data->caps_info[0]->ReportByteLength = 20
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 1
pp_data->caps_info[1]->LastCap = 2
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 20
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 2
pp_data->caps_info[2]->LastCap = 2
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x00D0
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0xFF00
pp_data->cap[0]->ReportID = 0x11
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 8
pp_data->cap[0]->ReportCount = 19
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 152
pp_data->cap[0]->BitField = 0x00
pp_data->cap[0]->NextBytePosition = 0x0014
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0xFF00
pp_data->cap[0]->LinkUsage = 0x0002
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0002
pp_data->cap[0]->NotRange.Reserved1 = 0x0002
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 255
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x11
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 19
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 152
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0014
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0xFF00
pp_data->cap[1]->LinkUsage = 0x0002
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0002
pp_data->cap[1]->NotRange.Reserved1 = 0x0002
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 0
pp_data->cap[1]->NotRange.Reserved4 = 0
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 255
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0xFF00
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x06, 0x00, 0xFF, 0x09, 0x02, 0xA1, 0x01, 0x85, 0x11, 0x09,
0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75, 0x08, 0x95, 0x13,
0x81, 0x00, 0x09, 0x02, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x13, 0x91, 0x00, 0xC0,

View File

@@ -0,0 +1,22 @@
macOS USB prober output for Logitech USB Receiver
06 00 FF 09 02 A1 01 85 11
75 08 95 13 15 00 26 FF
00 09 02 81 00 09 02 91 00 C0
Parser output:
0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00)
0x09, 0x02, // Usage (0x02)
0xA1, 0x01, // Collection (Application)
0x85, 0x11, // Report ID (17)
0x75, 0x08, // Report Size (8)
0x95, 0x13, // Report Count (19)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x09, 0x02, // Usage (0x02)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x02, // Usage (0x02)
0x91, 0x00, // Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection
// 27 bytes

View File

@@ -0,0 +1,185 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 0
dev->usage = 0x0006
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c534&mi_00#7&51bc424&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}\kbd"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0006
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 2
pp_data->caps_info[0]->NumberOfCaps = 2
pp_data->caps_info[0]->ReportByteLength = 9
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 2
pp_data->caps_info[1]->LastCap = 3
pp_data->caps_info[1]->NumberOfCaps = 1
pp_data->caps_info[1]->ReportByteLength = 2
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 3
pp_data->caps_info[2]->LastCap = 3
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0138
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0007
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 8
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 8
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0006
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x00E0
pp_data->cap[0]->Range.UsageMax = 0x00E7
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 7
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0007
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 6
pp_data->cap[1]->BytePosition = 0x0003
pp_data->cap[1]->BitCount = 48
pp_data->cap[1]->BitField = 0x00
pp_data->cap[1]->NextBytePosition = 0x0009
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0006
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 1
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->Range.UsageMin = 0x0000
pp_data->cap[1]->Range.UsageMax = 0x00A4
pp_data->cap[1]->Range.StringMin = 0
pp_data->cap[1]->Range.StringMax = 0
pp_data->cap[1]->Range.DesignatorMin = 0
pp_data->cap[1]->Range.DesignatorMax = 0
pp_data->cap[1]->Range.DataIndexMin = 8
pp_data->cap[1]->Range.DataIndexMax = 172
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 164
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[2]->UsagePage = 0x0008
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 5
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 5
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0006
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 1
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->Range.UsageMin = 0x0001
pp_data->cap[2]->Range.UsageMax = 0x0005
pp_data->cap[2]->Range.StringMin = 0
pp_data->cap[2]->Range.StringMax = 0
pp_data->cap[2]->Range.DesignatorMin = 0
pp_data->cap[2]->Range.DesignatorMax = 0
pp_data->cap[2]->Range.DataIndexMin = 0
pp_data->cap[2]->Range.DataIndexMax = 4
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0006
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,7 @@
0x05, 0x01, 0x09, 0x06, 0xA1, 0x01, 0x05, 0x07, 0x19, 0xE0,
0x29, 0xE7, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08,
0x81, 0x02, 0x75, 0x08, 0x95, 0x01, 0x81, 0x03, 0x19, 0x00,
0x29, 0xA4, 0x15, 0x00, 0x26, 0xA4, 0x00, 0x75, 0x08, 0x95,
0x06, 0x81, 0x00, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x15,
0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x05, 0x91, 0x02, 0x75,
0x03, 0x95, 0x01, 0x91, 0x03, 0xC0,

View File

@@ -0,0 +1,42 @@
macOS USB prober output for Logitech USB Receiver
Type: 0x22 (Report Descriptor)
Length (and contents): 59
Raw Descriptor (hex) 0000: 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
Raw Descriptor (hex) 0010: 75 01 95 08 81 02 81 03 95 05 05 08 19 01 29 05
Raw Descriptor (hex) 0020: 91 02 95 01 75 03 91 01 95 06 75 08 15 00 26 A4
Raw Descriptor (hex) 0030: 00 05 07 19 00 2A A4 00 81 00 C0
Parser output:
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0xE0, // Usage Minimum (0xE0)
0x29, 0xE7, // Usage Maximum (0xE7)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x05, // Report Count (5)
0x05, 0x08, // Usage Page (LEDs)
0x19, 0x01, // Usage Minimum (Num Lock)
0x29, 0x05, // Usage Maximum (Kana)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x06, // Report Count (6)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x26, 0xA4, 0x00, // Logical Maximum (164)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0x00, // Usage Minimum (0x00)
0x2A, 0xA4, 0x00, // Usage Maximum (0xA4)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 59 bytes

View File

@@ -0,0 +1,185 @@
# HIDAPI device info struct:
dev->vendor_id = 0x046D
dev->product_id = 0xC534
dev->manufacturer_string = "Logitech"
dev->product_string = "USB Receiver"
dev->release_number = 0x2901
dev->interface_number = 1
dev->usage = 0x0080
dev->usage_page = 0x0001
dev->path = "\\?\hid#vid_046d&pid_c534&mi_01&col03#7&1ebb799e&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0080
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00038000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 3
pp_data->caps_info[0]->NumberOfCaps = 3
pp_data->caps_info[0]->ReportByteLength = 2
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 3
pp_data->caps_info[1]->LastCap = 3
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 3
pp_data->caps_info[2]->LastCap = 3
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0138
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0001
pp_data->cap[0]->ReportID = 0x04
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 2
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 2
pp_data->cap[0]->BitField = 0x60
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0080
pp_data->cap[0]->IsMultipleItemsForArray = 1
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x0083
pp_data->cap[0]->NotRange.Reserved1 = 0x0083
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 2
pp_data->cap[0]->NotRange.Reserved4 = 2
pp_data->cap[0]->Button.LogicalMin = 1
pp_data->cap[0]->Button.LogicalMax = 3
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x0001
pp_data->cap[1]->ReportID = 0x04
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 2
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 2
pp_data->cap[1]->BitField = 0x60
pp_data->cap[1]->NextBytePosition = 0x0002
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0080
pp_data->cap[1]->IsMultipleItemsForArray = 1
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0081
pp_data->cap[1]->NotRange.Reserved1 = 0x0081
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->Button.LogicalMin = 1
pp_data->cap[1]->Button.LogicalMax = 3
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x04
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 2
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 2
pp_data->cap[2]->BitField = 0x60
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0080
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0082
pp_data->cap[2]->NotRange.Reserved1 = 0x0082
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 0
pp_data->cap[2]->NotRange.Reserved4 = 0
pp_data->cap[2]->Button.LogicalMin = 1
pp_data->cap[2]->Button.LogicalMax = 3
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0080
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,4 @@
0x05, 0x01, 0x09, 0x80, 0xA1, 0x01, 0x85, 0x04, 0x09, 0x82,
0x09, 0x81, 0x09, 0x83, 0x15, 0x01, 0x25, 0x03, 0x75, 0x02,
0x95, 0x01, 0x81, 0x60, 0x75, 0x06, 0x95, 0x01, 0x81, 0x03,
0xC0,

View File

@@ -0,0 +1,22 @@
05 01 09 80 A1 01 85 04 75 02 95 01 15 01 25 03
09 82 09 81 09 83 81 60 75 06 81 03 C0
Parser output:
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x80, // Usage (Sys Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x04, // Report ID (4)
0x75, 0x02, // Report Size (2)
0x95, 0x01, // Report Count (1)
0x15, 0x01, // Logical Minimum (1)
0x25, 0x03, // Logical Maximum (3)
0x09, 0x82, // Usage (Sys Sleep)
0x09, 0x81, // Usage (Sys Power Down)
0x09, 0x83, // Usage (Sys Wake Up)
0x81, 0x60, // Input (Data,Array,Abs,No Wrap,Linear,No Preferred State,Null State)
0x75, 0x06, // Report Size (6)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 29 bytes

View File

@@ -0,0 +1,385 @@
# HIDAPI device info struct:
dev->vendor_id = 0x047F
dev->product_id = 0xC056
dev->manufacturer_string = "Plantronics"
dev->product_string = "Plantronics Blackwire 3220 Series"
dev->release_number = 0x0210
dev->interface_number = 3
dev->usage = 0x0001
dev->usage_page = 0x000C
dev->path = "\\?\hid#vid_047f&pid_c056&mi_03&col01#f&39e6f119&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0001
pp_data->UsagePage = 0x000C
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 5
pp_data->caps_info[0]->NumberOfCaps = 5
pp_data->caps_info[0]->ReportByteLength = 33
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 5
pp_data->caps_info[1]->LastCap = 7
pp_data->caps_info[1]->NumberOfCaps = 2
pp_data->caps_info[1]->ReportByteLength = 37
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 7
pp_data->caps_info[2]->LastCap = 7
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x02D8
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x000C
pp_data->cap[0]->ReportID = 0x01
pp_data->cap[0]->BitPosition = 1
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 1
pp_data->cap[0]->BitField = 0x06
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000C
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 0
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x00EA
pp_data->cap[0]->NotRange.Reserved1 = 0x00EA
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x000C
pp_data->cap[1]->ReportID = 0x01
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 1
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 1
pp_data->cap[1]->BitField = 0x06
pp_data->cap[1]->NextBytePosition = 0x0002
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x000C
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 0
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x00E9
pp_data->cap[1]->NotRange.Reserved1 = 0x00E9
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x000C
pp_data->cap[2]->ReportID = 0x02
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 16
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 16
pp_data->cap[2]->BitField = 0x02
pp_data->cap[2]->NextBytePosition = 0x0003
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x000C
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0000
pp_data->cap[2]->NotRange.Reserved1 = 0x0000
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 2
pp_data->cap[2]->NotRange.Reserved4 = 2
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x000C
pp_data->cap[3]->ReportID = 0x05
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 8
pp_data->cap[3]->ReportCount = 32
pp_data->cap[3]->BytePosition = 0x0001
pp_data->cap[3]->BitCount = 256
pp_data->cap[3]->BitField = 0x02
pp_data->cap[3]->NextBytePosition = 0x0021
pp_data->cap[3]->LinkCollection = 0x0000
pp_data->cap[3]->LinkUsagePage = 0x000C
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 1
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0000
pp_data->cap[3]->NotRange.Reserved1 = 0x0000
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 3
pp_data->cap[3]->NotRange.Reserved4 = 3
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = 0
pp_data->cap[3]->NotButton.LogicalMax = 1
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x000C
pp_data->cap[4]->ReportID = 0x07
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 8
pp_data->cap[4]->ReportCount = 32
pp_data->cap[4]->BytePosition = 0x0001
pp_data->cap[4]->BitCount = 256
pp_data->cap[4]->BitField = 0x02
pp_data->cap[4]->NextBytePosition = 0x0021
pp_data->cap[4]->LinkCollection = 0x0000
pp_data->cap[4]->LinkUsagePage = 0x000C
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 1
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0000
pp_data->cap[4]->NotRange.Reserved1 = 0x0000
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 4
pp_data->cap[4]->NotRange.Reserved4 = 4
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = 0
pp_data->cap[4]->NotButton.LogicalMax = 1
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[5]->UsagePage = 0x000C
pp_data->cap[5]->ReportID = 0x04
pp_data->cap[5]->BitPosition = 0
pp_data->cap[5]->BitSize = 8
pp_data->cap[5]->ReportCount = 36
pp_data->cap[5]->BytePosition = 0x0001
pp_data->cap[5]->BitCount = 288
pp_data->cap[5]->BitField = 0x02
pp_data->cap[5]->NextBytePosition = 0x0025
pp_data->cap[5]->LinkCollection = 0x0000
pp_data->cap[5]->LinkUsagePage = 0x000C
pp_data->cap[5]->LinkUsage = 0x0001
pp_data->cap[5]->IsMultipleItemsForArray = 0
pp_data->cap[5]->IsButtonCap = 0
pp_data->cap[5]->IsPadding = 0
pp_data->cap[5]->IsAbsolute = 1
pp_data->cap[5]->IsRange = 0
pp_data->cap[5]->IsAlias = 0
pp_data->cap[5]->IsStringRange = 0
pp_data->cap[5]->IsDesignatorRange = 0
pp_data->cap[5]->Reserved1 = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[5]->NotRange.Usage = 0x0000
pp_data->cap[5]->NotRange.Reserved1 = 0x0000
pp_data->cap[5]->NotRange.StringIndex = 0
pp_data->cap[5]->NotRange.Reserved2 = 0
pp_data->cap[5]->NotRange.DesignatorIndex = 0
pp_data->cap[5]->NotRange.Reserved3 = 0
pp_data->cap[5]->NotRange.DataIndex = 0
pp_data->cap[5]->NotRange.Reserved4 = 0
pp_data->cap[5]->NotButton.HasNull = 0
pp_data->cap[5]->NotButton.Reserved4 = 0x000000
pp_data->cap[5]->NotButton.LogicalMin = 0
pp_data->cap[5]->NotButton.LogicalMax = 1
pp_data->cap[5]->NotButton.PhysicalMin = 0
pp_data->cap[5]->NotButton.PhysicalMax = 0
pp_data->cap[5]->Units = 0
pp_data->cap[5]->UnitsExp = 0
pp_data->cap[6]->UsagePage = 0x000C
pp_data->cap[6]->ReportID = 0x06
pp_data->cap[6]->BitPosition = 0
pp_data->cap[6]->BitSize = 8
pp_data->cap[6]->ReportCount = 36
pp_data->cap[6]->BytePosition = 0x0001
pp_data->cap[6]->BitCount = 288
pp_data->cap[6]->BitField = 0x02
pp_data->cap[6]->NextBytePosition = 0x0025
pp_data->cap[6]->LinkCollection = 0x0000
pp_data->cap[6]->LinkUsagePage = 0x000C
pp_data->cap[6]->LinkUsage = 0x0001
pp_data->cap[6]->IsMultipleItemsForArray = 0
pp_data->cap[6]->IsButtonCap = 0
pp_data->cap[6]->IsPadding = 0
pp_data->cap[6]->IsAbsolute = 1
pp_data->cap[6]->IsRange = 0
pp_data->cap[6]->IsAlias = 0
pp_data->cap[6]->IsStringRange = 0
pp_data->cap[6]->IsDesignatorRange = 0
pp_data->cap[6]->Reserved1 = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[6]->NotRange.Usage = 0x0000
pp_data->cap[6]->NotRange.Reserved1 = 0x0000
pp_data->cap[6]->NotRange.StringIndex = 0
pp_data->cap[6]->NotRange.Reserved2 = 0
pp_data->cap[6]->NotRange.DesignatorIndex = 0
pp_data->cap[6]->NotRange.Reserved3 = 0
pp_data->cap[6]->NotRange.DataIndex = 1
pp_data->cap[6]->NotRange.Reserved4 = 1
pp_data->cap[6]->NotButton.HasNull = 0
pp_data->cap[6]->NotButton.Reserved4 = 0x000000
pp_data->cap[6]->NotButton.LogicalMin = 0
pp_data->cap[6]->NotButton.LogicalMax = 1
pp_data->cap[6]->NotButton.PhysicalMin = 0
pp_data->cap[6]->NotButton.PhysicalMax = 0
pp_data->cap[6]->Units = 0
pp_data->cap[6]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000C
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,10 @@
0x05, 0x0C, 0x09, 0x01, 0xA1, 0x01, 0x85, 0x01, 0x09, 0xE9,
0x09, 0xEA, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x02,
0x81, 0x06, 0x75, 0x06, 0x95, 0x01, 0x81, 0x03, 0x85, 0x02,
0x09, 0x00, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x10,
0x81, 0x02, 0x85, 0x05, 0x09, 0x00, 0x15, 0x00, 0x25, 0x01,
0x75, 0x08, 0x95, 0x20, 0x81, 0x02, 0x85, 0x07, 0x09, 0x00,
0x15, 0x00, 0x25, 0x01, 0x75, 0x08, 0x95, 0x20, 0x81, 0x02,
0x85, 0x04, 0x09, 0x00, 0x15, 0x00, 0x25, 0x01, 0x75, 0x08,
0x95, 0x24, 0x91, 0x02, 0x85, 0x06, 0x09, 0x00, 0x15, 0x00,
0x25, 0x01, 0x75, 0x08, 0x95, 0x24, 0x91, 0x02, 0xC0,

View File

@@ -0,0 +1,47 @@
macOS USB Prober about 0x047F/0xC056 "Plantronics Blackwire 3220 Series"
05 0C 09 01 A1 01 85 01 15 00 25 01 09 E9 09 EA
75 01 95 02 81 06 95 06 81 01 85 02 05 0C 09 00
95 10 81 02 85 04 09 00 75 08 95 24 91 02 85 05
09 00 95 20 81 02 85 06 09 00 95 24 91 02 85 07
09 00 95 20 81 02 C0
# Parser output:
0x05, 0x0C, // Usage Page (Consumer)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x09, 0xE9, // Usage (Volume Increment)
0x09, 0xEA, // Usage (Volume Decrement)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x06, // Report Count (6)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x02, // Report ID (2)
0x05, 0x0C, // Usage Page (Consumer)
0x09, 0x00, // Usage (Unassigned)
0x95, 0x10, // Report Count (16)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x04, // Report ID (4)
0x09, 0x00, // Usage (Unassigned)
0x75, 0x08, // Report Size (8)
0x95, 0x24, // Report Count (36)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x05, // Report ID (5)
0x09, 0x00, // Usage (Unassigned)
0x95, 0x20, // Report Count (32)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x06, // Report ID (6)
0x09, 0x00, // Usage (Unassigned)
0x95, 0x24, // Report Count (36)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x07, // Report ID (7)
0x09, 0x00, // Usage (Unassigned)
0x95, 0x20, // Report Count (32)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 71 bytes

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,24 @@
0x06, 0xA0, 0xFF, 0x09, 0x03, 0xA1, 0x01, 0x85, 0x03, 0x09,
0x30, 0x15, 0x00, 0x25, 0x01, 0x75, 0x08, 0x95, 0x20, 0x81,
0x02, 0x85, 0x14, 0x09, 0xB1, 0x09, 0xB2, 0x09, 0xB5, 0x09,
0xB7, 0x09, 0xB3, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95,
0x05, 0x81, 0x06, 0x75, 0x03, 0x95, 0x01, 0x81, 0x03, 0x85,
0x15, 0x09, 0x8C, 0x15, 0x00, 0x27, 0xFF, 0xFF, 0x00, 0x00,
0x75, 0x10, 0x95, 0x01, 0x81, 0x22, 0x85, 0x1F, 0x09, 0x9C,
0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x01, 0x81, 0x06,
0x75, 0x07, 0x95, 0x01, 0x81, 0x03, 0x85, 0x03, 0x09, 0x30,
0x15, 0x00, 0x25, 0x01, 0x75, 0x08, 0x95, 0x20, 0x91, 0x02,
0x85, 0x19, 0x09, 0x8D, 0x09, 0x8F, 0x09, 0x9E, 0x09, 0xDC,
0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x04, 0x91, 0x22,
0x09, 0xD2, 0x09, 0xD9, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01,
0x95, 0x02, 0x91, 0x06, 0x75, 0x02, 0x95, 0x01, 0x91, 0x03,
0x85, 0x1A, 0x09, 0xB5, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01,
0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01, 0x91, 0x03,
0x85, 0x1B, 0x09, 0xCF, 0x09, 0xB5, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x02, 0xB1, 0x22, 0x09, 0xDE, 0x15, 0x00,
0x25, 0x01, 0x75, 0x01, 0x95, 0x01, 0xB1, 0x23, 0x09, 0xD8,
0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x01, 0xB1, 0x22,
0x75, 0x04, 0x95, 0x01, 0xB1, 0x03, 0x09, 0x09, 0x09, 0x17,
0x09, 0x18, 0x09, 0x1E, 0x09, 0x20, 0x09, 0x2A, 0x15, 0x00,
0x25, 0x01, 0x75, 0x01, 0x95, 0x06, 0xB1, 0x22, 0x75, 0x02,
0x95, 0x01, 0xB1, 0x03, 0xC0,

View File

@@ -0,0 +1,113 @@
macOS USB Prober about 0x047F/0xC056 "Plantronics Blackwire 3220 Series"
06 A0 FF 09 03 A1 01 85 03 09 30 75
08 95 20 91 02 85 03 09 30 75 08 95 20 81 02 85
14 09 B1 09 B2 09 B5 09 B7 09 B3 15 00 25 01 75
01 95 05 81 06 95 03 81 01 85 15 09 8C 15 00 27
FF FF 00 00 75 10 95 01 81 22 85 19 09 8D 09 8F
09 9E 09 DC 15 00 25 01 75 01 95 04 91 22 09 D2
09 D9 15 00 25 01 75 01 95 02 91 06 95 02 91 01
85 1A 09 B5 15 00 25 01 75 01 95 01 91 22 95 07
91 01 85 1B 09 CF 09 B5 75 01 95 02 B1 22 09 DE
75 01 95 01 B1 23 09 D8 95 01 B1 22 95 04 B1 01
09 09 09 17 09 18 09 1E 09 20 09 2A 75 01 95 06
B1 22 95 02 B1 01 85 1F 09 9C 75 01 95 01 81 06
95 07 81 01 C0
Parser output:
0x06, 0xA0, 0xFF, // Usage Page (Vendor Defined 0xFFA0)
0x09, 0x03, // Usage (0x03)
0xA1, 0x01, // Collection (Application)
0x85, 0x03, // Report ID (3)
0x09, 0x30, // Usage (0x30)
0x75, 0x08, // Report Size (8)
0x95, 0x20, // Report Count (32)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x03, // Report ID (3)
0x09, 0x30, // Usage (0x30)
0x75, 0x08, // Report Size (8)
0x95, 0x20, // Report Count (32)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x14, // Report ID (20)
0x09, 0xB1, // Usage (0xB1)
0x09, 0xB2, // Usage (0xB2)
0x09, 0xB5, // Usage (0xB5)
0x09, 0xB7, // Usage (0xB7)
0x09, 0xB3, // Usage (0xB3)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x05, // Report Count (5)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x03, // Report Count (3)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x85, 0x15, // Report ID (21)
0x09, 0x8C, // Usage (0x8C)
0x15, 0x00, // Logical Minimum (0)
0x27, 0xFF, 0xFF, 0x00, 0x00, // Logical Maximum (65534)
0x75, 0x10, // Report Size (16)
0x95, 0x01, // Report Count (1)
0x81, 0x22, // Input (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position)
0x85, 0x19, // Report ID (25)
0x09, 0x8D, // Usage (0x8D)
0x09, 0x8F, // Usage (0x8F)
0x09, 0x9E, // Usage (0x9E)
0x09, 0xDC, // Usage (0xDC)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x04, // Report Count (4)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x09, 0xD2, // Usage (0xD2)
0x09, 0xD9, // Usage (0xD9)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x91, 0x06, // Output (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x02, // Report Count (2)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x1A, // Report ID (26)
0x09, 0xB5, // Usage (0xB5)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x1B, // Report ID (27)
0x09, 0xCF, // Usage (0xCF)
0x09, 0xB5, // Usage (0xB5)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0xB1, 0x22, // Feature (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x09, 0xDE, // Usage (0xDE)
0x75, 0x01, // Report Size (1)
0x95, 0x01, // Report Count (1)
0xB1, 0x23, // Feature (Const,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x09, 0xD8, // Usage (0xD8)
0x95, 0x01, // Report Count (1)
0xB1, 0x22, // Feature (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x04, // Report Count (4)
0xB1, 0x01, // Feature (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x09, 0x09, // Usage (0x09)
0x09, 0x17, // Usage (0x17)
0x09, 0x18, // Usage (0x18)
0x09, 0x1E, // Usage (0x1E)
0x09, 0x20, // Usage (0x20)
0x09, 0x2A, // Usage (0x2A)
0x75, 0x01, // Report Size (1)
0x95, 0x06, // Report Count (6)
0xB1, 0x22, // Feature (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x02, // Report Count (2)
0xB1, 0x01, // Feature (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x1F, // Report ID (31)
0x09, 0x9C, // Usage (0x9C)
0x75, 0x01, // Report Size (1)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x07, // Report Count (7)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
// 193 bytes

View File

@@ -0,0 +1,461 @@
# HIDAPI device info struct:
dev->vendor_id = 0x047F
dev->product_id = 0xC056
dev->manufacturer_string = "Plantronics"
dev->product_string = "Plantronics Blackwire 3220 Series"
dev->release_number = 0x0210
dev->interface_number = 3
dev->usage = 0x0005
dev->usage_page = 0x000B
dev->path = "\\?\hid#vid_047f&pid_c056&mi_03&col02#f&39e6f119&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0005
pp_data->UsagePage = 0x000B
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 3
pp_data->caps_info[0]->NumberOfCaps = 3
pp_data->caps_info[0]->ReportByteLength = 2
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 3
pp_data->caps_info[1]->LastCap = 9
pp_data->caps_info[1]->NumberOfCaps = 6
pp_data->caps_info[1]->ReportByteLength = 2
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 9
pp_data->caps_info[2]->LastCap = 9
pp_data->caps_info[2]->NumberOfCaps = 0
pp_data->caps_info[2]->ReportByteLength = 0
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x03A8
pp_data->NumberLinkCollectionNodes = 1
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x000B
pp_data->cap[0]->ReportID = 0x08
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 1
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 1
pp_data->cap[0]->BitField = 0x06
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0000
pp_data->cap[0]->LinkUsagePage = 0x000B
pp_data->cap[0]->LinkUsage = 0x0005
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 0
pp_data->cap[0]->IsRange = 0
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->NotRange.Usage = 0x002F
pp_data->cap[0]->NotRange.Reserved1 = 0x002F
pp_data->cap[0]->NotRange.StringIndex = 0
pp_data->cap[0]->NotRange.Reserved2 = 0
pp_data->cap[0]->NotRange.DesignatorIndex = 0
pp_data->cap[0]->NotRange.Reserved3 = 0
pp_data->cap[0]->NotRange.DataIndex = 0
pp_data->cap[0]->NotRange.Reserved4 = 0
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0x000B
pp_data->cap[1]->ReportID = 0x08
pp_data->cap[1]->BitPosition = 2
pp_data->cap[1]->BitSize = 1
pp_data->cap[1]->ReportCount = 1
pp_data->cap[1]->BytePosition = 0x0001
pp_data->cap[1]->BitCount = 1
pp_data->cap[1]->BitField = 0x22
pp_data->cap[1]->NextBytePosition = 0x0002
pp_data->cap[1]->LinkCollection = 0x0000
pp_data->cap[1]->LinkUsagePage = 0x000B
pp_data->cap[1]->LinkUsage = 0x0005
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 1
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0021
pp_data->cap[1]->NotRange.Reserved1 = 0x0021
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 1
pp_data->cap[1]->NotRange.Reserved4 = 1
pp_data->cap[1]->Button.LogicalMin = 0
pp_data->cap[1]->Button.LogicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x000B
pp_data->cap[2]->ReportID = 0x08
pp_data->cap[2]->BitPosition = 1
pp_data->cap[2]->BitSize = 1
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0001
pp_data->cap[2]->BitCount = 1
pp_data->cap[2]->BitField = 0x22
pp_data->cap[2]->NextBytePosition = 0x0002
pp_data->cap[2]->LinkCollection = 0x0000
pp_data->cap[2]->LinkUsagePage = 0x000B
pp_data->cap[2]->LinkUsage = 0x0005
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 1
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 1
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0020
pp_data->cap[2]->NotRange.Reserved1 = 0x0020
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 2
pp_data->cap[2]->NotRange.Reserved4 = 2
pp_data->cap[2]->Button.LogicalMin = 0
pp_data->cap[2]->Button.LogicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
# Output hid_pp_cap struct:
pp_data->cap[3]->UsagePage = 0x0008
pp_data->cap[3]->ReportID = 0x09
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 1
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0001
pp_data->cap[3]->BitCount = 1
pp_data->cap[3]->BitField = 0x22
pp_data->cap[3]->NextBytePosition = 0x0002
pp_data->cap[3]->LinkCollection = 0x0000
pp_data->cap[3]->LinkUsagePage = 0x000B
pp_data->cap[3]->LinkUsage = 0x0005
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 1
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 1
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0009
pp_data->cap[3]->NotRange.Reserved1 = 0x0009
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 0
pp_data->cap[3]->NotRange.Reserved4 = 0
pp_data->cap[3]->Button.LogicalMin = 0
pp_data->cap[3]->Button.LogicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x0008
pp_data->cap[4]->ReportID = 0x17
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 1
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0001
pp_data->cap[4]->BitCount = 1
pp_data->cap[4]->BitField = 0x22
pp_data->cap[4]->NextBytePosition = 0x0002
pp_data->cap[4]->LinkCollection = 0x0000
pp_data->cap[4]->LinkUsagePage = 0x000B
pp_data->cap[4]->LinkUsage = 0x0005
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 1
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 1
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0017
pp_data->cap[4]->NotRange.Reserved1 = 0x0017
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 1
pp_data->cap[4]->NotRange.Reserved4 = 1
pp_data->cap[4]->Button.LogicalMin = 0
pp_data->cap[4]->Button.LogicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
pp_data->cap[5]->UsagePage = 0x0008
pp_data->cap[5]->ReportID = 0x18
pp_data->cap[5]->BitPosition = 0
pp_data->cap[5]->BitSize = 1
pp_data->cap[5]->ReportCount = 1
pp_data->cap[5]->BytePosition = 0x0001
pp_data->cap[5]->BitCount = 1
pp_data->cap[5]->BitField = 0x22
pp_data->cap[5]->NextBytePosition = 0x0002
pp_data->cap[5]->LinkCollection = 0x0000
pp_data->cap[5]->LinkUsagePage = 0x000B
pp_data->cap[5]->LinkUsage = 0x0005
pp_data->cap[5]->IsMultipleItemsForArray = 0
pp_data->cap[5]->IsButtonCap = 1
pp_data->cap[5]->IsPadding = 0
pp_data->cap[5]->IsAbsolute = 1
pp_data->cap[5]->IsRange = 0
pp_data->cap[5]->IsAlias = 0
pp_data->cap[5]->IsStringRange = 0
pp_data->cap[5]->IsDesignatorRange = 0
pp_data->cap[5]->Reserved1 = 0x000
pp_data->cap[5]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[5]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[5]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[5]->NotRange.Usage = 0x0018
pp_data->cap[5]->NotRange.Reserved1 = 0x0018
pp_data->cap[5]->NotRange.StringIndex = 0
pp_data->cap[5]->NotRange.Reserved2 = 0
pp_data->cap[5]->NotRange.DesignatorIndex = 0
pp_data->cap[5]->NotRange.Reserved3 = 0
pp_data->cap[5]->NotRange.DataIndex = 2
pp_data->cap[5]->NotRange.Reserved4 = 2
pp_data->cap[5]->Button.LogicalMin = 0
pp_data->cap[5]->Button.LogicalMax = 0
pp_data->cap[5]->Units = 0
pp_data->cap[5]->UnitsExp = 0
pp_data->cap[6]->UsagePage = 0x0008
pp_data->cap[6]->ReportID = 0x1E
pp_data->cap[6]->BitPosition = 0
pp_data->cap[6]->BitSize = 1
pp_data->cap[6]->ReportCount = 1
pp_data->cap[6]->BytePosition = 0x0001
pp_data->cap[6]->BitCount = 1
pp_data->cap[6]->BitField = 0x22
pp_data->cap[6]->NextBytePosition = 0x0002
pp_data->cap[6]->LinkCollection = 0x0000
pp_data->cap[6]->LinkUsagePage = 0x000B
pp_data->cap[6]->LinkUsage = 0x0005
pp_data->cap[6]->IsMultipleItemsForArray = 0
pp_data->cap[6]->IsButtonCap = 1
pp_data->cap[6]->IsPadding = 0
pp_data->cap[6]->IsAbsolute = 1
pp_data->cap[6]->IsRange = 0
pp_data->cap[6]->IsAlias = 0
pp_data->cap[6]->IsStringRange = 0
pp_data->cap[6]->IsDesignatorRange = 0
pp_data->cap[6]->Reserved1 = 0x000
pp_data->cap[6]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[6]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[6]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[6]->NotRange.Usage = 0x001E
pp_data->cap[6]->NotRange.Reserved1 = 0x001E
pp_data->cap[6]->NotRange.StringIndex = 0
pp_data->cap[6]->NotRange.Reserved2 = 0
pp_data->cap[6]->NotRange.DesignatorIndex = 0
pp_data->cap[6]->NotRange.Reserved3 = 0
pp_data->cap[6]->NotRange.DataIndex = 3
pp_data->cap[6]->NotRange.Reserved4 = 3
pp_data->cap[6]->Button.LogicalMin = 0
pp_data->cap[6]->Button.LogicalMax = 0
pp_data->cap[6]->Units = 0
pp_data->cap[6]->UnitsExp = 0
pp_data->cap[7]->UsagePage = 0x0008
pp_data->cap[7]->ReportID = 0x20
pp_data->cap[7]->BitPosition = 0
pp_data->cap[7]->BitSize = 1
pp_data->cap[7]->ReportCount = 1
pp_data->cap[7]->BytePosition = 0x0001
pp_data->cap[7]->BitCount = 1
pp_data->cap[7]->BitField = 0x22
pp_data->cap[7]->NextBytePosition = 0x0002
pp_data->cap[7]->LinkCollection = 0x0000
pp_data->cap[7]->LinkUsagePage = 0x000B
pp_data->cap[7]->LinkUsage = 0x0005
pp_data->cap[7]->IsMultipleItemsForArray = 0
pp_data->cap[7]->IsButtonCap = 1
pp_data->cap[7]->IsPadding = 0
pp_data->cap[7]->IsAbsolute = 1
pp_data->cap[7]->IsRange = 0
pp_data->cap[7]->IsAlias = 0
pp_data->cap[7]->IsStringRange = 0
pp_data->cap[7]->IsDesignatorRange = 0
pp_data->cap[7]->Reserved1 = 0x000
pp_data->cap[7]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[7]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[7]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[7]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[7]->NotRange.Usage = 0x0020
pp_data->cap[7]->NotRange.Reserved1 = 0x0020
pp_data->cap[7]->NotRange.StringIndex = 0
pp_data->cap[7]->NotRange.Reserved2 = 0
pp_data->cap[7]->NotRange.DesignatorIndex = 0
pp_data->cap[7]->NotRange.Reserved3 = 0
pp_data->cap[7]->NotRange.DataIndex = 4
pp_data->cap[7]->NotRange.Reserved4 = 4
pp_data->cap[7]->Button.LogicalMin = 0
pp_data->cap[7]->Button.LogicalMax = 0
pp_data->cap[7]->Units = 0
pp_data->cap[7]->UnitsExp = 0
pp_data->cap[8]->UsagePage = 0x0008
pp_data->cap[8]->ReportID = 0x2A
pp_data->cap[8]->BitPosition = 0
pp_data->cap[8]->BitSize = 1
pp_data->cap[8]->ReportCount = 1
pp_data->cap[8]->BytePosition = 0x0001
pp_data->cap[8]->BitCount = 1
pp_data->cap[8]->BitField = 0x22
pp_data->cap[8]->NextBytePosition = 0x0002
pp_data->cap[8]->LinkCollection = 0x0000
pp_data->cap[8]->LinkUsagePage = 0x000B
pp_data->cap[8]->LinkUsage = 0x0005
pp_data->cap[8]->IsMultipleItemsForArray = 0
pp_data->cap[8]->IsButtonCap = 1
pp_data->cap[8]->IsPadding = 0
pp_data->cap[8]->IsAbsolute = 1
pp_data->cap[8]->IsRange = 0
pp_data->cap[8]->IsAlias = 0
pp_data->cap[8]->IsStringRange = 0
pp_data->cap[8]->IsDesignatorRange = 0
pp_data->cap[8]->Reserved1 = 0x000
pp_data->cap[8]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[8]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[8]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[8]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[8]->NotRange.Usage = 0x002A
pp_data->cap[8]->NotRange.Reserved1 = 0x002A
pp_data->cap[8]->NotRange.StringIndex = 0
pp_data->cap[8]->NotRange.Reserved2 = 0
pp_data->cap[8]->NotRange.DesignatorIndex = 0
pp_data->cap[8]->NotRange.Reserved3 = 0
pp_data->cap[8]->NotRange.DataIndex = 5
pp_data->cap[8]->NotRange.Reserved4 = 5
pp_data->cap[8]->Button.LogicalMin = 0
pp_data->cap[8]->Button.LogicalMax = 0
pp_data->cap[8]->Units = 0
pp_data->cap[8]->UnitsExp = 0
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0005
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x000B
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 0
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 0
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000

View File

@@ -0,0 +1,17 @@
0x05, 0x0B, 0x09, 0x05, 0xA1, 0x01, 0x85, 0x08, 0x09, 0x2F,
0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x01, 0x81, 0x06,
0x09, 0x20, 0x09, 0x21, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01,
0x95, 0x02, 0x81, 0x22, 0x75, 0x05, 0x95, 0x01, 0x81, 0x03,
0x85, 0x09, 0x05, 0x08, 0x09, 0x09, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0x85, 0x17, 0x09, 0x17, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0x85, 0x18, 0x09, 0x18, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0x85, 0x1E, 0x09, 0x1E, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0x85, 0x20, 0x09, 0x20, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0x85, 0x2A, 0x09, 0x2A, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x01, 0x91, 0x22, 0x75, 0x07, 0x95, 0x01,
0x91, 0x03, 0xC0,

View File

@@ -0,0 +1,68 @@
macOS USB Prober about 0x047F/0xC056 "Plantronics Blackwire 3220 Series"
05 0B 09 05 A1 01 85 08 15
00 25 01 09 2F 75 01 95 01 81 06 09 20 09 21 75
01 95 02 81 22 95 05 81 01 05 08 85 09 09 09 95
01 91 22 95 07 91 01 85 17 09 17 95 01 91 22 95
07 91 01 85 18 09 18 95 01 91 22 95 07 91 01 85
1E 09 1E 95 01 91 22 95 07 91 01 85 20 09 20 95
01 91 22 95 07 91 01 85 2A 09 2A 95 01 91 22 95
07 91 01 C0
Parser output:
0x05, 0x0B, // Usage Page (Telephony)
0x09, 0x05, // Usage (Headset)
0xA1, 0x01, // Collection (Application)
0x85, 0x08, // Report ID (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x09, 0x2F, // Usage (Phone Mute)
0x75, 0x01, // Report Size (1)
0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x20, // Usage (Hook Switch)
0x09, 0x21, // Usage (Flash)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x22, // Input (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position)
0x95, 0x05, // Report Count (5)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x08, // Usage Page (LEDs)
0x85, 0x09, // Report ID (9)
0x09, 0x09, // Usage (Mute)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x17, // Report ID (23)
0x09, 0x17, // Usage (Off-Hook)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x18, // Report ID (24)
0x09, 0x18, // Usage (Ring)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x1E, // Report ID (30)
0x09, 0x1E, // Usage (Speaker)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x20, // Report ID (32)
0x09, 0x20, // Usage (Hold)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x85, 0x2A, // Report ID (42)
0x09, 0x2A, // Usage (On-Line)
0x95, 0x01, // Report Count (1)
0x91, 0x22, // Output (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x95, 0x07, // Report Count (7)
0x91, 0x01, // Output (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0, // End Collection
// 109 bytes

View File

@@ -0,0 +1,302 @@
# HIDAPI device info struct:
dev->vendor_id = 0x1532
dev->product_id = 0x00A3
dev->manufacturer_string = "Razer"
dev->product_string = "Razer Cobra"
dev->release_number = 0x0200
dev->interface_number = 0
dev->usage = 0x0002
dev->usage_page = 0x0001
dev->path = "\\?\HID#VID_1532&PID_00A3&MI_00#7&370ad372&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
# Preparsed Data struct:
pp_data->MagicKey = 0x48696450204B4452
pp_data->Usage = 0x0002
pp_data->UsagePage = 0x0001
pp_data->Reserved = 0x00000000
# Input caps_info struct:
pp_data->caps_info[0]->FirstCap = 0
pp_data->caps_info[0]->LastCap = 5
pp_data->caps_info[0]->NumberOfCaps = 5
pp_data->caps_info[0]->ReportByteLength = 9
# Output caps_info struct:
pp_data->caps_info[1]->FirstCap = 5
pp_data->caps_info[1]->LastCap = 5
pp_data->caps_info[1]->NumberOfCaps = 0
pp_data->caps_info[1]->ReportByteLength = 0
# Feature caps_info struct:
pp_data->caps_info[2]->FirstCap = 5
pp_data->caps_info[2]->LastCap = 5
pp_data->caps_info[2]->NumberOfCaps = 1
pp_data->caps_info[2]->ReportByteLength = 91
# LinkCollectionArray Offset & Size:
pp_data->FirstByteOfLinkCollectionArray = 0x0270
pp_data->NumberLinkCollectionNodes = 2
# Input hid_pp_cap struct:
pp_data->cap[0]->UsagePage = 0x0009
pp_data->cap[0]->ReportID = 0x00
pp_data->cap[0]->BitPosition = 0
pp_data->cap[0]->BitSize = 1
pp_data->cap[0]->ReportCount = 5
pp_data->cap[0]->BytePosition = 0x0001
pp_data->cap[0]->BitCount = 5
pp_data->cap[0]->BitField = 0x02
pp_data->cap[0]->NextBytePosition = 0x0002
pp_data->cap[0]->LinkCollection = 0x0001
pp_data->cap[0]->LinkUsagePage = 0x0001
pp_data->cap[0]->LinkUsage = 0x0001
pp_data->cap[0]->IsMultipleItemsForArray = 0
pp_data->cap[0]->IsButtonCap = 1
pp_data->cap[0]->IsPadding = 0
pp_data->cap[0]->IsAbsolute = 1
pp_data->cap[0]->IsRange = 1
pp_data->cap[0]->IsAlias = 0
pp_data->cap[0]->IsStringRange = 0
pp_data->cap[0]->IsDesignatorRange = 0
pp_data->cap[0]->Reserved1 = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[0]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[0]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[0]->Range.UsageMin = 0x0001
pp_data->cap[0]->Range.UsageMax = 0x0005
pp_data->cap[0]->Range.StringMin = 0
pp_data->cap[0]->Range.StringMax = 0
pp_data->cap[0]->Range.DesignatorMin = 0
pp_data->cap[0]->Range.DesignatorMax = 0
pp_data->cap[0]->Range.DataIndexMin = 0
pp_data->cap[0]->Range.DataIndexMax = 4
pp_data->cap[0]->Button.LogicalMin = 0
pp_data->cap[0]->Button.LogicalMax = 0
pp_data->cap[0]->Units = 0
pp_data->cap[0]->UnitsExp = 0
pp_data->cap[1]->UsagePage = 0xFF00
pp_data->cap[1]->ReportID = 0x00
pp_data->cap[1]->BitPosition = 0
pp_data->cap[1]->BitSize = 8
pp_data->cap[1]->ReportCount = 2
pp_data->cap[1]->BytePosition = 0x0002
pp_data->cap[1]->BitCount = 16
pp_data->cap[1]->BitField = 0x02
pp_data->cap[1]->NextBytePosition = 0x0004
pp_data->cap[1]->LinkCollection = 0x0001
pp_data->cap[1]->LinkUsagePage = 0x0001
pp_data->cap[1]->LinkUsage = 0x0001
pp_data->cap[1]->IsMultipleItemsForArray = 0
pp_data->cap[1]->IsButtonCap = 0
pp_data->cap[1]->IsPadding = 0
pp_data->cap[1]->IsAbsolute = 1
pp_data->cap[1]->IsRange = 0
pp_data->cap[1]->IsAlias = 0
pp_data->cap[1]->IsStringRange = 0
pp_data->cap[1]->IsDesignatorRange = 0
pp_data->cap[1]->Reserved1 = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[1]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[1]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[1]->NotRange.Usage = 0x0040
pp_data->cap[1]->NotRange.Reserved1 = 0x0040
pp_data->cap[1]->NotRange.StringIndex = 0
pp_data->cap[1]->NotRange.Reserved2 = 0
pp_data->cap[1]->NotRange.DesignatorIndex = 0
pp_data->cap[1]->NotRange.Reserved3 = 0
pp_data->cap[1]->NotRange.DataIndex = 5
pp_data->cap[1]->NotRange.Reserved4 = 5
pp_data->cap[1]->NotButton.HasNull = 0
pp_data->cap[1]->NotButton.Reserved4 = 0x000000
pp_data->cap[1]->NotButton.LogicalMin = -127
pp_data->cap[1]->NotButton.LogicalMax = 127
pp_data->cap[1]->NotButton.PhysicalMin = 0
pp_data->cap[1]->NotButton.PhysicalMax = 0
pp_data->cap[1]->Units = 0
pp_data->cap[1]->UnitsExp = 0
pp_data->cap[2]->UsagePage = 0x0001
pp_data->cap[2]->ReportID = 0x00
pp_data->cap[2]->BitPosition = 0
pp_data->cap[2]->BitSize = 8
pp_data->cap[2]->ReportCount = 1
pp_data->cap[2]->BytePosition = 0x0004
pp_data->cap[2]->BitCount = 8
pp_data->cap[2]->BitField = 0x06
pp_data->cap[2]->NextBytePosition = 0x0005
pp_data->cap[2]->LinkCollection = 0x0001
pp_data->cap[2]->LinkUsagePage = 0x0001
pp_data->cap[2]->LinkUsage = 0x0001
pp_data->cap[2]->IsMultipleItemsForArray = 0
pp_data->cap[2]->IsButtonCap = 0
pp_data->cap[2]->IsPadding = 0
pp_data->cap[2]->IsAbsolute = 0
pp_data->cap[2]->IsRange = 0
pp_data->cap[2]->IsAlias = 0
pp_data->cap[2]->IsStringRange = 0
pp_data->cap[2]->IsDesignatorRange = 0
pp_data->cap[2]->Reserved1 = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[2]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[2]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[2]->NotRange.Usage = 0x0038
pp_data->cap[2]->NotRange.Reserved1 = 0x0038
pp_data->cap[2]->NotRange.StringIndex = 0
pp_data->cap[2]->NotRange.Reserved2 = 0
pp_data->cap[2]->NotRange.DesignatorIndex = 0
pp_data->cap[2]->NotRange.Reserved3 = 0
pp_data->cap[2]->NotRange.DataIndex = 6
pp_data->cap[2]->NotRange.Reserved4 = 6
pp_data->cap[2]->NotButton.HasNull = 0
pp_data->cap[2]->NotButton.Reserved4 = 0x000000
pp_data->cap[2]->NotButton.LogicalMin = -127
pp_data->cap[2]->NotButton.LogicalMax = 127
pp_data->cap[2]->NotButton.PhysicalMin = 0
pp_data->cap[2]->NotButton.PhysicalMax = 0
pp_data->cap[2]->Units = 0
pp_data->cap[2]->UnitsExp = 0
pp_data->cap[3]->UsagePage = 0x0001
pp_data->cap[3]->ReportID = 0x00
pp_data->cap[3]->BitPosition = 0
pp_data->cap[3]->BitSize = 16
pp_data->cap[3]->ReportCount = 1
pp_data->cap[3]->BytePosition = 0x0007
pp_data->cap[3]->BitCount = 16
pp_data->cap[3]->BitField = 0x06
pp_data->cap[3]->NextBytePosition = 0x0009
pp_data->cap[3]->LinkCollection = 0x0001
pp_data->cap[3]->LinkUsagePage = 0x0001
pp_data->cap[3]->LinkUsage = 0x0001
pp_data->cap[3]->IsMultipleItemsForArray = 0
pp_data->cap[3]->IsButtonCap = 0
pp_data->cap[3]->IsPadding = 0
pp_data->cap[3]->IsAbsolute = 0
pp_data->cap[3]->IsRange = 0
pp_data->cap[3]->IsAlias = 0
pp_data->cap[3]->IsStringRange = 0
pp_data->cap[3]->IsDesignatorRange = 0
pp_data->cap[3]->Reserved1 = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[3]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[3]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[3]->NotRange.Usage = 0x0031
pp_data->cap[3]->NotRange.Reserved1 = 0x0031
pp_data->cap[3]->NotRange.StringIndex = 0
pp_data->cap[3]->NotRange.Reserved2 = 0
pp_data->cap[3]->NotRange.DesignatorIndex = 0
pp_data->cap[3]->NotRange.Reserved3 = 0
pp_data->cap[3]->NotRange.DataIndex = 7
pp_data->cap[3]->NotRange.Reserved4 = 7
pp_data->cap[3]->NotButton.HasNull = 0
pp_data->cap[3]->NotButton.Reserved4 = 0x000000
pp_data->cap[3]->NotButton.LogicalMin = -32768
pp_data->cap[3]->NotButton.LogicalMax = 32767
pp_data->cap[3]->NotButton.PhysicalMin = 0
pp_data->cap[3]->NotButton.PhysicalMax = 0
pp_data->cap[3]->Units = 0
pp_data->cap[3]->UnitsExp = 0
pp_data->cap[4]->UsagePage = 0x0001
pp_data->cap[4]->ReportID = 0x00
pp_data->cap[4]->BitPosition = 0
pp_data->cap[4]->BitSize = 16
pp_data->cap[4]->ReportCount = 1
pp_data->cap[4]->BytePosition = 0x0005
pp_data->cap[4]->BitCount = 16
pp_data->cap[4]->BitField = 0x06
pp_data->cap[4]->NextBytePosition = 0x0007
pp_data->cap[4]->LinkCollection = 0x0001
pp_data->cap[4]->LinkUsagePage = 0x0001
pp_data->cap[4]->LinkUsage = 0x0001
pp_data->cap[4]->IsMultipleItemsForArray = 0
pp_data->cap[4]->IsButtonCap = 0
pp_data->cap[4]->IsPadding = 0
pp_data->cap[4]->IsAbsolute = 0
pp_data->cap[4]->IsRange = 0
pp_data->cap[4]->IsAlias = 0
pp_data->cap[4]->IsStringRange = 0
pp_data->cap[4]->IsDesignatorRange = 0
pp_data->cap[4]->Reserved1 = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[0].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[0].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[1].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[1].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[2].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[2].BitField = 0x00000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].Token = 0x00
pp_data->cap[4]->pp_cap->UnknownTokens[3].Reserved = 0x000000
pp_data->cap[4]->pp_cap->UnknownTokens[3].BitField = 0x00000000
pp_data->cap[4]->NotRange.Usage = 0x0030
pp_data->cap[4]->NotRange.Reserved1 = 0x0030
pp_data->cap[4]->NotRange.StringIndex = 0
pp_data->cap[4]->NotRange.Reserved2 = 0
pp_data->cap[4]->NotRange.DesignatorIndex = 0
pp_data->cap[4]->NotRange.Reserved3 = 0
pp_data->cap[4]->NotRange.DataIndex = 8
pp_data->cap[4]->NotRange.Reserved4 = 8
pp_data->cap[4]->NotButton.HasNull = 0
pp_data->cap[4]->NotButton.Reserved4 = 0x000000
pp_data->cap[4]->NotButton.LogicalMin = -32768
pp_data->cap[4]->NotButton.LogicalMax = 32767
pp_data->cap[4]->NotButton.PhysicalMin = 0
pp_data->cap[4]->NotButton.PhysicalMax = 0
pp_data->cap[4]->Units = 0
pp_data->cap[4]->UnitsExp = 0
# Output hid_pp_cap struct:
# Feature hid_pp_cap struct:
# Link Collections:
pp_data->LinkCollectionArray[0]->LinkUsage = 0x0002
pp_data->LinkCollectionArray[0]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[0]->Parent = 0
pp_data->LinkCollectionArray[0]->NumberOfChildren = 1
pp_data->LinkCollectionArray[0]->NextSibling = 0
pp_data->LinkCollectionArray[0]->FirstChild = 1
pp_data->LinkCollectionArray[0]->CollectionType = 1
pp_data->LinkCollectionArray[0]->IsAlias = 0
pp_data->LinkCollectionArray[0]->Reserved = 0x00000000
pp_data->LinkCollectionArray[1]->LinkUsage = 0x0001
pp_data->LinkCollectionArray[1]->LinkUsagePage = 0x0001
pp_data->LinkCollectionArray[1]->Parent = 0
pp_data->LinkCollectionArray[1]->NumberOfChildren = 0
pp_data->LinkCollectionArray[1]->NextSibling = 0
pp_data->LinkCollectionArray[1]->FirstChild = 0
pp_data->LinkCollectionArray[1]->CollectionType = 0
pp_data->LinkCollectionArray[1]->IsAlias = 0
pp_data->LinkCollectionArray[1]->Reserved = 0x00000000

View File

@@ -0,0 +1,9 @@
0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00,
0x05, 0x09, 0x19, 0x01, 0x29, 0x05, 0x15, 0x00, 0x25, 0x01,
0x75, 0x01, 0x95, 0x05, 0x81, 0x02, 0x75, 0x03, 0x95, 0x01,
0x81, 0x03, 0x06, 0x00, 0xFF, 0x09, 0x40, 0x15, 0x81, 0x25,
0x7F, 0x75, 0x08, 0x95, 0x02, 0x81, 0x02, 0x05, 0x01, 0x09,
0x38, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x01, 0x81,
0x06, 0x09, 0x30, 0x09, 0x31, 0x16, 0x00, 0x80, 0x26, 0xFF,
0x7F, 0x75, 0x10, 0x95, 0x02, 0x81, 0x06, 0xC0, 0x75, 0x08,
0x95, 0x5A, 0xB1, 0x03, 0xC0,

View File

@@ -0,0 +1,53 @@
HID report descriptor (dumped on Linux with hid-decode)
Source: https://github.com/libusb/hidapi/issues/703
# device 0:0
# 0x05, 0x01, // Usage Page (Generic Desktop) 0
# 0x09, 0x02, // Usage (Mouse) 2
# 0xa1, 0x01, // Collection (Application) 4
# 0x09, 0x01, // Usage (Pointer) 6
# 0xa1, 0x00, // Collection (Physical) 8
# 0x05, 0x09, // Usage Page (Button) 10
# 0x19, 0x01, // Usage Minimum (1) 12
# 0x29, 0x05, // Usage Maximum (5) 14
# 0x15, 0x00, // Logical Minimum (0) 16
# 0x25, 0x01, // Logical Maximum (1) 18
# 0x75, 0x01, // Report Size (1) 20
# 0x95, 0x05, // Report Count (5) 22
# 0x81, 0x02, // Input (Data,Var,Abs) 24
# 0x75, 0x01, // Report Size (1) 26
# 0x95, 0x03, // Report Count (3) 28
# 0x81, 0x03, // Input (Cnst,Var,Abs) 30
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 32
# 0x09, 0x40, // Usage (Vendor Usage 0x40) 35
# 0x75, 0x08, // Report Size (8) 37
# 0x95, 0x02, // Report Count (2) 39
# 0x15, 0x81, // Logical Minimum (-127) 41
# 0x25, 0x7f, // Logical Maximum (127) 43
# 0x81, 0x02, // Input (Data,Var,Abs) 45
# 0x05, 0x01, // Usage Page (Generic Desktop) 47
# 0x09, 0x38, // Usage (Wheel) 49
# 0x15, 0x81, // Logical Minimum (-127) 51
# 0x25, 0x7f, // Logical Maximum (127) 53
# 0x75, 0x08, // Report Size (8) 55
# 0x95, 0x01, // Report Count (1) 57
# 0x81, 0x06, // Input (Data,Var,Rel) 59
# 0x09, 0x30, // Usage (X) 61
# 0x09, 0x31, // Usage (Y) 63
# 0x16, 0x00, 0x80, // Logical Minimum (-32768) 65
# 0x26, 0xff, 0x7f, // Logical Maximum (32767) 68
# 0x75, 0x10, // Report Size (16) 71
# 0x95, 0x02, // Report Count (2) 73
# 0x81, 0x06, // Input (Data,Var,Rel) 75
# 0xc0, // End Collection 77
# 0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1) 78
# 0x09, 0x02, // Usage (Vendor Usage 2) 81
# 0x15, 0x00, // Logical Minimum (0) 83
# 0x25, 0x01, // Logical Maximum (1) 85
# 0x75, 0x08, // Report Size (8) 87
# 0x95, 0x5a, // Report Count (90) 89
# 0xb1, 0x01, // Feature (Cnst,Arr,Abs) 91
# 0xc0, // End Collection 93
#
R: 94 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 05 15 00 25 01 75 01 95 05 81 02 75 01 95 03 81 03 06 00 ff 09 40 75 08 95 02 15 81 25 7f 81 02 05 01 09 38 15 81 25 7f 75 08 95 01 81 06 09 30 09 31 16 00 80 26 ff 7f 75 10 95 02 81 06 c0 06 00 ff 09 02 15 00 25 01 75 08 95 5a b1 01 c0
N: device 0:0

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,75 @@
0x06, 0x01, 0xFF, 0x09, 0x00, 0xA1, 0x01, 0x09, 0x01, 0xA1,
0x02, 0x85, 0x01, 0x09, 0x03, 0x09, 0x03, 0x09, 0x03, 0x09,
0x03, 0x15, 0x00, 0x25, 0x0F, 0x75, 0x04, 0x95, 0x04, 0x81,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09,
0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x02, 0x09, 0x0B, 0x09,
0x0B, 0x09, 0x0B, 0x09, 0x0B, 0x09, 0x0B, 0x09, 0x0B, 0x09,
0x0B, 0x09, 0x0B, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95,
0x38, 0x81, 0x02, 0xC0, 0x09, 0x02, 0xA1, 0x02, 0x85, 0x02,
0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04,
0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04,
0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04,
0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04,
0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04, 0x09, 0x04,
0x09, 0x04, 0x15, 0x00, 0x26, 0xFF, 0x0F, 0x75, 0x10, 0x95,
0x1A, 0x81, 0x02, 0xC0, 0x09, 0x80, 0xA1, 0x02, 0x85, 0x80,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81,
0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x15, 0x00,
0x25, 0x7F, 0x75, 0x08, 0x95, 0x5E, 0x91, 0x02, 0xC0, 0x09,
0x80, 0xA1, 0x02, 0x85, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09, 0x81, 0x09,
0x81, 0x09, 0x81, 0x09, 0x81, 0x15, 0x00, 0x25, 0x7F, 0x75,
0x08, 0x95, 0x28, 0x91, 0x02, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD0, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD1, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD2, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD3, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD4, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD5, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD6, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD8, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xD9, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x20, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xF1, 0x09, 0xD1, 0x15, 0x00, 0x26, 0xFF, 0x00, 0x75,
0x08, 0x95, 0x02, 0xB1, 0x82, 0xC0, 0x09, 0xD0, 0xA1, 0x02,
0x85, 0xF3, 0x09, 0xD1, 0x15, 0x00, 0x25, 0x7F, 0x75, 0x08,
0x95, 0x02, 0xB1, 0x82, 0xC0, 0xC0,

View File

@@ -0,0 +1,381 @@
Usage Page (Vendor-Defined 2) 06 01 FF
Usage (Undefined) 09 00
Collection (Application) A1 01
Usage (Vendor-Defined 1) 09 01
Collection (Logical) A1 02
Report ID (1) 85 01
Usage (Vendor-Defined 3) 09 03
Usage (Vendor-Defined 3) 09 03
Usage (Vendor-Defined 3) 09 03
Usage (Vendor-Defined 3) 09 03
Logical Minimum (0) 15 00
Logical Maximum (15) 25 0F
Report Size (4) 75 04
Report Count (4) 95 04
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Usage (Vendor-Defined 2) 09 02
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Size (1) 75 01
Report Count (48) 95 30
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Usage (Vendor-Defined 11) 09 0B
Logical Minimum (0) 15 00
Logical Maximum (1) 25 01
Report Size (1) 75 01
Report Count (8) 95 08
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
End Collection C0
Usage (Vendor-Defined 2) 09 02
Collection (Logical) A1 02
Report ID (2) 85 02
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Usage (Vendor-Defined 4) 09 04
Logical Minimum (0) 15 00
Logical Maximum (4095) 26 FF 0F
Report Size (16) 75 10
Report Count (26) 95 1A
Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
End Collection C0
Usage (Vendor-Defined 128) 09 80
Collection (Logical) A1 02
Report ID (128) 85 80
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Logical Minimum (0) 15 00
Logical Maximum (127) 25 7F
Report Count (94) 95 5E
Report Size (8) 75 08
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
End Collection C0
Usage (Vendor-Defined 128) 09 80
Collection (Logical) A1 02
Report ID (129) 85 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Usage (Vendor-Defined 129) 09 81
Logical Minimum (0) 15 00
Logical Maximum (127) 25 7F
Report Count (40) 95 28
Report Size (8) 75 08
Output (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) 91 02
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (208) 85 D0
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (209) 85 D1
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (210) 85 D2
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (211) 85 D3
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (212) 85 D4
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (213) 85 D5
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (214) 85 D6
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (216) 85 D8
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (217) 85 D9
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (32) 95 20
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (241) 85 F1
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (255) 26 FF 00
Report Size (8) 75 08
Report Count (2) 95 02
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
Usage (Vendor-Defined 208) 09 D0
Collection (Logical) A1 02
Report ID (243) 85 F3
Usage (Vendor-Defined 209) 09 D1
Logical Minimum (0) 15 00
Logical Maximum (127) 25 7F
Report Size (8) 75 08
Report Count (2) 95 02
Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,Vol,Bit) B1 82
End Collection C0
End Collection C0