From 6747890562d7580a8d9b82df764322bdcd294a3b Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Sat, 24 Jul 2021 01:17:15 +1000 Subject: [PATCH] [Keyboard] Remove broken, unmaintained converter/ibm_5291 (#13658) --- keyboards/converter/ibm_5291/.noci | 0 keyboards/converter/ibm_5291/config.h | 39 --- keyboards/converter/ibm_5291/ibm_5291.c | 3 - keyboards/converter/ibm_5291/ibm_5291.h | 69 ----- keyboards/converter/ibm_5291/info.json | 96 ------ .../ibm_5291/keymaps/default/keymap.c | 233 -------------- .../keymaps/kbdbabel_doc_ibm5291_kbd.pdf | Bin 13054 -> 0 bytes keyboards/converter/ibm_5291/matrix.c | 284 ------------------ keyboards/converter/ibm_5291/matrix.csv | 96 ------ keyboards/converter/ibm_5291/readme.md | 72 ----- keyboards/converter/ibm_5291/rules.mk | 37 --- 11 files changed, 929 deletions(-) delete mode 100644 keyboards/converter/ibm_5291/.noci delete mode 100644 keyboards/converter/ibm_5291/config.h delete mode 100644 keyboards/converter/ibm_5291/ibm_5291.c delete mode 100644 keyboards/converter/ibm_5291/ibm_5291.h delete mode 100644 keyboards/converter/ibm_5291/info.json delete mode 100644 keyboards/converter/ibm_5291/keymaps/default/keymap.c delete mode 100644 keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf delete mode 100644 keyboards/converter/ibm_5291/matrix.c delete mode 100644 keyboards/converter/ibm_5291/matrix.csv delete mode 100644 keyboards/converter/ibm_5291/readme.md delete mode 100644 keyboards/converter/ibm_5291/rules.mk diff --git a/keyboards/converter/ibm_5291/.noci b/keyboards/converter/ibm_5291/.noci deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/keyboards/converter/ibm_5291/config.h b/keyboards/converter/ibm_5291/config.h deleted file mode 100644 index 59ec04cfb4..0000000000 --- a/keyboards/converter/ibm_5291/config.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -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 0x0001 -#define MANUFACTURER QMK -#define PRODUCT 5291 keyboard converter - -#define MATRIX_ROWS 5 -#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 DEBOUNCE 0 diff --git a/keyboards/converter/ibm_5291/ibm_5291.c b/keyboards/converter/ibm_5291/ibm_5291.c deleted file mode 100644 index 9b937a545a..0000000000 --- a/keyboards/converter/ibm_5291/ibm_5291.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "ibm_5291.h" -#include -#include "quantum.h" \ No newline at end of file diff --git a/keyboards/converter/ibm_5291/ibm_5291.h b/keyboards/converter/ibm_5291/ibm_5291.h deleted file mode 100644 index aa1b403242..0000000000 --- a/keyboards/converter/ibm_5291/ibm_5291.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -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_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 diff --git a/keyboards/converter/ibm_5291/info.json b/keyboards/converter/ibm_5291/info.json deleted file mode 100644 index dca1ca6f0d..0000000000 --- a/keyboards/converter/ibm_5291/info.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "keyboard_name": "IBM 5291", - "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard", - "maintainer": "listofoptions", - "width": 21, - "height": 5, - "layouts": { - "LAYOUT_5291": { - "layout": [ - {"label":"Sys Req", "x":0, "y":0}, - {"label":"Cmd", "x":1, "y":0}, - {"label":"`", "x":2.25, "y":0}, - {"label":"1", "x":3.25, "y":0}, - {"label":"2", "x":4.25, "y":0}, - {"label":"3", "x":5.25, "y":0}, - {"label":"4", "x":6.25, "y":0}, - {"label":"5", "x":7.25, "y":0}, - {"label":"6", "x":8.25, "y":0}, - {"label":"7", "x":9.25, "y":0}, - {"label":"8", "x":10.25, "y":0}, - {"label":"9", "x":11.25, "y":0}, - {"label":"0", "x":12.25, "y":0}, - {"label":"-", "x":13.25, "y":0}, - {"label":"=", "x":14.25, "y":0}, - {"label":"Backspace", "x":15.25, "y":0, "w":1.75}, - {"label":"Reverse Tab", "x":17, "y":0, "w":2}, - {"label":"Dup", "x":19, "y":0, "w":2}, - {"label":"Del", "x":0, "y":1}, - {"label":"Erase Input", "x":1, "y":1}, - {"label":"Tab", "x":2.25, "y":1, "w":1.5}, - {"label":"Q", "x":3.75, "y":1}, - {"label":"W", "x":4.75, "y":1}, - {"label":"E", "x":5.75, "y":1}, - {"label":"R", "x":6.75, "y":1}, - {"label":"T", "x":7.75, "y":1}, - {"label":"Y", "x":8.75, "y":1}, - {"label":"U", "x":9.75, "y":1}, - {"label":"I", "x":10.75, "y":1}, - {"label":"O", "x":11.75, "y":1}, - {"label":"P", "x":12.75, "y":1}, - {"label":"¢", "x":13.75, "y":1}, - {"label":"\\", "x":14.75, "y":1, "w":1.25}, - {"label":"7", "x":17, "y":1}, - {"label":"8", "x":18, "y":1}, - {"label":"9", "x":19, "y":1}, - {"label":"Field -", "x":20, "y":1}, - {"label":"Print", "x":0, "y":2}, - {"label":"Help", "x":1, "y":2}, - {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75}, - {"label":"A", "x":4, "y":2}, - {"label":"S", "x":5, "y":2}, - {"label":"D", "x":6, "y":2}, - {"label":"F", "x":7, "y":2}, - {"label":"G", "x":8, "y":2}, - {"label":"H", "x":9, "y":2}, - {"label":"J", "x":10, "y":2}, - {"label":"K", "x":11, "y":2}, - {"label":"L", "x":12, "y":2}, - {"label":";", "x":13, "y":2}, - {"label":"'", "x":14, "y":2}, - {"label":"{", "x":15, "y":2}, - {"label":"Field Exit", "x":16, "y":1, "h":2}, - {"label":"4", "x":17, "y":2}, - {"label":"5", "x":18, "y":2}, - {"label":"6", "x":19, "y":2}, - {"label":"Roll Up", "x":0, "y":3}, - {"label":"Roll Down", "x":1, "y":3}, - {"label":"Shift", "x":2.25, "y":3, "w":1.25}, - {"label":"<", "x":3.5, "y":3}, - {"label":"Z", "x":4.5, "y":3}, - {"label":"X", "x":5.5, "y":3}, - {"label":"C", "x":6.5, "y":3}, - {"label":"V", "x":7.5, "y":3}, - {"label":"B", "x":8.5, "y":3}, - {"label":"N", "x":9.5, "y":3}, - {"label":"M", "x":10.5, "y":3}, - {"label":",", "x":11.5, "y":3}, - {"label":".", "x":12.5, "y":3}, - {"label":"/", "x":13.5, "y":3}, - {"label":"Shift", "x":14.5, "y":3, "w":1.5}, - {"label":"Return", "x":16, "y":3}, - {"label":"1", "x":17, "y":3}, - {"label":"2", "x":18, "y":3}, - {"label":"3", "x":19, "y":3}, - {"label":"Field +", "x":20, "y":2, "h":3}, - {"label":"Left", "x":0, "y":4}, - {"label":"Right", "x":1, "y":4}, - {"label":"Error Reset", "x":2.25, "y":4, "w":2}, - {"label":"Space", "x":4.25, "y":4, "w":9.75}, - {"label":"Enter Rec Adv", "x":14, "y":4, "w":2}, - {"label":"0", "x":16, "y":4, "w":2}, - {"label":".", "x":18, "y":4, "w":2} - ] - } - } -} diff --git a/keyboards/converter/ibm_5291/keymaps/default/keymap.c b/keyboards/converter/ibm_5291/keymaps/default/keymap.c deleted file mode 100644 index 9b286c887d..0000000000 --- a/keyboards/converter/ibm_5291/keymaps/default/keymap.c +++ /dev/null @@ -1,233 +0,0 @@ -/* -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/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf deleted file mode 100644 index 3560598f02b8bacc12ef9426875a5b7076e32eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13054 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 Ks_N?R#svWCe-j@7 diff --git a/keyboards/converter/ibm_5291/matrix.c b/keyboards/converter/ibm_5291/matrix.c deleted file mode 100644 index 3946d02e51..0000000000 --- a/keyboards/converter/ibm_5291/matrix.c +++ /dev/null @@ -1,284 +0,0 @@ -/* -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 DEBOUNCE -# define DEBOUNCE 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))) - -#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 ( DEBOUNCE > 0 ) -static uint16_t debouncing_time ; -static bool debouncing = false ; -#endif - -static uint8_t matrix [MATRIX_ROWS] = {0}; - -#if ( DEBOUNCE > 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); -} - -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); // HI -} - -static -inline -void init_rows(void) { - 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 - } -} - -static -inline -void init_cols(void) { - 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 - } -} - -static -inline -void select_row(uint8_t current_row) { - 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 - } 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 < 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 - } 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 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 hi - _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 (DEBOUNCE > 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 (DEBOUNCE > 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 (DEBOUNCE > 0) - if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCE)) { - 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++) { - print_hex8(row); print(": "); - print_matrix_row(row); - print("\n"); - } -} diff --git a/keyboards/converter/ibm_5291/matrix.csv b/keyboards/converter/ibm_5291/matrix.csv deleted file mode 100644 index 40462c2143..0000000000 --- a/keyboards/converter/ibm_5291/matrix.csv +++ /dev/null @@ -1,96 +0,0 @@ -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/ibm_5291/readme.md b/keyboards/converter/ibm_5291/readme.md deleted file mode 100644 index 03406d3f9d..0000000000 --- a/keyboards/converter/ibm_5291/readme.md +++ /dev/null @@ -1,72 +0,0 @@ -# IBM 5291 keyboard converter - -[IBM 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/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). - - -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 - -| 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 - -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 diff --git a/keyboards/converter/ibm_5291/rules.mk b/keyboards/converter/ibm_5291/rules.mk deleted file mode 100644 index ba59d2ae9e..0000000000 --- a/keyboards/converter/ibm_5291/rules.mk +++ /dev/null @@ -1,37 +0,0 @@ -# MCU name -MCU = atmega32u4 - -# Bootloader selection -# Teensy halfkay -# Pro Micro caterina -# Atmel DFU atmel-dfu -# LUFA DFU lufa-dfu -# QMK DFU qmk-dfu -# ATmega32A bootloadHID -# ATmega328P USBasp -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 -MOUSEKEY_ENABLE = no # Mouse keys -EXTRAKEY_ENABLE = no # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -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. -SPLIT_KEYBOARD = no -WAIT_FOR_USB = yes -LAYOUTS_HAS_RGB = no -# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -CUSTOM_MATRIX = yes - -SRC = matrix.c