From 3fe8c9224b44a34b87239ce631a94859529cf13d Mon Sep 17 00:00:00 2001 From: Sadek Baroudi Date: Mon, 9 Oct 2023 14:03:51 -0700 Subject: [PATCH] baboon38 firmware for my personal collection --- .../fingerpunch/personal/baboon38/README.md | 9 ++ .../fingerpunch/personal/baboon38/baboon38.c | 1 + .../fingerpunch/personal/baboon38/baboon38.h | 24 ++++ .../fingerpunch/personal/baboon38/config.h | 34 ++++++ .../personal/baboon38/fp_build.json | 7 ++ .../fingerpunch/personal/baboon38/info.json | 11 ++ .../personal/baboon38/keymaps/p/config.h | 4 + .../personal/baboon38/keymaps/p/keymap.c | 68 ++++++++++++ .../personal/baboon38/keymaps/p/rules.mk | 4 + .../baboon38/keymaps/sadekbaroudi/keymap.c | 103 ++++++++++++++++++ .../fingerpunch/personal/baboon38/rules.mk | 54 +++++++++ users/sadekbaroudi/process_records.h | 1 + users/sadekbaroudi/wrappers.h | 5 + 13 files changed, 325 insertions(+) create mode 100644 keyboards/fingerpunch/personal/baboon38/README.md create mode 100644 keyboards/fingerpunch/personal/baboon38/baboon38.c create mode 100644 keyboards/fingerpunch/personal/baboon38/baboon38.h create mode 100644 keyboards/fingerpunch/personal/baboon38/config.h create mode 100644 keyboards/fingerpunch/personal/baboon38/fp_build.json create mode 100644 keyboards/fingerpunch/personal/baboon38/info.json create mode 100644 keyboards/fingerpunch/personal/baboon38/keymaps/p/config.h create mode 100644 keyboards/fingerpunch/personal/baboon38/keymaps/p/keymap.c create mode 100644 keyboards/fingerpunch/personal/baboon38/keymaps/p/rules.mk create mode 100644 keyboards/fingerpunch/personal/baboon38/keymaps/sadekbaroudi/keymap.c create mode 100644 keyboards/fingerpunch/personal/baboon38/rules.mk diff --git a/keyboards/fingerpunch/personal/baboon38/README.md b/keyboards/fingerpunch/personal/baboon38/README.md new file mode 100644 index 0000000000..4352512988 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/README.md @@ -0,0 +1,9 @@ +# baboon38 + +This is a keyboard made by madebyperce, and my version of it uses an RP2040 (svlinky), so I had to adapt the firmware completely. I also added a WeAct ST7735 VIK module so it has a display as well. + +Original firmware came from: +https://github.com/madebyperce/qmk_firmware/tree/master/keyboards/baboon38 + +PCB came from: +https://github.com/madebyperce/baboon38 diff --git a/keyboards/fingerpunch/personal/baboon38/baboon38.c b/keyboards/fingerpunch/personal/baboon38/baboon38.c new file mode 100644 index 0000000000..b5d100f0bf --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/baboon38.c @@ -0,0 +1 @@ +#include "baboon38.h" diff --git a/keyboards/fingerpunch/personal/baboon38/baboon38.h b/keyboards/fingerpunch/personal/baboon38/baboon38.h new file mode 100644 index 0000000000..f1d83bfbba --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/baboon38.h @@ -0,0 +1,24 @@ +#pragma once + +#include "quantum.h" + +#define LAYOUT_baboon38( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \ + K30, K31, K35, K34, \ + K33, K32, K36, K37 \ +) \ +{ \ + { K00, K01, K02, K03, K04 }, \ + { K10, K11, K12, K13, K14, }, \ + { K20, K21, K22, K23, K24, }, \ + { K30, K31, K32, K33, KC_NO, }, \ + { K05, K06, K07, K08, K09, }, \ + { K15, K16, K17, K18, K19, }, \ + { K25, K26, K27, K28, K29, }, \ + { K34, K35, K36, K37, KC_NO,}, \ +} + +// General fingerpunch firmware include +#include "keyboards/fingerpunch/src/fp.h" diff --git a/keyboards/fingerpunch/personal/baboon38/config.h b/keyboards/fingerpunch/personal/baboon38/config.h new file mode 100644 index 0000000000..1d53c89a60 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/config.h @@ -0,0 +1,34 @@ +#pragma once + +#include "keyboards/fingerpunch/src/config.h" + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET + +// For VIK SPI +#define SPI_SCK_PIN GP14 +#define SPI_MOSI_PIN GP15 +#define SPI_MISO_PIN GP12 +#define SPI_DRIVER SPID1 + +#define MATRIX_ROWS 8 +#define MATRIX_COLS 5 + +// wiring +#define MATRIX_ROW_PINS { GP29, GP28, GP27, GP26, GP22, GP20, GP23, GP21 } +#define MATRIX_COL_PINS { GP4, GP5, GP6, GP7, GP8 } + +/* COL2ROW, ROW2COL*/ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +#if defined(FP_WEACT_ST7735) + // /* LCD config */ + #define DISPLAY_CS_PIN GP13 + #define DISPLAY_RST_PIN GP25 // unused pin, since it's handled with a circuit on the vik module + #define DISPLAY_DC_PIN GP18 + + // To dynamically control the backlight with BL_TOGG keycode + #define BACKLIGHT_PIN GP24 +#endif \ No newline at end of file diff --git a/keyboards/fingerpunch/personal/baboon38/fp_build.json b/keyboards/fingerpunch/personal/baboon38/fp_build.json new file mode 100644 index 0000000000..1e4e04b454 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/fp_build.json @@ -0,0 +1,7 @@ +[ + { + "type" : "single", + "name" : "FP_WEACT_ST7735", + "user_input": "Do you have a WeAct ST7735 Display VIK module?" + } +] diff --git a/keyboards/fingerpunch/personal/baboon38/info.json b/keyboards/fingerpunch/personal/baboon38/info.json new file mode 100644 index 0000000000..563d45b764 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/info.json @@ -0,0 +1,11 @@ +{ + "manufacturer": "perce", + "keyboard_name": "baboon38", + "url": "https://github.com/madebyperce/baboon38", + "maintainer": "Sadek Baroudi ", + "usb": { + "vid": "0x0000", + "pid": "0x0000", + "device_version": "1.0.0" + } +} diff --git a/keyboards/fingerpunch/personal/baboon38/keymaps/p/config.h b/keyboards/fingerpunch/personal/baboon38/keymaps/p/config.h new file mode 100644 index 0000000000..45f069b14f --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/keymaps/p/config.h @@ -0,0 +1,4 @@ +#define COMBO_COUNT 4 +#define COMBO_TERM 100 +#define TAPPING_TERM 200 +#define IGNORE_MOD_TAP_INTERRUPT diff --git a/keyboards/fingerpunch/personal/baboon38/keymaps/p/keymap.c b/keyboards/fingerpunch/personal/baboon38/keymaps/p/keymap.c new file mode 100644 index 0000000000..ea22cfa7d9 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/keymaps/p/keymap.c @@ -0,0 +1,68 @@ +#include QMK_KEYBOARD_H + +#define WINTAB LWIN_T(KC_TAB) +#define WINLFT LGUI(LSFT(KC_LEFT)) +#define WINRHT LGUI(LSFT(KC_RGHT)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_split_3x5_4( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + LSFT_T(KC_A), LALT_T(KC_S), LCTL_T(KC_D), LT(MO(4), KC_F), KC_G, KC_H, LT(MO(3), KC_J), RCTL_T(KC_K), RALT_T(KC_L), RSFT_T(KC_QUOT), + KC_Z, KC_X, KC_C, LGUI_T(KC_V), KC_B, KC_N, RGUI_T(KC_M), KC_COMM, KC_DOT, KC_SLSH, + WINTAB, KC_SPC, KC_ENT, KC_BSPC, + _______, MO(1), MO(2), MO(3) + ), + + [1] = LAYOUT_split_3x5_4( + KC_RABK, KC_RCBR, KC_RBRC, KC_RPRN, KC_BSLS, KC_UNDS, KC_CIRC, KC_QUOT, KC_DQUO, _______, + KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_SLSH, KC_MINS, KC_ASTR, KC_PERC, _______, _______, + KC_HASH, KC_DLR, KC_BSLS, KC_EXLM, KC_PIPE, KC_TILDE, KC_AT, KC_AMPR, _______, _______, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT_split_3x5_4( + KC_PLUS, KC_7, KC_8, KC_9, KC_EQL, _______, _______, _______, _______, _______, + KC_0, KC_4, KC_5, KC_6, KC_DOT, _______, _______, _______, _______, _______, + KC_MINS, KC_1, KC_2, KC_3, KC_COMM, _______, _______, _______, _______, _______, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [3] = LAYOUT_split_3x5_4( + _______, WINLFT, KC_UP, WINRHT, _______, _______, _______, _______, _______, _______, + KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, _______, _______, _______, _______, + _______, C(KC_C), C(KC_X), C(KC_V), KC_PSCR, _______, _______, _______, _______, _______, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [4] = LAYOUT_split_3x5_4( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; + + +enum combos { + RT_ESC, + ENTBK_DEL, + LPARAN, + RPARAN, +}; + +const uint16_t PROGMEM escape_combo[] = {KC_R, KC_T, COMBO_END}; +const uint16_t PROGMEM launch_combo[] = {KC_ENT, MO(2), COMBO_END}; +const uint16_t PROGMEM lparan_combo[] = {KC_A, KC_COMM, COMBO_END}; +const uint16_t PROGMEM rparan_combo[] = {KC_A, KC_DOT, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [RT_ESC] = COMBO(escape_combo, KC_ESC), + [ENTBK_DEL] = COMBO(launch_combo, KC_DEL), + [LPARAN] = COMBO(lparan_combo, KC_LPRN), + [RPARAN] = COMBO(rparan_combo, KC_RPRN), +}; diff --git a/keyboards/fingerpunch/personal/baboon38/keymaps/p/rules.mk b/keyboards/fingerpunch/personal/baboon38/keymaps/p/rules.mk new file mode 100644 index 0000000000..039a0aa5dd --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/keymaps/p/rules.mk @@ -0,0 +1,4 @@ +ENCODER_ENABLE = no +COMBO_ENABLE = yes +MOUSE_KEYS = yes +AUDIO_KEYS = yes diff --git a/keyboards/fingerpunch/personal/baboon38/keymaps/sadekbaroudi/keymap.c b/keyboards/fingerpunch/personal/baboon38/keymaps/sadekbaroudi/keymap.c new file mode 100644 index 0000000000..f5f6fd468f --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/keymaps/sadekbaroudi/keymap.c @@ -0,0 +1,103 @@ +/* Copyright 2021 Sadek Baroudi + * + * 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 . + */ + +#include "sadekbaroudi.h" + +/* + * The `LAYOUT_baboon38_base` macro is a template to allow the use of identical + * modifiers for the default layouts (eg ALPHA_ALT, Colemak, Dvorak, etc), so + * that there is no need to set them up for each layout, and modify all of + * them if I want to change them. This helps to keep consistency and ease + * of use. K## is a placeholder to pass through the individual keycodes + */ + +// clang-format off +#define LAYOUT_baboon38_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \ + K33, K34, K37, K38, \ + K35, K36, K39, K40 \ + ) \ + LAYOUT_wrapper( \ + K01, K02, K03, LT(_FUNCTION, K04), K05, K06, LT(_FUNCTION, K07), K08, K09, K0A, \ + LCTL_T(K11), LGUI_T(K12), LALT_T(K13), LSFT_T(K14), K15, LT(_MOUSE, K16), RSFT_T(K17), RALT_T(K18), RGUI_T(K19), RCTL_T(K1A), \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \ + K33, LT(_NAVIGATION,K34), LT(_SYMBOLS,K37), K38, \ + LT(_FUNCTION,K35), LT(_FUNCTION,K36), LT(_MEDIA,K39), LT(_MEDIA,K40) \ + ) + +/* Re-pass though to allow templates to be used */ +#define LAYOUT_baboon38_base_wrapper(...) LAYOUT_baboon38_base(__VA_ARGS__) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_ALPHA_ALT] = LAYOUT_baboon38_base_wrapper( + _________________ALPHA_ALT_L1_________________, _________________ALPHA_ALT_R1_________________, + _________________ALPHA_ALT_L2_________________, _________________ALPHA_ALT_R2_________________, + _________________ALPHA_ALT_L3_________________, _________________ALPHA_ALT_R3_________________, + __ALPHA_ALT_THUMB_L1__, __ALPHA_ALT_THUMB_L2__, __ALPHA_ALT_THUMB_R2__, __ALPHA_ALT_THUMB_R3__, + __ALPHA_ALT_THUMB_L3__, __ALPHA_ALT_THUMB_L3__, __ALPHA_ALT_THUMB_R1__, __ALPHA_ALT_THUMB_R1__ + ), + + [_ALPHA] = LAYOUT_baboon38_base_wrapper( + __________________ALPHA_L1____________________, __________________ALPHA_R1____________________, + __________________ALPHA_L2____________________, __________________ALPHA_R2____________________, + __________________ALPHA_L3____________________, __________________ALPHA_R3____________________, + __ALPHA_THUMB_L1__, __ALPHA_THUMB_L2__, __ALPHA_THUMB_R2__, __ALPHA_THUMB_R3__, + __ALPHA_THUMB_L3__, __ALPHA_THUMB_L3__, __ALPHA_THUMB_R1__, __ALPHA_THUMB_R1__ + ), + + [_NAVIGATION] = LAYOUT_wrapper( + ________________NAVIGATION_1_______________, _________________NUMPAD_1__________________, + ________________NAVIGATION_2_______________, _________________NUMPAD_2__________________, + ________________NAVIGATION_3_______________, _________________NUMPAD_3__________________, + _______, _______, KC_SPACE, KC_DOT, + KC_TAB, KC_TAB, KC_BSPC, KC_BSPC + ), + + [_SYMBOLS] = LAYOUT_wrapper( + ________________SYMBOLS_L1_________________, ________________SYMBOLS_R1_________________, + ________________SYMBOLS_L2_________________, ________________SYMBOLS_R2_________________, + ________________SYMBOLS_L3_________________, ________________SYMBOLS_R3_________________, + _______, KC_ENT, _______, _______, + KC_DEL, KC_DEL, KC_BSPC, KC_BSPC + ), + + [_FUNCTION] = LAYOUT_wrapper( + ________________SHIFTNAV_1_________________, ________________FUNCTION_1_________________, + ________________SHIFTNAV_2_________________, ________________FUNCTION_2_________________, + ________________SHIFTNAV_3_________________, ________________FUNCTION_3_________________, + _______, _______, KC_SPACE, _______, + _______, _______, N_DEL_LINE, N_DEL_LINE + ), + + [_MEDIA] = LAYOUT_wrapper( + ___________________RGB_1___________________, _________________MACROS_1__________________, + ___________________RGB_2___________________, _________________MACROS_2__________________, + ___________________RGB_3___________________, _________________MACROS_3__________________, + _______, _______, _______, _______, + _______, _______, _______, _______ + ), + + [_MOUSE] = LAYOUT_wrapper( + __________________MOUSE_1__________________, ___________________BLANK___________________, + __________________MOUSE_2__________________, ___________________BLANK___________________, + __________________MOUSE_3__________________, ___________________BLANK___________________, + _______, KC_MS_BTN1, KC_MS_BTN2, _______, + KC_MS_BTN3, KC_MS_BTN3, KC_MS_BTN3, KC_MS_BTN3 + ) +}; diff --git a/keyboards/fingerpunch/personal/baboon38/rules.mk b/keyboards/fingerpunch/personal/baboon38/rules.mk new file mode 100644 index 0000000000..c604d5dd80 --- /dev/null +++ b/keyboards/fingerpunch/personal/baboon38/rules.mk @@ -0,0 +1,54 @@ +# MCU name +MCU = RP2040 +BOOTLOADER = rp2040 + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +SPLIT_KEYBOARD = no # Split common +LTO_ENABLE = yes + +ENCODER_ENABLE = no # Enables the use of one or more encoders +SPLIT_KEYBOARD = no + +FP_WEACT_ST7735 ?= no + +ifeq ($(strip $(FP_WEACT_ST7735)), yes) + # For LCD backlight toggling + BACKLIGHT_ENABLE = yes + BACKLIGHT_DRIVER = software + + QUANTUM_PAINTER_ENABLE = yes + QUANTUM_PAINTER_DRIVERS += st7735_spi + QUANTUM_PAINTER_LVGL_INTEGRATION = yes + SRC += fonts/urbanist24.qff.c fonts/urbanist36.qff.c + SRC += fonts/roboto12.qff.c fonts/roboto18.qff.c fonts/roboto14.qff.c + SRC += display.c + WPM_ENABLE = yes + OPT_DEFS += -DFP_WEACT_ST7735 +endif + +DEFERRED_EXEC_ENABLE = yes +SRC += keyboards/fingerpunch/src/fp.c \ + keyboards/fingerpunch/src/fp_haptic.c \ + keyboards/fingerpunch/src/fp_audio.c \ + keyboards/fingerpunch/src/fp_keyhandler.c \ + keyboards/fingerpunch/src/fp_encoder.c \ + keyboards/fingerpunch/src/fp_pointing.c \ + keyboards/fingerpunch/src/fp_rgb_common.c \ + keyboards/fingerpunch/src/fp_rgblight.c \ + keyboards/fingerpunch/src/fp_rgb_matrix.c \ No newline at end of file diff --git a/users/sadekbaroudi/process_records.h b/users/sadekbaroudi/process_records.h index 53d3bc6add..ea11e06e1e 100755 --- a/users/sadekbaroudi/process_records.h +++ b/users/sadekbaroudi/process_records.h @@ -32,6 +32,7 @@ || defined(KEYBOARD_fingerpunch_personal_badwings) \ || defined(KEYBOARD_fingerpunch_personal_klor) \ || defined(KEYBOARD_fingerpunch_personal_barghoot) \ + || defined(KEYBOARD_fingerpunch_personal_baboon38) \ || defined(KEYBOARD_fingerpunch_personal_zazu) # define PLACEHOLDER_SAFE_RANGE FP_SAFE_RANGE #elif defined(KEYMAP_SAFE_RANGE) diff --git a/users/sadekbaroudi/wrappers.h b/users/sadekbaroudi/wrappers.h index 4c2fc67071..45ba39ee25 100755 --- a/users/sadekbaroudi/wrappers.h +++ b/users/sadekbaroudi/wrappers.h @@ -181,6 +181,11 @@ expanded before being used as arguments to the LAYOUT_xxx macro. # define LAYOUT LAYOUT_svlinky #endif +// Since LAYOUT_baboon38 uses the name LAYOUT_baboon38 instead of LAYOUT +#if (!defined(LAYOUT) && defined(LAYOUT_baboon38)) +# define LAYOUT LAYOUT_baboon38 +#endif + // clang-format off #define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__) #define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)