diff options
196 files changed, 910 insertions, 4240 deletions
| diff --git a/common_features.mk b/common_features.mk index 8c593024f0..5cde023d10 100644 --- a/common_features.mk +++ b/common_features.mk @@ -356,7 +356,7 @@ endif  ifeq ($(strip $(PRINTING_ENABLE)), yes)      OPT_DEFS += -DPRINTING_ENABLE      SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c -    SRC += $(TMK_DIR)/protocol/serial_uart.c +    QUANTUM_LIB_SRC += uart.c  endif  VARIABLE_TRACE ?= no @@ -604,6 +604,7 @@ ifeq ($(strip $(UNICODE_ENABLE)), yes)  endif  ifeq ($(strip $(UNICODE_COMMON)), yes) +    OPT_DEFS += -DUNICODE_COMMON_ENABLE      SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c  endif @@ -719,6 +720,7 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)      ifeq ($(strip $(BLUETOOTH_DRIVER)), RN42)          OPT_DEFS += -DMODULE_RN42 -        SRC += $(TMK_DIR)/protocol/serial_uart.c +        SRC += $(DRIVER_PATH)/bluetooth/rn42.c +        QUANTUM_LIB_SRC += uart.c      endif  endif diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md index c8c74cb8f0..bbdf7e122c 100644 --- a/docs/feature_haptic_feedback.md +++ b/docs/feature_haptic_feedback.md @@ -167,7 +167,7 @@ List of waveform sequences from the datasheet:  ```  #define DRV_GREETING *sequence name or number*  ``` -If haptic feedback is enabled, the keyboard will vibrate to a specific sqeuence during startup. That can be selected using the following define: +If haptic feedback is enabled, the keyboard will vibrate to a specific sequence during startup. That can be selected using the following define:  ```  #define DRV_MODE_DEFAULT *sequence name or number* @@ -207,4 +207,4 @@ With the entry of `#define NO_HAPTIC_LOCKKEYS` in config.h, none of the followin  With the entry of `#define NO_HAPTIC_NAV` in config.h, none of the following keys will trigger a feedback: Print Screen, Pause, Insert, Delete, Page Down, Page Up, Left Arrow, Up Arrow, Right Arrow, Down Arrow, End, Home.  ### NO_HAPTIC_NUMERIC -With the entry of `#define NO_HAPTIC_NUMERIC` in config.h, none of the following keys between 0 and 9 (KC_1 ... KC_0) will trigger a feedback.
\ No newline at end of file +With the entry of `#define NO_HAPTIC_NUMERIC` in config.h, none of the following keys between 0 and 9 (KC_1 ... KC_0) will trigger a feedback. diff --git a/docs/feature_key_lock.md b/docs/feature_key_lock.md index 8e6e29f0e6..7681394229 100644 --- a/docs/feature_key_lock.md +++ b/docs/feature_key_lock.md @@ -19,4 +19,5 @@ First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Th  Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys.md) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).  This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held. -Switching layers will not cancel the Key Lock. +Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function. + diff --git a/docs/keycodes.md b/docs/keycodes.md index ba06e1b8b6..2ea4fc74e2 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -326,6 +326,7 @@ See also: [Magic Keycodes](keycodes_magic.md)  |----------------------------------|---------|--------------------------------------------------------------------------|  |`MAGIC_SWAP_CONTROL_CAPSLOCK`     |`CL_SWAP`|Swap Caps Lock and Left Control                                           |  |`MAGIC_UNSWAP_CONTROL_CAPSLOCK`   |`CL_NORM`|Unswap Caps Lock and Left Control                                         | +|`MAGIC_TOGGLE_CONTROL_CAPSLOCK`   |`CL_TOGG`|Toggle Caps Lock and Left Control swap                                    |  |`MAGIC_CAPSLOCK_TO_CONTROL`       |`CL_CTRL`|Treat Caps Lock as Control                                                |  |`MAGIC_UNCAPSLOCK_TO_CONTROL`     |`CL_CAPS`|Stop treating Caps Lock as Control                                        |  |`MAGIC_SWAP_LCTL_LGUI`            |`LCG_SWP`|Swap Left Control and GUI                                                 | diff --git a/docs/keycodes_magic.md b/docs/keycodes_magic.md index 7e1b1a4f62..01eb69168e 100644 --- a/docs/keycodes_magic.md +++ b/docs/keycodes_magic.md @@ -6,6 +6,7 @@  |----------------------------------|---------|--------------------------------------------------------------------------|  |`MAGIC_SWAP_CONTROL_CAPSLOCK`     |`CL_SWAP`|Swap Caps Lock and Left Control                                           |  |`MAGIC_UNSWAP_CONTROL_CAPSLOCK`   |`CL_NORM`|Unswap Caps Lock and Left Control                                         | +|`MAGIC_TOGGLE_CONTROL_CAPSLOCK`   |`CL_TOGG`|Toggle Caps Lock and Left Control swap                                    |  |`MAGIC_CAPSLOCK_TO_CONTROL`       |`CL_CTRL`|Treat Caps Lock as Control                                                |  |`MAGIC_UNCAPSLOCK_TO_CONTROL`     |`CL_CAPS`|Stop treating Caps Lock as Control                                        |  |`MAGIC_SWAP_LCTL_LGUI`            |`LCG_SWP`|Swap Left Control and GUI                                                 | diff --git a/drivers/bluetooth/rn42.c b/drivers/bluetooth/rn42.c new file mode 100644 index 0000000000..2ef40bb7e0 --- /dev/null +++ b/drivers/bluetooth/rn42.c @@ -0,0 +1,99 @@ +/* Copyright 2021 + * + * 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 "report.h" +#include "uart.h" + +#ifndef RN42_BAUD_RATE +#    define RN42_BAUD_RATE 115200 +#endif + +// https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf#G7.663734 +static inline uint16_t rn42_consumer_usage_to_bitmap(uint16_t usage) { +    switch (usage) { +        case AC_HOME: +            return 0x0001; +        case AL_EMAIL: +            return 0x0002; +        case AC_SEARCH: +            return 0x0004; +        case AL_KEYBOARD_LAYOUT: +            return 0x0008; +        case AUDIO_VOL_UP: +            return 0x0010; +        case AUDIO_VOL_DOWN: +            return 0x0020; +        case AUDIO_MUTE: +            return 0x0040; +        case TRANSPORT_PLAY_PAUSE: +            return 0x0080; +        case TRANSPORT_NEXT_TRACK: +            return 0x0100; +        case TRANSPORT_PREV_TRACK: +            return 0x0200; +        case TRANSPORT_STOP: +            return 0x0400; +        case TRANSPORT_EJECT: +            return 0x0800; +        case TRANSPORT_FAST_FORWARD: +            return 0x1000; +        case TRANSPORT_REWIND: +            return 0x2000; +        case TRANSPORT_STOP_EJECT: +            return 0x4000; +        case AL_LOCAL_BROWSER: +            return 0x8000; +        default: +            return 0; +    } +} + +void rn42_init(void) { uart_init(RN42_BAUD_RATE); } + +void rn42_send_keyboard(report_keyboard_t *report) { +    uart_write(0xFD); +    uart_write(0x09); +    uart_write(0x01); +    uart_write(report->mods); +    uart_write(0x00); +    for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { +        uart_write(report->keys[i]); +    } +} + +void rn42_send_mouse(report_mouse_t *report) { +    uart_write(0xFD); +    uart_write(0x00); +    uart_write(0x03); +    uart_write(report->buttons); +    uart_write(report->x); +    uart_write(report->y); +    uart_write(report->v);  // should try sending the wheel v here +    uart_write(report->h);  // should try sending the wheel h here +    uart_write(0x00); +} + +void rn42_send_consumer(uint16_t data) { +    static uint16_t last_data = 0; +    if (data == last_data) return; +    last_data       = data; +    uint16_t bitmap = rn42_consumer_usage_to_bitmap(data); +    uart_write(0xFD); +    uart_write(0x03); +    uart_write(0x03); +    uart_write(bitmap & 0xFF); +    uart_write((bitmap >> 8) & 0xFF); +} diff --git a/drivers/bluetooth/rn42.h b/drivers/bluetooth/rn42.h new file mode 100644 index 0000000000..4747759111 --- /dev/null +++ b/drivers/bluetooth/rn42.h @@ -0,0 +1,25 @@ +/* Copyright 2021 + * + * 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 "report.h" + +void rn42_init(void); + +void rn42_send_keyboard(report_keyboard_t *report); + +void rn42_send_mouse(report_mouse_t *report); + +void rn42_send_consumer(uint16_t data); diff --git a/drivers/sensors/pmw3360.c b/drivers/sensors/pmw3360.c index 50d1c35801..78d9c3bc8b 100644 --- a/drivers/sensors/pmw3360.c +++ b/drivers/sensors/pmw3360.c @@ -184,7 +184,7 @@ bool pmw3360_init(void) {      spi_write_adv(REG_Config2, 0x00); -    spi_write_adv(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -30, 30)); +    spi_write_adv(REG_Angle_Tune, constrain(ROTATIONAL_TRANSFORM_ANGLE, -127, 127));      spi_write_adv(REG_Lift_Config, PMW3360_LIFTOFF_DISTANCE); diff --git a/keyboards/40percentclub/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c index 0fa7838dfd..4eb2c190c1 100644 --- a/keyboards/40percentclub/ut47/keymaps/default/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/default/keymap.c @@ -15,7 +15,7 @@   */  #include QMK_KEYBOARD_H  #ifdef LED_ENABLE -  #include "protocol/serial.h" +  #include "uart.h"  #endif  #define LT3_TAB LT(3, KC_TAB) @@ -108,11 +108,11 @@ LAYOUT( /* Tab */  //LED keymap functions   #ifdef LED_ENABLE  void led_chmode(void) { -  serial_send(101); +  uart_write(0x65);  }  void led_toggle(void) { -  serial_send(100); +  uart_write(0x64);  }  bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c index 0c1c2e7599..8a0ba7b391 100644 --- a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c @@ -15,7 +15,7 @@   */  #include QMK_KEYBOARD_H  #ifdef LED_ENABLE -  #include "protocol/serial.h" +  #include "uart.h"  #endif  #define LT3_TAB LT(3, KC_TAB) @@ -108,11 +108,11 @@ LAYOUT( /* Tab */  //LED keymap functions   #ifdef LED_ENABLE  void led_chmode(void) { -  serial_send(101); +  uart_write(0x65);  }  void led_toggle(void) { -  serial_send(100); +  uart_write(0x64);  }  bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c index 52372e2857..5e79cdb9a4 100644 --- a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c @@ -15,7 +15,7 @@   */  #include QMK_KEYBOARD_H  #ifdef LED_ENABLE -  #include "protocol/serial.h" +  #include "uart.h"  #endif @@ -151,11 +151,11 @@ LAYOUT( /* GAMING, toggled on and off - L5 */  //LED keymap functions   #ifdef LED_ENABLE  void led_chmode(void) { -  serial_send(101); +  uart_write(0x65);  }  void led_toggle(void) { -  serial_send(100); +  uart_write(0x64);  }  bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c index ae8ad3e378..75dba3a2d4 100644 --- a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c +++ b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c @@ -15,7 +15,7 @@   */  #include QMK_KEYBOARD_H  #ifdef LED_ENABLE -  #include "protocol/serial.h" +  #include "uart.h"  #endif  #define LT3_TAB LT(3, KC_TAB) @@ -60,11 +60,11 @@ LAYOUT( /* Tab */  //LED keymap functions   #ifdef LED_ENABLE  void led_chmode(void) { -  serial_send(101); +  uart_write(0x65);  }  void led_toggle(void) { -  serial_send(100); +  uart_write(0x64);  }  bool process_record_user(uint16_t keycode, keyrecord_t *record) { diff --git a/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c index e47c7f8e13..89537592c5 100644 --- a/keyboards/40percentclub/ut47/matrix.c +++ b/keyboards/40percentclub/ut47/matrix.c @@ -26,10 +26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "debug.h"  #include "util.h"  #include "matrix.h" -#ifdef LED_ENABLE -    #include "protocol/serial.h" -#endif -  #ifndef DEBOUNCE  #   define DEBOUNCE	5 @@ -69,10 +65,6 @@ void matrix_init(void)          matrix[i] = 0;          matrix_debouncing[i] = 0;      } -   -#ifdef LED_ENABLE -    serial_init(); -#endif  }  uint8_t matrix_scan(void) @@ -104,12 +96,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk index 29cee474ff..6c9805e0fc 100644 --- a/keyboards/40percentclub/ut47/rules.mk +++ b/keyboards/40percentclub/ut47/rules.mk @@ -18,4 +18,5 @@ AUDIO_ENABLE = no           # Audio output  # custom matrix setup  CUSTOM_MATRIX = yes -SRC += matrix.c protocol/serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/40percentclub/ut47/ut47.c b/keyboards/40percentclub/ut47/ut47.c index 9054335e5a..864edaeb57 100644 --- a/keyboards/40percentclub/ut47/ut47.c +++ b/keyboards/40percentclub/ut47/ut47.c @@ -15,7 +15,11 @@   */  #include "ut47.h"  #ifdef LED_ENABLE -  #include "protocol/serial.h" +  #include "uart.h" + +void matrix_init_kb() { +  uart_init(9600); +}  #endif  bool process_record_kb(uint16_t keycode, keyrecord_t *record) { @@ -23,7 +27,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {  	// runs for every action, just before processing by the firmware    if (record->event.pressed) {      #ifdef LED_ENABLE -      serial_send((record->event.key.row*16)+record->event.key.col); +      uart_write((record->event.key.row*16)+record->event.key.col);      #endif    }  	return process_record_user(keycode, record); diff --git a/keyboards/ai03/orbit/config.h b/keyboards/ai03/orbit/config.h index 9ad384c8ff..0e4f4c3baf 100644 --- a/keyboards/ai03/orbit/config.h +++ b/keyboards/ai03/orbit/config.h @@ -44,13 +44,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define MATRIX_COL_PINS { C7, B4, D7, D6, D4, F1, F0 }  #define MATRIX_ROW_PINS_RIGHT { B6, B5, B4, D7, E6 }  #define MATRIX_COL_PINS_RIGHT { D4, D6, F1, F0, F4, F5, C6 } - -#define SPLIT_HAND_PIN D5 - -//#define USE_I2C - -#define SELECT_SOFT_SERIAL_SPEED 1 -  #define UNUSED_PINS  /* COL2ROW, ROW2COL */ @@ -60,6 +53,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.   * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.   */  #define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6 +#define SELECT_SOFT_SERIAL_SPEED 1 + +#define SPLIT_LED_STATE_ENABLE +#define SPLIT_LAYER_STATE_ENABLE + +#define SPLIT_HAND_PIN D5  #define BACKLIGHT_PIN B7  // #define BACKLIGHT_BREATHING diff --git a/keyboards/ai03/orbit/keymaps/default/keymap.c b/keyboards/ai03/orbit/keymaps/default/keymap.c index fa383d7c00..c9696ccde6 100644 --- a/keyboards/ai03/orbit/keymaps/default/keymap.c +++ b/keyboards/ai03/orbit/keymaps/default/keymap.c @@ -48,25 +48,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  bool process_record_user(uint16_t keycode, keyrecord_t *record) {  	switch (keycode) {  		case MANUAL: -			if (record->event.pressed)  -			{ -				// Keypress +			if (record->event.pressed) {  				SEND_STRING("https://kb.ai03.me/redir/orbit"); -			}  -			else  -			{ -				// Key release  			}  			break;  		case DBLZERO: -			if (record->event.pressed)  -			{ -				// Keypress +			if (record->event.pressed) {  				SEND_STRING("00"); -			}  -			else  -			{ -				// Key release  			}  			break;    } diff --git a/keyboards/ai03/orbit/matrix.c b/keyboards/ai03/orbit/matrix.c deleted file mode 100644 index b8e3296686..0000000000 --- a/keyboards/ai03/orbit/matrix.c +++ /dev/null @@ -1,328 +0,0 @@ -/* -Copyright 2012 Jun Wako <[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/>. -*/ - -/* - * scan matrix - */ -#include <stdint.h> -#include <stdbool.h> -#include "wait.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include "config.h" -#include "split_flags.h" -#include "quantum.h" -#include "debounce.h" -#include "transport.h" - -#if (MATRIX_COLS <= 8) -#  define print_matrix_header() print("\nr/c 01234567\n") -#  define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) -#  define matrix_bitpop(i) bitpop(matrix[i]) -#  define ROW_SHIFTER ((uint8_t)1) -#elif (MATRIX_COLS <= 16) -#  define print_matrix_header() print("\nr/c 0123456789ABCDEF\n") -#  define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row)) -#  define matrix_bitpop(i) bitpop16(matrix[i]) -#  define ROW_SHIFTER ((uint16_t)1) -#elif (MATRIX_COLS <= 32) -#  define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n") -#  define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row)) -#  define matrix_bitpop(i) bitpop32(matrix[i]) -#  define ROW_SHIFTER ((uint32_t)1) -#endif - -#define ERROR_DISCONNECT_COUNT 5 - -//#define ROWS_PER_HAND (MATRIX_ROWS / 2) - -#ifdef DIRECT_PINS -static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS; -#else -static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; -#endif - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t raw_matrix[ROWS_PER_HAND]; - -// row offsets for each hand -uint8_t thisHand, thatHand; - -// user-defined overridable functions - -__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) {} - -__attribute__((weak)) void matrix_slave_scan_user(void) {} - -// helper functions - -inline uint8_t matrix_rows(void) { return MATRIX_ROWS; } - -inline uint8_t matrix_cols(void) { return MATRIX_COLS; } - -bool matrix_is_modified(void) { -  if (debounce_active()) 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_matrix_header(); - -  for (uint8_t row = 0; row < MATRIX_ROWS; row++) { -    print_hex8(row); -    print(": "); -    print_matrix_row(row); -    print("\n"); -  } -} - -uint8_t matrix_key_count(void) { -  uint8_t count = 0; -  for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -    count += matrix_bitpop(i); -  } -  return count; -} - -// matrix code - -#ifdef DIRECT_PINS - -static void init_pins(void) { -  for (int row = 0; row < MATRIX_ROWS; row++) { -    for (int col = 0; col < MATRIX_COLS; col++) { -      pin_t pin = direct_pins[row][col]; -      if (pin != NO_PIN) { -        setPinInputHigh(pin); -      } -    } -  } -} - -static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { -  matrix_row_t last_row_value = current_matrix[current_row]; -  current_matrix[current_row] = 0; - -  for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { -    pin_t pin = direct_pins[current_row][col_index]; -    if (pin != NO_PIN) { -      current_matrix[current_row] |= readPin(pin) ? 0 : (ROW_SHIFTER << col_index); -    } -  } - -  return (last_row_value != current_matrix[current_row]); -} - -#elif (DIODE_DIRECTION == COL2ROW) - -static void select_row(uint8_t row) { -  setPinOutput(row_pins[row]); -  writePinLow(row_pins[row]); -} - -static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); } - -static void unselect_rows(void) { -  for (uint8_t x = 0; x < ROWS_PER_HAND; x++) { -    setPinInputHigh(row_pins[x]); -  } -} - -static void init_pins(void) { -  unselect_rows(); -  for (uint8_t x = 0; x < MATRIX_COLS; x++) { -    setPinInputHigh(col_pins[x]); -  } -} - -static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { -  // Store last value of row prior to reading -  matrix_row_t last_row_value = current_matrix[current_row]; - -  // Clear data in matrix row -  current_matrix[current_row] = 0; - -  // Select row and wait for row selecton to stabilize -  select_row(current_row); -  wait_us(30); - -  // For each col... -  for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { -    // Populate the matrix row with the state of the col pin -    current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (ROW_SHIFTER << col_index); -  } - -  // Unselect row -  unselect_row(current_row); - -  return (last_row_value != current_matrix[current_row]); -} - -#elif (DIODE_DIRECTION == ROW2COL) - -static void select_col(uint8_t col) { -  setPinOutput(col_pins[col]); -  writePinLow(col_pins[col]); -} - -static void unselect_col(uint8_t col) { setPinInputHigh(col_pins[col]); } - -static void unselect_cols(void) { -  for (uint8_t x = 0; x < MATRIX_COLS; x++) { -    setPinInputHigh(col_pins[x]); -  } -} - -static void init_pins(void) { -  unselect_cols(); -  for (uint8_t x = 0; x < ROWS_PER_HAND; x++) { -    setPinInputHigh(row_pins[x]); -  } -} - -static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) { -  bool matrix_changed = false; - -  // Select col and wait for col selecton to stabilize -  select_col(current_col); -  wait_us(30); - -  // For each row... -  for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) { -    // Store last value of row prior to reading -    matrix_row_t last_row_value = current_matrix[row_index]; - -    // Check row pin state -    if (readPin(row_pins[row_index])) { -      // Pin HI, clear col bit -      current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); -    } else { -      // Pin LO, set col bit -      current_matrix[row_index] |= (ROW_SHIFTER << current_col); -    } - -    // Determine if the matrix changed state -    if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) { -      matrix_changed = true; -    } -  } - -  // Unselect col -  unselect_col(current_col); - -  return matrix_changed; -} - -#endif - -void matrix_init(void) { -  debug_enable = true; -  debug_matrix = true; -  debug_mouse  = true; - -  // Set pinout for right half if pinout for that half is defined -  if (!isLeftHand) { -#ifdef MATRIX_ROW_PINS_RIGHT -    const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT; -    for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -      row_pins[i] = row_pins_right[i]; -    } -#endif -#ifdef MATRIX_COL_PINS_RIGHT -    const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT; -    for (uint8_t i = 0; i < MATRIX_COLS; i++) { -      col_pins[i] = col_pins_right[i]; -    } -#endif -  } - -  thisHand = isLeftHand ? 0 : (ROWS_PER_HAND); -  thatHand = ROWS_PER_HAND - thisHand; - -  // initialize key pins -  init_pins(); - -  // initialize matrix state: all keys off -  for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -    matrix[i] = 0; -  } - -  debounce_init(ROWS_PER_HAND); - -  matrix_init_quantum(); -} - -uint8_t _matrix_scan(void) { -  bool changed = false; - -#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW) -  // Set row, read cols -  for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) { -    changed |= read_cols_on_row(raw_matrix, current_row); -  } -#elif (DIODE_DIRECTION == ROW2COL) -  // Set col, read rows -  for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { -    changed |= read_rows_on_col(raw_matrix, current_col); -  } -#endif - -  debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed); - -  return 1; -} - -uint8_t matrix_scan(void) { -  uint8_t ret = _matrix_scan(); - -  if (is_keyboard_master()) { -    static uint8_t error_count; - -    if (!transport_master(matrix + thatHand)) { -      error_count++; - -      if (error_count > ERROR_DISCONNECT_COUNT) { -        // reset other half if disconnected -        for (int i = 0; i < ROWS_PER_HAND; ++i) { -          matrix[thatHand + i] = 0; -        } -      } -    } else { -      error_count = 0; -    } - -    matrix_scan_quantum(); -  } else { -    transport_slave(matrix + thisHand); -    matrix_slave_scan_user(); -  } - -  return ret; -} diff --git a/keyboards/ai03/orbit/orbit.c b/keyboards/ai03/orbit/orbit.c index 97553e318a..5097f9cd90 100644 --- a/keyboards/ai03/orbit/orbit.c +++ b/keyboards/ai03/orbit/orbit.c @@ -15,196 +15,124 @@   */  #include "orbit.h"  #include "split_util.h" -#include "transport.h" +void led_init_ports(void) { +    // Initialize indicator LEDs to output +    if (isLeftHand) { +        setPinOutput(C6); +        setPinOutput(B6); +        setPinOutput(B5); +    } else { +        setPinOutput(F6); +        setPinOutput(F7); +        setPinOutput(C7); +    } + +    set_layer_indicators(0); +}  // Call led_toggle to set LEDs easily  // LED IDs: -//  +//  // (LEFT) 0 1 2   |   3 4 5 (RIGHT) - -void led_toggle(int id, bool on) { -	 -	if (isLeftHand) { -		switch(id) { -			case 0: -				// Left hand C6 -				if (on) -					//PORTC |= (1<<6); -					writePinHigh(C6); -				else -					//PORTC &= ~(1<<6); -					writePinLow(C6); -				break; -			case 1: -				// Left hand B6 -				if (on) -					//PORTB |= (1<<6); -					writePinHigh(B6); -				else -					//PORTB &= ~(1<<6); -					writePinLow(B6); -				break; -			case 2: -				// Left hand B5 -				if (on) -					//PORTB |= (1<<5); -					writePinHigh(B5); -				else -					//PORTB &= ~(1<<5); -					writePinLow(B5); -				break; -			default: -				break; -		} -	} else { -		switch(id) { -			case 3: -				// Right hand F6 -				if (on) -					//PORTF |= (1<<6); -					writePinHigh(F6); -				else -					//PORTF &= ~(1<<6); -					writePinLow(F6); -				break; -			case 4: -				// Right hand F7 -				if (on) -					//PORTF |= (1<<7); -					writePinHigh(F7); -				else -					//PORTF &= ~(1<<7); -					writePinLow(F7); -				break; -			case 5: -				// Right hand C7 -				if (on) -					//PORTC |= (1<<7); -					writePinHigh(C7); -				else -					//PORTC &= ~(1<<7); -					writePinLow(C7); -				break; -			default: -				break; -		} -	} +void led_toggle(uint8_t id, bool on) { +    if (isLeftHand) { +        switch (id) { +            case 0: +                // Left hand C6 +                writePin(C6, on); +                break; +            case 1: +                // Left hand B6 +                writePin(B6, on); +                break; +            case 2: +                // Left hand B5 +                writePin(B5, on); +                break; +            default: +                break; +        } +    } else { +        switch (id) { +            case 3: +                // Right hand F6 +                writePin(F6, on); +                break; +            case 4: +                // Right hand F7 +                writePin(F7, on); +                break; +            case 5: +                // Right hand C7 +                writePin(C7, on); +                break; +            default: +                break; +        } +    }  }  // Set all LEDs at once using an array of 6 booleans  // LED IDs: -//  +//  // (LEFT) 0 1 2   |   3 4 5 (RIGHT) -//  +//  // Ex. set_all_leds({ false, false, false, true, true, true }) would turn off left hand, turn on right hand  void set_all_leds(bool leds[6]) { -	for (int i = 0; i < 6; i++) { -		led_toggle(i, leds[i]); -	} +    for (int i = 0; i < 6; i++) { +        led_toggle(i, leds[i]); +    }  }  void set_layer_indicators(uint8_t layer) { -	 -	switch (layer) -	{ -		case 0: -			led_toggle(0, true); -			led_toggle(1, false); -			led_toggle(2, false); -			break; -		case 1: -			led_toggle(0, true); -			led_toggle(1, true); -			led_toggle(2, false); -			break; -		case 2: -			led_toggle(0, true); -			led_toggle(1, true); -			led_toggle(2, true); -			break; -		case 3: -			led_toggle(0, false); -			led_toggle(1, true); -			led_toggle(2, true); -			break; -		case 4: -			led_toggle(0, false); -			led_toggle(1, false); -			led_toggle(2, true); -			break; -		default: -			led_toggle(0, true); -			led_toggle(1, false); -			led_toggle(2, true); -			break; -	} -	 +    switch (layer) { +        case 0: +            led_toggle(0, true); +            led_toggle(1, false); +            led_toggle(2, false); +            break; +        case 1: +            led_toggle(0, true); +            led_toggle(1, true); +            led_toggle(2, false); +            break; +        case 2: +            led_toggle(0, true); +            led_toggle(1, true); +            led_toggle(2, true); +            break; +        case 3: +            led_toggle(0, false); +            led_toggle(1, true); +            led_toggle(2, true); +            break; +        case 4: +            led_toggle(0, false); +            led_toggle(1, false); +            led_toggle(2, true); +            break; +        default: +            led_toggle(0, true); +            led_toggle(1, false); +            led_toggle(2, true); +            break; +    }  } -void matrix_init_kb(void) { -	// put your keyboard start-up code here -	// runs once when the firmware starts up -	 -	// Initialize indicator LEDs to output -	if (isLeftHand) -	{ -		setPinOutput(C6); -		setPinOutput(B6); -		setPinOutput(B5); -		//DDRC |= (1<<6); -		//DDRB |= (1<<6); -		//DDRB |= (1<<5); -	} -	else -	{ -		setPinOutput(F6); -		setPinOutput(F7); -		setPinOutput(C7); -		//DDRF |= (1<<6); -		//DDRF |= (1<<7); -		//DDRC |= (1<<7); -	} - -	set_layer_indicators(0); -	 -	matrix_init_user(); +bool led_update_kb(led_t led_state) { +    bool res = led_update_user(led_state); +    if (res) { +        led_toggle(3, led_state.num_lock); +        led_toggle(4, led_state.caps_lock); +        led_toggle(5, led_state.scroll_lock); +    } +    return res;  } -void led_set_kb(uint8_t usb_led) { -	// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here -	 -	if (is_keyboard_master()) { -	 -		serial_m2s_buffer.nlock_led = IS_LED_ON(usb_led, USB_LED_NUM_LOCK); -		serial_m2s_buffer.clock_led = IS_LED_ON(usb_led, USB_LED_CAPS_LOCK); -		serial_m2s_buffer.slock_led = IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK); - -		led_toggle(3, IS_LED_ON(usb_led, USB_LED_NUM_LOCK)); -		led_toggle(4, IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)); -		led_toggle(5, IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)); -		 -	} - -	led_set_user(usb_led); -} +layer_state_t layer_state_set_kb(layer_state_t state) { +    set_layer_indicators(get_highest_layer(state)); -uint32_t layer_state_set_kb(uint32_t state) { -	 -	if (is_keyboard_master()) -	{ -		serial_m2s_buffer.current_layer = biton32(state); -		 -		// If left half, do the LED toggle thing -		if (isLeftHand) -		{ -			set_layer_indicators(biton32(state)); -		} -		 -	} -	// NOTE: Do not set slave LEDs here. -	// This is not called on slave -	 -	return layer_state_set_user(state); +    return layer_state_set_user(state);  } diff --git a/keyboards/ai03/orbit/orbit.h b/keyboards/ai03/orbit/orbit.h index 39f1ebb0e3..7f3b1aca32 100644 --- a/keyboards/ai03/orbit/orbit.h +++ b/keyboards/ai03/orbit/orbit.h @@ -18,6 +18,8 @@  #include "quantum.h" +#define XXX KC_NO +  /* This a shortcut to help you visually see your layout.   *   * The first section contains all of the arguments representing the physical @@ -26,17 +28,6 @@   * The second converts the arguments into a two-dimensional array which   * represents the switch matrix.   */ -  -#ifdef USE_I2C -#include <stddef.h> -#ifdef __AVR__ -  #include <avr/io.h> -  #include <avr/interrupt.h> -#endif -#endif - -#define XXX KC_NO -  #define LAYOUT( \      L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \      L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ @@ -56,6 +47,6 @@      { R40, R41, R42, R43, R44, R45, XXX } \  } -extern void led_toggle(int id, bool on); +void led_toggle(uint8_t id, bool on);  void set_all_leds(bool leds[6]); -extern void set_layer_indicators(uint8_t layer); +void set_layer_indicators(uint8_t layer); diff --git a/keyboards/ai03/orbit/readme.md b/keyboards/ai03/orbit/readme.md index 58ba2079d5..0c320929b6 100644 --- a/keyboards/ai03/orbit/readme.md +++ b/keyboards/ai03/orbit/readme.md @@ -4,9 +4,9 @@  A split ergonomic keyboard project.   -Keyboard Maintainer: [ai03](https://github.com/ai03-2725)   -Hardware Supported: The [Orbit PCB](https://github.com/ai03-2725/Orbit)   -Hardware Availability: [This repository](https://github.com/ai03-2725/Orbit) has PCB files. Case group buy orders are currently closed.   +* Keyboard Maintainer: [ai03](https://github.com/ai03-2725) +* Hardware Supported: The [Orbit PCB](https://github.com/ai03-2725/Orbit) +* Hardware Availability: [This repository](https://github.com/ai03-2725/Orbit) has PCB files. Case group buy orders are currently closed.  Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/ai03/orbit/rules.mk b/keyboards/ai03/orbit/rules.mk index f98e2382f1..a0f1ab94a9 100644 --- a/keyboards/ai03/orbit/rules.mk +++ b/keyboards/ai03/orbit/rules.mk @@ -16,12 +16,4 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality  RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow  AUDIO_ENABLE = no           # Audio output -USE_I2C = no                # I2C for split communication -CUSTOM_MATRIX = yes			# For providing custom matrix.c (in this case, override regular matrix.c with split matrix.c) -# SPLIT_KEYBOARD = yes		# Split keyboard flag disabled as manual edits had to be done to the split common files - -SRC += split_util.c \ -	   split_flags.c \ -	   serial.c \ -	   transport.c \ -	   matrix.c +SPLIT_KEYBOARD = yes		# Split keyboard flag disabled as manual edits had to be done to the split common files diff --git a/keyboards/ai03/orbit/serial.c b/keyboards/ai03/orbit/serial.c deleted file mode 100644 index 636dfa0906..0000000000 --- a/keyboards/ai03/orbit/serial.c +++ /dev/null @@ -1,545 +0,0 @@ -/* - * WARNING: be careful changing this code, it is very timing dependent - * - * 2018-10-28 checked - *  avr-gcc 4.9.2 - *  avr-gcc 5.4.0 - *  avr-gcc 7.3.0 - */ - -#ifndef F_CPU -#define F_CPU 16000000 -#endif - -#include <avr/io.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include <stddef.h> -#include <stdbool.h> -#include "serial.h" - -#ifdef SOFT_SERIAL_PIN - -#ifdef __AVR_ATmega32U4__ -  // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial. -  #ifdef USE_AVR_I2C -    #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1 -      #error Using ATmega32U4 I2C, so can not use PD0, PD1 -    #endif -  #endif - -  #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3 -    #define SERIAL_PIN_DDR   DDRD -    #define SERIAL_PIN_PORT  PORTD -    #define SERIAL_PIN_INPUT PIND -    #if SOFT_SERIAL_PIN == D0 -      #define SERIAL_PIN_MASK _BV(PD0) -      #define EIMSK_BIT       _BV(INT0) -      #define EICRx_BIT       (~(_BV(ISC00) | _BV(ISC01))) -      #define SERIAL_PIN_INTERRUPT INT0_vect -    #elif  SOFT_SERIAL_PIN == D1 -      #define SERIAL_PIN_MASK _BV(PD1) -      #define EIMSK_BIT       _BV(INT1) -      #define EICRx_BIT       (~(_BV(ISC10) | _BV(ISC11))) -      #define SERIAL_PIN_INTERRUPT INT1_vect -    #elif  SOFT_SERIAL_PIN == D2 -      #define SERIAL_PIN_MASK _BV(PD2) -      #define EIMSK_BIT       _BV(INT2) -      #define EICRx_BIT       (~(_BV(ISC20) | _BV(ISC21))) -      #define SERIAL_PIN_INTERRUPT INT2_vect -    #elif  SOFT_SERIAL_PIN == D3 -      #define SERIAL_PIN_MASK _BV(PD3) -      #define EIMSK_BIT       _BV(INT3) -      #define EICRx_BIT       (~(_BV(ISC30) | _BV(ISC31))) -      #define SERIAL_PIN_INTERRUPT INT3_vect -    #endif -  #elif  SOFT_SERIAL_PIN == E6 -    #define SERIAL_PIN_DDR   DDRE -    #define SERIAL_PIN_PORT  PORTE -    #define SERIAL_PIN_INPUT PINE -    #define SERIAL_PIN_MASK  _BV(PE6) -    #define EIMSK_BIT        _BV(INT6) -    #define EICRx_BIT        (~(_BV(ISC60) | _BV(ISC61))) -    #define SERIAL_PIN_INTERRUPT INT6_vect -  #else -  #error invalid SOFT_SERIAL_PIN value -  #endif - -#else - #error serial.c now support ATmega32U4 only -#endif - -#define ALWAYS_INLINE __attribute__((always_inline)) -#define NO_INLINE __attribute__((noinline)) -#define _delay_sub_us(x)    __builtin_avr_delay_cycles(x) - -// parity check -#define ODD_PARITY 1 -#define EVEN_PARITY 0 -#define PARITY EVEN_PARITY - -#ifdef SERIAL_DELAY -  // custom setup in config.h -  // #define TID_SEND_ADJUST 2 -  // #define SERIAL_DELAY 6             // micro sec -  // #define READ_WRITE_START_ADJUST 30 // cycles -  // #define READ_WRITE_WIDTH_ADJUST 8 // cycles -#else -// ============ Standard setups ============ - -#ifndef SELECT_SOFT_SERIAL_SPEED -#define SELECT_SOFT_SERIAL_SPEED 1 -//  0: about 189kbps (Experimental only) -//  1: about 137kbps (default) -//  2: about 75kbps -//  3: about 39kbps -//  4: about 26kbps -//  5: about 20kbps -#endif - -#if __GNUC__ < 6 -  #define TID_SEND_ADJUST 14 -#else -  #define TID_SEND_ADJUST 2 -#endif - -#if SELECT_SOFT_SERIAL_SPEED == 0 -  // Very High speed -  #define SERIAL_DELAY 4             // micro sec -  #if __GNUC__ < 6 -    #define READ_WRITE_START_ADJUST 33 // cycles -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_START_ADJUST 34 // cycles -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#elif SELECT_SOFT_SERIAL_SPEED == 1 -  // High speed -  #define SERIAL_DELAY 6             // micro sec -  #if __GNUC__ < 6 -    #define READ_WRITE_START_ADJUST 30 // cycles -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_START_ADJUST 33 // cycles -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#elif SELECT_SOFT_SERIAL_SPEED == 2 -  // Middle speed -  #define SERIAL_DELAY 12            // micro sec -  #define READ_WRITE_START_ADJUST 30 // cycles -  #if __GNUC__ < 6 -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#elif SELECT_SOFT_SERIAL_SPEED == 3 -  // Low speed -  #define SERIAL_DELAY 24            // micro sec -  #define READ_WRITE_START_ADJUST 30 // cycles -  #if __GNUC__ < 6 -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#elif SELECT_SOFT_SERIAL_SPEED == 4 -  // Very Low speed -  #define SERIAL_DELAY 36            // micro sec -  #define READ_WRITE_START_ADJUST 30 // cycles -  #if __GNUC__ < 6 -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#elif SELECT_SOFT_SERIAL_SPEED == 5 -  // Ultra Low speed -  #define SERIAL_DELAY 48            // micro sec -  #define READ_WRITE_START_ADJUST 30 // cycles -  #if __GNUC__ < 6 -    #define READ_WRITE_WIDTH_ADJUST 3 // cycles -  #else -    #define READ_WRITE_WIDTH_ADJUST 7 // cycles -  #endif -#else -#error invalid SELECT_SOFT_SERIAL_SPEED value -#endif /* SELECT_SOFT_SERIAL_SPEED */ -#endif /* SERIAL_DELAY */ - -#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) -#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) - -#define SLAVE_INT_WIDTH_US 1 -#ifndef SERIAL_USE_MULTI_TRANSACTION -  #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY -#else -  #define SLAVE_INT_ACK_WIDTH_UNIT 2 -  #define SLAVE_INT_ACK_WIDTH 4 -#endif - -static SSTD_t *Transaction_table = NULL; -static uint8_t Transaction_table_size = 0; - -inline static void serial_delay(void) ALWAYS_INLINE; -inline static -void serial_delay(void) { -  _delay_us(SERIAL_DELAY); -} - -inline static void serial_delay_half1(void) ALWAYS_INLINE; -inline static -void serial_delay_half1(void) { -  _delay_us(SERIAL_DELAY_HALF1); -} - -inline static void serial_delay_half2(void) ALWAYS_INLINE; -inline static -void serial_delay_half2(void) { -  _delay_us(SERIAL_DELAY_HALF2); -} - -inline static void serial_output(void) ALWAYS_INLINE; -inline static -void serial_output(void) { -  SERIAL_PIN_DDR |= SERIAL_PIN_MASK; -} - -// make the serial pin an input with pull-up resistor -inline static void serial_input_with_pullup(void) ALWAYS_INLINE; -inline static -void serial_input_with_pullup(void) { -  SERIAL_PIN_DDR  &= ~SERIAL_PIN_MASK; -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -inline static uint8_t serial_read_pin(void) ALWAYS_INLINE; -inline static -uint8_t serial_read_pin(void) { -  return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); -} - -inline static void serial_low(void) ALWAYS_INLINE; -inline static -void serial_low(void) { -  SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; -} - -inline static void serial_high(void) ALWAYS_INLINE; -inline static -void serial_high(void) { -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size) -{ -    Transaction_table = sstd_table; -    Transaction_table_size = (uint8_t)sstd_table_size; -    serial_output(); -    serial_high(); -} - -void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size) -{ -    Transaction_table = sstd_table; -    Transaction_table_size = (uint8_t)sstd_table_size; -    serial_input_with_pullup(); - -    // Enable INT0-INT3,INT6 -    EIMSK |= EIMSK_BIT; -#if SERIAL_PIN_MASK == _BV(PE6) -    // Trigger on falling edge of INT6 -    EICRB &= EICRx_BIT; -#else -    // Trigger on falling edge of INT0-INT3 -    EICRA &= EICRx_BIT; -#endif -} - -// Used by the sender to synchronize timing with the reciver. -static void sync_recv(void) NO_INLINE; -static -void sync_recv(void) { -  for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) { -  } -  // This shouldn't hang if the target disconnects because the -  // serial line will float to high if the target does disconnect. -  while (!serial_read_pin()); -} - -// Used by the reciver to send a synchronization signal to the sender. -static void sync_send(void) NO_INLINE; -static -void sync_send(void) { -  serial_low(); -  serial_delay(); -  serial_high(); -} - -// Reads a byte from the serial line -static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE; -static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) { -    uint8_t byte, i, p, pb; - -  _delay_sub_us(READ_WRITE_START_ADJUST); -  for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) { -      serial_delay_half1();   // read the middle of pulses -      if( serial_read_pin() ) { -          byte = (byte << 1) | 1; p ^= 1; -      } else { -          byte = (byte << 1) | 0; p ^= 0; -      } -      _delay_sub_us(READ_WRITE_WIDTH_ADJUST); -      serial_delay_half2(); -  } -  /* recive parity bit */ -  serial_delay_half1();   // read the middle of pulses -  pb = serial_read_pin(); -  _delay_sub_us(READ_WRITE_WIDTH_ADJUST); -  serial_delay_half2(); - -  *pterrcount += (p != pb)? 1 : 0; - -  return byte; -} - -// Sends a byte with MSB ordering -void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE; -void serial_write_chunk(uint8_t data, uint8_t bit) { -    uint8_t b, p; -    for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) { -        if(data & b) { -            serial_high(); p ^= 1; -        } else { -            serial_low();  p ^= 0; -        } -        serial_delay(); -    } -    /* send parity bit */ -    if(p & 1) { serial_high(); } -    else      { serial_low(); } -    serial_delay(); - -    serial_low(); // sync_send() / senc_recv() need raise edge -} - -static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE; -static -void serial_send_packet(uint8_t *buffer, uint8_t size) { -  for (uint8_t i = 0; i < size; ++i) { -    uint8_t data; -    data = buffer[i]; -    sync_send(); -    serial_write_chunk(data,8); -  } -} - -static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE; -static -uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) { -  uint8_t pecount = 0; -  for (uint8_t i = 0; i < size; ++i) { -    uint8_t data; -    sync_recv(); -    data = serial_read_chunk(&pecount, 8); -    buffer[i] = data; -  } -  return pecount == 0; -} - -inline static -void change_sender2reciver(void) { -    sync_send();          //0 -    serial_delay_half1(); //1 -    serial_low();         //2 -    serial_input_with_pullup(); //2 -    serial_delay_half1(); //3 -} - -inline static -void change_reciver2sender(void) { -    sync_recv();     //0 -    serial_delay();  //1 -    serial_low();    //3 -    serial_output(); //3 -    serial_delay_half1(); //4 -} - -static inline uint8_t nibble_bits_count(uint8_t bits) -{ -    bits = (bits & 0x5) + (bits >> 1 & 0x5); -    bits = (bits & 0x3) + (bits >> 2 & 0x3); -    return bits; -} - -// interrupt handle to be used by the target device -ISR(SERIAL_PIN_INTERRUPT) { - -#ifndef SERIAL_USE_MULTI_TRANSACTION -  serial_low(); -  serial_output(); -  SSTD_t *trans = Transaction_table; -#else -  // recive transaction table index -  uint8_t tid, bits; -  uint8_t pecount = 0; -  sync_recv(); -  bits = serial_read_chunk(&pecount,7); -  tid = bits>>3; -  bits = (bits&7) != nibble_bits_count(tid); -  if( bits || pecount> 0 || tid > Transaction_table_size ) { -      return; -  } -  serial_delay_half1(); - -  serial_high(); // response step1 low->high -  serial_output(); -  _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH); -  SSTD_t *trans = &Transaction_table[tid]; -  serial_low(); // response step2 ack high->low -#endif - -  // target send phase -  if( trans->target2initiator_buffer_size > 0 ) -      serial_send_packet((uint8_t *)trans->target2initiator_buffer, -                         trans->target2initiator_buffer_size); -  // target switch to input -  change_sender2reciver(); - -  // target recive phase -  if( trans->initiator2target_buffer_size > 0 ) { -      if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer, -                               trans->initiator2target_buffer_size) ) { -          *trans->status = TRANSACTION_ACCEPTED; -      } else { -          *trans->status = TRANSACTION_DATA_ERROR; -      } -  } else { -      *trans->status = TRANSACTION_ACCEPTED; -  } - -  sync_recv(); //weit initiator output to high -} - -///////// -//  start transaction by initiator -// -// int  soft_serial_transaction(int sstd_index) -// -// Returns: -//    TRANSACTION_END -//    TRANSACTION_NO_RESPONSE -//    TRANSACTION_DATA_ERROR -// this code is very time dependent, so we need to disable interrupts -#ifndef SERIAL_USE_MULTI_TRANSACTION -int  soft_serial_transaction(void) { -  SSTD_t *trans = Transaction_table; -#else -int  soft_serial_transaction(int sstd_index) { -  if( sstd_index > Transaction_table_size ) -      return TRANSACTION_TYPE_ERROR; -  SSTD_t *trans = &Transaction_table[sstd_index]; -#endif -  cli(); - -  // signal to the target that we want to start a transaction -  serial_output(); -  serial_low(); -  _delay_us(SLAVE_INT_WIDTH_US); - -#ifndef SERIAL_USE_MULTI_TRANSACTION -  // wait for the target response -  serial_input_with_pullup(); -  _delay_us(SLAVE_INT_RESPONSE_TIME); - -  // check if the target is present -  if (serial_read_pin()) { -    // target failed to pull the line low, assume not present -    serial_output(); -    serial_high(); -    *trans->status = TRANSACTION_NO_RESPONSE; -    sei(); -    return TRANSACTION_NO_RESPONSE; -  } - -#else -  // send transaction table index -  int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index)); -  sync_send(); -  _delay_sub_us(TID_SEND_ADJUST); -  serial_write_chunk(tid, 7); -  serial_delay_half1(); - -  // wait for the target response (step1 low->high) -  serial_input_with_pullup(); -  while( !serial_read_pin() ) { -      _delay_sub_us(2); -  } - -  // check if the target is present (step2 high->low) -  for( int i = 0; serial_read_pin(); i++ ) { -      if (i > SLAVE_INT_ACK_WIDTH + 1) { -          // slave failed to pull the line low, assume not present -          serial_output(); -          serial_high(); -          *trans->status = TRANSACTION_NO_RESPONSE; -          sei(); -          return TRANSACTION_NO_RESPONSE; -      } -      _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT); -  } -#endif - -  // initiator recive phase -  // if the target is present syncronize with it -  if( trans->target2initiator_buffer_size > 0 ) { -      if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer, -                                trans->target2initiator_buffer_size) ) { -          serial_output(); -          serial_high(); -          *trans->status = TRANSACTION_DATA_ERROR; -          sei(); -          return TRANSACTION_DATA_ERROR; -      } -   } - -  // initiator switch to output -  change_reciver2sender(); - -  // initiator send phase -  if( trans->initiator2target_buffer_size > 0 ) { -      serial_send_packet((uint8_t *)trans->initiator2target_buffer, -                         trans->initiator2target_buffer_size); -  } - -  // always, release the line when not in use -  sync_send(); - -  *trans->status = TRANSACTION_END; -  sei(); -  return TRANSACTION_END; -} - -#ifdef SERIAL_USE_MULTI_TRANSACTION -int soft_serial_get_and_clean_status(int sstd_index) { -    SSTD_t *trans = &Transaction_table[sstd_index]; -    cli(); -    int retval = *trans->status; -    *trans->status = 0;; -    sei(); -    return retval; -} -#endif - -#endif - -// Helix serial.c history -//   2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc) -//   2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4) -//             (adjusted with avr-gcc 4.9.2) -//   2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78) -//             (adjusted with avr-gcc 4.9.2) -//   2018-8-11 add support multi-type transaction (#3608, feb5e4aae) -//             (adjusted with avr-gcc 4.9.2) -//   2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff) -//             (adjusted with avr-gcc 7.3.0) -//   2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66) -//             (adjusted with avr-gcc 5.4.0, 7.3.0) -//   2018-12-17 copy to TOP/quantum/split_common/ and remove backward compatibility code (#4669) diff --git a/keyboards/ai03/orbit/serial.h b/keyboards/ai03/orbit/serial.h deleted file mode 100644 index 1c1e640069..0000000000 --- a/keyboards/ai03/orbit/serial.h +++ /dev/null @@ -1,62 +0,0 @@ -#pragma once - -#include <stdbool.h> - -// ///////////////////////////////////////////////////////////////// -// Need Soft Serial defines in config.h -// ///////////////////////////////////////////////////////////////// -// ex. -//  #define SOFT_SERIAL_PIN ??   // ?? = D0,D1,D2,D3,E6 -//  OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5 -//                                               //  1: about 137kbps (default) -//                                               //  2: about 75kbps -//                                               //  3: about 39kbps -//                                               //  4: about 26kbps -//                                               //  5: about 20kbps -// -// //// USE simple API (using signle-type transaction function) -//   /* nothing */ -// //// USE flexible API (using multi-type transaction function) -//   #define SERIAL_USE_MULTI_TRANSACTION -// -// ///////////////////////////////////////////////////////////////// - -// Soft Serial Transaction Descriptor -typedef struct _SSTD_t  { -    uint8_t *status; -    uint8_t initiator2target_buffer_size; -    uint8_t *initiator2target_buffer; -    uint8_t target2initiator_buffer_size; -    uint8_t *target2initiator_buffer; -} SSTD_t; -#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t)) - -// initiator is transaction start side -void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size); -// target is interrupt accept side -void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size); - -// initiator resullt -#define TRANSACTION_END 0 -#define TRANSACTION_NO_RESPONSE 0x1 -#define TRANSACTION_DATA_ERROR  0x2 -#define TRANSACTION_TYPE_ERROR  0x4 -#ifndef SERIAL_USE_MULTI_TRANSACTION -int  soft_serial_transaction(void); -#else -int  soft_serial_transaction(int sstd_index); -#endif - -// target status -// *SSTD_t.status has -//   initiator: -//       TRANSACTION_END -//    or TRANSACTION_NO_RESPONSE -//    or TRANSACTION_DATA_ERROR -//   target: -//       TRANSACTION_DATA_ERROR -//    or TRANSACTION_ACCEPTED -#define TRANSACTION_ACCEPTED 0x8 -#ifdef SERIAL_USE_MULTI_TRANSACTION -int  soft_serial_get_and_clean_status(int sstd_index); -#endif diff --git a/keyboards/ai03/orbit/split_flags.c b/keyboards/ai03/orbit/split_flags.c deleted file mode 100644 index 1f5825d650..0000000000 --- a/keyboards/ai03/orbit/split_flags.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "split_flags.h" - -volatile bool RGB_DIRTY = false; - -volatile bool BACKLIT_DIRTY = false;
\ No newline at end of file diff --git a/keyboards/ai03/orbit/split_flags.h b/keyboards/ai03/orbit/split_flags.h deleted file mode 100644 index aaac474a7d..0000000000 --- a/keyboards/ai03/orbit/split_flags.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include <stdint.h> - -/** -* Global Flags -**/ - -//RGB Stuff -extern volatile bool RGB_DIRTY; - - -//Backlight Stuff -extern volatile bool BACKLIT_DIRTY; diff --git a/keyboards/ai03/orbit/split_util.c b/keyboards/ai03/orbit/split_util.c deleted file mode 100644 index 2352e5a111..0000000000 --- a/keyboards/ai03/orbit/split_util.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "split_util.h" -#include "matrix.h" -#include "keyboard.h" -#include "config.h" -#include "timer.h" -#include "split_flags.h" -#include "transport.h" -#include "quantum.h" - -#ifdef EE_HANDS -#   include "eeprom.h" -#   include "eeconfig.h" -#endif - -volatile bool isLeftHand = true; - -__attribute__((weak)) -bool is_keyboard_left(void) { -  #ifdef SPLIT_HAND_PIN -    // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand -    setPinInput(SPLIT_HAND_PIN); -    return readPin(SPLIT_HAND_PIN); -  #else -    #ifdef EE_HANDS -      return eeprom_read_byte(EECONFIG_HANDEDNESS); -    #else -      #ifdef MASTER_RIGHT -        return !is_keyboard_master(); -      #else -        return is_keyboard_master(); -      #endif -    #endif -  #endif -} - -bool is_keyboard_master(void) -{ -#ifdef __AVR__ -  static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN; - -  // only check once, as this is called often -  if (usbstate == UNKNOWN) -  { -    USBCON |= (1 << OTGPADE);  // enables VBUS pad -    wait_us(5); - -    usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE;  // checks state of VBUS -  } - -  return (usbstate == MASTER); -#else -  return true; -#endif -} - -static void keyboard_master_setup(void) { -#if defined(USE_I2C) -  #ifdef SSD1306OLED -    matrix_master_OLED_init (); -  #endif -#endif -  transport_master_init(); - -  // For master the Backlight info needs to be sent on startup -  // Otherwise the salve won't start with the proper info until an update -  BACKLIT_DIRTY = true; -} - -static void keyboard_slave_setup(void) -{ -  transport_slave_init(); -} - -// this code runs before the usb and keyboard is initialized -void matrix_setup(void) -{ -  isLeftHand = is_keyboard_left(); - -  if (is_keyboard_master()) -  { -    keyboard_master_setup(); -  } -  else -  { -    keyboard_slave_setup(); -  } -} diff --git a/keyboards/ai03/orbit/split_util.h b/keyboards/ai03/orbit/split_util.h deleted file mode 100644 index 20f7535bf4..0000000000 --- a/keyboards/ai03/orbit/split_util.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> - -extern volatile bool isLeftHand; - -void matrix_master_OLED_init (void); diff --git a/keyboards/ai03/orbit/transport.c b/keyboards/ai03/orbit/transport.c deleted file mode 100644 index 447fafed14..0000000000 --- a/keyboards/ai03/orbit/transport.c +++ /dev/null @@ -1,238 +0,0 @@ - -#include "transport.h" - -#include "config.h" -#include "matrix.h" -#include "quantum.h" - -#include "orbit.h" - -#define ROWS_PER_HAND (MATRIX_ROWS/2) - -#ifdef RGBLIGHT_ENABLE -#   include "rgblight.h" -#endif - -#ifdef BACKLIGHT_ENABLE -# include "backlight.h" -  extern backlight_config_t backlight_config; -#endif - -#if defined(USE_I2C) - -#include "i2c.h" - -#ifndef SLAVE_I2C_ADDRESS -#  define SLAVE_I2C_ADDRESS           0x32 -#endif - -#if (MATRIX_COLS > 8) -#  error "Currently only supports 8 COLS" -#endif - -// Get rows from other half over i2c -bool transport_master(matrix_row_t matrix[]) { -  int err = 0; - -  // write backlight info -#ifdef BACKLIGHT_ENABLE -  if (BACKLIT_DIRTY) { -    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); -    if (err) { goto i2c_error; } - -    // Backlight location -    err = i2c_master_write(I2C_BACKLIT_START); -    if (err) { goto i2c_error; } - -    // Write backlight -    i2c_master_write(get_backlight_level()); - -    BACKLIT_DIRTY = false; -  } -#endif - -  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); -  if (err) { goto i2c_error; } - -  // start of matrix stored at I2C_KEYMAP_START -  err = i2c_master_write(I2C_KEYMAP_START); -  if (err) { goto i2c_error; } - -  // Start read -  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); -  if (err) { goto i2c_error; } - -  if (!err) { -    int i; -    for (i = 0; i < ROWS_PER_HAND-1; ++i) { -      matrix[i] = i2c_master_read(I2C_ACK); -    } -    matrix[i] = i2c_master_read(I2C_NACK); -    i2c_master_stop(); -  } else { -i2c_error: // the cable is disconnceted, or something else went wrong -    i2c_reset_state(); -    return false; -  } - -#ifdef RGBLIGHT_ENABLE -  if (RGB_DIRTY) { -    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); -    if (err) { goto i2c_error; } - -    // RGB Location -    err = i2c_master_write(I2C_RGB_START); -    if (err) { goto i2c_error; } - -    uint32_t dword = eeconfig_read_rgblight(); - -    // Write RGB -    err = i2c_master_write_data(&dword, 4); -    if (err) { goto i2c_error; } - -    RGB_DIRTY = false; -    i2c_master_stop(); -  } -#endif - -  return true; -} - -void transport_slave(matrix_row_t matrix[]) { - -  for (int i = 0; i < ROWS_PER_HAND; ++i) -  { -    i2c_slave_buffer[I2C_KEYMAP_START + i] = matrix[i]; -  } -  // Read Backlight Info -  #ifdef BACKLIGHT_ENABLE -  if (BACKLIT_DIRTY) -  { -    backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]); -    BACKLIT_DIRTY = false; -  } -  #endif -  #ifdef RGBLIGHT_ENABLE -  if (RGB_DIRTY) -  { -    // Disable interupts (RGB data is big) -    cli(); -    // Create new DWORD for RGB data -    uint32_t dword; - -    // Fill the new DWORD with the data that was sent over -    uint8_t * dword_dat = (uint8_t *)(&dword); -    for (int i = 0; i < 4; i++) -    { -      dword_dat[i] = i2c_slave_buffer[I2C_RGB_START + i]; -    } - -    // Update the RGB now with the new data and set RGB_DIRTY to false -    rgblight_update_dword(dword); -    RGB_DIRTY = false; -    // Re-enable interupts now that RGB is set -    sei(); -  } -  #endif -} - -void transport_master_init(void) { -  i2c_master_init(); -} - -void transport_slave_init(void) { -  i2c_slave_init(SLAVE_I2C_ADDRESS); -} - -#else // USE_SERIAL - -#include "serial.h" - - - -volatile Serial_s2m_buffer_t serial_s2m_buffer = {}; -volatile Serial_m2s_buffer_t serial_m2s_buffer = {}; -uint8_t volatile status0 = 0; - -SSTD_t transactions[] = { -  { (uint8_t *)&status0, -    sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer, -    sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer -  } -}; - -uint8_t slave_layer_cache; -uint8_t slave_nlock_cache; -uint8_t slave_clock_cache; -uint8_t slave_slock_cache; - -void transport_master_init(void) -{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); } - -void transport_slave_init(void) -{  -	soft_serial_target_init(transactions, TID_LIMIT(transactions));  -	slave_layer_cache = 255; -	slave_nlock_cache = 255; -	slave_clock_cache = 255; -	slave_slock_cache = 255; -} - -bool transport_master(matrix_row_t matrix[]) { - -  if (soft_serial_transaction()) { -    return false; -  } - -  // TODO:  if MATRIX_COLS > 8 change to unpack() -  for (int i = 0; i < ROWS_PER_HAND; ++i) { -    matrix[i] = serial_s2m_buffer.smatrix[i]; -  } - -  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    // Code to send RGB over serial goes here (not implemented yet) -  #endif - -  #ifdef BACKLIGHT_ENABLE -    // Write backlight level for slave to read -    serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0; -  #endif - -  return true; -} - -void transport_slave(matrix_row_t matrix[]) { - -  // TODO: if MATRIX_COLS > 8 change to pack() -  for (int i = 0; i < ROWS_PER_HAND; ++i) -  { -    serial_s2m_buffer.smatrix[i] = matrix[i]; -  } -  #ifdef BACKLIGHT_ENABLE -    backlight_set(serial_m2s_buffer.backlight_level); -  #endif -  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -  // Add serial implementation for RGB here -  #endif -   -  if (slave_layer_cache != serial_m2s_buffer.current_layer) {   -	slave_layer_cache = serial_m2s_buffer.current_layer; -	set_layer_indicators(slave_layer_cache); -  } -   -  if (slave_nlock_cache != serial_m2s_buffer.nlock_led) { -	slave_nlock_cache = serial_m2s_buffer.nlock_led; -	led_toggle(3, slave_nlock_cache); -  } -  if (slave_clock_cache != serial_m2s_buffer.clock_led) { -	slave_clock_cache = serial_m2s_buffer.clock_led; -	led_toggle(4, slave_clock_cache); -  } -  if (slave_slock_cache != serial_m2s_buffer.slock_led) { -	slave_slock_cache = serial_m2s_buffer.slock_led; -	led_toggle(5, slave_slock_cache); -  } -   -} - -#endif diff --git a/keyboards/ai03/orbit/transport.h b/keyboards/ai03/orbit/transport.h deleted file mode 100644 index 757eae6f5c..0000000000 --- a/keyboards/ai03/orbit/transport.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "matrix.h" - -#define ROWS_PER_HAND (MATRIX_ROWS/2) - -typedef struct _Serial_s2m_buffer_t { -  // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack -  matrix_row_t smatrix[ROWS_PER_HAND]; -} Serial_s2m_buffer_t; - -typedef struct _Serial_m2s_buffer_t { -#ifdef BACKLIGHT_ENABLE -    uint8_t backlight_level; -#endif -#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -    rgblight_config_t rgblight_config; //not yet use -    // -    // When MCUs on both sides drive their respective RGB LED chains, -    // it is necessary to synchronize, so it is necessary to communicate RGB information. -    // In that case, define the RGBLIGHT_SPLIT macro. -    // -    // Otherwise, if the master side MCU drives both sides RGB LED chains, -    // there is no need to communicate. -#endif - -	uint8_t current_layer; -	uint8_t nlock_led; -	uint8_t clock_led; -	uint8_t slock_led; - -} Serial_m2s_buffer_t; - -extern volatile Serial_s2m_buffer_t serial_s2m_buffer; -extern volatile Serial_m2s_buffer_t serial_m2s_buffer; - -void transport_master_init(void); -void transport_slave_init(void); - -// returns false if valid data not received from slave -bool transport_master(matrix_row_t matrix[]); -void transport_slave(matrix_row_t matrix[]); diff --git a/keyboards/amj96/matrix.c b/keyboards/amj96/matrix.c index 8e7bbaa791..ffd66d120f 100644 --- a/keyboards/amj96/matrix.c +++ b/keyboards/amj96/matrix.c @@ -108,12 +108,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/angel64/alpha/matrix.c b/keyboards/angel64/alpha/matrix.c index 474fbec030..2851859cf2 100644 --- a/keyboards/angel64/alpha/matrix.c +++ b/keyboards/angel64/alpha/matrix.c @@ -90,13 +90,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/angel64/rev1/matrix.c b/keyboards/angel64/rev1/matrix.c index 474fbec030..2851859cf2 100644 --- a/keyboards/angel64/rev1/matrix.c +++ b/keyboards/angel64/rev1/matrix.c @@ -90,13 +90,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/bpiphany/kitten_paw/matrix.c b/keyboards/bpiphany/kitten_paw/matrix.c index b59089cdf4..56114858f1 100644 --- a/keyboards/bpiphany/kitten_paw/matrix.c +++ b/keyboards/bpiphany/kitten_paw/matrix.c @@ -117,13 +117,6 @@ uint8_t matrix_scan(void) {    return 1;  } -bool matrix_is_modified(void) { -  if (debouncing) -    return false; -  else -    return true; -} -  inline bool matrix_is_on(uint8_t row, uint8_t col) {    return (matrix[row] & ((matrix_row_t)1<<col));  } diff --git a/keyboards/bpiphany/pegasushoof/2013/matrix.c b/keyboards/bpiphany/pegasushoof/2013/matrix.c index 037f323c00..09244982d9 100644 --- a/keyboards/bpiphany/pegasushoof/2013/matrix.c +++ b/keyboards/bpiphany/pegasushoof/2013/matrix.c @@ -110,13 +110,6 @@ uint8_t matrix_scan(void)  	return 1;  } -bool matrix_is_modified(void) -{ -	if (debouncing) -		return false; -	return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/centromere/config.h b/keyboards/centromere/config.h index e502e2534b..b4cae20332 100644 --- a/keyboards/centromere/config.h +++ b/keyboards/centromere/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 500000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/centromere/matrix.c b/keyboards/centromere/matrix.c index 7256cd5cb5..a46701275a 100644 --- a/keyboards/centromere/matrix.c +++ b/keyboards/centromere/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -80,7 +80,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(500000);  }  uint8_t matrix_scan(void) @@ -88,7 +88,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF remote slave to send the matrix information -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates, erase the last set of data      uint8_t uart_data[11] = {0}; @@ -96,13 +96,13 @@ uint8_t matrix_scan(void)      //there are 10 bytes corresponding to 1w columns, and an end byte      for (uint8_t i = 0; i < 11; i++) {          //wait for the serial data, timeout if it's been too long -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/centromere/rules.mk b/keyboards/centromere/rules.mk index ed777e1b9e..15c6a20746 100644 --- a/keyboards/centromere/rules.mk +++ b/keyboards/centromere/rules.mk @@ -21,6 +21,7 @@ BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality  UNICODE_ENABLE = yes 		# Unicode  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c  LAYOUTS = split_3x5_3 split_3x6_3 diff --git a/keyboards/chimera_ergo/config.h b/keyboards/chimera_ergo/config.h index 0767a218b5..3c0cc5c162 100644 --- a/keyboards/chimera_ergo/config.h +++ b/keyboards/chimera_ergo/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/chimera_ergo/matrix.c b/keyboards/chimera_ergo/matrix.c index 577176c466..ec438beb56 100644 --- a/keyboards/chimera_ergo/matrix.c +++ b/keyboards/chimera_ergo/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -89,7 +89,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -97,7 +97,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[14] = {0}; @@ -107,13 +107,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/chimera_ergo/rules.mk b/keyboards/chimera_ergo/rules.mk index a8bd3a027a..483485cb7d 100644 --- a/keyboards/chimera_ergo/rules.mk +++ b/keyboards/chimera_ergo/rules.mk @@ -17,4 +17,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/chimera_ls/config.h b/keyboards/chimera_ls/config.h index 2eb028471d..ca92e1e2e4 100644 --- a/keyboards/chimera_ls/config.h +++ b/keyboards/chimera_ls/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/chimera_ls/matrix.c b/keyboards/chimera_ls/matrix.c index 9edd91818f..354346ca09 100644 --- a/keyboards/chimera_ls/matrix.c +++ b/keyboards/chimera_ls/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -93,7 +93,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -101,7 +101,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -111,13 +111,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/chimera_ls/rules.mk b/keyboards/chimera_ls/rules.mk index 377c379911..ae0cc8b749 100644 --- a/keyboards/chimera_ls/rules.mk +++ b/keyboards/chimera_ls/rules.mk @@ -17,7 +17,8 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c  LAYOUTS = ortho_4x12 diff --git a/keyboards/chimera_ortho/config.h b/keyboards/chimera_ortho/config.h index 974502525c..3d86343a67 100644 --- a/keyboards/chimera_ortho/config.h +++ b/keyboards/chimera_ortho/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/chimera_ortho/matrix.c b/keyboards/chimera_ortho/matrix.c index 34930af7e2..1403f410c0 100644 --- a/keyboards/chimera_ortho/matrix.c +++ b/keyboards/chimera_ortho/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -79,7 +79,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -87,7 +87,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -97,13 +97,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/chimera_ortho/rules.mk b/keyboards/chimera_ortho/rules.mk index fbe6872001..c35dc9ba2e 100644 --- a/keyboards/chimera_ortho/rules.mk +++ b/keyboards/chimera_ortho/rules.mk @@ -17,4 +17,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/chimera_ortho_plus/config.h b/keyboards/chimera_ortho_plus/config.h index 4b12796e95..ebffb85657 100644 --- a/keyboards/chimera_ortho_plus/config.h +++ b/keyboards/chimera_ortho_plus/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/chimera_ortho_plus/matrix.c b/keyboards/chimera_ortho_plus/matrix.c index 818e05ac98..51898e35d1 100644 --- a/keyboards/chimera_ortho_plus/matrix.c +++ b/keyboards/chimera_ortho_plus/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -79,7 +79,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -87,7 +87,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[14] = {0}; @@ -97,13 +97,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/chimera_ortho_plus/rules.mk b/keyboards/chimera_ortho_plus/rules.mk index e99e79c327..cd98979306 100644 --- a/keyboards/chimera_ortho_plus/rules.mk +++ b/keyboards/chimera_ortho_plus/rules.mk @@ -20,4 +20,5 @@ UNICODE_ENABLE = yes  CUSTOM_MATRIX = yes  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/comet46/config.h b/keyboards/comet46/config.h index 067dabb103..5ea40c14c5 100644 --- a/keyboards/comet46/config.h +++ b/keyboards/comet46/config.h @@ -62,12 +62,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define MODS_CTRL_MASK  (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))  #define MODS_ALT_MASK  (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))  #define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)) - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/comet46/matrix.c b/keyboards/comet46/matrix.c index 34930af7e2..1403f410c0 100644 --- a/keyboards/comet46/matrix.c +++ b/keyboards/comet46/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -79,7 +79,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -87,7 +87,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -97,13 +97,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/comet46/rules.mk b/keyboards/comet46/rules.mk index 814622226a..10d828cc7f 100644 --- a/keyboards/comet46/rules.mk +++ b/keyboards/comet46/rules.mk @@ -19,5 +19,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # project specific files  SRC += matrix.c \         i2c.c \ -       ssd1306.c \ -       serial_uart.c +       ssd1306.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/converter/palm_usb/config.h b/keyboards/converter/palm_usb/config.h index 4afc654e85..35032835cd 100644 --- a/keyboards/converter/palm_usb/config.h +++ b/keyboards/converter/palm_usb/config.h @@ -60,58 +60,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.      get_mods() == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \      get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \  ) - - -/* Serial(USART) configuration - *     asynchronous, negative logic, 9600baud, no flow control - *     1-start bit, 8-data bit, non parity, 1-stop bit - */ -#define SERIAL_SOFT_BAUD            9600 -#define SERIAL_SOFT_PARITY_NONE -#define SERIAL_SOFT_BIT_ORDER_LSB -#if (HANDSPRING == 0) -    #define SERIAL_SOFT_LOGIC_NEGATIVE  //RS232 logic -#endif -/* RXD Port */ -#define SERIAL_SOFT_RXD_ENABLE - -// we are using Pro micro pin 3 / D0 as serial -#define SERIAL_SOFT_RXD_DDR         DDRD -#define SERIAL_SOFT_RXD_PORT        PORTD -#define SERIAL_SOFT_RXD_PIN         PIND -#define SERIAL_SOFT_RXD_BIT         0 -#define SERIAL_SOFT_RXD_VECT        INT0_vect - -/* RXD Interupt */ -#define SERIAL_SOFT_RXD_INIT()      do { \ -    /* pin configuration: input with pull-up */ \ -    SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \ -    SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \ -    /* enable interrupt: INT0(rising edge) */ \ -    EICRA |= ((1<<ISC01)|(1<<ISC00)); \ -    EIMSK |= (1<<INT0); \ -    sei(); \ -} while (0) -#define SERIAL_SOFT_RXD_INT_ENTER() -#define SERIAL_SOFT_RXD_INT_EXIT()  do { \ -    /* clear interrupt  flag */ \ -    EIFR = (1<<INTF0); \ -} while (0) -#define SERIAL_SOFT_RXD_READ()      (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT)) - -/* TXD Port */ -#define SERIAL_SOFT_TXD_ENABLE -#define SERIAL_SOFT_TXD_DDR         DDRD -#define SERIAL_SOFT_TXD_PORT        PORTD -#define SERIAL_SOFT_TXD_PIN         PIND -#define SERIAL_SOFT_TXD_BIT         3 -#define SERIAL_SOFT_TXD_HI()        do { SERIAL_SOFT_TXD_PORT |=  (1<<SERIAL_SOFT_TXD_BIT); } while (0) -#define SERIAL_SOFT_TXD_LO()        do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0) -#define SERIAL_SOFT_TXD_INIT()      do { \ -    /* pin configuration: output */ \ -    SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \ -    /* idle */ \ -    SERIAL_SOFT_TXD_ON(); \ -} while (0) - - diff --git a/keyboards/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c index 289284b616..010fd56c79 100644 --- a/keyboards/converter/palm_usb/matrix.c +++ b/keyboards/converter/palm_usb/matrix.c @@ -18,7 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  #include QMK_KEYBOARD_H -#include "protocol/serial.h" +#include "uart.h"  #include "timer.h" @@ -58,8 +58,6 @@ static uint16_t disconnect_counter = 0;  #define COL(code)    ((code & COL_MASK) )  #define KEYUP(code) ((code & KEY_MASK) >>7 ) -static bool is_modified = false; -  __attribute__ ((weak))  void matrix_init_kb(void) {      matrix_init_user(); @@ -166,7 +164,7 @@ uint8_t rts_reset(void) {  uint8_t get_serial_byte(void) {      static uint8_t code;      while(1) { -        code = serial_recv(); +        code = uart_read();          if (code) {               debug_hex(code); debug(" ");              return code; @@ -242,7 +240,7 @@ void matrix_init(void)      debug_enable = true;      //debug_matrix =true; -    serial_init(); // arguments all #defined  +    uart_init(9600); // arguments all #defined   #if (HANDSPRING == 0)      pins_init(); // set all inputs and outputs.  @@ -292,7 +290,7 @@ void matrix_init(void)  uint8_t matrix_scan(void)  {      uint8_t code; -    code = serial_recv(); +    code = uart_read();      if (!code) {  /*                   disconnect_counter ++; @@ -354,11 +352,6 @@ uint8_t matrix_scan(void)      return code;  } -bool matrix_is_modified(void) -{ -    return is_modified; -} -  inline  bool matrix_has_ghost(void)  { diff --git a/keyboards/converter/palm_usb/post_rules.mk b/keyboards/converter/palm_usb/post_rules.mk deleted file mode 100644 index 9c11076701..0000000000 --- a/keyboards/converter/palm_usb/post_rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -ifdef HARDWARE_SERIAL -  # Untested with palm_usb -  SRC += protocol/serial_uart.c -  OPT_DEFS += -DHARDWARE_SERIAL -else -  SRC += protocol/serial_soft.c -endif diff --git a/keyboards/converter/palm_usb/rules.mk b/keyboards/converter/palm_usb/rules.mk index c5e680b883..a1d2e39b23 100644 --- a/keyboards/converter/palm_usb/rules.mk +++ b/keyboards/converter/palm_usb/rules.mk @@ -20,5 +20,6 @@ RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  CUSTOM_MATRIX = yes  SRC += matrix.c +QUANTUM_LIB_SRC += uart.c  DEFAULT_FOLDER = converter/palm_usb/stowaway diff --git a/keyboards/converter/sun_usb/command_extra.c b/keyboards/converter/sun_usb/command_extra.c index 756a9160bb..332776ab90 100644 --- a/keyboards/converter/sun_usb/command_extra.c +++ b/keyboards/converter/sun_usb/command_extra.c @@ -1,5 +1,5 @@  #include QMK_KEYBOARD_H -#include "protocol/serial.h" +#include "uart.h"  bool sun_bell = false;  bool sun_click = false; @@ -20,41 +20,41 @@ bool command_extra(uint8_t code)              return false;          case KC_DEL:              print("Reset\n"); -            serial_send(0x01); +            uart_write(0x01);              break;          case KC_HOME:  	    sun_bell = !sun_bell;  	    if (sun_bell) {                  print("Bell On\n"); -	        serial_send(0x02); +	        uart_write(0x02);  	    } else {  	        print("Bell Off\n"); -	        serial_send(0x03); +	        uart_write(0x03);  	    }              break;          case KC_END:  	    sun_click = !sun_click;  	    if (sun_click) {  	        print("Click On\n"); -		serial_send(0x0A); +		uart_write(0x0A);  	    } else {  	        print("Click Off\n"); -                serial_send(0x0B); +                uart_write(0x0B);  	    }  	    break;          case KC_PGUP:              print("LED all on\n"); -            serial_send(0x0E); -            serial_send(0xFF); +            uart_write(0x0E); +            uart_write(0xFF);              break;          case KC_PGDOWN:              print("LED all off\n"); -            serial_send(0x0E); -            serial_send(0x00); +            uart_write(0x0E); +            uart_write(0x00);              break;          case KC_INSERT:              print("layout\n"); -            serial_send(0x0F); +            uart_write(0x0F);              break;          default:              xprintf("Unknown extra command: %02X\n", code); diff --git a/keyboards/converter/sun_usb/config.h b/keyboards/converter/sun_usb/config.h index c67ae5ebae..0a4aa019f7 100644 --- a/keyboards/converter/sun_usb/config.h +++ b/keyboards/converter/sun_usb/config.h @@ -33,50 +33,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.      get_mods() == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \      get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \  ) - - -/* Serial(USART) configuration - *     asynchronous, negative logic, 1200baud, no flow control - *     1-start bit, 8-data bit, non parity, 1-stop bit - */ -#define SERIAL_SOFT_BAUD            1200 -#define SERIAL_SOFT_PARITY_NONE -#define SERIAL_SOFT_BIT_ORDER_LSB -#define SERIAL_SOFT_LOGIC_NEGATIVE -/* RXD Port */ -#define SERIAL_SOFT_RXD_ENABLE -#define SERIAL_SOFT_RXD_DDR         DDRD -#define SERIAL_SOFT_RXD_PORT        PORTD -#define SERIAL_SOFT_RXD_PIN         PIND -#define SERIAL_SOFT_RXD_BIT         2 -#define SERIAL_SOFT_RXD_VECT        INT2_vect -/* RXD Interupt */ -#define SERIAL_SOFT_RXD_INIT()      do { \ -    /* pin configuration: input with pull-up */ \ -    SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \ -    SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \ -    /* enable interrupt: INT2(rising edge) */ \ -    EICRA |= ((1<<ISC21)|(1<<ISC20)); \ -    EIMSK |= (1<<INT2); \ -    sei(); \ -} while (0) -#define SERIAL_SOFT_RXD_INT_ENTER() -#define SERIAL_SOFT_RXD_INT_EXIT()  do { \ -    /* clear interrupt  flag */ \ -    EIFR = (1<<INTF2); \ -} while (0) -#define SERIAL_SOFT_RXD_READ()      (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT)) -/* TXD Port */ -#define SERIAL_SOFT_TXD_ENABLE -#define SERIAL_SOFT_TXD_DDR         DDRD -#define SERIAL_SOFT_TXD_PORT        PORTD -#define SERIAL_SOFT_TXD_PIN         PIND -#define SERIAL_SOFT_TXD_BIT         3 -#define SERIAL_SOFT_TXD_HI()        do { SERIAL_SOFT_TXD_PORT |=  (1<<SERIAL_SOFT_TXD_BIT); } while (0) -#define SERIAL_SOFT_TXD_LO()        do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0) -#define SERIAL_SOFT_TXD_INIT()      do { \ -    /* pin configuration: output */ \ -    SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \ -    /* idle */ \ -    SERIAL_SOFT_TXD_ON(); \ -} while (0) diff --git a/keyboards/converter/sun_usb/led.c b/keyboards/converter/sun_usb/led.c index a409699e92..f8d183fd48 100644 --- a/keyboards/converter/sun_usb/led.c +++ b/keyboards/converter/sun_usb/led.c @@ -16,7 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  #include QMK_KEYBOARD_H -#include "protocol/serial.h" +#include "uart.h"  void led_set(uint8_t usb_led)  { @@ -27,6 +27,6 @@ void led_set(uint8_t usb_led)      if (usb_led & (1<<USB_LED_CAPS_LOCK))   sun_led |= (1<<3);      xprintf("LED: %02X\n", usb_led); -    serial_send(0x0E); -    serial_send(sun_led); +    uart_write(0x0E); +    uart_write(sun_led);  } diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c index 21f45111ec..e28d165d52 100644 --- a/keyboards/converter/sun_usb/matrix.c +++ b/keyboards/converter/sun_usb/matrix.c @@ -16,7 +16,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  #include QMK_KEYBOARD_H -#include "protocol/serial.h" +#include "uart.h"  /*   * Matrix Array usage: @@ -38,8 +38,6 @@ static uint8_t matrix[MATRIX_ROWS];  #define ROW(code)      ((code>>3)&0xF)  #define COL(code)      (code&0x07) -static bool is_modified = false; -  __attribute__ ((weak))  void matrix_init_kb(void) {      matrix_init_user(); @@ -76,7 +74,7 @@ void matrix_init(void)      /* PORTD |= (1<<6); */      debug_enable = true; -    serial_init(); +    uart_init(1200);      // initialize matrix state: all keys off      for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; @@ -86,12 +84,12 @@ void matrix_init(void)      /* print("Reseting "); */      /* while (1) { */      /*     print("."); */ -    /*     while (serial_recv()); */ -    /*     serial_send(0x01); */ +    /*     while (uart_read()); */ +    /*     uart_write(0x01); */      /*     _delay_ms(500); */ -    /*     if (serial_recv() == 0xFF) { */ +    /*     if (uart_read() == 0xFF) { */      /*         _delay_ms(500); */ -    /*         if (serial_recv() == 0x04) */ +    /*         if (uart_read() == 0x04) */      /*             break; */      /*     } */      /* } */ @@ -106,7 +104,7 @@ void matrix_init(void)  uint8_t matrix_scan(void)  {      uint8_t code; -    code = serial_recv(); +    code = uart_read();      if (!code) return 0;      debug_hex(code); debug(" "); @@ -115,7 +113,7 @@ uint8_t matrix_scan(void)          case 0xFF:  // reset success: FF 04              print("reset: ");              _delay_ms(500); -            code = serial_recv(); +            code = uart_read();              xprintf("%02X\n", code);              if (code == 0x04) {                  // LED status @@ -125,12 +123,12 @@ uint8_t matrix_scan(void)          case 0xFE:  // layout: FE <layout>              print("layout: ");              _delay_ms(500); -            xprintf("%02X\n", serial_recv()); +            xprintf("%02X\n", uart_read());              return 0;          case 0x7E:  // reset fail: 7E 01              print("reset fail: ");              _delay_ms(500); -            xprintf("%02X\n", serial_recv()); +            xprintf("%02X\n", uart_read());              return 0;          case 0x7F:              // all keys up @@ -154,11 +152,6 @@ uint8_t matrix_scan(void)      return code;  } -bool matrix_is_modified(void) -{ -    return is_modified; -} -  inline  bool matrix_has_ghost(void)  { diff --git a/keyboards/converter/sun_usb/post_rules.mk b/keyboards/converter/sun_usb/post_rules.mk deleted file mode 100644 index 2ea1f0a5bf..0000000000 --- a/keyboards/converter/sun_usb/post_rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -ifdef HARDWARE_SERIAL -  SRC += protocol/serial_uart.c -  OPT_DEFS += -DHARDWARE_SERIAL -else -  SRC += protocol/serial_soft.c -endif diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk index 2f2ddde1d0..d25bcc7ffa 100644 --- a/keyboards/converter/sun_usb/rules.mk +++ b/keyboards/converter/sun_usb/rules.mk @@ -20,5 +20,6 @@ RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  CUSTOM_MATRIX = yes  SRC += matrix.c led.c +QUANTUM_LIB_SRC += uart.c  DEFAULT_FOLDER = converter/sun_usb/type5 diff --git a/keyboards/converter/usb_usb/custom_matrix.cpp b/keyboards/converter/usb_usb/custom_matrix.cpp index 296f7fcd02..91986f6eb9 100644 --- a/keyboards/converter/usb_usb/custom_matrix.cpp +++ b/keyboards/converter/usb_usb/custom_matrix.cpp @@ -192,10 +192,6 @@ extern "C"          return 1;      } -    bool matrix_is_modified(void) { -        return matrix_is_mod; -    } -      bool matrix_is_on(uint8_t row, uint8_t col) {          uint8_t code = CODE(row, col); diff --git a/keyboards/dc01/arrow/matrix.c b/keyboards/dc01/arrow/matrix.c index 0102ad0fa4..b69e147914 100644 --- a/keyboards/dc01/arrow/matrix.c +++ b/keyboards/dc01/arrow/matrix.c @@ -205,14 +205,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c index bf5aba8497..084978a1fd 100644 --- a/keyboards/dc01/left/matrix.c +++ b/keyboards/dc01/left/matrix.c @@ -230,14 +230,6 @@ if (i2c_transaction(SLAVE_I2C_ADDRESS_NUMPAD, 0x1FFFF, 11)) {      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/dc01/numpad/matrix.c b/keyboards/dc01/numpad/matrix.c index 38130114eb..e8e2a1b14a 100644 --- a/keyboards/dc01/numpad/matrix.c +++ b/keyboards/dc01/numpad/matrix.c @@ -205,14 +205,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/dc01/right/matrix.c b/keyboards/dc01/right/matrix.c index 544c8dc538..2509bd7d4c 100644 --- a/keyboards/dc01/right/matrix.c +++ b/keyboards/dc01/right/matrix.c @@ -206,14 +206,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/dichotomy/config.h b/keyboards/dichotomy/config.h index 03e19b1388..40e7f18e6f 100644 --- a/keyboards/dichotomy/config.h +++ b/keyboards/dichotomy/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/dichotomy/dichotomy.c b/keyboards/dichotomy/dichotomy.c index 967d7e603c..afd52cc8b3 100755 --- a/keyboards/dichotomy/dichotomy.c +++ b/keyboards/dichotomy/dichotomy.c @@ -1,11 +1,13 @@  #include "dichotomy.h" +//#include "uart.h" +  void pointing_device_task(void){  	/*report_mouse_t currentReport = {};      uint32_t timeout = 0;      //the m character requests the RF slave to send the mouse report -    SERIAL_UART_DATA = 'm'; +    uart_write('m');      //trust the external inputs completely, erase old data      uint8_t uart_data[5] = {0}; @@ -15,7 +17,7 @@ void pointing_device_task(void){          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){  		xprintf("\r\nTIMED OUT"); @@ -23,7 +25,7 @@ void pointing_device_task(void){              }          }  	xprintf("\r\nGOT DATA for %d",i); -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, bytes 1-4 are movement and scroll diff --git a/keyboards/dichotomy/matrix.c b/keyboards/dichotomy/matrix.c index ed83bd452c..806b66d498 100755 --- a/keyboards/dichotomy/matrix.c +++ b/keyboards/dichotomy/matrix.c @@ -29,7 +29,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "dichotomy.h"  #include "pointing_device.h"  #include "report.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -94,7 +94,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -104,7 +104,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -114,14 +114,14 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){  		xprintf("\r\nTime out in keyboard.");                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/dichotomy/rules.mk b/keyboards/dichotomy/rules.mk index 2b5eb0360c..a6029e3dbf 100755 --- a/keyboards/dichotomy/rules.mk +++ b/keyboards/dichotomy/rules.mk @@ -18,4 +18,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/dm9records/ergoinu/config.h b/keyboards/dm9records/ergoinu/config.h index 113eaf9f76..89ea9e7903 100644 --- a/keyboards/dm9records/ergoinu/config.h +++ b/keyboards/dm9records/ergoinu/config.h @@ -20,7 +20,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #pragma once  #include "config_common.h" -#include "serial_config.h"  /* USB Device descriptor parameter     VID & PID are lisenced from microchip sublisence program, Don't use other project! */ @@ -30,11 +29,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define MANUFACTURER    Dm9Records  #define PRODUCT         ergoinu -#define TAPPING_FORCE_HOLD -#define TAPPING_TERM 100 -  #define USE_SERIAL +/* serial.c configuration for split keyboard */ +#define SOFT_SERIAL_PIN D2 +  /* Select hand configuration */  #define MASTER_LEFT  // #define MASTER_RIGHT @@ -49,6 +48,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define MATRIX_COLS 7  #define MATRIX_COL_PINS { B4, E6, D7, C6, D4, F5, F4 } +/* COL2ROW, ROW2COL */ +#define DIODE_DIRECTION COL2ROW +  /* define if matrix has ghost */  //#define MATRIX_HAS_GHOST diff --git a/keyboards/dm9records/ergoinu/ergoinu.c b/keyboards/dm9records/ergoinu/ergoinu.c index c6d099a148..a01ac0a25c 100644 --- a/keyboards/dm9records/ergoinu/ergoinu.c +++ b/keyboards/dm9records/ergoinu/ergoinu.c @@ -1 +1,18 @@ +/* +Copyright 2018 Takuya Urakawa<twitter:@hsgw> + +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 "ergoinu.h" diff --git a/keyboards/dm9records/ergoinu/ergoinu.h b/keyboards/dm9records/ergoinu/ergoinu.h index 43249a8440..c275d3fa27 100644 --- a/keyboards/dm9records/ergoinu/ergoinu.h +++ b/keyboards/dm9records/ergoinu/ergoinu.h @@ -19,10 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "quantum.h" -#ifdef RGBLIGHT_ENABLE -#include "ws2812.h" -#endif -  #define LAYOUT( \    L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \    L07, L08, L09, L10, L11, L12, L13, R07, R08, R09, R10, R11, R12, R13, \ @@ -41,4 +37,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.      { R27, R26, R25, R24, R23, R22, R21 }, \      { KC_NO, KC_NO, R32, R31, R30, R29, R28 } \    } - diff --git a/keyboards/dm9records/ergoinu/keymaps/default/config.h b/keyboards/dm9records/ergoinu/keymaps/default/config.h deleted file mode 100644 index bb266f25e7..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako <[email protected]> -Copyright 2015 Jack Humbert -Copyright 2018 Takuya Urakawa <Twitter:@hsgw> - -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 RGBLIGHT_ANIMATIONS diff --git a/keyboards/dm9records/ergoinu/keymaps/default/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default/keymap.c index 00c5da820d..862b538829 100644 --- a/keyboards/dm9records/ergoinu/keymaps/default/keymap.c +++ b/keyboards/dm9records/ergoinu/keymaps/default/keymap.c @@ -5,14 +5,6 @@  extern rgblight_config_t rgblight_config;  #endif -#define JA_CLON KC_QUOT  // : and + -#define JA_AT   KC_LBRC  // @ and ` -#define JA_HAT  KC_EQL   // ^ and ~ -#define JA_ENUN KC_RO    // \ and _ (EN mark and UNder score) -#define JA_ENVL KC_JYEN  // \ and | (EN mark and Vertical Line) -#define JA_LBRC KC_RBRC  // [ and { -#define JA_RBRC KC_BSLS  // ] and } -  enum LAYER_NO {    BASE = 0,    META, @@ -24,33 +16,30 @@ enum CUSTOM_KEYCODES {    RGB_TYPE,  }; -// Fillers to make layering more clear -#define ______ KC_TRNS -#define XXXXXX KC_NO -  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    [BASE] = LAYOUT( -    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,     KC_5,    KC_6,    KC_7,   KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,   KC_BSLS, -    KC_DEL,  KC_TAB,  KC_Q,    KC_W,    KC_E,     KC_R,    KC_T,    KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,  KC_RBRC, -    KC_LCTL,          KC_A,    KC_S,    KC_D,     KC_F,    KC_G,    KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,  KC_GRV, -    KC_LSFT,          KC_Z,    KC_X,    KC_C,     KC_V,    KC_B,    KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,  KC_RSFT, +    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,     KC_5,    KC_6,    KC_7,   KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, +    KC_DEL,  KC_TAB,  KC_Q,    KC_W,    KC_E,     KC_R,    KC_T,    KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, +    KC_LCTL,          KC_A,    KC_S,    KC_D,     KC_F,    KC_G,    KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_GRV, +    KC_LSFT,          KC_Z,    KC_X,    KC_C,     KC_V,    KC_B,    KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT,                        MO(META),KC_LALT, KC_LGUI,  KC_ENT,  KC_SPC,  KC_ENT, KC_BSPC, KC_RGUI, KC_RALT, MO(META)    ),    [META] = LAYOUT(      MO(CONF),KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS, -    ______,  KC_CAPS, ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_SLCK, KC_PSCR, KC_HOME, KC_END, -    ______,           ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_PAUS, KC_PGUP, KC_UP,   KC_PGDN, -    ______,           ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_LEFT, KC_DOWN, KC_RGHT, -                      ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______, ______ +    _______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PSCR, KC_HOME, KC_END, +    _______,          _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PGUP, KC_UP,   KC_PGDN, +    _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, +                      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______    ), - [CONF] = LAYOUT( -    ______,  RGB_TYPE,RGB_MOD,  RGB_VAI, RGB_HUI, RGB_HUI,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    XXXXXX,           XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    XXXXXX,           XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -                      XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX + +  [CONF] = LAYOUT( +    _______, RGB_TYPE,RGB_MOD,  RGB_VAI, RGB_HUI, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    XXXXXXX,          XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    XXXXXXX,          XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +                      XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX    )  }; diff --git a/keyboards/dm9records/ergoinu/keymaps/default/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default/rules.mk deleted file mode 100644 index 8567c2ae2e..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default/rules.mk +++ /dev/null @@ -1,18 +0,0 @@ -BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no       # Mouse keys -EXTRAKEY_ENABLE = no       # Audio control and System control -CONSOLE_ENABLE = no         # Console for debug -COMMAND_ENABLE = no        # Commands for debug and configuration -NKRO_ENABLE = no -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality -AUDIO_ENABLE = no           # Audio output -RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.  -SWAP_HANDS_ENABLE = no        # Enable one-hand typing - -# ergoinu configs -DISABLE_PROMICRO_LEDs = yes - -# Uncomment these for debugging -# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE)) -# $(info -- OPT_DEFS=$(OPT_DEFS)) -# $(info ) diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h b/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h deleted file mode 100644 index bb266f25e7..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -This is the c configuration file for the keymap - -Copyright 2012 Jun Wako <[email protected]> -Copyright 2015 Jack Humbert -Copyright 2018 Takuya Urakawa <Twitter:@hsgw> - -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 RGBLIGHT_ANIMATIONS diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c index a9a9f71f4d..32289c44db 100644 --- a/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c +++ b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c @@ -24,10 +24,6 @@ enum CUSTOM_KEYCODES {    RGB_TYPE,  }; -// Fillers to make layering more clear -#define ______ KC_TRNS -#define XXXXXX KC_NO -  const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    [BASE] = LAYOUT( @@ -38,20 +34,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {                        MO(META),KC_LALT, KC_ZKHK, KC_BSPC, KC_SPC,  KC_ENT, KC_BSPC, KC_MHEN, KC_KANA, MO(META)    ), -    [META] = LAYOUT(      MO(CONF),KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS, -    ______,  KC_CAPS, ______,  KC_UP,   ______,  ______,  ______,  ______,  ______,  ______,  KC_SLCK, KC_PSCR, KC_HOME, KC_END, -    ______,           KC_LEFT, KC_DOWN, KC_RGHT, ______,  ______,  ______,  ______,  ______,  KC_PAUS, KC_PGUP, KC_UP,   KC_PGDN, -    ______,           ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_LEFT, KC_DOWN, KC_RGHT, -                      ______,  ______,  KC_RGUI, KC_DEL,  KC_ENT,  ______,  KC_DEL,  KC_HENK, KC_LGUI, ______ +    _______, KC_CAPS, _______, KC_UP,   _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PSCR, KC_HOME, KC_END, +    _______,          KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_PAUS, KC_PGUP, KC_UP,   KC_PGDN, +    _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, +                      _______, _______, KC_RGUI, KC_DEL,  KC_ENT,  _______, KC_DEL,  KC_HENK, KC_LGUI, _______    ), - [CONF] = LAYOUT( -    ______,  RGB_TYPE,RGB_MOD,  RGB_VAI, RGB_HUI, RGB_HUI,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    XXXXXX,           XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -    XXXXXX,           XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX, -                      XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,   XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX,  XXXXXX + +  [CONF] = LAYOUT( +    _______, RGB_TYPE,RGB_MOD,  RGB_VAI, RGB_HUI, RGB_HUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    XXXXXXX,          XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +    XXXXXXX,          XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +                      XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX    )  }; diff --git a/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk deleted file mode 100644 index 97154be636..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk +++ /dev/null @@ -1,18 +0,0 @@ -BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no       # Mouse keys(+4700) -EXTRAKEY_ENABLE = no       # Audio control and System control(+450) -CONSOLE_ENABLE = no         # Console for debug(+400) -COMMAND_ENABLE = no        # Commands for debug and configuration -NKRO_ENABLE = no -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality -AUDIO_ENABLE = no           # Audio output -RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.  -SWAP_HANDS_ENABLE = no        # Enable one-hand typing - -# ergoinu configs -DISABLE_PROMICRO_LEDs = yes - -# Uncomment these for debugging -# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE)) -# $(info -- OPT_DEFS=$(OPT_DEFS)) -# $(info ) diff --git a/keyboards/dm9records/ergoinu/matrix.c b/keyboards/dm9records/ergoinu/matrix.c deleted file mode 100644 index b1c58f88fe..0000000000 --- a/keyboards/dm9records/ergoinu/matrix.c +++ /dev/null @@ -1,292 +0,0 @@ -/* -Copyright 2012 Jun Wako <[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/>. -*/ - -/* - * 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 "quantum.h" - -#include "serial.h" - -#ifndef DEBOUNCE -#  define DEBOUNCE	5 -#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(); - -  setPinOutput(B0); -  setPinOutput(D5); - -  #ifdef DISABLE_PROMICRO_LEDs -    writePinHigh(B0); -    writePinHigh(D5); -  #endif - -  // 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(); - -  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]; -          } -      } -  } - -  return 1; -} - -int serial_transaction(void) { -  int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; -  int ret=serial_update_buffers(); -  if (ret ) { -#ifndef DISABLE_PROMICRO_LEDs -      if(ret==2) writePinLow(B0); -#endif -      return 1; -  } -#ifndef DISABLE_PROMICRO_LEDs -  writePinHigh(B0); -#endif -  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() ) { -#ifndef DISABLE_PROMICRO_LEDs -    // turn on the indicator led when halves are disconnected -    writePinLow(D5); -#endif - -    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 { -#ifndef DISABLE_PROMICRO_LEDs -    // turn off the indicator led on no error -    writePinHigh(D5); -#endif -    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++) { -    print_hex8(row); print(": "); -    print_bin_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/dm9records/ergoinu/post_rules.mk b/keyboards/dm9records/ergoinu/post_rules.mk deleted file mode 100644 index 02aa48104c..0000000000 --- a/keyboards/dm9records/ergoinu/post_rules.mk +++ /dev/null @@ -1,9 +0,0 @@ -ifneq ($(strip $(ERGOINU)),) -  ifeq ($(findstring promicroled, $(ERGOINU)), promicroled) -    DISABLE_PROMICRO_LEDs = no -  endif -endif - -ifeq ($(strip $(DISABLE_PROMICRO_LEDs)), yes) -  OPT_DEFS += -DDISABLE_PROMICRO_LEDs -endif diff --git a/keyboards/dm9records/ergoinu/readme.md b/keyboards/dm9records/ergoinu/readme.md index de0a1c6c97..45f91dbac2 100644 --- a/keyboards/dm9records/ergoinu/readme.md +++ b/keyboards/dm9records/ergoinu/readme.md @@ -1,13 +1,12 @@ -ErgoInu -=== +# ErgoInu    An (Not Portable But Small) Ergonomic Split Keyboard. -Keyboard Maintainer: [hsgw](https://github.com/hsgw/)   [twitter](https://twitter.com/hsgw)   -Hardware Supported: Pro Micro   -Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)   +* Keyboard Maintainer: [hsgw](https://github.com/hsgw/)   [twitter](https://twitter.com/hsgw) +* Hardware Supported: Pro Micro +* Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)  Make example for this keyboard (after setting up your build environment): diff --git a/keyboards/dm9records/ergoinu/rules.mk b/keyboards/dm9records/ergoinu/rules.mk index 0a634ee794..aba3644c9e 100644 --- a/keyboards/dm9records/ergoinu/rules.mk +++ b/keyboards/dm9records/ergoinu/rules.mk @@ -7,20 +7,14 @@ BOOTLOADER = caterina  # Build Options  #   change yes to no to disable  # -BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no       # Mouse keys -EXTRAKEY_ENABLE = no       # Audio control and System control +BOOTMAGIC_ENABLE = yes      # 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 +COMMAND_ENABLE = no         # Commands for debug and configuration  NKRO_ENABLE = no            # Enable N-Key Rollover -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow  AUDIO_ENABLE = no           # Audio output -RGBLIGHT_ENABLE = no       # Enable WS2812 RGB underlight. -SUBPROJECT_rev1 = no -USE_I2C = no               # i2c is not supported -CUSTOM_MATRIX = yes -SRC += matrix.c serial.c split_util.c - -# ergoinu configs -DISABLE_PROMICRO_LEDs = yes +SPLIT_KEYBOARD = yes diff --git a/keyboards/dm9records/ergoinu/serial.c b/keyboards/dm9records/ergoinu/serial.c deleted file mode 100644 index 5919415877..0000000000 --- a/keyboards/dm9records/ergoinu/serial.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - * WARNING: be careful changing this code, it is very timing dependent - */ - -#ifndef F_CPU -#define F_CPU 16000000 -#endif - -#include <avr/io.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include <stdbool.h> -#include "serial.h" - -#ifdef USE_SERIAL - -#define _delay_sub_us(x)    __builtin_avr_delay_cycles(x) - -// Serial pulse period in microseconds. -#define SELECT_SERIAL_SPEED 1 -#if SELECT_SERIAL_SPEED == 0 -  // Very High speed -  #define SERIAL_DELAY 4             // micro sec -  #define READ_WRITE_START_ADJUST 30 // cycles -  #define READ_WRITE_WIDTH_ADJUST 10 // cycles -#elif SELECT_SERIAL_SPEED == 1 -  // High speed -  #define SERIAL_DELAY 6             // micro sec -  #define READ_WRITE_START_ADJUST 23 // cycles -  #define READ_WRITE_WIDTH_ADJUST 10 // cycles -#elif SELECT_SERIAL_SPEED == 2 -  // Middle speed -  #define SERIAL_DELAY 12            // micro sec -  #define READ_WRITE_START_ADJUST 25 // cycles -  #define READ_WRITE_WIDTH_ADJUST 10 // cycles -#elif SELECT_SERIAL_SPEED == 3 -  // Low speed -  #define SERIAL_DELAY 24            // micro sec -  #define READ_WRITE_START_ADJUST 25 // cycles -  #define READ_WRITE_WIDTH_ADJUST 10 // cycles -#elif SELECT_SERIAL_SPEED == 4 -  // Very Low speed -  #define SERIAL_DELAY 50            // micro sec -  #define READ_WRITE_START_ADJUST 25 // cycles -  #define READ_WRITE_WIDTH_ADJUST 10 // cycles -#else -#error Illegal Serial Speed -#endif - - -#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2) -#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2) - -#define SLAVE_INT_WIDTH 1 -#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY - -uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; -uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; - -#define SLAVE_DATA_CORRUPT (1<<0) -volatile uint8_t status = 0; - -inline static -void serial_delay(void) { -  _delay_us(SERIAL_DELAY); -} - -inline static -void serial_delay_half1(void) { -  _delay_us(SERIAL_DELAY_HALF1); -} - -inline static -void serial_delay_half2(void) { -  _delay_us(SERIAL_DELAY_HALF2); -} - -inline static -void serial_output(void) { -  SERIAL_PIN_DDR |= SERIAL_PIN_MASK; -} - -// make the serial pin an input with pull-up resistor -inline static -void serial_input_with_pullup(void) { -  SERIAL_PIN_DDR  &= ~SERIAL_PIN_MASK; -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -inline static -uint8_t serial_read_pin(void) { -  return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); -} - -inline static -void serial_low(void) { -  SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; -} - -inline static -void serial_high(void) { -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -void serial_master_init(void) { -  serial_output(); -  serial_high(); -} - -void serial_slave_init(void) { -  serial_input_with_pullup(); - -#if SERIAL_PIN_MASK == _BV(PD0) -  // Enable INT0 -  EIMSK |= _BV(INT0); -  // Trigger on falling edge of INT0 -  EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -#elif SERIAL_PIN_MASK == _BV(PD2) -  // Enable INT2 -  EIMSK |= _BV(INT2); -  // Trigger on falling edge of INT2 -  EICRA &= ~(_BV(ISC20) | _BV(ISC21)); -#else - #error unknown SERIAL_PIN_MASK value -#endif -} - -// Used by the sender to synchronize timing with the reciver. -static -void sync_recv(void) { -  for (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) { -  } -  // This shouldn't hang if the slave disconnects because the -  // serial line will float to high if the slave does disconnect. -  while (!serial_read_pin()); -} - -// Used by the reciver to send a synchronization signal to the sender. -static -void sync_send(void) { -  serial_low(); -  serial_delay(); -  serial_high(); -} - -// Reads a byte from the serial line -static -uint8_t serial_read_byte(void) { -  uint8_t byte = 0; -  _delay_sub_us(READ_WRITE_START_ADJUST); -  for ( uint8_t i = 0; i < 8; ++i) { -    serial_delay_half1();   // read the middle of pulses -    byte = (byte << 1) | serial_read_pin(); -    _delay_sub_us(READ_WRITE_WIDTH_ADJUST); -    serial_delay_half2(); -  } -  return byte; -} - -// Sends a byte with MSB ordering -static -void serial_write_byte(uint8_t data) { -  uint8_t b = 1<<7; -  while( b ) { -    if(data & b) { -      serial_high(); -    } else { -      serial_low(); -    } -    b >>= 1; -    serial_delay(); -  } -  serial_low(); // sync_send() / senc_recv() need raise edge -} - -// interrupt handle to be used by the slave device -ISR(SERIAL_PIN_INTERRUPT) { -  serial_output(); - -  // slave send phase -  uint8_t checksum = 0; -  for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -    sync_send(); -    serial_write_byte(serial_slave_buffer[i]); -    checksum += serial_slave_buffer[i]; -  } -  sync_send(); -  serial_write_byte(checksum); - -  // slave switch to input -  sync_send(); //0 -  serial_delay_half1(); //1 -  serial_low();         //2 -  serial_input_with_pullup(); //2 -  serial_delay_half1(); //3 - -  // slave recive phase -  uint8_t checksum_computed = 0; -  for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -    sync_recv(); -    serial_master_buffer[i] = serial_read_byte(); -    checksum_computed += serial_master_buffer[i]; -  } -  sync_recv(); -  uint8_t checksum_received = serial_read_byte(); - -  if ( checksum_computed != checksum_received ) { -    status |= SLAVE_DATA_CORRUPT; -  } else { -    status &= ~SLAVE_DATA_CORRUPT; -  } - -  sync_recv(); //weit master output to high -} - -inline -bool serial_slave_DATA_CORRUPT(void) { -  return status & SLAVE_DATA_CORRUPT; -} - -// Copies the serial_slave_buffer to the master and sends the -// serial_master_buffer to the slave. -// -// Returns: -// 0 => no error -// 1 => slave did not respond -// 2 => checksum error -int serial_update_buffers(void) { -  // this code is very time dependent, so we need to disable interrupts -  cli(); - -  // signal to the slave that we want to start a transaction -  serial_output(); -  serial_low(); -  _delay_us(SLAVE_INT_WIDTH); - -  // wait for the slaves response -  serial_input_with_pullup(); -  _delay_us(SLAVE_INT_RESPONSE_TIME); - -  // check if the slave is present -  if (serial_read_pin()) { -    // slave failed to pull the line low, assume not present -    serial_output(); -    serial_high(); -    sei(); -    return 1; -  } - -  // master recive phase -  // if the slave is present syncronize with it - -  uint8_t checksum_computed = 0; -  // receive data from the slave -  for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -    sync_recv(); -    serial_slave_buffer[i] = serial_read_byte(); -    checksum_computed += serial_slave_buffer[i]; -  } -  sync_recv(); -  uint8_t checksum_received = serial_read_byte(); - -  if (checksum_computed != checksum_received) { -    serial_output(); -    serial_high(); -    sei(); -    return 2; -  } - -  // master switch to output -  sync_recv(); //0 -  serial_delay();  //1 -  serial_low();    //3 -  serial_output(); // 3 -  serial_delay_half1(); //4 - -  // master send phase -  uint8_t checksum = 0; - -  for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -    sync_send(); -    serial_write_byte(serial_master_buffer[i]); -    checksum += serial_master_buffer[i]; -  } -  sync_send(); -  serial_write_byte(checksum); - -  // always, release the line when not in use -  sync_send(); - -  sei(); -  return 0; -} - -#endif diff --git a/keyboards/dm9records/ergoinu/serial.h b/keyboards/dm9records/ergoinu/serial.h deleted file mode 100644 index 67cf06ac6b..0000000000 --- a/keyboards/dm9records/ergoinu/serial.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include <stdbool.h> - -// //////////////////////////////////////////// -// Need Soft Serial defines in serial_config.h -// //////////////////////////////////////////// -// ex. -//  #define SERIAL_PIN_DDR DDRD -//  #define SERIAL_PIN_PORT PORTD -//  #define SERIAL_PIN_INPUT PIND -//  #define SERIAL_PIN_MASK _BV(PD?)   ?=0,2 -//  #define SERIAL_PIN_INTERRUPT INT?_vect  ?=0,2 -//  #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -//  #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2 - -// Buffers for master - slave communication -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; - -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); -bool serial_slave_data_corrupt(void); diff --git a/keyboards/dm9records/ergoinu/serial_config.h b/keyboards/dm9records/ergoinu/serial_config.h deleted file mode 100644 index a16db684ca..0000000000 --- a/keyboards/dm9records/ergoinu/serial_config.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -/* Soft Serial defines */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD2) -#define SERIAL_PIN_INTERRUPT INT2_vect - -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2 diff --git a/keyboards/dm9records/ergoinu/split_util.c b/keyboards/dm9records/ergoinu/split_util.c deleted file mode 100644 index 0cbc2c69c4..0000000000 --- a/keyboards/dm9records/ergoinu/split_util.c +++ /dev/null @@ -1,56 +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 -    // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c -    #if defined(I2C_MASTER_RIGHT) || 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/dm9records/ergoinu/split_util.h b/keyboards/dm9records/ergoinu/split_util.h deleted file mode 100644 index 11cfd5455a..0000000000 --- a/keyboards/dm9records/ergoinu/split_util.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#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); diff --git a/keyboards/duck/jetfire/matrix.c b/keyboards/duck/jetfire/matrix.c index 2dd94a72ac..729fa6dd14 100644 --- a/keyboards/duck/jetfire/matrix.c +++ b/keyboards/duck/jetfire/matrix.c @@ -116,12 +116,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/ergodox_stm32/matrix.c b/keyboards/ergodox_stm32/matrix.c index 383bf9790a..094d4a9e0f 100644 --- a/keyboards/ergodox_stm32/matrix.c +++ b/keyboards/ergodox_stm32/matrix.c @@ -119,10 +119,6 @@ uint8_t matrix_scan(void) {    return 0;  } -bool matrix_is_modified(void) { -  return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col) {    return (matrix[row] & (1 << col)); diff --git a/keyboards/ergotaco/matrix.c b/keyboards/ergotaco/matrix.c index e5af1c27fd..16300a7e4f 100644 --- a/keyboards/ergotaco/matrix.c +++ b/keyboards/ergotaco/matrix.c @@ -199,11 +199,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) // deprecated and evidently not called. -{ -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/gboards/gergoplex/matrix.c b/keyboards/gboards/gergoplex/matrix.c index 716390241a..a075b85725 100644 --- a/keyboards/gboards/gergoplex/matrix.c +++ b/keyboards/gboards/gergoplex/matrix.c @@ -152,11 +152,6 @@ uint8_t matrix_scan(void) {      return 1;  } -bool matrix_is_modified(void)  // deprecated and evidently not called. -{ -    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]; } diff --git a/keyboards/georgi/matrix.c b/keyboards/georgi/matrix.c index 438412102b..7d635ad8d7 100644 --- a/keyboards/georgi/matrix.c +++ b/keyboards/georgi/matrix.c @@ -220,11 +220,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) // deprecated and evidently not called. -{ -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/gergo/matrix.c b/keyboards/gergo/matrix.c index 655e729356..443e97132b 100644 --- a/keyboards/gergo/matrix.c +++ b/keyboards/gergo/matrix.c @@ -273,11 +273,6 @@ uint8_t matrix_scan(void) {      return 1;  } -bool matrix_is_modified(void) // deprecated and evidently not called. -{ -    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]; } diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c index a21cd08e14..a70e8c5aca 100644 --- a/keyboards/handwired/dactyl/matrix.c +++ b/keyboards/handwired/dactyl/matrix.c @@ -281,14 +281,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) // deprecated and evidently not called. -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/handwired/frenchdev/matrix.c b/keyboards/handwired/frenchdev/matrix.c index 5ab254a6f9..a043f78538 100644 --- a/keyboards/handwired/frenchdev/matrix.c +++ b/keyboards/handwired/frenchdev/matrix.c @@ -174,12 +174,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/handwired/not_so_minidox/config.h b/keyboards/handwired/not_so_minidox/config.h index de9286eda5..177552e2a6 100644 --- a/keyboards/handwired/not_so_minidox/config.h +++ b/keyboards/handwired/not_so_minidox/config.h @@ -40,6 +40,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define USE_SERIAL +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +#define SOFT_SERIAL_PIN D0  // or D1, D2, D3, E6 +  //#define EE_HANDS  #define MASTER_LEFT diff --git a/keyboards/handwired/not_so_minidox/i2c.c b/keyboards/handwired/not_so_minidox/i2c.c deleted file mode 100644 index 084c890c40..0000000000 --- a/keyboards/handwired/not_so_minidox/i2c.c +++ /dev/null @@ -1,162 +0,0 @@ -#include <util/twi.h> -#include <avr/io.h> -#include <stdlib.h> -#include <avr/interrupt.h> -#include <util/twi.h> -#include <stdbool.h> -#include "i2c.h" - -#ifdef USE_I2C - -// Limits the amount of we wait for any one i2c transaction. -// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is -// 9 bits, a single transaction will take around 90μs to complete. -// -// (F_CPU/SCL_CLOCK)  =>  # of μC cycles to transfer a bit -// poll loop takes at least 8 clock cycles to execute -#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 - -#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) - -volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -static volatile uint8_t slave_buffer_pos; -static volatile bool slave_has_register_set = false; - -// Wait for an i2c operation to finish -inline static -void i2c_delay(void) { -  uint16_t lim = 0; -  while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT) -    lim++; - -  // easier way, but will wait slightly longer -  // _delay_us(100); -} - -// Setup twi to run at 100kHz -void i2c_master_init(void) { -  // no prescaler -  TWSR = 0; -  // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10. -  // Check datasheets for more info. -  TWBR = ((F_CPU/SCL_CLOCK)-16)/2; -} - -// Start a transaction with the given i2c slave address. The direction of the -// transfer is set with I2C_READ and I2C_WRITE. -// returns: 0 => success -//          1 => error -uint8_t i2c_master_start(uint8_t address) { -  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA); - -  i2c_delay(); - -  // check that we started successfully -  if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START)) -    return 1; - -  TWDR = address; -  TWCR = (1<<TWINT) | (1<<TWEN); - -  i2c_delay(); - -  if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) ) -    return 1; // slave did not acknowledge -  else -    return 0; // success -} - - -// Finish the i2c transaction. -void i2c_master_stop(void) { -  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO); - -  uint16_t lim = 0; -  while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT) -    lim++; -} - -// Write one byte to the i2c slave. -// returns 0 => slave ACK -//         1 => slave NACK -uint8_t i2c_master_write(uint8_t data) { -  TWDR = data; -  TWCR = (1<<TWINT) | (1<<TWEN); - -  i2c_delay(); - -  // check if the slave acknowledged us -  return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1; -} - -// Read one byte from the i2c slave. If ack=1 the slave is acknowledged, -// if ack=0 the acknowledge bit is not set. -// returns: byte read from i2c device -uint8_t i2c_master_read(int ack) { -  TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA); - -  i2c_delay(); -  return TWDR; -} - -void i2c_reset_state(void) { -  TWCR = 0; -} - -void i2c_slave_init(uint8_t address) { -  TWAR = address << 0; // slave i2c address -  // TWEN  - twi enable -  // TWEA  - enable address acknowledgement -  // TWINT - twi interrupt flag -  // TWIE  - enable the twi interrupt -  TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN); -} - -ISR(TWI_vect); - -ISR(TWI_vect) { -  uint8_t ack = 1; -  switch(TW_STATUS) { -    case TW_SR_SLA_ACK: -      // this device has been addressed as a slave receiver -      slave_has_register_set = false; -      break; - -    case TW_SR_DATA_ACK: -      // this device has received data as a slave receiver -      // The first byte that we receive in this transaction sets the location -      // of the read/write location of the slaves memory that it exposes over -      // i2c.  After that, bytes will be written at slave_buffer_pos, incrementing -      // slave_buffer_pos after each write. -      if(!slave_has_register_set) { -        slave_buffer_pos = TWDR; -        // don't acknowledge the master if this memory loctaion is out of bounds -        if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) { -          ack = 0; -          slave_buffer_pos = 0; -        } -        slave_has_register_set = true; -      } else { -        i2c_slave_buffer[slave_buffer_pos] = TWDR; -        BUFFER_POS_INC(); -      } -      break; - -    case TW_ST_SLA_ACK: -    case TW_ST_DATA_ACK: -      // master has addressed this device as a slave transmitter and is -      // requesting data. -      TWDR = i2c_slave_buffer[slave_buffer_pos]; -      BUFFER_POS_INC(); -      break; - -    case TW_BUS_ERROR: // something went wrong, reset twi state -      TWCR = 0; -    default: -      break; -  } -  // Reset everything, so we are ready for the next TWI interrupt -  TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN); -} -#endif diff --git a/keyboards/handwired/not_so_minidox/i2c.h b/keyboards/handwired/not_so_minidox/i2c.h deleted file mode 100644 index 8910e70f10..0000000000 --- a/keyboards/handwired/not_so_minidox/i2c.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include <stdint.h> - -#ifndef F_CPU -#define F_CPU 16000000UL -#endif - -#define I2C_READ 1 -#define I2C_WRITE 0 - -#define I2C_ACK 1 -#define I2C_NACK 0 - -#define SLAVE_BUFFER_SIZE 0x10 - -// i2c SCL clock frequency -#define SCL_CLOCK  400000L - -extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; - -void i2c_master_init(void); -uint8_t i2c_master_start(uint8_t address); -void i2c_master_stop(void); -uint8_t i2c_master_write(uint8_t data); -uint8_t i2c_master_read(int); -void i2c_reset_state(void); -void i2c_slave_init(uint8_t address); - - -static inline unsigned char i2c_start_read(unsigned char addr) { -  return i2c_master_start((addr << 1) | I2C_READ); -} - -static inline unsigned char i2c_start_write(unsigned char addr) { -  return i2c_master_start((addr << 1) | I2C_WRITE); -} - -// from SSD1306 scrips -extern unsigned char i2c_rep_start(unsigned char addr); -extern void i2c_start_wait(unsigned char addr); -extern unsigned char i2c_readAck(void); -extern unsigned char i2c_readNak(void); -extern unsigned char i2c_read(unsigned char ack); - -#define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak(); diff --git a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c index 296a7a281d..435eed2f1f 100644 --- a/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c +++ b/keyboards/handwired/not_so_minidox/keymaps/default/keymap.c @@ -8,17 +8,10 @@  #define _QWERTY 0  #define _LOWER 1  #define _RAISE 2 -#define _ADJUST 16 +#define _ADJUST 3 -enum custom_keycodes { -  QWERTY = SAFE_RANGE, -  LOWER, -  RAISE, -  ADJUST, -}; - -#define KC_LOWR LOWER -#define KC_RASE RAISE +#define KC_LOWR MO(_LOWER) +#define KC_RASE MO(_RAISE)  #define KC_RST  RESET  #define KC_CAD  LCTL(LALT(KC_DEL)) @@ -72,45 +65,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {    )  }; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { -  switch (keycode) { -    case QWERTY: -      if (record->event.pressed) { -        set_single_persistent_default_layer(_QWERTY); -      } -      return false; -      break; -    case LOWER: -      if (record->event.pressed) { -        layer_on(_LOWER); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } else { -        layer_off(_LOWER); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } -      return false; -      break; -    case RAISE: -      if (record->event.pressed) { -        layer_on(_RAISE); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } else { -        layer_off(_RAISE); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } -      return false; -      break; -    case ADJUST: -      if (record->event.pressed) { -        layer_on(_ADJUST); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } else { -        layer_off(_ADJUST); -        update_tri_layer(_LOWER, _RAISE, _ADJUST); -      } -      return false; -      break; -  } -  return true; +layer_state_t layer_state_set_user(layer_state_t state) { +  return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);  } diff --git a/keyboards/handwired/not_so_minidox/matrix.c b/keyboards/handwired/not_so_minidox/matrix.c deleted file mode 100644 index b7cec9370c..0000000000 --- a/keyboards/handwired/not_so_minidox/matrix.c +++ /dev/null @@ -1,308 +0,0 @@ -/* -Copyright 2012 Jun Wako <[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/>. -*/ - -/* - * 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 "config.h" -#include "quantum.h" - -#ifdef USE_I2C -#  include "i2c.h" -#else // USE_SERIAL -#  include "serial.h" -#endif - -#ifndef DEBOUNCE -#  define DEBOUNCE	5 -#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; - -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); - - -__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(); - -    setPinOutput(B0); -    setPinOutput(D5); - -    // initialize matrix state: all keys off -    for (uint8_t i=0; i < MATRIX_ROWS; i++) { -        matrix[i] = 0; -        matrix_debouncing[i] = 0; -    } - -    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]; -            } -        } -    } - -    return 1; -} - -#ifdef USE_I2C - -// Get rows from other half over i2c -int i2c_transaction(void) { -    int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - -    int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); -    if (err) goto i2c_error; - -    // start of matrix stored at 0x00 -    err = i2c_master_write(0x00); -    if (err) goto i2c_error; - -    // Start read -    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); -    if (err) goto i2c_error; - -    if (!err) { -        int i; -        for (i = 0; i < ROWS_PER_HAND-1; ++i) { -            matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); -        } -        matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); -        i2c_master_stop(); -    } else { -i2c_error: // the cable is disconnceted, or something else went wrong -        i2c_reset_state(); -        return err; -    } - -    return 0; -} - -#else // USE_SERIAL - -int serial_transaction(void) { -    int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; - -    if (serial_update_buffers()) { -        return 1; -    } - -    for (int i = 0; i < ROWS_PER_HAND; ++i) { -        matrix[slaveOffset+i] = serial_slave_buffer[i]; -    } -    return 0; -} -#endif - -uint8_t matrix_scan(void) -{ -    int ret = _matrix_scan(); - - - -#ifdef USE_I2C -    if( i2c_transaction() ) { -#else // USE_SERIAL -    if( serial_transaction() ) { -#endif -        // turn on the indicator led when halves are disconnected -        writePinLow(D5); - -        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 -        writePinHigh(D5); -        error_count = 0; -    } -    matrix_scan_quantum(); -    return ret; -} - -void matrix_slave_scan(void) { -    _matrix_scan(); - -    int offset = (isLeftHand) ? 0 : (MATRIX_ROWS / 2); - -#ifdef USE_I2C -    for (int i = 0; i < ROWS_PER_HAND; ++i) { -        /* i2c_slave_buffer[i] = matrix[offset+i]; */ -        i2c_slave_buffer[i] = matrix[offset+i]; -    } -#else // USE_SERIAL -    for (int i = 0; i < ROWS_PER_HAND; ++i) { -        serial_slave_buffer[i] = matrix[offset+i]; -    } -#endif -} - -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++) { -        print_hex8(row); print(": "); -        print_bin_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/handwired/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk index 3eab0fba7e..8f9772df22 100644 --- a/keyboards/handwired/not_so_minidox/rules.mk +++ b/keyboards/handwired/not_so_minidox/rules.mk @@ -7,19 +7,14 @@ BOOTLOADER = caterina  # Build Options  #   change yes to no to disable  # -BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite +BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite  MOUSEKEY_ENABLE = yes       # Mouse keys -EXTRAKEY_ENABLE = no       # Audio control and System control +EXTRAKEY_ENABLE = yes       # Audio control and System control  CONSOLE_ENABLE = no         # Console for debug -COMMAND_ENABLE = yes        # Commands for debug and configuration +COMMAND_ENABLE = no         # Commands for debug and configuration  NKRO_ENABLE = no            # Enable N-Key Rollover -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality +BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow  AUDIO_ENABLE = no           # Audio output -RGBLIGHT_ENABLE = no       # Enable WS2812 RGB underlight.  -USE_I2C = no -CUSTOM_MATRIX = yes -SRC += matrix.c \ -	   i2c.c \ -	   split_util.c \ -	   serial.c +SPLIT_KEYBOARD = yes diff --git a/keyboards/handwired/not_so_minidox/serial.c b/keyboards/handwired/not_so_minidox/serial.c deleted file mode 100644 index 74bcbb6bf6..0000000000 --- a/keyboards/handwired/not_so_minidox/serial.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * WARNING: be careful changing this code, it is very timing dependent - */ - -#ifndef F_CPU -#define F_CPU 16000000 -#endif - -#include <avr/io.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include <stdbool.h> -#include "serial.h" - -#ifndef USE_I2C - -// Serial pulse period in microseconds. Its probably a bad idea to lower this -// value. -#define SERIAL_DELAY 24 - -uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; -uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; - -#define SLAVE_DATA_CORRUPT (1<<0) -volatile uint8_t status = 0; - -inline static -void serial_delay(void) { -  _delay_us(SERIAL_DELAY); -} - -inline static -void serial_output(void) { -  SERIAL_PIN_DDR |= SERIAL_PIN_MASK; -} - -// make the serial pin an input with pull-up resistor -inline static -void serial_input(void) { -  SERIAL_PIN_DDR  &= ~SERIAL_PIN_MASK; -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -inline static -uint8_t serial_read_pin(void) { -  return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); -} - -inline static -void serial_low(void) { -  SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; -} - -inline static -void serial_high(void) { -  SERIAL_PIN_PORT |= SERIAL_PIN_MASK; -} - -void serial_master_init(void) { -  serial_output(); -  serial_high(); -} - -void serial_slave_init(void) { -  serial_input(); - -  // Enable INT0 -  EIMSK |= _BV(INT0); -  // Trigger on falling edge of INT0 -  EICRA &= ~(_BV(ISC00) | _BV(ISC01)); -} - -// Used by the master to synchronize timing with the slave. -static -void sync_recv(void) { -  serial_input(); -  // This shouldn't hang if the slave disconnects because the -  // serial line will float to high if the slave does disconnect. -  while (!serial_read_pin()); -  serial_delay(); -} - -// Used by the slave to send a synchronization signal to the master. -static -void sync_send(void) { -  serial_output(); - -  serial_low(); -  serial_delay(); - -  serial_high(); -} - -// Reads a byte from the serial line -static -uint8_t serial_read_byte(void) { -  uint8_t byte = 0; -  serial_input(); -  for ( uint8_t i = 0; i < 8; ++i) { -    byte = (byte << 1) | serial_read_pin(); -    serial_delay(); -    _delay_us(1); -  } - -  return byte; -} - -// Sends a byte with MSB ordering -static -void serial_write_byte(uint8_t data) { -  uint8_t b = 8; -  serial_output(); -  while( b-- ) { -    if(data & (1 << b)) { -      serial_high(); -    } else { -      serial_low(); -    } -    serial_delay(); -  } -} - -// interrupt handle to be used by the slave device -ISR(SERIAL_PIN_INTERRUPT) { -  sync_send(); - -  uint8_t checksum = 0; -  for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -    serial_write_byte(serial_slave_buffer[i]); -    sync_send(); -    checksum += serial_slave_buffer[i]; -  } -  serial_write_byte(checksum); -  sync_send(); - -  // wait for the sync to finish sending -  serial_delay(); - -  // read the middle of pulses -  _delay_us(SERIAL_DELAY/2); - -  uint8_t checksum_computed = 0; -  for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -    serial_master_buffer[i] = serial_read_byte(); -    sync_send(); -    checksum_computed += serial_master_buffer[i]; -  } -  uint8_t checksum_received = serial_read_byte(); -  sync_send(); - -  serial_input(); // end transaction - -  if ( checksum_computed != checksum_received ) { -    status |= SLAVE_DATA_CORRUPT; -  } else { -    status &= ~SLAVE_DATA_CORRUPT; -  } -} - -inline -bool serial_slave_DATA_CORRUPT(void) { -  return status & SLAVE_DATA_CORRUPT; -} - -// Copies the serial_slave_buffer to the master and sends the -// serial_master_buffer to the slave. -// -// Returns: -// 0 => no error -// 1 => slave did not respond -int serial_update_buffers(void) { -  // this code is very time dependent, so we need to disable interrupts -  cli(); - -  // signal to the slave that we want to start a transaction -  serial_output(); -  serial_low(); -  _delay_us(1); - -  // wait for the slaves response -  serial_input(); -  serial_high(); -  _delay_us(SERIAL_DELAY); - -  // check if the slave is present -  if (serial_read_pin()) { -    // slave failed to pull the line low, assume not present -    sei(); -    return 1; -  } - -  // if the slave is present syncronize with it -  sync_recv(); - -  uint8_t checksum_computed = 0; -  // receive data from the slave -  for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { -    serial_slave_buffer[i] = serial_read_byte(); -    sync_recv(); -    checksum_computed += serial_slave_buffer[i]; -  } -  uint8_t checksum_received = serial_read_byte(); -  sync_recv(); - -  if (checksum_computed != checksum_received) { -    sei(); -    return 1; -  } - -  uint8_t checksum = 0; -  // send data to the slave -  for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { -    serial_write_byte(serial_master_buffer[i]); -    sync_recv(); -    checksum += serial_master_buffer[i]; -  } -  serial_write_byte(checksum); -  sync_recv(); - -  // always, release the line when not in use -  serial_output(); -  serial_high(); - -  sei(); -  return 0; -} - -#endif diff --git a/keyboards/handwired/not_so_minidox/serial.h b/keyboards/handwired/not_so_minidox/serial.h deleted file mode 100644 index 28fcc56ce7..0000000000 --- a/keyboards/handwired/not_so_minidox/serial.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "config.h" -#include <stdbool.h> - -/* TODO:  some defines for interrupt setup */ -#define SERIAL_PIN_DDR DDRD -#define SERIAL_PIN_PORT PORTD -#define SERIAL_PIN_INPUT PIND -#define SERIAL_PIN_MASK _BV(PD0) -#define SERIAL_PIN_INTERRUPT INT0_vect - -#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 -#define SERIAL_MASTER_BUFFER_LENGTH 1 - -// Buffers for master - slave communication -extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; -extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; - -void serial_master_init(void); -void serial_slave_init(void); -int serial_update_buffers(void); -bool serial_slave_data_corrupt(void); diff --git a/keyboards/handwired/not_so_minidox/split_util.c b/keyboards/handwired/not_so_minidox/split_util.c deleted file mode 100644 index 39639c3b4b..0000000000 --- a/keyboards/handwired/not_so_minidox/split_util.c +++ /dev/null @@ -1,84 +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 "config.h" - -#ifdef USE_I2C -#  include "i2c.h" -#else -#  include "serial.h" -#endif - -volatile bool isLeftHand = true; - -static void setup_handedness(void) { -  #ifdef EE_HANDS -    isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); -  #else -    // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c -    #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) -      isLeftHand = !has_usb(); -    #else -      isLeftHand = has_usb(); -    #endif -  #endif -} - -static void keyboard_master_setup(void) { -#ifdef USE_I2C -    i2c_master_init(); -#ifdef SSD1306OLED -    matrix_master_OLED_init (); -#endif -#else -    serial_master_init(); -#endif -} - -static void keyboard_slave_setup(void) { -#ifdef USE_I2C -    i2c_slave_init(SLAVE_I2C_ADDRESS); -#else -    serial_slave_init(); -#endif -} - -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(); -} - -void keyboard_slave_loop(void) { -   matrix_init(); - -   while (1) { -      matrix_slave_scan(); -   } -} - -// this code runs before the usb and keyboard is initialized -void matrix_setup(void) { -    split_keyboard_setup(); - -    if (!has_usb()) { -        keyboard_slave_loop(); -    } -} diff --git a/keyboards/handwired/not_so_minidox/split_util.h b/keyboards/handwired/not_so_minidox/split_util.h deleted file mode 100644 index 807412cd38..0000000000 --- a/keyboards/handwired/not_so_minidox/split_util.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include <stdbool.h> -#include "eeconfig.h" - -#define SLAVE_I2C_ADDRESS           0x32 - -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); -void keyboard_slave_loop(void); - -void matrix_master_OLED_init (void); diff --git a/keyboards/handwired/promethium/matrix.c b/keyboards/handwired/promethium/matrix.c index e3a41af288..90dbce14a9 100644 --- a/keyboards/handwired/promethium/matrix.c +++ b/keyboards/handwired/promethium/matrix.c @@ -148,14 +148,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col) diff --git a/keyboards/handwired/pterodactyl/matrix.c b/keyboards/handwired/pterodactyl/matrix.c index 21e6a128df..d0f74802a0 100644 --- a/keyboards/handwired/pterodactyl/matrix.c +++ b/keyboards/handwired/pterodactyl/matrix.c @@ -282,14 +282,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) // deprecated and evidently not called. -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/handwired/wakizashi40/config.h b/keyboards/handwired/wakizashi40/config.h new file mode 100644 index 0000000000..78f85f2197 --- /dev/null +++ b/keyboards/handwired/wakizashi40/config.h @@ -0,0 +1,20 @@ +/* Copyright 2021 xiao (@xia0) + * + * 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 + +#include "config_common.h" +#define DYNAMIC_KEYMAP_LAYER_COUNT 12 diff --git a/keyboards/handwired/wakizashi40/info.json b/keyboards/handwired/wakizashi40/info.json new file mode 100644 index 0000000000..b64ab55116 --- /dev/null +++ b/keyboards/handwired/wakizashi40/info.json @@ -0,0 +1,88 @@ +{ +  "manufacturer": "fumbucker", +  "keyboard_name": "Wakizashi 40", +  "maintainer": "fumbucker", +  "debounce": 5, +  "processor": "at90usb1286", +  "diode_direction": "COL2ROW", +  "features": { +    "audio": false, +    "backlight": false, +    "bluetooth": false, +    "bootmagic": true, +    "command": false, +    "console": true, +    "extrakey": true, +    "midi": false, +    "mousekey": true, +    "nkro": true, +    "rgblight": false, +    "unicode": false +  }, +  "matrix_pins": { +    "cols": ["C5", "C4", "D2", "D3", "D4", "D5", "C6", "D7", "B0", "B1", "B2", "B3", "B4"], +    "rows": ["C0", "C1", "C2", "C3"] +  }, +  "usb": { +    "device_ver": "0x0001", +    "pid": "0x7740", +    "vid": "0x6662" +  }, +  "layout_aliases": { +    "LAYOUT": "LAYOUT_all" +  }, +  "layouts": { +    "LAYOUT_all": { +      "layout": [ +        { "label": "TAB", "matrix": [0, 0], "w": 1.5, "x": 0, "y": 0 }, +        { "label": "Q", "matrix": [0, 2], "w": 1, "x": 1.5, "y": 0 }, +        { "label": "W", "matrix": [0, 3], "w": 1, "x": 2.5, "y": 0 }, +        { "label": "E", "matrix": [0, 4], "w": 1, "x": 3.5, "y": 0 }, +        { "label": "R", "matrix": [0, 5], "w": 1, "x": 4.5, "y": 0 }, +        { "label": "T", "matrix": [0, 6], "w": 1, "x": 5.5, "y": 0 }, +        { "label": "Y", "matrix": [0, 7], "w": 1, "x": 6.5, "y": 0 }, +        { "label": "U", "matrix": [0, 8], "w": 1, "x": 7.5, "y": 0 }, +        { "label": "I", "matrix": [0, 9], "w": 1, "x": 8.5, "y": 0 }, +        { "label": "O", "matrix": [0, 10], "w": 1, "x": 9.5, "y": 0 }, +        { "label": "P", "matrix": [0, 11], "w": 1, "x": 10.5, "y": 0 }, +        { "label": "BACKSPACE", "matrix": [0, 12], "w": 1.5, "x": 11.5, "y": 0 }, + +        { "label": "CAPSLOCK", "matrix": [1, 0], "w": 1.25, "x": 0, "y": 1 }, +        { "label": "A", "matrix": [1, 1], "w": 1, "x": 1.25, "y": 1 }, +        { "label": "S", "matrix": [1, 2], "w": 1, "x": 2.25, "y": 1 }, +        { "label": "D", "matrix": [1, 3], "w": 1, "x": 3.25, "y": 1 }, +        { "label": "F", "matrix": [1, 4], "w": 1, "x": 4.25, "y": 1 }, +        { "label": "G", "matrix": [1, 5], "w": 1, "x": 5.75, "y": 1 }, +        { "label": "H", "matrix": [1, 7], "w": 1, "x": 6.75, "y": 1 }, +        { "label": "J", "matrix": [1, 8], "w": 1, "x": 7.75, "y": 1 }, +        { "label": "K", "matrix": [1, 9], "w": 1, "x": 8.75, "y": 1 }, +        { "label": "L", "matrix": [1, 10], "w": 1, "x": 9.75, "y": 1 }, +        { "label": "SEMICOLON", "matrix": [1, 11], "w": 1, "x": 10.75, "y": 1 }, +        { "label": "ENTER", "matrix": [1, 12], "w": 1.25, "x": 11.75, "y": 1 }, + +        { "label": "LSHIFT", "matrix": [2, 0], "w": 1, "x": 0, "y": 2 }, +        { "label": "Z", "matrix": [2, 1], "w": 1, "x": 1, "y": 2 }, +        { "label": "X", "matrix": [2, 2], "w": 1, "x": 2, "y": 2 }, +        { "label": "C", "matrix": [2, 3], "w": 1, "x": 3, "y": 2 }, +        { "label": "V", "matrix": [2, 4], "w": 1, "x": 4, "y": 2 }, +        { "label": "B", "matrix": [2, 5], "w": 1, "x": 5, "y": 2 }, +        { "label": "ESCAPE", "matrix": [2, 6], "w": 1, "x": 6, "y": 2 }, +        { "label": "N", "matrix": [2, 7], "w": 1, "x": 7, "y": 2 }, +        { "label": "M", "matrix": [2, 8], "w": 1, "x": 8, "y": 2 }, +        { "label": "COMMA", "matrix": [2, 9], "w": 1, "x": 9, "y": 2 }, +        { "label": "PERIOD", "matrix": [2, 10], "w": 1, "x": 10, "y": 2 }, +        { "label": "SLASH", "matrix": [2, 11], "w": 1, "x": 11, "y": 2 }, +        { "label": "RSHIFT", "matrix": [2, 12], "w": 1, "x": 12, "y": 2 }, + +        { "label": "LCTRL", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 }, +        { "label": "LWIN", "matrix": [3, 1], "w": 1.25, "x": 1.25, "y": 3 }, +        { "label": "LALT", "matrix": [3, 3], "w": 1.25, "x": 2.5, "y": 3 }, +        { "label": "SPACE1", "matrix": [3, 5], "w": 2.75, "x": 3.75, "y": 3 }, +        { "label": "SPACE2", "matrix": [3, 7], "w": 2.75, "x": 6.5, "y": 3 }, +        { "label": "RALT", "matrix": [3, 9], "w": 1.25, "x": 9.25, "y": 3 }, +        { "label": "MENU", "matrix": [3, 11], "w": 1.25, "x": 10.5, "y": 3 }, +        { "label": "RCTRL", "matrix": [3, 12], "w": 1.25, "x": 11.75, "y": 3 } +      ] +    } +  } +} diff --git a/keyboards/handwired/wakizashi40/keymaps/default/keymap.c b/keyboards/handwired/wakizashi40/keymaps/default/keymap.c new file mode 100644 index 0000000000..910e5bde12 --- /dev/null +++ b/keyboards/handwired/wakizashi40/keymaps/default/keymap.c @@ -0,0 +1,44 @@ +/* Copyright 2021 xiao (@xia0) + * + * 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 QMK_KEYBOARD_H +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +	[0] = LAYOUT_all( +		KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, +		MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, +		KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, +		KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(2, KC_SPC), KC_LALT, KC_MENU, KC_LCTL), + +	[1] = LAYOUT_all( +		KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, +		MO(3), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_TRNS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS), + +	[2] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, +		MO(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_QUOT, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS), + +	[3] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/handwired/wakizashi40/keymaps/via/keymap.c b/keyboards/handwired/wakizashi40/keymaps/via/keymap.c new file mode 100644 index 0000000000..d456b8b40a --- /dev/null +++ b/keyboards/handwired/wakizashi40/keymaps/via/keymap.c @@ -0,0 +1,92 @@ +/* Copyright 2021 xiao (@xia0) + * + * 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 QMK_KEYBOARD_H +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +	[0] = LAYOUT_all( +		KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, +		MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, +		KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, +		KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(2, KC_SPC), KC_LALT, KC_MENU, KC_LCTL), + +	[1] = LAYOUT_all( +		KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, +		MO(11), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_TRNS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS), + +	[2] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, +		MO(11), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_QUOT, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS), + +	[3] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_QUOT, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[4] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[5] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[6] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[7] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[8] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[9] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[10] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +	[11] = LAYOUT_all( +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, +		KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) + +}; diff --git a/keyboards/handwired/wakizashi40/keymaps/via/rules.mk b/keyboards/handwired/wakizashi40/keymaps/via/rules.mk new file mode 100644 index 0000000000..7a49719505 --- /dev/null +++ b/keyboards/handwired/wakizashi40/keymaps/via/rules.mk @@ -0,0 +1,4 @@ +# rules.mk overrides to enable VIA + +VIA_ENABLE = yes +LTO_ENABLE = yes diff --git a/keyboards/handwired/wakizashi40/readme.md b/keyboards/handwired/wakizashi40/readme.md new file mode 100644 index 0000000000..d94a75651c --- /dev/null +++ b/keyboards/handwired/wakizashi40/readme.md @@ -0,0 +1,19 @@ +# Wakizashi 40 + + + +Reverse stagger 40% keyboard based on the Katana 60. + +* Keyboard Maintainer: [fumbucker](https://github.com/xia0) +* Hardware Supported: Teensy2++ +* Hardware Availability: [thingiverse](https://www.thingiverse.com/thing:3467930) + +Make example for this keyboard (after setting up your build environment): + +    make handwired/wakizashi40:default + +See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. + +## Bootloader + +* **Keycode in layout**: Press the key mapped to `RESET` if it is available (Capslock + R). diff --git a/keyboards/handwired/wakizashi40/rules.mk b/keyboards/handwired/wakizashi40/rules.mk new file mode 100644 index 0000000000..6e7633bfe0 --- /dev/null +++ b/keyboards/handwired/wakizashi40/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank diff --git a/keyboards/helix/pico/matrix.c b/keyboards/helix/pico/matrix.c index b18213d846..039cca6dcf 100644 --- a/keyboards/helix/pico/matrix.c +++ b/keyboards/helix/pico/matrix.c @@ -273,12 +273,6 @@ void matrix_slave_scan(void) {  #endif  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/helix/rev1/matrix.c b/keyboards/helix/rev1/matrix.c index aa2cc76905..f59391b596 100644 --- a/keyboards/helix/rev1/matrix.c +++ b/keyboards/helix/rev1/matrix.c @@ -239,12 +239,6 @@ void matrix_slave_scan(void) {  #endif  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c index 8eed7e58b7..699c15358b 100644 --- a/keyboards/helix/rev2/matrix.c +++ b/keyboards/helix/rev2/matrix.c @@ -287,12 +287,6 @@ void matrix_slave_scan(void) {  #endif  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/hhkb/ansi/matrix.c b/keyboards/hhkb/ansi/matrix.c index 529ba8b8fc..5dde74cce9 100644 --- a/keyboards/hhkb/ansi/matrix.c +++ b/keyboards/hhkb/ansi/matrix.c @@ -163,15 +163,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -        if (matrix[i] != matrix_prev[i]) -            return true; -    } -    return false; -} -  inline  bool matrix_has_ghost(void)  { diff --git a/keyboards/hhkb/jp/matrix.c b/keyboards/hhkb/jp/matrix.c index c0dca6a990..81db77fca7 100644 --- a/keyboards/hhkb/jp/matrix.c +++ b/keyboards/hhkb/jp/matrix.c @@ -164,15 +164,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -        if (matrix[i] != matrix_prev[i]) -            return true; -    } -    return false; -} -  inline  bool matrix_has_ghost(void)  { diff --git a/keyboards/hid_liber/matrix.c b/keyboards/hid_liber/matrix.c index ff59a17153..da73c616d7 100755 --- a/keyboards/hid_liber/matrix.c +++ b/keyboards/hid_liber/matrix.c @@ -218,12 +218,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    // NOTE: no longer used -    return true; -} -  inline  bool matrix_has_ghost(void)  { diff --git a/keyboards/honeycomb/config.h b/keyboards/honeycomb/config.h index 725f9490cb..c959543618 100755 --- a/keyboards/honeycomb/config.h +++ b/keyboards/honeycomb/config.h @@ -45,12 +45,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/honeycomb/honeycomb.c b/keyboards/honeycomb/honeycomb.c index 1254196d39..603400c7a3 100755 --- a/keyboards/honeycomb/honeycomb.c +++ b/keyboards/honeycomb/honeycomb.c @@ -7,7 +7,7 @@ void pointing_device_task(void){      uint32_t timeout = 0;      //the m character requests the RF slave to send the mouse report -    SERIAL_UART_DATA = 'm'; +    uart_write('m');      //trust the external inputs completely, erase old data      uint8_t uart_data[5] = {0}; @@ -17,7 +17,7 @@ void pointing_device_task(void){          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){  		xprintf("\r\nTIMED OUT"); @@ -25,7 +25,7 @@ void pointing_device_task(void){              }          }  	xprintf("\r\nGOT DATA for %d",i); -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, bytes 1-4 are movement and scroll diff --git a/keyboards/honeycomb/matrix.c b/keyboards/honeycomb/matrix.c index 7fef6f0fd8..fe1e4ce8ff 100755 --- a/keyboards/honeycomb/matrix.c +++ b/keyboards/honeycomb/matrix.c @@ -30,7 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "honeycomb.h"  #include "pointing_device.h"  #include "report.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  # define print_matrix_header()  print("\nr/c 01234567\n") @@ -95,7 +95,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -103,7 +103,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      // The 's' character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      // Trust the external keystates entirely, erase the last data      uint8_t uart_data[4] = {0}; @@ -113,14 +113,14 @@ uint8_t matrix_scan(void)          // Wait for the serial data, timeout if it's been too long          // This only happened in testing with a loose wire, but does no          // harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  xprintf("\r\nTime out in keyboard.");                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      // Check for the end packet, it's our checksum. diff --git a/keyboards/honeycomb/rules.mk b/keyboards/honeycomb/rules.mk index 2b5eb0360c..a6029e3dbf 100755 --- a/keyboards/honeycomb/rules.mk +++ b/keyboards/honeycomb/rules.mk @@ -18,4 +18,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/kinesis/alvicstep/matrix.c b/keyboards/kinesis/alvicstep/matrix.c index 71619f8167..9c05374510 100644 --- a/keyboards/kinesis/alvicstep/matrix.c +++ b/keyboards/kinesis/alvicstep/matrix.c @@ -136,12 +136,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/matrix/m20add/m20add.c b/keyboards/matrix/m20add/m20add.c index 21f4f9b1ba..4d328d6c54 100644 --- a/keyboards/matrix/m20add/m20add.c +++ b/keyboards/matrix/m20add/m20add.c @@ -53,25 +53,6 @@ bool led_update_kb(led_t led_state) {      return res;  } -// override the default implementation to avoid re-initialization -void i2c_init(void) -{ -    static bool initialized = false; -    if (initialized) { -        return; -    } else { -        initialized = true; -    } - -    // Try releasing special pins for a short time -    palSetLineMode(I2C1_SCL_PIN, PAL_MODE_INPUT); -    palSetLineMode(I2C1_SDA_PIN, PAL_MODE_INPUT); - -    chThdSleepMilliseconds(10); -    palSetLineMode(I2C1_SCL_PIN, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); -    palSetLineMode(I2C1_SDA_PIN, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); -} -  #define REBOOT_MAGIC 0x41544B42  void shutdown_user(void)  { diff --git a/keyboards/meira/matrix.c b/keyboards/meira/matrix.c index ae1ae5ce9d..8e8e9485b4 100644 --- a/keyboards/meira/matrix.c +++ b/keyboards/meira/matrix.c @@ -161,12 +161,6 @@ uint8_t matrix_scan(void)  	return ret;  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/mitosis/config.h b/keyboards/mitosis/config.h index 94e84e680e..2c72eed5f2 100644 --- a/keyboards/mitosis/config.h +++ b/keyboards/mitosis/config.h @@ -56,12 +56,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/mitosis/matrix.c b/keyboards/mitosis/matrix.c index 71c372a3ce..102431eb67 100644 --- a/keyboards/mitosis/matrix.c +++ b/keyboards/mitosis/matrix.c @@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -80,7 +80,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -88,7 +88,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -98,13 +98,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/mitosis/rules.mk b/keyboards/mitosis/rules.mk index 6c7aa30d88..04cafae718 100644 --- a/keyboards/mitosis/rules.mk +++ b/keyboards/mitosis/rules.mk @@ -18,4 +18,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  UNICODE_ENABLE = yes 		# Unicode  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/nek_type_a/matrix.c b/keyboards/nek_type_a/matrix.c index a59598a503..b396be9911 100644 --- a/keyboards/nek_type_a/matrix.c +++ b/keyboards/nek_type_a/matrix.c @@ -205,14 +205,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h index 4ae9ced258..dd9d6a9d25 100644 --- a/keyboards/planck/keymaps/thermal_printer/config.h +++ b/keyboards/planck/keymaps/thermal_printer/config.h @@ -1,9 +1,4 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H - -#include "../../config.h" - -#define SERIAL_UART_BAUD 19200 +#pragma once  /*   * MIDI options @@ -21,8 +16,3 @@     - etc.  */  //#define MIDI_ADVANCED - -/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ -//#define MIDI_TONE_KEYCODE_OCTAVES 2 - - #endif
\ No newline at end of file diff --git a/keyboards/redox_w/config.h b/keyboards/redox_w/config.h index b480b072f9..c4aeb32d58 100644 --- a/keyboards/redox_w/config.h +++ b/keyboards/redox_w/config.h @@ -55,12 +55,3 @@  //#define NO_ACTION_ONESHOT  //#define NO_ACTION_MACRO  //#define NO_ACTION_FUNCTION - -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/redox_w/matrix.c b/keyboards/redox_w/matrix.c index 703987a939..752324837c 100644 --- a/keyboards/redox_w/matrix.c +++ b/keyboards/redox_w/matrix.c @@ -24,7 +24,7 @@  #include "util.h"  #include "matrix.h"  #include "timer.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -87,7 +87,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -95,7 +95,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -105,13 +105,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/redox_w/rules.mk b/keyboards/redox_w/rules.mk index a8bd3a027a..483485cb7d 100644 --- a/keyboards/redox_w/rules.mk +++ b/keyboards/redox_w/rules.mk @@ -17,4 +17,5 @@ NKRO_ENABLE = yes           # Enable N-Key Rollover  # BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality  # # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/redscarf_iiplus/verb/matrix.c b/keyboards/redscarf_iiplus/verb/matrix.c index 42cfb7c037..88ecb586b3 100755 --- a/keyboards/redscarf_iiplus/verb/matrix.c +++ b/keyboards/redscarf_iiplus/verb/matrix.c @@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/redscarf_iiplus/verc/matrix.c b/keyboards/redscarf_iiplus/verc/matrix.c index 42cfb7c037..88ecb586b3 100755 --- a/keyboards/redscarf_iiplus/verc/matrix.c +++ b/keyboards/redscarf_iiplus/verc/matrix.c @@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/redscarf_iiplus/verd/matrix.c b/keyboards/redscarf_iiplus/verd/matrix.c index 78d1191b68..d9dbb3c0a3 100644 --- a/keyboards/redscarf_iiplus/verd/matrix.c +++ b/keyboards/redscarf_iiplus/verd/matrix.c @@ -94,13 +94,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/sirius/uni660/rev1/config.h b/keyboards/sirius/uni660/rev1/config.h index 91d7c5d7a3..f9815844cb 100644 --- a/keyboards/sirius/uni660/rev1/config.h +++ b/keyboards/sirius/uni660/rev1/config.h @@ -57,13 +57,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define NO_ACTION_MACRO  #define NO_ACTION_FUNCTION -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); -  #define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/sirius/uni660/rev1/matrix.c b/keyboards/sirius/uni660/rev1/matrix.c index 2db6767a46..65c35c968b 100644 --- a/keyboards/sirius/uni660/rev1/matrix.c +++ b/keyboards/sirius/uni660/rev1/matrix.c @@ -27,7 +27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "matrix.h"  #include "timer.h"  #include "debounce.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -81,7 +81,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      debounce_init(MATRIX_ROWS);      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -91,7 +91,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[17] = {0}; @@ -101,13 +101,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/sirius/uni660/rev1/rules.mk b/keyboards/sirius/uni660/rev1/rules.mk index 836bf6b442..77b9af362e 100644 --- a/keyboards/sirius/uni660/rev1/rules.mk +++ b/keyboards/sirius/uni660/rev1/rules.mk @@ -20,4 +20,5 @@ UNICODE_ENABLE = yes        # Unicode  CUSTOM_MATRIX = yes  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c diff --git a/keyboards/sirius/uni660/rev2/ansi/config.h b/keyboards/sirius/uni660/rev2/ansi/config.h index 13e33ebf11..8777dc4011 100644 --- a/keyboards/sirius/uni660/rev2/ansi/config.h +++ b/keyboards/sirius/uni660/rev2/ansi/config.h @@ -57,13 +57,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define NO_ACTION_MACRO  #define NO_ACTION_FUNCTION -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); -  #define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/sirius/uni660/rev2/iso/config.h b/keyboards/sirius/uni660/rev2/iso/config.h index 3283f0cd67..763230dca8 100644 --- a/keyboards/sirius/uni660/rev2/iso/config.h +++ b/keyboards/sirius/uni660/rev2/iso/config.h @@ -57,13 +57,4 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define NO_ACTION_MACRO  #define NO_ACTION_FUNCTION -//UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); -  #define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/sirius/uni660/rev2/matrix.c b/keyboards/sirius/uni660/rev2/matrix.c index 2db6767a46..65c35c968b 100644 --- a/keyboards/sirius/uni660/rev2/matrix.c +++ b/keyboards/sirius/uni660/rev2/matrix.c @@ -27,7 +27,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "matrix.h"  #include "timer.h"  #include "debounce.h" -#include "protocol/serial.h" +#include "uart.h"  #if (MATRIX_COLS <= 8)  #    define print_matrix_header()  print("\nr/c 01234567\n") @@ -81,7 +81,7 @@ uint8_t matrix_cols(void) {  void matrix_init(void) {      debounce_init(MATRIX_ROWS);      matrix_init_quantum(); -    serial_init(); +    uart_init(1000000);  }  uint8_t matrix_scan(void) @@ -91,7 +91,7 @@ uint8_t matrix_scan(void)      uint32_t timeout = 0;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[17] = {0}; @@ -101,13 +101,13 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while(!uart_available()){              timeout++;              if (timeout > 10000){                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/sirius/uni660/rev2/rules.mk b/keyboards/sirius/uni660/rev2/rules.mk index 0abebb07c6..f3ff80d92e 100644 --- a/keyboards/sirius/uni660/rev2/rules.mk +++ b/keyboards/sirius/uni660/rev2/rules.mk @@ -20,6 +20,7 @@ UNICODE_ENABLE = yes        # Unicode  CUSTOM_MATRIX = yes  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c  DEFAULT_FOLDER = sirius/uni660/rev2/ansi diff --git a/keyboards/sirius/unigo66/custom_matrix.cpp b/keyboards/sirius/unigo66/custom_matrix.cpp index fba107c7cb..dfcf82c779 100644 --- a/keyboards/sirius/unigo66/custom_matrix.cpp +++ b/keyboards/sirius/unigo66/custom_matrix.cpp @@ -172,10 +172,6 @@ extern "C"          return 1;      } -    bool matrix_is_modified(void) { -        return matrix_is_mod; -    } -      bool matrix_is_on(uint8_t row, uint8_t col) {          uint8_t code = CODE(row, col); diff --git a/keyboards/sixkeyboard/matrix.c b/keyboards/sixkeyboard/matrix.c index 64b46e9b0c..a6b28f3a12 100644 --- a/keyboards/sixkeyboard/matrix.c +++ b/keyboards/sixkeyboard/matrix.c @@ -114,11 +114,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/sx60/matrix.c b/keyboards/sx60/matrix.c index b7dc25425d..231e1c8836 100644 --- a/keyboards/sx60/matrix.c +++ b/keyboards/sx60/matrix.c @@ -172,14 +172,6 @@ uint8_t matrix_scan(void)      return 1;  } -bool matrix_is_modified(void) -{ -#if (DEBOUNCE > 0) -    if (debouncing) return false; -#endif -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/telophase/config.h b/keyboards/telophase/config.h index 51718da9d4..837bb8ab9b 100644 --- a/keyboards/telophase/config.h +++ b/keyboards/telophase/config.h @@ -72,12 +72,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  /* disable these deprecated features by default */  #define NO_ACTION_MACRO  #define NO_ACTION_FUNCTION - -// UART settings for communication with the RF microcontroller -#define SERIAL_UART_BAUD 1000000 -#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1)) -#define SERIAL_UART_INIT_CUSTOM       \ -    /* enable TX and RX */            \ -    UCSR1B = _BV(TXEN1) | _BV(RXEN1); \ -    /* 8-bit data */                  \ -    UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); diff --git a/keyboards/telophase/matrix.c b/keyboards/telophase/matrix.c index a153dd4bf1..44b7e4c9e9 100644 --- a/keyboards/telophase/matrix.c +++ b/keyboards/telophase/matrix.c @@ -18,10 +18,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "quantum.h"  #include "matrix.h" -#include "protocol/serial.h" +#include "uart.h"  void matrix_init_custom(void) { -    serial_init(); +    uart_init(1000000);  }  bool matrix_scan_custom(matrix_row_t current_matrix[]) { @@ -29,7 +29,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {      bool changed = false;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[13] = {0}; @@ -39,13 +39,13 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while (!SERIAL_UART_RXD_PRESENT) { +        while (!uart_available()) {              timeout++;              if (timeout > 10000) {                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0 diff --git a/keyboards/telophase/rules.mk b/keyboards/telophase/rules.mk index c3a8aaf79f..41a6ee25f5 100644 --- a/keyboards/telophase/rules.mk +++ b/keyboards/telophase/rules.mk @@ -19,7 +19,8 @@ AUDIO_ENABLE = no           # Audio output  CUSTOM_MATRIX = lite  # project specific files -SRC += matrix.c serial_uart.c +SRC += matrix.c +QUANTUM_LIB_SRC += uart.c  # Disable unsupported hardware  RGBLIGHT_SUPPORTED = no diff --git a/keyboards/thedogkeyboard/matrix.c b/keyboards/thedogkeyboard/matrix.c index 474fbec030..2851859cf2 100644 --- a/keyboards/thedogkeyboard/matrix.c +++ b/keyboards/thedogkeyboard/matrix.c @@ -90,13 +90,6 @@ uint8_t matrix_cols(void) {      return MATRIX_COLS;  } -//Deprecated. -bool matrix_is_modified(void) -{ -    if (debounce_active()) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/keyboards/yanghu/unicorne/config.h b/keyboards/yanghu/unicorne/config.h index 652afeb3b4..27d21c7906 100644 --- a/keyboards/yanghu/unicorne/config.h +++ b/keyboards/yanghu/unicorne/config.h @@ -42,6 +42,12 @@  #define ENCODERS_PAD_B \      { B12, B0 } +/* I2C - required for custom i2c_init */ +#define I2C1_SCL_PIN B6 +#define I2C1_SDA_PIN B7 +#define I2C1_SCL_PAL_MODE 4 +#define I2C1_SDA_PAL_MODE 4 +  /* Audio */  #define AUDIO_PIN A8  #define AUDIO_PWM_PAL_MODE 1 diff --git a/keyboards/yosino58/rev1/matrix.c b/keyboards/yosino58/rev1/matrix.c index 3db40b3829..e2be7113bf 100644 --- a/keyboards/yosino58/rev1/matrix.c +++ b/keyboards/yosino58/rev1/matrix.c @@ -289,12 +289,6 @@ void matrix_slave_scan(void) {  #endif  } -bool matrix_is_modified(void) -{ -    if (debouncing) return false; -    return true; -} -  inline  bool matrix_is_on(uint8_t row, uint8_t col)  { diff --git a/lib/python/qmk/cli/generate/develop_pr_list.py b/lib/python/qmk/cli/generate/develop_pr_list.py index 07e46752a6..fab0262773 100755 --- a/lib/python/qmk/cli/generate/develop_pr_list.py +++ b/lib/python/qmk/cli/generate/develop_pr_list.py @@ -97,7 +97,7 @@ def generate_develop_pr_list(cli):          match = git_expr.search(line)          if match:              pr_info = _get_pr_info(cache, gh, match.group("pr")) -            commit_info = {'hash': match.group("hash"), 'title': match.group("title"), 'pr_num': int(match.group("pr")), 'pr_labels': [label.name for label in pr_info.labels.items]} +            commit_info = {'hash': match.group("hash"), 'title': pr_info['title'], 'pr_num': int(match.group("pr")), 'pr_labels': [label.name for label in pr_info.labels.items]}              _categorise_commit(commit_info)      def _dump_commit_list(name, collection): diff --git a/platforms/avr/drivers/i2c_master.c b/platforms/avr/drivers/i2c_master.c index 111b55d6b0..d4024378ca 100644 --- a/platforms/avr/drivers/i2c_master.c +++ b/platforms/avr/drivers/i2c_master.c @@ -32,6 +32,9 @@  #    define I2C_START_RETRY_COUNT 20  #endif  // I2C_START_RETRY_COUNT +#define I2C_ACTION_READ 0x01 +#define I2C_ACTION_WRITE 0x00 +  #define TWBR_val (((F_CPU / F_SCL) - 16) / 2)  #define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) @@ -154,7 +157,7 @@ int16_t i2c_read_nack(uint16_t timeout) {  }  i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout) { -    i2c_status_t status = i2c_start(address | I2C_WRITE, timeout); +    i2c_status_t status = i2c_start(address | I2C_ACTION_WRITE, timeout);      for (uint16_t i = 0; i < length && status >= 0; i++) {          status = i2c_write(data[i], timeout); @@ -166,7 +169,7 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,  }  i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) { -    i2c_status_t status = i2c_start(address | I2C_READ, timeout); +    i2c_status_t status = i2c_start(address | I2C_ACTION_READ, timeout);      for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {          status = i2c_read_ack(timeout); diff --git a/platforms/chibios/drivers/i2c_master.c b/platforms/chibios/drivers/i2c_master.c index 43591d56f8..4a5d4760d0 100644 --- a/platforms/chibios/drivers/i2c_master.c +++ b/platforms/chibios/drivers/i2c_master.c @@ -27,8 +27,67 @@  #include "quantum.h"  #include "i2c_master.h"  #include <string.h> +#include <ch.h>  #include <hal.h> +#ifndef I2C1_SCL_PIN +#    define I2C1_SCL_PIN B6 +#endif +#ifndef I2C1_SDA_PIN +#    define I2C1_SDA_PIN B7 +#endif + +#ifdef USE_I2CV1 +#    ifndef I2C1_OPMODE +#        define I2C1_OPMODE OPMODE_I2C +#    endif +#    ifndef I2C1_CLOCK_SPEED +#        define I2C1_CLOCK_SPEED 100000 /* 400000 */ +#    endif +#    ifndef I2C1_DUTY_CYCLE +#        define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */ +#    endif +#else +// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock +// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html +#    ifndef I2C1_TIMINGR_PRESC +#        define I2C1_TIMINGR_PRESC 0U +#    endif +#    ifndef I2C1_TIMINGR_SCLDEL +#        define I2C1_TIMINGR_SCLDEL 7U +#    endif +#    ifndef I2C1_TIMINGR_SDADEL +#        define I2C1_TIMINGR_SDADEL 0U +#    endif +#    ifndef I2C1_TIMINGR_SCLH +#        define I2C1_TIMINGR_SCLH 38U +#    endif +#    ifndef I2C1_TIMINGR_SCLL +#        define I2C1_TIMINGR_SCLL 129U +#    endif +#endif + +#ifndef I2C_DRIVER +#    define I2C_DRIVER I2CD1 +#endif + +#ifdef USE_GPIOV1 +#    ifndef I2C1_SCL_PAL_MODE +#        define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN +#    endif +#    ifndef I2C1_SDA_PAL_MODE +#        define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN +#    endif +#else +// The default PAL alternate modes are used to signal that the pins are used for I2C +#    ifndef I2C1_SCL_PAL_MODE +#        define I2C1_SCL_PAL_MODE 4 +#    endif +#    ifndef I2C1_SDA_PAL_MODE +#        define I2C1_SDA_PAL_MODE 4 +#    endif +#endif +  static uint8_t i2c_address;  static const I2CConfig i2cconfig = { diff --git a/platforms/chibios/drivers/i2c_master.h b/platforms/chibios/drivers/i2c_master.h index 5f082e9d1e..deee7ecc08 100644 --- a/platforms/chibios/drivers/i2c_master.h +++ b/platforms/chibios/drivers/i2c_master.h @@ -24,66 +24,7 @@   */  #pragma once -#include <ch.h> -#include <hal.h> - -#ifndef I2C1_SCL_PIN -#    define I2C1_SCL_PIN B6 -#endif -#ifndef I2C1_SDA_PIN -#    define I2C1_SDA_PIN B7 -#endif - -#ifdef USE_I2CV1 -#    ifndef I2C1_OPMODE -#        define I2C1_OPMODE OPMODE_I2C -#    endif -#    ifndef I2C1_CLOCK_SPEED -#        define I2C1_CLOCK_SPEED 100000 /* 400000 */ -#    endif -#    ifndef I2C1_DUTY_CYCLE -#        define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */ -#    endif -#else -// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock -// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html -#    ifndef I2C1_TIMINGR_PRESC -#        define I2C1_TIMINGR_PRESC 0U -#    endif -#    ifndef I2C1_TIMINGR_SCLDEL -#        define I2C1_TIMINGR_SCLDEL 7U -#    endif -#    ifndef I2C1_TIMINGR_SDADEL -#        define I2C1_TIMINGR_SDADEL 0U -#    endif -#    ifndef I2C1_TIMINGR_SCLH -#        define I2C1_TIMINGR_SCLH 38U -#    endif -#    ifndef I2C1_TIMINGR_SCLL -#        define I2C1_TIMINGR_SCLL 129U -#    endif -#endif - -#ifndef I2C_DRIVER -#    define I2C_DRIVER I2CD1 -#endif - -#ifdef USE_GPIOV1 -#    ifndef I2C1_SCL_PAL_MODE -#        define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN -#    endif -#    ifndef I2C1_SDA_PAL_MODE -#        define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATE_OPENDRAIN -#    endif -#else -// The default PAL alternate modes are used to signal that the pins are used for I2C -#    ifndef I2C1_SCL_PAL_MODE -#        define I2C1_SCL_PAL_MODE 4 -#    endif -#    ifndef I2C1_SDA_PAL_MODE -#        define I2C1_SDA_PAL_MODE 4 -#    endif -#endif +#include <stdint.h>  typedef int16_t i2c_status_t; diff --git a/quantum/action_util.c b/quantum/action_util.c index 78e02aec18..7e30593fb1 100644 --- a/quantum/action_util.c +++ b/quantum/action_util.c @@ -21,6 +21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "action_layer.h"  #include "timer.h"  #include "keycode_config.h" +#include <string.h>  extern keymap_config_t keymap_config; @@ -247,7 +248,13 @@ void send_keyboard_report(void) {      keyboard_report->mods |= weak_override_mods;  #endif -    host_keyboard_send(keyboard_report); +    static report_keyboard_t last_report; + +    /* Only send the report if there are changes to propagate to the host. */ +    if (memcmp(keyboard_report, &last_report, sizeof(report_keyboard_t)) != 0) { +        memcpy(&last_report, keyboard_report, sizeof(report_keyboard_t)); +        host_keyboard_send(keyboard_report); +    }  }  /** \brief Get mods diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 49bb309e80..b3d6389dd5 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -160,6 +160,8 @@ void audio_toggle(void) {      eeconfig_update_audio(audio_config.raw);      if (audio_config.enable) {          audio_on_user(); +    } else { +        audio_off_user();      }  } @@ -172,6 +174,7 @@ void audio_on(void) {  void audio_off(void) {      PLAY_SONG(audio_off_song); +    audio_off_user();      wait_ms(100);      audio_stop_all();      audio_config.enable = 0; diff --git a/quantum/debounce.h b/quantum/debounce.h index 5043868289..3532d9cd7b 100644 --- a/quantum/debounce.h +++ b/quantum/debounce.h @@ -6,8 +6,6 @@  // changed is true if raw has changed since the last call  void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed); -bool debounce_active(void); -  void debounce_init(uint8_t num_rows);  void debounce_free(void); diff --git a/quantum/debounce/asym_eager_defer_pk.c b/quantum/debounce/asym_eager_defer_pk.c index 81f39383c4..b1eb4a2b7b 100644 --- a/quantum/debounce/asym_eager_defer_pk.c +++ b/quantum/debounce/asym_eager_defer_pk.c @@ -165,7 +165,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui      }  } -bool debounce_active(void) { return true; }  #else  #    include "none.c"  #endif diff --git a/quantum/debounce/none.c b/quantum/debounce/none.c index b03892bc5b..8a85cc04a8 100644 --- a/quantum/debounce/none.c +++ b/quantum/debounce/none.c @@ -26,6 +26,4 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool      }  } -bool debounce_active(void) { return false; } -  void debounce_free(void) {} diff --git a/quantum/debounce/sym_defer_g.c b/quantum/debounce/sym_defer_g.c index 9155eb914c..8cac1c37f9 100644 --- a/quantum/debounce/sym_defer_g.c +++ b/quantum/debounce/sym_defer_g.c @@ -44,8 +44,6 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool      }  } -bool debounce_active(void) { return debouncing; } -  void debounce_free(void) {}  #else  // no debouncing.  #    include "none.c" diff --git a/quantum/debounce/sym_defer_pk.c b/quantum/debounce/sym_defer_pk.c index 1b698ba347..9dee29e28e 100644 --- a/quantum/debounce/sym_defer_pk.c +++ b/quantum/debounce/sym_defer_pk.c @@ -134,7 +134,6 @@ static void start_debounce_counters(matrix_row_t raw[], matrix_row_t cooked[], u      }  } -bool debounce_active(void) { return true; }  #else  #    include "none.c"  #endif diff --git a/quantum/debounce/sym_eager_pk.c b/quantum/debounce/sym_eager_pk.c index 9da000ea9a..deec463649 100644 --- a/quantum/debounce/sym_eager_pk.c +++ b/quantum/debounce/sym_eager_pk.c @@ -140,7 +140,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui      }  } -bool debounce_active(void) { return true; }  #else  #    include "none.c"  #endif diff --git a/quantum/debounce/sym_eager_pr.c b/quantum/debounce/sym_eager_pr.c index eda92a263b..29b0cabefb 100644 --- a/quantum/debounce/sym_eager_pr.c +++ b/quantum/debounce/sym_eager_pr.c @@ -132,7 +132,6 @@ static void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], ui      }  } -bool debounce_active(void) { return true; }  #else  #    include "none.c"  #endif diff --git a/quantum/matrix.h b/quantum/matrix.h index 5c696622fc..1a3f362fba 100644 --- a/quantum/matrix.h +++ b/quantum/matrix.h @@ -46,8 +46,6 @@ void matrix_setup(void);  void matrix_init(void);  /* scan all key states on matrix */  uint8_t matrix_scan(void); -/* whether modified from previous scan. used after matrix_scan. */ -bool matrix_is_modified(void) __attribute__((deprecated));  /* whether a switch is on */  bool matrix_is_on(uint8_t row, uint8_t col);  /* matrix state on row */ diff --git a/quantum/matrix_common.c b/quantum/matrix_common.c index 66c89970b1..fe1d5b1edd 100644 --- a/quantum/matrix_common.c +++ b/quantum/matrix_common.c @@ -45,12 +45,6 @@ inline matrix_row_t matrix_get_row(uint8_t row) {  #endif  } -// Deprecated. -bool matrix_is_modified(void) { -    if (debounce_active()) return false; -    return true; -} -  #if (MATRIX_COLS <= 8)  #    define print_matrix_header() print("\nr/c 01234567\n")  #    define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 3b5fa8490b..23664721e8 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -57,3 +57,4 @@ void process_audio_noteoff(uint8_t note) { stop_note(compute_freq_for_midi_note(  void process_audio_all_notes_off(void) { stop_all_notes(); }  __attribute__((weak)) void audio_on_user() {} +__attribute__((weak)) void audio_off_user() {} diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h index d89a834ea8..42cfab4af2 100644 --- a/quantum/process_keycode/process_audio.h +++ b/quantum/process_keycode/process_audio.h @@ -8,3 +8,4 @@ void process_audio_noteoff(uint8_t note);  void process_audio_all_notes_off(void);  void audio_on_user(void); +void audio_off_user(void); diff --git a/quantum/process_keycode/process_key_lock.c b/quantum/process_keycode/process_key_lock.c index 4bd58f0c1e..941a2c5780 100644 --- a/quantum/process_keycode/process_key_lock.c +++ b/quantum/process_keycode/process_key_lock.c @@ -56,6 +56,11 @@ static inline uint16_t translate_keycode(uint16_t keycode) {      }  } +void cancel_key_lock(void) { +    watching = false; +    UNSET_KEY_STATE(0x0); +} +  bool process_key_lock(uint16_t *keycode, keyrecord_t *record) {      // We start by categorizing the keypress event. In the event of a down      // event, there are several possibilities: diff --git a/quantum/process_keycode/process_key_lock.h b/quantum/process_keycode/process_key_lock.h index baa0b39077..5159b0ba02 100644 --- a/quantum/process_keycode/process_key_lock.h +++ b/quantum/process_keycode/process_key_lock.h @@ -18,4 +18,5 @@  #include "quantum.h" +void cancel_key_lock(void);  bool process_key_lock(uint16_t *keycode, keyrecord_t *record); diff --git a/quantum/process_keycode/process_magic.c b/quantum/process_keycode/process_magic.c index d5cff4f12a..6332be647c 100644 --- a/quantum/process_keycode/process_magic.c +++ b/quantum/process_keycode/process_magic.c @@ -44,6 +44,7 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {              case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:              case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:              case MAGIC_TOGGLE_GUI: +            case MAGIC_TOGGLE_CONTROL_CAPSLOCK:                  /* keymap config */                  keymap_config.raw = eeconfig_read_keymap();                  switch (keycode) { @@ -168,6 +169,9 @@ bool process_magic(uint16_t keycode, keyrecord_t *record) {                      case MAGIC_TOGGLE_GUI:                          keymap_config.no_gui = !keymap_config.no_gui;                          break; +                    case MAGIC_TOGGLE_CONTROL_CAPSLOCK: +                        keymap_config.swap_control_capslock = !keymap_config.swap_control_capslock; +                        break;                  }                  eeconfig_update_keymap(keymap_config.raw); diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c index 82528cc680..0801f078ef 100644 --- a/quantum/process_keycode/process_printer.c +++ b/quantum/process_keycode/process_printer.c @@ -16,13 +16,14 @@  #include "process_printer.h"  #include "action_util.h" +#include "uart.h"  bool    printing_enabled = false;  uint8_t character_shift  = 0;  void enable_printing(void) {      printing_enabled = true; -    serial_init(); +    uart_init(19200);  }  void disable_printing(void) { printing_enabled = false; } @@ -35,7 +36,7 @@ uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0  void print_char(char c) {      USB_Disable(); -    serial_send(c); +    uart_write(c);      USB_Init();  } diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h index 3c6d06ff94..6f4d09f333 100644 --- a/quantum/process_keycode/process_printer.h +++ b/quantum/process_keycode/process_printer.h @@ -18,6 +18,4 @@  #include "quantum.h" -#include "protocol/serial.h" -  bool process_printer(uint16_t keycode, keyrecord_t *record); diff --git a/quantum/quantum.c b/quantum/quantum.c index 35b6351e9d..5ecc183327 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -263,7 +263,7 @@ bool process_record_quantum(keyrecord_t *record) {  #ifdef TAP_DANCE_ENABLE              process_tap_dance(keycode, record) &&  #endif -#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) +#if defined(UNICODE_COMMON_ENABLE)              process_unicode_common(keycode, record) &&  #endif  #ifdef LEADER_ENABLE @@ -387,7 +387,7 @@ void matrix_init_quantum() {  #ifdef RGB_MATRIX_ENABLE      rgb_matrix_init();  #endif -#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) +#if defined(UNICODE_COMMON_ENABLE)      unicode_input_mode_init();  #endif  #ifdef HAPTIC_ENABLE diff --git a/quantum/quantum.h b/quantum/quantum.h index 6927884e2f..5d3a665887 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -109,6 +109,10 @@ extern layer_state_t layer_state;  #    include "process_unicodemap.h"  #endif +#ifdef UNICODE_COMMON_ENABLE +#    include "process_unicode_common.h" +#endif +  #ifdef KEY_OVERRIDE_ENABLE  #    include "process_key_override.h"  #endif diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index e4d0167aac..3950a3bcae 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -597,6 +597,8 @@ enum quantum_keycodes {      MACRO_30,      MACRO_31, +    MAGIC_TOGGLE_CONTROL_CAPSLOCK, +      // Start of custom keycode range for keyboards and keymaps - always leave at the end      SAFE_RANGE  }; @@ -749,6 +751,7 @@ enum quantum_keycodes {  #define CL_NORM MAGIC_UNSWAP_CONTROL_CAPSLOCK  #define CL_CTRL MAGIC_CAPSLOCK_TO_CONTROL  #define CL_CAPS MAGIC_UNCAPSLOCK_TO_CONTROL +#define CL_TOGG MAGIC_TOGGLE_CONTROL_CAPSLOCK  #define LCG_SWP MAGIC_SWAP_LCTL_LGUI  #define LCG_NRM MAGIC_UNSWAP_LCTL_LGUI @@ -1,3 +1,7 @@ +# This is the `develop` branch! + +See the [Breaking Changes](https://docs.qmk.fm/#/breaking_changes) document for more information. +  # Quantum Mechanical Keyboard Firmware  [](https://github.com/qmk/qmk_firmware/tags) diff --git a/tests/auto_shift/test_auto_shift.cpp b/tests/auto_shift/test_auto_shift.cpp index 9c5ed9a832..a19b5dfa82 100644 --- a/tests/auto_shift/test_auto_shift.cpp +++ b/tests/auto_shift/test_auto_shift.cpp @@ -42,7 +42,6 @@ TEST_F(AutoShift, key_release_before_timeout) {      /* Release regular key */      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      regular_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -65,8 +64,6 @@ TEST_F(AutoShift, key_release_after_timeout) {      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      regular_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); diff --git a/tests/basic/test_action_layer.cpp b/tests/basic/test_action_layer.cpp index 1b12d13642..fe5c729f7c 100644 --- a/tests/basic/test_action_layer.cpp +++ b/tests/basic/test_action_layer.cpp @@ -131,14 +131,12 @@ TEST_F(ActionLayer, MomentaryLayerDoesNothing) {      set_keymap({layer_key});      /* Press and release MO, nothing should happen. */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.press();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -153,8 +151,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) {      set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});      /* Press MO. */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.press();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(1)); @@ -175,8 +172,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release MO */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(0)); @@ -199,8 +195,7 @@ TEST_F(ActionLayer, ToggleLayerDoesNothing) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release TG. */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(1)); @@ -223,8 +218,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) {      EXPECT_TRUE(layer_state_is(1));      testing::Mock::VerifyAndClearExpectations(&driver); -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      toggle_layer_1_on_layer_0.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(1)); @@ -237,8 +231,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) {      EXPECT_TRUE(layer_state_is(0));      testing::Mock::VerifyAndClearExpectations(&driver); -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      toggle_layer_0_on_layer_1.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(0)); @@ -254,14 +247,13 @@ TEST_F(ActionLayer, LayerTapToggleDoesNothing) {      set_keymap({layer_key});      /* Press and release TT. */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.press();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(1));      testing::Mock::VerifyAndClearExpectations(&driver); -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(0)); @@ -279,7 +271,6 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) {      set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});      /* Press TT. */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0);      layer_key.press();      run_one_scan_loop(); @@ -298,8 +289,7 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) {      EXPECT_TRUE(layer_state_is(1));      testing::Mock::VerifyAndClearExpectations(&driver); -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.release();      run_one_scan_loop();      EXPECT_TRUE(layer_state_is(0)); @@ -317,8 +307,7 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {      set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});      /* Tap TT five times . */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(9); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.press();      run_one_scan_loop(); diff --git a/tests/basic/test_keypress.cpp b/tests/basic/test_keypress.cpp index 1c175c9d56..044fc29378 100644 --- a/tests/basic/test_keypress.cpp +++ b/tests/basic/test_keypress.cpp @@ -85,7 +85,7 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {  TEST_F(KeyPress, LeftShiftIsReportedCorrectly) {      TestDriver driver;      auto       key_a    = KeymapKey(0, 0, 0, KC_A); -    auto       key_lsft = KeymapKey(0, 3, 0, KC_LSFT); +    auto       key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT);      set_keymap({key_a, key_lsft}); @@ -110,8 +110,8 @@ TEST_F(KeyPress, LeftShiftIsReportedCorrectly) {  TEST_F(KeyPress, PressLeftShiftAndControl) {      TestDriver driver; -    auto       key_lsft  = KeymapKey(0, 3, 0, KC_LSFT); -    auto       key_lctrl = KeymapKey(0, 5, 0, KC_LCTRL); +    auto       key_lsft  = KeymapKey(0, 3, 0, KC_LEFT_SHIFT); +    auto       key_lctrl = KeymapKey(0, 5, 0, KC_LEFT_CTRL);      set_keymap({key_lctrl, key_lsft}); @@ -138,8 +138,8 @@ TEST_F(KeyPress, PressLeftShiftAndControl) {  TEST_F(KeyPress, LeftAndRightShiftCanBePressedAtTheSameTime) {      TestDriver driver; -    auto       key_lsft = KeymapKey(0, 3, 0, KC_LSFT); -    auto       key_rsft = KeymapKey(0, 4, 0, KC_RSFT); +    auto       key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT); +    auto       key_rsft = KeymapKey(0, 4, 0, KC_RIGHT_SHIFT);      set_keymap({key_rsft, key_lsft}); @@ -175,12 +175,12 @@ TEST_F(KeyPress, RightShiftLeftControlAndCharWithTheSameKey) {      // The underlying cause is that we use only one bit to represent the right hand      // modifiers.      combo_key.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL))); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL, KC_O))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL, KC_O)));      keyboard_task();      combo_key.release(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      keyboard_task();  } @@ -189,18 +189,18 @@ TEST_F(KeyPress, PressPlusEqualReleaseBeforePress) {      TestDriver driver;      InSequence s;      auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); -    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); +    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL);      set_keymap({key_plus, key_eql});      key_plus.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);      key_plus.release(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -220,13 +220,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) {      TestDriver driver;      InSequence s;      auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); -    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); +    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL);      set_keymap({key_plus, key_eql});      key_plus.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -237,14 +237,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) {      testing::Mock::VerifyAndClearExpectations(&driver);      key_plus.release(); -    // BUG: Should really still return KC_EQL, but this is fine too -    // It's also called twice for some reason -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); +    // BUG: Should really still return KC_EQUAL, but this is fine too +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);      key_eql.release(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);  } @@ -253,12 +252,12 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) {      TestDriver driver;      InSequence s;      auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); -    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); +    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL);      set_keymap({key_plus, key_eql});      key_eql.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL)));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -268,13 +267,13 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) {      testing::Mock::VerifyAndClearExpectations(&driver);      key_plus.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL)));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);      key_plus.release(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -284,12 +283,12 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) {      TestDriver driver;      InSequence s;      auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); -    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); +    auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL);      set_keymap({key_plus, key_eql});      key_eql.press(); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL))); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL)));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); @@ -309,9 +308,7 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) {      testing::Mock::VerifyAndClearExpectations(&driver);      key_plus.release(); -    // This report is not needed -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); -}
\ No newline at end of file +} diff --git a/tests/basic/test_one_shot_keys.cpp b/tests/basic/test_one_shot_keys.cpp index 98178912e4..43fc3e1ba3 100644 --- a/tests/basic/test_one_shot_keys.cpp +++ b/tests/basic/test_one_shot_keys.cpp @@ -175,22 +175,20 @@ TEST_F(OneShot, OSLWithAdditionalKeypress) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release OSL key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      osl_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);      /* Press regular key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(2); -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); +    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(1);      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      regular_key.press();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release regular key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      regular_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); diff --git a/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp b/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp index ab9dd1518b..00c2b33cb7 100644 --- a/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp +++ b/tests/tap_hold_configurations/permissive_hold/test_tap_hold.cpp @@ -117,7 +117,6 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release regular key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(layer_key.report_code)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      regular_key.release(); @@ -125,7 +124,7 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release layer-tap-hold key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_tap_hold_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); diff --git a/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp b/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp index 67f394653f..67706f80dc 100644 --- a/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp +++ b/tests/tap_hold_configurations/permissive_hold_ignore_mod_tap_interrupt/test_tap_hold.cpp @@ -119,7 +119,6 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release regular key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));      regular_key.release(); @@ -127,7 +126,7 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key      testing::Mock::VerifyAndClearExpectations(&driver);      /* Release layer-tap-hold key */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_tap_hold_key.release();      run_one_scan_loop();      testing::Mock::VerifyAndClearExpectations(&driver); diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp b/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp index 02416eed73..54e7daa22c 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp +++ b/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp @@ -31,9 +31,8 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {      set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});      /* Tap TT five times . */ -    /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */      /* TODO: Tapping Force Hold breaks TT */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(10); +    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);      layer_key.press();      run_one_scan_loop(); diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp b/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp index cb68429617..3ae7c4ccfd 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp +++ b/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp @@ -60,7 +60,6 @@ TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Idle for tapping term of mod tap hold key. */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); @@ -101,7 +100,6 @@ TEST_F(TappingForceHold, tap_mod_tap_key_while_mod_tap_key_is_held) {      testing::Mock::VerifyAndClearExpectations(&driver);      /* Idle for tapping term of first mod tap hold key. */ -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));      EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); diff --git a/tests/test_common/test_fixture.cpp b/tests/test_common/test_fixture.cpp index 0601b17191..91bf3e779e 100644 --- a/tests/test_common/test_fixture.cpp +++ b/tests/test_common/test_fixture.cpp @@ -48,7 +48,6 @@ void TestFixture::SetUpTestCase() {      eeconfig_update_debug(debug_config.raw);      TestDriver driver; -    EXPECT_CALL(driver, send_keyboard_mock(_));      keyboard_init();      test_logger.info() << "TestFixture setup-up end." << std::endl; @@ -62,8 +61,6 @@ TestFixture::~TestFixture() {      test_logger.info() << "TestFixture clean-up start." << std::endl;      TestDriver driver; -    EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); -      /* Reset keyboard state. */      clear_all_keys(); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index e3be96d93d..b9c2616058 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -69,8 +69,8 @@ extern keymap_config_t keymap_config;  #    include "outputselect.h"  #    ifdef MODULE_ADAFRUIT_BLE  #        include "adafruit_ble.h" -#    else -#        include "../serial.h" +#    elif MODULE_RN42 +#        include "rn42.h"  #    endif  #endif @@ -90,46 +90,6 @@ extern keymap_config_t keymap_config;  #    include "joystick.h"  #endif -// https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf#G7.663734 -static inline uint16_t CONSUMER2RN42(uint16_t usage) { -    switch (usage) { -        case AC_HOME: -            return 0x0001; -        case AL_EMAIL: -            return 0x0002; -        case AC_SEARCH: -            return 0x0004; -        case AL_KEYBOARD_LAYOUT: -            return 0x0008; -        case AUDIO_VOL_UP: -            return 0x0010; -        case AUDIO_VOL_DOWN: -            return 0x0020; -        case AUDIO_MUTE: -            return 0x0040; -        case TRANSPORT_PLAY_PAUSE: -            return 0x0080; -        case TRANSPORT_NEXT_TRACK: -            return 0x0100; -        case TRANSPORT_PREV_TRACK: -            return 0x0200; -        case TRANSPORT_STOP: -            return 0x0400; -        case TRANSPORT_EJECT: -            return 0x0800; -        case TRANSPORT_FAST_FORWARD: -            return 0x1000; -        case TRANSPORT_REWIND: -            return 0x2000; -        case TRANSPORT_STOP_EJECT: -            return 0x4000; -        case AL_LOCAL_BROWSER: -            return 0x8000; -        default: -            return 0; -    } -} -  uint8_t keyboard_idle = 0;  /* 0: Boot Protocol, 1: Report Protocol(default) */  uint8_t        keyboard_protocol  = 1; @@ -688,14 +648,7 @@ static void send_keyboard(report_keyboard_t *report) {  #    ifdef MODULE_ADAFRUIT_BLE          adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));  #    elif MODULE_RN42 -        serial_send(0xFD); -        serial_send(0x09); -        serial_send(0x01); -        serial_send(report->mods); -        serial_send(report->reserved); -        for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) { -            serial_send(report->keys[i]); -        } +        rn42_send_keyboard(report);  #    endif          return;      } @@ -741,16 +694,8 @@ static void send_mouse(report_mouse_t *report) {  #        ifdef MODULE_ADAFRUIT_BLE          // FIXME: mouse buttons          adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h, report->buttons); -#        else -        serial_send(0xFD); -        serial_send(0x00); -        serial_send(0x03); -        serial_send(report->buttons); -        serial_send(report->x); -        serial_send(report->y); -        serial_send(report->v);  // should try sending the wheel v here -        serial_send(report->h);  // should try sending the wheel h here -        serial_send(0x00); +#        elif MODULE_RN42 +        rn42_send_mouse(report);  #        endif          return;      } @@ -821,15 +766,7 @@ static void send_consumer(uint16_t data) {  #        ifdef MODULE_ADAFRUIT_BLE          adafruit_ble_send_consumer_key(data);  #        elif MODULE_RN42 -        static uint16_t last_data = 0; -        if (data == last_data) return; -        last_data       = data; -        uint16_t bitmap = CONSUMER2RN42(data); -        serial_send(0xFD); -        serial_send(0x03); -        serial_send(0x03); -        serial_send(bitmap & 0xFF); -        serial_send((bitmap >> 8) & 0xFF); +        rn42_send_consumer(data);  #        endif          return;      } @@ -1077,7 +1014,7 @@ void protocol_pre_init(void) {      sei();  #if defined(MODULE_RN42) -    serial_init(); +    rn42_init();  #endif      /* wait for USB startup & debug output */ diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index a43755f899..0b992ba6c5 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -450,7 +450,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {  #endif  #ifndef USB_POLLING_INTERVAL_MS -#    define USB_POLLING_INTERVAL_MS 10 +#    define USB_POLLING_INTERVAL_MS 1  #endif  /* diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index bd0f1c21aa..8bdcccc9c9 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -647,7 +647,6 @@ const PROGMEM uchar console_hid_report[] = {  #    define USB_MAX_POWER_CONSUMPTION 500  #endif -// TODO: change this to 10ms to match LUFA  #ifndef USB_POLLING_INTERVAL_MS  #    define USB_POLLING_INTERVAL_MS 1  #endif diff --git a/util/update_chibios_mirror.sh b/util/update_chibios_mirror.sh index 0bf648ebfd..e6666c55c9 100755 --- a/util/update_chibios_mirror.sh +++ b/util/update_chibios_mirror.sh @@ -4,13 +4,13 @@  # Configuration  # The ChibiOS branches to mirror -chibios_branches="trunk stable_20.3.x stable_21.6.x" +chibios_branches="trunk stable_20.3.x stable_21.11.x"  # The ChibiOS tags to mirror -chibios_tags="ver20.3.1 ver20.3.2 ver20.3.3 ver20.3.4 ver21.6.0" +chibios_tags="ver20.3.1 ver20.3.2 ver20.3.3 ver20.3.4 ver21.11.1"  # The ChibiOS-Contrib branches to mirror -contrib_branches="chibios-20.3.x chibios-21.6.x" +contrib_branches="chibios-20.3.x chibios-21.11.x"  ################################  # Actions @@ -88,5 +88,5 @@ echo "Updating ChibiOS-Contrib branches..."  for branch in $contrib_branches ; do      echo "Creating branch 'mirror/$branch' from 'upstream/$branch'..."      git branch -f mirror/$branch upstream/$branch \ -        && git push qmk mirror/$branch +        && git push qmk mirror/$branch || true # Allow for nonexistent ChibiOS-Contrib branches -- they'll turn up eventually.  done | 
