diff options
author | XScorpion2 <rcalt2vt@gmail.com> | 2019-05-06 17:06:43 -0500 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-05-06 15:06:43 -0700 |
commit | e01b2d518a1a08ce07278ef9a38c7a793c843749 (patch) | |
tree | bb63e0653e09308286d86df303c8d17a447df46c /keyboards/sol/rev1 | |
parent | 99500243e10c12c0a5005da49aa1986947b27153 (diff) | |
download | firmware-e01b2d518a1a08ce07278ef9a38c7a793c843749.tar.gz firmware-e01b2d518a1a08ce07278ef9a38c7a793c843749.tar.bz2 firmware-e01b2d518a1a08ce07278ef9a38c7a793c843749.zip |
[Keyboard] Sol keyboard conversion to split common (#5773)
* Split common conversion
* Updated serial and encoder pins
* Fixing default folder until r2
* Fixing oled driver on slave split common
* Fixing keymap compile errors
* Fixing oled inactivity timer on slave split common
* Hoisted oled driver task, init, & activity to keyboard.c
* Update keyboards/sol/config.h
Co-Authored-By: XScorpion2 <rcalt2vt@gmail.com>
* Remove TAPPING_FORCE_HOLD
Diffstat (limited to 'keyboards/sol/rev1')
-rw-r--r-- | keyboards/sol/rev1/config.h | 111 | ||||
-rw-r--r-- | keyboards/sol/rev1/matrix.c | 304 | ||||
-rw-r--r-- | keyboards/sol/rev1/rev1.c | 6 | ||||
-rw-r--r-- | keyboards/sol/rev1/rev1.h | 71 | ||||
-rw-r--r-- | keyboards/sol/rev1/rules.mk | 2 | ||||
-rw-r--r-- | keyboards/sol/rev1/split_util.c | 54 | ||||
-rw-r--r-- | keyboards/sol/rev1/split_util.h | 15 |
7 files changed, 3 insertions, 560 deletions
diff --git a/keyboards/sol/rev1/config.h b/keyboards/sol/rev1/config.h index 1d8391f64..056869daa 100644 --- a/keyboards/sol/rev1/config.h +++ b/keyboards/sol/rev1/config.h @@ -16,8 +16,7 @@ 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 REV1_CONFIG_H -#define REV1_CONFIG_H +#pragma once /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED @@ -27,117 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define PRODUCT Sol #define DESCRIPTION "An RGB, split, ortho-esque keyboard" -#define PREVENT_STUCK_MODIFIERS -#define TAPPING_FORCE_HOLD -#define TAPPING_TERM 150 - -#define USE_I2C -#define USE_SERIAL -#define USE_SERIAL_PD3 - -/* Select hand configuration */ -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS - -/* Select rows configuration */ -// Rows are 4 or 5 -// #define HELIX_ROWS 5 see ./rules.mk - -/* key matrix size */ -// Rows are doubled-up -#define MATRIX_ROWS 12 -#define MATRIX_ROW_PINS { C6, B6, B5, B4, D7, E6} - -// wiring of each half -#define MATRIX_COLS 7 -#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 } -// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order - -/* define if matrix has ghost */ -//#define MATRIX_HAS_GHOST - -/* number of backlight levels */ -// #define BACKLIGHT_LEVELS 3 - -/* Set 0 if debouncing isn't needed */ -#define DEBOUNCING_DELAY 5 - -/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ -//#define LOCKING_SUPPORT_ENABLE -/* Locking resynchronize hack */ -//#define LOCKING_RESYNC_ENABLE - -/* ws2812 RGB LED */ -#define RGB_DI_PIN B3 -#define RGBLIGHT_TIMER -//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD - -#define DRIVER_COUNT 1 -// #define RGB_MATRIX_KEYPRESSES -#define BACKLIGHT_PIN B7 -#define BACKLIGHT_LEVELS 5 - #ifdef LED_MIRRORED #define RGBLED_NUM 35 #else #define RGBLED_NUM 70 #endif #define DRIVER_LED_TOTAL RGBLED_NUM - -#define RGBLIGHT_RAINBOW_SWIRL_RANGE 1950 - -#ifdef IOS_DEVICE_ENABLE - #define RGBLIGHT_LIMIT_VAL 40 - #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 40 -#elif RGBLIGHT_FULL_POWER - #define RGBLIGHT_LIMIT_VAL 255 - #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 -#else - #define RGBLIGHT_LIMIT_VAL 120 - #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 -#endif - -#define RGBLIGHT_VAL_STEP (RGBLIGHT_LIMIT_VAL / 10) -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 - -#define RGBLIGHT_ANIMATIONS - -#define LED_HITS_TO_REMEMBER 5 - -#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE) -// USB_MAX_POWER_CONSUMPTION value for Helix keyboard -// 120 RGBoff, OLEDoff -// 120 OLED -// 330 RGB 6 -// 300 RGB 32 -// 310 OLED & RGB 32 - #define USB_MAX_POWER_CONSUMPTION 500 -#else - // fix iPhone and iPad power adapter issue - // iOS device need lessthan 100 - #define USB_MAX_POWER_CONSUMPTION 100 -#endif - -/* - * 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 -//#define NO_ACTION_MACRO -//#define NO_ACTION_FUNCTION - -#endif diff --git a/keyboards/sol/rev1/matrix.c b/keyboards/sol/rev1/matrix.c deleted file mode 100644 index 804d8b980..000000000 --- a/keyboards/sol/rev1/matrix.c +++ /dev/null @@ -1,304 +0,0 @@ -/* -Copyright 2012 Jun Wako <wakojun@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/>. -*/ - -/* - * scan matrix - */ -#include <stdint.h> -#include <stdbool.h> -#include <avr/io.h> -#include <avr/wdt.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include <drivers/avr/pro_micro.h> - -#include "serial.h" - -#ifndef DEBOUNCE -# define DEBOUNCE 5 -#endif - -#ifdef ENCODER_ENABLE_CUSTOM - #include "common/knob_v2.h" -#endif - -#define ERROR_DISCONNECT_COUNT 5 - -static uint8_t debouncing = DEBOUNCE; -static const int ROWS_PER_HAND = MATRIX_ROWS/2; -static uint8_t error_count = 0; -uint8_t is_master = 0 ; - -static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); -static uint8_t matrix_master_scan(void); - - -__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) -{ - debug_enable = true; - debug_matrix = true; - debug_mouse = true; - // initialize row and col - unselect_rows(); - init_cols(); - - TX_RX_LED_INIT; - - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; - matrix_debouncing[i] = 0; - } - - is_master = has_usb(); - - #ifdef ENCODER_ENABLE_CUSTOM - knob_init(); //FOR ENCODER - #endif - matrix_init_quantum(); -} - -uint8_t _matrix_scan(void) -{ - // Right hand is stored after the left in the matirx so, we need to offset it - int offset = isLeftHand ? 0 : (ROWS_PER_HAND); - - for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { - select_row(i); - _delay_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(); - if (matrix_debouncing[i+offset] != cols) { - matrix_debouncing[i+offset] = cols; - debouncing = DEBOUNCE; - } - unselect_rows(); - } - - if (debouncing) { - if (--debouncing) { - _delay_ms(1); - } else { - for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { - matrix[i+offset] = matrix_debouncing[i+offset]; - } - } - } - - #ifdef ENCODER_ENABLE_CUSTOM - knob_report_t knob_report = knob_report_read(); - - knob_report_reset(); - - matrix[5 + offset] &= 0b11111100; - if (knob_report.phase) { // I check for phase to avoid handling the rotation twice (on 90 and 270 degrees). - if (knob_report.dir > 0) { - matrix[5 + offset] |= 0b00000001; - } else if (knob_report.dir < 0) { - matrix[5 + offset] |= 0b00000010; - } - } - #endif - - return 1; -} - -int serial_transaction(void) { - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - int ret=serial_update_buffers(); - if (ret ) { - return 1; - } - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = serial_slave_buffer[i]; - } - return 0; -} - -uint8_t matrix_scan(void) -{ - if (is_master) { - matrix_master_scan(); - }else{ - matrix_slave_scan(); - - int offset = (isLeftHand) ? ROWS_PER_HAND : 0; - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[offset+i] = serial_master_buffer[i]; - } - - matrix_scan_quantum(); - } - return 1; -} - - -uint8_t matrix_master_scan(void) { - - int ret = _matrix_scan(); - - int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - serial_master_buffer[i] = matrix[offset+i]; - } - - if( serial_transaction() ) { - // turn on the indicator led when halves are disconnected - TXLED1; - - error_count++; - - if (error_count > ERROR_DISCONNECT_COUNT) { - // reset other half if disconnected - int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[slaveOffset+i] = 0; - } - } - } else { - // turn off the indicator led on no error - TXLED0; - error_count = 0; - } - matrix_scan_quantum(); - return ret; -} - -void matrix_slave_scan(void) { - _matrix_scan(); - - int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; - - for (int i = 0; i < ROWS_PER_HAND; ++i) { - serial_slave_buffer[i] = matrix[offset+i]; - } -} - -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] & ((matrix_row_t)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 void init_cols(void) -{ - for(int x = 0; x < MATRIX_COLS; x++) { - _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF); - _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF); - } -} - -static matrix_row_t read_cols(void) -{ - matrix_row_t result = 0; - for(int x = 0; x < MATRIX_COLS; x++) { - result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); - } - return result; -} - -static void unselect_rows(void) -{ - for(int x = 0; x < ROWS_PER_HAND; x++) { - _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); - _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); - } -} - -static void select_row(uint8_t row) -{ - _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF); - _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF); -} diff --git a/keyboards/sol/rev1/rev1.c b/keyboards/sol/rev1/rev1.c index b668b02e9..23896860e 100644 --- a/keyboards/sol/rev1/rev1.c +++ b/keyboards/sol/rev1/rev1.c @@ -1,4 +1,4 @@ -#include "sol.h" +#include "quantum.h" #ifdef RGB_MATRIX_ENABLE rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = { @@ -81,7 +81,3 @@ }; #endif -void matrix_init_kb(void) { - matrix_init_user(); -}; - diff --git a/keyboards/sol/rev1/rev1.h b/keyboards/sol/rev1/rev1.h index 27b5ac896..6f70f09be 100644 --- a/keyboards/sol/rev1/rev1.h +++ b/keyboards/sol/rev1/rev1.h @@ -1,70 +1 @@ -#ifndef REV1_H -#define REV1_H - -#include "sol.h" - -//void promicro_bootloader_jmp(bool program); -#include "quantum.h" - -#ifdef RGBLIGHT_ENABLE -//rgb led driver -#include "ws2812.h" -#endif - -#ifdef USE_I2C -#include <stddef.h> -#ifdef __AVR__ - #include <avr/io.h> - #include <avr/interrupt.h> -#endif -#endif - -//void promicro_bootloader_jmp(bool program); -// LEL/LER/REL/RER are -// LeftEncoderLeft, LeftEncoderRight, RightEncoderLeft, and RightEncoderRight - -#define LAYOUT( \ - L00, L01, L02, L03, L04, L05, L06, R06, R00, R01, R02, R03, R04, R05, \ - L10, L11, L12, L13, L14, L15, L16, R16, R10, R11, R12, R13, R14, R15, \ - L20, L21, L22, L23, L24, L25, L26, R26, R20, R21, R22, R23, R24, R25, \ - L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \ - L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45, \ - LEL, LER, L55, L56, R56, R50, REL, RER \ - ) \ - { \ - { L00, L01, L02, L03, L04, L05, L06 }, \ - { L10, L11, L12, L13, L14, L15, L16 }, \ - { L20, L21, L22, L23, L24, L25, L26 }, \ - { L30, L31, L32, L33, L34, L35, L36 }, \ - { L40, L41, L42, L43, L44, L45, L46 }, \ - { LEL, LER, KC_NO, KC_NO, KC_NO, L55, L56 }, \ - { R05, R04, R03, R02, R01, R00, R06 }, \ - { R15, R14, R13, R12, R11, R10, R16 }, \ - { R25, R24, R23, R22, R21, R20, R26 }, \ - { R35, R34, R33, R32, R31, R30, R36 }, \ - { R45, R44, R43, R42, R41, R40, R46 }, \ - { REL, RER, KC_NO, KC_NO, KC_NO, R50, R56 } \ - } - -#define KC________ KC_TRNS -#define KC_RGB_MOD RGB_MOD -#define KC_FN FN -#define KC_ADJ ADJ -#define LAYOUT_kc( \ - L00, L01, L02, L03, L04, L05, L06, R06, R00, R01, R02, R03, R04, R05, \ - L10, L11, L12, L13, L14, L15, L16, R16, R10, R11, R12, R13, R14, R15, \ - L20, L21, L22, L23, L24, L25, L26, R26, R20, R21, R22, R23, R24, R25, \ - L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \ - L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45, \ - LEL, LER, L55, L56, R56, R50, REL, RER \ - ) \ - LAYOUT( \ - KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \ - KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \ - KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \ - KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \ - KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, \ - KC_##LEL, KC_##LER, KC_##L55, KC_##L56, KC_##R56, KC_##R50, KC_##REL, KC_##RER \ - ) - -#endif +#pragma once diff --git a/keyboards/sol/rev1/rules.mk b/keyboards/sol/rev1/rules.mk index 99f4dd896..e69de29bb 100644 --- a/keyboards/sol/rev1/rules.mk +++ b/keyboards/sol/rev1/rules.mk @@ -1,2 +0,0 @@ -SRC += rev1/matrix.c \ - rev1/split_util.c diff --git a/keyboards/sol/rev1/split_util.c b/keyboards/sol/rev1/split_util.c deleted file mode 100644 index c645bbdfe..000000000 --- a/keyboards/sol/rev1/split_util.c +++ /dev/null @@ -1,54 +0,0 @@ -#include <avr/io.h> -#include <avr/wdt.h> -#include <avr/power.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include <avr/eeprom.h> -#include "split_util.h" -#include "matrix.h" -#include "keyboard.h" -#include "serial.h" - -volatile bool isLeftHand = true; - -static void setup_handedness(void) { - #ifdef EE_HANDS - isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); - #else - #if defined(MASTER_RIGHT) - isLeftHand = !has_usb(); - #else - isLeftHand = has_usb(); - #endif - #endif -} - -static void keyboard_master_setup(void) { - serial_master_init(); -} - -static void keyboard_slave_setup(void) { - serial_slave_init(); -} - -bool has_usb(void) { - USBCON |= (1 << OTGPADE); //enables VBUS pad - _delay_us(5); - return (USBSTA & (1<<VBUS)); //checks state of VBUS -} - -void split_keyboard_setup(void) { - setup_handedness(); - - if (has_usb()) { - keyboard_master_setup(); - } else { - keyboard_slave_setup(); - } - sei(); -} - -// this code runs before the usb and keyboard is initialized -void matrix_setup(void) { - split_keyboard_setup(); -} diff --git a/keyboards/sol/rev1/split_util.h b/keyboards/sol/rev1/split_util.h deleted file mode 100644 index 442163896..000000000 --- a/keyboards/sol/rev1/split_util.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef SPLIT_KEYBOARD_UTIL_H -#define SPLIT_KEYBOARD_UTIL_H - -#include <stdbool.h> -#include "eeconfig.h" - -extern volatile bool isLeftHand; - -// slave version of matix scan, defined in matrix.c -void matrix_slave_scan(void); - -void split_keyboard_setup(void); -bool has_usb(void); - -#endif |