machine/usb: refactor endpoint configuration
Этот коммит содержится в:
родитель
069e4f0d98
коммит
395ee2d338
5 изменённых файлов: 20 добавлений и 20 удалений
|
@ -266,18 +266,18 @@ func EnableCDC(txHandler func(), rxHandler func([]byte), setupHandler func(usb.S
|
||||||
ConfigureUSBEndpoint(usbDescriptor,
|
ConfigureUSBEndpoint(usbDescriptor,
|
||||||
[]usb.EndpointConfig{
|
[]usb.EndpointConfig{
|
||||||
{
|
{
|
||||||
No: usb.CDC_ENDPOINT_ACM,
|
Index: usb.CDC_ENDPOINT_ACM,
|
||||||
IsIn: true,
|
IsIn: true,
|
||||||
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
No: usb.CDC_ENDPOINT_OUT,
|
Index: usb.CDC_ENDPOINT_OUT,
|
||||||
IsIn: false,
|
IsIn: false,
|
||||||
Type: usb.ENDPOINT_TYPE_BULK,
|
Type: usb.ENDPOINT_TYPE_BULK,
|
||||||
RxHandler: rxHandler,
|
RxHandler: rxHandler,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
No: usb.CDC_ENDPOINT_IN,
|
Index: usb.CDC_ENDPOINT_IN,
|
||||||
IsIn: true,
|
IsIn: true,
|
||||||
Type: usb.ENDPOINT_TYPE_BULK,
|
Type: usb.ENDPOINT_TYPE_BULK,
|
||||||
TxHandler: txHandler,
|
TxHandler: txHandler,
|
||||||
|
@ -285,7 +285,7 @@ func EnableCDC(txHandler func(), rxHandler func([]byte), setupHandler func(usb.S
|
||||||
},
|
},
|
||||||
[]usb.SetupConfig{
|
[]usb.SetupConfig{
|
||||||
{
|
{
|
||||||
No: usb.CDC_ACM_INTERFACE,
|
Index: usb.CDC_ACM_INTERFACE,
|
||||||
Handler: setupHandler,
|
Handler: setupHandler,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -296,19 +296,19 @@ func ConfigureUSBEndpoint(desc descriptor.Descriptor, epSettings []usb.EndpointC
|
||||||
|
|
||||||
for _, ep := range epSettings {
|
for _, ep := range epSettings {
|
||||||
if ep.IsIn {
|
if ep.IsIn {
|
||||||
endPoints[ep.No] = uint32(ep.Type | usb.EndpointIn)
|
endPoints[ep.Index] = uint32(ep.Type | usb.EndpointIn)
|
||||||
if ep.TxHandler != nil {
|
if ep.TxHandler != nil {
|
||||||
usbTxHandler[ep.No] = ep.TxHandler
|
usbTxHandler[ep.Index] = ep.TxHandler
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
endPoints[ep.No] = uint32(ep.Type | usb.EndpointOut)
|
endPoints[ep.Index] = uint32(ep.Type | usb.EndpointOut)
|
||||||
if ep.RxHandler != nil {
|
if ep.RxHandler != nil {
|
||||||
usbRxHandler[ep.No] = ep.RxHandler
|
usbRxHandler[ep.Index] = ep.RxHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, s := range setup {
|
for _, s := range setup {
|
||||||
usbSetupHandler[s.No] = s.Handler
|
usbSetupHandler[s.Index] = s.Handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,13 +44,13 @@ func newMidi() *midi {
|
||||||
machine.ConfigureUSBEndpoint(descriptor.CDCMIDI,
|
machine.ConfigureUSBEndpoint(descriptor.CDCMIDI,
|
||||||
[]usb.EndpointConfig{
|
[]usb.EndpointConfig{
|
||||||
{
|
{
|
||||||
No: usb.MIDI_ENDPOINT_OUT,
|
Index: usb.MIDI_ENDPOINT_OUT,
|
||||||
IsIn: false,
|
IsIn: false,
|
||||||
Type: usb.ENDPOINT_TYPE_BULK,
|
Type: usb.ENDPOINT_TYPE_BULK,
|
||||||
RxHandler: m.RxHandler,
|
RxHandler: m.RxHandler,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
No: usb.MIDI_ENDPOINT_IN,
|
Index: usb.MIDI_ENDPOINT_IN,
|
||||||
IsIn: true,
|
IsIn: true,
|
||||||
Type: usb.ENDPOINT_TYPE_BULK,
|
Type: usb.ENDPOINT_TYPE_BULK,
|
||||||
TxHandler: m.Handler,
|
TxHandler: m.Handler,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package usb
|
package usb
|
||||||
|
|
||||||
type EndpointConfig struct {
|
type EndpointConfig struct {
|
||||||
No uint8
|
Index uint8
|
||||||
IsIn bool
|
IsIn bool
|
||||||
TxHandler func()
|
TxHandler func()
|
||||||
RxHandler func([]byte)
|
RxHandler func([]byte)
|
||||||
|
@ -9,6 +9,6 @@ type EndpointConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SetupConfig struct {
|
type SetupConfig struct {
|
||||||
No uint8
|
Index uint8
|
||||||
Handler func(Setup) bool
|
Handler func(Setup) bool
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ func SetHandler(d hidDevicer) {
|
||||||
machine.ConfigureUSBEndpoint(descriptor.CDCHID,
|
machine.ConfigureUSBEndpoint(descriptor.CDCHID,
|
||||||
[]usb.EndpointConfig{
|
[]usb.EndpointConfig{
|
||||||
{
|
{
|
||||||
No: usb.HID_ENDPOINT_IN,
|
Index: usb.HID_ENDPOINT_IN,
|
||||||
IsIn: true,
|
IsIn: true,
|
||||||
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
||||||
TxHandler: handler,
|
TxHandler: handler,
|
||||||
|
@ -44,7 +44,7 @@ func SetHandler(d hidDevicer) {
|
||||||
},
|
},
|
||||||
[]usb.SetupConfig{
|
[]usb.SetupConfig{
|
||||||
{
|
{
|
||||||
No: usb.HID_INTERFACE,
|
Index: usb.HID_INTERFACE,
|
||||||
Handler: setupHandler,
|
Handler: setupHandler,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -51,13 +51,13 @@ func UseSettings(def Definitions, rxHandlerFunc func(b []byte), setupFunc func(s
|
||||||
machine.ConfigureUSBEndpoint(descriptor.CDCJoystick,
|
machine.ConfigureUSBEndpoint(descriptor.CDCJoystick,
|
||||||
[]usb.EndpointConfig{
|
[]usb.EndpointConfig{
|
||||||
{
|
{
|
||||||
No: usb.HID_ENDPOINT_OUT,
|
Index: usb.HID_ENDPOINT_OUT,
|
||||||
IsIn: false,
|
IsIn: false,
|
||||||
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
||||||
RxHandler: rxHandlerFunc,
|
RxHandler: rxHandlerFunc,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
No: usb.HID_ENDPOINT_IN,
|
Index: usb.HID_ENDPOINT_IN,
|
||||||
IsIn: true,
|
IsIn: true,
|
||||||
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
Type: usb.ENDPOINT_TYPE_INTERRUPT,
|
||||||
TxHandler: js.handler,
|
TxHandler: js.handler,
|
||||||
|
@ -65,7 +65,7 @@ func UseSettings(def Definitions, rxHandlerFunc func(b []byte), setupFunc func(s
|
||||||
},
|
},
|
||||||
[]usb.SetupConfig{
|
[]usb.SetupConfig{
|
||||||
{
|
{
|
||||||
No: usb.HID_INTERFACE,
|
Index: usb.HID_INTERFACE,
|
||||||
Handler: setupFunc,
|
Handler: setupFunc,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче