Add a way to override the HID short name

With this change, each device can specify a short name in their device
properties, which will be used to override the HID shortname. Due to link order,
we need to do the override in the user sketch, so we hook into the `KEYMAPS`
macro, to call `_INIT_HID_GETSHORTNAME`, which will set the override up for us.

The short name defaults to "kaleidoscope".

Together with keyboardio/KeyboardioHID#61, fixes keyboardio/KeyboardioHID#54.

Signed-off-by: Gergely Nagy <algernon@keyboard.io>
pull/760/head
Gergely Nagy 5 years ago
parent 133d9e6227
commit 69582320f2
No known key found for this signature in database
GPG Key ID: AC1E90BAC433F68F

@ -60,6 +60,7 @@ struct BaseProps {
typedef kaleidoscope::driver::bootloader::None Bootloader; typedef kaleidoscope::driver::bootloader::None Bootloader;
typedef kaleidoscope::driver::storage::BaseProps StorageProps; typedef kaleidoscope::driver::storage::BaseProps StorageProps;
typedef kaleidoscope::driver::storage::None Storage; typedef kaleidoscope::driver::storage::None Storage;
static constexpr const char *short_name = USB_PRODUCT;
}; };
template<typename _DeviceProps> template<typename _DeviceProps>
@ -116,8 +117,8 @@ class Base {
} }
/** /**
* Returns the key scanner used by the keyboard. * Returns the key scanner used by the keyboard.
*/ */
KeyScanner &keyScanner() { KeyScanner &keyScanner() {
return key_scanner_; return key_scanner_;
} }
@ -129,6 +130,14 @@ class Base {
return led_driver_; return led_driver_;
} }
/**
* Returns the short name of the device.
*/
static const uint8_t getShortName(char *name) {
memcpy(name, _DeviceProps::short_name, strlen(_DeviceProps::short_name));
return strlen(_DeviceProps::short_name);
}
/** /**
* @defgroup kaleidoscope_hardware_leds Kaleidoscope::Hardware/LEDs * @defgroup kaleidoscope_hardware_leds Kaleidoscope::Hardware/LEDs
* @{ * @{
@ -534,4 +543,3 @@ class Base {
#define EXPORT_DEVICE(DEVICE) \ #define EXPORT_DEVICE(DEVICE) \
typedef DEVICE##Props DeviceProps; typedef DEVICE##Props DeviceProps;
#endif // ifndef KALEIDOSCOPE_VIRTUAL_BUILD #endif // ifndef KALEIDOSCOPE_VIRTUAL_BUILD

@ -22,6 +22,7 @@
#include "kaleidoscope/device/device.h" #include "kaleidoscope/device/device.h"
#include "kaleidoscope_internal/device.h" #include "kaleidoscope_internal/device.h"
#include "kaleidoscope_internal/sketch_exploration/sketch_exploration.h" #include "kaleidoscope_internal/sketch_exploration/sketch_exploration.h"
#include "kaleidoscope_internal/shortname.h"
// Macro for defining the keymap. This should be used in the sketch // Macro for defining the keymap. This should be used in the sketch
// file (*.ino) to define the keymap[] array that holds the user's // file (*.ino) to define the keymap[] array that holds the user's
@ -36,7 +37,8 @@
*/ __NL__ \ */ __NL__ \
kaleidoscope::internal::Keymaps2DInterface keymaps; __NL__ \ kaleidoscope::internal::Keymaps2DInterface keymaps; __NL__ \
__NL__ \ __NL__ \
_INIT_SKETCH_EXPLORATION _INIT_SKETCH_EXPLORATION __NL__ \
_INIT_HID_GETSHORTNAME
extern uint8_t layer_count; extern uint8_t layer_count;

@ -0,0 +1,32 @@
/* kaleidoscope_internal::shortname -- HID short name override helper
* Copyright (C) 2019 Keyboard.io, Inc.
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/*
* We want to be able to override the short name of the device. For that, we
* currently need to override `HID_::getShortName`, but due to link ordering, we
* need to do that in the user sketch. For this reason, `_INIT_HID_GETSHORTNAME`
* gets called from the `KEYMAPS` macro.
*
* TODO(anyone): Once we have a better way to override the short name, remove
* this workaround.
*/
#define _INIT_HID_GETSHORTNAME __NL__ \
uint8_t HID_::getShortName(char *name) { __NL__ \
return Kaleidoscope.device().getShortName(name); __NL__ \
}
Loading…
Cancel
Save