+++ /dev/null
-Keyboard converter for IBM terminal keyboard
-============================================
-
-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
-Article: http://geekhack.org/index.php?topic=27272.0
-
-
-CONNECTION
-----------
-Keyboard ATMega32U4
-----------------------
-Data: PD2
-Clock: PD5
-
-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
-
-
-RESOURCE
---------
-Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
-102keys(1392595): http://geekhack.org/index.php?topic=10737.0
-122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
-KbdBabel: http://www.kbdbabel.org/
-RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
-DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
-WinAVR: http://winavr.sourceforge.net/
-
-EOF
--- /dev/null
+Keyboard converter for IBM terminal keyboard
+============================================
+
+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/qmk/qmk_firmware.git
+Article: http://geekhack.org/index.php?topic=27272.0
+
+
+CONNECTION
+----------
+Keyboard ATMega32U4
+----------------------
+Data: PD2
+Clock: PD5
+
+And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
+
+
+BUILD
+-----
+$ git clone https://github.com/qmk/qmk_firmware.git
+$ cd qmk_firmware
+$ make converter/ibm_terminal:default
+
+
+RESOURCE
+--------
+Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
+102keys(1392595): http://geekhack.org/index.php?topic=10737.0
+122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
+KbdBabel: http://www.kbdbabel.org/
+RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
+DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
+WinAVR: http://winavr.sourceforge.net/
+
+EOF
#include "ibm_terminal.h"
-
-// void matrix_init_kb(void) {
-
-// matrix_init_user();
-// }
\ No newline at end of file
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
--------------------
--- /dev/null
+QMK BLE Adapter
+===============
+A small device that reads USB keyboard input and passes it on over Bluetooth LE HID.
+
+![Picture of Adapter](https://i.imgur.com/O3VwBBJ.png)
+
+Hardware
+--------
+The hardware is relatively easy to assemble. Just follow the schematic and don't forget to [cut the VBUS jumper](https://www.pjrc.com/teensy/td_libs_USBHostShield_4a.jpg).
+
+Schematic:
+![Schematic](https://i.imgur.com/s1Ia9We.png)
+
+Part list:
+* [Adafruit Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829)
+* [USB Host Mini](https://www.circuitsathome.com/arduino_usb_host_shield_projects/)
+* [Pololu 5V Step-Up Voltage Regulator U3V12F5](https://www.pololu.com/product/2115)
+* [Lithium Ion Battery - 3.7v 2000mAh](https://www.adafruit.com/product/2011)
+* Some sort of switch to be able to turn it off
+
+Building and Flashing
+---------------------
+
+```
+make converter-usb_usb-ble
+```
+
+```
+make converter-usb_usb-ble-avrdude
+```
\ No newline at end of file
--- /dev/null
+#include "ble.h"
--- /dev/null
+#ifndef BLE_H
+#define BLE_H
+
+#include QMK_KEYBOARD_H
+
+#endif
--- /dev/null
+#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
--- /dev/null
+BLUETOOTH = AdafruitBLE
+ADAFRUIT_BLE_ENABLE = yes
+OPT_DEFS += -DCATERINA_BOOTLOADER
+F_CPU = 8000000
// 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 */
#include "host.h"
#include "keyboard.h"
+extern "C" {
+#include "quantum.h"
+}
/* KEY CODE to Matrix
*
// 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 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;
}
}
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);
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 {
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;
}
}
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]);
}
}
}
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++;
}
}
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);
}
};
--- /dev/null
+#include "hasu.h"
--- /dev/null
+#ifndef HASU_H
+#define HASU_H
+
+#include QMK_KEYBOARD_H
+
+#endif
--- /dev/null
+F_CPU = 16000000
+++ /dev/null
-QMK BLE Adapter
-===============
-A small device that reads USB keyboard input and passes it on over Bluetooth LE HID.
-
-![Picture of Adapter](https://i.imgur.com/O3VwBBJ.png)
-
-Hardware
---------
-The hardware is relatively easy to assemble. Just follow the schematic and don't forget to [cut the VBUS jumper](https://www.pjrc.com/teensy/td_libs_USBHostShield_4a.jpg).
-
-Schematic:
-![Schematic](https://i.imgur.com/s1Ia9We.png)
-
-Part list:
-* [Adafruit Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829)
-* [USB Host Mini](https://www.circuitsathome.com/arduino_usb_host_shield_projects/)
-* [Pololu 5V Step-Up Voltage Regulator U3V12F5](https://www.pololu.com/product/2115)
-* [Lithium Ion Battery - 3.7v 2000mAh](https://www.adafruit.com/product/2011)
-* Some sort of switch to be able to turn it off
-
-Building and Flashing
----------------------
-
-```
-make converter-usb_usb-ble
-```
-
-```
-make converter-usb_usb-ble-avrdude
-```
\ No newline at end of file
#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
+++ /dev/null
-BLUETOOTH = AdafruitBLE
-ADAFRUIT_BLE_ENABLE = yes
-OPT_DEFS += -DCATERINA_BOOTLOADER
\ No newline at end of file
--- /dev/null
+#include "pro_micro.h"
--- /dev/null
+#ifndef PRO_MICRO_H
+#define PRO_MICRO_H
+
+#include QMK_KEYBOARD_H
+
+#endif
--- /dev/null
+F_CPU = 8000000
# 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
#
-#include "usb_usb.h"
\ No newline at end of file
+#include "usb_usb.h"