From 64370175454328cd60c9e029abd0171dd63357cb Mon Sep 17 00:00:00 2001 From: listofoptions Date: Wed, 3 Oct 2018 10:41:10 -0400 Subject: [PATCH 01/16] compiles but is not working --- keyboards/converter/5291/5291.c | 3 + keyboards/converter/5291/5291.h | 69 +++++ keyboards/converter/5291/config.h | 42 +++ keyboards/converter/5291/info.json | 6 + .../converter/5291/keymaps/default/keymap.c | 233 +++++++++++++++ .../5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf | Bin 0 -> 13054 bytes keyboards/converter/5291/matrix.c | 281 ++++++++++++++++++ keyboards/converter/5291/matrix.csv | 96 ++++++ keyboards/converter/5291/readme.md | 19 ++ keyboards/converter/5291/rules.mk | 72 +++++ .../hp_46010a/keymaps/default/keymap.c | 2 +- 11 files changed, 822 insertions(+), 1 deletion(-) create mode 100644 keyboards/converter/5291/5291.c create mode 100644 keyboards/converter/5291/5291.h create mode 100644 keyboards/converter/5291/config.h create mode 100644 keyboards/converter/5291/info.json create mode 100644 keyboards/converter/5291/keymaps/default/keymap.c create mode 100644 keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf create mode 100644 keyboards/converter/5291/matrix.c create mode 100644 keyboards/converter/5291/matrix.csv create mode 100644 keyboards/converter/5291/readme.md create mode 100644 keyboards/converter/5291/rules.mk diff --git a/keyboards/converter/5291/5291.c b/keyboards/converter/5291/5291.c new file mode 100644 index 000000000000..55121ed4f698 --- /dev/null +++ b/keyboards/converter/5291/5291.c @@ -0,0 +1,3 @@ +#include "5291.h" +#include +#include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/5291/5291.h new file mode 100644 index 000000000000..e6cbd2e71596 --- /dev/null +++ b/keyboards/converter/5291/5291.h @@ -0,0 +1,69 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "quantum.h" + +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ + +#define LAYOUT_5291( \ + KEY_F1,KEY_F2, KEY_ESC, KEY_1, KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_0, KEY_MIN, KEY_EQU, KEY_BACK, KEY_NLOCK, KEY_SLOCK, \ + KEY_F3,KEY_F4, KEY_TAB, KEY_Q, KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O, KEY_P, KEY_LBRC,KEY_RBRC, KEY_PAD7,KEY_PAD8, KEY_PAD9,KEY_PMIN, \ + KEY_F5,KEY_F6, KEY_LCTR,KEY_A, KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_SEMI,KEY_QUOT,KEY_TICK, KEY_ENTR,KEY_PAD4,KEY_PAD5, KEY_PAD6, \ + KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \ + KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \ +) \ +{ {KEY_3, KEY_W, KEY_S, KEY_Z }\ +, {KEY_4, KEY_E, KEY_D, KEY_X }\ +, {KEY_5, KEY_R, KEY_F, KEY_C }\ +, {KEY_6, KEY_T, KEY_G, KEY_V }\ +, {KEY_7, KEY_Y, KEY_H, KEY_B }\ +, {KEY_8, KEY_U, KEY_J, KEY_N }\ +, {KEY_NLOCK,KEY_PAD8,KEY_PAD5,KEY_PAD2 }\ +, {KEY_9, KEY_I, KEY_K, KEY_M }\ +, {KEY_0, KEY_O, KEY_L, KEY_COMM }\ +, {KEY_MIN, KEY_P, KEY_SEMI,KEY_DOT }\ +, {KEY_EQU, KEY_LBRC,KEY_QUOT,KEY_SLS }\ +, {KEY_RBRC, KEY_TICK,KEY_RSFS,KEY_SPACE }\ +, {KEY_BACK, KEY_ENTR,KEY_PAST,KEY_CLOCK }\ +, {KEY_PAD7, KEY_PAD4,KEY_PAD1,KEY_PAD0 }\ +, {KEY_SLOCK,KEY_PMIN,KC_NO, KEY_PPLS }\ +, {KEY_PAD9, KEY_PAD6,KEY_PAD3,KEY_PDOT }\ +, {KEY_2, KEY_Q, KEY_A, KEY_BSLS }\ +, {KEY_1, KC_NO, KC_NO, KEY_LALT }\ +, {KEY_F1, KEY_F3, KEY_F5, KEY_F7 }\ +, {KEY_F2, KEY_F4, KEY_F6, KEY_F8 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F10 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F9 }\ +, {KEY_ESC, KEY_TAB, KEY_LCTR,KEY_LSFS }\ +, {KC_NO, KC_NO, KC_NO, KC_NO }\ +} + +#define LAYOUT LAYOUT_5291 \ No newline at end of file diff --git a/keyboards/converter/5291/config.h b/keyboards/converter/5291/config.h new file mode 100644 index 000000000000..5c9ca1e4a976 --- /dev/null +++ b/keyboards/converter/5291/config.h @@ -0,0 +1,42 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "config_common.h" + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 1 +#define MANUFACTURER QMK +#define PRODUCT 5291 keyboard converter +#define DESCRIPTION 5291 keyboard converter + +#define MATRIX_ROWS 24 +#define MATRIX_COLS 4 + +#define MATRIX_ROW_PINS {B2, B3, B4, B5, B6} +#define MATRIX_COL_PINS {B0, B1} +#define MATRIX_DATA_PIN D0 +#define MATRIX_STROBE_PIN D1 +#define LED_PIN D6 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 0 + + diff --git a/keyboards/converter/5291/info.json b/keyboards/converter/5291/info.json new file mode 100644 index 000000000000..b7283d8af90d --- /dev/null +++ b/keyboards/converter/5291/info.json @@ -0,0 +1,6 @@ +{ + "keyboard_name": "5291", + "keyboard_folder": "converter/5291", + "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", + "maintainer": "listofoptions", +} diff --git a/keyboards/converter/5291/keymaps/default/keymap.c b/keyboards/converter/5291/keymaps/default/keymap.c new file mode 100644 index 000000000000..9b286c887d61 --- /dev/null +++ b/keyboards/converter/5291/keymaps/default/keymap.c @@ -0,0 +1,233 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include QMK_KEYBOARD_H +/* +enum xt_keycodes + { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen + , XT_SLCK // XT scroll lock / break + , XT_F6 // F6 / app key + , XT_F5 // F5 / gui + , XT_F9 // F9 / F11 + , XT_F10 // F10 / F12 + } ; + +static bool shift_pressed = false , + alt_pressed = false , + ctrl_pressed = false , + xt_pscr_pressed = false , + xt_brk_pressed = false , + xt_app_pressed = false , + xt_gui_pressed = false , + xt_lout_pressed = false , + xt_f11_pressed = false , + xt_f12_pressed = false ; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true ; + } else { + shift_pressed = false ; + } + return true; + break; + + case KC_LALT: + if (record->event.pressed) { + alt_pressed = true ; + } else { + alt_pressed = false ; + } + return true; + break; + + case KC_LCTL: + if (record->event.pressed) { + ctrl_pressed = true ; + } else { + ctrl_pressed = false ; + } + return true; + break; + + case XT_PAST: + if (record->event.pressed) { + if (shift_pressed) { + xt_pscr_pressed = true ; + register_code(KC_PSCR); + } else { + register_code(KC_PAST); + } + } else { + if (xt_pscr_pressed) { + xt_pscr_pressed = false ; + unregister_code(KC_PSCR); + } else { + unregister_code(KC_PAST); + } + } + return false; + break; + + case XT_SLCK: + if (record->event.pressed) { + if (ctrl_pressed) { + xt_brk_pressed = true ; + register_code(KC_BRK); + } else { + register_code(KC_SLCK); + } + } else { + if (xt_brk_pressed) { + xt_brk_pressed = false ; + unregister_code(KC_BRK); + } else { + unregister_code(KC_SLCK); + } + } + return false; + break; + + case XT_F6: + if (record->event.pressed) { + if (shift_pressed) { + xt_app_pressed = true ; + register_code(KC_APP); + } else { + register_code(KC_F6); + } + } else { + if (xt_app_pressed) { + xt_app_pressed = false ; + unregister_code(KC_APP); + } else { + unregister_code(KC_F6); + } + } + return false; + break; + + case XT_F5: + if (record->event.pressed) { + if (shift_pressed) { + xt_gui_pressed = true ; + register_code(KC_LGUI); + } else if (ctrl_pressed) { + xt_lout_pressed = true ; + register_code (KC_LGUI) ; + register_code (KC_L) ; + } else { + register_code(KC_F5); + } + } else { + if (xt_gui_pressed) { + xt_gui_pressed = false ; + unregister_code(KC_LGUI); + } else if (xt_lout_pressed) { + xt_lout_pressed = false ; + unregister_code (KC_LGUI) ; + unregister_code (KC_L) ; + } else { + unregister_code(KC_F5); + } + } + return false; + break; + + case XT_F9: + if (record->event.pressed) { + if (shift_pressed) { + xt_f11_pressed = true ; + register_code(KC_F11); + } else { + register_code(KC_F9); + } + } else { + if (xt_f11_pressed) { + xt_f11_pressed = false ; + unregister_code(KC_F11); + } else { + unregister_code(KC_F9); + } + } + return false; + break; + + case XT_F10: + if (record->event.pressed) { + if (shift_pressed) { + xt_f12_pressed = true ; + register_code(KC_F12); + } else { + register_code(KC_F10); + } + } else { + if (xt_f12_pressed) { + xt_f12_pressed = false ; + unregister_code(KC_F12); + } else { + unregister_code(KC_F10); + } + } + return false; + break; + + default: + return true; + break; + } + + return true; +} +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// default layout is the standard XT layout +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ +/* + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, XT_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + XT_F5,XT_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +*/ + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, KC_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + KC_F5,KC_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +} ; + diff --git a/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3560598f02b8bacc12ef9426875a5b7076e32eab GIT binary patch literal 13054 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 literal 0 HcmV?d00001 diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c new file mode 100644 index 000000000000..5b99973c8012 --- /dev/null +++ b/keyboards/converter/5291/matrix.c @@ -0,0 +1,281 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include +#include +#include +#if defined(__AVR__) +#include +#endif +#include + +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "timer.h" + +#include "config.h" + + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#define print_matrix_header() print("\nr/c 01234567\n") +#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +#define matrix_bitpop(i) bitpop(matrix[i]) +#define ROW_SHIFTER ((uint8_t)1) +#define check_bit(var,pos) ((var) & (1<<(pos))) + +static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [2] = MATRIX_COL_PINS ; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint16_t debouncing_time ; +static bool debouncing = false ; +#endif + +static uint8_t matrix [MATRIX_ROWS] = {0}; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint8_t matrix_debounce [MATRIX_ROWS] = {0}; +#endif + +static +inline +void toggle_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW +} + +static +inline +void init_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_data(void) { + uint8_t pin = MATRIX_DATA_PIN ; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LO +} + +static +inline +void init_strobe(void) { + uint8_t pin = MATRIX_STROBE_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_rows(void) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void init_cols(void) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void select_row(uint8_t current_row) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i] ; + if ( check_bit( current_row, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +void select_col(uint8_t current_col) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i] ; + if ( check_bit( current_col, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +uint8_t matrix_strobe(uint8_t col_index) { + uint8_t strobe_pin = MATRIX_STROBE_PIN ; + uint8_t data_pin = MATRIX_DATA_PIN ; + + // set strobe pin high + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + + wait_us(30) ; + + // read data + uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; + + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + + uint8_t out = data ? (1 << col_index) : 0 ; + return out ; +} + +static +bool matrix_read(uint8_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + uint8_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + select_row(current_row); + + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; ++col_index) { + + select_col(col_index) ; + + // strobe the matrix + // Populate the matrix row with the state of the data pin + current_matrix[current_row] |= matrix_strobe(col_index) ; + } + + bool test = last_row_value != current_matrix[current_row] ; + return test ; +} + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +inline +uint8_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +void matrix_init(void) { + init_led() ; + init_rows() ; + init_cols() ; + init_data() ; + init_strobe() ; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; +# if (DEBOUNCING_DELAY > 0) + matrix_debounce [i] = 0; +# endif + } + + matrix_init_quantum() ; +} + +uint8_t matrix_scan(void) { + for ( uint8_t current_row = 0; current_row < MATRIX_ROWS; ++current_row ) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = matrix_read(matrix_debounce, current_row); + + if (matrix_changed) { + debouncing = true ; + debouncing_time = timer_read(); + } + +# else + matrix_read(matrix, current_row); +# endif + } + +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debounce[i]; + } + debouncing = false; + } +# endif + + matrix_scan_quantum(); + return 1; +} + +void matrix_print(void) { + print_matrix_header(); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + phex(row); print(": "); + print_matrix_row(row); + print("\n"); + } +} diff --git a/keyboards/converter/5291/matrix.csv b/keyboards/converter/5291/matrix.csv new file mode 100644 index 000000000000..40462c2143ef --- /dev/null +++ b/keyboards/converter/5291/matrix.csv @@ -0,0 +1,96 @@ +0,Z +1,S +2,W +3,3 +4,X +5,D +6,E +7,4 +8,C +9,F +10,R +11,5 +12,V +13,G +14,T +15,6 +16,B +17,H +18,Y +19,7 +20,N +21,J +22,U +23,8 +24,PAD_2 +25,PAD_5 +26,PAD_8 +27,NUM_LOCK +28,M +29,K +30,I +31,9 +32,COMMA +33,L +34,O +35,0 +36,PERIOD +37,SEMICOLON +38,P +39,MINUS +40,SLASH +41,QUOTE +42,LEFT_BRACE +43,EQUAL +44,SPACE +45,RSHIFT +46,BACK_QUOTE +47,RIGHT_BRACE +48,CAPS_LOCK +49,PAD_ASTERIX +50,ENTER +51,BACKSPACE +52,PAD_0 +53,PAD_1 +54,PAD_4 +55,PAD_7 +56,PAD_PLUS +57,UNASSIGNED +58,PAD_MINUS +59,SCROLL_LOCK +60,PAD_PERIOD +61,PAD_3 +62,PAD_6 +63,PAD_9 +64,BACKSLASH +65,A +66,Q +67,2 +68,LALT +69,UNASSIGNED +70,UNASSIGNED +71,1 +72,F7 +73,F5 +74,F3 +75,F1 +76,F8 +77,F6 +78,F4 +79,F2 +80,F10 +81,UNASSIGNED +82,UNASSIGNED +83,UNASSIGNED +84,F9 +85,UNASSIGNED +86,UNASSIGNED +87,UNASSIGNED +88,LSHIFT +89,LCTRL +90,TAB +91,ESC +92,UNASSIGNED +93,UNASSIGNED +94,UNASSIGNED +95,UNASSIGNED diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md new file mode 100644 index 000000000000..17dfa931b1c9 --- /dev/null +++ b/keyboards/converter/5291/readme.md @@ -0,0 +1,19 @@ +# IBM 5291 keyboard converter + +![5291](https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard) + +A converter for the eponymous keyboard. + +Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions) +Hardware Supported: IBM 5291, Teensy 2.0 + +Make example for this keyboard (after setting up your build environment): + + make converter/5291:default + +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). + +to get a matrix created if your board uses a different one (i used the US layout) please see the following gists: +for the matrix itself: + +the pinout is as follows: diff --git a/keyboards/converter/5291/rules.mk b/keyboards/converter/5291/rules.mk new file mode 100644 index 000000000000..ca0c850c0bab --- /dev/null +++ b/keyboards/converter/5291/rules.mk @@ -0,0 +1,72 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# 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 = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = halfkay + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no +SPLIT_KEYBOARD = no +WAIT_FOR_USB = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +LAYOUTS_HAS_RGB = NO + +CUSTOM_MATRIX = yes +SRC = matrix.c \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c index cb65bd422e51..ef66f3fe39b5 100644 --- a/keyboards/converter/hp_46010a/keymaps/default/keymap.c +++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' `-------------------' */ - [0] = LAYOUT( + [0] = LAYOUT ( KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \ 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_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \ From 55e09c9dd091f84c8259eff76d73aeda6e8a45cb Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sat, 24 Nov 2018 00:42:06 -0500 Subject: [PATCH 02/16] still testing 5291 --- keyboards/converter/5291/matrix.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c index 5b99973c8012..f79aef3e6034 100644 --- a/keyboards/converter/5291/matrix.c +++ b/keyboards/converter/5291/matrix.c @@ -43,8 +43,11 @@ along with this program. If not, see . #define ROW_SHIFTER ((uint8_t)1) #define check_bit(var,pos) ((var) & (1<<(pos))) -static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; -static const uint8_t col_pins [2] = MATRIX_COL_PINS ; +#define NUM_ROW_PINS 5 +#define NUM_COL_PINS 2 + +static const uint8_t row_pins [NUM_ROW_PINS] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [NUM_ROW_PINS] = MATRIX_COL_PINS ; #if ( DEBOUNCING_DELAY > 0 ) static uint16_t debouncing_time ; @@ -61,7 +64,7 @@ static inline void toggle_led(void) { uint8_t pin = LED_PIN ; - _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); } static @@ -85,13 +88,13 @@ inline void init_strobe(void) { uint8_t pin = MATRIX_STROBE_PIN ; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } static inline void init_rows(void) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -101,7 +104,7 @@ void init_rows(void) { static inline void init_cols(void) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -111,7 +114,7 @@ void init_cols(void) { static inline void select_row(uint8_t current_row) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i] ; if ( check_bit( current_row, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -125,7 +128,7 @@ void select_row(uint8_t current_row) { static inline void select_col(uint8_t current_col) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i] ; if ( check_bit( current_col, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -142,16 +145,16 @@ uint8_t matrix_strobe(uint8_t col_index) { uint8_t strobe_pin = MATRIX_STROBE_PIN ; uint8_t data_pin = MATRIX_DATA_PIN ; - // set strobe pin high - _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); wait_us(30) ; // read data uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; - // set strobe pin low - _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + // set strobe pin hi + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); uint8_t out = data ? (1 << col_index) : 0 ; return out ; @@ -232,7 +235,7 @@ void matrix_init(void) { init_strobe() ; // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = 0; # if (DEBOUNCING_DELAY > 0) matrix_debounce [i] = 0; From a10ce19a9180205b09ebf88598daa6493cf1e183 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Wed, 3 Oct 2018 10:41:10 -0400 Subject: [PATCH 03/16] compiles but is not working --- keyboards/converter/5291/5291.c | 3 + keyboards/converter/5291/5291.h | 69 +++++ keyboards/converter/5291/config.h | 42 +++ keyboards/converter/5291/info.json | 6 + .../converter/5291/keymaps/default/keymap.c | 233 +++++++++++++++ .../5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf | Bin 0 -> 13054 bytes keyboards/converter/5291/matrix.c | 281 ++++++++++++++++++ keyboards/converter/5291/matrix.csv | 96 ++++++ keyboards/converter/5291/readme.md | 19 ++ keyboards/converter/5291/rules.mk | 72 +++++ .../hp_46010a/keymaps/default/keymap.c | 2 +- 11 files changed, 822 insertions(+), 1 deletion(-) create mode 100644 keyboards/converter/5291/5291.c create mode 100644 keyboards/converter/5291/5291.h create mode 100644 keyboards/converter/5291/config.h create mode 100644 keyboards/converter/5291/info.json create mode 100644 keyboards/converter/5291/keymaps/default/keymap.c create mode 100644 keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf create mode 100644 keyboards/converter/5291/matrix.c create mode 100644 keyboards/converter/5291/matrix.csv create mode 100644 keyboards/converter/5291/readme.md create mode 100644 keyboards/converter/5291/rules.mk diff --git a/keyboards/converter/5291/5291.c b/keyboards/converter/5291/5291.c new file mode 100644 index 000000000000..55121ed4f698 --- /dev/null +++ b/keyboards/converter/5291/5291.c @@ -0,0 +1,3 @@ +#include "5291.h" +#include +#include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/5291/5291.h new file mode 100644 index 000000000000..e6cbd2e71596 --- /dev/null +++ b/keyboards/converter/5291/5291.h @@ -0,0 +1,69 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "quantum.h" + +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ + +#define LAYOUT_5291( \ + KEY_F1,KEY_F2, KEY_ESC, KEY_1, KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_0, KEY_MIN, KEY_EQU, KEY_BACK, KEY_NLOCK, KEY_SLOCK, \ + KEY_F3,KEY_F4, KEY_TAB, KEY_Q, KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O, KEY_P, KEY_LBRC,KEY_RBRC, KEY_PAD7,KEY_PAD8, KEY_PAD9,KEY_PMIN, \ + KEY_F5,KEY_F6, KEY_LCTR,KEY_A, KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_SEMI,KEY_QUOT,KEY_TICK, KEY_ENTR,KEY_PAD4,KEY_PAD5, KEY_PAD6, \ + KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \ + KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \ +) \ +{ {KEY_3, KEY_W, KEY_S, KEY_Z }\ +, {KEY_4, KEY_E, KEY_D, KEY_X }\ +, {KEY_5, KEY_R, KEY_F, KEY_C }\ +, {KEY_6, KEY_T, KEY_G, KEY_V }\ +, {KEY_7, KEY_Y, KEY_H, KEY_B }\ +, {KEY_8, KEY_U, KEY_J, KEY_N }\ +, {KEY_NLOCK,KEY_PAD8,KEY_PAD5,KEY_PAD2 }\ +, {KEY_9, KEY_I, KEY_K, KEY_M }\ +, {KEY_0, KEY_O, KEY_L, KEY_COMM }\ +, {KEY_MIN, KEY_P, KEY_SEMI,KEY_DOT }\ +, {KEY_EQU, KEY_LBRC,KEY_QUOT,KEY_SLS }\ +, {KEY_RBRC, KEY_TICK,KEY_RSFS,KEY_SPACE }\ +, {KEY_BACK, KEY_ENTR,KEY_PAST,KEY_CLOCK }\ +, {KEY_PAD7, KEY_PAD4,KEY_PAD1,KEY_PAD0 }\ +, {KEY_SLOCK,KEY_PMIN,KC_NO, KEY_PPLS }\ +, {KEY_PAD9, KEY_PAD6,KEY_PAD3,KEY_PDOT }\ +, {KEY_2, KEY_Q, KEY_A, KEY_BSLS }\ +, {KEY_1, KC_NO, KC_NO, KEY_LALT }\ +, {KEY_F1, KEY_F3, KEY_F5, KEY_F7 }\ +, {KEY_F2, KEY_F4, KEY_F6, KEY_F8 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F10 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F9 }\ +, {KEY_ESC, KEY_TAB, KEY_LCTR,KEY_LSFS }\ +, {KC_NO, KC_NO, KC_NO, KC_NO }\ +} + +#define LAYOUT LAYOUT_5291 \ No newline at end of file diff --git a/keyboards/converter/5291/config.h b/keyboards/converter/5291/config.h new file mode 100644 index 000000000000..5c9ca1e4a976 --- /dev/null +++ b/keyboards/converter/5291/config.h @@ -0,0 +1,42 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "config_common.h" + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 1 +#define MANUFACTURER QMK +#define PRODUCT 5291 keyboard converter +#define DESCRIPTION 5291 keyboard converter + +#define MATRIX_ROWS 24 +#define MATRIX_COLS 4 + +#define MATRIX_ROW_PINS {B2, B3, B4, B5, B6} +#define MATRIX_COL_PINS {B0, B1} +#define MATRIX_DATA_PIN D0 +#define MATRIX_STROBE_PIN D1 +#define LED_PIN D6 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 0 + + diff --git a/keyboards/converter/5291/info.json b/keyboards/converter/5291/info.json new file mode 100644 index 000000000000..b7283d8af90d --- /dev/null +++ b/keyboards/converter/5291/info.json @@ -0,0 +1,6 @@ +{ + "keyboard_name": "5291", + "keyboard_folder": "converter/5291", + "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", + "maintainer": "listofoptions", +} diff --git a/keyboards/converter/5291/keymaps/default/keymap.c b/keyboards/converter/5291/keymaps/default/keymap.c new file mode 100644 index 000000000000..9b286c887d61 --- /dev/null +++ b/keyboards/converter/5291/keymaps/default/keymap.c @@ -0,0 +1,233 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include QMK_KEYBOARD_H +/* +enum xt_keycodes + { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen + , XT_SLCK // XT scroll lock / break + , XT_F6 // F6 / app key + , XT_F5 // F5 / gui + , XT_F9 // F9 / F11 + , XT_F10 // F10 / F12 + } ; + +static bool shift_pressed = false , + alt_pressed = false , + ctrl_pressed = false , + xt_pscr_pressed = false , + xt_brk_pressed = false , + xt_app_pressed = false , + xt_gui_pressed = false , + xt_lout_pressed = false , + xt_f11_pressed = false , + xt_f12_pressed = false ; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true ; + } else { + shift_pressed = false ; + } + return true; + break; + + case KC_LALT: + if (record->event.pressed) { + alt_pressed = true ; + } else { + alt_pressed = false ; + } + return true; + break; + + case KC_LCTL: + if (record->event.pressed) { + ctrl_pressed = true ; + } else { + ctrl_pressed = false ; + } + return true; + break; + + case XT_PAST: + if (record->event.pressed) { + if (shift_pressed) { + xt_pscr_pressed = true ; + register_code(KC_PSCR); + } else { + register_code(KC_PAST); + } + } else { + if (xt_pscr_pressed) { + xt_pscr_pressed = false ; + unregister_code(KC_PSCR); + } else { + unregister_code(KC_PAST); + } + } + return false; + break; + + case XT_SLCK: + if (record->event.pressed) { + if (ctrl_pressed) { + xt_brk_pressed = true ; + register_code(KC_BRK); + } else { + register_code(KC_SLCK); + } + } else { + if (xt_brk_pressed) { + xt_brk_pressed = false ; + unregister_code(KC_BRK); + } else { + unregister_code(KC_SLCK); + } + } + return false; + break; + + case XT_F6: + if (record->event.pressed) { + if (shift_pressed) { + xt_app_pressed = true ; + register_code(KC_APP); + } else { + register_code(KC_F6); + } + } else { + if (xt_app_pressed) { + xt_app_pressed = false ; + unregister_code(KC_APP); + } else { + unregister_code(KC_F6); + } + } + return false; + break; + + case XT_F5: + if (record->event.pressed) { + if (shift_pressed) { + xt_gui_pressed = true ; + register_code(KC_LGUI); + } else if (ctrl_pressed) { + xt_lout_pressed = true ; + register_code (KC_LGUI) ; + register_code (KC_L) ; + } else { + register_code(KC_F5); + } + } else { + if (xt_gui_pressed) { + xt_gui_pressed = false ; + unregister_code(KC_LGUI); + } else if (xt_lout_pressed) { + xt_lout_pressed = false ; + unregister_code (KC_LGUI) ; + unregister_code (KC_L) ; + } else { + unregister_code(KC_F5); + } + } + return false; + break; + + case XT_F9: + if (record->event.pressed) { + if (shift_pressed) { + xt_f11_pressed = true ; + register_code(KC_F11); + } else { + register_code(KC_F9); + } + } else { + if (xt_f11_pressed) { + xt_f11_pressed = false ; + unregister_code(KC_F11); + } else { + unregister_code(KC_F9); + } + } + return false; + break; + + case XT_F10: + if (record->event.pressed) { + if (shift_pressed) { + xt_f12_pressed = true ; + register_code(KC_F12); + } else { + register_code(KC_F10); + } + } else { + if (xt_f12_pressed) { + xt_f12_pressed = false ; + unregister_code(KC_F12); + } else { + unregister_code(KC_F10); + } + } + return false; + break; + + default: + return true; + break; + } + + return true; +} +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// default layout is the standard XT layout +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ +/* + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, XT_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + XT_F5,XT_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +*/ + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, KC_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + KC_F5,KC_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +} ; + diff --git a/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3560598f02b8bacc12ef9426875a5b7076e32eab GIT binary patch literal 13054 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 literal 0 HcmV?d00001 diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c new file mode 100644 index 000000000000..5b99973c8012 --- /dev/null +++ b/keyboards/converter/5291/matrix.c @@ -0,0 +1,281 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include +#include +#include +#if defined(__AVR__) +#include +#endif +#include + +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "timer.h" + +#include "config.h" + + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#define print_matrix_header() print("\nr/c 01234567\n") +#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +#define matrix_bitpop(i) bitpop(matrix[i]) +#define ROW_SHIFTER ((uint8_t)1) +#define check_bit(var,pos) ((var) & (1<<(pos))) + +static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [2] = MATRIX_COL_PINS ; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint16_t debouncing_time ; +static bool debouncing = false ; +#endif + +static uint8_t matrix [MATRIX_ROWS] = {0}; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint8_t matrix_debounce [MATRIX_ROWS] = {0}; +#endif + +static +inline +void toggle_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW +} + +static +inline +void init_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_data(void) { + uint8_t pin = MATRIX_DATA_PIN ; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LO +} + +static +inline +void init_strobe(void) { + uint8_t pin = MATRIX_STROBE_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_rows(void) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void init_cols(void) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void select_row(uint8_t current_row) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i] ; + if ( check_bit( current_row, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +void select_col(uint8_t current_col) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i] ; + if ( check_bit( current_col, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +uint8_t matrix_strobe(uint8_t col_index) { + uint8_t strobe_pin = MATRIX_STROBE_PIN ; + uint8_t data_pin = MATRIX_DATA_PIN ; + + // set strobe pin high + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + + wait_us(30) ; + + // read data + uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; + + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + + uint8_t out = data ? (1 << col_index) : 0 ; + return out ; +} + +static +bool matrix_read(uint8_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + uint8_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + select_row(current_row); + + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; ++col_index) { + + select_col(col_index) ; + + // strobe the matrix + // Populate the matrix row with the state of the data pin + current_matrix[current_row] |= matrix_strobe(col_index) ; + } + + bool test = last_row_value != current_matrix[current_row] ; + return test ; +} + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +inline +uint8_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +void matrix_init(void) { + init_led() ; + init_rows() ; + init_cols() ; + init_data() ; + init_strobe() ; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; +# if (DEBOUNCING_DELAY > 0) + matrix_debounce [i] = 0; +# endif + } + + matrix_init_quantum() ; +} + +uint8_t matrix_scan(void) { + for ( uint8_t current_row = 0; current_row < MATRIX_ROWS; ++current_row ) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = matrix_read(matrix_debounce, current_row); + + if (matrix_changed) { + debouncing = true ; + debouncing_time = timer_read(); + } + +# else + matrix_read(matrix, current_row); +# endif + } + +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debounce[i]; + } + debouncing = false; + } +# endif + + matrix_scan_quantum(); + return 1; +} + +void matrix_print(void) { + print_matrix_header(); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + phex(row); print(": "); + print_matrix_row(row); + print("\n"); + } +} diff --git a/keyboards/converter/5291/matrix.csv b/keyboards/converter/5291/matrix.csv new file mode 100644 index 000000000000..40462c2143ef --- /dev/null +++ b/keyboards/converter/5291/matrix.csv @@ -0,0 +1,96 @@ +0,Z +1,S +2,W +3,3 +4,X +5,D +6,E +7,4 +8,C +9,F +10,R +11,5 +12,V +13,G +14,T +15,6 +16,B +17,H +18,Y +19,7 +20,N +21,J +22,U +23,8 +24,PAD_2 +25,PAD_5 +26,PAD_8 +27,NUM_LOCK +28,M +29,K +30,I +31,9 +32,COMMA +33,L +34,O +35,0 +36,PERIOD +37,SEMICOLON +38,P +39,MINUS +40,SLASH +41,QUOTE +42,LEFT_BRACE +43,EQUAL +44,SPACE +45,RSHIFT +46,BACK_QUOTE +47,RIGHT_BRACE +48,CAPS_LOCK +49,PAD_ASTERIX +50,ENTER +51,BACKSPACE +52,PAD_0 +53,PAD_1 +54,PAD_4 +55,PAD_7 +56,PAD_PLUS +57,UNASSIGNED +58,PAD_MINUS +59,SCROLL_LOCK +60,PAD_PERIOD +61,PAD_3 +62,PAD_6 +63,PAD_9 +64,BACKSLASH +65,A +66,Q +67,2 +68,LALT +69,UNASSIGNED +70,UNASSIGNED +71,1 +72,F7 +73,F5 +74,F3 +75,F1 +76,F8 +77,F6 +78,F4 +79,F2 +80,F10 +81,UNASSIGNED +82,UNASSIGNED +83,UNASSIGNED +84,F9 +85,UNASSIGNED +86,UNASSIGNED +87,UNASSIGNED +88,LSHIFT +89,LCTRL +90,TAB +91,ESC +92,UNASSIGNED +93,UNASSIGNED +94,UNASSIGNED +95,UNASSIGNED diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md new file mode 100644 index 000000000000..17dfa931b1c9 --- /dev/null +++ b/keyboards/converter/5291/readme.md @@ -0,0 +1,19 @@ +# IBM 5291 keyboard converter + +![5291](https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard) + +A converter for the eponymous keyboard. + +Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions) +Hardware Supported: IBM 5291, Teensy 2.0 + +Make example for this keyboard (after setting up your build environment): + + make converter/5291:default + +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). + +to get a matrix created if your board uses a different one (i used the US layout) please see the following gists: +for the matrix itself: + +the pinout is as follows: diff --git a/keyboards/converter/5291/rules.mk b/keyboards/converter/5291/rules.mk new file mode 100644 index 000000000000..ca0c850c0bab --- /dev/null +++ b/keyboards/converter/5291/rules.mk @@ -0,0 +1,72 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# 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 = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = halfkay + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no +SPLIT_KEYBOARD = no +WAIT_FOR_USB = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +LAYOUTS_HAS_RGB = NO + +CUSTOM_MATRIX = yes +SRC = matrix.c \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c index cb65bd422e51..ef66f3fe39b5 100644 --- a/keyboards/converter/hp_46010a/keymaps/default/keymap.c +++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' `-------------------' */ - [0] = LAYOUT( + [0] = LAYOUT ( KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \ 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_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \ From 61d4305b66cf62ad0168fad9797db0ddfdc0fb03 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sat, 24 Nov 2018 00:42:06 -0500 Subject: [PATCH 04/16] still testing 5291 --- keyboards/converter/5291/matrix.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c index 5b99973c8012..f79aef3e6034 100644 --- a/keyboards/converter/5291/matrix.c +++ b/keyboards/converter/5291/matrix.c @@ -43,8 +43,11 @@ along with this program. If not, see . #define ROW_SHIFTER ((uint8_t)1) #define check_bit(var,pos) ((var) & (1<<(pos))) -static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; -static const uint8_t col_pins [2] = MATRIX_COL_PINS ; +#define NUM_ROW_PINS 5 +#define NUM_COL_PINS 2 + +static const uint8_t row_pins [NUM_ROW_PINS] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [NUM_ROW_PINS] = MATRIX_COL_PINS ; #if ( DEBOUNCING_DELAY > 0 ) static uint16_t debouncing_time ; @@ -61,7 +64,7 @@ static inline void toggle_led(void) { uint8_t pin = LED_PIN ; - _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); } static @@ -85,13 +88,13 @@ inline void init_strobe(void) { uint8_t pin = MATRIX_STROBE_PIN ; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } static inline void init_rows(void) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -101,7 +104,7 @@ void init_rows(void) { static inline void init_cols(void) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -111,7 +114,7 @@ void init_cols(void) { static inline void select_row(uint8_t current_row) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i] ; if ( check_bit( current_row, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -125,7 +128,7 @@ void select_row(uint8_t current_row) { static inline void select_col(uint8_t current_col) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i] ; if ( check_bit( current_col, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -142,16 +145,16 @@ uint8_t matrix_strobe(uint8_t col_index) { uint8_t strobe_pin = MATRIX_STROBE_PIN ; uint8_t data_pin = MATRIX_DATA_PIN ; - // set strobe pin high - _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); wait_us(30) ; // read data uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; - // set strobe pin low - _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + // set strobe pin hi + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); uint8_t out = data ? (1 << col_index) : 0 ; return out ; @@ -232,7 +235,7 @@ void matrix_init(void) { init_strobe() ; // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = 0; # if (DEBOUNCING_DELAY > 0) matrix_debounce [i] = 0; From 12afb3607e7e0f2366c9d87ac9d93668e8af19c1 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 16:17:22 -0500 Subject: [PATCH 05/16] fixed a but in the layout (reversed key order in row) --- keyboards/converter/5291/5291.h | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/5291/5291.h index e6cbd2e71596..aa1b403242e2 100644 --- a/keyboards/converter/5291/5291.h +++ b/keyboards/converter/5291/5291.h @@ -40,30 +40,30 @@ along with this program. If not, see . KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \ KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \ ) \ -{ {KEY_3, KEY_W, KEY_S, KEY_Z }\ -, {KEY_4, KEY_E, KEY_D, KEY_X }\ -, {KEY_5, KEY_R, KEY_F, KEY_C }\ -, {KEY_6, KEY_T, KEY_G, KEY_V }\ -, {KEY_7, KEY_Y, KEY_H, KEY_B }\ -, {KEY_8, KEY_U, KEY_J, KEY_N }\ -, {KEY_NLOCK,KEY_PAD8,KEY_PAD5,KEY_PAD2 }\ -, {KEY_9, KEY_I, KEY_K, KEY_M }\ -, {KEY_0, KEY_O, KEY_L, KEY_COMM }\ -, {KEY_MIN, KEY_P, KEY_SEMI,KEY_DOT }\ -, {KEY_EQU, KEY_LBRC,KEY_QUOT,KEY_SLS }\ -, {KEY_RBRC, KEY_TICK,KEY_RSFS,KEY_SPACE }\ -, {KEY_BACK, KEY_ENTR,KEY_PAST,KEY_CLOCK }\ -, {KEY_PAD7, KEY_PAD4,KEY_PAD1,KEY_PAD0 }\ -, {KEY_SLOCK,KEY_PMIN,KC_NO, KEY_PPLS }\ -, {KEY_PAD9, KEY_PAD6,KEY_PAD3,KEY_PDOT }\ -, {KEY_2, KEY_Q, KEY_A, KEY_BSLS }\ -, {KEY_1, KC_NO, KC_NO, KEY_LALT }\ -, {KEY_F1, KEY_F3, KEY_F5, KEY_F7 }\ -, {KEY_F2, KEY_F4, KEY_F6, KEY_F8 }\ -, {KC_NO, KC_NO, KC_NO, KEY_F10 }\ -, {KC_NO, KC_NO, KC_NO, KEY_F9 }\ -, {KEY_ESC, KEY_TAB, KEY_LCTR,KEY_LSFS }\ -, {KC_NO, KC_NO, KC_NO, KC_NO }\ +{ {KEY_Z, KEY_S, KEY_W, KEY_3 }\ +, {KEY_X, KEY_D, KEY_E, KEY_4 }\ +, {KEY_C, KEY_F, KEY_R, KEY_5 }\ +, {KEY_V, KEY_G, KEY_T, KEY_6 }\ +, {KEY_B, KEY_H, KEY_Y, KEY_7 }\ +, {KEY_N, KEY_J, KEY_U, KEY_8 }\ +, {KEY_PAD2, KEY_PAD5,KEY_PAD8,KEY_NLOCK }\ +, {KEY_M, KEY_K, KEY_I, KEY_9 }\ +, {KEY_COMM, KEY_L, KEY_O, KEY_0 }\ +, {KEY_DOT, KEY_SEMI,KEY_P, KEY_MIN }\ +, {KEY_SLS, KEY_QUOT,KEY_LBRC,KEY_EQU }\ +, {KEY_SPACE, KEY_RSFS,KEY_TICK,KEY_RBRC }\ +, {KEY_CLOCK, KEY_PAST,KEY_ENTR,KEY_BACK }\ +, {KEY_PAD0, KEY_PAD1,KEY_PAD4,KEY_PAD7 }\ +, {KEY_PPLS, KC_NO, KEY_PMIN,KEY_SLOCK }\ +, {KEY_PDOT, KEY_PAD3,KEY_PAD6,KEY_PAD9 }\ +, {KEY_BSLS, KEY_A, KEY_Q, KEY_2 }\ +, {KEY_LALT, KC_NO, KC_NO, KEY_1 }\ +, {KEY_F7, KEY_F5, KEY_F3, KEY_F1 }\ +, {KEY_F8, KEY_F6, KEY_F4, KEY_F2 }\ +, {KC_F10, KC_NO, KC_NO, KC_NO }\ +, {KC_F9, KC_NO, KC_NO, KC_NO }\ +, {KEY_LSFS, KEY_LCTR,KEY_TAB, KEY_ESC }\ +, {KC_NO, KC_NO, KC_NO, KC_NO }\ } #define LAYOUT LAYOUT_5291 \ No newline at end of file From 4478f35ebeaec3e28b7f039a5d978e9937788a85 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Wed, 3 Oct 2018 10:41:10 -0400 Subject: [PATCH 06/16] compiles but is not working --- keyboards/converter/5291/5291.c | 3 + keyboards/converter/5291/5291.h | 69 +++++ keyboards/converter/5291/config.h | 42 +++ keyboards/converter/5291/info.json | 6 + .../converter/5291/keymaps/default/keymap.c | 233 +++++++++++++++ .../5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf | Bin 0 -> 13054 bytes keyboards/converter/5291/matrix.c | 281 ++++++++++++++++++ keyboards/converter/5291/matrix.csv | 96 ++++++ keyboards/converter/5291/readme.md | 19 ++ keyboards/converter/5291/rules.mk | 72 +++++ .../hp_46010a/keymaps/default/keymap.c | 2 +- 11 files changed, 822 insertions(+), 1 deletion(-) create mode 100644 keyboards/converter/5291/5291.c create mode 100644 keyboards/converter/5291/5291.h create mode 100644 keyboards/converter/5291/config.h create mode 100644 keyboards/converter/5291/info.json create mode 100644 keyboards/converter/5291/keymaps/default/keymap.c create mode 100644 keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf create mode 100644 keyboards/converter/5291/matrix.c create mode 100644 keyboards/converter/5291/matrix.csv create mode 100644 keyboards/converter/5291/readme.md create mode 100644 keyboards/converter/5291/rules.mk diff --git a/keyboards/converter/5291/5291.c b/keyboards/converter/5291/5291.c new file mode 100644 index 000000000000..55121ed4f698 --- /dev/null +++ b/keyboards/converter/5291/5291.c @@ -0,0 +1,3 @@ +#include "5291.h" +#include +#include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/5291/5291.h new file mode 100644 index 000000000000..e6cbd2e71596 --- /dev/null +++ b/keyboards/converter/5291/5291.h @@ -0,0 +1,69 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "quantum.h" + +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ + +#define LAYOUT_5291( \ + KEY_F1,KEY_F2, KEY_ESC, KEY_1, KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_0, KEY_MIN, KEY_EQU, KEY_BACK, KEY_NLOCK, KEY_SLOCK, \ + KEY_F3,KEY_F4, KEY_TAB, KEY_Q, KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O, KEY_P, KEY_LBRC,KEY_RBRC, KEY_PAD7,KEY_PAD8, KEY_PAD9,KEY_PMIN, \ + KEY_F5,KEY_F6, KEY_LCTR,KEY_A, KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_SEMI,KEY_QUOT,KEY_TICK, KEY_ENTR,KEY_PAD4,KEY_PAD5, KEY_PAD6, \ + KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \ + KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \ +) \ +{ {KEY_3, KEY_W, KEY_S, KEY_Z }\ +, {KEY_4, KEY_E, KEY_D, KEY_X }\ +, {KEY_5, KEY_R, KEY_F, KEY_C }\ +, {KEY_6, KEY_T, KEY_G, KEY_V }\ +, {KEY_7, KEY_Y, KEY_H, KEY_B }\ +, {KEY_8, KEY_U, KEY_J, KEY_N }\ +, {KEY_NLOCK,KEY_PAD8,KEY_PAD5,KEY_PAD2 }\ +, {KEY_9, KEY_I, KEY_K, KEY_M }\ +, {KEY_0, KEY_O, KEY_L, KEY_COMM }\ +, {KEY_MIN, KEY_P, KEY_SEMI,KEY_DOT }\ +, {KEY_EQU, KEY_LBRC,KEY_QUOT,KEY_SLS }\ +, {KEY_RBRC, KEY_TICK,KEY_RSFS,KEY_SPACE }\ +, {KEY_BACK, KEY_ENTR,KEY_PAST,KEY_CLOCK }\ +, {KEY_PAD7, KEY_PAD4,KEY_PAD1,KEY_PAD0 }\ +, {KEY_SLOCK,KEY_PMIN,KC_NO, KEY_PPLS }\ +, {KEY_PAD9, KEY_PAD6,KEY_PAD3,KEY_PDOT }\ +, {KEY_2, KEY_Q, KEY_A, KEY_BSLS }\ +, {KEY_1, KC_NO, KC_NO, KEY_LALT }\ +, {KEY_F1, KEY_F3, KEY_F5, KEY_F7 }\ +, {KEY_F2, KEY_F4, KEY_F6, KEY_F8 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F10 }\ +, {KC_NO, KC_NO, KC_NO, KEY_F9 }\ +, {KEY_ESC, KEY_TAB, KEY_LCTR,KEY_LSFS }\ +, {KC_NO, KC_NO, KC_NO, KC_NO }\ +} + +#define LAYOUT LAYOUT_5291 \ No newline at end of file diff --git a/keyboards/converter/5291/config.h b/keyboards/converter/5291/config.h new file mode 100644 index 000000000000..5c9ca1e4a976 --- /dev/null +++ b/keyboards/converter/5291/config.h @@ -0,0 +1,42 @@ +/* +Copyright 2018 listofoptions + +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 + +#include "config_common.h" + +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 1 +#define MANUFACTURER QMK +#define PRODUCT 5291 keyboard converter +#define DESCRIPTION 5291 keyboard converter + +#define MATRIX_ROWS 24 +#define MATRIX_COLS 4 + +#define MATRIX_ROW_PINS {B2, B3, B4, B5, B6} +#define MATRIX_COL_PINS {B0, B1} +#define MATRIX_DATA_PIN D0 +#define MATRIX_STROBE_PIN D1 +#define LED_PIN D6 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 0 + + diff --git a/keyboards/converter/5291/info.json b/keyboards/converter/5291/info.json new file mode 100644 index 000000000000..b7283d8af90d --- /dev/null +++ b/keyboards/converter/5291/info.json @@ -0,0 +1,6 @@ +{ + "keyboard_name": "5291", + "keyboard_folder": "converter/5291", + "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", + "maintainer": "listofoptions", +} diff --git a/keyboards/converter/5291/keymaps/default/keymap.c b/keyboards/converter/5291/keymaps/default/keymap.c new file mode 100644 index 000000000000..9b286c887d61 --- /dev/null +++ b/keyboards/converter/5291/keymaps/default/keymap.c @@ -0,0 +1,233 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include QMK_KEYBOARD_H +/* +enum xt_keycodes + { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen + , XT_SLCK // XT scroll lock / break + , XT_F6 // F6 / app key + , XT_F5 // F5 / gui + , XT_F9 // F9 / F11 + , XT_F10 // F10 / F12 + } ; + +static bool shift_pressed = false , + alt_pressed = false , + ctrl_pressed = false , + xt_pscr_pressed = false , + xt_brk_pressed = false , + xt_app_pressed = false , + xt_gui_pressed = false , + xt_lout_pressed = false , + xt_f11_pressed = false , + xt_f12_pressed = false ; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true ; + } else { + shift_pressed = false ; + } + return true; + break; + + case KC_LALT: + if (record->event.pressed) { + alt_pressed = true ; + } else { + alt_pressed = false ; + } + return true; + break; + + case KC_LCTL: + if (record->event.pressed) { + ctrl_pressed = true ; + } else { + ctrl_pressed = false ; + } + return true; + break; + + case XT_PAST: + if (record->event.pressed) { + if (shift_pressed) { + xt_pscr_pressed = true ; + register_code(KC_PSCR); + } else { + register_code(KC_PAST); + } + } else { + if (xt_pscr_pressed) { + xt_pscr_pressed = false ; + unregister_code(KC_PSCR); + } else { + unregister_code(KC_PAST); + } + } + return false; + break; + + case XT_SLCK: + if (record->event.pressed) { + if (ctrl_pressed) { + xt_brk_pressed = true ; + register_code(KC_BRK); + } else { + register_code(KC_SLCK); + } + } else { + if (xt_brk_pressed) { + xt_brk_pressed = false ; + unregister_code(KC_BRK); + } else { + unregister_code(KC_SLCK); + } + } + return false; + break; + + case XT_F6: + if (record->event.pressed) { + if (shift_pressed) { + xt_app_pressed = true ; + register_code(KC_APP); + } else { + register_code(KC_F6); + } + } else { + if (xt_app_pressed) { + xt_app_pressed = false ; + unregister_code(KC_APP); + } else { + unregister_code(KC_F6); + } + } + return false; + break; + + case XT_F5: + if (record->event.pressed) { + if (shift_pressed) { + xt_gui_pressed = true ; + register_code(KC_LGUI); + } else if (ctrl_pressed) { + xt_lout_pressed = true ; + register_code (KC_LGUI) ; + register_code (KC_L) ; + } else { + register_code(KC_F5); + } + } else { + if (xt_gui_pressed) { + xt_gui_pressed = false ; + unregister_code(KC_LGUI); + } else if (xt_lout_pressed) { + xt_lout_pressed = false ; + unregister_code (KC_LGUI) ; + unregister_code (KC_L) ; + } else { + unregister_code(KC_F5); + } + } + return false; + break; + + case XT_F9: + if (record->event.pressed) { + if (shift_pressed) { + xt_f11_pressed = true ; + register_code(KC_F11); + } else { + register_code(KC_F9); + } + } else { + if (xt_f11_pressed) { + xt_f11_pressed = false ; + unregister_code(KC_F11); + } else { + unregister_code(KC_F9); + } + } + return false; + break; + + case XT_F10: + if (record->event.pressed) { + if (shift_pressed) { + xt_f12_pressed = true ; + register_code(KC_F12); + } else { + register_code(KC_F10); + } + } else { + if (xt_f12_pressed) { + xt_f12_pressed = false ; + unregister_code(KC_F12); + } else { + unregister_code(KC_F10); + } + } + return false; + break; + + default: + return true; + break; + } + + return true; +} +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// default layout is the standard XT layout +/* + * ,-------. ,--------------------------------------------------------------------------. + * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck | + * |-------| |--------------------------------------------------------------------------| + * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -| + * |-------| |------------------------------------------------------|Ent|---------------| + * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| | + * |-------| |----------------------------------------------------------------------| | + * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +| + * |-------| |----------------------------------------------------------------------| | + * | F9|F10| | Alt | Space |CapsLck| 0 | . | | + * `-------' `--------------------------------------------------------------------------' +*/ +/* + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, XT_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + XT_F5,XT_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +*/ + [0] = LAYOUT ( + KC_F1,KC_F2, KC_ESC, 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_NLCK, KC_SLCK, + KC_F3,KC_F4, 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_P7,KC_P8, KC_P9, KC_PMNS, + KC_F5,KC_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6, + KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS, + KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT + ) +} ; + diff --git a/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3560598f02b8bacc12ef9426875a5b7076e32eab GIT binary patch literal 13054 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 literal 0 HcmV?d00001 diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c new file mode 100644 index 000000000000..5b99973c8012 --- /dev/null +++ b/keyboards/converter/5291/matrix.c @@ -0,0 +1,281 @@ +/* +Copyright 2018 listofoptions + +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 . +*/ + +#include +#include +#include +#if defined(__AVR__) +#include +#endif +#include + +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "timer.h" + +#include "config.h" + + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#define print_matrix_header() print("\nr/c 01234567\n") +#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +#define matrix_bitpop(i) bitpop(matrix[i]) +#define ROW_SHIFTER ((uint8_t)1) +#define check_bit(var,pos) ((var) & (1<<(pos))) + +static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [2] = MATRIX_COL_PINS ; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint16_t debouncing_time ; +static bool debouncing = false ; +#endif + +static uint8_t matrix [MATRIX_ROWS] = {0}; + +#if ( DEBOUNCING_DELAY > 0 ) +static uint8_t matrix_debounce [MATRIX_ROWS] = {0}; +#endif + +static +inline +void toggle_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW +} + +static +inline +void init_led(void) { + uint8_t pin = LED_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_data(void) { + uint8_t pin = MATRIX_DATA_PIN ; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LO +} + +static +inline +void init_strobe(void) { + uint8_t pin = MATRIX_STROBE_PIN ; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static +inline +void init_rows(void) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void init_cols(void) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static +inline +void select_row(uint8_t current_row) { + for ( uint8_t i = 0 ; i < 5; ++i ) { + uint8_t pin = row_pins[i] ; + if ( check_bit( current_row, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +void select_col(uint8_t current_col) { + for ( uint8_t i = 0 ; i < 2; ++i ) { + uint8_t pin = col_pins[i] ; + if ( check_bit( current_col, i ) ) { + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } else { + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } + } + wait_us(30) ; +} + +static +inline +uint8_t matrix_strobe(uint8_t col_index) { + uint8_t strobe_pin = MATRIX_STROBE_PIN ; + uint8_t data_pin = MATRIX_DATA_PIN ; + + // set strobe pin high + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + + wait_us(30) ; + + // read data + uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; + + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + + uint8_t out = data ? (1 << col_index) : 0 ; + return out ; +} + +static +bool matrix_read(uint8_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + uint8_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + select_row(current_row); + + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; ++col_index) { + + select_col(col_index) ; + + // strobe the matrix + // Populate the matrix row with the state of the data pin + current_matrix[current_row] |= matrix_strobe(col_index) ; + } + + bool test = last_row_value != current_matrix[current_row] ; + return test ; +} + +__attribute__ ((weak)) +void matrix_init_quantum(void) { + matrix_init_kb(); +} + +__attribute__ ((weak)) +void matrix_scan_quantum(void) { + matrix_scan_kb(); +} + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) { + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) { + return MATRIX_COLS; +} + +inline +uint8_t matrix_get_row(uint8_t row) { + return matrix[row]; +} + +void matrix_init(void) { + init_led() ; + init_rows() ; + init_cols() ; + init_data() ; + init_strobe() ; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; +# if (DEBOUNCING_DELAY > 0) + matrix_debounce [i] = 0; +# endif + } + + matrix_init_quantum() ; +} + +uint8_t matrix_scan(void) { + for ( uint8_t current_row = 0; current_row < MATRIX_ROWS; ++current_row ) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = matrix_read(matrix_debounce, current_row); + + if (matrix_changed) { + debouncing = true ; + debouncing_time = timer_read(); + } + +# else + matrix_read(matrix, current_row); +# endif + } + +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debounce[i]; + } + debouncing = false; + } +# endif + + matrix_scan_quantum(); + return 1; +} + +void matrix_print(void) { + print_matrix_header(); + + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + phex(row); print(": "); + print_matrix_row(row); + print("\n"); + } +} diff --git a/keyboards/converter/5291/matrix.csv b/keyboards/converter/5291/matrix.csv new file mode 100644 index 000000000000..40462c2143ef --- /dev/null +++ b/keyboards/converter/5291/matrix.csv @@ -0,0 +1,96 @@ +0,Z +1,S +2,W +3,3 +4,X +5,D +6,E +7,4 +8,C +9,F +10,R +11,5 +12,V +13,G +14,T +15,6 +16,B +17,H +18,Y +19,7 +20,N +21,J +22,U +23,8 +24,PAD_2 +25,PAD_5 +26,PAD_8 +27,NUM_LOCK +28,M +29,K +30,I +31,9 +32,COMMA +33,L +34,O +35,0 +36,PERIOD +37,SEMICOLON +38,P +39,MINUS +40,SLASH +41,QUOTE +42,LEFT_BRACE +43,EQUAL +44,SPACE +45,RSHIFT +46,BACK_QUOTE +47,RIGHT_BRACE +48,CAPS_LOCK +49,PAD_ASTERIX +50,ENTER +51,BACKSPACE +52,PAD_0 +53,PAD_1 +54,PAD_4 +55,PAD_7 +56,PAD_PLUS +57,UNASSIGNED +58,PAD_MINUS +59,SCROLL_LOCK +60,PAD_PERIOD +61,PAD_3 +62,PAD_6 +63,PAD_9 +64,BACKSLASH +65,A +66,Q +67,2 +68,LALT +69,UNASSIGNED +70,UNASSIGNED +71,1 +72,F7 +73,F5 +74,F3 +75,F1 +76,F8 +77,F6 +78,F4 +79,F2 +80,F10 +81,UNASSIGNED +82,UNASSIGNED +83,UNASSIGNED +84,F9 +85,UNASSIGNED +86,UNASSIGNED +87,UNASSIGNED +88,LSHIFT +89,LCTRL +90,TAB +91,ESC +92,UNASSIGNED +93,UNASSIGNED +94,UNASSIGNED +95,UNASSIGNED diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md new file mode 100644 index 000000000000..17dfa931b1c9 --- /dev/null +++ b/keyboards/converter/5291/readme.md @@ -0,0 +1,19 @@ +# IBM 5291 keyboard converter + +![5291](https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard) + +A converter for the eponymous keyboard. + +Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions) +Hardware Supported: IBM 5291, Teensy 2.0 + +Make example for this keyboard (after setting up your build environment): + + make converter/5291:default + +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). + +to get a matrix created if your board uses a different one (i used the US layout) please see the following gists: +for the matrix itself: + +the pinout is as follows: diff --git a/keyboards/converter/5291/rules.mk b/keyboards/converter/5291/rules.mk new file mode 100644 index 000000000000..ca0c850c0bab --- /dev/null +++ b/keyboards/converter/5291/rules.mk @@ -0,0 +1,72 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# 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 = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = halfkay + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = no # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. +API_SYSEX_ENABLE = no +SPLIT_KEYBOARD = no +WAIT_FOR_USB = yes + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +LAYOUTS_HAS_RGB = NO + +CUSTOM_MATRIX = yes +SRC = matrix.c \ No newline at end of file diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c index cb65bd422e51..ef66f3fe39b5 100644 --- a/keyboards/converter/hp_46010a/keymaps/default/keymap.c +++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' `-------------------' */ - [0] = LAYOUT( + [0] = LAYOUT ( KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \ 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_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \ From fb33472fd6b08c9734c9c600cf5cd01f48cb44b9 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sat, 24 Nov 2018 00:42:06 -0500 Subject: [PATCH 07/16] still testing 5291 --- keyboards/converter/5291/matrix.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c index 5b99973c8012..f79aef3e6034 100644 --- a/keyboards/converter/5291/matrix.c +++ b/keyboards/converter/5291/matrix.c @@ -43,8 +43,11 @@ along with this program. If not, see . #define ROW_SHIFTER ((uint8_t)1) #define check_bit(var,pos) ((var) & (1<<(pos))) -static const uint8_t row_pins [5] = MATRIX_ROW_PINS ; -static const uint8_t col_pins [2] = MATRIX_COL_PINS ; +#define NUM_ROW_PINS 5 +#define NUM_COL_PINS 2 + +static const uint8_t row_pins [NUM_ROW_PINS] = MATRIX_ROW_PINS ; +static const uint8_t col_pins [NUM_ROW_PINS] = MATRIX_COL_PINS ; #if ( DEBOUNCING_DELAY > 0 ) static uint16_t debouncing_time ; @@ -61,7 +64,7 @@ static inline void toggle_led(void) { uint8_t pin = LED_PIN ; - _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF); } static @@ -85,13 +88,13 @@ inline void init_strobe(void) { uint8_t pin = MATRIX_STROBE_PIN ; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT - _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } static inline void init_rows(void) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -101,7 +104,7 @@ void init_rows(void) { static inline void init_cols(void) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i]; _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW @@ -111,7 +114,7 @@ void init_cols(void) { static inline void select_row(uint8_t current_row) { - for ( uint8_t i = 0 ; i < 5; ++i ) { + for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) { uint8_t pin = row_pins[i] ; if ( check_bit( current_row, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -125,7 +128,7 @@ void select_row(uint8_t current_row) { static inline void select_col(uint8_t current_col) { - for ( uint8_t i = 0 ; i < 2; ++i ) { + for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) { uint8_t pin = col_pins[i] ; if ( check_bit( current_col, i ) ) { _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI @@ -142,16 +145,16 @@ uint8_t matrix_strobe(uint8_t col_index) { uint8_t strobe_pin = MATRIX_STROBE_PIN ; uint8_t data_pin = MATRIX_DATA_PIN ; - // set strobe pin high - _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); + // set strobe pin low + _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); wait_us(30) ; // read data uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ; - // set strobe pin low - _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF); + // set strobe pin hi + _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF); uint8_t out = data ? (1 << col_index) : 0 ; return out ; @@ -232,7 +235,7 @@ void matrix_init(void) { init_strobe() ; // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { matrix[i] = 0; # if (DEBOUNCING_DELAY > 0) matrix_debounce [i] = 0; From 907e6640bfb0e618095236f4a51c6930e3cd4d77 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 16:17:22 -0500 Subject: [PATCH 08/16] fixed a but in the layout (reversed key order in row) --- keyboards/converter/5291/5291.h | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/5291/5291.h index e6cbd2e71596..aa1b403242e2 100644 --- a/keyboards/converter/5291/5291.h +++ b/keyboards/converter/5291/5291.h @@ -40,30 +40,30 @@ along with this program. If not, see . KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \ KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \ ) \ -{ {KEY_3, KEY_W, KEY_S, KEY_Z }\ -, {KEY_4, KEY_E, KEY_D, KEY_X }\ -, {KEY_5, KEY_R, KEY_F, KEY_C }\ -, {KEY_6, KEY_T, KEY_G, KEY_V }\ -, {KEY_7, KEY_Y, KEY_H, KEY_B }\ -, {KEY_8, KEY_U, KEY_J, KEY_N }\ -, {KEY_NLOCK,KEY_PAD8,KEY_PAD5,KEY_PAD2 }\ -, {KEY_9, KEY_I, KEY_K, KEY_M }\ -, {KEY_0, KEY_O, KEY_L, KEY_COMM }\ -, {KEY_MIN, KEY_P, KEY_SEMI,KEY_DOT }\ -, {KEY_EQU, KEY_LBRC,KEY_QUOT,KEY_SLS }\ -, {KEY_RBRC, KEY_TICK,KEY_RSFS,KEY_SPACE }\ -, {KEY_BACK, KEY_ENTR,KEY_PAST,KEY_CLOCK }\ -, {KEY_PAD7, KEY_PAD4,KEY_PAD1,KEY_PAD0 }\ -, {KEY_SLOCK,KEY_PMIN,KC_NO, KEY_PPLS }\ -, {KEY_PAD9, KEY_PAD6,KEY_PAD3,KEY_PDOT }\ -, {KEY_2, KEY_Q, KEY_A, KEY_BSLS }\ -, {KEY_1, KC_NO, KC_NO, KEY_LALT }\ -, {KEY_F1, KEY_F3, KEY_F5, KEY_F7 }\ -, {KEY_F2, KEY_F4, KEY_F6, KEY_F8 }\ -, {KC_NO, KC_NO, KC_NO, KEY_F10 }\ -, {KC_NO, KC_NO, KC_NO, KEY_F9 }\ -, {KEY_ESC, KEY_TAB, KEY_LCTR,KEY_LSFS }\ -, {KC_NO, KC_NO, KC_NO, KC_NO }\ +{ {KEY_Z, KEY_S, KEY_W, KEY_3 }\ +, {KEY_X, KEY_D, KEY_E, KEY_4 }\ +, {KEY_C, KEY_F, KEY_R, KEY_5 }\ +, {KEY_V, KEY_G, KEY_T, KEY_6 }\ +, {KEY_B, KEY_H, KEY_Y, KEY_7 }\ +, {KEY_N, KEY_J, KEY_U, KEY_8 }\ +, {KEY_PAD2, KEY_PAD5,KEY_PAD8,KEY_NLOCK }\ +, {KEY_M, KEY_K, KEY_I, KEY_9 }\ +, {KEY_COMM, KEY_L, KEY_O, KEY_0 }\ +, {KEY_DOT, KEY_SEMI,KEY_P, KEY_MIN }\ +, {KEY_SLS, KEY_QUOT,KEY_LBRC,KEY_EQU }\ +, {KEY_SPACE, KEY_RSFS,KEY_TICK,KEY_RBRC }\ +, {KEY_CLOCK, KEY_PAST,KEY_ENTR,KEY_BACK }\ +, {KEY_PAD0, KEY_PAD1,KEY_PAD4,KEY_PAD7 }\ +, {KEY_PPLS, KC_NO, KEY_PMIN,KEY_SLOCK }\ +, {KEY_PDOT, KEY_PAD3,KEY_PAD6,KEY_PAD9 }\ +, {KEY_BSLS, KEY_A, KEY_Q, KEY_2 }\ +, {KEY_LALT, KC_NO, KC_NO, KEY_1 }\ +, {KEY_F7, KEY_F5, KEY_F3, KEY_F1 }\ +, {KEY_F8, KEY_F6, KEY_F4, KEY_F2 }\ +, {KC_F10, KC_NO, KC_NO, KC_NO }\ +, {KC_F9, KC_NO, KC_NO, KC_NO }\ +, {KEY_LSFS, KEY_LCTR,KEY_TAB, KEY_ESC }\ +, {KC_NO, KC_NO, KC_NO, KC_NO }\ } #define LAYOUT LAYOUT_5291 \ No newline at end of file From 1ebff46699b2060b14b2d3254f404ee19768445a Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 16:30:28 -0500 Subject: [PATCH 09/16] fixed some issues --- keyboards/converter/5291/matrix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/5291/matrix.c index f79aef3e6034..5f9910912715 100644 --- a/keyboards/converter/5291/matrix.c +++ b/keyboards/converter/5291/matrix.c @@ -241,7 +241,7 @@ void matrix_init(void) { matrix_debounce [i] = 0; # endif } - + matrix_init_quantum() ; } From ff9c7a18b2dae5a0fc4f3743c882a584ad88081a Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 16:59:14 -0500 Subject: [PATCH 10/16] doumentation needed --- keyboards/converter/5291/readme.md | 51 ++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index 17dfa931b1c9..8ac9ab9cd668 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -13,7 +13,54 @@ Make example for this keyboard (after setting up your build environment): 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). -to get a matrix created if your board uses a different one (i used the US layout) please see the following gists: -for the matrix itself: the pinout is as follows: + +IBM−5291−Cable to Pinhead−14 +| pin | description +---------------------------- +1 | GND +2 | NC +3 | GND +4 | GN) +5 | +5V +6 | D0 +7 | D1 +8 | D2 +9 | D3 +10| D4 +11| D5 +12| D6 +13| Strobe +14| Out + +the pins on this connector are organized ![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image) + +IBM−5291−2 Cable with DB15M connector: +1,2,3 | GND +4 | +5V +5 | D0 +6 | D1 +7 | D2 +8 | D3 +9 | D4 +10 | D5 +11 | D6 +12 | Strobe +13 | Out +14 | PE +15 | NC + +the above connector is actually numbered so it should be easier to determine +where the needed connections are. + +to connect to the teensy, the following are pins are needed (if you should choose not set your own): +PB0 -> PB6 are connected to D0 -> D6 ++5V is connected to the corresponding teensy pin +gnd is as well, only one of the gnd pins needs to be connected though. +strobe is connected to pin PD1 +data is connected to PD0 +PE does not need to be connected to anything, but it could also be connected to gnd + +sources: + http://www.retrocomputing.eu/documents/5291_MaintenanceLibrary.pdf From 5556027d5a22116fb6113281b14e4386b4aed2ae Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 17:03:11 -0500 Subject: [PATCH 11/16] doumentation needed --- keyboards/converter/5291/readme.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index 8ac9ab9cd668..e276ae4f1c3a 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -37,6 +37,8 @@ IBM−5291−Cable to Pinhead−14 the pins on this connector are organized ![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image) IBM−5291−2 Cable with DB15M connector: + +pin | description 1,2,3 | GND 4 | +5V 5 | D0 @@ -55,12 +57,12 @@ the above connector is actually numbered so it should be easier to determine where the needed connections are. to connect to the teensy, the following are pins are needed (if you should choose not set your own): -PB0 -> PB6 are connected to D0 -> D6 -+5V is connected to the corresponding teensy pin -gnd is as well, only one of the gnd pins needs to be connected though. -strobe is connected to pin PD1 -data is connected to PD0 -PE does not need to be connected to anything, but it could also be connected to gnd +* PB0 -> PB6 are connected to D0 -> D6 +* +5V is connected to the corresponding teensy pin +* gnd is as well, only one of the gnd pins needs to be connected though. +* strobe is connected to pin PD1 +* data is connected to PD0 +* PE does not need to be connected to anything, but it could also be connected to gnd sources: http://www.retrocomputing.eu/documents/5291_MaintenanceLibrary.pdf From de1d48277ee56aeb21e9e84424bf6bcb64d07c3a Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 17:04:28 -0500 Subject: [PATCH 12/16] documentation needed --- keyboards/converter/5291/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index e276ae4f1c3a..db2b624fffe5 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -39,6 +39,7 @@ the pins on this connector are organized ![here](https://geekhack.org/index.php? IBM−5291−2 Cable with DB15M connector: pin | description +----------------- 1,2,3 | GND 4 | +5V 5 | D0 From acf8b0baf7437fa04391389b73eee2f4b64fd22d Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 17:05:25 -0500 Subject: [PATCH 13/16] documentation needed --- keyboards/converter/5291/readme.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index db2b624fffe5..9cdca11b2c6a 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -36,8 +36,7 @@ IBM−5291−Cable to Pinhead−14 the pins on this connector are organized ![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image) -IBM−5291−2 Cable with DB15M connector: - +IBM−5291−2 Cable with DB15M connector pin | description ----------------- 1,2,3 | GND From 6cfdc820f40a377f3b7d920bf8b34ba48ffb4dcb Mon Sep 17 00:00:00 2001 From: listofoptions <39714365+listofoptions@users.noreply.github.com> Date: Sun, 25 Nov 2018 17:07:48 -0500 Subject: [PATCH 14/16] Update readme.md documentation --- keyboards/converter/5291/readme.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index 9cdca11b2c6a..8974c4cbd47f 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -37,21 +37,21 @@ IBM−5291−Cable to Pinhead−14 the pins on this connector are organized ![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image) IBM−5291−2 Cable with DB15M connector -pin | description +| pin | description ----------------- -1,2,3 | GND -4 | +5V -5 | D0 -6 | D1 -7 | D2 -8 | D3 -9 | D4 -10 | D5 -11 | D6 -12 | Strobe -13 | Out -14 | PE -15 | NC +|1,2,3 | GND +|4 | +5V +|5 | D0 +|6 | D1 +|7 | D2 +|8 | D3 +|9 | D4 +|10 | D5 +|11 | D6 +|12 | Strobe +|13 | Out +|14 | PE +|15 | NC the above connector is actually numbered so it should be easier to determine where the needed connections are. From 2c15d2eb0dc0ce812c14821c40c9f9171f4d8718 Mon Sep 17 00:00:00 2001 From: listofoptions <39714365+listofoptions@users.noreply.github.com> Date: Sun, 25 Nov 2018 17:10:16 -0500 Subject: [PATCH 15/16] Update readme.md i dislike markdown <_> --- keyboards/converter/5291/readme.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/5291/readme.md index 8974c4cbd47f..38a7c3c6ef57 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/5291/readme.md @@ -17,8 +17,9 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to the pinout is as follows: IBM−5291−Cable to Pinhead−14 + | pin | description ----------------------------- +----|------------------------ 1 | GND 2 | NC 3 | GND @@ -37,8 +38,9 @@ IBM−5291−Cable to Pinhead−14 the pins on this connector are organized ![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image) IBM−5291−2 Cable with DB15M connector + | pin | description ------------------ +----|------------- |1,2,3 | GND |4 | +5V |5 | D0 From e96b01a7006e66c9662374e410e57d82356fa121 Mon Sep 17 00:00:00 2001 From: listofoptions Date: Sun, 25 Nov 2018 20:19:41 -0500 Subject: [PATCH 16/16] merge preperation --- .../converter/hp_46010a/keymaps/default/keymap.c | 2 +- keyboards/converter/{5291 => ibm_5291}/config.h | 0 .../converter/{5291/5291.c => ibm_5291/ibm_5291.c} | 2 +- .../converter/{5291/5291.h => ibm_5291/ibm_5291.h} | 0 keyboards/converter/{5291 => ibm_5291}/info.json | 2 +- .../{5291 => ibm_5291}/keymaps/default/keymap.c | 0 .../keymaps/kbdbabel_doc_ibm5291_kbd.pdf | Bin keyboards/converter/{5291 => ibm_5291}/matrix.c | 0 keyboards/converter/{5291 => ibm_5291}/matrix.csv | 0 keyboards/converter/{5291 => ibm_5291}/readme.md | 2 +- keyboards/converter/{5291 => ibm_5291}/rules.mk | 0 11 files changed, 4 insertions(+), 4 deletions(-) rename keyboards/converter/{5291 => ibm_5291}/config.h (100%) rename keyboards/converter/{5291/5291.c => ibm_5291/ibm_5291.c} (64%) rename keyboards/converter/{5291/5291.h => ibm_5291/ibm_5291.h} (100%) rename keyboards/converter/{5291 => ibm_5291}/info.json (82%) rename keyboards/converter/{5291 => ibm_5291}/keymaps/default/keymap.c (100%) rename keyboards/converter/{5291 => ibm_5291}/keymaps/kbdbabel_doc_ibm5291_kbd.pdf (100%) rename keyboards/converter/{5291 => ibm_5291}/matrix.c (100%) rename keyboards/converter/{5291 => ibm_5291}/matrix.csv (100%) rename keyboards/converter/{5291 => ibm_5291}/readme.md (98%) rename keyboards/converter/{5291 => ibm_5291}/rules.mk (100%) diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c index ef66f3fe39b5..cb65bd422e51 100644 --- a/keyboards/converter/hp_46010a/keymaps/default/keymap.c +++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' `-------------------' */ - [0] = LAYOUT ( + [0] = LAYOUT( KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, KC_PMNS, \ 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_BSLS, KC_DEL, KC_END, KC_P7, KC_P8, KC_P9, KC_PENT, \ diff --git a/keyboards/converter/5291/config.h b/keyboards/converter/ibm_5291/config.h similarity index 100% rename from keyboards/converter/5291/config.h rename to keyboards/converter/ibm_5291/config.h diff --git a/keyboards/converter/5291/5291.c b/keyboards/converter/ibm_5291/ibm_5291.c similarity index 64% rename from keyboards/converter/5291/5291.c rename to keyboards/converter/ibm_5291/ibm_5291.c index 55121ed4f698..9b937a545ae2 100644 --- a/keyboards/converter/5291/5291.c +++ b/keyboards/converter/ibm_5291/ibm_5291.c @@ -1,3 +1,3 @@ -#include "5291.h" +#include "ibm_5291.h" #include #include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/5291/5291.h b/keyboards/converter/ibm_5291/ibm_5291.h similarity index 100% rename from keyboards/converter/5291/5291.h rename to keyboards/converter/ibm_5291/ibm_5291.h diff --git a/keyboards/converter/5291/info.json b/keyboards/converter/ibm_5291/info.json similarity index 82% rename from keyboards/converter/5291/info.json rename to keyboards/converter/ibm_5291/info.json index b7283d8af90d..080a16336ee6 100644 --- a/keyboards/converter/5291/info.json +++ b/keyboards/converter/ibm_5291/info.json @@ -1,5 +1,5 @@ { - "keyboard_name": "5291", + "keyboard_name": "IBM 5291", "keyboard_folder": "converter/5291", "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", "maintainer": "listofoptions", diff --git a/keyboards/converter/5291/keymaps/default/keymap.c b/keyboards/converter/ibm_5291/keymaps/default/keymap.c similarity index 100% rename from keyboards/converter/5291/keymaps/default/keymap.c rename to keyboards/converter/ibm_5291/keymaps/default/keymap.c diff --git a/keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf similarity index 100% rename from keyboards/converter/5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf rename to keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf diff --git a/keyboards/converter/5291/matrix.c b/keyboards/converter/ibm_5291/matrix.c similarity index 100% rename from keyboards/converter/5291/matrix.c rename to keyboards/converter/ibm_5291/matrix.c diff --git a/keyboards/converter/5291/matrix.csv b/keyboards/converter/ibm_5291/matrix.csv similarity index 100% rename from keyboards/converter/5291/matrix.csv rename to keyboards/converter/ibm_5291/matrix.csv diff --git a/keyboards/converter/5291/readme.md b/keyboards/converter/ibm_5291/readme.md similarity index 98% rename from keyboards/converter/5291/readme.md rename to keyboards/converter/ibm_5291/readme.md index 38a7c3c6ef57..06ae2e994e73 100644 --- a/keyboards/converter/5291/readme.md +++ b/keyboards/converter/ibm_5291/readme.md @@ -9,7 +9,7 @@ Hardware Supported: IBM 5291, Teensy 2.0 Make example for this keyboard (after setting up your build environment): - make converter/5291:default + make converter/ibm_5291:default 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). diff --git a/keyboards/converter/5291/rules.mk b/keyboards/converter/ibm_5291/rules.mk similarity index 100% rename from keyboards/converter/5291/rules.mk rename to keyboards/converter/ibm_5291/rules.mk