Merge pull request #3 from Arturkfmnn/galaxy68

Epomaker Galaxy68 added
This commit is contained in:
Carlos Eduardo
2026-01-03 18:43:05 -03:00
committed by GitHub
13 changed files with 948 additions and 0 deletions
@@ -0,0 +1,270 @@
{
"name": "Epomaker Galaxy68",
"vendorId": "0x36B0",
"productId": "0x306A",
"keycodes": ["qmk_lighting"],
"menus":
[
{
"label": "Lighting",
"content":
[
{
"label": "RGB Matrix",
"content":
[
{
"showIf": "{id_qmk_rgb_matrix_effect} != 0",
"label": "Brightness",
"type": "range",
"options": [0, 255],
"content": ["id_qmk_rgb_matrix_brightness", 3, 1]
},
{
"label": "Effect",
"type": "dropdown",
"content": ["id_qmk_rgb_matrix_effect", 3, 2],
"options":
[
[ "none", 0 ],
[ "solid_color", 1 ],
[ "alphas_mods", 2 ],
[ "gradient_up_down", 3 ],
[ "gradient_left_right", 4 ],
[ "breathing", 5 ],
[ "band_sat", 6 ],
[ "band_val", 7 ],
[ "band_pinwheel_sat", 8 ],
[ "band_pinwheel_val", 9 ],
[ "band_spiral_sat", 10 ],
[ "band_spiral_val", 11 ],
[ "cycle_all", 12 ],
[ "cycle_left_right", 13 ],
[ "cycle_up_down", 14 ],
[ "cycle_out_in", 15 ],
[ "cycle_out_in_dual", 16 ],
[ "rainbow_moving_chevron", 17 ],
[ "cycle_pinwheel", 18 ],
[ "cycle_spiral", 19 ],
[ "dual_beacon", 20 ],
[ "rainbow_beacon", 21 ],
[ "rainbow_pinwheels", 22 ],
[ "flower_blooming", 23 ],
[ "raindrops", 24 ],
[ "jellybean_raindrops", 25 ],
[ "hue_breathing", 26 ],
[ "hue_pendulum", 27 ],
[ "hue_wave", 28 ],
[ "pixel_flow", 29 ],
[ "digital_rain", 30 ],
[ "solid_reactive", 31 ],
[ "solid_reactive_wide", 32 ],
[ "solid_reactive_multiwide", 33 ],
[ "solid_reactive_cross", 34 ],
[ "solid_reactive_multicross", 35 ],
[ "solid_reactive_nexus", 36 ],
[ "solid_reactive_multinexus", 37 ],
[ "splash", 38 ],
[ "multisplash", 39 ],
[ "solid_splash", 40 ],
[ "solid_multisplash", 41 ],
[ "starlight", 42 ],
[ "starlight_dual_hue", 43 ],
[ "starlight_dual_sat", 44 ],
[ "riverflow", 45 ]
]
},
{
"showIf": "{id_qmk_rgb_matrix_effect} != 0",
"label": "Effect Speed",
"type": "range",
"options": [0, 255],
"content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
},
{
"showIf": "{id_qmk_rgb_matrix_effect} != 0 && {id_qmk_rgb_matrix_effect} != 24 && {id_qmk_rgb_matrix_effect} != 28 && {id_qmk_rgb_matrix_effect} != 29 && {id_qmk_rgb_matrix_effect} != 32",
"label": "Color",
"type": "color",
"content": ["id_qmk_rgb_matrix_color", 3, 4]
}
]
},
{
"label": "Logo LED",
"content":
[
{
"showIf": "{id_logo_effect} != 0",
"label": "Brightness",
"type": "range",
"options": [0, 255],
"content": ["id_logo_brightness", 1, 1]
},
{
"label": "Effect",
"type": "dropdown",
"content": ["id_logo_effect", 1, 2],
"options":
[
["Off", 0],
["Wave", 1],
["Wave 1", 2],
["Wave 2", 3],
["Fixed Wave", 4],
["Wave RGB", 5],
["Spectrum", 6],
["Breathe", 7],
["Breathe RGB", 8],
["Light", 9]
]
},
{
"showIf": "{id_logo_effect} != 0",
"label": "Effect Speed",
"type": "range",
"options": [0, 4],
"content": ["id_logo_effect_speed", 1, 3]
},
{
"showIf": "{id_logo_effect} != 0 && {id_logo_effect} != 5 && {id_logo_effect} != 6 && {id_logo_effect} != 8",
"label": "Color",
"type": "color",
"content": ["id_logo_color", 1, 4]
}
]
}
]
}
],
"customKeycodes": [
{"name": "2.4G", "title": "Set to 2.4G working mode", "shortName": "MD_24G"},
{"name": "BLE1", "title": "Set to Bluetooth Channel 1 working mode", "shortName": "MD_BLE1"},
{"name": "BLE2", "title": "Set to Bluetooth Channel 2 working mode", "shortName": "MD_BLE2"},
{"name": "BLE3", "title": "Set to Bluetooth Channel 3 working mode", "shortName": "MD_BLE3"},
{"name": "USB", "title": "Set to USB working mode", "shortName": "MD_USB"},
{"name": "BAT", "title": "Querying Battery Status", "shortName": "QK_BAT"},
{"name": "WLO", "title": "Lock WIN", "shortName": "QK_WLO"},
{"name": "SIX_N", "title": "Full-key six-key switch", "shortName": "SIX_N"},
{"name": "CHAG_K", "title": "Toggle F and number", "shortName": "CHAG_K"},
{"name": "KbPrSlp", "title": "Keyboard primary sleep", "shortName": "KbPrSlp" },
{"name": "KbdSecS", "title": "Keyboard secondary sleep", "shortName": "KbdSecS" },
{"name": "QK_DEB", "title": "Number of times that the key shakes off", "shortName": "QK_DEB"},
{"name": "LG_TOG", "title": "Toggle logo lighting on or off", "shortName": "LOGO_TOG"},
{"name": "LG_MO", "title": "Cycle through modes", "shortName": "LOGO_MOD"},
{"name": "LG_RM", "title": "Cycle through modes in reverse", "shortName": "LOGO_RMOD"},
{"name": "LG_HUI", "title": "logo Increase hue", "shortName": "LG_HUI"},
{"name": "LG_HUD", "title": "logo Decrease hue", "shortName": "LG_HUD"},
{"name": "LG_SAI", "title": "logo Increase saturation", "shortName": "LG_SAI"},
{"name": "LG_SAD", "title": "logo Decrease saturation", "shortName": "LG_SAD"},
{"name": "LG_VAI", "title": "logo Increase value (brightness)", "shortName": "LG_VAI"},
{"name": "LG_VAD", "title": "logo Decrease value (brightness)", "shortName": "LG_VAD"},
{"name": "LG_SPI", "title": "logo Increase effect speed", "shortName": "LG_SPI"},
{"name": "LG_SPD", "title": "logo Decrease effect speed", "shortName": "LG_SPD"},
{"name": "DB_TOGG", "title": "Toggle debug mode", "shortName": "DB_TOGG"}
],
"matrix": { "rows": 6, "cols": 16 },
"layouts": {
"keymap": [
[
{ "c":"#777777" },
{ "w":1.0, "h":1.0, "x":0.0 }, "0,0",
{ "c":"#cccccc" },
{ "w":1.0, "h":1.0, "x":0.0 }, "1,1",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,2",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,3",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,4",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,5",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,6",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,7",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,8",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,9",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,10",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,11",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,12",
{ "c":"#aaaaaa" },
{ "w":2.0, "h":1.0, "x":0.0 }, "1,13",
{ "w":1.0, "h":1.0, "x":0.0 }, "1,14",
{"c": "#777777","w": 1.0, "h": 1.0, "x":0.0, "fa": [1,0,0,0,0,0,0,0,0,1]},
"0,15\n\n\n\n\n\n\n\n\n e0 "
],
[
{ "c":"#aaaaaa" },
{ "w":1.5, "h":1.0, "x":0.0 }, "2,0",
{ "c":"#cccccc" },
{ "w":1.0, "h":1.0, "x":0.0 }, "2,1",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,2",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,3",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,4",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,5",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,6",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,7",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,8",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,9",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,10",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,11",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,12",
{ "c":"#aaaaaa" },
{ "w":1.5, "h":1.0, "x":0.0 }, "2,13",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,14",
{ "w":1.0, "h":1.0, "x":0.0 }, "2,15"
],
[
{ "c":"#aaaaaa" },
{ "w":1.75, "h":1.0, "x":0.0 }, "3,0",
{ "c":"#cccccc" },
{ "w":1.0, "h":1.0, "x":0.0 }, "3,1",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,2",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,3",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,4",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,5",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,6",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,7",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,8",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,9",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,10",
{ "w":1.0, "h":1.0, "x":0.0 }, "3,11",
{ "c":"#777777" },
{ "w":2.25, "h":1.0, "x":0.0 }, "3,13"
],
[
{ "c":"#aaaaaa" },
{ "w":2.25, "h":1.0, "x":0.0 }, "4,0",
{ "c":"#cccccc" },
{ "w":1.0, "h":1.0, "x":0.0 }, "4,2",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,3",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,4",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,5",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,6",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,7",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,8",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,9",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,10",
{ "w":1.0, "h":1.0, "x":0.0 }, "4,11",
{ "c":"#aaaaaa" },
{ "w":2.75, "h":1.0, "x":0.0 }, "4,13",
{ "c":"#777777" },
{ "w":1.0, "h":1.0, "x":0.0 }, "4,14"
],
[
{ "c":"#aaaaaa" },
{ "w":1.25, "h":1.0, "x":0.0 }, "5,0",
{ "w":1.25, "h":1.0, "x":0.0 }, "5,1",
{ "w":1.25, "h":1.0, "x":0.0 }, "5,2",
{ "c":"#cccccc" },
{ "w":6.5, "h":1.0, "x":0.0 }, "5,5",
{ "c":"#aaaaaa" },
{ "w":1.25, "h":1.0, "x":0.0 }, "5,9",
{ "w":1.25, "h":1.0, "x":0.0 }, "5,10",
{ "w":1.25, "h":1.0, "x":0.0 }, "5,12",
{ "c":"#777777" },
{ "w":1.0, "h":1.0, "x":0.0 }, "5,13",
{ "w":1.0, "h":1.0, "x":0.0 }, "5,14",
{ "w":1.0, "h":1.0, "x":0.0 }, "5,15"
]
]
}
}
+24
View File
@@ -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>
+101
View File
@@ -0,0 +1,101 @@
/* Copyright 2024 Epomaker
* Copyright 2024 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 */
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
// #define FORCE_NKRO // deprecated in favor of host.default.nkro in keyboard.json
/*
* 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 2
#ifndef NOP_FUDGE
#define NOP_FUDGE 0.4
#endif
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1151
#define EEPROM_SIZE 1152
#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 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 180
#define RGB_MATRIX_SLEEP
// BLE configuration
#define USER_BLE_ID (0X00A5)
#define USER_BLE1_NAME "Galaxy68-1"
#define USER_BLE2_NAME "Galaxy68-2"
#define USER_BLE3_NAME "Galaxy68-3"
/* LED Index Definitions required by lib/rdmctmzt_common/keyboard_common.h */
#define LOGO_LED_ENABLE 1 // Enable Logo LED functionality
#define LED_LOGO_INDEX 68 // Logo LED starting index (68-99 are logo/bottom LEDs)
#define LOGO_LED_COUNT 32 // Number of logo/bottom LEDs
#define LED_CONNECTION_INDEX 67 // Connection type indicator (BLE/2.4G/USB)
#define LED_CAP_INDEX 32 // Caps Lock indicator
#define LED_WIN_L_INDEX 45 // Win Lock indicator
#define LED_BATT_INDEX 38 // Battery status indicator
#define LED_BLE_1_INDEX 17 // BLE 1 indicator
#define LED_BLE_2_INDEX 18 // BLE 2 indicator
#define LED_BLE_3_INDEX 19 // BLE 3 indicator
#define LED_2P4G_INDEX 20 // 2.4G indicator
#define LED_USB_INDEX 21 // USB indicator
+160
View File
@@ -0,0 +1,160 @@
/* Copyright 2024 Epomaker
* Copyright 2024 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"
// ===========================================================================
// Keyboard-specific data
// ===========================================================================
// Battery indicator LED indices (adjust these to match your keyboard layout)
const uint8_t Led_Batt_Index_Tab[BATTERY_LED_COUNT] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// ============================================================================
// LED Matrix Configuration (keyboard-specific)
// ============================================================================
// clang-format off
led_config_t g_led_config = { {
{ 0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED},
{ NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31},
{ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, NO_LED, 44, NO_LED, NO_LED},
{ 45, NO_LED, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57, NO_LED},
{ 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, NO_LED, 62, 63, NO_LED, 64, 65, 66, 67}
}, {
{7, 14}, {21, 14}, {35, 14}, {49, 14}, {63, 14}, {77, 14}, {91, 14}, {105, 14}, {119, 14}, {133, 14}, {147, 14}, {161, 14}, {175, 14}, {189, 14}, {203, 14}, {217, 14},
{7, 26}, {21, 26}, {35, 26}, {49, 26}, {63, 26}, {77, 26}, {91, 26}, {105, 26}, {119, 26}, {133, 26}, {147, 26}, {161, 26}, {175, 26}, {189, 26}, {203, 26}, {217, 26},
{7, 38}, {21, 38}, {35, 38}, {49, 38}, {63, 38}, {77, 38}, {91, 38}, {105, 38}, {119, 38}, {133, 38}, {147, 38}, {161, 38}, {189, 38},
{7, 50}, {35, 50}, {49, 50}, {63, 50}, {77, 50}, {91, 50}, {105, 50}, {119, 50}, {133, 50}, {147, 50}, {161, 50}, {189, 50}, {203, 50},
{7, 62}, {21, 62}, {35, 62}, {77, 62}, {133, 62}, {147, 62}, {161, 62}, {189, 62}, {203, 62}, {217, 62},
{225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65},
{225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65},
{225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65},
{225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65}, {225, 65},
{225, 65}, {225, 65}, {225, 65}, {225, 65}
}, {
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,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
} };
// clang-format on
// ============================================================================
// QMK Callback Functions - Delegate to common implementations
// ============================================================================
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);
}
bool led_update_user(led_t led_state) {
return kb_led_update(led_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) {
#if LOGO_LED_ENABLE
// Process logo LED keycodes - returns true if handled
process_logo_led_keycodes(keycode, record);
#endif
return kb_process_record_common(keycode, record);
}
#if defined(VIA_ENABLE) && defined(LOGO_LED_ENABLE)
// VIA custom channel IDs for Logo LED
enum via_logo_led_value {
id_logo_brightness = 1,
id_logo_effect = 2,
id_logo_effect_speed = 3,
id_logo_color = 4,
};
void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
uint8_t *command_id = &(data[0]);
uint8_t *channel_id = &(data[1]);
uint8_t *value_id = &(data[2]);
uint8_t *value_data = &(data[3]);
// Only handle channel 1 (Logo LED), let other channels pass through
if (*channel_id != 1) {
return;
}
if (*command_id == id_custom_set_value) {
switch (*value_id) {
case id_logo_brightness:
Keyboard_Info.Logo_Brightness = value_data[0];
Save_Flash_Set();
break;
case id_logo_effect:
Keyboard_Info.Logo_Mode = value_data[0];
Save_Flash_Set();
break;
case id_logo_effect_speed:
Keyboard_Info.Logo_Speed = value_data[0];
Save_Flash_Set();
break;
case id_logo_color:
Keyboard_Info.Logo_Hue = value_data[0];
Keyboard_Info.Logo_Saturation = value_data[1];
Save_Flash_Set();
break;
}
} else if (*command_id == id_custom_get_value) {
switch (*value_id) {
case id_logo_brightness:
value_data[0] = Keyboard_Info.Logo_Brightness;
break;
case id_logo_effect:
value_data[0] = Keyboard_Info.Logo_Mode;
break;
case id_logo_effect_speed:
value_data[0] = Keyboard_Info.Logo_Speed;
break;
case id_logo_color:
value_data[0] = Keyboard_Info.Logo_Hue;
value_data[1] = Keyboard_Info.Logo_Saturation;
break;
}
}
}
#endif
+29
View File
@@ -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>
+168
View File
@@ -0,0 +1,168 @@
{
"manufacturer": "Epomaker",
"keyboard_name": "Galaxy68",
"maintainer": "RDMCTMZT",
"bootloader": "custom",
"processor": "FS026",
"usb": {
"vid": "0x36B0",
"pid": "0x306A",
"device_version": "0.0.7"
},
"host": {
"default": {
"nkro": true
}
},
"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" ]
},
"diode_direction": "ROW2COL",
"features": {
"bootmagic": true,
"extrakey": true,
"nkro": true,
"mousekey": 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.0},
{"matrix": [1, 1], "x": 1, "y": 0.0},
{"matrix": [1, 2], "x": 2, "y": 0.0},
{"matrix": [1, 3], "x": 3, "y": 0.0},
{"matrix": [1, 4], "x": 4, "y": 0.0},
{"matrix": [1, 5], "x": 5, "y": 0.0},
{"matrix": [1, 6], "x": 6, "y": 0.0},
{"matrix": [1, 7], "x": 7, "y": 0.0},
{"matrix": [1, 8], "x": 8, "y": 0.0},
{"matrix": [1, 9], "x": 9, "y": 0.0},
{"matrix": [1, 10], "x": 10, "y": 0.0},
{"matrix": [1, 11], "x": 11, "y": 0.0},
{"matrix": [1, 12], "x": 12, "y": 0.0},
{"matrix": [1, 13], "x": 13, "y": 0.0, "w": 2.0},
{"matrix": [1, 14], "x": 15, "y": 0.0},
{"matrix": [1, 15], "x": 16, "y": 0.0},
{"matrix": [0, 15], "x": 16, "y": 0.0},
{"matrix": [2, 0], "x": 0, "y": 1.0, "w": 1.5},
{"matrix": [2, 1], "x": 1.5, "y": 1.0},
{"matrix": [2, 2], "x": 2.5, "y": 1.0},
{"matrix": [2, 3], "x": 3.5, "y": 1.0},
{"matrix": [2, 4], "x": 4.5, "y": 1.0},
{"matrix": [2, 5], "x": 5.5, "y": 1.0},
{"matrix": [2, 6], "x": 6.5, "y": 1.0},
{"matrix": [2, 7], "x": 7.5, "y": 1.0},
{"matrix": [2, 8], "x": 8.5, "y": 1.0},
{"matrix": [2, 9], "x": 9.5, "y": 1.0},
{"matrix": [2, 10], "x": 10.5, "y": 1.0},
{"matrix": [2, 11], "x": 11.5, "y": 1.0},
{"matrix": [2, 12], "x": 12.5, "y": 1.0},
{"matrix": [2, 13], "x": 13.5, "y": 1.0, "w": 1.5},
{"matrix": [2, 14], "x": 15, "y": 1.0},
{"matrix": [2, 15], "x": 16, "y": 1.0},
{"matrix": [3, 0], "x": 0, "y": 2.0, "w": 1.75},
{"matrix": [3, 1], "x": 1.75, "y": 2.0},
{"matrix": [3, 2], "x": 2.75, "y": 2.0},
{"matrix": [3, 3], "x": 3.75, "y": 2.0},
{"matrix": [3, 4], "x": 4.75, "y": 2.0},
{"matrix": [3, 5], "x": 5.75, "y": 2.0},
{"matrix": [3, 6], "x": 6.75, "y": 2.0},
{"matrix": [3, 7], "x": 7.75, "y": 2.0},
{"matrix": [3, 8], "x": 8.75, "y": 2.0},
{"matrix": [3, 9], "x": 9.75, "y": 2.0},
{"matrix": [3, 10], "x": 10.75, "y": 2.0},
{"matrix": [3, 11], "x": 11.75, "y": 2.0},
{"matrix": [3, 13], "x": 12.75, "y": 2.0, "w": 2.25},
{"matrix": [4, 0], "x": 0, "y": 3.0, "w": 2.25},
{"matrix": [4, 2], "x": 2.25, "y": 3.0},
{"matrix": [4, 3], "x": 3.25, "y": 3.0},
{"matrix": [4, 4], "x": 4.25, "y": 3.0},
{"matrix": [4, 5], "x": 5.25, "y": 3.0},
{"matrix": [4, 6], "x": 6.25, "y": 3.0},
{"matrix": [4, 7], "x": 7.25, "y": 3.0},
{"matrix": [4, 8], "x": 8.25, "y": 3.0},
{"matrix": [4, 9], "x": 9.25, "y": 3.0},
{"matrix": [4, 10], "x": 10.25, "y": 3.0},
{"matrix": [4, 11], "x": 11.25, "y": 3.0},
{"matrix": [4, 13], "x": 12.25, "y": 3.0, "w": 2.75},
{"matrix": [4, 14], "x": 15, "y": 3.0},
{"matrix": [5, 0], "x": 0, "y": 4.0, "w": 1.25},
{"matrix": [5, 1], "x": 1.25, "y": 4.0, "w": 1.25},
{"matrix": [5, 2], "x": 2.5, "y": 4.0, "w": 1.25},
{"matrix": [5, 5], "x": 3.75, "y": 4.0, "w": 6.5},
{"matrix": [5, 9], "x": 10.25, "y": 4.0, "w": 1.25},
{"matrix": [5, 10], "x": 11.5, "y": 4.0, "w": 1.25},
{"matrix": [5, 12], "x": 12.75, "y": 4.0, "w": 1.25},
{"matrix": [5, 13], "x": 14, "y": 4.0},
{"matrix": [5, 14], "x": 15, "y": 4.0},
{"matrix": [5, 15], "x": 16, "y": 4.0}
]
}
}
}
@@ -0,0 +1,21 @@
/* 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
// Enable VIA's built-in QMK RGB Matrix Lighting feature (Channel 4)
// The keyboard uses QMK's standard RGB Matrix state tracking with a custom output driver
#define VIA_QMK_RGB_MATRIX_ENABLE 1
@@ -0,0 +1,60 @@
/* Copyright 2024 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 QMK_KEYBOARD_H
#include "rdmctmzt_common.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi(
QK_GESC, 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, KC_END, KC_MUTE,
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_PGDN,
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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(2), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
QK_GESC, 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, KC_END, KC_MUTE,
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_PGDN,
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_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[2] = LAYOUT_tkl_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RM_TOGG, KC_INS, KC_DEL, KC_MUTE,
KC_TAB, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, KC_T, KC_Y, KC_U, RM_SATD, RM_SATU, KC_P, LG_HUD, LG_HUI, RM_HUEU, KC_HOME, KC_END,
KC_CAPS, TO(0), TO(1), KC_D, KC_F, KC_G, DB_TOGG, KC_J, KC_K, KC_L, LG_SAD, LG_SAI, RM_NEXT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, QK_BAT, LG_SPD, LG_SPI, LG_VAD, LG_VAI, LOGO_TOG, LOGO_MOD, RM_VALU,
MW_CH, QK_WLO, KC_LALT, EE_CLR, KC_RALT, KC_NO, KC_RCTL, RM_SPDD, RM_VALD, RM_SPDU
),
[3] = LAYOUT_tkl_ansi(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RM_TOGG, KC_INS, KC_DEL, KC_MUTE,
KC_TAB, MD_BLE1, MD_BLE2, MD_BLE3, MD_24G, KC_T, KC_Y, KC_U, RM_SATD, RM_SATU, KC_P, LG_HUD, LG_HUI, RM_HUEU, KC_HOME, KC_END,
KC_CAPS, TO(0), TO(1), KC_D, KC_F, KC_G, DB_TOGG, KC_J, KC_K, KC_L, LG_SAD, LG_SAI, RM_NEXT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, QK_BAT, LG_SPD, LG_SPI, LG_VAD, LG_VAI, LOGO_TOG, LOGO_MOD, RM_VALU,
MW_CH, QK_WLO, KC_LGUI, EE_CLR, KC_RGUI, KC_NO, KC_RCTL, RM_SPDD, RM_VALD, RM_SPDU
)
};
#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(RM_VALD, RM_VALU) },
[3] = { ENCODER_CCW_CW(RM_VALD, RM_VALU) }
};
#endif
@@ -0,0 +1,2 @@
VIA_ENABLE = yes
EEPROM_DRIVER = custom
+20
View File
@@ -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
+26
View File
@@ -0,0 +1,26 @@
# EPOMAKER GALAXY68
A customizable 67-key keyboard.
* Keyboard Maintainer: [EPOMAKER](https://github.com/Epomaker)
* Hardware Supported: EPOMAKER GALAXY68 PCB with es32fs026 microcontroller
Make example for this keyboard (after setting up your build environment):
make epomaker/galaxy68:default
Flashing example for this keyboard:
1. Hold ESC while plugging it in wired mode to enter flash mode
2. Create the binary with make
3. Copy the binary on the mounted flash drive
4. The flash drive should disappear and the keyboard restarts with the new firmware
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 2 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Esc key) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
+66
View File
@@ -0,0 +1,66 @@
# Rules for Epomaker Galaxy68
# Disable header guard warning for library files we can't modify
EXTRAFLAGS += -Wno-error=header-guard
# MCU configuration
MCU_FAMILY = ES32
MCU_SERIES = FS026
# Bootloader selection
BOOTLOADER = custom
# linker script to use
MCU_LDSCRIPT = FS026
# startup code to use
MCU_STARTUP = FS026
# Board: it should exist either in <chibios>/os/hal/boards/
# or <this_dir>/boards
BOARD = FS026
# FS026 series is Cortex M0
MCU = cortex-m0
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
ARMV = 6
# Build Options
# change yes to no to disable
#
EEPROM_CUSTOM = custom
EEPROM_DRIVER = custom
NO_USB_STARTUP_CHECK = yes
BLUETOOTH_CUSTOM = yes
# Silence header-guard mismatch warnings from upstream CMSIS headers (not editable here).
# Treat header-guard warning as non-fatal so it doesn't stop the build.
ENCODER_MAP_ENABLE = yes
DEBOUNCE_TYPE = asym_eager_defer_pk
# RGB Matrix is configured in keyboard.json with custom driver
# The driver implementation is in user_led_custom.c
# Explicitly define RGB_MATRIX_ENABLE for VIA compatibility
OPT_DEFS += -DRGB_MATRIX_ENABLE
# Include common library (replaces rdr_lib if present)
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_logo_led.c \
user_spi.c \
user_system.c
# Include dynamic keymap support
SRC += quantum/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
+1
View File
@@ -37,6 +37,7 @@ The library manages power states, battery monitoring, LED indicators, mode switc
| TH40 | Epomaker | 40% layout |
| EVO80 | Evoworks | 80% layout, Logo LED |
| Geonix r2 | Chosfox | 40% layout ortho |
| Galaxy 68 | Epomaker | 65% layout |
---