]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add 2015 revision of Pegasus Hoof to QMK (#6595)
authorYan-Fa Li <yanfali@gmail.com>
Sat, 24 Aug 2019 20:10:36 +0000 (13:10 -0700)
committernoroadsleft <18669334+noroadsleft@users.noreply.github.com>
Sat, 24 Aug 2019 20:10:36 +0000 (13:10 -0700)
* Add 2015 revision of pegasus hoof to QMK

* Add different version strings

* Fix ansi tkl layout

 - temporary JIS mapping, I can't test this as I don't have the hardware

* Reverse engineer JIS layout macro for 2015 Pegasus Hoof

* Linting on 2013.h

* Add more resources to readme

* Update keyboards/bpiphany/pegasushoof/2013/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update keyboards/bpiphany/pegasushoof/2015/config.h

Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Update keyboards/bpiphany/pegasushoof/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Update keyboards/bpiphany/pegasushoof/readme.md

Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Try to use core debouncing code

* return changed

* Use helpers

16 files changed:
keyboards/bpiphany/pegasushoof/2013/2013.c [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2013/2013.h [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2013/config.h [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2013/matrix.c [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2013/rules.mk [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2015/2015.c [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2015/2015.h [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2015/config.h [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2015/matrix.c [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/2015/rules.mk [new file with mode: 0644]
keyboards/bpiphany/pegasushoof/config.h
keyboards/bpiphany/pegasushoof/matrix.c [deleted file]
keyboards/bpiphany/pegasushoof/pegasushoof.c [deleted file]
keyboards/bpiphany/pegasushoof/pegasushoof.h [deleted file]
keyboards/bpiphany/pegasushoof/readme.md
keyboards/bpiphany/pegasushoof/rules.mk

diff --git a/keyboards/bpiphany/pegasushoof/2013/2013.c b/keyboards/bpiphany/pegasushoof/2013/2013.c
new file mode 100644 (file)
index 0000000..7a489b2
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "2013.h"
+
+
+extern inline void ph_caps_led_on(void);
+extern inline void ph_caps_led_off(void);
+
+extern inline void ph_sclk_led_on(void);
+extern inline void ph_sclk_led_off(void);
+
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+    return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+}
+
+void matrix_init_kb(void) {
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+       return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       led_set_user(usb_led);
+}
diff --git a/keyboards/bpiphany/pegasushoof/2013/2013.h b/keyboards/bpiphany/pegasushoof/2013/2013.h
new file mode 100644 (file)
index 0000000..b3e911a
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "matrix.h"
+#include "quantum.h"
+
+#define LAYOUT( \
+    KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
+    KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
+    KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
+    KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
+    KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
+    KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0    \
+    ) { /*         00-A    01-B    02-C    03-D    04-E    05-F    06-G    07-H    08-I    09-J    10-K    11-L    12-M    13-N    14-O    15-P    16-Q    17-R */  \
+        /* 0 */  { KC_NO , KC_NO , KC0   , KC_NO , KC_NO , KF0   , KC_NO , KC_NO , KC_NO , KJ0   , KK0   , KC_NO , KM0   , KN0   , KO0   , KC_NO , KQ0   , KR0   }, \
+        /* 1 */  { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1   , KH1   , KI1   , KJ1   , KK1   , KL1   , KM1   , KC_NO , KO1   , KP1   , KC_NO , KC_NO }, \
+        /* 2 */  { KC_NO , KB2   , KC_NO , KD2   , KC_NO , KF2   , KG2   , KH2   , KI2   , KJ2   , KK2   , KL2   , KM2   , KC_NO , KO2   , KC_NO , KC_NO , KC_NO }, \
+        /* 3 */  { KA3   , KB3   , KC_NO , KC_NO , KC_NO , KF3   , KG3   , KH3   , KI3   , KJ3   , KK3   , KL3   , KM3   , KC_NO , KO3   , KC_NO , KC_NO , KC_NO }, \
+        /* 4 */  { KC_NO , KC_NO , KC4   , KC_NO , KE4   , KF4   , KG4   , KH4   , KI4   , KJ4   , KK4   , KL4   , KM4   , KC_NO , KO4   , KP4   , KQ4   , KR4   }, \
+        /* 5 */  { KC_NO , KC_NO , KC5   , KC_NO , KE5   , KF5   , KG5   , KH5   , KI5   , KJ5   , KK5   , KL5   , KM5   , KN5   , KO5   , KP5   , KC_NO , KC_NO }, \
+        /* 6 */  { KC_NO , KC_NO , KC6   , KC_NO , KC_NO , KF6   , KG6   , KH6   , KI6   , KJ6   , KK6   , KL6   , KC_NO , KN6   , KO6   , KC_NO , KQ6   , KC_NO }, \
+        /* 7 */  { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7   , KG7   , KH7   , KI7   , KJ7   , KK7   , KL7   , KM7   , KN7   , KC_NO , KP7   , KC_NO , KC_NO }  \
+    }
+
+#define LAYOUT_tkl_ansi( \
+    KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
+    KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
+    KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
+    KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
+    KB2,      KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
+    KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0  \
+    ) LAYOUT( \
+        KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
+        KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
+        KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
+        KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
+        KB2,KC_NO,KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
+        KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0  \
+    )
+
+#define LAYOUT_tkl_jis( \
+    KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,        KN5, KN7, KP7, \
+    KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO7, KO2,   KR4, KC4, KE4, \
+    KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2,             KQ4, KC5, KE5, \
+    KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1,                       \
+    KB2,      KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3,             KC6,      \
+    KP4, KD2, KN6, KG0,           KQ6,           KH0, KI0, KN0, KM0, KP1,        KC0, KQ0, KR0  \
+    ) { /*         00-A  01-B  02-C  03-D  04-E  05-F  06-G  07-H  08-I  09-J  10-K  11-L  12-M  13-N  14-O  15-P  16-Q  17-R */ \
+        /* 0 */  { KC_NO,  KC_NO,  KC0,    KC_NO,  KC_NO,  KF0,    KG0,    KH0,    KI0,    KJ0,    KK0,    KL0,    KM0,    KN0,    KO0,    KC_NO,  KQ0,    KR0   }, \
+        /* 1 */  { KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KG1,    KH1,    KI1,    KJ1,    KK1,    KL1,    KM1,    KC_NO,  KO1,    KP1,    KC_NO,  KC_NO }, \
+        /* 2 */  { KC_NO,  KB2,    KC_NO,  KD2,    KC_NO,  KF2,    KG2,    KH2,    KI2,    KJ2,    KK2,    KL2,    KM2,    KC_NO,  KO2,    KC_NO,  KC_NO,  KC_NO }, \
+        /* 3 */  { KC_NO,  KB3,    KC_NO,  KC_NO,  KC_NO,  KF3,    KG3,    KH3,    KI3,    KJ3,    KK3,    KL3,    KM3,    KC_NO,  KO3,    KC_NO,  KC_NO,  KC_NO }, \
+        /* 4 */  { KC_NO,  KC_NO,  KC4,    KC_NO,  KE4,    KF4,    KG4,    KH4,    KI4,    KJ4,    KK4,    KL4,    KM4,    KC_NO,  KO4,    KP4,    KQ4,    KR4   }, \
+        /* 5 */  { KC_NO,  KC_NO,  KC5,    KC_NO,  KE5,    KF5,    KG5,    KH5,    KI5,    KJ5,    KK5,    KL5,    KM5,    KN5,    KO5,    KP5,    KC_NO,  KC_NO }, \
+        /* 6 */  { KC_NO,  KC_NO,  KC6,    KC_NO,  KC_NO,  KF6,    KG6,    KC_NO,  KI6,    KJ6,    KK6,    KL6,    KC_NO,  KN6,    KO6,    KC_NO,  KQ6,    KC_NO }, \
+        /* 7 */  { KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KF7,    KG7,    KH7,    KI7,    KJ7,    KK7,    KL7,    KK7,    KL7,    KO7,    KP7,    KC_NO,  KC_NO }  \
+}
+
+inline void ph_caps_led_on(void)  { DDRC |=  (1<<6); PORTC &= ~(1<<6); }
+inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
+
+inline void ph_sclk_led_on(void)  { DDRC |=  (1<<5); PORTC &= ~(1<<5); }
+inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+
diff --git a/keyboards/bpiphany/pegasushoof/2013/config.h b/keyboards/bpiphany/pegasushoof/2013/config.h
new file mode 100644 (file)
index 0000000..d2f81fe
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6050
+#define DEVICE_VER      0x0104
+#define MANUFACTURER    Filco
+#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof 2013
+#define DESCRIPTION     QMK firmware for Majestouch TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
diff --git a/keyboards/bpiphany/pegasushoof/2013/matrix.c b/keyboards/bpiphany/pegasushoof/2013/matrix.c
new file mode 100644 (file)
index 0000000..a670d53
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+static uint8_t debouncing = DEBOUNCE;
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t col);
+
+__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;
+}
+
+void matrix_init(void)
+{
+       /* Column output pins */
+       DDRD  |=  0b01111011;
+       /* Row input pins */
+       DDRC  &= ~0b10000000;
+       DDRB  &= ~0b01111111;
+       PORTC |=  0b10000000;
+       PORTB |=  0b01111111;
+
+       for (uint8_t i=0; i < MATRIX_ROWS; i++)  {
+               matrix[i] = 0;
+               matrix_debouncing[i] = 0;
+       }
+
+       matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+       for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+               select_row(col);
+               wait_us(30);
+               matrix_row_t rows = read_cols();
+               for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+                       bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+                       bool curr_bit = rows & (1<<row);
+                       if (prev_bit != curr_bit) {
+                               matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
+                               debouncing = DEBOUNCE;
+                       }
+               }
+       }
+
+       if (debouncing) {
+               if (--debouncing) {
+                       wait_ms(1);
+               } else {
+                       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+                               matrix[i] = matrix_debouncing[i];
+                       }
+               }
+       }
+
+       matrix_scan_quantum();
+
+       return 1;
+}
+
+bool matrix_is_modified(void)
+{
+       if (debouncing)
+               return false;
+       return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+       return matrix[row] & 1 << col;
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+       return matrix[row];
+}
+
+void matrix_print(void)
+{
+       print("\nr/c 0123456789ABCDEF\n");
+       for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+               phex(row); print(": ");
+               pbin_reverse16(matrix_get_row(row));
+               print("\n");
+       }
+}
+
+uint8_t matrix_key_count(void)
+{
+       uint8_t count = 0;
+       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+               count += bitpop16(matrix[i]);
+       }
+       return count;
+}
+
+static matrix_row_t read_cols(void)
+{
+       return
+               (PINB & (1 << 5) ? 0 : 1 << 0) |
+               (PINC & (1 << 7) ? 0 : 1 << 1) |
+               (PINB & (1 << 4) ? 0 : 1 << 2) |
+               (PINB & (1 << 6) ? 0 : 1 << 3) |
+               (PINB & (1 << 1) ? 0 : 1 << 4) |
+               (PINB & (1 << 0) ? 0 : 1 << 5) |
+               (PINB & (1 << 3) ? 0 : 1 << 6) |
+               (PINB & (1 << 2) ? 0 : 1 << 7);
+}
+
+static void select_row(uint8_t col)
+{
+       switch (col) {
+               case 0:
+                       PORTD = (PORTD & ~0b01111011) | 0b00110011;
+                       break;
+               case 1:
+                       PORTD = (PORTD & ~0b01111011) | 0b01110000;
+                       break;
+               case 2:
+                       PORTD = (PORTD & ~0b01111011) | 0b00010011;
+                       break;
+               case 3:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101000;
+                       break;
+               case 4:
+                       PORTD = (PORTD & ~0b01111011) | 0b00001011;
+                       break;
+               case 5:
+                       PORTD = (PORTD & ~0b01111011) | 0b00111011;
+                       break;
+               case 6:
+                       PORTD = (PORTD & ~0b01111011) | 0b01111000;
+                       break;
+               case 7:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100001;
+                       break;
+               case 8:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101001;
+                       break;
+               case 9:
+                       PORTD = (PORTD & ~0b01111011) | 0b01110001;
+                       break;
+               case 10:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101010;
+                       break;
+               case 11:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100010;
+                       break;
+               case 12:
+                       PORTD = (PORTD & ~0b01111011) | 0b01111001;
+                       break;
+               case 13:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100000;
+                       break;
+               case 14:
+                       PORTD = (PORTD & ~0b01111011) | 0b01000011;
+                       break;
+               case 15:
+                       PORTD = (PORTD & ~0b01111011) | 0b00011011;
+                       break;
+               case 16:
+                       PORTD = (PORTD & ~0b01111011) | 0b00100011;
+                       break;
+               case 17:
+                       PORTD = (PORTD & ~0b01111011) | 0b00101011;
+                       break;
+       }
+}
diff --git a/keyboards/bpiphany/pegasushoof/2013/rules.mk b/keyboards/bpiphany/pegasushoof/2013/rules.mk
new file mode 100644 (file)
index 0000000..3215e35
--- /dev/null
@@ -0,0 +1,2 @@
+CUSTOM_MATRIX = yes
+SRC = matrix.c
diff --git a/keyboards/bpiphany/pegasushoof/2015/2015.c b/keyboards/bpiphany/pegasushoof/2015/2015.c
new file mode 100644 (file)
index 0000000..62841e7
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "2015.h"
+
+
+extern inline void ph_caps_led_on(void);
+extern inline void ph_caps_led_off(void);
+
+extern inline void ph_sclk_led_on(void);
+extern inline void ph_sclk_led_off(void);
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+    return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+}
+
+void matrix_init_kb(void) {
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+       return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       led_set_user(usb_led);
+}
diff --git a/keyboards/bpiphany/pegasushoof/2015/2015.h b/keyboards/bpiphany/pegasushoof/2015/2015.h
new file mode 100644 (file)
index 0000000..18bfc46
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "matrix.h"
+#include "quantum.h"
+
+#define  ___ XXXXXXX
+
+#define LAYOUT( \
+    KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5, \
+    KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4, \
+    KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3,   KK4, KO7, KQ7, \
+    KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6,      KB1,                  \
+    KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        KO6,      \
+    KA4, KP2, KC6,                KK6,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0  \
+    ) { /*         00-A  01-B  02-C  03-D  04-E  05-F  06-G  07-H  08-I  09-J  10-K  11-L  12-M  13-N  14-O  15-P  16-Q  17-R */ \
+        /* 0 */  { ___ , KB0 , KC0 , KD0 , ___ , KF0 , KG0 , ___ , ___ , ___ , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
+        /* 1 */  { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ }, \
+        /* 2 */  { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
+        /* 3 */  { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , KM3 , KN3 , ___ , ___ , ___ , KR3 }, \
+        /* 4 */  { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
+        /* 5 */  { KA5 , ___ , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
+        /* 6 */  { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
+        /* 7 */  { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 }  \
+    }
+
+#define LAYOUT_tkl_ansi( \
+    KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5, \
+    KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4, \
+    KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3,   KK4, KO7, KQ7, \
+    KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6,      KB1,                  \
+    KN2,      KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        KO6,      \
+    KA4, KP2, KC6,                KK6,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0  \
+    ) LAYOUT( \
+        KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5, \
+        KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4, \
+        KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3,   KK4, KO7, KQ7, \
+        KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6,      KB1,                  \
+        KN2,KC_NO,KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        KO6,      \
+        KA4, KP2, KC6,                KK6,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0  \
+    )
+
+#define LAYOUT_tkl_jis( \
+    KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,        KC7, KC5, KA5, \
+    KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB5, KB2,   KL4, KO4, KQ4, \
+    KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2,             KK4, KO7, KQ7, \
+    KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB3, KB1,                       \
+    KN2,      KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KE0, KN3,             KO6,      \
+    KA4, KP2, KC6, KJ0,           KK6,           KI0, KH0, KC0, KD0, KA1,        KO0, KK0, KL0  \
+    ) { /*         00-A  01-B  02-C  03-D  04-E  05-F  06-G  07-H  08-I  09-J  10-K  11-L  12-M  13-N  14-O  15-P  16-Q  17-R */ \
+        /* 0 */  { ___ , KB0 , KC0 , KD0 , KE0 , KF0 , KG0 , KH0 , KI0 , KJ0 , KK0 , KL0 , ___ , ___ , KO0 , ___ , ___ , KR0 }, \
+        /* 1 */  { KA1 , KB1 , ___ , KD1 , KE1 , KF1 , KG1 , KH1 , KI1 , KJ1 , ___ , ___ , ___ , ___ , ___ , ___ , ___ ,     }, \
+        /* 2 */  { ___ , KB2 , ___ , KD2 , KE2 , KF2 , KG2 , KH2 , KI2 , KJ2 , ___ , ___ , ___ , KN2 , ___ , KP2 , ___ , KR2 }, \
+        /* 3 */  { ___ , KB3 , ___ , KD3 , KE3 , KF3 , KG3 , KH3 , KI3 , KJ3 , ___ , ___ , ___ , KN3 , ___ , ___ , ___ , KR3 }, \
+        /* 4 */  { KA4 , KB4 , ___ , KD4 , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , ___ , ___ , KO4 , ___ , KQ4 , KR4 }, \
+        /* 5 */  { KA5 , KB5 , KC5 , KD5 , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , ___ , ___ , ___ , ___ , ___ , ___ , ___ , KR5 }, \
+        /* 6 */  { ___ , KB6 , KC6 , ___ , KE6 , KF6 , KG6 , KH6 , ___ , KJ6 , KK6 , ___ , ___ , ___ , KO6 , ___ , ___ , KR6 }, \
+        /* 7 */  { KA7 , KB7 , KC7 , KD7 , KE7 , KF7 , KG7 , KH7 , KI7 , KJ7 , ___ , ___ , ___ , ___ , KO7 , ___ , KQ7 , KR7 }  \
+}
+
+inline void ph_caps_led_on(void)  { DDRC |=  (1<<6); PORTC &= ~(1<<6); }
+inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
+
+inline void ph_sclk_led_on(void)  { DDRC |=  (1<<5); PORTC &= ~(1<<5); }
+inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+
diff --git a/keyboards/bpiphany/pegasushoof/2015/config.h b/keyboards/bpiphany/pegasushoof/2015/config.h
new file mode 100644 (file)
index 0000000..6edfa59
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6050
+#define DEVICE_VER      0x0104
+#define MANUFACTURER    Filco
+#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof 2015
+#define DESCRIPTION     QMK firmware for Majestouch TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
diff --git a/keyboards/bpiphany/pegasushoof/2015/matrix.c b/keyboards/bpiphany/pegasushoof/2015/matrix.c
new file mode 100644 (file)
index 0000000..db03993
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+  Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+  Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t col);
+
+inline uint8_t matrix_rows(void)
+{
+  return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void)
+{
+  return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+  /* Column output pins */
+  DDRD  |=  0b01111011;
+  /* Row input pins */
+  DDRC  &= ~0b10000000;
+  DDRB  &= ~0b01111111;
+  PORTC |=  0b10000000;
+  PORTB |=  0b01111111;
+
+  for (uint8_t i=0; i < matrix_rows(); i++)  {
+    matrix[i] = 0;
+    matrix_debouncing[i] = 0;
+  }
+
+  matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+  bool changed = false;
+  for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+    select_row(col);
+    wait_us(30);
+    matrix_row_t rows = read_cols();
+    for (uint8_t row = 0; row < matrix_rows(); row++) {
+      bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+      bool curr_bit = rows & (1<<row);
+      if ((changed |= prev_bit != curr_bit)) {
+           matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
+      }
+    }
+  }
+
+  debounce(matrix_debouncing, matrix, matrix_rows(), changed);
+  matrix_scan_quantum();
+
+  return (uint8_t)changed;
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+  return matrix[row];
+}
+
+void matrix_print(void)
+{
+  print("\nr/c 0123456789ABCDEF\n");
+  for (uint8_t row = 0; row < matrix_rows(); row++) {
+    phex(row); print(": ");
+    pbin_reverse16(matrix_get_row(row));
+    print("\n");
+  }
+}
+
+uint8_t matrix_key_count(void)
+{
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < matrix_rows(); i++) {
+    count += bitpop16(matrix_get_row(i));
+  }
+  return count;
+}
+
+static matrix_row_t read_cols(void)
+{
+  return
+    (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<0)) |
+    (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<1)) |
+    (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
+    (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
+    (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
+    (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
+    (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
+    (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7));
+}
+
+static void select_row(uint8_t col)
+{
+  switch (col) {
+  case  0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break;
+  case  1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break;
+  case  2: PORTD = (PORTD & ~0b01111011) | 0b01100000; break;
+  case  3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break;
+  case  4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break;
+  case  5: PORTD = (PORTD & ~0b01111011) | 0b01101010; break;
+  case  6: PORTD = (PORTD & ~0b01111011) | 0b01110001; break;
+  case  7: PORTD = (PORTD & ~0b01111011) | 0b01101001; break;
+  case  8: PORTD = (PORTD & ~0b01111011) | 0b01100001; break;
+  case  9: PORTD = (PORTD & ~0b01111011) | 0b01111000; break;
+  case 10: PORTD = (PORTD & ~0b01111011) | 0b00100011; break;
+  case 11: PORTD = (PORTD & ~0b01111011) | 0b00101011; break;
+  case 12: PORTD = (PORTD & ~0b01111011) | 0b00110011; break;
+  case 13: PORTD = (PORTD & ~0b01111011) | 0b01110000; break;
+  case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break;
+  case 15: PORTD = (PORTD & ~0b01111011) | 0b01101000; break;
+  case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break;
+  case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break;
+  }
+}
diff --git a/keyboards/bpiphany/pegasushoof/2015/rules.mk b/keyboards/bpiphany/pegasushoof/2015/rules.mk
new file mode 100644 (file)
index 0000000..3215e35
--- /dev/null
@@ -0,0 +1,2 @@
+CUSTOM_MATRIX = yes
+SRC = matrix.c
index cd89b7582af6e3aeee08075d89ea89216bd62496..6868dc13541ef9aa7e6b688e19daa69c90b32baa 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -15,27 +15,6 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
 
 #include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6050
-#define DEVICE_VER      0x0104
-#define MANUFACTURER    Filco
-#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof
-#define DESCRIPTION     QMK firmware for Majestouch TKL
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 18
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-#endif
diff --git a/keyboards/bpiphany/pegasushoof/matrix.c b/keyboards/bpiphany/pegasushoof/matrix.c
deleted file mode 100644 (file)
index a670d53..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
-Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-static uint8_t debouncing = DEBOUNCE;
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(void);
-static void select_row(uint8_t col);
-
-__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;
-}
-
-void matrix_init(void)
-{
-       /* Column output pins */
-       DDRD  |=  0b01111011;
-       /* Row input pins */
-       DDRC  &= ~0b10000000;
-       DDRB  &= ~0b01111111;
-       PORTC |=  0b10000000;
-       PORTB |=  0b01111111;
-
-       for (uint8_t i=0; i < MATRIX_ROWS; i++)  {
-               matrix[i] = 0;
-               matrix_debouncing[i] = 0;
-       }
-
-       matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
-       for (uint8_t col = 0; col < MATRIX_COLS; col++) {
-               select_row(col);
-               wait_us(30);
-               matrix_row_t rows = read_cols();
-               for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-                       bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
-                       bool curr_bit = rows & (1<<row);
-                       if (prev_bit != curr_bit) {
-                               matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
-                               debouncing = DEBOUNCE;
-                       }
-               }
-       }
-
-       if (debouncing) {
-               if (--debouncing) {
-                       wait_ms(1);
-               } else {
-                       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-                               matrix[i] = matrix_debouncing[i];
-                       }
-               }
-       }
-
-       matrix_scan_quantum();
-
-       return 1;
-}
-
-bool matrix_is_modified(void)
-{
-       if (debouncing)
-               return false;
-       return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
-       return matrix[row] & 1 << col;
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
-       return matrix[row];
-}
-
-void matrix_print(void)
-{
-       print("\nr/c 0123456789ABCDEF\n");
-       for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-               phex(row); print(": ");
-               pbin_reverse16(matrix_get_row(row));
-               print("\n");
-       }
-}
-
-uint8_t matrix_key_count(void)
-{
-       uint8_t count = 0;
-       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-               count += bitpop16(matrix[i]);
-       }
-       return count;
-}
-
-static matrix_row_t read_cols(void)
-{
-       return
-               (PINB & (1 << 5) ? 0 : 1 << 0) |
-               (PINC & (1 << 7) ? 0 : 1 << 1) |
-               (PINB & (1 << 4) ? 0 : 1 << 2) |
-               (PINB & (1 << 6) ? 0 : 1 << 3) |
-               (PINB & (1 << 1) ? 0 : 1 << 4) |
-               (PINB & (1 << 0) ? 0 : 1 << 5) |
-               (PINB & (1 << 3) ? 0 : 1 << 6) |
-               (PINB & (1 << 2) ? 0 : 1 << 7);
-}
-
-static void select_row(uint8_t col)
-{
-       switch (col) {
-               case 0:
-                       PORTD = (PORTD & ~0b01111011) | 0b00110011;
-                       break;
-               case 1:
-                       PORTD = (PORTD & ~0b01111011) | 0b01110000;
-                       break;
-               case 2:
-                       PORTD = (PORTD & ~0b01111011) | 0b00010011;
-                       break;
-               case 3:
-                       PORTD = (PORTD & ~0b01111011) | 0b01101000;
-                       break;
-               case 4:
-                       PORTD = (PORTD & ~0b01111011) | 0b00001011;
-                       break;
-               case 5:
-                       PORTD = (PORTD & ~0b01111011) | 0b00111011;
-                       break;
-               case 6:
-                       PORTD = (PORTD & ~0b01111011) | 0b01111000;
-                       break;
-               case 7:
-                       PORTD = (PORTD & ~0b01111011) | 0b01100001;
-                       break;
-               case 8:
-                       PORTD = (PORTD & ~0b01111011) | 0b01101001;
-                       break;
-               case 9:
-                       PORTD = (PORTD & ~0b01111011) | 0b01110001;
-                       break;
-               case 10:
-                       PORTD = (PORTD & ~0b01111011) | 0b01101010;
-                       break;
-               case 11:
-                       PORTD = (PORTD & ~0b01111011) | 0b01100010;
-                       break;
-               case 12:
-                       PORTD = (PORTD & ~0b01111011) | 0b01111001;
-                       break;
-               case 13:
-                       PORTD = (PORTD & ~0b01111011) | 0b01100000;
-                       break;
-               case 14:
-                       PORTD = (PORTD & ~0b01111011) | 0b01000011;
-                       break;
-               case 15:
-                       PORTD = (PORTD & ~0b01111011) | 0b00011011;
-                       break;
-               case 16:
-                       PORTD = (PORTD & ~0b01111011) | 0b00100011;
-                       break;
-               case 17:
-                       PORTD = (PORTD & ~0b01111011) | 0b00101011;
-                       break;
-       }
-}
diff --git a/keyboards/bpiphany/pegasushoof/pegasushoof.c b/keyboards/bpiphany/pegasushoof/pegasushoof.c
deleted file mode 100644 (file)
index cde8148..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "pegasushoof.h"
-
-
-extern inline void ph_caps_led_on(void);
-extern inline void ph_caps_led_off(void);
-
-extern inline void ph_sclk_led_on(void);
-extern inline void ph_sclk_led_off(void);
-
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-};
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-__attribute__ ((weak))
-bool process_action_user(keyrecord_t *record) {
-    return true;
-}
-
-__attribute__ ((weak))
-void led_set_user(uint8_t usb_led) {
-}
-
-void matrix_init_kb(void) {
-       matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-       matrix_scan_user();
-}
-
-bool process_action_kb(keyrecord_t *record) {
-       return process_action_user(record);
-}
-
-void led_set_kb(uint8_t usb_led) {
-       led_set_user(usb_led);
-}
diff --git a/keyboards/bpiphany/pegasushoof/pegasushoof.h b/keyboards/bpiphany/pegasushoof/pegasushoof.h
deleted file mode 100644 (file)
index b91235a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef PEGASUSHOOF_H
-#define PEGASUSHOOF_H
-
-#include "matrix.h"
-#include "quantum.h"
-
-#define LAYOUT( \
-    KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
-    KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
-    KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
-    KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
-    KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
-    KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0    \
-    ) { /*         00-A    01-B    02-C    03-D    04-E    05-F    06-G    07-H    08-I    09-J    10-K    11-L    12-M    13-N    14-O    15-P    16-Q    17-R */  \
-        /* 0 */  { KC_NO , KC_NO , KC0   , KC_NO , KC_NO , KF0   , KC_NO , KC_NO , KC_NO , KJ0   , KK0   , KC_NO , KM0   , KN0   , KO0   , KC_NO , KQ0   , KR0   }, \
-        /* 1 */  { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1   , KH1   , KI1   , KJ1   , KK1   , KL1   , KM1   , KC_NO , KO1   , KP1   , KC_NO , KC_NO }, \
-        /* 2 */  { KC_NO , KB2   , KC_NO , KD2   , KC_NO , KF2   , KG2   , KH2   , KI2   , KJ2   , KK2   , KL2   , KM2   , KC_NO , KO2   , KC_NO , KC_NO , KC_NO }, \
-        /* 3 */  { KA3   , KB3   , KC_NO , KC_NO , KC_NO , KF3   , KG3   , KH3   , KI3   , KJ3   , KK3   , KL3   , KM3   , KC_NO , KO3   , KC_NO , KC_NO , KC_NO }, \
-        /* 4 */  { KC_NO , KC_NO , KC4   , KC_NO , KE4   , KF4   , KG4   , KH4   , KI4   , KJ4   , KK4   , KL4   , KM4   , KC_NO , KO4   , KP4   , KQ4   , KR4   }, \
-        /* 5 */  { KC_NO , KC_NO , KC5   , KC_NO , KE5   , KF5   , KG5   , KH5   , KI5   , KJ5   , KK5   , KL5   , KM5   , KN5   , KO5   , KP5   , KC_NO , KC_NO }, \
-        /* 6 */  { KC_NO , KC_NO , KC6   , KC_NO , KC_NO , KF6   , KG6   , KH6   , KI6   , KJ6   , KK6   , KL6   , KC_NO , KN6   , KO6   , KC_NO , KQ6   , KC_NO }, \
-        /* 7 */  { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7   , KG7   , KH7   , KI7   , KJ7   , KK7   , KL7   , KM7   , KN7   , KC_NO , KP7   , KC_NO , KC_NO }  \
-    }
-
-#define LAYOUT_tkl_ansi( \
-    KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
-    KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
-    KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
-    KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
-    KB2,      KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
-    KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0  \
-    ) LAYOUT( \
-        KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
-        KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
-        KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
-        KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
-        KB2,KC_NO,KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
-        KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0  \
-    )
-
-#define LAYOUT_tkl_jis( \
-  KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,        KN5, KN7, KP7, \
-  KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO7, KO2,   KR4, KC4, KE4, \
-  KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2,             KQ4, KC5, KE5, \
-  KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1,                       \
-  KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0,      KB3,             KC6,      \
-  KP4, KD2, KN6, KG0,           KQ6,           KH0, KI0, KN0, KM0, KP1,        KC0, KQ0, KR0  \
-  ) { /*        00-A  01-B  02-C  03-D  04-E  05-F  06-G  07-H  08-I  09-J  10-K  11-L  12-M  13-N  14-O  15-P  16-Q  17-R */ \
-     /* 0 */  { KC_NO,  KC_NO,  KC0,    KC_NO,  KC_NO,  KF0,    KG0,    KH0,    KI0,    KJ0,    KK0,    KL0,    KM0,    KN0,    KO0,    KC_NO,  KQ0,    KR0   }, \
-     /* 1 */  { KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KG1,    KH1,    KI1,    KJ1,    KK1,    KL1,    KM1,    KC_NO,  KO1,    KP1,    KC_NO,  KC_NO }, \
-     /* 2 */  { KC_NO,  KB2,    KC_NO,  KD2,    KC_NO,  KF2,    KG2,    KH2,    KI2,    KJ2,    KK2,    KL2,    KM2,    KC_NO,  KO2,    KC_NO,  KC_NO,  KC_NO }, \
-     /* 3 */  { KC_NO,  KB3,    KC_NO,  KC_NO,  KC_NO,  KF3,    KG3,    KH3,    KI3,    KJ3,    KK3,    KL3,    KM3,    KC_NO,  KO3,    KC_NO,  KC_NO,  KC_NO }, \
-     /* 4 */  { KC_NO,  KC_NO,  KC4,    KC_NO,  KE4,    KF4,    KG4,    KH4,    KI4,    KJ4,    KK4,    KL4,    KM4,    KC_NO,  KO4,    KP4,    KQ4,    KR4   }, \
-     /* 5 */  { KC_NO,  KC_NO,  KC5,    KC_NO,  KE5,    KF5,    KG5,    KH5,    KI5,    KJ5,    KK5,    KL5,    KM5,    KN5,    KO5,    KP5,    KC_NO,  KC_NO }, \
-     /* 6 */  { KC_NO,  KC_NO,  KC6,    KC_NO,  KC_NO,  KF6,    KG6,    KC_NO,  KI6,    KJ6,    KK6,    KL6,    KC_NO,  KN6,    KO6,    KC_NO,  KQ6,    KC_NO }, \
-     /* 7 */  { KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KF7,    KG7,    KH7,    KI7,    KJ7,    KK7,    KL7,    KK7,    KL7,    KO7,    KP7,    KC_NO,  KC_NO }  \
-}
-
-inline void ph_caps_led_on(void)  { DDRC |=  (1<<6); PORTC &= ~(1<<6); }
-inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
-
-inline void ph_sclk_led_on(void)  { DDRC |=  (1<<5); PORTC &= ~(1<<5); }
-inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
-
-
-#endif
index 10ec79300ace5a0f2a695df2f25f6b3915c67e72..ab49db03c43d90b13617fa5c8918754975d64e18 100644 (file)
@@ -3,7 +3,7 @@
 A replacement controller that turns your Filco Majestouch 87/88 mechanical keyboard into a fully programmable keyboard.
 
 Keyboard Maintainer: QMK Community  
-Hardware Supported: Pegasus Hoof  
+Hardware Supported: Pegasus Hoof, revisions [20131001](2013/) and [20150108](2015/)  
 Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/filco-pegasus-hoof-controller/)
 
 Make example for this keyboard (after setting up your build environment):
@@ -11,3 +11,11 @@ Make example for this keyboard (after setting up your build environment):
     make bpiphany/pegasus_hoof: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).
+
+### Additional Resources
+
+With many thanks to Bathroom Epiphanies for all the kind advice and help.
+
+ * [Schematic](https://deskthority.net/wiki/Costar_replacement_controllers#Schematic)
+ * [bpiphany TMK source](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard)
+ * [bpiphany QMK source](https://github.com/BathroomEpiphanies/epiphanies_qmk_keyboard)
index 00e4bb0ea10e654c363cd8432dc77402d2a03751..e81ee886efe9b77517bdc82a1418658b8a795b1e 100644 (file)
@@ -64,5 +64,4 @@ RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 
 LAYOUTS = tkl_ansi
 
-CUSTOM_MATRIX = yes
-SRC = matrix.c
+DEFAULT_FOLDER=bpiphany/pegasushoof/2013