diff options
13 files changed, 326 insertions, 46 deletions
| diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h index dd2d9bc574..e3d44990ef 100644 --- a/keyboards/cannonkeys/satisfaction75/config.h +++ b/keyboards/cannonkeys/satisfaction75/config.h @@ -23,7 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #define DEVICE_VER      0x0001  /* in python2: list(u"whatever".encode('utf-16-le')) */  /*   at most 32 characters or the ugly hack in usb_main.c borks */ -#define MANUFACTURER QMK +#define MANUFACTURER CannonKeys  #define PRODUCT Satisfaction75  #define DESCRIPTION Satisfaction 75 Keyboard @@ -76,14 +76,27 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  // Bump this every time we change what we store  // This will automatically reset the EEPROM with defaults  // and avoid loading invalid data from the EEPROM -#define EEPROM_VERSION 0x02 +#define EEPROM_VERSION 0x0F  #define EEPROM_VERSION_ADDR 34  // Dynamic keymap starts after EEPROM version  #define DYNAMIC_KEYMAP_EEPROM_ADDR 35 -// Dynamic macro starts after dynamic keymaps (35+(4*6*16*2)) = (35+768) -#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 803 -#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 221 + +// Dynamic macro starts after dynamic keymaps (35+(4*6*16*2)) = (35+768) = 803 + +// I'm also putting my custom stuff after that +// 1 for enabled encoder modes +// 1 for custom backlighting controls +// 1 for OLED default mode +// 6 for 3x custom encoder settings, left, right, and press (18 total) + +#define DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES 803 +#define DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT 804 +#define DYNAMIC_KEYMAP_DEFAULT_OLED 805 +#define DYNAMIC_KEYMAP_CUSTOM_ENCODER 806 + +#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 824 +#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 200  #define DYNAMIC_KEYMAP_MACRO_COUNT 16 diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c new file mode 100644 index 0000000000..3595c107b9 --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c @@ -0,0 +1,37 @@ +/* +Copyright 2012,2013 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/>. +*/ + +#include QMK_KEYBOARD_H + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +  [0] = LAYOUT_all( +    KC_ESC,   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_GRV,   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_BSPC,  KC_DEL, ENC_PRESS, +    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_BSLS,  KC_DEL, +    KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_NUHS,  KC_ENTER, KC_PGUP, +    KC_LSFT,  KC_BSLS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  KC_UP,    KC_PGDN, +    KC_LCTL,  KC_LGUI,  KC_LALT,  KC_SPC,             KC_SPC,             KC_SPC,             KC_RALT,  MO(1),    KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT +  ), +  [1] = LAYOUT_all( +    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG, +    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET, +    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +    _______, _______, _______, _______,          _______,          _______,          _______, _______, _______, _______, _______, _______ +  ) +}; diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk new file mode 100644 index 0000000000..3357eb91c0 --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk @@ -0,0 +1 @@ +QWIIC_ENABLE = no diff --git a/keyboards/cannonkeys/satisfaction75/prototype/prototype.h b/keyboards/cannonkeys/satisfaction75/prototype/prototype.h new file mode 100644 index 0000000000..42e574f3ea --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/prototype/prototype.h @@ -0,0 +1,19 @@ +#pragma once + +#include "satisfaction75.h" + +#define LAYOUT_default( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,             K315, \ +	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K413,       K415, \ +	K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  KC_NO, KC_NO,  K315 }, \ +	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  KC_NO, K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ +} diff --git a/keyboards/cannonkeys/satisfaction75/prototype/rules.mk b/keyboards/cannonkeys/satisfaction75/prototype/rules.mk new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/prototype/rules.mk diff --git a/keyboards/cannonkeys/satisfaction75/rev1/rev1.h b/keyboards/cannonkeys/satisfaction75/rev1/rev1.h new file mode 100644 index 0000000000..302b7e43de --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/rev1/rev1.h @@ -0,0 +1,108 @@ +#pragma once + +#include "satisfaction75.h" + +// This layout is the default - it's what's in VIA +// ANSI, bottom row 1.25/1.25/1.25/6.25/1/1/1 +#define LAYOUT_default( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \ +	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \ +	{ K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ +} + +// ISO, bottom row 1.25/1.25/1.25/6.25/1/1/1 +#define LAYOUT_iso( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,       K315, \ +	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO,  K315 }, \ +	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ +} + +// ANSI, bottom row 1.25/1.25/1.25/6.25/1.5/1.5 +#define LAYOUT_3x2( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \ +	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501, K502,             K505,                   K509,       K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \ +	{ K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  KC_NO, K511,  K512,  K513,  KC_NO,  K515 } \ +} + +// ANSI, WKL bottom row 1.5/1.5/7/1.5/1.5, Split Backspace +#define LAYOUT_2x2( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \ +	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501,                   K505,                   K509,       K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114,   K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \ +	{ K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  KC_NO, KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  KC_NO, K511,  K512,  K513,  KC_NO,  K515 } \ +} + +// ANSI, bottom row 1.25/1.25/1.25/2.25/1.25/2.75/1/1/1 +// ANSI, bottom row 1.25/1.25/1.25/2.75/1.25/2.25/1/1/1 +#define LAYOUT_split_space( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \ +	K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501, K502, K503,       K505,       K507,       K509, K510, K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \ +	{ K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  K503,  KC_NO, K505,  KC_NO, K507,  KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ +} + + +// Expose All Keys - Split backspace - ISO Extra keys - Split space bottom row +#define LAYOUT_all( \ +	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ +	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \ +	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ +	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,       K315, \ +	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \ +	K500, K501, K502, K503,       K505,       K507,       K509, K510, K511, K512, K513,       K515  \ +) { \ +	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ +	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114,   K115 }, \ +	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ +	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO,  K315 }, \ +	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \ +	{ K500,  K501,  K502,  K503,  KC_NO, K505,  KC_NO, K507,  KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ +} diff --git a/keyboards/cannonkeys/satisfaction75/rev1/rules.mk b/keyboards/cannonkeys/satisfaction75/rev1/rules.mk new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/keyboards/cannonkeys/satisfaction75/rev1/rules.mk diff --git a/keyboards/cannonkeys/satisfaction75/rules.mk b/keyboards/cannonkeys/satisfaction75/rules.mk index 88ab459204..3e2877200e 100644 --- a/keyboards/cannonkeys/satisfaction75/rules.mk +++ b/keyboards/cannonkeys/satisfaction75/rules.mk @@ -54,4 +54,4 @@ QWIIC_ENABLE += MICRO_OLED  # RAW_ENABLE = yes  # DYNAMIC_KEYMAP_ENABLE = yes -DEFAULT_FOLDER = cannonkeys/satisfaction75 +DEFAULT_FOLDER = cannonkeys/satisfaction75/rev1 diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.c b/keyboards/cannonkeys/satisfaction75/satisfaction75.c index 1423b11b05..0e788b29b7 100644 --- a/keyboards/cannonkeys/satisfaction75/satisfaction75.c +++ b/keyboards/cannonkeys/satisfaction75/satisfaction75.c @@ -5,9 +5,10 @@  #include "ch.h"  #include "hal.h" -// #ifdef QWIIC_MICRO_OLED_ENABLE +#ifdef QWIIC_MICRO_OLED_ENABLE  #include "micro_oled.h"  #include "qwiic.h" +#endif  #include "timer.h" @@ -93,21 +94,87 @@ void raw_hid_receive( uint8_t *data, uint8_t length )  		}  		case id_get_keyboard_value:  		{ -			if ( command_data[0] == id_uptime ) -			{ -				uint32_t value = timer_read32(); -				command_data[1] = (value >> 24 ) & 0xFF; -				command_data[2] = (value >> 16 ) & 0xFF; -				command_data[3] = (value >> 8 ) & 0xFF; -				command_data[4] = value & 0xFF; -			} -			else -			{ -				*command_id = id_unhandled; -			} +      switch( command_data[0]) +      { +        case id_uptime: +        { +          uint32_t value = timer_read32(); +          command_data[1] = (value >> 24 ) & 0xFF; +          command_data[2] = (value >> 16 ) & 0xFF; +          command_data[3] = (value >> 8 ) & 0xFF; +          command_data[4] = value & 0xFF; +          break; +        } +        case id_oled_default_mode: +        { +          uint8_t default_oled = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED); +          command_data[1] = default_oled; +          break; +        } +        case id_oled_mode: +        { +          command_data[1] = oled_mode; +          break; + +        } +        case id_encoder_modes: +        { +          command_data[1] = enabled_encoder_modes; +          break; +        } +        case id_encoder_custom: +        { +          // uint8_t custom_encoder_idx = command_data[1]; +          // command_data[2] = 0x00; +          // command_data[3] = 0x00; +          // command_data[4] = 0x00; +          // command_data[5] = 0x00; +          // command_data[6] = 0x00; +          // command_data[7] = 0x00; +          break; +        } +        default: +        { +          *command_id = id_unhandled; +          break; +        } +      }  			break; -		} +    }  #ifdef DYNAMIC_KEYMAP_ENABLE +    case id_set_keyboard_value: +    { +      switch(command_data[0]){ +        case id_oled_default_mode: +        { +          eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED, command_data[1]); +          break; +        } +        case id_oled_mode: +        { +          oled_mode = command_data[1]; +          draw_ui(); +          break; +        } +        case id_encoder_modes: +        { +          enabled_encoder_modes = command_data[1]; +          eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, enabled_encoder_modes); +          break; +        } +        case id_encoder_custom: +        { +          // uint8_t custom_encoder_idx = command_data[1]; +          break; +        } +        default: +        { +          *command_id = id_unhandled; +          break; +        } +      } +      break; +    }  		case id_dynamic_keymap_get_keycode:  		{  			uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] ); @@ -243,9 +310,11 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {    queue_for_send = true;    switch (keycode) {      case OLED_TOGG: -      if (record->event.pressed) { -        oled_mode = (oled_mode + 1) % _NUM_OLED_MODES; -        draw_ui(); +      if(!clock_set_mode){ +        if (record->event.pressed) { +          oled_mode = (oled_mode + 1) % _NUM_OLED_MODES; +          draw_ui(); +        }        }        return false;      case CLOCK_SET: @@ -325,12 +394,34 @@ void encoder_update_kb(uint8_t index, bool clockwise) {    }  } +void dynamic_keymap_custom_reset(void){ +  void *p = (void*)(DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT); +	void *end = (void*)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR); +	while ( p != end ) { +		eeprom_update_byte(p, 0); +		++p; +	} +  eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, 0x1F); +} + +void save_backlight_config_to_eeprom(){ +  eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT, kb_backlight_config.raw); +} + +void load_custom_config(){ +  kb_backlight_config.raw = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT); +#ifdef DYNAMIC_KEYMAP_ENABLE +  oled_mode = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED); +  enabled_encoder_modes = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES); +#endif +} +  void eeprom_init_kb(void)  {  	// If the EEPROM has the magic, the data is good.  	// OK to load from EEPROM.  	if (eeprom_is_valid()) { -		//backlight_config_load(); +		load_custom_config();  	} else	{  		// If the EEPROM has not been saved before, or is out of date,  		// save the default values to the EEPROM. Default values @@ -341,6 +432,8 @@ void eeprom_init_kb(void)  		dynamic_keymap_reset();  		// This resets the macros in EEPROM to nothing.  		dynamic_keymap_macro_reset(); +    // Reset the custom stuff +    dynamic_keymap_custom_reset();  #endif  		// Save the magic number last, in case saving was interrupted  		eeprom_set_valid(true); @@ -367,7 +460,7 @@ void matrix_scan_kb(void) {        queue_for_send = true;      }    } - +#ifdef QWIIC_MICRO_OLED_ENABLE    if (queue_for_send && oled_mode != OLED_OFF) {      oled_sleeping = false;      read_host_led_state(); @@ -378,5 +471,6 @@ void matrix_scan_kb(void) {      send_command(DISPLAYOFF);      /* 0xAE */      oled_sleeping = true;    } +#endif  } diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.h b/keyboards/cannonkeys/satisfaction75/satisfaction75.h index 5f9a1e48ba..dfab68017f 100644 --- a/keyboards/cannonkeys/satisfaction75/satisfaction75.h +++ b/keyboards/cannonkeys/satisfaction75/satisfaction75.h @@ -2,23 +2,11 @@  #include "quantum.h" -// The first section contains all of the arguements -// The second converts the arguments into a two-dimensional array - #define LAYOUT_default( \ -	K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \ -	K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \ -	K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \ -	K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,             K315, \ -	K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K413,       K415, \ -	K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \ -) { \ -	{ K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \ -	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \ -	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \ -	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  KC_NO, KC_NO,  K315 }, \ -	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  KC_NO, K413,  KC_NO,  K415 }, \ -	{ K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \ -} +#ifdef KEYBOARD_cannonkeys_satisfaction75_prototype +    #include "prototype.h" +#else +    #include "rev1.h" +#endif  /* screen off after this many milliseconds */  #define ScreenOffInterval 60000 /* milliseconds */ @@ -39,6 +27,13 @@ enum my_keycodes {    OLED_TOGG  }; +enum s75_keyboard_value_id { +  id_encoder_modes = 0x80, +  id_oled_default_mode, +  id_encoder_custom, +  id_oled_mode +}; +  enum encoder_modes {    ENC_MODE_VOLUME,    ENC_MODE_MEDIA, @@ -114,5 +109,5 @@ void backlight_set(uint8_t level);  bool is_breathing(void);  void breathing_enable(void);  void breathing_disable(void); -// void backlight_save_to_eeprom(uint8_t level); -// uint8_t backlight_config_load(); +void load_custom_config(void); +void save_backlight_config_to_eeprom(void); diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c index 88996f829d..6776816918 100644 --- a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c +++ b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c @@ -10,6 +10,8 @@ void pre_encoder_mode_change(){      // timespec.dstflag = last_timespec.dstflag;      timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;      rtcSetTime(&RTCD1, ×pec); +  } else if (encoder_mode == ENC_MODE_BACKLIGHT){ +    save_backlight_config_to_eeprom();    }  } @@ -26,6 +28,9 @@ void post_encoder_mode_change(){  void change_encoder_mode(bool negative){    pre_encoder_mode_change(); +  if(enabled_encoder_modes == 0){ +    enabled_encoder_modes = 0x1F; +  }    do {      if(negative){        if (encoder_mode == 0){ @@ -94,12 +99,14 @@ uint16_t handle_encoder_clockwise(){        mapped_code = KC_WH_D;        break;      case ENC_MODE_BACKLIGHT: -      // mapped_code = BL_INC;        kb_backlight_config.level = kb_backlight_config.level + 1;        if(kb_backlight_config.level > BACKLIGHT_LEVELS){          kb_backlight_config.level = BACKLIGHT_LEVELS;        }        backlight_set(kb_backlight_config.level); +      if (kb_backlight_config.level != 0){ +        kb_backlight_config.enable = true; +      }        break;      case ENC_MODE_BRIGHTNESS:        mapped_code = KC_BRIGHTNESS_UP; @@ -131,6 +138,9 @@ uint16_t handle_encoder_ccw(){          kb_backlight_config.level = kb_backlight_config.level - 1;        }        backlight_set(kb_backlight_config.level); +      if (kb_backlight_config.level == 0){ +        kb_backlight_config.enable = false; +      }        break;      case ENC_MODE_BRIGHTNESS:        mapped_code = KC_BRIGHTNESS_DOWN; diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c b/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c index a92d61c568..4e22587db8 100644 --- a/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c +++ b/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c @@ -3,6 +3,7 @@  __attribute__ ((weak))  void draw_ui() { +#ifdef QWIIC_MICRO_OLED_ENABLE    clear_buffer();    last_flush = timer_read();    send_command(DISPLAYON); @@ -22,6 +23,7 @@ void draw_ui() {        send_command(DISPLAYOFF);        break;    } +#endif  }  void draw_encoder(int8_t startX, int8_t startY, bool show_legend){ diff --git a/keyboards/zeal60/zeal60_api.h b/keyboards/zeal60/zeal60_api.h index 8061146fde..048344d712 100644 --- a/keyboards/zeal60/zeal60_api.h +++ b/keyboards/zeal60/zeal60_api.h @@ -43,6 +43,7 @@ enum zeal60_command_id  enum zeal60_keyboard_value_id  { -	id_uptime = 0x01 +  id_uptime = 0x01, +  id_firmware_version  }; | 
