[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
master
Andrew Missel 2022-01-08 15:22:14 -06:00 committed by GitHub
parent 31331e6d33
commit 4c080be8e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 162 additions and 24 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,7 @@
# Frosty Flake Controller # Frosty Flake Controller
This is the firmware for Rev. 20140521 of the Frosty Flake controller This is the firmware for the Frosty Flake controller by
by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), [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

View File

@ -1,22 +1 @@
# MCU name DEFAULT_FOLDER=bpiphany/frosty_flake/20140521
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