Update vusb to match 3rd endpoint. (#9020)
* Update vusb to match 3rd endpoint. - With the addition of https://github.com/qmk/v-usb/pull/1 a 3rd endpoint (endpoint4) becomes available. - We can assign mouse/extrakeys to that endpoint as its a desirable feature and leave rawhid and console to compete for the 2nd endpoint. NOTE: The version of vusb.c in future branch is older than master. Just remember that it will need a #error if both raw_hid and console are enabled at the same time. * Final Fixes * Update tmk_core/protocol/vusb/vusb.c * Update tmk_core/protocol/vusb/vusb.c * Update tmk_core/protocol/vusb/usbconfig.h * Update tmk_core/protocol/vusb/usbconfig.h * Update tmk_core/protocol/vusb/usbconfig.h * Update tmk_core/protocol/vusb/usbconfig.h * Updated vusb submodule to latest commit
This commit is contained in:
parent
9ef4526a2f
commit
47f8947bf5
3 changed files with 27 additions and 13 deletions
2
lib/vusb
2
lib/vusb
|
@ -1 +1 @@
|
||||||
Subproject commit 9a42d205eb60faca494ff4eabce8d59f0ec0fc7f
|
Subproject commit bdb53e4c043d089279d9891b68bea77614cb97ee
|
|
@ -85,9 +85,19 @@ section at the end of this file).
|
||||||
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
||||||
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
||||||
*/
|
*/
|
||||||
|
#define USB_CFG_HAVE_INTRIN_ENDPOINT4 1
|
||||||
|
/* Define this to 1 if you want to compile a version with three endpoints: The
|
||||||
|
* default control endpoint 0, an interrupt-in endpoint 4 (or the number
|
||||||
|
* configured below) and a catch-all default interrupt-in endpoint as above.
|
||||||
|
* You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_EP4_NUMBER 4
|
||||||
|
/* If the so-called endpoint 4 is used, it can now be configured to any other
|
||||||
|
* endpoint number (except 0) with this macro. Default if undefined is 4.
|
||||||
|
*/
|
||||||
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
||||||
/* The above macro defines the startup condition for data toggling on the
|
/* The above macro defines the startup condition for data toggling on the
|
||||||
* interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
|
* interrupt/bulk endpoints 1, 3 and 4. Defaults to USBPID_DATA1.
|
||||||
* Since the token is toggled BEFORE sending any data, the first packet is
|
* Since the token is toggled BEFORE sending any data, the first packet is
|
||||||
* sent with the oposite value of this configuration!
|
* sent with the oposite value of this configuration!
|
||||||
*/
|
*/
|
||||||
|
@ -100,10 +110,10 @@ section at the end of this file).
|
||||||
#define USB_CFG_SUPPRESS_INTR_CODE 0
|
#define USB_CFG_SUPPRESS_INTR_CODE 0
|
||||||
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
|
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
|
||||||
* want to send any data over them. If this macro is defined to 1, functions
|
* want to send any data over them. If this macro is defined to 1, functions
|
||||||
* usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
|
* usbSetInterrupt(), usbSetInterrupt3() and usbSetInterrupt4() are omitted.
|
||||||
* you need the interrupt-in endpoints in order to comply to an interface
|
* This is useful if you need the interrupt-in endpoints in order to comply
|
||||||
* (e.g. HID), but never want to send any data. This option saves a couple
|
* to an interface (e.g. HID), but never want to send any data. This option
|
||||||
* of bytes in flash memory and the transmit buffers in RAM.
|
* saves a couple of bytes in flash memory and the transmit buffers in RAM.
|
||||||
*/
|
*/
|
||||||
#define USB_CFG_IS_SELF_POWERED 0
|
#define USB_CFG_IS_SELF_POWERED 0
|
||||||
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||||
|
|
|
@ -62,12 +62,16 @@ enum usb_interfaces {
|
||||||
TOTAL_INTERFACES = NEXT_INTERFACE
|
TOTAL_INTERFACES = NEXT_INTERFACE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_INTERFACES 2
|
#define MAX_INTERFACES 3
|
||||||
|
|
||||||
#if (NEXT_INTERFACE - 1) > MAX_INTERFACES
|
#if (NEXT_INTERFACE - 1) > MAX_INTERFACES
|
||||||
# error There are not enough available interfaces to support all functions. Please disable one or more of the following: Mouse Keys, Extra Keys, Raw HID, Console
|
# error There are not enough available interfaces to support all functions. Please disable one or more of the following: Mouse Keys, Extra Keys, Raw HID, Console
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)) && CONSOLE_ENABLE
|
||||||
|
# error Mouse/Extra Keys share an endpoint with Console. Please disable one of the two.
|
||||||
|
#endif
|
||||||
|
|
||||||
static uint8_t keyboard_led_state = 0;
|
static uint8_t keyboard_led_state = 0;
|
||||||
static uint8_t vusb_idle_rate = 0;
|
static uint8_t vusb_idle_rate = 0;
|
||||||
|
|
||||||
|
@ -116,16 +120,16 @@ void raw_hid_send(uint8_t *data, uint8_t length) {
|
||||||
|
|
||||||
uint8_t *temp = data;
|
uint8_t *temp = data;
|
||||||
for (uint8_t i = 0; i < 4; i++) {
|
for (uint8_t i = 0; i < 4; i++) {
|
||||||
while (!usbInterruptIsReady3()) {
|
while (!usbInterruptIsReady4()) {
|
||||||
usbPoll();
|
usbPoll();
|
||||||
}
|
}
|
||||||
usbSetInterrupt3(temp, 8);
|
usbSetInterrupt4(temp, 8);
|
||||||
temp += 8;
|
temp += 8;
|
||||||
}
|
}
|
||||||
while (!usbInterruptIsReady3()) {
|
while (!usbInterruptIsReady4()) {
|
||||||
usbPoll();
|
usbPoll();
|
||||||
}
|
}
|
||||||
usbSetInterrupt3(0, 0);
|
usbSetInterrupt4(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
|
__attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
|
||||||
|
@ -683,7 +687,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
|
||||||
.bLength = sizeof(usbEndpointDescriptor_t),
|
.bLength = sizeof(usbEndpointDescriptor_t),
|
||||||
.bDescriptorType = USBDESCR_ENDPOINT
|
.bDescriptorType = USBDESCR_ENDPOINT
|
||||||
},
|
},
|
||||||
.bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP3_NUMBER),
|
.bEndpointAddress = (USBRQ_DIR_DEVICE_TO_HOST | USB_CFG_EP4_NUMBER),
|
||||||
.bmAttributes = 0x03,
|
.bmAttributes = 0x03,
|
||||||
.wMaxPacketSize = RAW_EPSIZE,
|
.wMaxPacketSize = RAW_EPSIZE,
|
||||||
.bInterval = USB_POLLING_INTERVAL_MS
|
.bInterval = USB_POLLING_INTERVAL_MS
|
||||||
|
@ -693,7 +697,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
|
||||||
.bLength = sizeof(usbEndpointDescriptor_t),
|
.bLength = sizeof(usbEndpointDescriptor_t),
|
||||||
.bDescriptorType = USBDESCR_ENDPOINT
|
.bDescriptorType = USBDESCR_ENDPOINT
|
||||||
},
|
},
|
||||||
.bEndpointAddress = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP3_NUMBER),
|
.bEndpointAddress = (USBRQ_DIR_HOST_TO_DEVICE | USB_CFG_EP4_NUMBER),
|
||||||
.bmAttributes = 0x03,
|
.bmAttributes = 0x03,
|
||||||
.wMaxPacketSize = RAW_EPSIZE,
|
.wMaxPacketSize = RAW_EPSIZE,
|
||||||
.bInterval = USB_POLLING_INTERVAL_MS
|
.bInterval = USB_POLLING_INTERVAL_MS
|
||||||
|
|
Loading…
Reference in a new issue