Add support for HID Keyboard LEDs
Этот коммит содержится в:
родитель
72270f9052
коммит
0ef86e1534
4 изменённых файлов: 40 добавлений и 2 удалений
|
@ -26,7 +26,7 @@ var interfaceHID = [interfaceTypeLen]byte{
|
|||
TypeInterface,
|
||||
0x02, // InterfaceNumber
|
||||
0x00, // AlternateSetting
|
||||
0x01, // NumEndpoints
|
||||
0x02, // NumEndpoints
|
||||
0x03, // InterfaceClass
|
||||
0x00, // InterfaceSubClass
|
||||
0x00, // InterfaceProtocol
|
||||
|
@ -103,7 +103,7 @@ var classHID = [ClassHIDTypeLen]byte{
|
|||
0x00, // CountryCode
|
||||
0x01, // NumDescriptors
|
||||
0x22, // ClassType
|
||||
0x7E, // ClassLength L
|
||||
0x90, // ClassLength L
|
||||
0x00, // ClassLength H
|
||||
}
|
||||
|
||||
|
@ -128,6 +128,7 @@ var CDCHID = Descriptor{
|
|||
InterfaceHID.Bytes(),
|
||||
ClassHID.Bytes(),
|
||||
EndpointEP4IN.Bytes(),
|
||||
EndpointEP5OUT.Bytes(),
|
||||
}),
|
||||
HID: map[uint16][]byte{
|
||||
2: Append([][]byte{
|
||||
|
@ -147,6 +148,15 @@ var CDCHID = Descriptor{
|
|||
HIDReportCount(1),
|
||||
HIDReportSize(8),
|
||||
HIDInputConstVarAbs,
|
||||
HIDReportCount(3),
|
||||
HIDReportSize(1),
|
||||
HIDUsagePageLED,
|
||||
HIDUsageMinimum(1),
|
||||
HIDUsageMaximum(3),
|
||||
HIDOutputDataVarAbs,
|
||||
HIDReportCount(5),
|
||||
HIDReportSize(1),
|
||||
HIDOutputConstVarAbs,
|
||||
HIDReportCount(6),
|
||||
HIDReportSize(8),
|
||||
HIDLogicalMinimum(0),
|
||||
|
|
|
@ -13,6 +13,7 @@ const (
|
|||
hidUnit = 0x65
|
||||
hidCollection = 0xa1
|
||||
hidInput = 0x81
|
||||
hidOutput = 0x91
|
||||
hidReportSize = 0x75
|
||||
hidReportCount = 0x95
|
||||
hidReportID = 0x85
|
||||
|
@ -121,6 +122,12 @@ var (
|
|||
|
||||
// Input (Data, Variable, Relative), 2 position bytes (X & Y)
|
||||
HIDInputDataVarRel = []byte{hidInput, 0x06}
|
||||
|
||||
// Output (Data, Variable, Absolute), Modifier byte
|
||||
HIDOutputDataVarAbs = []byte{hidOutput, 0x02}
|
||||
|
||||
// Output (Const, Variable, Absolute), Modifier byte
|
||||
HIDOutputConstVarAbs = []byte{hidOutput, 0x03}
|
||||
)
|
||||
|
||||
func HIDReportSize(size int) []byte {
|
||||
|
|
|
@ -36,6 +36,12 @@ func SetHandler(d hidDevicer) {
|
|||
if size == 0 {
|
||||
machine.ConfigureUSBEndpoint(descriptor.CDCHID,
|
||||
[]usb.EndpointConfig{
|
||||
{
|
||||
Index: usb.HID_ENDPOINT_OUT,
|
||||
IsIn: false,
|
||||
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
||||
RxHandler: rxHandler,
|
||||
},
|
||||
{
|
||||
Index: usb.HID_ENDPOINT_IN,
|
||||
IsIn: true,
|
||||
|
|
|
@ -92,6 +92,9 @@ func (kb *keyboard) TxHandler() bool {
|
|||
}
|
||||
|
||||
func (kb *keyboard) RxHandler(b []byte) bool {
|
||||
if len(b) >= 2 && b[0] == 2 /* ReportID */ {
|
||||
kb.led = b[1]
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -106,6 +109,18 @@ func (kb *keyboard) tx(b []byte) {
|
|||
}
|
||||
}
|
||||
|
||||
func (kb *keyboard) NumLockLed() bool {
|
||||
return kb.led&1 != 0
|
||||
}
|
||||
|
||||
func (kb *keyboard) CapsLockLed() bool {
|
||||
return kb.led&2 != 0
|
||||
}
|
||||
|
||||
func (kb *keyboard) ScrollLockLed() bool {
|
||||
return kb.led&4 != 0
|
||||
}
|
||||
|
||||
func (kb *keyboard) ready() bool {
|
||||
return true
|
||||
}
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче