summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2020-03-27 00:11:32 +1100
committerFlorian Didron <fdidron@users.noreply.github.com>2020-06-12 17:00:27 +0900
commitf6e32b4e8d2ccc6eab5e94b509d2e39ec91ac7d6 (patch)
treef04f272e2c2c5a3ba1361bb326142df2171af011
parent694777041b1d08cca595cfcb65c5e7a8528ed1ba (diff)
V-USB: Use manufacturer and product strings from config.h (#7797)
* V-USB: Use manufacturer and product strings from config.h * Update board configs
-rw-r--r--keyboards/handwired/onekey/keymaps/adc/config.h1
-rw-r--r--keyboards/handwired/onekey/keymaps/adc/keymap.c38
-rw-r--r--keyboards/handwired/onekey/keymaps/adc/rules.mk3
-rw-r--r--tmk_core/protocol/vusb/vusb.c58
-rw-r--r--tmk_core/protocol/vusb/vusb.h12
5 files changed, 70 insertions, 42 deletions
diff --git a/keyboards/handwired/onekey/keymaps/adc/config.h b/keyboards/handwired/onekey/keymaps/adc/config.h
deleted file mode 100644
index 6f70f09bee..0000000000
--- a/keyboards/handwired/onekey/keymaps/adc/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/keyboards/handwired/onekey/keymaps/adc/keymap.c b/keyboards/handwired/onekey/keymaps/adc/keymap.c
deleted file mode 100644
index c5294bbc3d..0000000000
--- a/keyboards/handwired/onekey/keymaps/adc/keymap.c
+++ /dev/null
@@ -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 );
-// };
diff --git a/keyboards/handwired/onekey/keymaps/adc/rules.mk b/keyboards/handwired/onekey/keymaps/adc/rules.mk
deleted file mode 100644
index a691d5488f..0000000000
--- a/keyboards/handwired/onekey/keymaps/adc/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-SRC += analog.c
-
-CONSOLE_ENABLE = yes
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index 0b91bfb414..69f2c12e3f 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -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:
diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h
index 7e3f8c394d..cee07207a3 100644
--- a/tmk_core/protocol/vusb/vusb.h
+++ b/tmk_core/protocol/vusb/vusb.h
@@ -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);