Added support for Sofle Choc Pro by Keebart (#853)

* add sofle_choc_pro keyboard by keebart

* better bootloader instructions

* remove duplicate line of code

* fix rgb matrix

---------

Co-authored-by: Alexei Torgashov <alexei.torgashov@yahoo.de>
This commit is contained in:
André Cruz 2025-02-16 21:11:11 +00:00 committed by GitHub
parent 1c129915f0
commit f4cc9f4583
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 724 additions and 0 deletions

View file

@ -0,0 +1,24 @@
#pragma once
#define SERIAL_USART_TX_PIN GP12
#define USB_VBUS_PIN GP13
#define SPLIT_HAND_PIN GP21
#define I2C_DRIVER I2CD1
#define OLED_UPDATE_INTERVAL 50
#define I2C1_SDA_PIN GP6
#define I2C1_SCL_PIN GP7
#define RGB_MATRIX_SLEEP
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#define USB_SUSPEND_WAKEUP_DELAY 200
/* RP2040- and hardware-specific config */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
#define SPLIT_LAYER_STATE_ENABLE
#define SPLIT_LED_STATE_ENABLE

View file

@ -0,0 +1,5 @@
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,259 @@
{
"manufacturer": "Keebart",
"keyboard_name": "sofle_choc_pro",
"url": "https://keebart.com/products/sofle",
"maintainer": "Keebart",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"nkro": true,
"oled": true,
"rgblight": false,
"rgb_matrix": true,
"mousekey": true,
"encoder": true
},
"matrix_pins": {
"cols": [ "GP27", "GP26", "GP25", "GP24", "GP19", "GP18" ],
"rows": [ "GP0", "GP1", "GP2", "GP3", "GP4" ]
},
"processor": "RP2040",
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"encoder": {
"rotary": [ { "pin_a": "GP23", "pin_b": "GP22" }, ]
},
"bootmagic": {
"enabled": true,
"matrix": [ 0, 0 ]
},
"split": {
"enabled": true,
"bootmagic": {
"matrix": [ 5, 0 ]
},
"matrix_pins": {
"right": {
"cols": [ "GP27", "GP26", "GP25", "GP24", "GP19", "GP18" ],
"rows": [ "GP0", "GP1", "GP2", "GP3", "GP4" ]
}
},
"encoder": {
"right": {
"rotary": [ { "pin_a": "GP23", "pin_b": "GP22" }, ]
}
},
"transport": {
"sync": {
"matrix_state": true
},
"watchdog": true
}
},
"layouts": {
"LAYOUT_split_4x6_5": {
"layout": [
{ "matrix": [ 0, 0 ], "x": 0, "y": 0.375 },
{ "matrix": [ 0, 1 ], "x": 1, "y": 0.375 },
{ "matrix": [ 0, 2 ], "x": 2, "y": 0.125 },
{ "matrix": [ 0, 3 ], "x": 3, "y": 0 },
{ "matrix": [ 0, 4 ], "x": 4, "y": 0.125 },
{ "matrix": [ 0, 5 ], "x": 5, "y": 0.25 },
{ "matrix": [ 5, 5 ], "x": 9, "y": 0.25 },
{ "matrix": [ 5, 4 ], "x": 10, "y": 0.125 },
{ "matrix": [ 5, 3 ], "x": 11, "y": 0 },
{ "matrix": [ 5, 2 ], "x": 12, "y": 0.125 },
{ "matrix": [ 5, 1 ], "x": 13, "y": 0.375 },
{ "matrix": [ 5, 0 ], "x": 14, "y": 0.375 },
{ "matrix": [ 1, 0 ], "x": 0, "y": 1.375 },
{ "matrix": [ 1, 1 ], "x": 1, "y": 1.375 },
{ "matrix": [ 1, 2 ], "x": 2, "y": 1.125 },
{ "matrix": [ 1, 3 ], "x": 3, "y": 1 },
{ "matrix": [ 1, 4 ], "x": 4, "y": 1.125 },
{ "matrix": [ 1, 5 ], "x": 5, "y": 1.25 },
{ "matrix": [ 6, 5 ], "x": 9, "y": 1.25 },
{ "matrix": [ 6, 4 ], "x": 10, "y": 1.125 },
{ "matrix": [ 6, 3 ], "x": 11, "y": 1 },
{ "matrix": [ 6, 2 ], "x": 12, "y": 1.125 },
{ "matrix": [ 6, 1 ], "x": 13, "y": 1.375 },
{ "matrix": [ 6, 0 ], "x": 14, "y": 1.375 },
{ "matrix": [ 2, 0 ], "x": 0, "y": 2.375 },
{ "matrix": [ 2, 1 ], "x": 1, "y": 2.375 },
{ "matrix": [ 2, 2 ], "x": 2, "y": 2.125 },
{ "matrix": [ 2, 3 ], "x": 3, "y": 2 },
{ "matrix": [ 2, 4 ], "x": 4, "y": 2.125 },
{ "matrix": [ 2, 5 ], "x": 5, "y": 2.25 },
{ "matrix": [ 7, 5 ], "x": 9, "y": 2.25 },
{ "matrix": [ 7, 4 ], "x": 10, "y": 2.125 },
{ "matrix": [ 7, 3 ], "x": 11, "y": 2 },
{ "matrix": [ 7, 2 ], "x": 12, "y": 2.125 },
{ "matrix": [ 7, 1 ], "x": 13, "y": 2.375 },
{ "matrix": [ 7, 0 ], "x": 14, "y": 2.375 },
{ "matrix": [ 3, 0 ], "x": 0, "y": 3.375 },
{ "matrix": [ 3, 1 ], "x": 1, "y": 3.375 },
{ "matrix": [ 3, 2 ], "x": 2, "y": 3.125 },
{ "matrix": [ 3, 3 ], "x": 3, "y": 3 },
{ "matrix": [ 3, 4 ], "x": 4, "y": 3.125 },
{ "matrix": [ 3, 5 ], "x": 5, "y": 3.25 },
{ "matrix": [ 4, 5 ], "x": 6, "y": 2.75 },
{ "matrix": [ 9, 5 ], "x": 8, "y": 2.75 },
{ "matrix": [ 8, 5 ], "x": 9, "y": 3.25 },
{ "matrix": [ 8, 4 ], "x": 10, "y": 3.125 },
{ "matrix": [ 8, 3 ], "x": 11, "y": 3 },
{ "matrix": [ 8, 2 ], "x": 12, "y": 3.125 },
{ "matrix": [ 8, 1 ], "x": 13, "y": 3.375 },
{ "matrix": [ 8, 0 ], "x": 14, "y": 3.375 },
{ "matrix": [ 4, 0 ], "x": 1.5, "y": 4.375 },
{ "matrix": [ 4, 1 ], "x": 2.5, "y": 4.25 },
{ "matrix": [ 4, 2 ], "x": 3.5, "y": 4.25 },
{ "matrix": [ 4, 3 ], "x": 4.5, "y": 4.375 },
{ "matrix": [ 4, 4 ], "x": 6, "y": 4.375, "h": 1.5 },
{ "matrix": [ 9, 4 ], "x": 8, "y": 4.375, "h": 1.5 },
{ "matrix": [ 9, 3 ], "x": 9.5, "y": 4.375 },
{ "matrix": [ 9, 2 ], "x": 10.5, "y": 4.25 },
{ "matrix": [ 9, 1 ], "x": 11.5, "y": 4.25 },
{ "matrix": [ 9, 0 ], "x": 12.5, "y": 4.375 }
]
}
},
"ws2812": {
"driver": "vendor",
"pin": "GP10"
},
"rgblight": {
"led_count": 60,
"split": true,
"split_count": [ 30, 30 ],
"max_brightness": 50,
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"rgb_matrix": {
"driver": "ws2812",
"max_brightness": 50,
"animations": {
"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,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": 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
},
"split_count": [30, 30],
"layout": [
{"flags":4,"matrix":[4,5],"x":99,"y":38},
{"flags":4,"matrix":[4,4],"x":91,"y":64},
{"flags":4,"matrix":[4,3],"x":77,"y":60},
{"flags":4,"matrix":[3,5],"x":82,"y":45},
{"flags":4,"matrix":[2,5],"x":82,"y":31},
{"flags":4,"matrix":[1,5],"x":82,"y":17},
{"flags":4,"matrix":[0,5],"x":82,"y":3},
{"flags":4,"matrix":[0,4],"x":66,"y":2},
{"flags":4,"matrix":[1,4],"x":66,"y":16},
{"flags":4,"matrix":[2,4],"x":66,"y":29},
{"flags":4,"matrix":[3,4],"x":66,"y":43},
{"flags":4,"matrix":[4,2],"x":58,"y":59},
{"flags":4,"matrix":[4,1],"x":41,"y":59},
{"flags":4,"matrix":[3,3],"x":49,"y":41},
{"flags":4,"matrix":[2,3],"x":49,"y":28},
{"flags":4,"matrix":[1,3],"x":49,"y":16},
{"flags":4,"matrix":[0,3],"x":49,"y":0},
{"flags":4,"matrix":[0,2],"x":33,"y":2},
{"flags":4,"matrix":[1,2],"x":33,"y":16},
{"flags":4,"matrix":[2,2],"x":33,"y":29},
{"flags":4,"matrix":[3,2],"x":33,"y":43},
{"flags":4,"matrix":[4,0],"x":25,"y":60},
{"flags":4,"matrix":[3,1],"x":16,"y":47},
{"flags":4,"matrix":[2,1],"x":16,"y":33},
{"flags":4,"matrix":[1,1],"x":16,"y":19},
{"flags":4,"matrix":[0,1],"x":16,"y":5},
{"flags":4,"matrix":[0,0],"x":0,"y":5},
{"flags":4,"matrix":[1,0],"x":0,"y":19},
{"flags":4,"matrix":[2,0],"x":0,"y":33},
{"flags":4,"matrix":[3,0],"x":0,"y":47},
{"flags":4,"matrix":[9,5],"x":125,"y":38},
{"flags":4,"matrix":[9,4],"x":134,"y":64},
{"flags":4,"matrix":[9,3],"x":147,"y":60},
{"flags":4,"matrix":[8,5],"x":142,"y":45},
{"flags":4,"matrix":[7,5],"x":142,"y":31},
{"flags":4,"matrix":[6,5],"x":142,"y":17},
{"flags":4,"matrix":[5,5],"x":142,"y":3},
{"flags":4,"matrix":[5,4],"x":158,"y":2},
{"flags":4,"matrix":[6,4],"x":158,"y":16},
{"flags":4,"matrix":[7,4],"x":158,"y":29},
{"flags":4,"matrix":[8,4],"x":158,"y":43},
{"flags":4,"matrix":[9,2],"x":166,"y":59},
{"flags":4,"matrix":[9,1],"x":183,"y":59},
{"flags":4,"matrix":[8,3],"x":175,"y":41},
{"flags":4,"matrix":[7,3],"x":175,"y":28},
{"flags":4,"matrix":[6,3],"x":175,"y":16},
{"flags":4,"matrix":[5,3],"x":175,"y":0},
{"flags":4,"matrix":[5,2],"x":191,"y":2},
{"flags":4,"matrix":[6,2],"x":191,"y":16},
{"flags":4,"matrix":[7,2],"x":191,"y":29},
{"flags":4,"matrix":[8,2],"x":191,"y":43},
{"flags":4,"matrix":[9,0],"x":199,"y":60},
{"flags":4,"matrix":[8,1],"x":208,"y":47},
{"flags":4,"matrix":[7,1],"x":208,"y":33},
{"flags":4,"matrix":[6,1],"x":208,"y":19},
{"flags":4,"matrix":[5,1],"x":208,"y":5},
{"flags":4,"matrix":[5,0],"x":224,"y":5},
{"flags":4,"matrix":[6,0],"x":224,"y":19},
{"flags":4,"matrix":[7,0],"x":224,"y":33},
{"flags":4,"matrix":[8,0],"x":224,"y":47}
]
}
}

View file

@ -0,0 +1,36 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | CAPS | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
* |------+------+------+------+------+------| Mute | | Pause |------+------+------+------+------+------|
* |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LCTL | LALT | LCMD | LGUI | /Enter / \Space \ | RGUI | DEL | RALT | RCTL |
* | | | | LT1 |/ / \ \ | LT2 | | | |
* `----------------------------------' '------''---------------------------'
*/
LAYOUT_split_4x6_5(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LALT, KC_LCMD, LT(1,KC_LGUI), KC_ENT, KC_SPC, LT(2,KC_RGUI), KC_DEL, KC_RALT, KC_RCTL
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
{ ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif

View file

@ -0,0 +1 @@
ENCODER_MAP_ENABLE = yes

View file

@ -0,0 +1,9 @@
#define VIAL_KEYBOARD_UID \
{ 0x4F, 0x2D, 0x5A, 0x8A, 0x49, 0x7C, 0xDF, 0x1D }
#define VIAL_UNLOCK_COMBO_ROWS \
{ 0, 5 }
#define VIAL_UNLOCK_COMBO_COLS \
{ 0, 0 }
#define DYNAMIC_KEYMAP_LAYER_COUNT 10

View file

@ -0,0 +1,29 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* QWERTY
* ,-----------------------------------------. ,-----------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | CAPS | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
* |------+------+------+------+------+------| Mute | | Pause |------+------+------+------+------+------|
* |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LCTL | LALT | LCMD | LGUI | /Enter / \Space \ | RGUI | DEL | RALT | RCTL |
* | | | | LT1 |/ / \ \ | LT2 | | | |
* `----------------------------------' '------''---------------------------'
*/
LAYOUT_split_4x6_5(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LCTL, KC_LALT, KC_LCMD, LT(1, KC_LGUI), KC_ENT, KC_SPC, LT(2, KC_RGUI), KC_DEL, KC_RALT, KC_RCTL)};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT)},
};
#endif

View file

@ -0,0 +1,6 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
VIALRGB_ENABLE = yes
ENCODER_MAP_ENABLE = yes
CAPS_WORD_ENABLE = yes
REPEAT_KEY_ENABLE = yes

View file

@ -0,0 +1,318 @@
{
"name": "Sofle Choc Pro",
"matrix": {
"rows": 10,
"cols": 6
},
"lighting": "vialrgb",
"layouts": {
"keymap": [
[
{
"x": 3
},
"0,3",
{
"x": 8.25
},
"5,3"
],
[
{
"y": -0.87,
"x": 2
},
"0,2",
{
"x": 1
},
"0,4",
{
"x": 6.25
},
"5,4",
{
"x": 1
},
"5,2"
],
[
{
"y": -0.88,
"x": 5
},
"0,5"
],
[
{
"y": -1,
"x": 10.25
},
"5,5"
],
[
{
"y": -0.87
},
"0,0",
"0,1",
{
"x": 12.25
},
"5,1",
"5,0"
],
[
{
"y": -0.38,
"x": 3
},
"1,3"
],
[
{
"y": -1,
"x": 12.25
},
"6,3"
],
[
{
"y": -0.8700000000000001,
"x": 2
},
"1,2",
{
"x": 1
},
"1,4",
{
"x": 6.25
},
"6,4",
{
"x": 1
},
"6,2"
],
[
{
"y": -0.8799999999999999,
"x": 5
},
"1,5",
{
"x": 4.25
},
"6,5"
],
[
{
"y": -0.8700000000000001
},
"1,0",
"1,1",
{
"x": 12.25
},
"6,1",
"6,0"
],
[
{
"y": -0.6299999999999999,
"x": 6
},
"0,0\n\n\n\n\n\n\n\n\ne",
"0,1\n\n\n\n\n\n\n\n\ne",
{
"x": 0.25
},
"1,0\n\n\n\n\n\n\n\n\ne",
"1,1\n\n\n\n\n\n\n\n\ne"
],
[
{
"y": -0.75,
"x": 3
},
"2,3",
{
"x": 8.25
},
"7,3"
],
[
{
"y": -0.8700000000000001,
"x": 2
},
"2,2",
{
"x": 1
},
"2,4",
{
"x": 6.25
},
"7,4",
{
"x": 1
},
"7,2"
],
[
{
"y": -0.8799999999999999,
"x": 5
},
"2,5",
{
"x": 4.25
},
"7,5"
],
[
{
"y": -0.8700000000000001
},
"2,0",
"2,1",
{
"x": 12.25
},
"7,1",
"7,0"
],
[
{
"y": -0.6299999999999999,
"x": 6.5
},
"4,5",
{
"x": 1.25
},
"9,5"
],
[
{
"y": -0.75,
"x": 3
},
"3,3",
{
"x": 8.25
},
"8,3"
],
[
{
"y": -0.8700000000000001,
"x": 2
},
"3,2",
{
"x": 1
},
"3,4",
{
"x": 6.25
},
"8,4",
{
"x": 1
},
"8,2"
],
[
{
"y": -0.8799999999999999,
"x": 5
},
"3,5",
{
"x": 4.25
},
"8,5"
],
[
{
"y": -0.8700000000000001
},
"3,0",
"3,1",
{
"x": 12.25
},
"8,1",
"8,0"
],
[
{
"y": -0.1299999999999999,
"x": 2.5
},
"4,1",
"4,2",
{
"x": 7.25
},
"9,2",
"9,1"
],
[
{
"y": -0.8700000000000001,
"x": 1.5
},
"4,0",
{
"x": 11.25
},
"9,0"
],
[
{
"r": 15,
"rx": 4,
"ry": 9.1,
"y": -4.85,
"x": -0.5
},
"4,3"
],
[
{
"r": 30,
"rx": 5,
"ry": 9.3,
"y": -5.05,
"x": -1.5,
"h": 1.5
},
"4,4"
],
[
{
"r": -30,
"rx": 10,
"y": -4.4,
"x": 1.629999999999999,
"h": 1.5
},
"9,4"
],
[
{
"r": -15,
"rx": 11,
"ry": 9,
"y": -4.42,
"x": 0.7200000000000006
},
"9,3"
]
]
}
}

View file

@ -0,0 +1,6 @@
#pragma once
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 TRUE

View file

@ -0,0 +1,30 @@
# Sofle Choc Pro
![sofle_choc_pro](https://raw.githubusercontent.com/Keebart/picture-cdn/refs/heads/main/sofle/led/0.webp)
A complete remake of the Sofle Choc Keyboard by Josef Adamčík. Featuring an onboard RP2040 with 128 MB flash
memory and choc-spaced keys for a more compact keyboard.
* Keyboard Maintainer: [Keebart](https://github.com/Keebart)
* Hardware Supported: RP2040
* Hardware Availability: [Keebart Shop](https://keebart.com/products/sofle)
Make example for this keyboard (after setting up your build environment):
make keebart/sofle_choc_pro:default
make keebart/sofle_choc_pro:vial
Flashing example for this keyboard:
make keebart/sofle_choc_pro:default:flash
make keebart/sofle_choc_pro:vial: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 top left key of the left side of the keyboard while connecting the left side to the computer. Similarly, hold down the top left key of the right side of the keyboard while connecting the right side to the computer.
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1 @@
SERIAL_DRIVER = vendor