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:
@@ -1 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
@@ -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 );
|
|
||||||
// };
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
SRC += analog.c
|
|
||||||
|
|
||||||
CONSOLE_ENABLE = yes
|
|
||||||
@@ -346,6 +346,10 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef SERIAL_NUMBER
|
||||||
|
# define SERIAL_NUMBER 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef USB_MAX_POWER_CONSUMPTION
|
#ifndef USB_MAX_POWER_CONSUMPTION
|
||||||
# define USB_MAX_POWER_CONSUMPTION 500
|
# define USB_MAX_POWER_CONSUMPTION 500
|
||||||
#endif
|
#endif
|
||||||
@@ -355,6 +359,40 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
|
|||||||
# define USB_POLLING_INTERVAL_MS 1
|
# define USB_POLLING_INTERVAL_MS 1
|
||||||
#endif
|
#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
|
* Descriptor for compite device: Keyboard + Mouse
|
||||||
*
|
*
|
||||||
@@ -468,6 +506,26 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
|
|||||||
len = sizeof(usbDescriptorConfiguration);
|
len = sizeof(usbDescriptorConfiguration);
|
||||||
break;
|
break;
|
||||||
#endif
|
#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:
|
case USBDESCR_HID:
|
||||||
switch (rq->wValue.bytes[0]) {
|
switch (rq->wValue.bytes[0]) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
@@ -20,6 +20,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#include "host_driver.h"
|
#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);
|
host_driver_t *vusb_driver(void);
|
||||||
void vusb_transfer_keyboard(void);
|
void vusb_transfer_keyboard(void);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user