瀏覽代碼

[Keyboard] Bathroom Epiphanies Frosty Flake rev 20130602 (#15365)

* add optional support for Frosty Flake rev 20130602

* update documentation with instructions on building for rev 20130602

* support revisions using subfolders instead of preprocessor directives

* rules.mk cleanup
Andrew Missel 4 年之前
父節點
當前提交
4c080be8e8

+ 0 - 0
keyboards/bpiphany/frosty_flake/frosty_flake.c → keyboards/bpiphany/frosty_flake/20130602/20130602.c


+ 86 - 0
keyboards/bpiphany/frosty_flake/20130602/matrix.c

@@ -0,0 +1,86 @@
+/*
+  Copyright 2017 Gabriel Young <gabeplaysdrums@live.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 <util/delay.h>
+#include "matrix.h"
+
+
+static matrix_row_t scan_col(void) {
+    // Each of the 8 columns is read off pins as below
+    //   7  6  5  4  3  2  1  0
+    // ,--,--,--,--,--,--,--,--,
+    // |B0|B3|B2|B1|B6|B4|B5|C7|
+    // `--`--`--`--`--`--`--`--`
+    return (
+        (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) |
+        (PIND&(1<<0) ? 0 : ((matrix_row_t)1<<1)) |
+        (PIND&(1<<1) ? 0 : ((matrix_row_t)1<<2)) |
+        (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<3)) |
+        (PIND&(1<<5) ? 0 : ((matrix_row_t)1<<4)) |
+        (PIND&(1<<4) ? 0 : ((matrix_row_t)1<<5)) |
+        (PIND&(1<<2) ? 0 : ((matrix_row_t)1<<6)) |
+        (PIND&(1<<6) ? 0 : ((matrix_row_t)1<<7))
+    );
+}
+
+static void select_row(uint8_t row) {
+    switch (row) {
+        case  0: PORTB = (PORTB & ~0b01111110) | 0b00111010; break;
+        case  1: PORTB = (PORTB & ~0b01111110) | 0b01011000; break;
+        case  2: PORTB = (PORTB & ~0b01111110) | 0b01110000; break;
+        case  3: PORTB = (PORTB & ~0b01111110) | 0b01101110; break;
+        case  4: PORTB = (PORTB & ~0b01111110) | 0b01101100; break;
+        case  5: PORTB = (PORTB & ~0b01111110) | 0b01101010; break;
+        case  6: PORTB = (PORTB & ~0b01111110) | 0b01101000; break;
+        case  7: PORTB = (PORTB & ~0b01111110) | 0b01100100; break;
+        case  8: PORTB = (PORTB & ~0b01111110) | 0b01100000; break;
+        case  9: PORTB = (PORTB & ~0b01111110) | 0b01100010; break;
+        case 10: PORTB = (PORTB & ~0b01111110) | 0b00011010; break;
+        case 11: PORTB = (PORTB & ~0b01111110) | 0b00011000; break;
+        case 12: PORTB = (PORTB & ~0b01111110) | 0b00111100; break;
+        case 13: PORTB = (PORTB & ~0b01111110) | 0b01100110; break;
+        case 14: PORTB = (PORTB & ~0b01111110) | 0b00111000; break;
+        case 15: PORTB = (PORTB & ~0b01111110) | 0b01110010; break;
+        case 16: PORTB = (PORTB & ~0b01111110) | 0b00011110; break;
+        case 17: PORTB = (PORTB & ~0b01111110) | 0b00111110; break;
+    }
+}
+
+void matrix_init_custom(void) {
+    /* Column output pins */
+    DDRB  |=  0b01111110;
+    /* Row input pins */
+    DDRC  &= ~0b10000100;
+    DDRD  &= ~0b01110111;
+    PORTC |=  0b10000100;
+    PORTD |=  0b01110111;
+}
+
+// matrix is 18 uint8_t.
+// we select the row (one of 18), then read the column
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+	bool has_changed = false;
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        matrix_row_t orig = current_matrix[row];
+        select_row(row);
+        _delay_us(3);
+        current_matrix[row] = scan_col();
+        has_changed |= (orig != current_matrix[row]);
+    }
+
+    return has_changed;
+}

+ 22 - 0
keyboards/bpiphany/frosty_flake/20130602/rules.mk

@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no        # Console for debug
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = no            # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+AUDIO_ENABLE = no           # Audio output
+
+CUSTOM_MATRIX = lite
+SRC += 20130602/matrix.c
+
+LAYOUTS = tkl_ansi

+ 24 - 0
keyboards/bpiphany/frosty_flake/20140521/20140521.c

@@ -0,0 +1,24 @@
+#include "frosty_flake.h"
+
+void keyboard_pre_init_kb() {
+    setPinOutput(B7); // num lock
+    writePinHigh(B7);
+    setPinOutput(C5); // caps lock
+    writePinHigh(C7);
+    setPinOutput(C6); // scroll lock
+    writePinHigh(C6);
+
+    keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t usb_led) {
+    // user requests no further processing
+    if (!led_update_user(usb_led))
+        return true;
+
+    writePin(B7, !usb_led.caps_lock);
+    writePin(C5, !usb_led.num_lock);
+    writePin(C6, !usb_led.scroll_lock);
+
+    return true;
+}

+ 1 - 0
keyboards/bpiphany/frosty_flake/matrix.c → keyboards/bpiphany/frosty_flake/20140521/matrix.c

@@ -18,6 +18,7 @@
 #include <util/delay.h>
 #include <util/delay.h>
 #include "matrix.h"
 #include "matrix.h"
 
 
+
 static matrix_row_t scan_col(void) {
 static matrix_row_t scan_col(void) {
     // Each of the 8 columns is read off pins as below
     // Each of the 8 columns is read off pins as below
     //   7  6  5  4  3  2  1  0
     //   7  6  5  4  3  2  1  0

+ 22 - 0
keyboards/bpiphany/frosty_flake/20140521/rules.mk

@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no        # Console for debug
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = no            # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+AUDIO_ENABLE = no           # Audio output
+
+CUSTOM_MATRIX = lite
+SRC += 20140521/matrix.c
+
+LAYOUTS = tkl_ansi

+ 6 - 2
keyboards/bpiphany/frosty_flake/readme.md

@@ -1,7 +1,7 @@
 # Frosty Flake Controller
 # Frosty Flake Controller
 
 
-This is the firmware for Rev. 20140521 of the Frosty Flake controller
-by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/),
+This is the firmware for the Frosty Flake controller by
+[Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/),
 a replacement controller for the [Cooler Master Quick Fire
 a replacement controller for the [Cooler Master Quick Fire
 Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
 Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
 
 
@@ -11,6 +11,10 @@ but has been cleaned up to match the
 [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf)
 [schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf)
 and gone through some minor refactoring for QMK.
 and gone through some minor refactoring for QMK.
 
 
+## Revision support
+There are two revisions of this controller. 20140521 is built by default.
+If you need to build for 20130602, it can be built with `make bpiphany/frosty_flake/20130602`
+
 ## 104 and 87 layout support
 ## 104 and 87 layout support
 
 
 Support for both 104 key and 87 key layouts is provided. See the
 Support for both 104 key and 87 key layouts is provided. See the

+ 1 - 22
keyboards/bpiphany/frosty_flake/rules.mk

@@ -1,22 +1 @@
-# MCU name
-MCU = atmega32u2
-
-# Bootloader selection
-BOOTLOADER = atmel-dfu
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes       # Mouse keys
-EXTRAKEY_ENABLE = yes       # Audio control and System control
-CONSOLE_ENABLE = no        # Console for debug
-COMMAND_ENABLE = no        # Commands for debug and configuration
-NKRO_ENABLE = no            # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
-AUDIO_ENABLE = no           # Audio output
-
-CUSTOM_MATRIX = lite
-SRC += matrix.c
-
-LAYOUTS = tkl_ansi
+DEFAULT_FOLDER=bpiphany/frosty_flake/20140521