1
0
Fork 0

Fix & clean up tronguylabs/m122_3270 (#13684)

This commit is contained in:
Ryan 2021-07-25 11:02:36 +10:00 committed by GitHub
parent 95730d4f96
commit 8cc568bc29
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 333 additions and 362 deletions

View file

@ -16,8 +16,6 @@
#pragma once #pragma once
// place overrides below
// Blackpill pin assignments: reversed the rows from the Teensy version for easier PCB layout // 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) // 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 // C13 has an LED, and C13/C14/C15 are best used as inputs (with DIODE_DIRECTION set to ROW2COL, the

View file

@ -1,2 +1,3 @@
# BlackPill controller for m122-3270 # BlackPill controller for m122-3270
This directory contains the BlackPill-specific definitions for the M122-3270 keyboard. This directory contains the BlackPill-specific definitions for the M122-3270 keyboard.

View file

@ -1,7 +1,22 @@
# Overrides for the Blackpill version
# MCU name # MCU name
MCU = STM32F411 MCU = STM32F411
# Bootloader selection # Bootloader selection
BOOTLOADER = stm32-dfu BOOTLOADER = stm32-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output

View file

@ -20,7 +20,6 @@
#define VENDOR_ID 0x1209 #define VENDOR_ID 0x1209
#define PRODUCT_ID 0x3270 #define PRODUCT_ID 0x3270
// DEVICE_VER is defined in each variant's config.h file
#define MANUFACTURER IBM #define MANUFACTURER IBM
#define PRODUCT Model M PC/3270 122 key #define PRODUCT Model M PC/3270 122 key
@ -31,41 +30,8 @@
#define MATRIX_ROWS 8 #define MATRIX_ROWS 8
#define MATRIX_COLS 20 #define MATRIX_COLS 20
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/ /* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL #define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 15 #define DEBOUNCE 15
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
// #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION

View file

@ -6,128 +6,151 @@
"layouts": { "layouts": {
"LAYOUT": { "LAYOUT": {
"layout": [ "layout": [
{"label":"F13", "x":3.25, "y":0}, {"x": 3.25, "y": 0},
{"label":"F14", "x":4.25, "y":0}, {"x": 4.25, "y": 0},
{"label":"F15", "x":5.25, "y":0}, {"x": 5.25, "y": 0},
{"label":"F16", "x":6.25, "y":0}, {"x": 6.25, "y": 0},
{"label":"F17", "x":7.25, "y":0}, {"x": 7.25, "y": 0},
{"label":"F18", "x":8.25, "y":0}, {"x": 8.25, "y": 0},
{"label":"F19", "x":9.25, "y":0}, {"x": 9.25, "y": 0},
{"label":"F20", "x":10.25, "y":0}, {"x": 10.25, "y": 0},
{"label":"F21", "x":11.25, "y":0}, {"x": 11.25, "y": 0},
{"label":"F22", "x":12.25, "y":0}, {"x": 12.25, "y": 0},
{"label":"F23", "x":13.25, "y":0}, {"x": 13.25, "y": 0},
{"label":"F24", "x":14.25, "y":0}, {"x": 14.25, "y": 0},
{"label":"F1", "x":3.25, "y":1},
{"label":"F2", "x":4.25, "y":1}, {"x": 3.25, "y": 1},
{"label":"F3", "x":5.25, "y":1}, {"x": 4.25, "y": 1},
{"label":"F4", "x":6.25, "y":1}, {"x": 5.25, "y": 1},
{"label":"F5", "x":7.25, "y":1}, {"x": 6.25, "y": 1},
{"label":"F6", "x":8.25, "y":1}, {"x": 7.25, "y": 1},
{"label":"F7", "x":9.25, "y":1}, {"x": 8.25, "y": 1},
{"label":"F8", "x":10.25, "y":1}, {"x": 9.25, "y": 1},
{"label":"F9", "x":11.25, "y":1}, {"x": 10.25, "y": 1},
{"label":"F10", "x":12.25, "y":1}, {"x": 11.25, "y": 1},
{"label":"F11", "x":13.25, "y":1}, {"x": 12.25, "y": 1},
{"label":"F12", "x":14.25, "y":1}, {"x": 13.25, "y": 1},
{"label":"Esc", "x":0, "y":3}, {"x": 14.25, "y": 1},
{"x": 0, "y": 3},
{"x": 1, "y": 3}, {"x": 1, "y": 3},
{"label":"`", "x":2.25, "y":3},
{"label":"1", "x":3.25, "y":3}, {"x": 2.25, "y": 3},
{"label":"2", "x":4.25, "y":3}, {"x": 3.25, "y": 3},
{"label":"3", "x":5.25, "y":3}, {"x": 4.25, "y": 3},
{"label":"4", "x":6.25, "y":3}, {"x": 5.25, "y": 3},
{"label":"5", "x":7.25, "y":3}, {"x": 6.25, "y": 3},
{"label":"6", "x":8.25, "y":3}, {"x": 7.25, "y": 3},
{"label":"7", "x":9.25, "y":3}, {"x": 8.25, "y": 3},
{"label":"8", "x":10.25, "y":3}, {"x": 9.25, "y": 3},
{"label":"9", "x":11.25, "y":3}, {"x": 10.25, "y": 3},
{"label":"0", "x":12.25, "y":3}, {"x": 11.25, "y": 3},
{"label":"-", "x":13.25, "y":3}, {"x": 12.25, "y": 3},
{"label":"=", "x":14.25, "y":3}, {"x": 13.25, "y": 3},
{"label":"Backspace", "x":15.25, "y":3, "w":2}, {"x": 14.25, "y": 3},
{"label":"Insert", "x":17.5, "y":3}, {"x": 15.25, "y": 3, "w": 2},
{"label":"Home", "x":18.5, "y":3},
{"label":"Page Up", "x":19.5, "y":3}, {"x": 17.5, "y": 3},
{"label":"Num Lock", "x":20.75, "y":3}, {"x": 18.5, "y": 3},
{"label":"/", "x":21.75, "y":3}, {"x": 19.5, "y": 3},
{"label":"*", "x":22.75, "y":3},
{"label":"-", "x":23.75, "y":3}, {"x": 20.75, "y": 3},
{"x": 21.75, "y": 3},
{"x": 22.75, "y": 3},
{"x": 23.75, "y": 3},
{"x": 0, "y": 4}, {"x": 0, "y": 4},
{"x": 1, "y": 4}, {"x": 1, "y": 4},
{"label":"Tab", "x":2.25, "y":4, "w":1.5},
{"label":"Q", "x":3.75, "y":4}, {"x": 2.25, "y": 4, "w": 1.5},
{"label":"W", "x":4.75, "y":4}, {"x": 3.75, "y": 4},
{"label":"E", "x":5.75, "y":4}, {"x": 4.75, "y": 4},
{"label":"R", "x":6.75, "y":4}, {"x": 5.75, "y": 4},
{"label":"T", "x":7.75, "y":4}, {"x": 6.75, "y": 4},
{"label":"Y", "x":8.75, "y":4}, {"x": 7.75, "y": 4},
{"label":"U", "x":9.75, "y":4}, {"x": 8.75, "y": 4},
{"label":"I", "x":10.75, "y":4}, {"x": 9.75, "y": 4},
{"label":"O", "x":11.75, "y":4}, {"x": 10.75, "y": 4},
{"label":"P", "x":12.75, "y":4}, {"x": 11.75, "y": 4},
{"label":"[", "x":13.75, "y":4}, {"x": 12.75, "y": 4},
{"label":"]", "x":14.75, "y":4}, {"x": 13.75, "y": 4},
{"label":"Enter", "x":16, "y":4, "w":1.25, "h":2}, {"x": 14.75, "y": 4},
{"label":"Delete", "x":17.5, "y":4}, {"x": 16, "y": 4, "w": 1.25, "h": 2},
{"label":"End", "x":18.5, "y":4},
{"label":"Page Down", "x":19.5, "y":4}, {"x": 17.5, "y": 4},
{"label":"7", "x":20.75, "y":4}, {"x": 18.5, "y": 4},
{"label":"8", "x":21.75, "y":4}, {"x": 19.5, "y": 4},
{"label":"9", "x":22.75, "y":4},
{"label":"+", "x":23.75, "y":4}, {"x": 20.75, "y": 4},
{"x": 21.75, "y": 4},
{"x": 22.75, "y": 4},
{"x": 23.75, "y": 4},
{"x": 0, "y": 5}, {"x": 0, "y": 5},
{"x": 1, "y": 5}, {"x": 1, "y": 5},
{"label":"Caps Lock", "x":2.25, "y":5, "w":1.75},
{"label":"A", "x":4, "y":5}, {"x": 2.25, "y": 5, "w": 1.75},
{"label":"S", "x":5, "y":5}, {"x": 4, "y": 5},
{"label":"D", "x":6, "y":5}, {"x": 5, "y": 5},
{"label":"F", "x":7, "y":5}, {"x": 6, "y": 5},
{"label":"G", "x":8, "y":5}, {"x": 7, "y": 5},
{"label":"H", "x":9, "y":5}, {"x": 8, "y": 5},
{"label":"J", "x":10, "y":5}, {"x": 9, "y": 5},
{"label":"K", "x":11, "y":5}, {"x": 10, "y": 5},
{"label":"L", "x":12, "y":5}, {"x": 11, "y": 5},
{"label":";", "x":13, "y":5}, {"x": 12, "y": 5},
{"label":"'", "x":14, "y":5}, {"x": 13, "y": 5},
{"label":"#", "x":15, "y":5}, {"x": 14, "y": 5},
{"label":"Up", "x":18.5, "y":5}, {"x": 15, "y": 5},
{"label":"4", "x":20.75, "y":5},
{"label":"5", "x":21.75, "y":5}, {"x": 18.5, "y": 5},
{"label":"6", "x":22.75, "y":5},
{"x": 20.75, "y": 5},
{"x": 21.75, "y": 5},
{"x": 22.75, "y": 5},
{"x": 23.75, "y": 5}, {"x": 23.75, "y": 5},
{"x": 0, "y": 6}, {"x": 0, "y": 6},
{"x": 1, "y": 6}, {"x": 1, "y": 6},
{"label":"Shift", "x":2.25, "y":6, "w":1.25},
{"label":"\\", "x":3.5, "y":6}, {"x": 2.25, "y": 6, "w": 1.25},
{"label":"Z", "x":4.5, "y":6}, {"x": 3.5, "y": 6},
{"label":"X", "x":5.5, "y":6}, {"x": 4.5, "y": 6},
{"label":"C", "x":6.5, "y":6}, {"x": 5.5, "y": 6},
{"label":"V", "x":7.5, "y":6}, {"x": 6.5, "y": 6},
{"label":"B", "x":8.5, "y":6}, {"x": 7.5, "y": 6},
{"label":"N", "x":9.5, "y":6}, {"x": 8.5, "y": 6},
{"label":"M", "x":10.5, "y":6}, {"x": 9.5, "y": 6},
{"label":",", "x":11.5, "y":6}, {"x": 10.5, "y": 6},
{"label":".", "x":12.5, "y":6}, {"x": 11.5, "y": 6},
{"label":"/", "x":13.5, "y":6}, {"x": 12.5, "y": 6},
{"label":"Shift", "x":14.5, "y":6, "w":2.75}, {"x": 13.5, "y": 6},
{"label":"Left", "x":17.5, "y":6}, {"x": 14.5, "y": 6, "w": 2.75},
{"x": 17.5, "y": 6},
{"x": 18.5, "y": 6}, {"x": 18.5, "y": 6},
{"label":"Right", "x":19.5, "y":6}, {"x": 19.5, "y": 6},
{"label":"1", "x":20.75, "y":6},
{"label":"2", "x":21.75, "y":6}, {"x": 20.75, "y": 6},
{"label":"3", "x":22.75, "y":6}, {"x": 21.75, "y": 6},
{"label":"Enter", "x":23.75, "y":6, "h":2}, {"x": 22.75, "y": 6},
{"x": 23.75, "y": 6, "h": 2},
{"x": 0, "y": 7}, {"x": 0, "y": 7},
{"x": 1, "y": 7}, {"x": 1, "y": 7},
{"label":"Ctrl", "x":2.25, "y":7, "w":1.5},
{"label":"Alt", "x":4.75, "y":7, "w":1.5}, {"x": 2.25, "y": 7, "w": 1.5},
{"x": 4.75, "y": 7, "w": 1.5},
{"x": 6.25, "y": 7, "w": 7}, {"x": 6.25, "y": 7, "w": 7},
{"label":"AltGr", "x":13.25, "y":7, "w":1.5}, {"x": 13.25, "y": 7, "w": 1.5},
{"label":"Ctrl", "x":15.75, "y":7, "w":1.5},
{"label":"Down", "x":18.5, "y":7}, {"x": 15.75, "y": 7, "w": 1.5},
{"label":"0", "x":20.75, "y":7, "w":2},
{"label":".", "x":22.75, "y":7} {"x": 18.5, "y": 7},
{"x": 20.75, "y": 7, "w": 2},
{"x": 22.75, "y": 7}
] ]
} }
} }

View file

@ -30,45 +30,49 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( [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_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_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_ESC, KC_PGUP, KC_PGDN, KC_NLCK, KC_SLCK, 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_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_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, 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,
MO(10), KC_LGUI, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT MO(2), KC_LGUI, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
), ),
// PC/3270 layout: 3270 legends (black), with x3270 keycodes // PC/3270 layout: 3270 legends (black), with x3270 keycodes
[1] = LAYOUT( [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), 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, 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, A(KC_1), A(KC_2), JM_JUMP, KC_NO, KC_NO, 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_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, 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, 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,
MO(10), KC_LGUI, A(KC_R), KC_LALT, KC_SPC, KC_RALT, KC_ENT, KC_DOWN, KC_P0, KC_PDOT MO(2), KC_LGUI, A(KC_R), KC_LALT, KC_SPC, KC_RALT, KC_ENT, KC_DOWN, KC_P0, KC_PDOT
), ),
// Function layer, accessed by the Zoom key // Function layer, accessed by the Zoom key
[10] = LAYOUT( [2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
DF(0), DF(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), DF(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, MO(3), _______, _______, _______, _______, _______
), ),
// Firmware layer, accessed by the Zoom/Space key pair (hold both down) // Firmware layer, accessed by the Zoom/Space key pair (hold both down)
[11] = LAYOUT( [3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DEBUG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
}; };
bool left_shift_down = false; bool left_shift_down = false;
@ -79,80 +83,50 @@ bool right_alt_down = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case KC_LSHIFT: case KC_LSHIFT:
if (record->event.pressed) { left_shift_down = record->event.pressed;
left_shift_down = true;
return true;
} else {
left_shift_down = false;
return true;
}
break; break;
case KC_RSHIFT: case KC_RSHIFT:
if (record->event.pressed) { right_shift_down = record->event.pressed;
right_shift_down = true;
return true;
} else {
right_shift_down = false;
return true;
}
break; break;
case KC_LALT: case KC_LALT:
if (record->event.pressed) { left_alt_down = record->event.pressed;
left_alt_down = true;
return true;
} else {
left_alt_down = false;
return true;
}
break; break;
case KC_RALT: case KC_RALT:
if (record->event.pressed) { right_alt_down = record->event.pressed;
right_alt_down = true;
return true;
} else {
right_alt_down = false;
return true;
}
break; break;
case JM_GRLS: case JM_GRLS:
if (left_shift_down || right_shift_down) { if (left_shift_down || right_shift_down) {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING(">"); SEND_STRING(">");
} }
return false;
} else { } else {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("<"); SEND_STRING("<");
} }
return false;
} }
break; return false;
case JM_CBRC: case JM_CBRC:
if (left_shift_down || right_shift_down) { if (left_shift_down || right_shift_down) {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("}"); SEND_STRING("}");
} }
return false;
} else { } else {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("{"); SEND_STRING("{");
} }
return false;
} }
break; return false;
case JM_CENT: case JM_CENT:
if (left_shift_down || right_shift_down) { if (left_shift_down || right_shift_down) {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("!"); SEND_STRING("!");
} }
return false;
} else { } else {
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("<"); // TODO: what does tn3270 want for a cent sign? SEND_STRING("<"); // TODO: what does tn3270 want for a cent sign?
} }
return false;
} }
break; return false;
case JM_COMM: case JM_COMM:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING(","); SEND_STRING(",");
@ -188,6 +162,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
} }
return true; return true;
} }

View file

@ -1,4 +1,5 @@
# Default keymap for m122-3270 # 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 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 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 on the PC/3270 keys (as shipped by Unicomp; I don't have the original keycaps, and I know there are a few

View file

@ -13,4 +13,5 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "m122_3270.h" #include "m122_3270.h"

View file

@ -13,12 +13,13 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#include "quantum.h" #include "quantum.h"
// This a shortcut to help you visually see your layout. #define XXX KC_NO
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \ #define LAYOUT( \
k09, k19, k1A, k29, k39, k3A, k49, k59, k5A, k69, k79, k7A, \ k09, k19, k1A, k29, k39, k3A, k49, k59, k5A, k69, k79, k7A, \
k0A, k0B, k1B, k2A, k2B, k3B, k4A, k4B, k5B, k6A, k6B, k7B, \ k0A, k0B, k1B, k2A, k2B, k3B, k4A, k4B, k5B, k6A, k6B, k7B, \
@ -27,14 +28,13 @@
k51, k52, k62, k14, k15, k16, k17, k07, k08, k18, k1C, k1D, k1E, k0E, k6E, k0G, k1F, k1H, k1I, k10, \ k51, k52, k62, k14, k15, k16, k17, k07, k08, k18, k1C, k1D, k1E, k0E, k6E, k0G, k1F, k1H, k1I, k10, \
k11, k12, k73, k74, k64, k65, k66, k67, k77, k78, k68, k6C, k6D, k7E, k63, k60, k0J, k1J, k61, k6H, k6I, k7J, \ k11, k12, k73, k74, k64, k65, k66, k67, k77, k78, k68, k6C, k6D, k7E, k63, k60, k0J, k1J, k61, k6H, k6I, k7J, \
k02, k01, k00, k70, k71, k03, k72, k0F, k7H, k7I \ k02, k01, k00, k70, k71, k03, k72, k0F, k7H, k7I \
) \ ) { \
{ \ { k00, k01, k02, k03, XXX, XXX, XXX, k07, k08, k09, k0A, k0B, XXX, XXX, k0E, k0F, k0G, XXX, XXX, k0J }, \
{ k00, k01, k02, k03, KC_NO, KC_NO, KC_NO, k07, k08, k09, k0A, k0B, KC_NO, KC_NO, k0E, k0F, k0G, KC_NO, KC_NO, k0J }, \ { k10, k11, k12, XXX, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1J }, \
{ k10, k11, k12, KC_NO, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1J }, \ { k20, k21, XXX, XXX, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, XXX }, \
{ k20, k21, KC_NO, KC_NO, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, KC_NO }, \ { XXX, k31, k32, XXX, k34, XXX, XXX, k37, k38, k39, k3A, k3B, k3C, XXX, k3E, k3F, k3G, k3H, XXX, XXX }, \
{ KC_NO, k31, k32, KC_NO, k34, KC_NO, KC_NO, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, k3F, k3G, k3H, KC_NO, KC_NO }, \ { k40, k41, k42, XXX, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, XXX }, \
{ k40, k41, k42, KC_NO, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, KC_NO }, \ { XXX, k51, k52, XXX, XXX, XXX, XXX, k57, k58, k59, k5A, k5B, k5C, XXX, k5E, XXX, k5G, XXX, XXX, XXX }, \
{ KC_NO, k51, k52, KC_NO, KC_NO, KC_NO, KC_NO, k57, k58, k59, k5A, k5B, k5C, KC_NO, k5E, KC_NO, k5G, KC_NO, KC_NO, KC_NO }, \ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A, k6B, k6C, k6D, k6E, k6F, XXX, k6H, k6I, XXX }, \
{ k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A, k6B, k6C, k6D, k6E, k6F, KC_NO, k6H, k6I, KC_NO }, \ { k70, k71, k72, k73, k74, XXX, XXX, k77, k78, k79, k7A, k7B, XXX, XXX, k7E, XXX, XXX, k7H, k7I, k7J } \
{ k70, k71, k72, k73, k74, KC_NO, KC_NO, k77, k78, k79, k7A, k7B, KC_NO, KC_NO, k7E, KC_NO, KC_NO, k7H, k7I, k7J }, \
} }

View file

@ -2,8 +2,7 @@
![IBM Model M 122 key](https://i.imgur.com/Oo3Ozqzh.jpg) ![IBM Model M 122 key](https://i.imgur.com/Oo3Ozqzh.jpg)
This is a replacement controller for the IBM Model M 122 key terminal keyboard running on a STM32F411 BlackPill, intended This is a replacement controller for the IBM Model M 122 key terminal keyboard running on a STM32F411 BlackPill, intended to act as closely to the 3270 keyboard's functioning as possible while still being usable on a PC.
to act as closely to the 3270 keyboard's functioning as possible while still being usable on a PC.
* Keyboard Maintainer: [Jay Maynard](https://github.com/jmaynard) * Keyboard Maintainer: [Jay Maynard](https://github.com/jmaynard)
* Hardware Supported: BlackPill STM32F411, Teensy++ 2.0 * Hardware Supported: BlackPill STM32F411, Teensy++ 2.0
@ -14,14 +13,10 @@ Make example for this keyboard (after setting up your build environment):
make tronguylabs/m122_3270/blackpill:default make tronguylabs/m122_3270/blackpill:default
make tronguylabs/m122_3270/teensy:default make tronguylabs/m122_3270/teensy:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
[make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
A schematic and Gerber files are publicly available for those wishing to have carrier boards made A schematic and Gerber files are publicly available for those wishing to have carrier boards made
professionally instead of handwiring things. The M122 matrix connectors plug right into it. It can professionally instead of handwiring things. The M122 matrix connectors plug right into it. It can
be found at https://github.com/jmaynard/tronguylabs-m122-blackpill. be found at https://github.com/jmaynard/tronguylabs-m122-blackpill.
This is derived from Luke Stanley's handwired/ibm122m keyboard, with my own keymapping and This is derived from Luke Stanley's handwired/ibm122m keyboard, with my own keymapping and rework of the I/O for the BlackPill. There's also a version for the Teensy++ 2.0, since that was my original design and I still use one on one board, even though I switched to the BlackPill for future-proofing. The Teensy++ 2.0 is not recommended for new designs.
rework of the I/O for the BlackPill. There's also a version for the Teensy++ 2.0, since that
was my original design and I still use one on one board, even though I switched to the
BlackPill for future-proofing. The Teensy++ 2.0 is not recommended for new designs.

View file

@ -1,16 +0,0 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output

View file

@ -16,8 +16,6 @@
#pragma once #pragma once
// place overrides below
// Teensy pin assignments: I'm wiring things a bit more straightforwardly, and // Teensy pin assignments: I'm wiring things a bit more straightforwardly, and
// avoiding the LED on PD6 // avoiding the LED on PD6
#define MATRIX_COL_PINS { B5, B6, B7, D0, D1, D2, D3, D4, D5, D7, E0, E1, C0, C1, C2, C3, C4, C5, C6, C7 } #define MATRIX_COL_PINS { B5, B6, B7, D0, D1, D2, D3, D4, D5, D7, E0, E1, C0, C1, C2, C3, C4, C5, C6, C7 }

View file

@ -1,2 +1,3 @@
# Teensy controller for m122-3270 # Teensy controller for m122-3270
This directory contains the Teensy++ 2.0-specific definitions for the M122-3270 keyboard. This directory contains the Teensy++ 2.0-specific definitions for the M122-3270 keyboard.

View file

@ -1,7 +1,22 @@
# Overrides for the Teensy version
# MCU name # MCU name
MCU = at90usb1286 MCU = at90usb1286
# Bootloader selection # Bootloader selection
BOOTLOADER = halfkay BOOTLOADER = halfkay
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output