Retrodactyl support
Some checks failed
Update API Data / api_data (push) Has been cancelled
CLI CI / test (push) Has been cancelled
Update develop after master merge / develop_update (push) Has been cancelled
Lint Format / lint (push) Has been cancelled
Regenerate Files / regen (push) Has been cancelled
Unit Tests / test (push) Has been cancelled
Some checks failed
Update API Data / api_data (push) Has been cancelled
CLI CI / test (push) Has been cancelled
Update develop after master merge / develop_update (push) Has been cancelled
Lint Format / lint (push) Has been cancelled
Regenerate Files / regen (push) Has been cancelled
Unit Tests / test (push) Has been cancelled
This commit is contained in:
parent
145c8c8363
commit
e38360bcf8
|
@ -0,0 +1,56 @@
|
||||||
|
// Copyright 2025 Lyderic Maillet (@lydux)
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
|
||||||
|
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
|
||||||
|
|
||||||
|
#define SERIAL_USART_FULL_DUPLEX
|
||||||
|
#define SERIAL_USART_TX_PIN GP0
|
||||||
|
#define SERIAL_USART_RX_PIN GP1
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 12
|
||||||
|
#define MATRIX_COLS 6
|
||||||
|
//#define MATRIX_MUX_COLS 3
|
||||||
|
|
||||||
|
// Left side
|
||||||
|
#define MATRIX_ROW_PINS { GP10, GP11, GP12, GP13, GP14, GP15 }
|
||||||
|
#define MATRIX_COL_PINS { GP16, GP17, GP18, GP19, GP20, GP21 }
|
||||||
|
#define ENCODER_A_PINS {}
|
||||||
|
#define ENCODER_B_PINS {}
|
||||||
|
|
||||||
|
//Right side
|
||||||
|
#define MATRIX_ROW_PINS_RIGHT { GP23, GP29, GP28, GP27, GP26, GP22 }
|
||||||
|
#define MATRIX_COL_PINS_RIGHT { GP21, GP20, GP19, GP18, GP17, GP16 }
|
||||||
|
#define ENCODER_A_PINS_RIGHT { GP10 }
|
||||||
|
#define ENCODER_B_PINS_RIGHT { GP11 }
|
||||||
|
|
||||||
|
#define OLED_DISPLAY_128x32
|
||||||
|
#define OLED_IC OLED_IC_SH1106
|
||||||
|
|
||||||
|
/* OLED SPI Pins */
|
||||||
|
#define OLED_DC_PIN GP6
|
||||||
|
#define OLED_CS_PIN GP5
|
||||||
|
#define OLED_RST_PIN GP7
|
||||||
|
|
||||||
|
/* Divisor for OLED */
|
||||||
|
#define OLED_SPI_DIVISOR 4
|
||||||
|
|
||||||
|
/* ChibiOS SPI definitions */
|
||||||
|
#define SPI_DRIVER SPID0
|
||||||
|
#define SPI_SCK_PIN GP2
|
||||||
|
#define SPI_MOSI_PIN GP3
|
||||||
|
#define SPI_MISO_PIN GP4
|
||||||
|
|
||||||
|
|
||||||
|
#define PMW33XX_CS_PIN GP8
|
||||||
|
#define PMW33XX_CS_DIVISOR 64
|
||||||
|
|
||||||
|
//#define PMW33XX_LIFTOFF_DISTANCE 0x02
|
||||||
|
#define PMW33XX_CPI 800
|
||||||
|
#define ROTATIONAL_TRANSFORM_ANGLE 0x30
|
||||||
|
#define POINTING_DEVICE_INVERT_Y
|
|
@ -0,0 +1,12 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include_next <halconf.h>
|
||||||
|
|
||||||
|
#undef HAL_USE_SPI
|
||||||
|
#define HAL_USE_SPI TRUE
|
||||||
|
|
||||||
|
#undef SPI_USE_WAIT
|
||||||
|
#define SPI_USE_WAIT TRUE
|
||||||
|
|
||||||
|
#undef SPI_SELECT_MODE
|
||||||
|
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
|
|
@ -0,0 +1,112 @@
|
||||||
|
{
|
||||||
|
"manufacturer": "Lydux",
|
||||||
|
"keyboard_name": "retrodactyl",
|
||||||
|
"maintainer": "Lydux",
|
||||||
|
"bootloader": "rp2040",
|
||||||
|
"processor": "RP2040",
|
||||||
|
"url": "",
|
||||||
|
"usb": {
|
||||||
|
"device_version": "1.0.0",
|
||||||
|
"pid": "0x0000",
|
||||||
|
"vid": "0xFEED"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"command": false,
|
||||||
|
"console": false,
|
||||||
|
"extrakey": true,
|
||||||
|
"mousekey": true,
|
||||||
|
"pointing_device": true
|
||||||
|
},
|
||||||
|
"split": {
|
||||||
|
"enabled": true,
|
||||||
|
"serial": {
|
||||||
|
"driver": "vendor"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"diode_direction": "COL2ROW",
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT": {
|
||||||
|
"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": [6, 0], "x": 11, "y": 0},
|
||||||
|
{"matrix": [6, 1], "x": 12, "y": 0},
|
||||||
|
{"matrix": [6, 2], "x": 13, "y": 0},
|
||||||
|
{"matrix": [6, 3], "x": 14, "y": 0},
|
||||||
|
{"matrix": [6, 4], "x": 15, "y": 0},
|
||||||
|
{"matrix": [6, 5], "x": 16, "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": [7, 0], "x": 11, "y": 1},
|
||||||
|
{"matrix": [7, 1], "x": 12, "y": 1},
|
||||||
|
{"matrix": [7, 2], "x": 13, "y": 1},
|
||||||
|
{"matrix": [7, 3], "x": 14, "y": 1},
|
||||||
|
{"matrix": [7, 4], "x": 15, "y": 1},
|
||||||
|
{"matrix": [7, 5], "x": 16, "y": 1},
|
||||||
|
|
||||||
|
{"matrix": [2, 0], "x": 0, "y": 2},
|
||||||
|
{"matrix": [2, 1], "x": 1, "y": 2},
|
||||||
|
{"matrix": [2, 2], "x": 2, "y": 2},
|
||||||
|
{"matrix": [2, 3], "x": 3, "y": 2},
|
||||||
|
{"matrix": [2, 4], "x": 4, "y": 2},
|
||||||
|
{"matrix": [2, 5], "x": 5, "y": 2},
|
||||||
|
|
||||||
|
{"matrix": [8, 0], "x": 11, "y": 2},
|
||||||
|
{"matrix": [8, 1], "x": 12, "y": 2},
|
||||||
|
{"matrix": [8, 2], "x": 13, "y": 2},
|
||||||
|
{"matrix": [8, 3], "x": 14, "y": 2},
|
||||||
|
{"matrix": [8, 4], "x": 15, "y": 2},
|
||||||
|
{"matrix": [8, 5], "x": 16, "y": 2},
|
||||||
|
|
||||||
|
{"matrix": [3, 0], "x": 0, "y": 3},
|
||||||
|
{"matrix": [3, 1], "x": 1, "y": 3},
|
||||||
|
{"matrix": [3, 2], "x": 2, "y": 3},
|
||||||
|
{"matrix": [3, 3], "x": 3, "y": 3},
|
||||||
|
{"matrix": [3, 4], "x": 4, "y": 3},
|
||||||
|
{"matrix": [3, 5], "x": 5, "y": 3},
|
||||||
|
|
||||||
|
{"matrix": [9, 0], "x": 11, "y": 3},
|
||||||
|
{"matrix": [9, 1], "x": 12, "y": 3},
|
||||||
|
{"matrix": [9, 2], "x": 13, "y": 3},
|
||||||
|
{"matrix": [9, 3], "x": 14, "y": 3},
|
||||||
|
{"matrix": [9, 4], "x": 15, "y": 3},
|
||||||
|
{"matrix": [9, 5], "x": 16, "y": 3},
|
||||||
|
|
||||||
|
{"matrix": [4, 2], "x": 2, "y": 4},
|
||||||
|
{"matrix": [4, 3], "x": 3, "y": 4},
|
||||||
|
|
||||||
|
{"matrix": [10, 2], "x": 13, "y": 4},
|
||||||
|
{"matrix": [10, 3], "x": 14, "y": 4},
|
||||||
|
|
||||||
|
{"matrix": [4, 4], "x": 4, "y": 5},
|
||||||
|
{"matrix": [4, 5], "x": 5, "y": 5},
|
||||||
|
|
||||||
|
{"matrix": [10, 0], "x": 11, "y": 5},
|
||||||
|
{"matrix": [10, 1], "x": 12, "y": 5},
|
||||||
|
|
||||||
|
{"matrix": [5, 4], "x": 6, "y": 6},
|
||||||
|
{"matrix": [5, 5], "x": 7, "y": 6},
|
||||||
|
|
||||||
|
{"matrix": [11, 0], "x": 9, "y": 6},
|
||||||
|
{"matrix": [11, 1], "x": 10, "y": 6},
|
||||||
|
|
||||||
|
{"matrix": [5, 2], "x": 6, "y": 7},
|
||||||
|
{"matrix": [5, 3], "x": 7, "y": 7},
|
||||||
|
|
||||||
|
{"matrix": [11, 2], "x": 9, "y": 7},
|
||||||
|
{"matrix": [11, 3], "x": 10, "y": 7}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
// Copyright 2022 Ethan (@rocketstrong)
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐
|
||||||
|
*┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐
|
||||||
|
*│ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ │
|
||||||
|
*└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘
|
||||||
|
*┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐
|
||||||
|
*│ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ │
|
||||||
|
*└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘
|
||||||
|
*┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐
|
||||||
|
*│ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ │
|
||||||
|
*└──┘┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──┐┌──┐┌──┐┌──┐┌──┐└──┘
|
||||||
|
*┌──┐│ ││ ││ ││ ││ │ │ ││ ││ ││ ││ │┌──┐
|
||||||
|
*│ │└──┘└──┘└──┘└──┘└──┘ └──┘└──┘└──┘└──┘└──┘│ │
|
||||||
|
*└──┘ ┌──┐┌──┐ ┌──┐┌──┐ └──┘
|
||||||
|
* │ ││ │ │ ││ │
|
||||||
|
* └──┘└──┘ ┌──┐ ┌──┐ ┌──┐ ┌──┐ └──┘└──┘
|
||||||
|
* │ │ │ │ │ │ │ │
|
||||||
|
* └──┘ └──┘ └──┘ └──┘
|
||||||
|
* ┌──┐ ┌──┐ ┌──┐ ┌──┐
|
||||||
|
* │ │ │ │ │ │ │ │
|
||||||
|
* └──┘ └──┘ └──┘ └──┘
|
||||||
|
* ┌──┐┌──┐ ┌──┐┌──┐
|
||||||
|
* │ ││ │ │ ││ │
|
||||||
|
* └──┘└──┘ └──┘└──┘
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
DRAG_SCROLL = SAFE_RANGE,
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT(
|
||||||
|
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_BSLS,
|
||||||
|
KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K ,KC_L ,KC_SCLN,KC_QUOT,
|
||||||
|
KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM,KC_DOT,KC_SLSH,TG(5) ,
|
||||||
|
KC_LBRC,KC_RBRC, KC_MINS,KC_EQL,
|
||||||
|
KC_LGUI,KC_SPC , KC_ENT , MO(1) ,
|
||||||
|
MO(3) ,KC_HOME, KC_END , KC_DEL,
|
||||||
|
KC_BSPC,MO(4) , MO(2) , KC_LALT
|
||||||
|
),
|
||||||
|
[1] = LAYOUT(
|
||||||
|
KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10, KC_F11,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_PGUP,
|
||||||
|
KC_TRNS,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_UP ,KC_PGDN,
|
||||||
|
KC_TRNS,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_DOWN,KC_RGHT,
|
||||||
|
_______,_______, _______,KC_LEFT,
|
||||||
|
KC_TRNS,_______, _______,KC_TRNS,
|
||||||
|
_______,KC_INS , _______,_______,
|
||||||
|
_______,_______, _______,KC_RALT
|
||||||
|
),
|
||||||
|
[2] = LAYOUT(
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
KC_TRNS,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, KC_TRNS,_______
|
||||||
|
),
|
||||||
|
[3] = LAYOUT(
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
KC_TRNS,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______
|
||||||
|
),
|
||||||
|
[4] = LAYOUT(
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,QK_BOOT,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,KC_TRNS, _______,_______
|
||||||
|
),
|
||||||
|
[5] = LAYOUT(
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
|
||||||
|
_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_TRNS,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, _______,_______,
|
||||||
|
_______,_______, MS_BTN2,_______,
|
||||||
|
_______,_______, MS_BTN1,DRAG_SCROLL
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(ENCODER_MAP_ENABLE)
|
||||||
|
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||||
|
[0] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||||
|
[1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
|
||||||
|
[2] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||||
|
[3] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||||
|
[4] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||||
|
[5] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void render_logo(void) {
|
||||||
|
static const char PROGMEM qmk_logo[] = {
|
||||||
|
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
|
||||||
|
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
|
||||||
|
0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
|
||||||
|
};
|
||||||
|
|
||||||
|
oled_write_P(qmk_logo, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool oled_task_user(void) {
|
||||||
|
render_logo();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool set_scrolling = false;
|
||||||
|
float scroll_accumulated_h = 0;
|
||||||
|
float scroll_accumulated_v = 0;
|
||||||
|
|
||||||
|
#define DRAGSCROLL_DIVISOR_H 16.0
|
||||||
|
#define DRAGSCROLL_DIVISOR_V 16.0
|
||||||
|
|
||||||
|
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
|
||||||
|
if (set_scrolling) {
|
||||||
|
scroll_accumulated_h += (float)mouse_report.x / DRAGSCROLL_DIVISOR_H;
|
||||||
|
scroll_accumulated_v += (float)mouse_report.y / DRAGSCROLL_DIVISOR_V;
|
||||||
|
|
||||||
|
// Assign integer parts of accumulated scroll values to the mouse report
|
||||||
|
mouse_report.h = (int8_t)scroll_accumulated_h;
|
||||||
|
mouse_report.v = -(int8_t)scroll_accumulated_v;
|
||||||
|
|
||||||
|
// Update accumulated scroll values by subtracting the integer parts
|
||||||
|
scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
|
||||||
|
scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
|
||||||
|
|
||||||
|
// Clear the X and Y values of the mouse report
|
||||||
|
mouse_report.x = 0;
|
||||||
|
mouse_report.y = 0;
|
||||||
|
}
|
||||||
|
return mouse_report;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
if (keycode == DRAG_SCROLL && record->event.pressed) {
|
||||||
|
set_scrolling = !set_scrolling;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include_next <mcuconf.h>
|
||||||
|
|
||||||
|
#undef RP_SPI_USE_SPI0
|
||||||
|
#define RP_SPI_USE_SPI0 TRUE
|
||||||
|
|
||||||
|
#undef RP_SPI_USE_SPI1
|
||||||
|
#define RP_SPI_USE_SPI1 TRUE
|
|
@ -0,0 +1,14 @@
|
||||||
|
POINTING_DEVICE_DRIVER = pmw3389
|
||||||
|
POINTING_DEVICE_ROTATION_180 = yes
|
||||||
|
|
||||||
|
MOUSE_SHARED_EP = yes
|
||||||
|
|
||||||
|
ENCODER_ENABLE = yes
|
||||||
|
ENCODER_MAP_ENABLE = yes
|
||||||
|
|
||||||
|
OLED_ENABLE = yes
|
||||||
|
OLED_DRIVER = ssd1306
|
||||||
|
OLED_TRANSPORT = spi
|
||||||
|
|
||||||
|
#QUANTUM_PAINTER_ENABLE = yes
|
||||||
|
#QUANTUM_PAINTER_DRIVERS += sh1106_spi
|
Loading…
Reference in New Issue
Block a user