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:
Balz Guenat 2017-11-08 17:11:44 +01:00 committed by Jack Humbert
parent aee6785476
commit 3b5381d689
20 changed files with 86 additions and 45 deletions

View file

@ -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.
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
@ -22,9 +22,9 @@ And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
BUILD
-----
$ git clone https://github.com/tmk/tmk_keyboard.git
$ cd converter/terminal_usb
$ make
$ git clone https://github.com/qmk/qmk_firmware.git
$ cd qmk_firmware
$ make converter/ibm_terminal:default
RESOURCE

View file

@ -1,6 +1 @@
#include "ibm_terminal.h"
// void matrix_init_kb(void) {
// matrix_init_user();
// }

View file

@ -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.
Note that you have to choose the right hardware variant as your subproject, otherwise you will probably have issues.
Troubleshooting & Known Issues
------------------------------
The Pro Micro variant runs at 8MHz, hence the following line in `usb_usb/rules.mk`:
`F_CPU ?= 8000000`
If the firmware doesn't work, try changing that line to
`F_CPU ?= 16000000`
or override the `F_CPU` variable in the `rules.mk` of your keymap.
If something doesn't work, it's probably because of the CPU clock.
Be sure to select the correct subproject (the middle part of the `make` argument) according to your hardware.
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.
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
--------------------

View file

@ -0,0 +1 @@
#include "ble.h"

View file

@ -0,0 +1,6 @@
#ifndef BLE_H
#define BLE_H
#include QMK_KEYBOARD_H
#endif

View 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

View file

@ -0,0 +1,4 @@
BLUETOOTH = AdafruitBLE
ADAFRUIT_BLE_ENABLE = yes
OPT_DEFS += -DCATERINA_BOOTLOADER
F_CPU = 8000000

View file

@ -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.
// CUSTOM_MATRIX is defined it that file, though, and we need it, so we define it ourselves.
// It's a hack, yeah...
#define CUSTOM_MATRIX 2
/* USB Device descriptor parameter */

View file

@ -35,6 +35,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "host.h"
#include "keyboard.h"
extern "C" {
#include "quantum.h"
}
/* 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
static report_keyboard_t keyboard_report;
static report_keyboard_t local_keyboard_report;
static bool matrix_is_mod = false;
@ -98,13 +101,13 @@ extern "C"
}
static void or_report(report_keyboard_t report) {
// integrate reports into keyboard_report
keyboard_report.mods |= report.mods;
// integrate reports into local_keyboard_report
local_keyboard_report.mods |= report.mods;
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
if (IS_ANY(report.keys[i])) {
for (uint8_t j = 0; j < KEYBOARD_REPORT_KEYS; j++) {
if (! keyboard_report.keys[j]) {
keyboard_report.keys[j] = report.keys[i];
if (! local_keyboard_report.keys[j]) {
local_keyboard_report.keys[j] = report.keys[i];
break;
}
}
@ -130,7 +133,7 @@ extern "C"
last_time_stamp4 = kbd_parser4.time_stamp;
// clear and integrate all reports
keyboard_report = {};
local_keyboard_report = {};
or_report(kbd_parser1.report);
or_report(kbd_parser2.report);
or_report(kbd_parser3.report);
@ -138,9 +141,9 @@ extern "C"
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++) {
dprintf(" %02X", keyboard_report.keys[i]);
dprintf(" %02X", local_keyboard_report.keys[i]);
}
dprint("\r\n");
} else {
@ -177,12 +180,12 @@ extern "C"
uint8_t code = CODE(row, col);
if (IS_MOD(code)) {
if (keyboard_report.mods & ROW_BITS(code)) {
if (local_keyboard_report.mods & ROW_BITS(code)) {
return true;
}
}
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;
}
}
@ -192,14 +195,14 @@ extern "C"
matrix_row_t matrix_get_row(uint8_t row) {
uint16_t row_bits = 0;
if (IS_MOD(CODE(row, 0)) && keyboard_report.mods) {
row_bits |= keyboard_report.mods;
if (IS_MOD(CODE(row, 0)) && local_keyboard_report.mods) {
row_bits |= local_keyboard_report.mods;
}
for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
if (IS_ANY(keyboard_report.keys[i])) {
if (row == ROW(keyboard_report.keys[i])) {
row_bits |= ROW_BITS(keyboard_report.keys[i]);
if (IS_ANY(local_keyboard_report.keys[i])) {
if (row == ROW(local_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 count = 0;
count += bitpop(keyboard_report.mods);
count += bitpop(local_keyboard_report.mods);
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++;
}
}
@ -233,6 +236,7 @@ extern "C"
kbd2.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);
led_set_kb(usb_led);
}
};

View file

@ -0,0 +1 @@
#include "hasu.h"

View file

@ -0,0 +1,6 @@
#ifndef HASU_H
#define HASU_H
#include QMK_KEYBOARD_H
#endif

View file

@ -0,0 +1 @@
F_CPU = 16000000

View file

@ -3,13 +3,4 @@
#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

View file

@ -1,3 +0,0 @@
BLUETOOTH = AdafruitBLE
ADAFRUIT_BLE_ENABLE = yes
OPT_DEFS += -DCATERINA_BOOTLOADER

View file

@ -0,0 +1 @@
#include "pro_micro.h"

View file

@ -0,0 +1,6 @@
#ifndef PRO_MICRO_H
#define PRO_MICRO_H
#include QMK_KEYBOARD_H
#endif

View file

@ -0,0 +1 @@
F_CPU = 8000000

View file

@ -13,7 +13,15 @@ MCU = atmega32u4
# 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
# 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
#