Add Epomaker Galaxy100 Lite.

- Updated from available sources from manufacturer.
- Uses rdr_lib OSS rewrite instead of binary blob.
- Standard VIA keymap is compiling.
- OpenRGB keymap currently failing to compile.
This commit is contained in:
2026-07-02 20:23:29 -04:00
parent ec21cbfeef
commit e4359c4ad8
14 changed files with 715 additions and 0 deletions
@@ -0,0 +1,24 @@
/* Copyright 2021 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/>.
*/
#pragma once
#define CH_CFG_ST_TIMEDELTA 0
#define CH_CFG_ST_RESOLUTION 16
#define CH_CFG_ST_FREQUENCY 1000
#include_next <chconf.h>
@@ -0,0 +1,79 @@
/* Copyright 2025 Epomaker
* Copyright 2025 Epomaker <https://github.com/Epomaker>
*
* 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
/* 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 less important options */
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
#define MATRIX_UNSELECT_DRIVE_HIGH
#define CORTEX_ENABLE_WFI_IDLE FALSE
/* Ensure we jump to bootloader if the RESET keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#define DEBOUNCE 5
#ifndef NOP_FUDGE
# define NOP_FUDGE 0.4
#endif
#define RGB_MATRIX_LED_COUNT 101
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_KEYRELEASES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_DISABLE_AFTER_TIMEOUT 0
#define RGB_MATRIX_LED_FLUSH_LIMIT 16
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
#define RGB_MATRIX_SLEEP
#define EEPROM_SIZE 1152
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1151
#define FEE_PAGE_SIZE (0x200)
#define FEE_PAGE_COUNT (8)
#define FEE_PAGE_BASE_ADDRESS (0x1F000)
#define FEE_MCU_FLASH_SIZE (0x1000)
#define EECONFIG_USER_DATA_SIZE 4
#define EECONFIG_KB_DATA_SIZE 1
#define TRANSIENT_EEPROM_SIZE 4096
#define USER_BLE_ID (0X2047)
#define USER_BLE1_NAME "Galaxy100 Lite-1"
#define USER_BLE2_NAME "Galaxy100 Lite-2"
#define USER_BLE3_NAME "Galaxy100 Lite-3"
// Definitions from rdmctmzt_common/keyboard_common.h
#define USB_AUTO_SWITCH_ENABLE FALSE
#define LED_CONNECTION_INDEX 67 // Connection type indicator (BLE/2.4G/USB)
#define LED_CAP_INDEX 56 // Caps Lock indicator
#define LED_WIN_L_INDEX 34 // Win Lock indicator
#define LED_BLE_1_INDEX 38 // BLE 1 indicator
#define LED_BLE_2_INDEX 39 // BLE 2 indicator
#define LED_BLE_3_INDEX 40 // BLE 3 indicator
#define LED_2P4G_INDEX 41 // 2.4G indicator
#define LED_USB_INDEX 42 // USB indicator
#define LED_BATT_INDEX 19 // Battery status indicator (used for crit low).
#define BATTERY_LED_COUNT 12 // Default length is also 12.
@@ -0,0 +1,73 @@
/* Copyright 2026 Cutieguwu <https://cutieguwu.ca>
* Copyright 2025 Epomaker <https://github.com/Epomaker>
*
* 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 "keyboard_common.h"
// Battery indicator LED indices
const uint8_t Led_Batt_Index_Tab[BATTERY_LED_COUNT] = {19,20,21,22,23,24,25,26,27,28,29,30};
led_config_t g_led_config = { {
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 32, 51 },
{ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, NO_LED, NO_LED },
{ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, NO_LED, NO_LED },
{ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, NO_LED, 68, NO_LED, 69 },
{ 73, NO_LED, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, NO_LED, 84, 85, 86 },
{ 89, 90, 91, NO_LED, 14, 92, 15, 16, 17, 93, 94, NO_LED, NO_LED, 95, 96, 97 },
{ 33, 34, 35, 36, 52, 53, 54, 70, 71, 72, 55, 87, 88, 98, 99, 100 }
},{
{ 0, 10}, { 22, 10}, { 33, 10}, { 44, 10}, { 55, 10}, { 72, 10}, { 83, 10}, { 94, 10}, { 105,10}, { 121, 10}, { 132, 10}, { 143, 10}, { 154, 10}, { 170, 10}, { 186, 10}, { 197, 10},{ 208, 10},{ 219, 10},
{ 0, 20}, { 11, 20}, { 22, 20}, { 33, 20}, { 44, 20}, { 55, 20}, { 66, 20}, { 67, 20}, { 88, 20}, { 99, 20}, { 110, 20}, { 121, 20}, { 132, 20}, { 148, 20}, { 170, 10}, { 186, 20}, { 197, 20},{ 208, 20},{ 219, 20},
{ 3, 30}, { 17, 30}, { 28, 30}, { 39, 30}, { 50, 30}, { 61, 30}, { 72, 30}, { 83, 30}, { 94, 30}, { 105, 30}, { 116, 30}, { 127, 30}, { 138, 30}, { 152, 30}, { 170, 10}, { 186, 30}, { 197, 30},{ 208, 30},{ 219, 30},
{ 4, 40}, { 19, 40}, { 30, 40}, { 41, 40}, { 52, 40}, { 63, 40}, { 74, 40}, { 85, 40}, { 96, 40}, { 107, 40}, { 118, 40}, { 129, 40}, { 148, 40}, { 170, 40}, { 186, 40}, { 197, 40},{ 208, 40},
{ 6, 50}, { 24, 50}, { 35, 50}, { 46, 50}, { 57, 50}, { 68, 50}, { 79, 50}, { 90, 50}, { 111, 50}, { 122, 50}, { 133, 50}, { 142, 50}, { 154, 50}, { 186, 50}, { 197, 50},{ 208, 50},
{ 0, 60}, { 15, 60}, { 30, 60}, { 70, 60}, { 120, 60}, { 135, 60}, { 143, 60}, { 154, 60}, { 165, 60}, { 196, 60},{ 208, 60},{ 219, 60}
}, {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
} };
//
// QMK callbacks - delegate to library
//
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
return kb_rgb_matrix_indicators_common(led_min, led_max);
}
void notify_usb_device_state_change_user(struct usb_device_state usb_device_state) {
kb_notify_usb_device_state_change(usb_device_state);
}
void housekeeping_task_user(void) {
kb_housekeeping_task();
}
void board_init(void) {
kb_board_init();
}
void keyboard_post_init_user(void) {
kb_keyboard_post_init();
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return kb_process_record_common(keycode, record);
}
@@ -0,0 +1,29 @@
/* Copyright 2021 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/>.
*/
#pragma once
#define HAL_USE_PWM TRUE
#define ES32_PWM_USE_GP16C4T2 TRUE
#define BACKLIGHT_PWM_DRIVER PWM_GP16C4T2
#define BACKLIGHT_PWM_CHANNEL 3
#define HAL_USE_USB TRUE
#define HAL_USE_PAL TRUE
#include_next <halconf.h>
@@ -0,0 +1,219 @@
{
"manufacturer": "Epomaker",
"keyboard_name": "epomaker/galaxy100_lite",
"maintainer": "Cutieguwu",
"bootloader": "custom",
"processor": "FS026",
"usb": {
"device_version": "0.0.8",
"pid": "0x3055",
"vid": "0x36B0"
},
"host": {
"default": {
"nkro": true
}
},
"diode_direction": "ROW2COL",
"matrix_pins": {
"cols": [
"D15",
"D14",
"C15",
"C14",
"C13",
"D3",
"D2",
"C12",
"C11",
"C10",
"A14",
"C9",
"C8",
"C7",
"C6",
"B15"
],
"rows": ["B0", "B3", "B4", "B5", "B6", "B7", "B1"]
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"consolekey": true,
"command": false,
"rgb_matrix": true
},
"encoder": {
"enabled": true,
"rotary": [{ "pin_a": "B2", "pin_b": "B10" }]
},
"rgb_matrix": {
"driver": "custom",
"animations": {
"solid_color": true,
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"flower_blooming": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": false,
"pixel_flow": true,
"pixel_rain": false,
"typing_heatmap": false,
"digital_rain": true,
"solid_reactive_simple": false,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"riverflow": true
}
},
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "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": [5, 4], "x": 15, "y": 0 },
{ "matrix": [5, 6], "x": 16, "y": 0 },
{ "matrix": [5, 7], "x": 17, "y": 0 },
{ "matrix": [5, 8], "x": 18, "y": 0 },
{ "matrix": [5, 3], "x": 18, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
{ "matrix": [1, 10], "x": 10, "y": 1 },
{ "matrix": [1, 11], "x": 11, "y": 1 },
{ "matrix": [1, 12], "x": 12, "y": 1 },
{ "matrix": [1, 13], "x": 13, "y": 1, "w": 2 },
{ "matrix": [0, 14], "x": 15, "y": 1 },
{ "matrix": [6, 0], "x": 16, "y": 1 },
{ "matrix": [6, 1], "x": 16, "y": 1 },
{ "matrix": [6, 2], "x": 17, "y": 1 },
{ "matrix": [6, 3], "x": 18, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2, "w": 1.5 },
{ "matrix": [2, 1], "x": 1.5, "y": 2 },
{ "matrix": [2, 2], "x": 2.5, "y": 2 },
{ "matrix": [2, 3], "x": 3.5, "y": 2 },
{ "matrix": [2, 4], "x": 4.5, "y": 2 },
{ "matrix": [2, 5], "x": 5.5, "y": 2 },
{ "matrix": [2, 6], "x": 6.5, "y": 2 },
{ "matrix": [2, 7], "x": 7.5, "y": 2 },
{ "matrix": [2, 8], "x": 8.5, "y": 2 },
{ "matrix": [2, 9], "x": 9.5, "y": 2 },
{ "matrix": [2, 10], "x": 10.5, "y": 2 },
{ "matrix": [2, 11], "x": 11.5, "y": 2 },
{ "matrix": [2, 12], "x": 12.5, "y": 2 },
{ "matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5 },
{ "matrix": [0, 15], "x": 15, "y": 2 },
{ "matrix": [6, 4], "x": 15, "y": 2 },
{ "matrix": [6, 5], "x": 16, "y": 2 },
{ "matrix": [6, 6], "x": 17, "y": 2 },
{ "matrix": [6, 10], "x": 18, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3, "w": 1.75 },
{ "matrix": [3, 1], "x": 1.75, "y": 3 },
{ "matrix": [3, 2], "x": 2.75, "y": 3 },
{ "matrix": [3, 3], "x": 3.75, "y": 3 },
{ "matrix": [3, 4], "x": 4.75, "y": 3 },
{ "matrix": [3, 5], "x": 5.75, "y": 3 },
{ "matrix": [3, 6], "x": 6.75, "y": 3 },
{ "matrix": [3, 7], "x": 7.75, "y": 3 },
{ "matrix": [3, 8], "x": 8.75, "y": 3 },
{ "matrix": [3, 9], "x": 9.75, "y": 3 },
{ "matrix": [3, 10], "x": 10.75, "y": 3 },
{ "matrix": [3, 11], "x": 11.75, "y": 3 },
{ "matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25 },
{ "matrix": [3, 15], "x": 15, "y": 3 },
{ "matrix": [6, 7], "x": 15, "y": 3 },
{ "matrix": [6, 8], "x": 16, "y": 3 },
{ "matrix": [6, 9], "x": 17, "y": 3 },
{ "matrix": [4, 0], "x": 0, "y": 4, "w": 2.25 },
{ "matrix": [4, 2], "x": 2.25, "y": 4 },
{ "matrix": [4, 3], "x": 3.25, "y": 4 },
{ "matrix": [4, 4], "x": 4.25, "y": 4 },
{ "matrix": [4, 5], "x": 5.25, "y": 4 },
{ "matrix": [4, 6], "x": 6.25, "y": 4 },
{ "matrix": [4, 7], "x": 7.25, "y": 4 },
{ "matrix": [4, 8], "x": 8.25, "y": 4 },
{ "matrix": [4, 9], "x": 9.25, "y": 4 },
{ "matrix": [4, 10], "x": 10.25, "y": 4 },
{ "matrix": [4, 11], "x": 11.25, "y": 4 },
{ "matrix": [4, 13], "x": 12.25, "y": 4, "w": 1.75 },
{ "matrix": [4, 14], "x": 14, "y": 4 },
{ "matrix": [4, 15], "x": 15, "y": 4 },
{ "matrix": [6, 11], "x": 16, "y": 4 },
{ "matrix": [6, 12], "x": 17, "y": 4 },
{ "matrix": [6, 15], "x": 18, "y": 4 },
{ "matrix": [5, 0], "x": 0, "y": 5, "w": 1.25 },
{ "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25 },
{ "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25 },
{ "matrix": [5, 5], "x": 3.75, "y": 5, "w": 6.25 },
{ "matrix": [5, 9], "x": 10, "y": 5 },
{ "matrix": [5, 10], "x": 11, "y": 5 },
{ "matrix": [5, 13], "x": 13, "y": 5 },
{ "matrix": [5, 14], "x": 14, "y": 5 },
{ "matrix": [5, 15], "x": 15, "y": 5 },
{ "matrix": [6, 13], "x": 16, "y": 5 },
{ "matrix": [6, 14], "x": 17, "y": 5 }
]
}
}
}
@@ -0,0 +1,65 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rdmctmzt_common.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Base
// Non-Darwin
[0] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, 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_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_GUI, KC_LEFT_ALT, KC_SPACE, KC_RIGHT_ALT, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Base
// Darwin
// - Swapped Super and Alt
// - Fn engaged by default
// - F5 and F6 bound to underglow brightness
[1] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, KC_BRIGHTNESS_DOWN, KC_BRIGHTNESS_UP, KC_MISSION_CONTROL, KC_LAUNCHPAD, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_VALUE_UP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, KC_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_ALT, KC_LEFT_GUI, KC_SPACE, KC_RIGHT_GUI, MO(3), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Fn Engaged
// Non-Darwin
[2] = LAYOUT_tkl_ansi(
_______, KC_MY_COMPUTER, KC_WWW_HOME, KC_CALCULATOR, KC_MAIL, KC_MEDIA_SELECT, KC_MEDIA_STOP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
),
// Fn (Dis)engaged
// Dawin
[3] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[1] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[2] = { ENCODER_CCW_CW(QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP) },
[3] = { ENCODER_CCW_CW(QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_SPEED_UP) }
};
#endif
@@ -0,0 +1,2 @@
// OpenRGB Matrix config.
#define DRIVER_LED_TOTAL RGB_MATRIX_LED_COUNT
@@ -0,0 +1,65 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rdmctmzt_common.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Base
// Non-Darwin
[0] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, 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_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_GUI, KC_LEFT_ALT, KC_SPACE, KC_RIGHT_ALT, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Base
// Darwin
// - Swapped Super and Alt
// - Fn engaged by default
// - F5 and F6 bound to underglow brightness
[1] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, KC_BRIGHTNESS_DOWN, KC_BRIGHTNESS_UP, KC_MISSION_CONTROL, KC_LAUNCHPAD, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_VALUE_UP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, KC_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_ALT, KC_LEFT_GUI, KC_SPACE, KC_RIGHT_GUI, MO(3), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Fn Engaged
// Non-Darwin
[2] = LAYOUT_tkl_ansi(
_______, KC_MY_COMPUTER, KC_WWW_HOME, KC_CALCULATOR, KC_MAIL, KC_MEDIA_SELECT, KC_MEDIA_STOP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
),
// Fn (Dis)engaged
// Dawin
[3] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[1] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[2] = { ENCODER_CCW_CW(QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP) },
[3] = { ENCODER_CCW_CW(QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_SPEED_UP) }
};
#endif
@@ -0,0 +1 @@
OPENRGB_ENABLE = yes
@@ -0,0 +1,65 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "rdmctmzt_common.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Base
// Non-Darwin
[0] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, 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_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_GUI, KC_LEFT_ALT, KC_SPACE, KC_RIGHT_ALT, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Base
// Darwin
// - Swapped Super and Alt
// - Fn engaged by default
// - F5 and F6 bound to underglow brightness
[1] = LAYOUT_tkl_ansi(
QK_GRAVE_ESCAPE, KC_BRIGHTNESS_DOWN, KC_BRIGHTNESS_UP, KC_MISSION_CONTROL, KC_LAUNCHPAD, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_VALUE_UP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, KC_DELETE, KC_HOME, KC_END, KC_PRINT_SCREEN, KC_PAUSE, KC_MUTE,
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, KC_INSERT, KC_NUM_LOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_BACKSLASH, KC_PAGE_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS,
KC_CAPS_LOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_ENTER, KC_PAGE_DOWN, KC_KP_4, KC_KP_5, KC_KP_6,
KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER,
KC_LEFT_CTRL, KC_LEFT_ALT, KC_LEFT_GUI, KC_SPACE, KC_RIGHT_GUI, MO(3), KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_0, KC_KP_DOT
),
// Fn Engaged
// Non-Darwin
[2] = LAYOUT_tkl_ansi(
_______, KC_MY_COMPUTER, KC_WWW_HOME, KC_CALCULATOR, KC_MAIL, KC_MEDIA_SELECT, KC_MEDIA_STOP, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_MUTE, KC_KB_VOLUME_DOWN, KC_KB_VOLUME_UP, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
),
// Fn (Dis)engaged
// Dawin
[3] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, _______, _______, _______, _______, _______,
_______, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, QK_UNDERGLOW_TOGGLE, _______, _______, _______, _______, _______, QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP, QK_UNDERGLOW_HUE_DOWN, _______, _______, _______, _______, _______,
_______, TO(0), TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_MODE_NEXT, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_UNDERGLOW_VALUE_UP, _______, _______, _______, _______,
_______, _______, _______, QK_BAT, _______, KC_NO, QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_VALUE_DOWN, QK_UNDERGLOW_SPEED_UP, _______, _______
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[0] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[1] = { ENCODER_CCW_CW(KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP) },
[2] = { ENCODER_CCW_CW(QK_UNDERGLOW_SATURATION_DOWN, QK_UNDERGLOW_SATURATION_UP) },
[3] = { ENCODER_CCW_CW(QK_UNDERGLOW_SPEED_DOWN, QK_UNDERGLOW_SPEED_UP) }
};
#endif
@@ -0,0 +1 @@
VIA_ENABLE = yes
@@ -0,0 +1,20 @@
/*
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
ChibiOS - Copyright (C) 2021 Stefan Kerkmann
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#define ES32_USB_USE_USB0 true
@@ -0,0 +1,28 @@
# Epomaker Galaxy100 Lite
A 96% RGB-backlit keyboard supporting connections via Bluetooth, 2.4GHz Dongle,
and USB-C Wired.
- Keyboard Maintainer: [Olivia Brooks](https://github.com/Cutieguwu)
- Hardware Supported: Galaxy100 Lite (w/ ES32FS026)
Make example for this keyboard (after setting up your build environment):
make epomaker/galaxy100_lite:default
Flashing example for this keyboard:
make epomaker/galaxy100_lite: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**: Briefly press the button on the back of the PCB -
some may have pads you must short instead
@@ -0,0 +1,44 @@
MCU_FAMILY = ES32
MCU_SERIES = FS026
MCU = cortex-m0
# Cortex-M0/M1 are 6. Cortex-M3/M4/M7 are 7.
ARMV = 6
BOARD = FS026
BOOTLOADER = custom
# Linker script and startup code.
MCU_LDSCRIPT = FS026
MCU_STARTUP = FS026
# Build Options
# change yes or no to disable
EEPROM_CUSTOM = custom
EEPROM_DRIVER = custom
NO_USB_STARTUP_CHECK = yes
BLUETOOTH_CUSTOM = yes
ENCODER_MAP_ENABLE = yes
DEBOUNCE_TYPE = asym_eager_defer_pk
# Include rdr replacement.
VPATH += lib/rdmctmzt_common
EXTRAINCDIRS += $(TOP_DIR)/lib/rdmctmzt_common
SRC += rdmctmzt_common.c \
keyboard_common.c \
three_mode.c \
user_battery.c \
user_eeprom.c \
user_emi.c \
user_led_custom.c \
user_spi.c \
user_system.c
# Include dynamic keymap (dep of rdmctmzt_common.h).
DYNAMIC_KEYMAP_ENABLE = yes
#SRC += quantum/dynamic_keymap.c
#SRC += quantum/nvm/eeprom/nvm_dynamic_keymap.c
# Include FS026 SPI driver.
VPATH += lib/chibios-contrib/os/common/ext/CMSIS/ES32/FS026/md
SRC += lib/chibios-contrib/os/common/ext/CMSIS/ES32/FS026/md/md_spi.c