Compare commits

...

72 Commits

Author SHA1 Message Date
Smartmmd
10c43afe54
Merge a108945225 into 9bea332a21 2024-11-20 22:22:13 -08:00
Ryan
9bea332a21
qmk via2json: Improve macro parsing (#24345) 2024-11-21 17:20:05 +11:00
Ryan
8cbcdcac62
qmk new-keymap: validate keymap name (#23420) 2024-11-21 17:18:51 +11:00
Jacky
a108945225
Delete keyboards/mmd/km75/keymaps/via directory 2024-08-27 10:12:07 +08:00
Jacky
70ae2a1992
Merge branch 'qmk:master' into master 2024-08-27 10:10:47 +08:00
Jacky
3582988566
Merge branch 'qmk:master' into master 2024-07-31 13:59:01 +08:00
Jacky
fa3d2624eb update readme.md 2024-07-18 09:18:57 +00:00
Jacky
4ee8e0d365
Merge branch 'qmk:master' into master 2024-07-18 16:06:54 +08:00
Jacky
350f7ca28b
Update readme.md
Picture of MMD KM75
2024-07-17 18:13:44 +08:00
JackyJia73
36f48052b2 Merge branch 'master' of https://github.com/Smartmmd/qmk_firmware 2024-07-16 15:59:20 +08:00
JackyJia73
baa16d8296 wireless code 2024-07-16 15:58:23 +08:00
Jacky
f3e7a3dc8c
Update keyboards/mmd/km75/keyboard.json
Co-authored-by: Joel Challis <git@zvecr.com>
2024-07-12 17:40:52 +08:00
JackyJia73
fb0e1acb58 update rgb effect 2024-07-12 16:24:33 +08:00
JackyJia73
cf1e065508 update RGB MTRIX LAYOUT, KEY LAYOUT 2024-07-12 15:33:47 +08:00
JackyJia73
238ebd96bc Merge branch 'master' of https://github.com/Smartmmd/qmk_firmware 2024-07-12 13:42:49 +08:00
JackyJia73
2871af5316 update hardware location links 2024-07-12 13:42:19 +08:00
Jacky
e57a83250d
Merge branch 'qmk:master' into master 2024-07-12 13:35:42 +08:00
JackyJia73
5de9a8e78f licence headers 2024-07-05 23:06:59 +08:00
Jacky
d06f16d756
Update keyboards/mmd/km75/keyboard.json
Co-authored-by: Joel Challis <git@zvecr.com>
2024-07-05 15:36:32 +02:00
Jacky
bb046d95a9
Update keyboards/mmd/km75/keymaps/via/keymap.c
Co-authored-by: Joel Challis <git@zvecr.com>
2024-07-05 15:36:03 +02:00
Jacky
18ea74f588
Update keyboards/mmd/km75/keymaps/default/keymap.c
Co-authored-by: Joel Challis <git@zvecr.com>
2024-07-05 15:35:08 +02:00
Jacky
634412e69c
Update keyboards/mmd/km75/keyboard.json
Co-authored-by: Joel Challis <git@zvecr.com>
2024-07-05 15:31:14 +02:00
Jacky
7212e61254
Update keyboards/mmd/km75/keyboard.json
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-07-05 15:29:25 +02:00
Jacky
83b72a7ca3
Update keyboards/mmd/km75/rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-07-05 15:28:54 +02:00
Jacky
c80997351b
Update keyboards/mmd/km75/config.h
Co-authored-by: Ryan <fauxpark@gmail.com>
2024-07-05 15:28:12 +02:00
JackyJia73
d279d83f26 TAB change to space 2024-07-04 05:08:56 +08:00
JackyJia73
f29b64fffe endcoder move to keyboard.json 2024-07-04 04:57:34 +08:00
Jacky
b157de1fcb
Update keyboards/mmd/km75/config.h
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-07-03 22:55:21 +02:00
Jacky
760b5d46a7
Update keyboards/mmd/km75/km75.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-07-03 22:42:15 +02:00
Jacky
2cd09a0367
Update keyboards/mmd/km75/km75.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
2024-07-03 22:41:17 +02:00
Smartmmd
0038afa756
Merge branch 'qmk:master' into master 2024-06-29 15:03:16 +08:00
JackyJia73
63d3494f9f Keymaps updates 2024-06-22 19:16:37 +08:00
JackyJia73
1a88922abe Name change to km75 from km17 2024-06-22 19:02:09 +08:00
JackyJia73
af89dcc72f Merge branch 'master' of https://github.com/Smartmmd/qmk_firmware 2024-06-22 18:43:21 +08:00
JackyJia73
108e3d2b5c keyboards name changed, remove non related wireless code (this is a USB only board) 2024-06-22 18:41:36 +08:00
Smartmmd
abfd6bf92d
Update readme.md 2024-06-22 18:19:01 +08:00
Smartmmd
26933be1f7
Create rules.mk 2024-06-22 18:18:37 +08:00
Smartmmd
cb8a1caed0
Create readme.md 2024-06-22 18:18:10 +08:00
Smartmmd
718c9d6e9a
Create mcuconf.h 2024-06-22 18:17:15 +08:00
Smartmmd
66675adec3
Create km75.c 2024-06-22 18:16:50 +08:00
Smartmmd
0965537997
Create keyboard.json 2024-06-22 18:16:21 +08:00
Smartmmd
bda78887a6
Create halconf.h 2024-06-22 18:15:27 +08:00
Smartmmd
11a099f3f4
Create config.h 2024-06-22 18:14:51 +08:00
Smartmmd
2daac2ab14
Create rules.mk 2024-06-22 18:14:08 +08:00
Smartmmd
6d6226952e
Create keymap.c 2024-06-22 18:13:37 +08:00
Smartmmd
84ab499c73
Create keymap.c 2024-06-22 18:12:36 +08:00
Smartmmd
0435cc7ba4
Delete keyboards/mmd/km75 2024-06-22 18:11:39 +08:00
Smartmmd
dbe4c1b1c6
Create km75 2024-06-22 18:02:21 +08:00
Smartmmd
76a2d9dbc2
Delete keyboards/mmd/KM75 2024-06-22 18:01:45 +08:00
Smartmmd
e696340e93
Create KM75 2024-06-22 18:01:22 +08:00
Smartmmd
63c862754d
Update readme.md 2024-06-22 17:59:34 +08:00
JackyJia73
25e3dda81a halconf.h license 2024-06-22 17:09:53 +08:00
JackyJia73
07e15d2d73 default keymap update 2024-06-22 16:59:43 +08:00
JackyJia73
c9f6531131 Add km17 keyboard 2024-06-22 16:53:05 +08:00
Smartmmd
03c64af184
Merge branch 'qmk:master' into master 2024-06-22 16:20:47 +08:00
Smartmmd
fe5ca2c3e3
Merge branch 'qmk:master' into master 2024-06-15 18:40:03 +08:00
Smartmmd
70c7e10bb0
Merge branch 'qmk:master' into master 2024-06-15 09:24:56 +08:00
Smartmmd
7a82636d38
Update readme.md 2024-06-14 18:19:09 +08:00
Smartmmd
b8295041d9
Update readme.md 2024-06-14 18:15:35 +08:00
Smartmmd
4ad729f63a
Update readme.md 2024-06-14 18:01:47 +08:00
Smartmmd
87b764f03f
Create readme.md 2024-06-14 18:00:17 +08:00
Smartmmd
86b36aee8e
Create rules.mk 2024-06-14 17:48:10 +08:00
Smartmmd
0e1dd850ee
Create mcuconf.h 2024-06-14 17:47:38 +08:00
Smartmmd
4b11b8220b
Create mmd-km17.c 2024-06-14 17:46:47 +08:00
Smartmmd
bada9b59fe
Create keyboard.json 2024-06-14 17:44:30 +08:00
Smartmmd
0ff5d3dfe3
Create halconf.h 2024-06-14 17:42:03 +08:00
Smartmmd
48354685d4
Create config.h 2024-06-14 17:41:20 +08:00
Smartmmd
23d1a538e1
Create rules.mk 2024-06-14 17:40:13 +08:00
Smartmmd
d60c64f8f0
Create keymap.c 2024-06-14 17:39:37 +08:00
Smartmmd
04e6ace84b
Create keymap.c 2024-06-14 17:38:04 +08:00
Smartmmd
d093e2b30b
Delete keyboards/mmd directory
delete test file qmk_firmware/keyboards/mmd
2024-06-14 16:18:55 +08:00
Smartmmd
21899b306c
Create keyboard.json 2024-06-14 15:39:07 +08:00
12 changed files with 610 additions and 9 deletions

View File

@ -0,0 +1,124 @@
// /* Copyright 2024 Jacky
// *
// * 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 "uart.h"
#include "ch.h"
#include "hal.h"
#include "host.h"
#include "host_driver.h"
#include "report.h"
#include "smart_ble.h"
static uint8_t sc_ble_leds(void) {
return 0; // TODO: Get LED status BLE
}
static void sc_ble_mouse(report_mouse_t *report) {
static uint8_t last_report[sizeof(report_mouse_t)]={0};
if (!has_mouse_report_changed((report_mouse_t *)last_report, report)) return;
memcpy(last_report,report,sizeof(report_mouse_t));
uart_write(0x55);
uart_write(sizeof(report_mouse_t));
uart_transmit(last_report,sizeof(report_mouse_t));
}
static void sc_ble_extra(report_extra_t *report) {
uart_write(0x55);
uart_write(sizeof(report_extra_t));
uart_transmit((uint8_t *)report,sizeof(report_extra_t));
}
static void sc_ble_keyboard(report_keyboard_t *report) {
uart_write(0x55);
uart_write(0x09);
uart_write(0x01);
uart_transmit((uint8_t *)report,KEYBOARD_REPORT_SIZE);
}
static void sc_send_nkro(report_nkro_t *report)
{
uart_write(0x55);
uart_write(0x12);
uart_transmit((uint8_t *)report,0x12);
}
static host_driver_t *last_host_driver = NULL;
static host_driver_t sc_ble_driver = {
sc_ble_leds, sc_ble_keyboard,sc_send_nkro,sc_ble_mouse, sc_ble_extra
};
void smart_ble_startup(void) {
if (host_get_driver() == &sc_ble_driver) {
return;
}
clear_keyboard();
last_host_driver = host_get_driver();
host_set_driver(&sc_ble_driver);
}
void smart_ble_disconnect(void) {
if (host_get_driver() != &sc_ble_driver) {
return;
}
clear_keyboard();
host_set_driver(last_host_driver);
}
void sc_ble_battary(uint8_t batt_level) {
uart_write(0x55);
uart_write(0x02);
uart_write(0x09);
uart_write(batt_level);
}
void WIRELESS_START(uint32_t mode)
{
uint8_t ble_command[24];
smart_ble_startup();
if(mode<1 || mode>4)
{
mode=1;
}
ble_command[0]=0x55;
ble_command[1]=20;
ble_command[2]=0;
ble_command[3]=mode;
strcpy((char * restrict)(ble_command+4),PRODUCT);
ble_command[strlen(PRODUCT)+4]='-';
ble_command[strlen(PRODUCT)+5]='0' + mode;
ble_command[strlen(PRODUCT)+6]= 0;
uart_transmit(ble_command,sizeof(ble_command));
}
void WIRELESS_STOP(void)
{
smart_ble_disconnect();
uart_write(0x55);
uart_write(0x02);
uart_write(0x00);
uart_write(0x00);
}

View File

@ -0,0 +1,32 @@
// /* Copyright 2024 Jacky
// *
// * 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 "quantum.h"
void sc_ble_battary(uint8_t batt_level);
void WIRELESS_START(uint32_t mode);
void WIRELESS_STOP(void);

View File

@ -0,0 +1,25 @@
/* Copyright 2022 Jacky
*
* 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 WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 1
#define WS2812_PWM_PAL_MODE 2
#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_DMA_CHANNEL 3

View File

@ -0,0 +1,22 @@
/* Copyright 2022 Jacky
*
* 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
#include_next <halconf.h>

View File

@ -0,0 +1,261 @@
{
"manufacturer": "MMD",
"keyboard_name": "MMD-KM75",
"maintainer": "Smartmmd",
"bootloader": "stm32duino",
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{"pin_a": "B3", "pin_b": "A7", "resolution": 2}
]
},
"features": {
"bootmagic": true,
"console": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"encoder": true
},
"matrix_pins": {
"cols": ["B0", "C15", "C14", "C13", "A15", "B7", "B6", "B5", "B4", "B12", "B13", "B14", "A14", "B2", "B15"],
"rows": ["A0", "A1", "A2", "A3", "A4", "A5"]
},
"processor": "STM32F103",
"rgb_matrix": {
"animations": {
"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,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"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
},
"driver": "ws2812",
"layout": [
{ "flags": 4, "matrix": [5, 5], "x": 93, "y": 64 },
{ "flags": 4, "matrix": [5, 10], "x": 150, "y": 64 },
{ "flags": 4, "matrix": [5, 11], "x": 169, "y": 64 },
{ "flags": 4, "matrix": [5, 12], "x": 194, "y": 64 },
{ "flags": 4, "matrix": [5, 13], "x": 209, "y": 64 },
{ "flags": 4, "matrix": [5, 14], "x": 224, "y": 64 },
{ "flags": 4, "matrix": [4, 14], "x": 224, "y": 52 },
{ "flags": 4, "matrix": [4, 13], "x": 213, "y": 52 },
{ "flags": 4, "matrix": [4, 12], "x": 192, "y": 52 },
{ "flags": 4, "matrix": [4, 11], "x": 172, "y": 52 },
{ "flags": 4, "matrix": [4, 10], "x": 156, "y": 52 },
{ "flags": 4, "matrix": [4, 9], "x": 141, "y": 52 },
{ "flags": 4, "matrix": [4, 8], "x": 126, "y": 52 },
{ "flags": 4, "matrix": [4, 7], "x": 111, "y": 52 },
{ "flags": 4, "matrix": [4, 6], "x": 95, "y": 52 },
{ "flags": 4, "matrix": [4, 5], "x": 80, "y": 52 },
{ "flags": 4, "matrix": [4, 4], "x": 65, "y": 52 },
{ "flags": 4, "matrix": [4, 3], "x": 50, "y": 52 },
{ "flags": 4, "matrix": [4, 2], "x": 34, "y": 52 },
{ "flags": 4, "matrix": [5, 2], "x": 40, "y": 64 },
{ "flags": 4, "matrix": [5, 1], "x": 21, "y": 64 },
{ "flags": 4, "matrix": [5, 0], "x": 2, "y": 64 },
{ "flags": 4, "matrix": [4, 0], "x": 10, "y": 52 },
{ "flags": 4, "matrix": [3, 0], "x": 1, "y": 40 },
{ "flags": 4, "matrix": [3, 1], "x": 22, "y": 40 },
{ "flags": 4, "matrix": [3, 2], "x": 37, "y": 40 },
{ "flags": 4, "matrix": [3, 3], "x": 52, "y": 40 },
{ "flags": 4, "matrix": [3, 4], "x": 68, "y": 40 },
{ "flags": 4, "matrix": [3, 5], "x": 83, "y": 40 },
{ "flags": 4, "matrix": [3, 6], "x": 98, "y": 40 },
{ "flags": 4, "matrix": [3, 7], "x": 113,"y": 40 },
{ "flags": 4, "matrix": [3, 8], "x": 129,"y": 40 },
{ "flags": 4, "matrix": [3, 9], "x": 144,"y": 40 },
{ "flags": 4, "matrix": [3, 10], "x": 159,"y": 40 },
{ "flags": 4, "matrix": [3, 11], "x": 174,"y": 40 },
{ "flags": 4, "matrix": [3, 13], "x": 199,"y": 40 },
{ "flags": 4, "matrix": [3, 14], "x": 224,"y": 40 },
{ "flags": 4, "matrix": [2, 14], "x": 224, "y": 28 },
{ "flags": 4, "matrix": [2, 13], "x": 209, "y": 28 },
{ "flags": 4, "matrix": [2, 12], "x": 190, "y": 28 },
{ "flags": 4, "matrix": [2, 11], "x": 175, "y": 28 },
{ "flags": 4, "matrix": [2, 10], "x": 160, "y": 28 },
{ "flags": 4, "matrix": [2, 9], "x": 145, "y": 28 },
{ "flags": 4, "matrix": [2, 8], "x": 129, "y": 28 },
{ "flags": 4, "matrix": [2, 7], "x": 114, "y": 28 },
{ "flags": 4, "matrix": [2, 6], "x": 99, "y": 28 },
{ "flags": 4, "matrix": [2, 5], "x": 84, "y": 28 },
{ "flags": 4, "matrix": [2, 4], "x": 69, "y": 28 },
{ "flags": 4, "matrix": [2, 3], "x": 53, "y": 28 },
{ "flags": 4, "matrix": [2, 2], "x": 38, "y": 28 },
{ "flags": 4, "matrix": [2, 1], "x": 23, "y": 28 },
{ "flags": 4, "matrix": [2, 0], "x": 4, "y": 28 },
{ "flags": 4, "matrix": [1, 0], "x": 0, "y": 15 },
{ "flags": 4, "matrix": [1, 1], "x": 11, "y": 15 },
{ "flags": 4, "matrix": [1, 2], "x": 26, "y": 15 },
{ "flags": 4, "matrix": [1, 3], "x": 41, "y": 15 },
{ "flags": 4, "matrix": [1, 4], "x": 56, "y": 15 },
{ "flags": 4, "matrix": [1, 5], "x": 72, "y": 15 },
{ "flags": 4, "matrix": [1, 6], "x": 87, "y": 15 },
{ "flags": 4, "matrix": [1, 7], "x": 102, "y": 15 },
{ "flags": 4, "matrix": [1, 8], "x": 117, "y": 15 },
{ "flags": 4, "matrix": [1, 9], "x": 133, "y": 15 },
{ "flags": 4, "matrix": [1, 10], "x": 148, "y": 15 },
{ "flags": 4, "matrix": [1, 11], "x": 163, "y": 15 },
{ "flags": 4, "matrix": [1, 12], "x": 178, "y": 15 },
{ "flags": 4, "matrix": [1, 13], "x": 201, "y": 15 },
{ "flags": 4, "matrix": [1, 14], "x": 224, "y": 15 },
{ "flags": 4, "matrix": [0, 13], "x": 213, "y": 0 },
{ "flags": 4, "matrix": [0, 12], "x": 194, "y": 0 },
{ "flags": 4, "matrix": [0, 11], "x": 179, "y": 0 },
{ "flags": 4, "matrix": [0, 10], "x": 164, "y": 0 },
{ "flags": 4, "matrix": [0, 9], "x": 149, "y": 0 },
{ "flags": 4, "matrix": [0, 8], "x": 129, "y": 0 },
{ "flags": 4, "matrix": [0, 7], "x": 114, "y": 0 },
{ "flags": 4, "matrix": [0, 6], "x": 99, "y": 0 },
{ "flags": 4, "matrix": [0, 5], "x": 84, "y": 0 },
{ "flags": 4, "matrix": [0, 4], "x": 65, "y": 0 },
{ "flags": 4, "matrix": [0, 3], "x": 50, "y": 0 },
{ "flags": 4, "matrix": [0, 2], "x": 34, "y": 0 },
{ "flags": 4, "matrix": [0, 1], "x": 19, "y": 0 },
{ "flags": 4, "matrix": [0, 0], "x": 0, "y": 0 }
]
},
"url": "www.i-chip.cn",
"usb": {
"device_version": "0.0.1",
"force_nkro": true,
"pid": "0x3021",
"vid": "0x28E9"
},
"ws2812": {
"driver": "pwm",
"pin": "A6"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix":[0, 0],"x": 0,"y": 0},
{"matrix":[0, 1],"x": 1.25,"y": 0},
{"matrix":[0, 2],"x": 2.25, "y": 0},
{"matrix":[0, 3],"x": 3.25, "y": 0},
{"matrix":[0, 4],"x": 4.25, "y": 0},
{"matrix":[0, 5],"x": 5.5, "y": 0},
{"matrix":[0, 6],"x": 6.5, "y": 0},
{"matrix":[0, 7],"x": 7.5, "y": 0},
{"matrix":[0, 8],"x": 8.5, "y": 0},
{"matrix":[0, 9],"x": 9.75, "y": 0},
{"matrix":[0, 10],"x": 10.75, "y": 0},
{"matrix":[0, 11],"x": 11.75, "y": 0},
{"matrix":[0, 12],"x": 12.75, "y": 0},
{"matrix":[0, 13],"x": 14, "y": 0},
{"matrix":[0, 14],"x": 15, "y": 0},
{"matrix":[1, 0],"x": 0, "y": 1.25},
{"matrix":[1, 1],"x": 1, "y": 1.25},
{"matrix":[1, 2],"x": 2, "y": 1.25},
{"matrix":[1, 3],"x": 3, "y": 1.25},
{"matrix":[1, 4],"x": 4, "y": 1.25},
{"matrix":[1, 5],"x": 5, "y": 1.25},
{"matrix":[1, 6],"x": 6, "y": 1.25},
{"matrix":[1, 7],"x": 7, "y": 1.25},
{"matrix":[1, 8],"x": 8, "y": 1.25},
{"matrix":[1, 9],"x": 9, "y": 1.25},
{"matrix":[1, 10],"x": 10, "y": 1.25},
{"matrix":[1, 11],"x": 11, "y": 1.25},
{"matrix":[1, 12],"x": 12, "y": 1.25},
{"matrix":[1, 13],"x": 13, "y": 1.25,"w":2},
{"matrix":[1, 14],"x": 15, "y": 1.25},
{"matrix":[2, 0],"x": 0, "y": 2.25,"w":1.5},
{"matrix":[2, 1],"x": 1.5, "y": 2.25},
{"matrix":[2, 2],"x": 2.5, "y": 2.25},
{"matrix":[2, 3],"x": 3.5, "y": 2.25},
{"matrix":[2, 4],"x": 4.5, "y": 2.25},
{"matrix":[2, 5],"x": 5.5, "y": 2.25},
{"matrix":[2, 6],"x": 6.5, "y": 2.25},
{"matrix":[2, 7],"x": 7.5, "y": 2.25},
{"matrix":[2, 8],"x": 8.5, "y": 2.25},
{"matrix":[2, 9],"x": 9.5, "y": 2.25},
{"matrix":[2, 10],"x": 10.5, "y": 2.25},
{"matrix":[2, 11],"x": 11.5, "y": 2.25},
{"matrix":[2, 12],"x": 12.5, "y": 2.25},
{"matrix":[2, 13],"x": 13.5, "y": 2.25,"w":1.5},
{"matrix":[2, 14],"x": 15, "y": 2.25},
{"matrix":[3, 0],"x": 0, "y": 3.25,"w":1.75},
{"matrix":[3, 1],"x": 1.75, "y": 3.25},
{"matrix":[3, 2],"x": 2.75, "y": 3.25},
{"matrix":[3, 3],"x": 3.75, "y": 3.25},
{"matrix":[3, 4],"x": 4.75, "y": 3.25},
{"matrix":[3, 5],"x": 5.75, "y": 3.25},
{"matrix":[3, 6],"x": 6.75, "y": 3.25},
{"matrix":[3, 7],"x": 7.75, "y": 3.25},
{"matrix":[3, 8],"x": 8.75, "y": 3.25},
{"matrix":[3, 9],"x": 9.75, "y": 3.25},
{"matrix":[3, 10],"x": 10.75, "y": 3.25},
{"matrix":[3, 11],"x": 11.75, "y": 3.25},
{"matrix":[3, 13],"x": 12.75, "y": 3.25,"w":2.25},
{"matrix":[3, 14],"x": 15, "y": 3.25},
{"matrix":[4, 0],"x": 0, "y": 4.25,"w":2.25},
{"matrix":[4, 2],"x": 2.25, "y": 4.25},
{"matrix":[4, 3],"x": 3.25, "y": 4.25},
{"matrix":[4, 4],"x": 4.25, "y": 4.25},
{"matrix":[4, 5],"x": 5.25, "y": 4.25},
{"matrix":[4, 6],"x": 6.25, "y": 4.25},
{"matrix":[4, 7],"x": 7.25, "y": 4.25},
{"matrix":[4, 8],"x": 8.25, "y": 4.25},
{"matrix":[4, 9],"x": 9.25, "y": 4.25},
{"matrix":[4, 10],"x": 10.25, "y": 4.25},
{"matrix":[4, 11],"x": 11.25, "y": 4.25},
{"matrix":[4, 12],"x": 12.25, "y": 4.25,"w":1.75},
{"matrix":[4, 13],"x": 14, "y": 4.25},
{"matrix":[4, 14],"x": 15, "y": 4.25},
{"matrix":[5, 0],"x": 0, "y": 5.25,"w":1.25},
{"matrix":[5, 1],"x": 1.25, "y": 5.25,"w":1.25},
{"matrix":[5, 2],"x": 2.5, "y": 5.25,"w":1.25},
{"matrix":[5, 5],"x": 3.75, "y": 5.25,"w":6.25},
{"matrix":[5, 10],"x": 10, "y": 5.25,"w":1.25},
{"matrix":[5, 11],"x": 11.25, "y": 5.25,"w":1.25},
{"matrix":[5, 12],"x": 13, "y": 5.25},
{"matrix":[5, 13],"x": 14, "y": 5.25},
{"matrix":[5, 14],"x": 15, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,38 @@
/* Copyright 2022 Jacky
*
* 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(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
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_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
_______, KC_BRID, KC_BRIU, LGUI(KC_TAB), LGUI(KC_E), KC_MAIL, KC_WHOM, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, RGB_HUD, RGB_MOD, RGB_TOG,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, _______,
_______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI
)
};

25
keyboards/mmd/km75/km75.c Normal file
View File

@ -0,0 +1,25 @@
/* Copyright 2022 Jacky
*
* 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 keyboard_pre_init_kb(void) {
gpio_set_pin_output(A8);
gpio_write_pin_high(A8);
keyboard_pre_init_user();
}

View File

@ -0,0 +1,22 @@
/* Copyright 2022 Jacky
*
* 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

View File

@ -0,0 +1,23 @@
# MMD-KM75
![](https://raw.githubusercontent.com/JackyJia73/img/main/IMG_20240716_173524.jpg)
* A customizable soldering 75% keyboard.
* Keyboard Maintainer: [MMD](https://github.com/Smartmmd)
* Hardware Supported: [i-game](http://www.i-game.tech)
* Hardware Availability: [i-game](http://www.i-game.tech)
Make example for this keyboard (after setting up your build environment):
make mmd/km75:default
Flashing example for this keyboard:
make mmd/km75:default:flash
See the build environment setup and the make instructions for more information. Brand new to QMK? Start with our Complete Newbs Guide.
## Bootloader ESC the bootloader in 3 ways:
* **Bootmagic reset: Hold down Enter in the keyboard then replug
* **Physical reset button: Briefly press the button on the back of the PCB
* **Keycode in layout: Press the key mapped to QK_BOOT

View File

@ -0,0 +1 @@
MCU_LDSCRIPT = STM32F103xB

View File

@ -1,5 +1,6 @@
"""This script automates the copying of the default keymap into your own keymap. """This script automates the copying of the default keymap into your own keymap.
""" """
import re
import shutil import shutil
from milc import cli from milc import cli
@ -13,6 +14,13 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.userspace import UserspaceDefs from qmk.userspace import UserspaceDefs
def validate_keymap_name(name):
"""Returns True if the given keymap name contains only a-z, 0-9 and underscore characters.
"""
regex = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_]+$')
return bool(regex.match(name))
def prompt_keyboard(): def prompt_keyboard():
prompt = """{fg_yellow}Select Keyboard{style_reset_all} prompt = """{fg_yellow}Select Keyboard{style_reset_all}
If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}. If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}.
@ -60,6 +68,10 @@ def new_keymap(cli):
cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!') cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!')
return False return False
if not validate_keymap_name(user_name):
cli.log.error('Keymap names must contain only {fg_cyan}a-z{fg_reset}, {fg_cyan}0-9{fg_reset} and {fg_cyan}_{fg_reset}! Please choose a different name.')
return False
if keymap_path_new.exists(): if keymap_path_new.exists():
cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.') cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.')
return False return False

View File

@ -29,6 +29,7 @@ def _convert_macros(via_macros):
if len(via_macros) == 0: if len(via_macros) == 0:
return list() return list()
split_regex = re.compile(r'(}\,)|(\,{)') split_regex = re.compile(r'(}\,)|(\,{)')
macro_group_regex = re.compile(r'({.+?})')
macros = list() macros = list()
for via_macro in via_macros: for via_macro in via_macros:
# Split VIA macro to its elements # Split VIA macro to its elements
@ -38,13 +39,28 @@ def _convert_macros(via_macros):
macro_data = list() macro_data = list()
for m in macro: for m in macro:
if '{' in m or '}' in m: if '{' in m or '}' in m:
# Found keycode(s) # Split macro groups
keycodes = m.split(',') macro_groups = macro_group_regex.findall(m)
# Remove whitespaces and curly braces from around keycodes for macro_group in macro_groups:
keycodes = list(map(lambda s: s.strip(' {}'), keycodes)) # Remove whitespaces and curly braces from around group
# Remove the KC prefix macro_group = macro_group.strip(' {}')
keycodes = list(map(lambda s: s.replace('KC_', ''), keycodes))
macro_data.append({"action": "tap", "keycodes": keycodes}) macro_action = 'tap'
macro_keycodes = []
if macro_group[0] == '+':
macro_action = 'down'
macro_keycodes.append(macro_group[1:])
elif macro_group[0] == '-':
macro_action = 'up'
macro_keycodes.append(macro_group[1:])
else:
macro_keycodes.extend(macro_group.split(',') if ',' in macro_group else [macro_group])
# Remove the KC prefixes
macro_keycodes = list(map(lambda s: s.replace('KC_', ''), macro_keycodes))
macro_data.append({"action": macro_action, "keycodes": macro_keycodes})
else: else:
# Found text # Found text
macro_data.append(m) macro_data.append(m)
@ -54,13 +70,13 @@ def _convert_macros(via_macros):
def _fix_macro_keys(keymap_data): def _fix_macro_keys(keymap_data):
macro_no = re.compile(r'MACRO0?([0-9]{1,2})') macro_no = re.compile(r'MACRO0?\(([0-9]{1,2})\)')
for i in range(0, len(keymap_data)): for i in range(0, len(keymap_data)):
for j in range(0, len(keymap_data[i])): for j in range(0, len(keymap_data[i])):
kc = keymap_data[i][j] kc = keymap_data[i][j]
m = macro_no.match(kc) m = macro_no.match(kc)
if m: if m:
keymap_data[i][j] = f'MACRO_{m.group(1)}' keymap_data[i][j] = f'MC_{m.group(1)}'
return keymap_data return keymap_data