From 710d37b3eb68c795065adfd83b5be4668a029ccb Mon Sep 17 00:00:00 2001 From: jmaynard Date: Wed, 11 Aug 2021 02:21:40 -0500 Subject: [PATCH] [Keyboard] Improvements to m122_3270 (#13947) Co-authored-by: Jay Maynard --- .../tronguylabs/m122_3270/bluepill/chconf.h | 29 +++++++++ .../tronguylabs/m122_3270/bluepill/config.h | 29 +++++++++ .../tronguylabs/m122_3270/bluepill/readme.md | 2 + .../tronguylabs/m122_3270/bluepill/rules.mk | 7 +++ .../m122_3270/keymaps/default/keymap.c | 59 +++++++++++++++++-- .../m122_3270/keymaps/default/readme.md | 29 ++++++--- 6 files changed, 141 insertions(+), 14 deletions(-) create mode 100644 keyboards/tronguylabs/m122_3270/bluepill/chconf.h create mode 100644 keyboards/tronguylabs/m122_3270/bluepill/config.h create mode 100644 keyboards/tronguylabs/m122_3270/bluepill/readme.md create mode 100644 keyboards/tronguylabs/m122_3270/bluepill/rules.mk diff --git a/keyboards/tronguylabs/m122_3270/bluepill/chconf.h b/keyboards/tronguylabs/m122_3270/bluepill/chconf.h new file mode 100644 index 0000000000..c7a982aedd --- /dev/null +++ b/keyboards/tronguylabs/m122_3270/bluepill/chconf.h @@ -0,0 +1,29 @@ +/* Copyright 2020 QMK + * + * 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, either version 2 of the License, or + * (at your option) any later version. + * + * 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 . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i keyboards/handwired/onekey/bluepill/chconf.h -r platforms/chibios/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_TIMEDELTA 0 + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next + diff --git a/keyboards/tronguylabs/m122_3270/bluepill/config.h b/keyboards/tronguylabs/m122_3270/bluepill/config.h new file mode 100644 index 0000000000..f59eaaacb6 --- /dev/null +++ b/keyboards/tronguylabs/m122_3270/bluepill/config.h @@ -0,0 +1,29 @@ +/* Copyright 2021 James R. Maynard III + * + * 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, either version 2 of the License, or + * (at your option) any later version. + * + * 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 . + */ + +#pragma once + +// place overrides below + +// Blackpill pin assignments: reversed the rows from the Teensy version for easier PCB layout +// DO NOT USE the following pins: A9 (has pulldown on it), A11/A12 (USB lines), B2 (external pulldown) +// C13 has an LED, and C13/C14/C15 are best used as inputs (with DIODE_DIRECTION set to ROW2COL, the +// rows are inputs). Note that every usable I/O pin is used. +#define MATRIX_COL_PINS { B1, B10, B11, B12, B13, B14, B15, A8, B0, A10, A7, A6, A15, B3, B4, B5, B6, B7, B8, B9 } +#define MATRIX_ROW_PINS { C13, C14, C15, A1, A2, A3, A4, A5 } + +// The BluePill version is version 3 +#define DEVICE_VER 0x0003 diff --git a/keyboards/tronguylabs/m122_3270/bluepill/readme.md b/keyboards/tronguylabs/m122_3270/bluepill/readme.md new file mode 100644 index 0000000000..a8d92432d4 --- /dev/null +++ b/keyboards/tronguylabs/m122_3270/bluepill/readme.md @@ -0,0 +1,2 @@ +# BluePill controller for m122-3270 +This directory contains the BluePill-specific definitions for the M122-3270 keyboard. diff --git a/keyboards/tronguylabs/m122_3270/bluepill/rules.mk b/keyboards/tronguylabs/m122_3270/bluepill/rules.mk new file mode 100644 index 0000000000..023c22cd2c --- /dev/null +++ b/keyboards/tronguylabs/m122_3270/bluepill/rules.mk @@ -0,0 +1,7 @@ +# Overrides for the Bluepill version + +# MCU name +MCU = STM32F103 + +# Bootloader selection +BOOTLOADER = stm32duino diff --git a/keyboards/tronguylabs/m122_3270/keymaps/default/keymap.c b/keyboards/tronguylabs/m122_3270/keymaps/default/keymap.c index a79d3c6372..14d8318e78 100644 --- a/keyboards/tronguylabs/m122_3270/keymaps/default/keymap.c +++ b/keyboards/tronguylabs/m122_3270/keymaps/default/keymap.c @@ -21,8 +21,11 @@ enum custom_keycodes { JM_GRLS, // < and > on one key JM_CBRC, // { and } on one key JM_CENT, // cent sign and ! on one key + JM_DPA1, // DUP/PA1, + JM_FPA2, // FldMk/PA2, JM_JUMP, // JUMP/PA3, - JM_DEL // Delete + JM_DEL, // Delete + JM_NSLC // NumLock/ScrollLock on one key }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -30,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC, KC_PGUP, KC_PGDN, KC_NLCK, KC_SLCK, KC_PAST, KC_PSLS, + KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_PGUP, KC_PGDN, KC_ESC, JM_NSLC, KC_PAST, KC_PSLS, KC_NO, KC_PAUS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_END, KC_INS, KC_DEL, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSCR, KC_NO, KC_LSFT, JM_GRLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_HOME, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, @@ -41,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [1] = LAYOUT( A(KC_F1), A(KC_F2), A(KC_F3), A(KC_F4), A(KC_F5), A(KC_F6), A(KC_F7), A(KC_F8), A(KC_F9), A(KC_F10), A(KC_F11), A(KC_F12), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - A(KC_A), A(KC_C), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, A(KC_1), A(KC_2), JM_JUMP, KC_NO, KC_NO, KC_PCMM, KC_SPC, + A(KC_A), A(KC_C), KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, JM_DPA1, JM_FPA2, JM_JUMP, KC_ESC, JM_NSLC, KC_PCMM, KC_SPC, KC_CRSEL, KC_PAUS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JM_CENT, KC_BSLS, S(KC_ENT), S(KC_TAB), KC_INS, JM_DEL, KC_P7, KC_P8, KC_P9, KC_TAB, KC_EXSEL, A(KC_E), KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, JM_CBRC, KC_UP, KC_P4, KC_P5, KC_P6, KC_PMNS, A(KC_B), C(KC_C), KC_LSFT, JM_GRLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JM_COMM, JM_DOT, KC_SLSH, KC_RSFT, KC_LEFT, A(KC_H), KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT, @@ -146,9 +149,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("!"); } return false; - } else { + } else { // This assumes that the Linux Compose has eben set to Scroll Lock if (record->event.pressed) { - SEND_STRING("<"); // TODO: what does tn3270 want for a cent sign? + tap_code16(KC_SLCK); + SEND_STRING("c/"); } return false; } @@ -163,6 +167,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { SEND_STRING("."); } return false; + case JM_DPA1: + if (left_shift_down || right_shift_down) { + if (record->event.pressed) { + tap_code16(C(KC_D)); + } + return false; + } else { + if(record->event.pressed) { + tap_code16(A(KC_1)); + } + return false; + } + break; + case JM_FPA2: + if (left_shift_down || right_shift_down) { + if (record->event.pressed) { + tap_code16(C(KC_F)); + } + return false; + } else { + if(record->event.pressed) { + tap_code16(A(KC_2)); + } + return false; + } + break; case JM_JUMP: if (record->event.pressed) { if (left_alt_down || right_alt_down) { @@ -187,6 +217,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } return false; + case JM_NSLC: + if (left_shift_down || right_shift_down) { + if (record->event.pressed) { + register_code(KC_NLCK); + } + else { + unregister_code(KC_NLCK); + } + return false; + } else { + if (record->event.pressed) { + register_code(KC_SLCK); + } + else { + unregister_code(KC_SLCK); + } + return false; + } + break; } return true; diff --git a/keyboards/tronguylabs/m122_3270/keymaps/default/readme.md b/keyboards/tronguylabs/m122_3270/keymaps/default/readme.md index befa267fa1..1d54e0cb8e 100644 --- a/keyboards/tronguylabs/m122_3270/keymaps/default/readme.md +++ b/keyboards/tronguylabs/m122_3270/keymaps/default/readme.md @@ -1,15 +1,16 @@ # Default keymap for m122-3270 This keymap is intended to make the PC/3270 122-key IBM keyboard work as closely as possible to the standard -PC/3270 keyboard's original mapping. Two layers are defined: layer 0 is the PC layout, using the blue legends -on the PC/3270 keys (as shipped by Unicomp; I don't have the original keycaps, and I know there are a few -differences), while layer 1 is the 3270 layout, with keycodes selected to make the x3270 suite do the right -thing with each key as pressed. The idea here is, eventually, to get x3270 and friends to automatically -shift the keyboard to layer 1 when they gain focus. +PC/3270 keyboard's (part number 1397000) original mapping. Two layers are defined: layer 0 is the PC layout, +using the blue legends on the PC/3270 keys (as shipped by Unicomp; I don't have the original keycaps, and I +know there are a few differences), while layer 1 is the 3270 layout, with keycodes selected to make the `x3270` +suite do the right thing with each key as pressed. The idea here is, eventually, to get `x3270` to +automatically shift the keyboard to layer 1 when it gains focus. -When layer 0 is active, the PA1 key is Escape, the Reset and Enter keys are Control, and the comma and dot keys -act like normal PC keys (< and >, repectively, when shifted). The Ctrl key (bottom right of the left-side 10-key -cluster) is always the left GUI key. PA2 and Jump/PA3 are PgUp and PgDn, respectively, and the backtab key is -End. The Rule/Home key is Home. +When layer 0 is active, the upper left key of the 10-key pad is Escape, the Reset and Enter keys are Control, and +the comma and dot keys act like normal PC keys (< and >, repectively, when shifted). The Ctrl key (bottom right +of the left-side 10-key cluster) is always the left GUI key. PA2 and Jump/PA3 are PgUp and PgDn, respectively, +and the backtab key is End. The Rule/Home key is Home. The key next to the Escape key is Scroll Lock when unshifted, +and Num Lock when shifted. When layer 1 is active, the keys do their labeled functions. The only keys that don't do anything are CrSel, ExSel, and Jump, though only a few of the alternate functions (on the front of the keys) work: left/right/delete @@ -21,3 +22,13 @@ To manually switch to layer 1, hold the Zoom key (the one on the far lower left Attn (the one at the top left of that block of 10). Holding the Zoom key and the spacebar gets you to keys that control QMK itself: Zoom-space-R resets to the bootloader, Zoom-space-E erases the EEPROM (which currently does nothing), and Zoom-space-D turns the debugger on and off. + +Note that you need to set your Linux system to use the Scroll Lock key as the Compose key in order to get the +cent sign to register as intended, and add the following lines to a file in your home directory named `.x3270pro` +to make Dup and Field Mark work: +``` +x3270.keymap.m122: #override \ + CtrlF: FieldMark()\n\ + CtrlD: Dup() +``` +You need to then invoke `x3270` with the parameter `-keymap m122` to activate those definitions.