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:
Ryan
2020-03-27 00:11:32 +11:00
committed by Florian Didron
parent 694777041b
commit f6e32b4e8d
5 changed files with 70 additions and 42 deletions

View File

@@ -1 +0,0 @@
#pragma once

View File

@@ -1,38 +0,0 @@
#include QMK_KEYBOARD_H
#include "analog.h"
#include <stdio.h>
#ifndef ADC_PIN
# define ADC_PIN A0
#endif
enum custom_keycodes {
ADC_SAMPLE = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(ADC_SAMPLE) //
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case ADC_SAMPLE:
if (record->event.pressed) {
int16_t val = analogReadPin(ADC_PIN);
char buffer [50];
sprintf(buffer, "ADC:%u\n", val);
#ifdef CONSOLE_ENABLE
printf(buffer);
#else
SEND_STRING(buffer);
#endif
}
break;
}
return false;
};
// adc_mux pinToMux(pin_t pin) {
// return TO_MUX( ADC_CHANNEL_IN1, 0 );
// };

View File

@@ -1,3 +0,0 @@
SRC += analog.c
CONSOLE_ENABLE = yes

View File

@@ -346,6 +346,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
@@ -355,6 +359,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
*
@@ -468,6 +506,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:

View File

@@ -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);