restructure converters (#1825)
* restructure converters each converter is its own keyboard and different hardware variants are different subprojects. remove (seemingly) old method of loading layouts from main Makefile * call led_set_kb() from overridden led_set() * put converter back into one folder * revert some structure changes to bring in line with #1784. Also attempt to get the BLE thing more properly integrated. Also also fix led_set() to call led_set_kb().
This commit is contained in:
parent
aee6785476
commit
3b5381d689
20 changed files with 86 additions and 45 deletions
|
@ -6,7 +6,7 @@ This is a port of TMK's converter/terminal_usb to QMK.
|
||||||
It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
|
It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
|
||||||
I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
|
I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
|
||||||
|
|
||||||
Source code: https://github.com/tmk/tmk_keyboard
|
Source code: https://github.com/qmk/qmk_firmware.git
|
||||||
Article: http://geekhack.org/index.php?topic=27272.0
|
Article: http://geekhack.org/index.php?topic=27272.0
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@ And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
|
||||||
|
|
||||||
BUILD
|
BUILD
|
||||||
-----
|
-----
|
||||||
$ git clone https://github.com/tmk/tmk_keyboard.git
|
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||||
$ cd converter/terminal_usb
|
$ cd qmk_firmware
|
||||||
$ make
|
$ make converter/ibm_terminal:default
|
||||||
|
|
||||||
|
|
||||||
RESOURCE
|
RESOURCE
|
|
@ -1,6 +1 @@
|
||||||
#include "ibm_terminal.h"
|
#include "ibm_terminal.h"
|
||||||
|
|
||||||
// void matrix_init_kb(void) {
|
|
||||||
|
|
||||||
// matrix_init_user();
|
|
||||||
// }
|
|
|
@ -13,13 +13,18 @@ Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
|
|
||||||
|
Note that you have to choose the right hardware variant as your subproject, otherwise you will probably have issues.
|
||||||
|
|
||||||
Troubleshooting & Known Issues
|
Troubleshooting & Known Issues
|
||||||
------------------------------
|
------------------------------
|
||||||
The Pro Micro variant runs at 8MHz, hence the following line in `usb_usb/rules.mk`:
|
If something doesn't work, it's probably because of the CPU clock.
|
||||||
`F_CPU ?= 8000000`
|
Be sure to select the correct subproject (the middle part of the `make` argument) according to your hardware.
|
||||||
If the firmware doesn't work, try changing that line to
|
If you are sure you have this correct, try changeing the default in `usb_usb/rules.mk` or overriding the value in the `rules.mk` of your keymap.
|
||||||
`F_CPU ?= 16000000`
|
|
||||||
or override the `F_CPU` variable in the `rules.mk` of your keymap.
|
The Pro Micro variant uses a 3.3V Pro Micro and thus runs at 8MHz, hence the following line in `usb_usb/pro_micro/rules.mk`:
|
||||||
|
`F_CPU = 8000000`
|
||||||
|
The converter sold by Hasu runs at 16MHz and so the corresponding line in `usb_usb/hasu/rules.mk` is:
|
||||||
|
`F_CPU = 16000000`
|
||||||
|
|
||||||
Getting the Hardware
|
Getting the Hardware
|
||||||
--------------------
|
--------------------
|
||||||
|
|
1
keyboards/converter/usb_usb/ble/ble.c
Normal file
1
keyboards/converter/usb_usb/ble/ble.c
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include "ble.h"
|
6
keyboards/converter/usb_usb/ble/ble.h
Normal file
6
keyboards/converter/usb_usb/ble/ble.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef BLE_H
|
||||||
|
#define BLE_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
#endif
|
13
keyboards/converter/usb_usb/ble/config.h
Normal file
13
keyboards/converter/usb_usb/ble/config.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef CONFIG_BLE_H
|
||||||
|
#define CONFIG_BLE_H
|
||||||
|
|
||||||
|
#undef PRODUCT
|
||||||
|
#define PRODUCT QMK BLE Adapter
|
||||||
|
#undef DESCRIPTION
|
||||||
|
#define DESCRIPTION
|
||||||
|
|
||||||
|
// Turn off the mode leds on the BLE module
|
||||||
|
#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0
|
||||||
|
#define ADAFRUIT_BLE_ENABLE_POWER_LED 0
|
||||||
|
|
||||||
|
#endif
|
4
keyboards/converter/usb_usb/ble/rules.mk
Normal file
4
keyboards/converter/usb_usb/ble/rules.mk
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
BLUETOOTH = AdafruitBLE
|
||||||
|
ADAFRUIT_BLE_ENABLE = yes
|
||||||
|
OPT_DEFS += -DCATERINA_BOOTLOADER
|
||||||
|
F_CPU = 8000000
|
|
@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
// do not #include "config_common.h" because the pin names conflict with the USB HID code.
|
// do not #include "config_common.h" because the pin names conflict with the USB HID code.
|
||||||
// CUSTOM_MATRIX is defined it that file, though, and we need it, so we define it ourselves.
|
// CUSTOM_MATRIX is defined it that file, though, and we need it, so we define it ourselves.
|
||||||
// It's a hack, yeah...
|
// It's a hack, yeah...
|
||||||
|
|
||||||
#define CUSTOM_MATRIX 2
|
#define CUSTOM_MATRIX 2
|
||||||
|
|
||||||
/* USB Device descriptor parameter */
|
/* USB Device descriptor parameter */
|
||||||
|
|
|
@ -35,6 +35,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "host.h"
|
#include "host.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "quantum.h"
|
||||||
|
}
|
||||||
|
|
||||||
/* KEY CODE to Matrix
|
/* KEY CODE to Matrix
|
||||||
*
|
*
|
||||||
|
@ -62,7 +65,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
// Integrated key state of all keyboards
|
// Integrated key state of all keyboards
|
||||||
static report_keyboard_t keyboard_report;
|
static report_keyboard_t local_keyboard_report;
|
||||||
|
|
||||||
static bool matrix_is_mod = false;
|
static bool matrix_is_mod = false;
|
||||||
|
|
||||||
|
@ -98,13 +101,13 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
static void or_report(report_keyboard_t report) {
|
static void or_report(report_keyboard_t report) {
|
||||||
// integrate reports into keyboard_report
|
// integrate reports into local_keyboard_report
|
||||||
keyboard_report.mods |= report.mods;
|
local_keyboard_report.mods |= report.mods;
|
||||||
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
||||||
if (IS_ANY(report.keys[i])) {
|
if (IS_ANY(report.keys[i])) {
|
||||||
for (uint8_t j = 0; j < KEYBOARD_REPORT_KEYS; j++) {
|
for (uint8_t j = 0; j < KEYBOARD_REPORT_KEYS; j++) {
|
||||||
if (! keyboard_report.keys[j]) {
|
if (! local_keyboard_report.keys[j]) {
|
||||||
keyboard_report.keys[j] = report.keys[i];
|
local_keyboard_report.keys[j] = report.keys[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +133,7 @@ extern "C"
|
||||||
last_time_stamp4 = kbd_parser4.time_stamp;
|
last_time_stamp4 = kbd_parser4.time_stamp;
|
||||||
|
|
||||||
// clear and integrate all reports
|
// clear and integrate all reports
|
||||||
keyboard_report = {};
|
local_keyboard_report = {};
|
||||||
or_report(kbd_parser1.report);
|
or_report(kbd_parser1.report);
|
||||||
or_report(kbd_parser2.report);
|
or_report(kbd_parser2.report);
|
||||||
or_report(kbd_parser3.report);
|
or_report(kbd_parser3.report);
|
||||||
|
@ -138,9 +141,9 @@ extern "C"
|
||||||
|
|
||||||
matrix_is_mod = true;
|
matrix_is_mod = true;
|
||||||
|
|
||||||
dprintf("state: %02X %02X", keyboard_report.mods, keyboard_report.reserved);
|
dprintf("state: %02X %02X", local_keyboard_report.mods, local_keyboard_report.reserved);
|
||||||
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
||||||
dprintf(" %02X", keyboard_report.keys[i]);
|
dprintf(" %02X", local_keyboard_report.keys[i]);
|
||||||
}
|
}
|
||||||
dprint("\r\n");
|
dprint("\r\n");
|
||||||
} else {
|
} else {
|
||||||
|
@ -177,12 +180,12 @@ extern "C"
|
||||||
uint8_t code = CODE(row, col);
|
uint8_t code = CODE(row, col);
|
||||||
|
|
||||||
if (IS_MOD(code)) {
|
if (IS_MOD(code)) {
|
||||||
if (keyboard_report.mods & ROW_BITS(code)) {
|
if (local_keyboard_report.mods & ROW_BITS(code)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
||||||
if (keyboard_report.keys[i] == code) {
|
if (local_keyboard_report.keys[i] == code) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,14 +195,14 @@ extern "C"
|
||||||
matrix_row_t matrix_get_row(uint8_t row) {
|
matrix_row_t matrix_get_row(uint8_t row) {
|
||||||
uint16_t row_bits = 0;
|
uint16_t row_bits = 0;
|
||||||
|
|
||||||
if (IS_MOD(CODE(row, 0)) && keyboard_report.mods) {
|
if (IS_MOD(CODE(row, 0)) && local_keyboard_report.mods) {
|
||||||
row_bits |= keyboard_report.mods;
|
row_bits |= local_keyboard_report.mods;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
||||||
if (IS_ANY(keyboard_report.keys[i])) {
|
if (IS_ANY(local_keyboard_report.keys[i])) {
|
||||||
if (row == ROW(keyboard_report.keys[i])) {
|
if (row == ROW(local_keyboard_report.keys[i])) {
|
||||||
row_bits |= ROW_BITS(keyboard_report.keys[i]);
|
row_bits |= ROW_BITS(local_keyboard_report.keys[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,9 +212,9 @@ extern "C"
|
||||||
uint8_t matrix_key_count(void) {
|
uint8_t matrix_key_count(void) {
|
||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
|
|
||||||
count += bitpop(keyboard_report.mods);
|
count += bitpop(local_keyboard_report.mods);
|
||||||
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
|
||||||
if (IS_ANY(keyboard_report.keys[i])) {
|
if (IS_ANY(local_keyboard_report.keys[i])) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,6 +236,7 @@ extern "C"
|
||||||
kbd2.SetReport(0, 0, 2, 0, 1, &usb_led);
|
kbd2.SetReport(0, 0, 2, 0, 1, &usb_led);
|
||||||
kbd3.SetReport(0, 0, 2, 0, 1, &usb_led);
|
kbd3.SetReport(0, 0, 2, 0, 1, &usb_led);
|
||||||
kbd4.SetReport(0, 0, 2, 0, 1, &usb_led);
|
kbd4.SetReport(0, 0, 2, 0, 1, &usb_led);
|
||||||
|
led_set_kb(usb_led);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
1
keyboards/converter/usb_usb/hasu/hasu.c
Normal file
1
keyboards/converter/usb_usb/hasu/hasu.c
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include "hasu.h"
|
6
keyboards/converter/usb_usb/hasu/hasu.h
Normal file
6
keyboards/converter/usb_usb/hasu/hasu.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef HASU_H
|
||||||
|
#define HASU_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
#endif
|
1
keyboards/converter/usb_usb/hasu/rules.mk
Normal file
1
keyboards/converter/usb_usb/hasu/rules.mk
Normal file
|
@ -0,0 +1 @@
|
||||||
|
F_CPU = 16000000
|
|
@ -3,13 +3,4 @@
|
||||||
|
|
||||||
#include "../../config.h"
|
#include "../../config.h"
|
||||||
|
|
||||||
#undef PRODUCT
|
|
||||||
#define PRODUCT QMK BLE Adapter
|
|
||||||
#undef DESCRIPTION
|
|
||||||
#define DESCRIPTION
|
|
||||||
|
|
||||||
// Turn off the mode leds on the BLE module
|
|
||||||
#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0
|
|
||||||
#define ADAFRUIT_BLE_ENABLE_POWER_LED 0
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
BLUETOOTH = AdafruitBLE
|
|
||||||
ADAFRUIT_BLE_ENABLE = yes
|
|
||||||
OPT_DEFS += -DCATERINA_BOOTLOADER
|
|
1
keyboards/converter/usb_usb/pro_micro/pro_micro.c
Normal file
1
keyboards/converter/usb_usb/pro_micro/pro_micro.c
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include "pro_micro.h"
|
6
keyboards/converter/usb_usb/pro_micro/pro_micro.h
Normal file
6
keyboards/converter/usb_usb/pro_micro/pro_micro.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef PRO_MICRO_H
|
||||||
|
#define PRO_MICRO_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
#endif
|
1
keyboards/converter/usb_usb/pro_micro/rules.mk
Normal file
1
keyboards/converter/usb_usb/pro_micro/rules.mk
Normal file
|
@ -0,0 +1 @@
|
||||||
|
F_CPU = 8000000
|
|
@ -13,7 +13,15 @@ MCU = atmega32u4
|
||||||
# does not *change* the processor frequency - it should merely be updated to
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
# reflect the processor speed set externally so that the code can use accurate
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
# software delays.
|
# software delays.
|
||||||
F_CPU = 8000000
|
|
||||||
|
# Since there are different hardware variations of these adapters and since these
|
||||||
|
# have different CPU clocks, the clock speed should be set in the rules.mk file of the
|
||||||
|
# respective hardware variantion (i.e. subproject). For example, in /pro_micro/rules.mk
|
||||||
|
# this is set to 8000000.
|
||||||
|
# The value here is only a fallback and is ignored if it is defined in the subproject.
|
||||||
|
F_CPU ?= 16000000
|
||||||
|
|
||||||
|
DEFAULT_FOLDER = converter/usb_usb/hasu
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in a new issue