Skip to content

Commit 9a2fab8

Browse files
Unruddeadprogram
authored andcommitted
machine/usb/descriptor: Add more HID... functions
1 parent f1516ad commit 9a2fab8

File tree

1 file changed

+115
-94
lines changed

1 file changed

+115
-94
lines changed

src/machine/usb/descriptor/hidreport.go

Lines changed: 115 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ package descriptor
33
import "math"
44

55
const (
6-
hidUsagePage = 0x05
7-
hidUsage = 0x09
6+
hidUsagePage = 0x04
7+
hidUsage = 0x08
88
hidLogicalMinimum = 0x14
99
hidLogicalMaximum = 0x24
1010
hidUsageMinimum = 0x18
1111
hidUsageMaximum = 0x28
1212
hidPhysicalMinimum = 0x34
1313
hidPhysicalMaximum = 0x44
14-
hidUnitExponent = 0x55
15-
hidUnit = 0x65
16-
hidCollection = 0xa1
17-
hidInput = 0x81
18-
hidOutput = 0x91
19-
hidReportSize = 0x75
20-
hidReportCount = 0x95
21-
hidReportID = 0x85
14+
hidUnitExponent = 0x54
15+
hidUnit = 0x64
16+
hidCollection = 0xA0
17+
hidInput = 0x80
18+
hidOutput = 0x90
19+
hidReportSize = 0x74
20+
hidReportCount = 0x94
21+
hidReportID = 0x84
2222
)
2323

2424
const (
@@ -29,107 +29,107 @@ const (
2929
)
3030

3131
var (
32-
HIDUsagePageGenericDesktop = []byte{hidUsagePage, 0x01}
33-
HIDUsagePageSimulationControls = []byte{hidUsagePage, 0x02}
34-
HIDUsagePageVRControls = []byte{hidUsagePage, 0x03}
35-
HIDUsagePageSportControls = []byte{hidUsagePage, 0x04}
36-
HIDUsagePageGameControls = []byte{hidUsagePage, 0x05}
37-
HIDUsagePageGenericControls = []byte{hidUsagePage, 0x06}
38-
HIDUsagePageKeyboard = []byte{hidUsagePage, 0x07}
39-
HIDUsagePageLED = []byte{hidUsagePage, 0x08}
40-
HIDUsagePageButton = []byte{hidUsagePage, 0x09}
41-
HIDUsagePageOrdinal = []byte{hidUsagePage, 0x0A}
42-
HIDUsagePageTelephony = []byte{hidUsagePage, 0x0B}
43-
HIDUsagePageConsumer = []byte{hidUsagePage, 0x0C}
44-
HIDUsagePageDigitizers = []byte{hidUsagePage, 0x0D}
45-
HIDUsagePageHaptics = []byte{hidUsagePage, 0x0E}
46-
HIDUsagePagePhysicalInput = []byte{hidUsagePage, 0x0F}
47-
HIDUsagePageUnicode = []byte{hidUsagePage, 0x10}
48-
HIDUsagePageSoC = []byte{hidUsagePage, 0x11}
49-
HIDUsagePageEyeHeadTrackers = []byte{hidUsagePage, 0x12}
50-
HIDUsagePageAuxDisplay = []byte{hidUsagePage, 0x14}
51-
HIDUsagePageSensors = []byte{hidUsagePage, 0x20}
52-
HIDUsagePageMedicalInstrument = []byte{hidUsagePage, 0x40}
53-
HIDUsagePageBrailleDisplay = []byte{hidUsagePage, 0x41}
54-
HIDUsagePageLighting = []byte{hidUsagePage, 0x59}
55-
HIDUsagePageMonitor = []byte{hidUsagePage, 0x80}
56-
HIDUsagePageMonitorEnum = []byte{hidUsagePage, 0x81}
57-
HIDUsagePageVESA = []byte{hidUsagePage, 0x82}
58-
HIDUsagePagePower = []byte{hidUsagePage, 0x84}
59-
HIDUsagePageBatterySystem = []byte{hidUsagePage, 0x85}
60-
HIDUsagePageBarcodeScanner = []byte{hidUsagePage, 0x8C}
61-
HIDUsagePageScales = []byte{hidUsagePage, 0x8D}
62-
HIDUsagePageMagneticStripe = []byte{hidUsagePage, 0x8E}
63-
HIDUsagePageCameraControl = []byte{hidUsagePage, 0x90}
64-
HIDUsagePageArcade = []byte{hidUsagePage, 0x91}
65-
HIDUsagePageGaming = []byte{hidUsagePage, 0x92}
32+
HIDUsagePageGenericDesktop = HIDUsagePage(0x01)
33+
HIDUsagePageSimulationControls = HIDUsagePage(0x02)
34+
HIDUsagePageVRControls = HIDUsagePage(0x03)
35+
HIDUsagePageSportControls = HIDUsagePage(0x04)
36+
HIDUsagePageGameControls = HIDUsagePage(0x05)
37+
HIDUsagePageGenericControls = HIDUsagePage(0x06)
38+
HIDUsagePageKeyboard = HIDUsagePage(0x07)
39+
HIDUsagePageLED = HIDUsagePage(0x08)
40+
HIDUsagePageButton = HIDUsagePage(0x09)
41+
HIDUsagePageOrdinal = HIDUsagePage(0x0A)
42+
HIDUsagePageTelephony = HIDUsagePage(0x0B)
43+
HIDUsagePageConsumer = HIDUsagePage(0x0C)
44+
HIDUsagePageDigitizers = HIDUsagePage(0x0D)
45+
HIDUsagePageHaptics = HIDUsagePage(0x0E)
46+
HIDUsagePagePhysicalInput = HIDUsagePage(0x0F)
47+
HIDUsagePageUnicode = HIDUsagePage(0x10)
48+
HIDUsagePageSoC = HIDUsagePage(0x11)
49+
HIDUsagePageEyeHeadTrackers = HIDUsagePage(0x12)
50+
HIDUsagePageAuxDisplay = HIDUsagePage(0x14)
51+
HIDUsagePageSensors = HIDUsagePage(0x20)
52+
HIDUsagePageMedicalInstrument = HIDUsagePage(0x40)
53+
HIDUsagePageBrailleDisplay = HIDUsagePage(0x41)
54+
HIDUsagePageLighting = HIDUsagePage(0x59)
55+
HIDUsagePageMonitor = HIDUsagePage(0x80)
56+
HIDUsagePageMonitorEnum = HIDUsagePage(0x81)
57+
HIDUsagePageVESA = HIDUsagePage(0x82)
58+
HIDUsagePagePower = HIDUsagePage(0x84)
59+
HIDUsagePageBatterySystem = HIDUsagePage(0x85)
60+
HIDUsagePageBarcodeScanner = HIDUsagePage(0x8C)
61+
HIDUsagePageScales = HIDUsagePage(0x8D)
62+
HIDUsagePageMagneticStripe = HIDUsagePage(0x8E)
63+
HIDUsagePageCameraControl = HIDUsagePage(0x90)
64+
HIDUsagePageArcade = HIDUsagePage(0x91)
65+
HIDUsagePageGaming = HIDUsagePage(0x92)
6666
)
6767

6868
var (
69-
HIDUsageDesktopPointer = []byte{hidUsage, 0x01}
70-
HIDUsageDesktopMouse = []byte{hidUsage, 0x02}
71-
HIDUsageDesktopJoystick = []byte{hidUsage, 0x04}
72-
HIDUsageDesktopGamepad = []byte{hidUsage, 0x05}
73-
HIDUsageDesktopKeyboard = []byte{hidUsage, 0x06}
74-
HIDUsageDesktopKeypad = []byte{hidUsage, 0x07}
75-
HIDUsageDesktopMultiaxis = []byte{hidUsage, 0x08}
76-
HIDUsageDesktopTablet = []byte{hidUsage, 0x09}
77-
HIDUsageDesktopWaterCooling = []byte{hidUsage, 0x0A}
78-
HIDUsageDesktopChassis = []byte{hidUsage, 0x0B}
79-
HIDUsageDesktopWireless = []byte{hidUsage, 0x0C}
80-
HIDUsageDesktopPortable = []byte{hidUsage, 0x0D}
81-
HIDUsageDesktopSystemMultiaxis = []byte{hidUsage, 0x0E}
82-
HIDUsageDesktopSpatial = []byte{hidUsage, 0x0F}
83-
HIDUsageDesktopAssistive = []byte{hidUsage, 0x10}
84-
HIDUsageDesktopDock = []byte{hidUsage, 0x11}
85-
HIDUsageDesktopDockable = []byte{hidUsage, 0x12}
86-
HIDUsageDesktopCallState = []byte{hidUsage, 0x13}
87-
HIDUsageDesktopX = []byte{hidUsage, 0x30}
88-
HIDUsageDesktopY = []byte{hidUsage, 0x31}
89-
HIDUsageDesktopZ = []byte{hidUsage, 0x32}
90-
HIDUsageDesktopRx = []byte{hidUsage, 0x33}
91-
HIDUsageDesktopRy = []byte{hidUsage, 0x34}
92-
HIDUsageDesktopRz = []byte{hidUsage, 0x35}
93-
HIDUsageDesktopSlider = []byte{hidUsage, 0x36}
94-
HIDUsageDesktopDial = []byte{hidUsage, 0x37}
95-
HIDUsageDesktopWheel = []byte{hidUsage, 0x38}
96-
HIDUsageDesktopHatSwitch = []byte{hidUsage, 0x39}
97-
HIDUsageDesktopCountedBuffer = []byte{hidUsage, 0x3A}
69+
HIDUsageDesktopPointer = HIDUsage(0x01)
70+
HIDUsageDesktopMouse = HIDUsage(0x02)
71+
HIDUsageDesktopJoystick = HIDUsage(0x04)
72+
HIDUsageDesktopGamepad = HIDUsage(0x05)
73+
HIDUsageDesktopKeyboard = HIDUsage(0x06)
74+
HIDUsageDesktopKeypad = HIDUsage(0x07)
75+
HIDUsageDesktopMultiaxis = HIDUsage(0x08)
76+
HIDUsageDesktopTablet = HIDUsage(0x09)
77+
HIDUsageDesktopWaterCooling = HIDUsage(0x0A)
78+
HIDUsageDesktopChassis = HIDUsage(0x0B)
79+
HIDUsageDesktopWireless = HIDUsage(0x0C)
80+
HIDUsageDesktopPortable = HIDUsage(0x0D)
81+
HIDUsageDesktopSystemMultiaxis = HIDUsage(0x0E)
82+
HIDUsageDesktopSpatial = HIDUsage(0x0F)
83+
HIDUsageDesktopAssistive = HIDUsage(0x10)
84+
HIDUsageDesktopDock = HIDUsage(0x11)
85+
HIDUsageDesktopDockable = HIDUsage(0x12)
86+
HIDUsageDesktopCallState = HIDUsage(0x13)
87+
HIDUsageDesktopX = HIDUsage(0x30)
88+
HIDUsageDesktopY = HIDUsage(0x31)
89+
HIDUsageDesktopZ = HIDUsage(0x32)
90+
HIDUsageDesktopRx = HIDUsage(0x33)
91+
HIDUsageDesktopRy = HIDUsage(0x34)
92+
HIDUsageDesktopRz = HIDUsage(0x35)
93+
HIDUsageDesktopSlider = HIDUsage(0x36)
94+
HIDUsageDesktopDial = HIDUsage(0x37)
95+
HIDUsageDesktopWheel = HIDUsage(0x38)
96+
HIDUsageDesktopHatSwitch = HIDUsage(0x39)
97+
HIDUsageDesktopCountedBuffer = HIDUsage(0x3A)
9898
)
9999

100100
var (
101-
HIDUsageConsumerControl = []byte{hidUsage, 0x01}
102-
HIDUsageConsumerNumericKeypad = []byte{hidUsage, 0x02}
103-
HIDUsageConsumerProgrammableButtons = []byte{hidUsage, 0x03}
104-
HIDUsageConsumerMicrophone = []byte{hidUsage, 0x04}
105-
HIDUsageConsumerHeadphone = []byte{hidUsage, 0x05}
106-
HIDUsageConsumerGraphicEqualizer = []byte{hidUsage, 0x06}
101+
HIDUsageConsumerControl = HIDUsage(0x01)
102+
HIDUsageConsumerNumericKeypad = HIDUsage(0x02)
103+
HIDUsageConsumerProgrammableButtons = HIDUsage(0x03)
104+
HIDUsageConsumerMicrophone = HIDUsage(0x04)
105+
HIDUsageConsumerHeadphone = HIDUsage(0x05)
106+
HIDUsageConsumerGraphicEqualizer = HIDUsage(0x06)
107107
)
108108

109109
var (
110-
HIDCollectionPhysical = []byte{hidCollection, 0x00}
111-
HIDCollectionApplication = []byte{hidCollection, 0x01}
112-
HIDCollectionEnd = []byte{0xc0}
110+
HIDCollectionPhysical = HIDCollection(0x00)
111+
HIDCollectionApplication = HIDCollection(0x01)
112+
HIDCollectionEnd = []byte{0xC0}
113113
)
114114

115115
var (
116116
// Input (Data,Ary,Abs), Key arrays (6 bytes)
117-
HIDInputDataAryAbs = []byte{hidInput, 0x00}
117+
HIDInputDataAryAbs = HIDInput(0x00)
118118

119119
// Input (Data, Variable, Absolute), Modifier byte
120-
HIDInputDataVarAbs = []byte{hidInput, 0x02}
120+
HIDInputDataVarAbs = HIDInput(0x02)
121121

122122
// Input (Const,Var,Abs), Modifier byte
123-
HIDInputConstVarAbs = []byte{hidInput, 0x03}
123+
HIDInputConstVarAbs = HIDInput(0x03)
124124

125125
// Input (Data, Variable, Relative), 2 position bytes (X & Y)
126-
HIDInputDataVarRel = []byte{hidInput, 0x06}
126+
HIDInputDataVarRel = HIDInput(0x06)
127127

128128
// Output (Data, Variable, Absolute), Modifier byte
129-
HIDOutputDataVarAbs = []byte{hidOutput, 0x02}
129+
HIDOutputDataVarAbs = HIDOutput(0x02)
130130

131131
// Output (Const, Variable, Absolute), Modifier byte
132-
HIDOutputConstVarAbs = []byte{hidOutput, 0x03}
132+
HIDOutputConstVarAbs = HIDOutput(0x03)
133133
)
134134

135135
func hidShortItem(tag byte, value uint32) []byte {
@@ -155,15 +155,15 @@ func hidShortItemSigned(tag byte, value int32) []byte {
155155
}
156156

157157
func HIDReportSize(size int) []byte {
158-
return []byte{hidReportSize, byte(size)}
158+
return hidShortItem(hidReportSize, uint32(size))
159159
}
160160

161161
func HIDReportCount(count int) []byte {
162-
return []byte{hidReportCount, byte(count)}
162+
return hidShortItem(hidReportCount, uint32(count))
163163
}
164164

165165
func HIDReportID(id int) []byte {
166-
return []byte{hidReportID, byte(id)}
166+
return hidShortItem(hidReportID, uint32(id))
167167
}
168168

169169
func HIDLogicalMinimum(min int) []byte {
@@ -191,9 +191,30 @@ func HIDPhysicalMaximum(max int) []byte {
191191
}
192192

193193
func HIDUnitExponent(exp int) []byte {
194-
return []byte{hidUnitExponent, byte(exp)}
194+
// 4 Bit two's complement
195+
return hidShortItem(hidUnitExponent, uint32(exp&0xF))
195196
}
196197

197-
func HIDUnit(unit int) []byte {
198-
return []byte{hidUnit, byte(unit)}
198+
func HIDUnit(unit uint32) []byte {
199+
return hidShortItem(hidUnit, unit)
200+
}
201+
202+
func HIDUsagePage(id uint16) []byte {
203+
return hidShortItem(hidUsagePage, uint32(id))
204+
}
205+
206+
func HIDUsage(id uint32) []byte {
207+
return hidShortItem(hidUsage, id)
208+
}
209+
210+
func HIDCollection(id uint32) []byte {
211+
return hidShortItem(hidCollection, id)
212+
}
213+
214+
func HIDInput(flags uint32) []byte {
215+
return hidShortItem(hidInput, flags)
216+
}
217+
218+
func HIDOutput(flags uint32) []byte {
219+
return hidShortItem(hidOutput, flags)
199220
}

0 commit comments

Comments
 (0)