Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First support for Magnum Ergo 1 by dark #22139

Merged
merged 12 commits into from
Nov 29, 2023
35 changes: 35 additions & 0 deletions keyboards/dark/magnum_ergo_1/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/* Copyright 2023 Gondolindrim <[email protected]>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once


#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE

#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 2
#define BACKLIGHT_PAL_MODE 2

#define LED_CAPS_LOCK_PIN B1
#define LED_INDICATOR_1 C4
#define LED_INDICATOR_2 C5
#define LED_INDICATOR_3 B0
#define LED_INDICATOR_4 A5
#define LED_INDICATOR_5 C15

#define WEAR_LEVELING_LOGICAL_SIZE 2048
#define WEAR_LEVELING_BACKING_SIZE 4096
22 changes: 22 additions & 0 deletions keyboards/dark/magnum_ergo_1/halconf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/* Copyright 2023 Gondolindrim <[email protected]
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#define HAL_USE_PWM TRUE
#define HAL_USE_PAL TRUE

#include_next <halconf.h>
108 changes: 108 additions & 0 deletions keyboards/dark/magnum_ergo_1/info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
{
"keyboard_name": "Magnum Ergo 1",
"manufacturer": "Gondolindrim X Dark",
"url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x4744",
"pid": "0x4D45",
"device_version": "0.0.1"
},
"features": {
"audio": false,
"backlight": true,
"bootmagic": true,
"command": false,
"console": false,
"encoder": false,
"extrakey": true,
"lto": true,
"mousekey": false,
"nkro": true,
"rgblight": false
},
"diode_direction": "COL2ROW",
"backlight": {
"pin": "C7",
"levels": 20,
"breathing": true
},
"matrix_pins": {
"cols": ["C8", "C9" , "C6" , "B15", "B14", "B13", "B12", "B9" , "A4" , "B4" , "A2" , "C0" , "C1" , "C2" , "A1" ],
"rows": ["A10", "A8" , "B10", "A7" , "A6" , "A0", "C3" , "B5", "B8" , "A3" ]
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"community_layouts": ["alice_split_bs"],
"layouts": {
"LAYOUT_alice_split_bs": {
"layout": [
{"label": "Esc", "matrix": [0,0], "x":0.5, "y":0},
{"label": "`~", "matrix": [0,1], "x":1.7, "y":0},
{"label": "1!", "matrix": [0,2], "x":2.7, "y":0},
{"label": "2@", "matrix": [0,3], "x":3.7, "y":0},
{"label": "3#", "matrix": [0,4], "x":4.7, "y":0},
{"label": "4$", "matrix": [0,5], "x":5.7, "y":0},
{"label": "5%", "matrix": [4,5], "x":6.7, "y":0},
{"label": "6^", "matrix": [0,6], "x":7.7, "y":0},
{"label": "7&", "matrix": [5,7], "x":9.15, "y":0},
{"label": "8*", "matrix": [5,8], "x":10.15, "y":0},
{"label": "9(", "matrix": [5,9], "x":11.15, "y":0},
{"label": "0)", "matrix": [5,10], "x":12.15, "y":0},
{"label": "-_", "matrix": [5,11], "x":13.15, "y":0},
{"label": "=+", "matrix": [5,12], "x":14.15, "y":0},
{"label": "Backspace", "matrix": [5,13], "x":15.15, "y":0},
{"label": "Backspace", "matrix": [5,14], "x":16.15, "y":0},
{"label": "Page Up", "matrix": [1,0], "x":0.25, "y":1},
{"label": "Tab", "matrix": [1,1], "x":1.5, "y":1, "w":1.5},
{"label": "Q", "matrix": [1,2], "x":3, "y":1},
{"label": "W", "matrix": [1,3], "x":4, "y":1},
{"label": "E", "matrix": [1,4], "x":5, "y":1},
{"label": "R", "matrix": [1,5], "x":6, "y":1},
{"label": "T", "matrix": [1,6], "x":7, "y":1},
{"label": "Y", "matrix": [6,7], "x":9, "y":1},
{"label": "U", "matrix": [6,8], "x":10, "y":1},
{"label": "I", "matrix": [6,9], "x":11, "y":1},
{"label": "O", "matrix": [6,10], "x":12, "y":1},
{"label": "P", "matrix": [6,11], "x":13, "y":1},
{"label": "[{", "matrix": [6,12], "x":14, "y":1},
{"label": "]}", "matrix": [6,13], "x":15, "y":1},
{"label": "\\|", "matrix": [6,14], "x":16, "y":1, "w":1.5},
{"label": "Page Down", "matrix": [2,0], "x":0, "y":2},
{"label": "Caps Lock", "matrix": [2,1], "x":1.3, "y":2, "w":1.75},
{"label": "A", "matrix": [2,2], "x":3.05, "y":2},
{"label": "S", "matrix": [2,3], "x":4.05, "y":2},
{"label": "D", "matrix": [2,4], "x":5.05, "y":2},
{"label": "F", "matrix": [2,5], "x":6.05, "y":2},
{"label": "G", "matrix": [2,6], "x":7.05, "y":2},
{"label": "H", "matrix": [7,7], "x":9.4, "y":2},
{"label": "J", "matrix": [7,8], "x":10.4, "y":2},
{"label": "K", "matrix": [7,9], "x":11.4, "y":2},
{"label": "L", "matrix": [7,10], "x":12.4, "y":2},
{"label": ";:", "matrix": [7,11], "x":13.4, "y":2},
{"label": "'\"", "matrix": [7,12], "x":14.4, "y":2},
{"label": "Enter", "matrix": [7,14], "x":15.4, "y":2, "w":2.25},
{"label": "Shift", "matrix": [3,1], "x":1.05, "y":3, "w":2.25},
{"label": "Z", "matrix": [3,2], "x":3.3, "y":3},
{"label": "X", "matrix": [3,3], "x":4.3, "y":3},
{"label": "C", "matrix": [3,4], "x":5.3, "y":3},
{"label": "V", "matrix": [3,5], "x":6.3, "y":3},
{"label": "B", "matrix": [3,6], "x":7.3, "y":3},
{"label": "B", "matrix": [8,7], "x":9.1, "y":3},
{"label": "N", "matrix": [8,8], "x":10.1, "y":3},
{"label": "M", "matrix": [8,9], "x":11.1, "y":3},
{"label": ",<", "matrix": [8,10], "x":12.1, "y":3},
{"label": ".>", "matrix": [8,11], "x":13.1, "y":3},
{"label": "/?", "matrix": [8,12], "x":14.1, "y":3},
{"label": "Shift", "matrix": [8,13], "x":15.1, "y":3, "w":1.75},
{"label": "MO(1)", "matrix": [8,14], "x":16.85, "y":3},
{"label": "LCtrl", "matrix": [4,1], "x":1.3, "y":4, "w":1.5},
{"label": "LAlt", "matrix": [4,3], "x":3.6, "y":4, "w":1.5},
{"label": "Space", "matrix": [4,4], "x":5.1, "y":4, "w":2.25},
{"label": "Space", "matrix": [4,6], "x":7.35, "y":4},
{"label": "Space", "matrix": [9,8], "x":9.0, "y":4, "w":2.75},
{"label": "RAlt", "matrix": [9,10], "x":11.75, "y":4, "w":1.5},
{"label": "RCtrl", "matrix": [9,14], "x":15.35, "y":4, "w":1.5}]
}
}
}
33 changes: 33 additions & 0 deletions keyboards/dark/magnum_ergo_1/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* Copyright 2023 Gondolindrim <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_alice_split_bs( /* Base */
KC_GRV , KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_INS , 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_ENT ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
KC_LCTL, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RCTL
),
[1] = LAYOUT_alice_split_bs(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
33 changes: 33 additions & 0 deletions keyboards/dark/magnum_ergo_1/keymaps/via/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/* Copyright 2023 Gondolindrim <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_alice_split_bs( /* Base */
KC_GRV , KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC,
KC_INS , 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_ENT ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) ,
KC_LCTL, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RCTL
),
[1] = LAYOUT_alice_split_bs(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
1 change: 1 addition & 0 deletions keyboards/dark/magnum_ergo_1/keymaps/via/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VIA_ENABLE = yes
93 changes: 93 additions & 0 deletions keyboards/dark/magnum_ergo_1/magnum_ergo_1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/* Copyright 2023 Gondolindrim <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include "quantum.h"

void keyoard_post_init_kb(void) {
setPinOutput(LED_CAPS_LOCK_PIN);
setPinOutput(LED_INDICATOR_1);
setPinOutput(LED_INDICATOR_2);
setPinOutput(LED_INDICATOR_3);
setPinOutput(LED_INDICATOR_4);
setPinOutput(LED_INDICATOR_5);
#ifndef LED_CAPS_LOCK_PIN
writePin(LED_CAPS_LOCK_PIN, 0);
#endif

#ifndef LED_INDICATOR_1
writePin(LED_INDICATOR_1, 0);
#endif

#ifndef LED_INDICATOR_2
writePin(LED_INDICATOR_2, 0);
#endif

#ifndef LED_INDICATOR_3
writePin(LED_INDICATOR_3, 0);
#endif

#ifndef LED_INDICATOR_4
writePin(LED_INDICATOR_4, 0);
#endif

#ifndef LED_INDICATOR_5
writePin(LED_INDICATOR_5, 0);
#endif
keyboard_post_init_user();
}
Gondolindrim marked this conversation as resolved.
Show resolved Hide resolved

layer_state_t layer_state_set_kb(layer_state_t state) {
switch (get_highest_layer(state)) {
case 1:
#ifdef LED_INDICATOR_4
writePin(LED_INDICATOR_4, 1);
#endif

#ifdef LED_INDICATOR_5
writePin(LED_INDICATOR_5, 1);
#endif
break;
case 2:
#ifdef LED_INDICATOR_1
writePin(LED_INDICATOR_1, 1);
#endif
#ifdef LED_INDICATOR_2
writePin(LED_INDICATOR_2, 1);
#endif
#ifdef LED_INDICATOR_3
writePin(LED_INDICATOR_3, 1);
#endif
break;
default:
#ifdef LED_INDICATOR_1
writePin(LED_INDICATOR_1, 0);
#endif
#ifdef LED_INDICATOR_2
writePin(LED_INDICATOR_2, 0);
#endif
#ifdef LED_INDICATOR_3
writePin(LED_INDICATOR_3, 0);
#endif
#ifdef LED_INDICATOR_4
writePin(LED_INDICATOR_4, 0);
#endif
#ifdef LED_INDICATOR_5
writePin(LED_INDICATOR_5, 0);
#endif
break;
}
return layer_state_set_user(state);
}
22 changes: 22 additions & 0 deletions keyboards/dark/magnum_ergo_1/mcuconf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/* Copyright 2023 Gondolindrim <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include_next <mcuconf.h>

#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE
28 changes: 28 additions & 0 deletions keyboards/dark/magnum_ergo_1/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Gondolindrim X Dark Magnum Ergo 1 PCB QMK firmware

The Magnum Ergo 1 is an Alice-layout ergonomic keyboard designed by Dark, with a PCB designer by Gondolindrim.

* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
* Hardware Supported: proprietary PCB using STM32F4x1C microcontroller;
* Availability: as of november 2022 both keyboard and PCB were sold in a private Group Buy; therefore availability is limited.

## How to flash

### Enter bootloader

The DFU state in the bootloader can be accessed in 3 ways:

* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key, grave accent in the default keymap) and plug in the keyboard;
* **Physical reset button**: press the button on the front of the PCB, next to caps lock, for at least five seconds;
* **Keycode in layout**: Press the key mapped to `QK_BOOT`; in the default layout, that is top left key ('grave') in layer 1.

### How to compile and flash

You can compile the Iron 165R2 default keymap by using the following:

make magnum_ergo_1:default

And use dfu-util in the command line or through a GUI like QMK toolbox to upload the firmware to the PCB. To directly flash the PCB after it is put into a DFU state, use:

make magnum_ergo_1:default:flash

Empty file.