summaryrefslogtreecommitdiff
path: root/keyboards/cannonkeys/satisfaction75
diff options
context:
space:
mode:
authorAndrew Kannan <andrew.kannan@gmail.com>2024-02-26 17:16:00 -0500
committerGitHub <noreply@github.com>2024-02-27 09:16:00 +1100
commit490641307ab30ae10dd80fde766f5988bd154ca2 (patch)
tree66e0d722cd75b5d986abbdf61bb36e8a201ed088 /keyboards/cannonkeys/satisfaction75
parent0f701c7dbecc0c90b8e5d74ce81c2575ba0c4144 (diff)
Cleanup Satisfaction75 Firmware and add new revisions (#22082)
Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'keyboards/cannonkeys/satisfaction75')
-rw-r--r--keyboards/cannonkeys/satisfaction75/chconf.h17
-rw-r--r--keyboards/cannonkeys/satisfaction75/config.h39
-rw-r--r--keyboards/cannonkeys/satisfaction75/halconf.h17
-rw-r--r--keyboards/cannonkeys/satisfaction75/info.json43
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c18
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c18
-rw-r--r--keyboards/cannonkeys/satisfaction75/led.c256
-rw-r--r--keyboards/cannonkeys/satisfaction75/led_custom.h7
-rw-r--r--keyboards/cannonkeys/satisfaction75/mcuconf.h17
-rw-r--r--keyboards/cannonkeys/satisfaction75/prototype/info.json44
-rw-r--r--keyboards/cannonkeys/satisfaction75/prototype/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/readme.md34
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/info.json192
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/config.h3
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/keymap.c37
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/readme.md3
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/rules.mk3
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/jae/keymap.c (renamed from keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c)10
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/keymap.c23
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev1/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/info.json193
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/keymaps/default/keymap.c26
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/keymap.c25
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/readme.md29
-rw-r--r--keyboards/cannonkeys/satisfaction75/rev2/rules.mk1
-rw-r--r--keyboards/cannonkeys/satisfaction75/rules.mk22
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction75.c464
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction75.h119
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c238
-rw-r--r--keyboards/cannonkeys/satisfaction75/satisfaction_oled.c267
33 files changed, 507 insertions, 1663 deletions
diff --git a/keyboards/cannonkeys/satisfaction75/chconf.h b/keyboards/cannonkeys/satisfaction75/chconf.h
index ca4a976c27..d1b9cf32b7 100644
--- a/keyboards/cannonkeys/satisfaction75/chconf.h
+++ b/keyboards/cannonkeys/satisfaction75/chconf.h
@@ -1,18 +1,5 @@
-/* Copyright 2020 QMK
- *
- * 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/>.
- */
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* This file was auto-generated by:
diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h
index 9005b064b7..1ca72c9c7c 100644
--- a/keyboards/cannonkeys/satisfaction75/config.h
+++ b/keyboards/cannonkeys/satisfaction75/config.h
@@ -1,19 +1,5 @@
-/*
-Copyright 2015 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/>.
-*/
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -23,6 +9,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* LSE clock */
#define STM32_LSECLK 32768
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 1
+#define BACKLIGHT_PAL_MODE 1
+
// I2C config
#define I2C_DRIVER I2CD1
#define I2C1_SCL_PIN B6
@@ -53,23 +43,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// dynamic keymaps start after this.
// Custom config Usage:
// 1 for enabled encoder modes (1 byte)
-// 1 for custom backlighting controls (1 byte)
// 1 for OLED default mode (1 byte)
// 6 for 3x custom encoder settings, left, right, and press (18 bytes)
-#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 21
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
+#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 20
-/* disable print */
-//#define NO_PRINT
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
diff --git a/keyboards/cannonkeys/satisfaction75/halconf.h b/keyboards/cannonkeys/satisfaction75/halconf.h
index aed3fef0a8..3bd1495ea2 100644
--- a/keyboards/cannonkeys/satisfaction75/halconf.h
+++ b/keyboards/cannonkeys/satisfaction75/halconf.h
@@ -1,18 +1,5 @@
-/* Copyright 2020 QMK
- *
- * 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/>.
- */
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* This file was auto-generated by:
diff --git a/keyboards/cannonkeys/satisfaction75/info.json b/keyboards/cannonkeys/satisfaction75/info.json
index 60695b9ac7..4031dae57d 100644
--- a/keyboards/cannonkeys/satisfaction75/info.json
+++ b/keyboards/cannonkeys/satisfaction75/info.json
@@ -1,27 +1,28 @@
{
- "keyboard_name": "Satisfaction75",
"manufacturer": "CannonKeys",
- "url": "",
- "maintainer": "Cannon Keys",
- "usb": {
- "vid": "0xCA04",
- "pid": "0x57F5",
- "device_version": "0.0.1"
- },
- "matrix_pins": {
- "cols": ["B1", "B2", "B10", "B11", "B12", "B13", "B14", "A8", "A9", "A10", "B0", "A7", "A5", "B5", "A15", "A1"],
- "rows": ["B3", "B4", "A0", "A2", "A4", "A3"]
- },
- "diode_direction": "COL2ROW",
- "encoder": {
- "rotary": [
- {"pin_a": "B9", "pin_b": "B8", "resolution": 2}
- ]
- },
+ "keyboard_name": "Satisfaction75",
+ "maintainer": "awkannan",
"backlight": {
+ "breathing": true,
+ "breathing_period": 6,
"levels": 24,
- "breathing": true
+ "pin": "A6"
+ },
+ "bootloader": "stm32-dfu",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true
},
"processor": "STM32F072",
- "bootloader": "stm32-dfu"
-}
+ "url": "https://cannonkeys.com",
+ "usb": {
+ "vid": "0xCA04"
+ }
+} \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
index 0bdc0aa9e7..f1dc5ae8bb 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/default/keymap.c
@@ -1,19 +1,5 @@
-/*
-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/>.
-*/
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk
deleted file mode 100644
index 3357eb91c0..0000000000
--- a/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-QWIIC_ENABLE = no
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
index 47806ff8a2..61981c6521 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/keymaps/via/keymap.c
@@ -1,19 +1,5 @@
-/*
-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/>.
-*/
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
diff --git a/keyboards/cannonkeys/satisfaction75/led.c b/keyboards/cannonkeys/satisfaction75/led.c
deleted file mode 100644
index 68bfc99d2e..0000000000
--- a/keyboards/cannonkeys/satisfaction75/led.c
+++ /dev/null
@@ -1,256 +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/>.
-*/
-
-#include <hal.h>
-#include "led_custom.h"
-#include "satisfaction75.h"
-
-#define BREATHING_PERIOD 6
-
-static void breathing_callback(PWMDriver *pwmp);
-
-static PWMConfig pwmCFG = {
- 0xFFFF, /* PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- NULL, /* No Callback */
- {
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 0 */
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-static PWMConfig pwmCFG_breathing = {
- 0xFFFF, /* 10kHz PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- breathing_callback, /* Breathing Callback */
- {
- {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 0 */
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL}
- },
- 0, /* HW dependent part.*/
- 0
-};
-
-// See http://jared.geek.nz/2013/feb/linear-led-pwm
-static uint16_t cie_lightness(uint16_t v) {
- if (v <= 5243) // if below 8% of max
- return v / 9; // same as dividing by 900%
- else {
- uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
- // to get a useful result with integer division, we shift left in the expression above
- // and revert what we've done again after squaring.
- y = y * y * y >> 8;
- if (y > 0xFFFFUL) // prevent overflow
- return 0xFFFFU;
- else
- return (uint16_t) y;
- }
-}
-
-
-void backlight_init_ports(void) {
- palSetPadMode(GPIOA, 6, PAL_MODE_ALTERNATE(1));
- pwmStart(&PWMD3, &pwmCFG);
- if(kb_backlight_config.enable){
- if(kb_backlight_config.breathing){
- breathing_enable();
- } else{
- backlight_set(kb_backlight_config.level);
- }
- } else {
- backlight_set(0);
- }
-}
-
-void suspend_power_down_user(void) {
- backlight_set(0);
-}
-void suspend_wakeup_init_user(void) {
- if(kb_backlight_config.enable){
- if(kb_backlight_config.breathing){
- breathing_enable();
- } else{
- backlight_set(kb_backlight_config.level);
- }
- } else {
- backlight_set(0);
- }
-}
-
-void backlight_set(uint8_t level) {
- uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t) level / BACKLIGHT_LEVELS));
- if (level == 0) {
- // Turn backlight off
- pwmDisableChannel(&PWMD3, 0);
- } else {
- // Turn backlight on
- if(!is_breathing()){
- pwmEnableChannel(&PWMD3, 0, PWM_FRACTION_TO_WIDTH(&PWMD3,0xFFFF,duty));
- }
- }
-}
-
-
-uint8_t backlight_tick = 0;
-
-void backlight_task(void) {
-}
-
-#define BREATHING_NO_HALT 0
-#define BREATHING_HALT_OFF 1
-#define BREATHING_HALT_ON 2
-#define BREATHING_STEPS 128
-
-static uint8_t breathing_period = BREATHING_PERIOD;
-static uint8_t breathing_halt = BREATHING_NO_HALT;
-static uint16_t breathing_counter = 0;
-
-bool is_breathing(void) {
- return PWMD3.config == &pwmCFG_breathing;
-}
-
-#define breathing_min() do {breathing_counter = 0;} while (0)
-#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
-
-
-void breathing_interrupt_enable(void){
- pwmStop(&PWMD3);
- pwmStart(&PWMD3, &pwmCFG_breathing);
- chSysLockFromISR();
- pwmEnablePeriodicNotification(&PWMD3);
- pwmEnableChannelI(
- &PWMD3,
- 0,
- PWM_FRACTION_TO_WIDTH(
- &PWMD3,
- 0xFFFF,
- 0xFFFF
- )
- );
- chSysUnlockFromISR();
-}
-
-void breathing_interrupt_disable(void){
- pwmStop(&PWMD3);
- pwmStart(&PWMD3, &pwmCFG);
-}
-
-void breathing_enable(void)
-{
- breathing_counter = 0;
- breathing_halt = BREATHING_NO_HALT;
- breathing_interrupt_enable();
-}
-
-void breathing_pulse(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_min();
- else
- breathing_max();
- breathing_halt = BREATHING_HALT_ON;
- breathing_interrupt_enable();
-}
-
-void breathing_disable(void)
-{
- breathing_interrupt_disable();
- // Restore backlight level
- backlight_set(kb_backlight_config.level);
-}
-
-void breathing_self_disable(void)
-{
- if (kb_backlight_config.level == 0)
- breathing_halt = BREATHING_HALT_OFF;
- else
- breathing_halt = BREATHING_HALT_ON;
-}
-
-void breathing_toggle(void) {
- if (is_breathing()){
- breathing_disable();
- } else {
- breathing_enable();
- }
-}
-
-void breathing_period_set(uint8_t value)
-{
- if (!value)
- value = 1;
- breathing_period = value;
-}
-
-void breathing_period_default(void) {
- breathing_period_set(BREATHING_PERIOD);
-}
-
-void breathing_period_inc(void)
-{
- breathing_period_set(breathing_period+1);
-}
-
-void breathing_period_dec(void)
-{
- breathing_period_set(breathing_period-1);
-}
-
-/* To generate breathing curve in python:
- * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
- */
-static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-// Use this before the cie_lightness function.
-static inline uint16_t scale_backlight(uint16_t v) {
- return v / BACKLIGHT_LEVELS * kb_backlight_config.level;
-}
-
-static void breathing_callback(PWMDriver *pwmp)
-{
- (void)pwmp;
- uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
- // resetting after one period to prevent ugly reset at overflow.
- breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
- uint8_t index = breathing_counter / interval % BREATHING_STEPS;
-
- if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
- ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
- {
- breathing_interrupt_disable();
- }
-
- uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
-
- chSysLockFromISR();
- pwmEnableChannelI(
- &PWMD3,
- 0,
- PWM_FRACTION_TO_WIDTH(
- &PWMD3,
- 0xFFFF,
- duty
- )
- );
- chSysUnlockFromISR();
-}
diff --git a/keyboards/cannonkeys/satisfaction75/led_custom.h b/keyboards/cannonkeys/satisfaction75/led_custom.h
deleted file mode 100644
index d818b48ce9..0000000000
--- a/keyboards/cannonkeys/satisfaction75/led_custom.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-void backlight_task(void);
-void breathing_interrupt_disable(void);
-void breathing_interrupt_enable(void);
-void breathing_enable(void);
-void breathing_disable(void);
diff --git a/keyboards/cannonkeys/satisfaction75/mcuconf.h b/keyboards/cannonkeys/satisfaction75/mcuconf.h
index 0c84a1e1a8..6380181377 100644
--- a/keyboards/cannonkeys/satisfaction75/mcuconf.h
+++ b/keyboards/cannonkeys/satisfaction75/mcuconf.h
@@ -1,18 +1,5 @@
-/* Copyright 2020 QMK
- *
- * 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/>.
- */
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* This file was auto-generated by:
diff --git a/keyboards/cannonkeys/satisfaction75/prototype/info.json b/keyboards/cannonkeys/satisfaction75/prototype/info.json
index 9f932b6505..4f67754d8f 100644
--- a/keyboards/cannonkeys/satisfaction75/prototype/info.json
+++ b/keyboards/cannonkeys/satisfaction75/prototype/info.json
@@ -1,24 +1,34 @@
{
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B9", "pin_b": "B8", "resolution": 2}
+ ]
+ },
+ "matrix_pins": {
+ "cols": ["B1", "B2", "B10", "B11", "B12", "B13", "B14", "A8", "A9", "A10", "B0", "A7", "A5", "B5", "A15", "A1"],
+ "rows": ["B3", "B4", "A0", "A2", "A4", "A3"]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x57F5"
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
{"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
-
{"label": "K002", "matrix": [0, 2], "x": 1.5, "y": 0},
{"label": "K003", "matrix": [0, 3], "x": 2.5, "y": 0},
{"label": "K004", "matrix": [0, 4], "x": 3.5, "y": 0},
{"label": "K005", "matrix": [0, 5], "x": 4.5, "y": 0},
-
{"label": "K006", "matrix": [0, 6], "x": 5.75, "y": 0},
{"label": "K007", "matrix": [0, 7], "x": 6.75, "y": 0},
{"label": "K008", "matrix": [0, 8], "x": 7.75, "y": 0},
{"label": "K009", "matrix": [0, 9], "x": 8.75, "y": 0},
-
{"label": "K010", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "K011", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "K012", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "K013", "matrix": [0, 13], "x": 13, "y": 0},
-
{"label": "K100", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "K101", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "K102", "matrix": [1, 2], "x": 2, "y": 1.25},
@@ -34,9 +44,7 @@
{"label": "K112", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "K113", "matrix": [1, 13], "x": 13, "y": 1.25},
{"label": "K114", "matrix": [1, 14], "x": 14, "y": 1.25},
-
{"label": "K115", "matrix": [1, 15], "x": 15.5, "y": 1},
-
{"label": "K200", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "K201", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "K202", "matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -51,9 +59,7 @@
{"label": "K211", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "K212", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "K213", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"label": "K215", "matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"label": "K300", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "K301", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "K302", "matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -68,9 +74,7 @@
{"label": "K311", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "K312", "matrix": [3, 12], "x": 12.75, "y": 3.25},
{"label": "K313", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
-
{"label": "K315", "matrix": [3, 15], "x": 15.5, "y": 3.25},
-
{"label": "K400", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
{"label": "K401", "matrix": [4, 1], "x": 1.25, "y": 4.25},
{"label": "K402", "matrix": [4, 2], "x": 2.25, "y": 4.25},
@@ -84,11 +88,8 @@
{"label": "K410", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "K411", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "K412", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"label": "K413", "matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"label": "K415", "matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"label": "K500", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"label": "K501", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"label": "K502", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
@@ -98,7 +99,6 @@
{"label": "K509", "matrix": [5, 9], "x": 10, "y": 5.25},
{"label": "K510", "matrix": [5, 10], "x": 11, "y": 5.25},
{"label": "K511", "matrix": [5, 11], "x": 12, "y": 5.25},
-
{"label": "K512", "matrix": [5, 12], "x": 13.25, "y": 5.5},
{"label": "K513", "matrix": [5, 13], "x": 14.25, "y": 5.5},
{"label": "K515", "matrix": [5, 15], "x": 15.25, "y": 5.5}
@@ -107,22 +107,18 @@
"LAYOUT_default": {
"layout": [
{"label": "K000", "matrix": [0, 0], "x": 0, "y": 0},
-
{"label": "K002", "matrix": [0, 2], "x": 1.5, "y": 0},
{"label": "K003", "matrix": [0, 3], "x": 2.5, "y": 0},
{"label": "K004", "matrix": [0, 4], "x": 3.5, "y": 0},
{"label": "K005", "matrix": [0, 5], "x": 4.5, "y": 0},
-
{"label": "K006", "matrix": [0, 6], "x": 5.75, "y": 0},
{"label": "K007", "matrix": [0, 7], "x": 6.75, "y": 0},
{"label": "K008", "matrix": [0, 8], "x": 7.75, "y": 0},
{"label": "K009", "matrix": [0, 9], "x": 8.75, "y": 0},
-
{"label": "K010", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "K011", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "K012", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "K013", "matrix": [0, 13], "x": 13, "y": 0},
-
{"label": "K100", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "K101", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "K102", "matrix": [1, 2], "x": 2, "y": 1.25},
@@ -137,9 +133,7 @@
{"label": "K111", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "K112", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "K113", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
-
{"label": "K115", "matrix": [1, 15], "x": 15.5, "y": 1},
-
{"label": "K200", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "K201", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "K202", "matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -154,9 +148,7 @@
{"label": "K211", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "K212", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "K213", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"label": "K215", "matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"label": "K300", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "K301", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "K302", "matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -170,9 +162,7 @@
{"label": "K310", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "K311", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "K312", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
-
{"label": "K315", "matrix": [3, 15], "x": 15.5, "y": 3.25},
-
{"label": "K400", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "K401", "matrix": [4, 1], "x": 2.25, "y": 4.25},
{"label": "K402", "matrix": [4, 2], "x": 3.25, "y": 4.25},
@@ -185,11 +175,8 @@
{"label": "K409", "matrix": [4, 9], "x": 10.25, "y": 4.25},
{"label": "K410", "matrix": [4, 10], "x": 11.25, "y": 4.25},
{"label": "K411", "matrix": [4, 11], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"label": "K413", "matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"label": "K415", "matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"label": "K500", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"label": "K501", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"label": "K502", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
@@ -197,11 +184,10 @@
{"label": "K509", "matrix": [5, 9], "x": 10, "y": 5.25},
{"label": "K510", "matrix": [5, 10], "x": 11, "y": 5.25},
{"label": "K511", "matrix": [5, 11], "x": 12, "y": 5.25},
-
{"label": "K512", "matrix": [5, 12], "x": 13.25, "y": 5.5},
{"label": "K513", "matrix": [5, 13], "x": 14.25, "y": 5.5},
{"label": "K515", "matrix": [5, 15], "x": 15.25, "y": 5.5}
]
}
}
-}
+} \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/prototype/rules.mk b/keyboards/cannonkeys/satisfaction75/prototype/rules.mk
index e69de29bb2..7ff128fa69 100644
--- a/keyboards/cannonkeys/satisfaction75/prototype/rules.mk
+++ b/keyboards/cannonkeys/satisfaction75/prototype/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/readme.md b/keyboards/cannonkeys/satisfaction75/readme.md
index 361d1eb0f1..9e2891b93f 100644
--- a/keyboards/cannonkeys/satisfaction75/readme.md
+++ b/keyboards/cannonkeys/satisfaction75/readme.md
@@ -2,11 +2,39 @@
Satisfaction75 Keyboard
-Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)
-Hardware Supported: STM32F072CBT6
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: STM32F072CBT6
+
+## Revisions
+
+Please be advised that there are many revisions of Satisfaction75 PCBs.
+
+- Prototype revisions do not really exist in the wild, unless you are one of very few people who have an early pre-production Satisfaction75
+- Rev1 was the PCB sold with Round 1 and Round 2 of the Satisfaction75 keyboard group buy, as well as any extra PCBs sold before 2023.
+- Rev2 is the PCB sold with the late 2023/early 2024 Injection molded Satisfaction75, and any extra PCBs sold after that. These PCBs also have extra edge cuts to support the injection molded Satisfaction75. It was redesigned from scratch and has a little less layout support compared to Rev1.
+
+Revision 2 PCBs will have Revision 2 printed on the PCBs.
+
+Revisions _are_ backwards compatible, so you can use a Rev2 PCB in a board that originally had a Rev1 PCB in it. They are _not_ forwards compatible - Rev 1 PCBs will not work in the injection molded Satisfaction75.
+
+Change the below commands to reflect the revision you need!
+
+## Building and Flashing
Make example for this keyboard (after setting up your build environment):
- make cannonkeys/Satisfaction75:default
+ make cannonkeys/satisfaction75/rev1:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/satisfaction75/rev1:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Toggle the switch on the back of the pcb to "1" and briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/info.json b/keyboards/cannonkeys/satisfaction75/rev1/info.json
index cc4ad80d42..d4a6b4423c 100644
--- a/keyboards/cannonkeys/satisfaction75/rev1/info.json
+++ b/keyboards/cannonkeys/satisfaction75/rev1/info.json
@@ -1,24 +1,34 @@
{
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B9", "pin_b": "B8", "resolution": 2}
+ ]
+ },
+ "matrix_pins": {
+ "cols": ["B1", "B2", "B10", "B11", "B12", "B13", "B14", "A8", "A9", "A10", "B0", "A7", "A5", "B5", "A15", "A1"],
+ "rows": ["B3", "B4", "A0", "A2", "A4", "A3"]
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x57F5"
+ },
"layouts": {
- "LAYOUT_default": {
+ "LAYOUT_2x2": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -32,10 +42,9 @@
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
-
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [1, 14], "x": 14, "y": 1.25},
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -50,9 +59,7 @@
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -66,9 +73,7 @@
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
-
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
@@ -81,43 +86,33 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
- {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
- {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
- {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 9], "x": 10, "y": 5.25},
- {"matrix": [5, 10], "x": 11, "y": 5.25},
- {"matrix": [5, 11], "x": 12, "y": 5.25},
-
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 5], "x": 3, "y": 5.25, "w": 7},
+ {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.25, "w": 1.5},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
},
- "LAYOUT_iso": {
+ "LAYOUT_3x2": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -132,9 +127,7 @@
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
-
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -148,9 +141,8 @@
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
-
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -163,13 +155,9 @@
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
- {"matrix": [3, 12], "x": 12.75, "y": 3.25},
- {"matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
-
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
- {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
@@ -181,43 +169,34 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 9], "x": 10, "y": 5.25},
- {"matrix": [5, 10], "x": 11, "y": 5.25},
- {"matrix": [5, 11], "x": 12, "y": 5.25},
-
+ {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.25, "w": 1.5},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
},
- "LAYOUT_3x2": {
+ "LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -231,10 +210,9 @@
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
-
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [1, 14], "x": 14, "y": 1.25},
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -249,9 +227,7 @@
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -264,11 +240,11 @@
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
- {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
-
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
@@ -280,42 +256,37 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
- {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.5},
- {"matrix": [5, 11], "x": 11.5, "y": 5.25, "w": 1.5},
-
+ {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 2.25},
+ {"matrix": [5, 5], "x": 6, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 7], "x": 7.25, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 9], "x": 10, "y": 5.25},
+ {"matrix": [5, 10], "x": 11, "y": 5.25},
+ {"matrix": [5, 11], "x": 12, "y": 5.25},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
},
- "LAYOUT_2x2": {
+ "LAYOUT_default": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -329,11 +300,8 @@
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 13, "y": 1.25},
- {"matrix": [1, 14], "x": 14, "y": 1.25},
-
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -348,9 +316,7 @@
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -364,9 +330,7 @@
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
{"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
-
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
{"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
@@ -379,41 +343,35 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
- {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"matrix": [5, 1], "x": 1.5, "y": 5.25, "w": 1.5},
- {"matrix": [5, 5], "x": 3, "y": 5.25, "w": 7},
- {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.5},
- {"matrix": [5, 11], "x": 11.5, "y": 5.25, "w": 1.5},
-
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.25},
+ {"matrix": [5, 10], "x": 11, "y": 5.25},
+ {"matrix": [5, 11], "x": 12, "y": 5.25},
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
},
- "LAYOUT_split_space": {
+ "LAYOUT_iso": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -428,9 +386,7 @@
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
{"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
-
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -444,10 +400,7 @@
{"matrix": [2, 10], "x": 10.5, "y": 2.25},
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
- {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -460,11 +413,11 @@
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
- {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
-
+ {"matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
@@ -476,45 +429,35 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
- {"matrix": [5, 3], "x": 3.75, "y": 5.25, "w": 2.25},
- {"matrix": [5, 5], "x": 6, "y": 5.25, "w": 1.25},
- {"matrix": [5, 7], "x": 7.25, "y": 5.25, "w": 2.75},
+ {"matrix": [5, 5], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [5, 9], "x": 10, "y": 5.25},
{"matrix": [5, 10], "x": 11, "y": 5.25},
{"matrix": [5, 11], "x": 12, "y": 5.25},
-
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
},
- "LAYOUT_all": {
+ "LAYOUT_split_space": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
-
{"matrix": [0, 2], "x": 1.5, "y": 0},
{"matrix": [0, 3], "x": 2.5, "y": 0},
{"matrix": [0, 4], "x": 3.5, "y": 0},
{"matrix": [0, 5], "x": 4.5, "y": 0},
-
{"matrix": [0, 6], "x": 5.75, "y": 0},
{"matrix": [0, 7], "x": 6.75, "y": 0},
{"matrix": [0, 8], "x": 7.75, "y": 0},
{"matrix": [0, 9], "x": 8.75, "y": 0},
-
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1.25},
{"matrix": [1, 1], "x": 1, "y": 1.25},
{"matrix": [1, 2], "x": 2, "y": 1.25},
@@ -528,11 +471,8 @@
{"matrix": [1, 10], "x": 10, "y": 1.25},
{"matrix": [1, 11], "x": 11, "y": 1.25},
{"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 13, "y": 1.25},
- {"matrix": [1, 14], "x": 14, "y": 1.25},
-
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 15], "x": 15.5, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 2.25},
{"matrix": [2, 2], "x": 2.5, "y": 2.25},
@@ -547,9 +487,7 @@
{"matrix": [2, 11], "x": 11.5, "y": 2.25},
{"matrix": [2, 12], "x": 12.5, "y": 2.25},
{"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
-
{"matrix": [2, 15], "x": 15.5, "y": 2.25},
-
{"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 3.25},
{"matrix": [3, 2], "x": 2.75, "y": 3.25},
@@ -562,13 +500,9 @@
{"matrix": [3, 9], "x": 9.75, "y": 3.25},
{"matrix": [3, 10], "x": 10.75, "y": 3.25},
{"matrix": [3, 11], "x": 11.75, "y": 3.25},
- {"matrix": [3, 12], "x": 12.75, "y": 3.25},
- {"matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
-
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"matrix": [3, 15], "x": 15.5, "y": 3.25},
-
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
- {"matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 4.25},
{"matrix": [4, 3], "x": 3.25, "y": 4.25},
{"matrix": [4, 4], "x": 4.25, "y": 4.25},
@@ -580,11 +514,8 @@
{"matrix": [4, 10], "x": 10.25, "y": 4.25},
{"matrix": [4, 11], "x": 11.25, "y": 4.25},
{"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
-
{"matrix": [4, 13], "x": 14.25, "y": 4.5},
-
{"matrix": [4, 15], "x": 15.5, "y": 4.25},
-
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
@@ -594,11 +525,10 @@
{"matrix": [5, 9], "x": 10, "y": 5.25},
{"matrix": [5, 10], "x": 11, "y": 5.25},
{"matrix": [5, 11], "x": 12, "y": 5.25},
-
{"matrix": [5, 12], "x": 13.25, "y": 5.5},
{"matrix": [5, 13], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
}
}
-}
+} \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/config.h b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/config.h
new file mode 100644
index 0000000000..4af97ded2b
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define ENCODER_RESOLUTION 2
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/keymap.c b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/keymap.c
new file mode 100644
index 0000000000..256cdecd6a
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2019 Boy_314
+
+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_2x2(
+ 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_NO, 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_HOME,
+ 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_ENTER, KC_END,
+ 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_UP, KC_DEL,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_2x2(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ NK_TOGG, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, _______, OLED_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, QK_BOOT, CLOCK_SET,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/readme.md b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/readme.md
new file mode 100644
index 0000000000..65984873c4
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/readme.md
@@ -0,0 +1,3 @@
+# Boy_314's Satisfaction75 Layout
+
+This is Boy_314's Satisfaction75 Layout. It can be used on VIA. It features a QWERTY layout on the base, along with missing TKL keys on layer 1. Right side 3 keys from top down are: Home, End, Delete. The encoder resolution has been reduced from the default of 4 down to 2 so that it no longer needs to click twice, but now only once, before triggering an action.
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/rules.mk b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/rules.mk
new file mode 100644
index 0000000000..6f45dc73ed
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/boy_314/rules.mk
@@ -0,0 +1,3 @@
+# rules.mk overrides to enable VIA
+
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/jae/keymap.c
index c648333c3d..733ba8cd67 100644
--- a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/jae/keymap.c
@@ -17,18 +17,18 @@ 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] = {
+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_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_PGUP,
+ 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_PGDN,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
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,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, OLED_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/keymap.c b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/keymap.c
new file mode 100644
index 0000000000..8b05d53fb7
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM 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/rev1/keymaps/tester/rules.mk b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/rules.mk
new file mode 100644
index 0000000000..517f469b6d
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev1/keymaps/tester/rules.mk
@@ -0,0 +1 @@
+OLED_ENABLE = no
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/rules.mk b/keyboards/cannonkeys/satisfaction75/rev1/rules.mk
index e69de29bb2..7ff128fa69 100644
--- a/keyboards/cannonkeys/satisfaction75/rev1/rules.mk
+++ b/keyboards/cannonkeys/satisfaction75/rev1/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/info.json b/keyboards/cannonkeys/satisfaction75/rev2/info.json
new file mode 100644
index 0000000000..e8ddb90c89
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/info.json
@@ -0,0 +1,193 @@
+{
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B9", "pin_b": "B8"}
+ ]
+ },
+ "indicators": {
+ "caps_lock": "B14",
+ "on_state": 0
+ },
+ "matrix_pins": {
+ "cols": ["A10", "A9", "A8", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A5", "A4", "A3", "A2", "B3"],
+ "rows": ["A13", "A14", "A15", "B4", "B5", "C13"]
+ },
+ "usb": {
+ "device_version": "0.0.2",
+ "pid": "0x001A"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 1.5, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 2.5, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 3.5, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 4.5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 5.75, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 6.75, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 7.75, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 8.75, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "!", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "@", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "#", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "$", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "%", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "^", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "&", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "*", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "(", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": ")", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "_", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "+", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Bksp", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Del", "matrix": [0, 14], "x": 14, "y": 1.25},
+ {"label": "EncPress", "matrix": [1, 14], "x": 15.5, "y": 0.75},
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "Del", "matrix": [2, 14], "x": 15.5, "y": 2.25},
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"label": "PgUp", "matrix": [3, 14], "x": 15.5, "y": 3.25},
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Up", "matrix": [4, 13], "x": 14.25, "y": 4.5},
+ {"label": "PgDn", "matrix": [4, 14], "x": 15.5, "y": 4.25},
+ {"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"label": "Win", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"label": "Alt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"label": "Alt", "matrix": [5, 9], "x": 10, "y": 5.25},
+ {"label": "Fn", "matrix": [5, 10], "x": 11, "y": 5.25},
+ {"label": "Ctrl", "matrix": [5, 11], "x": 12, "y": 5.25},
+ {"label": "Left", "matrix": [5, 12], "x": 13.25, "y": 5.5},
+ {"label": "Down", "matrix": [5, 13], "x": 14.25, "y": 5.5},
+ {"label": "Right", "matrix": [5, 14], "x": 15.25, "y": 5.5}
+ ]
+ },
+ "LAYOUT_iso_split_bs_7u": {
+ "layout": [
+ {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "F1", "matrix": [0, 2], "x": 1.5, "y": 0},
+ {"label": "F2", "matrix": [0, 3], "x": 2.5, "y": 0},
+ {"label": "F3", "matrix": [0, 4], "x": 3.5, "y": 0},
+ {"label": "F4", "matrix": [0, 5], "x": 4.5, "y": 0},
+ {"label": "F5", "matrix": [0, 6], "x": 5.75, "y": 0},
+ {"label": "F6", "matrix": [0, 7], "x": 6.75, "y": 0},
+ {"label": "F7", "matrix": [0, 8], "x": 7.75, "y": 0},
+ {"label": "F8", "matrix": [0, 9], "x": 8.75, "y": 0},
+ {"label": "F9", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "F10", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "F11", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "F12", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "~", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "!", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "@", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "#", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "$", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "%", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "^", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "&", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "*", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "(", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": ")", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "_", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "+", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "Bksp", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "Del", "matrix": [0, 14], "x": 14, "y": 1.25},
+ {"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [3, 13], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"label": "Del", "matrix": [2, 14], "x": 15.5, "y": 2.25},
+ {"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": ":", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [2, 13], "x": 12.75, "y": 3.25},
+ {"label": "PgUp", "matrix": [3, 14], "x": 15.5, "y": 3.25},
+ {"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": ">", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"label": "Up", "matrix": [4, 13], "x": 14.25, "y": 4.5},
+ {"label": "PgDn", "matrix": [4, 14], "x": 15.5, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 6], "x": 3, "y": 5.25, "w": 7},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 11], "x": 11.5, "y": 5.25, "w": 1.5},
+ {"label": "Left", "matrix": [5, 12], "x": 13.25, "y": 5.5},
+ {"label": "Down", "matrix": [5, 13], "x": 14.25, "y": 5.5},
+ {"label": "Right", "matrix": [5, 14], "x": 15.25, "y": 5.5}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/keymaps/default/keymap.c b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/default/keymap.c
new file mode 100644
index 0000000000..bce6632706
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+#include "satisfaction_keycodes.h"
+
+
+const uint16_t PROGMEM 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_ENTER, KC_PGUP,
+ KC_LSFT, KC_NUBS, 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_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/keymap.c b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/keymap.c
new file mode 100644
index 0000000000..a0119fc0cd
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Andrew Kannan (@awkannan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+
+#include QMK_KEYBOARD_H
+#include "satisfaction_keycodes.h"
+
+const uint16_t PROGMEM 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_ENTER, KC_PGUP,
+ KC_LSFT, KC_NUBS, 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_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/rules.mk b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/readme.md b/keyboards/cannonkeys/satisfaction75/rev2/readme.md
new file mode 100644
index 0000000000..ac393283e0
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/readme.md
@@ -0,0 +1,29 @@
+# Satisfaction75 - Revision 2
+
+A new revision of the Satisfaction75 PCB.
+Layout support has been streamlined.
+
+This PCB was released in late 2023/2024. If you have a Satisfaction75 PCB from before that time, please use the rev1 satisfaction75 PCB.
+
+The revision 2 of the PCB also has "Revision 2" printed on it.
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: STM32F072CBT6
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/satisfaction75/rev2:default
+
+Flashing example for this keyboard:
+
+ make cannonkeys/satisfaction75/rev2:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Toggle the switch on the back of the pcb to "1" and briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cannonkeys/satisfaction75/rev2/rules.mk b/keyboards/cannonkeys/satisfaction75/rev2/rules.mk
new file mode 100644
index 0000000000..7ff128fa69
--- /dev/null
+++ b/keyboards/cannonkeys/satisfaction75/rev2/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/rules.mk b/keyboards/cannonkeys/satisfaction75/rules.mk
index 8cee2da595..c92469d1bd 100644
--- a/keyboards/cannonkeys/satisfaction75/rules.mk
+++ b/keyboards/cannonkeys/satisfaction75/rules.mk
@@ -1,21 +1,9 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
-SRC += led.c \
- satisfaction_encoder.c \
- satisfaction_oled.c
+VPATH += keyboards/cannonkeys/lib/satisfaction75
+SRC += satisfaction_encoder.c \
+ satisfaction_oled.c \
+ satisfaction_core.c
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-ENCODER_ENABLE = yes
-OLED_ENABLE = yes
-#BACKLIGHT_ENABLE = yes
-
-DEFAULT_FOLDER = cannonkeys/satisfaction75/rev1
+DEFAULT_FOLDER = cannonkeys/satisfaction75/rev1 \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.c b/keyboards/cannonkeys/satisfaction75/satisfaction75.c
deleted file mode 100644
index 29fb6e7619..0000000000
--- a/keyboards/cannonkeys/satisfaction75/satisfaction75.c
+++ /dev/null
@@ -1,464 +0,0 @@
-#include "satisfaction75.h"
-#include "print.h"
-#include "debug.h"
-
-#include <ch.h>
-#include <hal.h>
-
-#include "timer.h"
-
-#include "raw_hid.h"
-#include "dynamic_keymap.h"
-#include "eeprom.h"
-#include "version.h" // for QMK_BUILDDATE used in EEPROM magic
-
-/* Artificial delay added to get media keys to work in the encoder*/
-#define MEDIA_KEY_DELAY 10
-
-volatile uint8_t led_numlock = false;
-volatile uint8_t led_capslock = false;
-volatile uint8_t led_scrolllock = false;
-
-uint8_t layer;
-
-bool clock_set_mode = false;
-uint8_t oled_mode = OLED_DEFAULT;
-bool oled_repaint_requested = false;
-bool oled_wakeup_requested = false;
-uint32_t oled_sleep_timer;
-
-uint8_t encoder_value = 32;
-uint8_t encoder_mode = ENC_MODE_VOLUME;
-uint8_t enabled_encoder_modes = 0x1F;
-
-RTCDateTime last_timespec;
-uint16_t last_minute = 0;
-
-uint8_t time_config_idx = 0;
-int8_t hour_config = 0;
-int16_t minute_config = 0;
-int8_t year_config = 0;
-int8_t month_config = 0;
-int8_t day_config = 0;
-uint8_t previous_encoder_mode = 0;
-
-backlight_config_t kb_backlight_config = {
- .enable = true,
- .breathing = true,
- .level = BACKLIGHT_LEVELS
-};
-
-void board_init(void) {
- SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
- SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_SPI2_DMA_RMP);
-}
-
-#ifdef VIA_ENABLE
-
-void backlight_get_value( uint8_t *data )
-{
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
- switch (*value_id)
- {
- case id_qmk_backlight_brightness:
- {
- // level / BACKLIGHT_LEVELS * 255
- value_data[0] = ((uint16_t)kb_backlight_config.level) * 255 / BACKLIGHT_LEVELS;
- break;
- }
- case id_qmk_backlight_effect:
- {
- value_data[0] = kb_backlight_config.breathing ? 1 : 0;
- break;
- }
- }
-}
-
-void backlight_set_value( uint8_t *data )
-{
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
- switch (*value_id)
- {
- case id_qmk_backlight_brightness:
- {
- // level / 255 * BACKLIGHT_LEVELS
- kb_backlight_config.level = ((uint16_t)value_data[0]) * BACKLIGHT_LEVELS / 255;
- backlight_set(kb_backlight_config.level);
- break;
- }
- case id_qmk_backlight_effect:
- {
- if ( value_data[0] == 0 ) {
- kb_backlight_config.breathing = false;
- breathing_disable();
- } else {
- kb_backlight_config.breathing = true;
- breathing_enable();
- }
- break;
- }
- }
-}
-
-void custom_set_value(uint8_t *data) {
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
-
- switch ( *value_id ) {
- case id_oled_default_mode:
- {
- eeprom_update_byte((uint8_t*)EEPROM_DEFAULT_OLED, value_data[0]);
- break;
- }
- case id_oled_mode:
- {
- oled_mode = value_data[0];
- oled_request_wakeup();
- break;
- }
- case id_encoder_modes:
- {
- uint8_t index = value_data[0];
- uint8_t enable = value_data[1];
- enabled_encoder_modes = (enabled_encoder_modes & ~(1<<index)) | (enable<<index);
- eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, enabled_encoder_modes);
- break;
- }
- case id_encoder_custom:
- {
- uint8_t custom_encoder_idx = value_data[0];
- uint8_t encoder_behavior = value_data[1];
- uint16_t keycode = (value_data[2] << 8) | value_data[3];
- set_custom_encoder_config(custom_encoder_idx, encoder_behavior, keycode);
- break;
- }
- }
-}
-
-void custom_get_value(uint8_t *data) {
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
-
- switch ( *value_id ) {
- case id_oled_default_mode:
- {
- uint8_t default_oled = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
- value_data[0] = default_oled;
- break;
- }
- case id_oled_mode:
- {
- value_data[0] = oled_mode;
- break;
- }
- case id_encoder_modes:
- {
- uint8_t index = value_data[0];
- value_data[1] = (enabled_encoder_modes & (1<<index)) ? 1 : 0;
- break;
- }
- case id_encoder_custom:
- {
- uint8_t custom_encoder_idx = value_data[0];
- uint8_t encoder_behavior = value_data[1];
- uint16_t keycode = retrieve_custom_encoder_config(custom_encoder_idx, encoder_behavior);
- value_data[2] = keycode >> 8;
- value_data[3] = keycode & 0xFF;
- break;
- }
- }
-}
-
-// TODO
-// Refactor so this keyboard uses QMK Core backlight code,
-// then change this to via_custom_value_command_kb() so it
-// only handles the custom values not the backlight
-// (i.e. use QMK Core default handler for backlight values).
-//
-void via_custom_value_command(uint8_t *data, uint8_t length) {
- uint8_t *command_id = &(data[0]);
- uint8_t *channel_id = &(data[1]);
- uint8_t *value_id_and_data = &(data[2]);
-
- if ( *channel_id == id_qmk_backlight_channel ) {
- switch ( *command_id )
- {
- case id_custom_set_value:
- {
- backlight_set_value(value_id_and_data);
- break;
- }
- case id_custom_get_value:
- {
- backlight_get_value(value_id_and_data);
- break;
- }
- case id_custom_save:
- {
- backlight_config_save();
- break;
- }
- default:
- {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
- } else if ( *channel_id == id_custom_channel ) {
- switch ( *command_id )
- {
- case id_custom_set_value:
- {
- custom_set_value(value_id_and_data);
- break;
- }
- case id_custom_get_value:
- {
- custom_get_value(value_id_and_data);
- break;
- }
- case id_custom_save:
- {
- // values are saved in custom_set_value()
- break;
- }
- default:
- {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
- return;
- }
-
- *command_id = id_unhandled;
-
- // DO NOT call raw_hid_send(data,length) here, let caller do this
-}
-#endif
-
-
-void read_host_led_state(void) {
- led_t led_state = host_keyboard_led_state();
- if (led_state.num_lock) {
- if (led_numlock == false){
- led_numlock = true;}
- } else {
- if (led_numlock == true){
- led_numlock = false;}
- }
- if (led_state.caps_lock) {
- if (led_capslock == false){
- led_capslock = true;}
- } else {
- if (led_capslock == true){
- led_capslock = false;}
- }
- if (led_state.scroll_lock) {
- if (led_scrolllock == false){
- led_scrolllock = true;}
- } else {
- if (led_scrolllock == true){
- led_scrolllock = false;}
- }
-}
-
-layer_state_t layer_state_set_kb(layer_state_t state) {
- state = layer_state_set_user(state);
- layer = get_highest_layer(state);
- oled_request_wakeup();
- return state;
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- oled_request_wakeup();
- switch (keycode) {
- case OLED_TOGG:
- if(!clock_set_mode){
- if (record->event.pressed) {
- oled_mode = (oled_mode + 1) % _NUM_OLED_MODES;
- }
- }
- return false;
- case CLOCK_SET:
- if (record->event.pressed) {
- if(clock_set_mode){
- pre_encoder_mode_change();
- clock_set_mode = false;
- encoder_mode = previous_encoder_mode;
- post_encoder_mode_change();
-
- }else{
- previous_encoder_mode = encoder_mode;
- pre_encoder_mode_change();
- clock_set_mode = true;
- encoder_mode = ENC_MODE_CLOCK_SET;
- post_encoder_mode_change();
- }
- }
- return false;
- case ENC_PRESS:
- if (record->event.pressed) {
- uint16_t mapped_code = handle_encoder_press();
- uint16_t held_keycode_timer = timer_read();
- if(mapped_code != 0){
- register_code16(mapped_code);
- while (timer_elapsed(held_keycode_timer) < MEDIA_KEY_DELAY){ /* no-op */ }
- unregister_code16(mapped_code);
- }
- } else {
- // Do something else when release
- }
- return false;
- default:
- break;
- }
-
- return process_record_user(keycode, record);
-}
-
-
-bool encoder_update_kb(uint8_t index, bool clockwise) {
- if (!encoder_update_user(index, clockwise)) return false;
- oled_request_wakeup();
- encoder_value = (encoder_value + (clockwise ? 1 : -1)) % 64;
- if (index == 0) {
- if (layer == 0){
- uint16_t mapped_code = 0;
- if (clockwise) {
- mapped_code = handle_encoder_clockwise();
- } else {
- mapped_code = handle_encoder_ccw();
- }
- uint16_t held_keycode_timer = timer_read();
- if(mapped_code != 0){
- register_code16(mapped_code);
- while (timer_elapsed(held_keycode_timer) < MEDIA_KEY_DELAY){ /* no-op */ }
- unregister_code16(mapped_code);
- }
- } else {
- if(clockwise){
- change_encoder_mode(false);
- } else {
- change_encoder_mode(true);
- }
- }
- }
- return true;
-}
-
-void custom_config_reset(void){
- void *p = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR);
- void *end = (void*)(VIA_EEPROM_CUSTOM_CONFIG_ADDR+VIA_EEPROM_CUSTOM_CONFIG_SIZE);
- while ( p != end ) {
- eeprom_update_byte(p, 0);
- ++p;
- }
- eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, 0x1F);
-}
-
-void backlight_config_save(void){
- eeprom_update_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
-}
-
-void custom_config_load(void){
- kb_backlight_config.raw = eeprom_read_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT);
-#ifdef DYNAMIC_KEYMAP_ENABLE
- oled_mode = eeprom_read_byte((uint8_t*)EEPROM_DEFAULT_OLED);
- enabled_encoder_modes = eeprom_read_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES);
-#endif
-}
-
-// Called from via_init() if VIA_ENABLE
-// Called from matrix_init_kb() if not VIA_ENABLE
-void via_init_kb(void)
-{
- // This checks both an EEPROM reset (from bootmagic lite, keycodes)
- // and also firmware build date (from via_eeprom_is_valid())
- if (eeconfig_is_enabled()) {
- custom_config_load();
- } else {
-#ifdef DYNAMIC_KEYMAP_ENABLE
- // Reset the custom stuff
- custom_config_reset();
-#endif
- // DO NOT set EEPROM valid here, let caller do this
- }
-}
-
-void matrix_init_kb(void)
-{
-#ifndef VIA_ENABLE
- via_init_kb();
- via_eeprom_set_valid(true);
-#endif // VIA_ENABLE
-
- rtcGetTime(&RTCD1, &last_timespec);
- backlight_init_ports();
- matrix_init_user();
- oled_request_wakeup();
-}
-
-
-void housekeeping_task_kb(void) {
- rtcGetTime(&RTCD1, &last_timespec);
- uint16_t minutes_since_midnight = last_timespec.millisecond / 1000 / 60;
-
- if (minutes_since_midnight != last_minute){
- last_minute = minutes_since_midnight;
- oled_request_repaint();
- }
-}
-
-//
-// In the case of VIA being disabled, we still need to check if
-// keyboard level EEPROM memory is valid before loading.
-// Thus these are copies of the same functions in VIA, since
-// the backlight settings reuse VIA's EEPROM magic/version,
-// and the ones in via.c won't be compiled in.
-//
-// Yes, this is sub-optimal, and is only here for completeness
-// (i.e. catering to the 1% of people that want wilba.tech LED bling
-// AND want persistent settings BUT DON'T want to use dynamic keymaps/VIA).
-//
-#ifndef VIA_ENABLE
-
-bool via_eeprom_is_valid(void)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- return (eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0 ) == magic0 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1 ) == magic1 &&
- eeprom_read_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2 ) == magic2 );
-}
-
-// Sets VIA/keyboard level usage of EEPROM to valid/invalid
-// Keyboard level code (eg. via_init_kb()) should not call this
-void via_eeprom_set_valid(bool valid)
-{
- char *p = QMK_BUILDDATE; // e.g. "2019-11-05-11:29:54"
- uint8_t magic0 = ( ( p[2] & 0x0F ) << 4 ) | ( p[3] & 0x0F );
- uint8_t magic1 = ( ( p[5] & 0x0F ) << 4 ) | ( p[6] & 0x0F );
- uint8_t magic2 = ( ( p[8] & 0x0F ) << 4 ) | ( p[9] & 0x0F );
-
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+0, valid ? magic0 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+1, valid ? magic1 : 0xFF);
- eeprom_update_byte( (void*)VIA_EEPROM_MAGIC_ADDR+2, valid ? magic2 : 0xFF);
-}
-
-void via_eeprom_reset(void)
-{
- // Set the VIA specific EEPROM state as invalid.
- via_eeprom_set_valid(false);
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
-}
-
-#endif // VIA_ENABLE
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction75.h b/keyboards/cannonkeys/satisfaction75/satisfaction75.h
index 157eff902e..d4fc7aca87 100644
--- a/keyboards/cannonkeys/satisfaction75/satisfaction75.h
+++ b/keyboards/cannonkeys/satisfaction75/satisfaction75.h
@@ -1,117 +1,6 @@
-#pragma once
-
-#include "quantum.h"
-
-#include "via.h" // only for EEPROM address
-#define EEPROM_ENABLED_ENCODER_MODES (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
-#define EEPROM_CUSTOM_BACKLIGHT (VIA_EEPROM_CUSTOM_CONFIG_ADDR+1)
-#define EEPROM_DEFAULT_OLED (VIA_EEPROM_CUSTOM_CONFIG_ADDR+2)
-#define EEPROM_CUSTOM_ENCODER (VIA_EEPROM_CUSTOM_CONFIG_ADDR+3)
-
-typedef union {
- uint8_t raw;
- struct {
- bool enable :1;
- bool breathing : 1;
- uint8_t level :6;
- };
-} backlight_config_t;
-
-// Start these at the USER code range in VIA
-enum my_keycodes {
- ENC_PRESS = QK_KB_0,
- CLOCK_SET,
- OLED_TOGG
-};
-
-enum s75_custom_value_id {
- id_encoder_modes = 1,
- id_oled_default_mode,
- id_encoder_custom,
- id_oled_mode
-};
-
-enum encoder_modes {
- ENC_MODE_VOLUME,
- ENC_MODE_MEDIA,
- ENC_MODE_SCROLL,
- ENC_MODE_BRIGHTNESS,
- ENC_MODE_BACKLIGHT,
- ENC_MODE_CUSTOM0,
- ENC_MODE_CUSTOM1,
- ENC_MODE_CUSTOM2,
- _NUM_ENCODER_MODES,
- ENC_MODE_CLOCK_SET // This shouldn't be included in the default modes, so we put it after NUM_ENCODER_MODES
-};
-
-enum custom_encoder_behavior {
- ENC_CUSTOM_CW = 0,
- ENC_CUSTOM_CCW,
- ENC_CUSTOM_PRESS
-};
-
-enum oled_modes {
- OLED_DEFAULT,
- OLED_TIME,
- OLED_OFF,
- _NUM_OLED_MODES
-};
-
+// Copyright 2023 Andrew Kannan
+// SPDX-License-Identifier: GPL-2.0-or-later
-// Keyboard Information
-extern volatile uint8_t led_numlock;
-extern volatile uint8_t led_capslock;
-extern volatile uint8_t led_scrolllock;
-extern uint8_t layer;
-
-// OLED Behavior
-extern uint8_t oled_mode;
-extern bool oled_repaint_requested;
-extern bool oled_wakeup_requested;
-extern uint32_t oled_sleep_timer;
-
-// Encoder Behavior
-extern uint8_t encoder_value;
-extern uint8_t encoder_mode;
-extern uint8_t enabled_encoder_modes;
-
-// RTC
-extern RTCDateTime last_timespec;
-extern uint16_t last_minute;
-
-// RTC Configuration
-extern bool clock_set_mode;
-extern uint8_t time_config_idx;
-extern int8_t hour_config;
-extern int16_t minute_config;
-extern int8_t year_config;
-extern int8_t month_config;
-extern int8_t day_config;
-extern uint8_t previous_encoder_mode;
-
-// Backlighting
-extern backlight_config_t kb_backlight_config;
-extern bool kb_backlight_breathing;
-
-void pre_encoder_mode_change(void);
-void post_encoder_mode_change(void);
-void change_encoder_mode(bool negative);
-uint16_t handle_encoder_clockwise(void);
-uint16_t handle_encoder_ccw(void);
-uint16_t handle_encoder_press(void);
-uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior);
-void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code);
-
-void update_time_config(int8_t increment);
-
-void oled_request_wakeup(void);
-void oled_request_repaint(void);
-bool oled_task_needs_to_repaint(void);
+#pragma once
-void backlight_init_ports(void);
-void backlight_set(uint8_t level);
-bool is_breathing(void);
-void breathing_enable(void);
-void breathing_disable(void);
-void custom_config_load(void);
-void backlight_config_save(void);
+#include "satisfaction_keycodes.h" \ No newline at end of file
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c b/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
deleted file mode 100644
index c8bb999df4..0000000000
--- a/keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
+++ /dev/null
@@ -1,238 +0,0 @@
-#include "satisfaction75.h"
-#include "eeprom.h"
-
-void pre_encoder_mode_change(void){
- if(encoder_mode == ENC_MODE_CLOCK_SET){
- RTCDateTime timespec;
- timespec.year = year_config;
- timespec.month = month_config;
- timespec.day = day_config;
- // timespec.dayofweek = last_timespec.dayofweek;
- // timespec.dstflag = last_timespec.dstflag;
- timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;
- rtcSetTime(&RTCD1, &timespec);
- } else if (encoder_mode == ENC_MODE_BACKLIGHT){
- backlight_config_save();
- }
-}
-
-void post_encoder_mode_change(void){
- if(encoder_mode == ENC_MODE_CLOCK_SET){
- hour_config = (last_minute / 60);
- minute_config = last_minute % 60;
- year_config = last_timespec.year;
- month_config = last_timespec.month;
- day_config = last_timespec.day;
- time_config_idx = 0;
- }
-}
-
-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){
- encoder_mode = _NUM_ENCODER_MODES - 1;
- } else{
- encoder_mode = encoder_mode - 1;
- }
- } else {
- encoder_mode = (encoder_mode + 1) % _NUM_ENCODER_MODES;
- }
- } while(((1 << encoder_mode) & enabled_encoder_modes) == 0);
- post_encoder_mode_change();
-}
-
-void update_time_config(int8_t increment){
- uint8_t day_limit = 31;
- uint16_t adjusted_year = 1980 + year_config;
- switch(time_config_idx){
- case 0: // hour
- default:
- hour_config = (hour_config + increment) % 24;
- if (hour_config < 0){
- hour_config += 24;
- }
- break;
- case 1: // minute
- minute_config = (minute_config + increment) % 60;
- if (minute_config < 0){
- minute_config += 60;
- }
- break;
- case 2: // year
- year_config += increment;
- break;
- case 3: // month
- month_config = (month_config % 12) + increment;
- if (month_config <= 0){
- month_config += 12;
- }
- break;
- case 4: //day
- if (month_config == 9 || month_config == 4 || month_config == 6 || month_config == 11){
- day_limit = 30;
- } else if(month_config == 2){
- day_limit = adjusted_year % 4 == 0 && !(adjusted_year % 100 == 0 && adjusted_year % 400 != 0) ? 29 : 28;
- }
- day_config = (day_config % day_limit) + increment;
- if(day_config <= 0){
- day_config += day_limit;
- }
- break;
- }
-}
-
-uint16_t handle_encoder_clockwise(void){
- uint16_t mapped_code = 0;
- switch(encoder_mode){
- default:
- case ENC_MODE_VOLUME:
- mapped_code = KC_VOLU;
- break;
- case ENC_MODE_MEDIA:
- mapped_code = KC_MEDIA_NEXT_TRACK;
- break;
- case ENC_MODE_SCROLL:
- mapped_code = KC_WH_D;
- break;
- case ENC_MODE_BACKLIGHT:
- 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;
- break;
-#ifdef DYNAMIC_KEYMAP_ENABLE
- case ENC_MODE_CUSTOM0:
- mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CW);
- break;
- case ENC_MODE_CUSTOM1:
- mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CW);
- break;
- case ENC_MODE_CUSTOM2:
- mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CW);
- break;
-#endif
- case ENC_MODE_CLOCK_SET:
- update_time_config(1);
- break;
- }
- return mapped_code;
-}
-
-uint16_t handle_encoder_ccw(void){
- uint16_t mapped_code = 0;
- switch(encoder_mode){
- default:
- case ENC_MODE_VOLUME:
- mapped_code = KC_VOLD;
- break;
- case ENC_MODE_MEDIA:
- mapped_code = KC_MEDIA_PREV_TRACK;
- break;
- case ENC_MODE_SCROLL:
- mapped_code = KC_WH_U;
- break;
- case ENC_MODE_BACKLIGHT:
- // mapped_code = BL_DOWN;
- if(kb_backlight_config.level != 0){
- 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;
- break;
-#ifdef DYNAMIC_KEYMAP_ENABLE
- case ENC_MODE_CUSTOM0:
- mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CCW);
- break;
- case ENC_MODE_CUSTOM1:
- mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CCW);
- break;
- case ENC_MODE_CUSTOM2:
- mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CCW);
- break;
-#endif
-
- case ENC_MODE_CLOCK_SET:
- update_time_config(-1);
- break;
- }
- return mapped_code;
-}
-
-uint16_t handle_encoder_press(void){
- uint16_t mapped_code = 0;
- switch(encoder_mode){
- case ENC_MODE_VOLUME:
- mapped_code = KC_MUTE;
- break;
- default:
- case ENC_MODE_MEDIA:
- mapped_code = KC_MEDIA_PLAY_PAUSE;
- break;
- case ENC_MODE_SCROLL:
- mapped_code = KC_BTN3;
- break;
- case ENC_MODE_BACKLIGHT:
- // mapped_code = BL_TOGG;
- kb_backlight_config.breathing = !kb_backlight_config.breathing;
- if(!kb_backlight_config.breathing){
- breathing_disable();
- } else{
- breathing_enable();
- }
- break;
-#ifdef DYNAMIC_KEYMAP_ENABLE
- case ENC_MODE_CUSTOM0:
- mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_PRESS);
- break;
- case ENC_MODE_CUSTOM1:
- mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_PRESS);
- break;
- case ENC_MODE_CUSTOM2:
- mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_PRESS);
- break;
-#endif
- case ENC_MODE_CLOCK_SET:
- time_config_idx = (time_config_idx + 1) % 5;
- case ENC_MODE_BRIGHTNESS:
- break;
- }
- return mapped_code;
-}
-
-
-uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior){
-#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
- //big endian
- uint16_t keycode = eeprom_read_byte(addr) << 8;
- keycode |= eeprom_read_byte(addr + 1);
- return keycode;
-#else
- return 0;
-#endif
-}
-
-void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code){
-#ifdef DYNAMIC_KEYMAP_ENABLE
- void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
- eeprom_update_byte(addr, (uint8_t)(new_code >> 8));
- eeprom_update_byte(addr + 1, (uint8_t)(new_code & 0xFF));
-#endif
-}
diff --git a/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c b/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c
deleted file mode 100644
index 0fd69ca59b..0000000000
--- a/keyboards/cannonkeys/satisfaction75/satisfaction_oled.c
+++ /dev/null
@@ -1,267 +0,0 @@
-#include "satisfaction75.h"
-
-void draw_default(void);
-void draw_clock(void);
-
-#ifdef OLED_ENABLE
-
-oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return OLED_ROTATION_0; }
-
-bool oled_task_kb(void) {
- if (!oled_task_user()) { return false; }
- if (!oled_task_needs_to_repaint()) {
- return false;
- }
- oled_clear();
- if (clock_set_mode) {
- draw_clock();
- return false;;
- }
- switch (oled_mode) {
- default:
- case OLED_DEFAULT:
- draw_default();
- break;
- case OLED_TIME:
- draw_clock();
- break;
- }
- return false;
-}
-
-// Request a repaint of the OLED image without resetting the OLED sleep timer.
-// Used for things like clock updates that should not keep the OLED turned on
-// if there is no other activity.
-void oled_request_repaint(void) {
- if (is_oled_on()) {
- oled_repaint_requested = true;
- }
-}
-
-// Request a repaint of the OLED image and reset the OLED sleep timer.
-// Needs to be called after any activity that should keep the OLED turned on.
-void oled_request_wakeup(void) {
- oled_wakeup_requested = true;
-}
-
-// Check whether oled_task_user() needs to repaint the OLED image. This
-// function should be called at the start of oled_task_user(); it also handles
-// the OLED sleep timer and the OLED_OFF mode.
-bool oled_task_needs_to_repaint(void) {
- // In the OLED_OFF mode the OLED is kept turned off; any wakeup requests
- // are ignored.
- if ((oled_mode == OLED_OFF) && !clock_set_mode) {
- oled_wakeup_requested = false;
- oled_repaint_requested = false;
- oled_off();
- return false;
- }
-
- // If OLED wakeup was requested, reset the sleep timer and do a repaint.
- if (oled_wakeup_requested) {
- oled_wakeup_requested = false;
- oled_repaint_requested = false;
- oled_sleep_timer = timer_read32() + CUSTOM_OLED_TIMEOUT;
- oled_on();
- return true;
- }
-
- // If OLED repaint was requested, just do a repaint without touching the
- // sleep timer.
- if (oled_repaint_requested) {
- oled_repaint_requested = false;
- return true;
- }
-
- // If the OLED is currently off, skip the repaint (which would turn the
- // OLED on if the image is changed in any way).
- if (!is_oled_on()) {
- return false;
- }
-
- // If the sleep timer has expired while the OLED was on, turn the OLED off.
- if (timer_expired32(timer_read32(), oled_sleep_timer)) {
- oled_off();
- return false;
- }
-
- // Always perform a repaint if the OLED is currently on. (This can
- // potentially be optimized to avoid unneeded repaints if all possible
- // state changes are covered by oled_request_repaint() or
- // oled_request_wakeup(), but then any missed calls to these functions
- // would result in displaying a stale image.)
- return true;
-}
-
-
-static void draw_line_h(uint8_t x, uint8_t y, uint8_t len) {
- for (uint8_t i = 0; i < len; i++) {
- oled_write_pixel(i + x, y, true);
- }
-}
-
-static void draw_line_v(uint8_t x, uint8_t y, uint8_t len) {
- for (uint8_t i = 0; i < len; i++) {
- oled_write_pixel(x, i + y, true);
- }
-}
-
-static char* get_enc_mode(void) {
- switch (encoder_mode) {
- default:
- case ENC_MODE_VOLUME:
- return "VOL";
- case ENC_MODE_MEDIA:
- return "MED";
- case ENC_MODE_SCROLL:
- return "SCR";
- case ENC_MODE_BRIGHTNESS:
- return "BRT";
- case ENC_MODE_BACKLIGHT:
- return "BKL";
- case ENC_MODE_CLOCK_SET:
- return "CLK";
- case ENC_MODE_CUSTOM0:
- return "CS0";
- case ENC_MODE_CUSTOM1:
- return "CS1";
- case ENC_MODE_CUSTOM2:
- return "CS2";
- }
-}
-
-static char* get_time(void) {
- uint8_t hour = last_minute / 60;
- uint16_t minute = last_minute % 60;
-
- if (encoder_mode == ENC_MODE_CLOCK_SET) {
- hour = hour_config;
- minute = minute_config;
- }
-
- bool is_pm = (hour / 12) > 0;
- hour = hour % 12;
- if (hour == 0) {
- hour = 12;
- }
-
- static char time_str[11] = "";
- sprintf(time_str, "%02d:%02d%s", hour, minute, is_pm ? "pm" : "am");
-
- return time_str;
-}
-
-static char* get_date(void) {
- int16_t year = last_timespec.year + 1980;
- int8_t month = last_timespec.month;
- int8_t day = last_timespec.day;
-
- if (encoder_mode == ENC_MODE_CLOCK_SET) {
- year = year_config + 1980;
- month = month_config;
- day = day_config;
- }
-
- static char date_str[15] = "";
- sprintf(date_str, "%04d-%02d-%02d", year, month, day);
-
- return date_str;
-}
-
-void draw_default(void) {
- oled_write_P(PSTR("LAYER "), false);
- oled_write_char(get_highest_layer(layer_state) + 0x30, true);
-
- oled_write_P(PSTR(" ENC "), false);
- oled_write(get_enc_mode(), true);
-
- led_t led_state = host_keyboard_led_state();
- oled_set_cursor(18, 0);
- oled_write_P(PSTR("CAP"), led_state.caps_lock);
- oled_set_cursor(18, 1);
- oled_write_P(PSTR("SCR"), led_state.scroll_lock);
-
- uint8_t mod_state = get_mods();
- oled_set_cursor(6, 3);
- oled_write_P(PSTR("S"), mod_state & MOD_MASK_SHIFT);
- oled_advance_char();
- oled_write_P(PSTR("C"), mod_state & MOD_MASK_CTRL);
- oled_advance_char();
- oled_write_P(PSTR("A"), mod_state & MOD_MASK_ALT);
- oled_advance_char();
- oled_write_P(PSTR("G"), mod_state & MOD_MASK_GUI);
- oled_advance_char();
-
- oled_write(get_time(), false);
-
-/* Matrix display is 12 x 12 pixels */
-#define MATRIX_DISPLAY_X 0
-#define MATRIX_DISPLAY_Y 18
-
- // matrix
- for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
- for (uint8_t y = 0; y < MATRIX_COLS; y++) {
- bool on = (matrix_get_row(x) & (1 << y)) > 0;
- oled_write_pixel(MATRIX_DISPLAY_X + y + 2, MATRIX_DISPLAY_Y + x + 2, on);
- }
- }
-
- // outline
- draw_line_h(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y, 19);
- draw_line_h(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y + 9, 19);
- draw_line_v(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y, 9);
- draw_line_v(MATRIX_DISPLAY_X + 19, MATRIX_DISPLAY_Y, 9);
-
- // oled location
- draw_line_h(MATRIX_DISPLAY_X + 14, MATRIX_DISPLAY_Y + 2, 3);
-
- // bodge extra lines for invert layer and enc mode
- draw_line_v(35, 0, 8);
- draw_line_v(71, 0, 8);
-}
-
-void draw_clock(void) {
- oled_set_cursor(0, 0);
- oled_write(get_date(), false);
- oled_set_cursor(0, 2);
- oled_write(get_time(), false);
-
- oled_set_cursor(12, 0);
- oled_write_P(PSTR(" ENC "), false);
- oled_write(get_enc_mode(), true);
-
- oled_set_cursor(13, 1);
- oled_write_P(PSTR("LAYER "), false);
- oled_write_char(get_highest_layer(layer_state) + 0x30, true);
-
- led_t led_state = host_keyboard_led_state();
- oled_set_cursor(15, 3);
- oled_write_P(PSTR("CAPS"), led_state.caps_lock);
-
- if (clock_set_mode) {
- switch (time_config_idx) {
- case 0: // hour
- default:
- draw_line_h(0, 25, 10);
- break;
- case 1: // minute
- draw_line_h(18, 25, 10);
- break;
- case 2: // year
- draw_line_h(0, 9, 24);
- break;
- case 3: // month
- draw_line_h(30, 9, 10);
- break;
- case 4: // day
- draw_line_h(48, 9, 10);
- break;
- }
- }
-
- // bodge extra lines for invert layer and enc mode
- draw_line_v(101, 0, 8);
- draw_line_v(113, 8, 8);
-}
-
-#endif