summaryrefslogtreecommitdiff
path: root/keyboards/cipulot/ec_alveus/1_2_0
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/cipulot/ec_alveus/1_2_0')
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/config.h52
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c183
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.h36
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/halconf.h2
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/info.json11
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c11
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c11
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h6
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c11
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk2
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c156
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/matrix.c44
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h2
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/post_rules.mk3
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/readme.md3
-rw-r--r--keyboards/cipulot/ec_alveus/1_2_0/rules.mk4
16 files changed, 58 insertions, 479 deletions
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/config.h b/keyboards/cipulot/ec_alveus/1_2_0/config.h
index 1947c30802..775c7906ad 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/config.h
+++ b/keyboards/cipulot/ec_alveus/1_2_0/config.h
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -19,27 +19,53 @@
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
-/* Custom matrix pins and port select array */
#define MATRIX_ROW_PINS \
{ A14, B3, A15, B5, B4 }
-#define MATRIX_COL_CHANNELS \
- { 3, 0, 1, 2, 6, 5, 7, 4 }
-#define MUX_SEL_PINS \
+
+#define AMUX_COUNT 2
+#define AMUX_MAX_COLS_COUNT 8
+
+#define AMUX_EN_PINS \
+ { C13, C14 }
+
+#define AMUX_SEL_PINS \
{ B7, B8, B9 }
-/* Hardware peripherals pins */
-#define APLEX_EN_PIN_0 C13
-#define APLEX_EN_PIN_1 C14
+#define AMUX_COL_CHANNELS_SIZES \
+ { 8, 8 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 3, 0, 1, 2, 6, 5, 7, 4 }
+
+#define AMUX_1_COL_CHANNELS AMUX_0_COL_CHANNELS
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS
+
#define DISCHARGE_PIN B1
#define ANALOG_PORT A3
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 100
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 170
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-#define DEFAULT_ACTUATION_LEVEL 550
-#define DEFAULT_RELEASE_LEVEL 500
-
-#define DISCHARGE_TIME 10
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c b/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c
deleted file mode 100644
index 783c00457c..0000000000
--- a/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Copyright 2023 Cipulot
- *
- * 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 "ec_switch_matrix.h"
-#include "analog.h"
-#include "atomic_util.h"
-#include "print.h"
-#include "wait.h"
-
-/* Pin and port array */
-const uint32_t row_pins[] = MATRIX_ROW_PINS;
-const uint8_t col_channels[] = MATRIX_COL_CHANNELS;
-const uint32_t mux_sel_pins[] = MUX_SEL_PINS;
-
-static ecsm_config_t config;
-static uint16_t ecsm_sw_value[MATRIX_ROWS][MATRIX_COLS];
-
-static adc_mux adcMux;
-
-static inline void discharge_capacitor(void) {
- writePinLow(DISCHARGE_PIN);
-}
-static inline void charge_capacitor(uint8_t row) {
- writePinHigh(DISCHARGE_PIN);
- writePinHigh(row_pins[row]);
-}
-
-static inline void init_mux_sel(void) {
- for (int idx = 0; idx < 3; idx++) {
- setPinOutput(mux_sel_pins[idx]);
- }
-}
-
-static inline void select_mux(uint8_t col) {
- uint8_t ch = col_channels[col];
- writePin(mux_sel_pins[0], ch & 1);
- writePin(mux_sel_pins[1], ch & 2);
- writePin(mux_sel_pins[2], ch & 4);
-}
-
-static inline void init_row(void) {
- for (int idx = 0; idx < MATRIX_ROWS; idx++) {
- setPinOutput(row_pins[idx]);
- writePinLow(row_pins[idx]);
- }
-}
-
-/* Initialize the peripherals pins */
-int ecsm_init(ecsm_config_t const* const ecsm_config) {
- // Initialize config
- config = *ecsm_config;
-
- palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG);
- adcMux = pinToMux(ANALOG_PORT);
-
- // Dummy call to make sure that adcStart() has been called in the appropriate state
- adc_read(adcMux);
-
- // Initialize discharge pin as discharge mode
- writePinLow(DISCHARGE_PIN);
- setPinOutputOpenDrain(DISCHARGE_PIN);
-
- // Initialize drive lines
- init_row();
-
- // Initialize multiplexer select pin
- init_mux_sel();
-
- // Enable AMUX
- setPinOutput(APLEX_EN_PIN_0);
- writePinLow(APLEX_EN_PIN_0);
- setPinOutput(APLEX_EN_PIN_1);
- writePinLow(APLEX_EN_PIN_1);
-
- return 0;
-}
-
-int ecsm_update(ecsm_config_t const* const ecsm_config) {
- // Save config
- config = *ecsm_config;
- return 0;
-}
-
-// Read the capacitive sensor value
-uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) {
- uint16_t sw_value = 0;
-
- // Select the multiplexer
- if (channel == 0) {
- writePinHigh(APLEX_EN_PIN_0);
- select_mux(col);
- writePinLow(APLEX_EN_PIN_0);
- } else {
- writePinHigh(APLEX_EN_PIN_1);
- select_mux(col);
- writePinLow(APLEX_EN_PIN_1);
- }
-
- // Set strobe pins to low state
- writePinLow(row_pins[row]);
- ATOMIC_BLOCK_FORCEON {
- // Set the row pin to high state and have capacitor charge
- charge_capacitor(row);
- // Read the ADC value
- sw_value = adc_read(adcMux);
- }
- // Discharge peak hold capacitor
- discharge_capacitor();
- // Waiting for the ghost capacitor to discharge fully
- wait_us(DISCHARGE_TIME);
-
- return sw_value;
-}
-
-// Update press/release state of key
-bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) {
- bool current_state = (*current_row >> col) & 1;
-
- // Press to release
- if (current_state && sw_value < config.ecsm_actuation_threshold) {
- *current_row &= ~(1 << col);
- return true;
- }
-
- // Release to press
- if ((!current_state) && sw_value > config.ecsm_release_threshold) {
- *current_row |= (1 << col);
- return true;
- }
-
- return false;
-}
-
-// Scan key values and update matrix state
-bool ecsm_matrix_scan(matrix_row_t current_matrix[]) {
- bool updated = false;
-
- // Disable AMUX of channel 1
- writePinHigh(APLEX_EN_PIN_1);
- for (int col = 0; col < sizeof(col_channels); col++) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- ecsm_sw_value[row][col] = ecsm_readkey_raw(0, row, col);
- updated |= ecsm_update_key(&current_matrix[row], row, col, ecsm_sw_value[row][col]);
- }
- }
-
- // Disable AMUX of channel 1
- writePinHigh(APLEX_EN_PIN_0);
- for (int col = 0; col < sizeof(col_channels); col++) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- ecsm_sw_value[row][col + 8] = ecsm_readkey_raw(1, row, col);
- updated |= ecsm_update_key(&current_matrix[row], row, col + 8, ecsm_sw_value[row][col + 8]);
- }
- }
- return updated;
-}
-
-// Debug print key values
-void ecsm_print_matrix(void) {
- for (int row = 0; row < MATRIX_ROWS; row++) {
- for (int col = 0; col < MATRIX_COLS; col++) {
- uprintf("%4d", ecsm_sw_value[row][col]);
- if (col < (MATRIX_COLS - 1)) {
- print(",");
- }
- }
- print("\n");
- }
- print("\n");
-}
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.h b/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.h
deleted file mode 100644
index 9dcb216caa..0000000000
--- a/keyboards/cipulot/ec_alveus/1_2_0/ec_switch_matrix.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright 2023 Cipulot
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#include "matrix.h"
-
-typedef struct {
- uint16_t ecsm_actuation_threshold; // threshold for key release
- uint16_t ecsm_release_threshold; // threshold for key press
-} ecsm_config_t;
-
-ecsm_config_t ecsm_config;
-
-int ecsm_init(ecsm_config_t const* const ecsm_config);
-int ecsm_update(ecsm_config_t const* const ecsm_config);
-bool ecsm_matrix_scan(matrix_row_t current_matrix[]);
-uint16_t ecsm_readkey_raw(uint8_t channel, uint8_t row, uint8_t col);
-bool ecsm_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value);
-void ecsm_print_matrix(void);
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/halconf.h b/keyboards/cipulot/ec_alveus/1_2_0/halconf.h
index 5b71acecbb..835d43b6a0 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/halconf.h
+++ b/keyboards/cipulot/ec_alveus/1_2_0/halconf.h
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/info.json b/keyboards/cipulot/ec_alveus/1_2_0/info.json
index 65af74e99b..8b63d02f77 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/info.json
+++ b/keyboards/cipulot/ec_alveus/1_2_0/info.json
@@ -8,18 +8,11 @@
},
"diode_direction": "COL2ROW",
"features": {
- "audio": false,
- "backlight": false,
- "bootmagic": true,
- "command": false,
+ "bootmagic": false,
"console": true,
"extrakey": true,
"mousekey": true,
- "nkro": true,
- "rgblight": false
- },
- "mouse_key": {
- "enabled": true
+ "nkro": true
},
"processor": "STM32F401",
"usb": {
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c
index d111c6a685..bff38f1fa8 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/default/keymap.c
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -33,14 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______),
[2] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______),
-
- [3] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c
index 4552cd6457..163f05202e 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/tkl_nofrow_ansi_tsangan_wkl_split_bs/keymap.c
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -33,14 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______),
[2] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl_split_bs(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______),
-
- [3] = LAYOUT_tkl_nofrow_ansi_tsangan_wkl_split_bs(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h
index ebf954d07a..1ab0d3d9aa 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/config.h
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -16,5 +16,5 @@
#pragma once
-// This is the size of the EEPROM for the custom VIA-specific data
-#define EECONFIG_USER_DATA_SIZE 4
+// This is the firmware version for VIA support to avoid conflicts on menu fetching
+#define VIA_FIRMWARE_VERSION 1
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c
index 54a8f3b4f0..2134def61a 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/keymap.c
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -33,14 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[2] = LAYOUT_all(
- QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-
- [3] = LAYOUT_all(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk
index 520b11f203..1e5b99807c 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/rules.mk
@@ -1,3 +1 @@
VIA_ENABLE = yes
-
-SRC += via_apc.c
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c b/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c
deleted file mode 100644
index 5ea77af44c..0000000000
--- a/keyboards/cipulot/ec_alveus/1_2_0/keymaps/via/via_apc.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Copyright 2023 Cipulot
- *
- * 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 "ec_switch_matrix.h"
-#include "action.h"
-#include "via.h"
-
-void apc_init_thresholds(void);
-void apc_set_threshold(bool is_for_actuation);
-
-// Declaring an _apc_config_t struct that will store our data
-typedef struct _apc_config_t {
- uint16_t actuation_threshold;
- uint16_t release_threshold;
-} apc_config;
-
-// Check if the size of the reserved persistent memory is the same as the size of struct apc_config
-_Static_assert(sizeof(apc_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data");
-
-// Declaring a new variable apc of type apc_config
-apc_config apc;
-
-// Declaring enums for VIA config menu
-enum via_apc_enums {
- // clang-format off
- id_apc_actuation_threshold = 1,
- id_apc_release_threshold = 2
- // clang-format on
-};
-
-// Initializing persistent memory configuration: default values are declared and stored in PMEM
-void eeconfig_init_user(void) {
- // Default values
- apc.actuation_threshold = DEFAULT_ACTUATION_LEVEL;
- apc.release_threshold = DEFAULT_RELEASE_LEVEL;
- // Write default value to EEPROM now
- eeconfig_update_user_datablock(&apc);
-}
-
-// On Keyboard startup
-void keyboard_post_init_user(void) {
- // Read custom menu variables from memory
- eeconfig_read_user_datablock(&apc);
- apc_init_thresholds();
-}
-
-// Handle the data received by the keyboard from the VIA menus
-void apc_config_set_value(uint8_t *data) {
- // data = [ value_id, value_data ]
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
-
- switch (*value_id) {
- case id_apc_actuation_threshold: {
- apc.actuation_threshold = value_data[1] | (value_data[0] << 8);
- apc_set_threshold(true);
- break;
- }
- case id_apc_release_threshold: {
- apc.release_threshold = value_data[1] | (value_data[0] << 8);
- apc_set_threshold(false);
- break;
- }
- }
-}
-
-// Handle the data sent by the keyboard to the VIA menus
-void apc_config_get_value(uint8_t *data) {
- // data = [ value_id, value_data ]
- uint8_t *value_id = &(data[0]);
- uint8_t *value_data = &(data[1]);
-
- switch (*value_id) {
- case id_apc_actuation_threshold: {
- value_data[0] = apc.actuation_threshold >> 8;
- value_data[1] = apc.actuation_threshold & 0xFF;
- break;
- }
- case id_apc_release_threshold: {
- value_data[0] = apc.release_threshold >> 8;
- value_data[1] = apc.release_threshold & 0xFF;
- break;
- }
- }
-}
-
-// Save the data to persistent memory after changes are made
-void apc_config_save(void) {
- eeconfig_update_user_datablock(&apc);
-}
-
-void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
- // data = [ command_id, channel_id, value_id, value_data ]
- uint8_t *command_id = &(data[0]);
- uint8_t *channel_id = &(data[1]);
- uint8_t *value_id_and_data = &(data[2]);
-
- if (*channel_id == id_custom_channel) {
- switch (*command_id) {
- case id_custom_set_value: {
- apc_config_set_value(value_id_and_data);
- break;
- }
- case id_custom_get_value: {
- apc_config_get_value(value_id_and_data);
- break;
- }
- case id_custom_save: {
- apc_config_save();
- break;
- }
- default: {
- // Unhandled message.
- *command_id = id_unhandled;
- break;
- }
- }
- return;
- }
-
- *command_id = id_unhandled;
-}
-
-// Initialize the thresholds
-void apc_init_thresholds(void) {
- ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
- ecsm_config.ecsm_release_threshold = apc.release_threshold;
-
- // Update the ecsm_config
- ecsm_update(&ecsm_config);
-}
-
-// Set the thresholds
-void apc_set_threshold(bool is_for_actuation) {
- if (is_for_actuation) {
- ecsm_config.ecsm_actuation_threshold = apc.actuation_threshold;
-
- } else {
- ecsm_config.ecsm_release_threshold = apc.release_threshold;
- }
- // Update the ecsm_config
- ecsm_update(&ecsm_config);
-}
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/matrix.c b/keyboards/cipulot/ec_alveus/1_2_0/matrix.c
deleted file mode 100644
index 1850acf264..0000000000
--- a/keyboards/cipulot/ec_alveus/1_2_0/matrix.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2023 Cipulot
- *
- * 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 "ec_switch_matrix.h"
-#include "matrix.h"
-
-/* matrix state(1:on, 0:off) */
-extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
-extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
-
-void matrix_init_custom(void) {
- // Default values, overwritten by VIA if enabled later
- ecsm_config.ecsm_actuation_threshold = DEFAULT_ACTUATION_LEVEL;
- ecsm_config.ecsm_release_threshold = DEFAULT_RELEASE_LEVEL;
-
- ecsm_init(&ecsm_config);
-}
-
-bool matrix_scan_custom(matrix_row_t current_matrix[]) {
- bool updated = ecsm_matrix_scan(current_matrix);
-
-// RAW matrix values on console
-#ifdef CONSOLE_ENABLE
- static int cnt = 0;
- if (cnt++ == 350) {
- cnt = 0;
- ecsm_print_matrix();
- }
-#endif
- return updated;
-}
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h b/keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h
index d91f576bd4..fa3c955e0d 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h
+++ b/keyboards/cipulot/ec_alveus/1_2_0/mcuconf.h
@@ -2,7 +2,7 @@
*
* 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
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/post_rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/post_rules.mk
new file mode 100644
index 0000000000..d726a112a8
--- /dev/null
+++ b/keyboards/cipulot/ec_alveus/1_2_0/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/readme.md b/keyboards/cipulot/ec_alveus/1_2_0/readme.md
index e4c3ef86c3..43a39b06d8 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/readme.md
+++ b/keyboards/cipulot/ec_alveus/1_2_0/readme.md
@@ -20,8 +20,7 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
## Bootloader
-Enter the bootloader in 3 ways:
+Enter the bootloader in 2 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**: Long short the exposed pads on the top of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
index fc2dcf32ab..70494b635f 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
+++ b/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
@@ -1,4 +1,4 @@
CUSTOM_MATRIX = lite
-SRC += matrix.c ec_switch_matrix.c
-
ANALOG_DRIVER_REQUIRED = yes
+SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+OPT = 3