V-USB: Use manufacturer and product strings from config.h (#7797)
* V-USB: Use manufacturer and product strings from config.h * Update board configs
This commit is contained in:
@ -335,6 +335,10 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef SERIAL_NUMBER
|
||||
# define SERIAL_NUMBER 0
|
||||
#endif
|
||||
|
||||
#ifndef USB_MAX_POWER_CONSUMPTION
|
||||
# define USB_MAX_POWER_CONSUMPTION 500
|
||||
#endif
|
||||
@ -344,6 +348,40 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
|
||||
# define USB_POLLING_INTERVAL_MS 1
|
||||
#endif
|
||||
|
||||
// clang-format off
|
||||
const PROGMEM usbStringDescriptor_t usbDescriptorStringZero = {
|
||||
.header = {
|
||||
.bLength = USB_STRING_LEN(1),
|
||||
.bDescriptorType = USBDESCR_STRING
|
||||
},
|
||||
.bString = {0x0409} // US English
|
||||
};
|
||||
|
||||
const PROGMEM usbStringDescriptor_t usbDescriptorStringManufacturer = {
|
||||
.header = {
|
||||
.bLength = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1),
|
||||
.bDescriptorType = USBDESCR_STRING
|
||||
},
|
||||
.bString = LSTR(MANUFACTURER)
|
||||
};
|
||||
|
||||
const PROGMEM usbStringDescriptor_t usbDescriptorStringProduct = {
|
||||
.header = {
|
||||
.bLength = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1),
|
||||
.bDescriptorType = USBDESCR_STRING
|
||||
},
|
||||
.bString = LSTR(PRODUCT)
|
||||
};
|
||||
|
||||
const PROGMEM usbStringDescriptor_t usbDescriptorStringSerial = {
|
||||
.header = {
|
||||
.bLength = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1),
|
||||
.bDescriptorType = USBDESCR_STRING
|
||||
},
|
||||
.bString = LSTR(SERIAL_NUMBER)
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
/*
|
||||
* Descriptor for compite device: Keyboard + Mouse
|
||||
*
|
||||
@ -457,6 +495,26 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
|
||||
len = sizeof(usbDescriptorConfiguration);
|
||||
break;
|
||||
#endif
|
||||
case USBDESCR_STRING:
|
||||
switch (rq->wValue.bytes[0]) {
|
||||
case 0:
|
||||
usbMsgPtr = (unsigned char *)&usbDescriptorStringZero;
|
||||
len = usbDescriptorStringZero.header.bLength;
|
||||
break;
|
||||
case 1: // iManufacturer
|
||||
usbMsgPtr = (unsigned char *)&usbDescriptorStringManufacturer;
|
||||
len = usbDescriptorStringManufacturer.header.bLength;
|
||||
break;
|
||||
case 2: // iProduct
|
||||
usbMsgPtr = (unsigned char *)&usbDescriptorStringProduct;
|
||||
len = usbDescriptorStringProduct.header.bLength;
|
||||
break;
|
||||
case 3: // iSerialNumber
|
||||
usbMsgPtr = (unsigned char *)&usbDescriptorStringSerial;
|
||||
len = usbDescriptorStringSerial.header.bLength;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case USBDESCR_HID:
|
||||
switch (rq->wValue.bytes[0]) {
|
||||
case 0:
|
||||
|
@ -20,6 +20,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "host_driver.h"
|
||||
|
||||
typedef struct usbDescriptorHeader {
|
||||
uchar bLength;
|
||||
uchar bDescriptorType;
|
||||
} __attribute__((packed)) usbDescriptorHeader_t;
|
||||
|
||||
typedef struct usbStringDescriptor {
|
||||
usbDescriptorHeader_t header;
|
||||
int bString[];
|
||||
} __attribute__((packed)) usbStringDescriptor_t;
|
||||
|
||||
#define USB_STRING_LEN(s) (sizeof(usbDescriptorHeader_t) + ((s) << 1))
|
||||
|
||||
host_driver_t *vusb_driver(void);
|
||||
void vusb_transfer_keyboard(void);
|
||||
|
||||
|
Reference in New Issue
Block a user