diff options
108 files changed, 499 insertions, 3641 deletions
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/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c index e47c7f8e13..c1284535bc 100644 --- a/keyboards/40percentclub/ut47/matrix.c +++ b/keyboards/40percentclub/ut47/matrix.c @@ -104,12 +104,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/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 6d4eef27c7..0c93f04897 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 <wakojun@gmail.com> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - -/* - * scan matrix - */ -#include <stdint.h> -#include <stdbool.h> -#include "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 5e7aa75e35..8d01319972 100644 --- a/keyboards/ai03/orbit/rules.mk +++ b/keyboards/ai03/orbit/rules.mk @@ -17,12 +17,4 @@ NKRO_ENABLE = yes           # USB Nkey 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/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c index 289284b616..5cb3c23572 100644 --- a/keyboards/converter/palm_usb/matrix.c +++ b/keyboards/converter/palm_usb/matrix.c @@ -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(); @@ -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/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c index 21f45111ec..9ab34bcef7 100644 --- a/keyboards/converter/sun_usb/matrix.c +++ b/keyboards/converter/sun_usb/matrix.c @@ -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(); @@ -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/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/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 <wakojun@gmail.com> -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 3192b0f220..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, \ -                      MO(META),KC_LALT, KC_LGUI,  KC_ENT,  KC_SPC,  KC_ENT, KC_BSPC, KC_RGUI, KC_RALT, MO(META) \ +  [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, +                      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, \ -                      ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______, ______ \ +  [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, +                      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______    ), - [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 a9e20abf10..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default/rules.mk +++ /dev/null @@ -1,23 +0,0 @@ - -# Build Options -#   change to "no" to disable the options, or define them in the Makefile in -#   the appropriate keymap folder that will get included automatically -# -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            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -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 <wakojun@gmail.com> -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 e161145f4f..32289c44db 100644 --- a/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c +++ b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c @@ -24,34 +24,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, JA_HAT,   KC_JYEN, \ -    KC_DEL,  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    JA_AT,    JA_LBRC, \ -    KC_LCTL,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, JA_CLON,  JA_RBRC, \ -    KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RO,    KC_RSFT, \ -                      MO(META),KC_LALT, KC_ZKHK, KC_BSPC, KC_SPC,  KC_ENT, KC_BSPC, KC_MHEN, KC_KANA, MO(META) \ +  [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, JA_HAT,   KC_JYEN, +    KC_DEL,  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    JA_AT,    JA_LBRC, +    KC_LCTL,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, JA_CLON,  JA_RBRC, +    KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RO,    KC_RSFT, +                      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, ______ \ +  [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, _______    ), - [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 96054eb955..0000000000 --- a/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk +++ /dev/null @@ -1,23 +0,0 @@ - -# Build Options -#   change to "no" to disable the options, or define them in the Makefile in -#   the appropriate keymap folder that will get included automatically -# -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            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -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 <wakojun@gmail.com> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - -/* - * scan matrix - */ -#include <stdint.h> -#include <stdbool.h> -#include <avr/io.h> -#include <avr/wdt.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include "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 5a8fc65bad..d9a3e4aae7 100644 --- a/keyboards/dm9records/ergoinu/rules.mk +++ b/keyboards/dm9records/ergoinu/rules.mk @@ -5,23 +5,17 @@ MCU = atmega32u4  BOOTLOADER = caterina  # Build Options -#   change to "no" to disable the options, or define them in the Makefile in -#   the appropriate keymap folder that will get included automatically +#   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 -NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality +COMMAND_ENABLE = no         # Commands for debug and configuration +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no            # USB Nkey Rollover +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 <wakojun@gmail.com> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program.  If not, see <http://www.gnu.org/licenses/>. -*/ - -/* - * scan matrix - */ -#include <stdint.h> -#include <stdbool.h> -#include <avr/io.h> -#include <avr/wdt.h> -#include <avr/interrupt.h> -#include <util/delay.h> -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "split_util.h" -#include "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 dd5bf693b5..53ea6d22bb 100644 --- a/keyboards/handwired/not_so_minidox/rules.mk +++ b/keyboards/handwired/not_so_minidox/rules.mk @@ -5,22 +5,17 @@ MCU = atmega32u4  BOOTLOADER = caterina  # Build Options -#   change to "no" to disable the options, or define them in the Makefile in -#   the appropriate keymap folder that will get included automatically +#   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 -NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality +COMMAND_ENABLE = no         # Commands for debug and configuration +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no            # USB Nkey Rollover +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/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/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/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/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/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/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/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/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_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/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/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  /*  | 
