forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds Planck Rev 7 & Updates rev6_drop to Matrix Lite Implementation (q…
…mk#21175) * adds planck/rev7 * Remove config.h include Co-authored-by: Drashna Jaelre <[email protected]> * convert planck matrices to lite implementation --------- Co-authored-by: Drashna Jaelre <[email protected]>
- Loading branch information
Showing
15 changed files
with
1,164 additions
and
130 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
/* | ||
* Copyright 2018 Jack Humbert <[email protected]> | ||
* Copyright 2018-2023 Jack Humbert <[email protected]> | ||
* | ||
* 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 | ||
|
@@ -17,155 +17,58 @@ | |
|
||
#include "quantum.h" | ||
|
||
#ifndef DEBOUNCE | ||
# define DEBOUNCE 5 | ||
#endif | ||
|
||
/* | ||
* col: { B11, B10, B2, B1, A7, B0 } | ||
* row: { A10, A9, A8, B15, C13, C14, C15, A2 } | ||
*/ | ||
/* matrix state(1:on, 0:off) */ | ||
static matrix_row_t matrix[MATRIX_ROWS]; | ||
static matrix_row_t matrix_debouncing[MATRIX_COLS]; | ||
static bool debouncing = false; | ||
static uint16_t debouncing_time = 0; | ||
|
||
__attribute__((weak)) void matrix_init_user(void) {} | ||
static pin_t matrix_row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; | ||
static pin_t matrix_col_pins[MATRIX_COLS] = MATRIX_COL_PINS; | ||
|
||
__attribute__((weak)) void matrix_scan_user(void) {} | ||
static matrix_row_t matrix_inverted[MATRIX_COLS]; | ||
|
||
__attribute__((weak)) void matrix_init_kb(void) { | ||
matrix_init_user(); | ||
} | ||
void matrix_init_custom(void) { | ||
// actual matrix setup - cols | ||
for (int i = 0; i < MATRIX_COLS; i++) { | ||
setPinOutput(matrix_col_pins[i]); | ||
} | ||
|
||
__attribute__((weak)) void matrix_scan_kb(void) { | ||
matrix_scan_user(); | ||
// rows | ||
for (int i = 0; i < MATRIX_ROWS; i++) { | ||
setPinInputLow(matrix_row_pins[i]); | ||
} | ||
} | ||
|
||
void matrix_init(void) { | ||
dprintf("matrix init\n"); | ||
// debug_matrix = true; | ||
bool matrix_scan_custom(matrix_row_t current_matrix[]) { | ||
bool changed = false; | ||
|
||
// actual matrix setup | ||
palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL); | ||
palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL); | ||
palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); | ||
palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL); | ||
palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL); | ||
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL); | ||
|
||
palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOA, 9, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOA, 8, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOB, 15, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOC, 13, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOC, 14, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOC, 15, PAL_MODE_INPUT_PULLDOWN); | ||
palSetPadMode(GPIOA, 2, PAL_MODE_INPUT_PULLDOWN); | ||
|
||
memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t)); | ||
memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t)); | ||
|
||
matrix_init_kb(); | ||
} | ||
|
||
uint8_t matrix_scan(void) { | ||
// actual matrix | ||
for (int col = 0; col < MATRIX_COLS; col++) { | ||
matrix_row_t data = 0; | ||
|
||
// strobe col { B11, B10, B2, B1, A7, B0 } | ||
switch (col) { | ||
case 0: | ||
palSetPad(GPIOB, 11); | ||
break; | ||
case 1: | ||
palSetPad(GPIOB, 10); | ||
break; | ||
case 2: | ||
palSetPad(GPIOB, 2); | ||
break; | ||
case 3: | ||
palSetPad(GPIOB, 1); | ||
break; | ||
case 4: | ||
palSetPad(GPIOA, 7); | ||
break; | ||
case 5: | ||
palSetPad(GPIOB, 0); | ||
break; | ||
} | ||
// strobe col | ||
writePinHigh(matrix_col_pins[col]); | ||
|
||
// need wait to settle pin state | ||
wait_us(20); | ||
|
||
// read row data { A10, A9, A8, B15, C13, C14, C15, A2 } | ||
data = ((palReadPad(GPIOA, 10) << 0) | (palReadPad(GPIOA, 9) << 1) | (palReadPad(GPIOA, 8) << 2) | (palReadPad(GPIOB, 15) << 3) | (palReadPad(GPIOC, 13) << 4) | (palReadPad(GPIOC, 14) << 5) | (palReadPad(GPIOC, 15) << 6) | (palReadPad(GPIOA, 2) << 7)); | ||
|
||
// unstrobe col { B11, B10, B2, B1, A7, B0 } | ||
switch (col) { | ||
case 0: | ||
palClearPad(GPIOB, 11); | ||
break; | ||
case 1: | ||
palClearPad(GPIOB, 10); | ||
break; | ||
case 2: | ||
palClearPad(GPIOB, 2); | ||
break; | ||
case 3: | ||
palClearPad(GPIOB, 1); | ||
break; | ||
case 4: | ||
palClearPad(GPIOA, 7); | ||
break; | ||
case 5: | ||
palClearPad(GPIOB, 0); | ||
break; | ||
// read row data | ||
for (int row = 0; row < MATRIX_ROWS; row++) { | ||
data |= (readPin(matrix_row_pins[row]) << row); | ||
} | ||
|
||
if (matrix_debouncing[col] != data) { | ||
matrix_debouncing[col] = data; | ||
debouncing = true; | ||
debouncing_time = timer_read(); | ||
} | ||
} | ||
// unstrobe col | ||
writePinLow(matrix_col_pins[col]); | ||
|
||
if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) { | ||
for (int row = 0; row < MATRIX_ROWS; row++) { | ||
matrix[row] = 0; | ||
for (int col = 0; col < MATRIX_COLS; col++) { | ||
matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col); | ||
} | ||
if (matrix_inverted[col] != data) { | ||
matrix_inverted[col] = data; | ||
} | ||
debouncing = false; | ||
} | ||
|
||
matrix_scan_kb(); | ||
|
||
return 1; | ||
} | ||
|
||
bool matrix_is_on(uint8_t row, uint8_t col) { | ||
return (matrix[row] & (1 << col)); | ||
} | ||
|
||
matrix_row_t matrix_get_row(uint8_t row) { | ||
return matrix[row]; | ||
} | ||
|
||
void matrix_print(void) { | ||
dprintf("\nr/c 01234567\n"); | ||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { | ||
dprintf("%X0: ", row); | ||
matrix_row_t data = matrix_get_row(row); | ||
for (int row = 0; row < MATRIX_ROWS; row++) { | ||
matrix_row_t old = current_matrix[row]; | ||
current_matrix[row] = 0; | ||
for (int col = 0; col < MATRIX_COLS; col++) { | ||
if (data & (1 << col)) | ||
dprintf("1"); | ||
else | ||
dprintf("0"); | ||
current_matrix[row] |= ((matrix_inverted[col] & (1 << row) ? 1 : 0) << col); | ||
} | ||
dprintf("\n"); | ||
changed |= old != current_matrix[row]; | ||
} | ||
|
||
return changed; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* Copyright 2020 QMK | ||
* | ||
* 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/>. | ||
*/ | ||
|
||
/* | ||
* This file was auto-generated by: | ||
* `qmk chibios-confmigrate -i keyboards/planck/rev6/chconf.h -r platforms/chibios/QMK_PROTON_C/configs/chconf.h` | ||
*/ | ||
|
||
#pragma once | ||
|
||
#define CH_CFG_ST_RESOLUTION 16 | ||
|
||
#define CH_CFG_ST_FREQUENCY 10000 | ||
|
||
#include_next <chconf.h> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Copyright 2023 Jack Humbert <[email protected]> | ||
* | ||
* 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 | ||
|
||
#define DIP_SWITCH_PINS \ | ||
{ B14, A15, A0, B9 } | ||
|
||
#define MUSIC_MAP | ||
#undef AUDIO_VOICES | ||
#undef AUDIO_PIN | ||
#define AUDIO_PIN A5 | ||
#define AUDIO_PIN_ALT A4 | ||
#define AUDIO_PIN_ALT_AS_NEGATIVE | ||
|
||
#define WS2812_PWM_DRIVER PWMD2 | ||
#define WS2812_PWM_CHANNEL 2 | ||
#define WS2812_PWM_PAL_MODE 1 | ||
#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 | ||
#define WS2812_DMA_CHANNEL 2 | ||
|
||
#define RGB_DISABLE_WHEN_USB_SUSPENDED | ||
|
||
/* | ||
* Feature disable options | ||
* These options are also useful to firmware size reduction. | ||
*/ | ||
|
||
/* disable debug print */ | ||
//#define NO_DEBUG | ||
|
||
/* disable print */ | ||
//#define NO_PRINT | ||
|
||
/* disable action features */ | ||
//#define NO_ACTION_LAYER | ||
//#define NO_ACTION_TAPPING | ||
//#define NO_ACTION_ONESHOT | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/* Copyright 2020 QMK | ||
* | ||
* 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 3 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 <https://www.gnu.org/licenses/>. | ||
*/ | ||
#pragma once | ||
|
||
#define HAL_USE_PWM TRUE | ||
#define HAL_USE_GPT TRUE | ||
#define HAL_USE_DAC TRUE | ||
#define HAL_USE_I2C TRUE | ||
#define HAL_USE_WDG TRUE | ||
|
||
#include_next <halconf.h> |
Oops, something went wrong.