summaryrefslogtreecommitdiff
path: root/keyboards/sol/rev1
diff options
context:
space:
mode:
authorXScorpion2 <rcalt2vt@gmail.com>2019-05-06 17:06:43 -0500
committerDrashna Jaelre <drashna@live.com>2019-05-06 15:06:43 -0700
commite01b2d518a1a08ce07278ef9a38c7a793c843749 (patch)
treebb63e0653e09308286d86df303c8d17a447df46c /keyboards/sol/rev1
parent99500243e10c12c0a5005da49aa1986947b27153 (diff)
[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.h111
-rw-r--r--keyboards/sol/rev1/matrix.c304
-rw-r--r--keyboards/sol/rev1/rev1.c6
-rw-r--r--keyboards/sol/rev1/rev1.h71
-rw-r--r--keyboards/sol/rev1/rules.mk2
-rw-r--r--keyboards/sol/rev1/split_util.c54
-rw-r--r--keyboards/sol/rev1/split_util.h15
7 files changed, 3 insertions, 560 deletions
diff --git a/keyboards/sol/rev1/config.h b/keyboards/sol/rev1/config.h
index 1d8391f645..056869daa0 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 804d8b9809..0000000000
--- 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 b668b02e99..23896860e5 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 27b5ac8966..6f70f09bee 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 99f4dd896c..e69de29bb2 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 c645bbdfef..0000000000
--- 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 4421638969..0000000000
--- 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