[Keyboard] Improvements to m122_3270 (#13947)
Co-authored-by: Jay Maynard <jmaynard@conmicro.com>
This commit is contained in:
		
							parent
							
								
									71ce2b0d79
								
							
						
					
					
						commit
						710d37b3eb
					
				
					 6 changed files with 141 additions and 14 deletions
				
			
		
							
								
								
									
										29
									
								
								keyboards/tronguylabs/m122_3270/bluepill/chconf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								keyboards/tronguylabs/m122_3270/bluepill/chconf.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * 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 <chconf.h>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								keyboards/tronguylabs/m122_3270/bluepill/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								keyboards/tronguylabs/m122_3270/bluepill/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
/* Copyright 2021 James R. Maynard III <jaymaynard@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * 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 <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
							
								
								
									
										2
									
								
								keyboards/tronguylabs/m122_3270/bluepill/readme.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								keyboards/tronguylabs/m122_3270/bluepill/readme.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
# BluePill controller for m122-3270
 | 
			
		||||
This directory contains the BluePill-specific definitions for the M122-3270 keyboard.
 | 
			
		||||
							
								
								
									
										7
									
								
								keyboards/tronguylabs/m122_3270/bluepill/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								keyboards/tronguylabs/m122_3270/bluepill/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
# Overrides for the Bluepill version
 | 
			
		||||
 | 
			
		||||
# MCU name
 | 
			
		||||
MCU = STM32F103
 | 
			
		||||
 | 
			
		||||
# Bootloader selection
 | 
			
		||||
BOOTLOADER = stm32duino
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 \
 | 
			
		||||
 Ctrl<Key>F: FieldMark()\n\
 | 
			
		||||
 Ctrl<Key>D: Dup()
 | 
			
		||||
```
 | 
			
		||||
You need to then invoke `x3270` with the parameter `-keymap m122` to activate those definitions.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue