diff options
Diffstat (limited to 'keymaps/crkbd')
-rw-r--r-- | keymaps/crkbd/chconf.h | 7 | ||||
-rw-r--r-- | keymaps/crkbd/config.h | 54 | ||||
-rw-r--r-- | keymaps/crkbd/halconf.h | 5 | ||||
-rw-r--r-- | keymaps/crkbd/keymap.c | 144 | ||||
-rw-r--r-- | keymaps/crkbd/mcuconf.h | 6 | ||||
-rw-r--r-- | keymaps/crkbd/readme.md | 2 | ||||
-rw-r--r-- | keymaps/crkbd/rules.mk | 11 |
7 files changed, 229 insertions, 0 deletions
diff --git a/keymaps/crkbd/chconf.h b/keymaps/crkbd/chconf.h new file mode 100644 index 0000000..2041f2e --- /dev/null +++ b/keymaps/crkbd/chconf.h @@ -0,0 +1,7 @@ +#define CH_CFG_ST_RESOLUTION 16 +#define CH_CFG_ST_FREQUENCY 10000 +#if __has_include("platforms/chibios/common/configs/chconf.h") +# include_next "platforms/chibios/common/configs/chconf.h" +#else +# include_next "chconf.h" +#endif diff --git a/keymaps/crkbd/config.h b/keymaps/crkbd/config.h new file mode 100644 index 0000000..6025b92 --- /dev/null +++ b/keymaps/crkbd/config.h @@ -0,0 +1,54 @@ +#pragma once + +#undef SOFT_SERIAL_PIN +#define SOFT_SERIAL_PIN D3 +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED +#define SERIAL_USART_SPEED 921600 +#define SERIAL_USART_DRIVER SD1 +#define SERIAL_USART_TX_PAL_MODE 7 + +#ifdef OLED_ENABLE +# define LAYER_ANIM +# define BONGO_CAT +# define FELIX_DOG +#endif + +#ifdef RGB_MATRIX_ENABLE +# undef RGB_DI_PIN +# define RGB_DI_PIN B5 +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_FRAMEBUFFER_EFFECTS +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_KEYPRESSES +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_ALPHAS_MODS +# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 +# define WS2812_PWM_DRIVER PWMD3 +# define WS2812_PWM_CHANNEL 3 +# define WS2812_PWM_PAL_MODE 2 +# define WS2812_DMA_STREAM STM32_DMA1_STREAM3 +# define WS2812_DMA_CHANNEL 3 +#endif + +#ifdef ENCODER_ENABLE +# define ENCODERS_PAD_A { B2 } +# define ENCODERS_PAD_B { B6 } +#endif + +#ifdef AUDIO_ENABLE +# define AUDIO_PIN A5 +# define STARTUP_SONG SONG(ODE_TO_JOY) +# define AUDIO_CLICKY +#endif + +#ifdef POINTING_DEVICE_ENABLE +# define SPLIT_POINTING_ENABLE +# define POINTING_DEVICE_RIGHT +#endif diff --git a/keymaps/crkbd/halconf.h b/keymaps/crkbd/halconf.h new file mode 100644 index 0000000..c144217 --- /dev/null +++ b/keymaps/crkbd/halconf.h @@ -0,0 +1,5 @@ +#pragma once +// #define HAL_USE_DAC TRUE +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#include_next <halconf.h> diff --git a/keymaps/crkbd/keymap.c b/keymaps/crkbd/keymap.c new file mode 100644 index 0000000..9c82765 --- /dev/null +++ b/keymaps/crkbd/keymap.c @@ -0,0 +1,144 @@ +#include "waffle.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT_waffle_3x6( + STAR, ___BASE1___, H_S, + LINKS, ___BASE2___, RWORD, + TABLE1, ___BASE3___, TABLE2, + ___BASE4___ + ), + [_LOWER] = LAYOUT_waffle_3x6( + KC_NO, ___LOWER1___, KC_NO, + KC_NO, ___LOWER2___, KC_NO, + KC_NO, ___LOWER3___, KC_NO, + ___LOWER4___ + ), + [_RAISE] = LAYOUT_waffle_3x6( + KC_NO, ___RAISE1___, KC_NO, + KC_NO, ___RAISE2___, KC_NO, + KC_NO, ___RAISE3___, KC_NO, + ___RAISE4___ + ) +}; + +void housekeeping_task_user(void) { + if (last_input_activity_elapsed() > 5000) { + const pin_t row_pins[] = MATRIX_ROW_PINS, col_pins[] = MATRIX_COL_PINS; + for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) { + setPinOutput(col_pins[i]); + writePinLow(col_pins[i]); + } + for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) { + setPinInputHigh(row_pins[i]); + palEnableLineEvent(row_pins[i], PAL_EVENT_MODE_BOTH_EDGES); + } + __WFI(); + for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) { + palDisableLineEvent(row_pins[i]); + writePinHigh(row_pins[i]); + setPinInputHigh(row_pins[i]); + } + for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) { + writePinHigh(col_pins[i]); + setPinInputHigh(col_pins[i]); + } + } +} + +#ifdef AUDIO_ENABLE +void keyboard_pre_init_user(void) { //thank you to @sigprof for this + palSetLineMode(A5, PAL_MODE_INPUT_ANALOG); + palSetLineMode(B1, PAL_MODE_INPUT_ANALOG); +} + +void keyboard_post_init_user(void) { + // enable OPAMP1 as A5 → B1 follower + OPAMP3->CSR = OPAMP3_CSR_VMSEL_1 | OPAMP3_CSR_VMSEL_0 | OPAMP3_CSR_VPSEL_0 | OPAMP3_CSR_OPAMP3EN; +} +#endif //audio + +#ifdef OLED_ENABLE +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (!is_keyboard_master()) + return 3; + else + return 2; + return rotation; +} + +bool oled_task_keymap(void) { + if (is_keyboard_master()) + layer_anim(); + else { + oled_set_cursor(0, 0); + render_wpm(); + oled_set_cursor(0, 3); + felix(); + oled_set_cursor(0, 7); + render_keyboard(); + oled_set_cursor(0, 9); + layer_status(); + oled_set_cursor(0, 11); + mod_status(get_mods()); + oled_set_cursor(0, 13); + keylock_status(host_keyboard_led_state()); + oled_set_cursor(1, 15); + render_keylogger(); + oled_set_cursor(0, 15); + keylogger_status(); + } + return false; +} +#endif //oled + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { { KC_VOLU, KC_VOLD }, { KC_MNXT, KC_MPRV } }, + [_LOWER] = { { RGB_SAI, RGB_SAD }, { RGB_HUI, RGB_HUD } }, + [_RAISE] = { { KC_LEFT, C(KC_RGHT) }, { C(S(KC_TAB)), C(KC_TAB) } } +}; +#endif //encoder map + +#ifdef RGB_MATRIX_ENABLE +void matrix_init_user(void) { + g_led_config = (led_config_t) { { + { 15, 16, 17, 18, 19, 20 }, + { 14, 13, 12, 11, 10, 9 }, + { 3, 4, 5, 6, 7, 8 }, + { NO_LED, NO_LED, NO_LED, 2, 1, 0 }, + { 47, 46, 45, 44, 43, 42 }, + { 36, 37, 38, 39, 40, 41 }, + { 35, 34, 33, 32, 31, 30 }, + { NO_LED, NO_LED, NO_LED, 27, 28, 29 } + }, { + { 95, 63 }, { 85, 39 }, { 85, 21 }, { 85, 4 }, { 68, 2 }, { 68, 19 }, { 68, 37 }, + { 80, 58 }, { 60, 55 }, { 50, 35 }, { 50, 13 }, { 50, 0 }, { 33, 3 }, { 33, 20 }, + { 33, 37 }, { 16, 42 }, { 16, 24 }, { 16, 7 }, { 0, 7 }, { 0, 24 }, { 0, 41 }, + { 85, 16 }, { 50, 13 }, { 16, 20 }, { 16, 38 }, { 50, 48 }, { 85, 52 }, { 129, 63 }, + { 139, 39 }, { 139, 21 }, { 139, 4 }, { 156, 2 }, { 156, 19 }, { 156, 37 }, { 144, 58 }, + { 164, 55 }, { 174, 35 }, { 174, 13 }, { 174, 0 }, { 191, 3 }, { 191, 20 }, { 191, 37 }, + { 208, 42 }, { 208, 24 }, { 208, 7 }, { 224, 7 }, { 224, 24 }, { 224, 41 }, { 139, 16 }, + { 174, 13 }, { 208, 20 }, { 208, 38 }, { 174, 48 }, { 139, 52 }, + }, { + 1, 1, 1, 1, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, + 1, 1, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, 2, 1, + 1, 1, 4, 4, 4, 4, 4, + 1, 1, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 1, 2, + 2, 2, 2, 2, 2 + } }; +} + +extern LED_TYPE rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT]; +bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { +#ifdef POINTING_DEVICE_ENABLE + pimoroni_trackball_set_rgbw(rgb_matrix_ws2812_array[29].r, rgb_matrix_ws2812_array[29].g, rgb_matrix_ws2812_array[29].b, 0); +#endif + for (uint8_t i = led_min; i <= led_max; i++) + if (g_led_config.flags[i] & LED_FLAG_UNDERGLOW) + rgb_matrix_set_color(i, RGB_YELLOW); + return false; +} +#endif //rgb matrix diff --git a/keymaps/crkbd/mcuconf.h b/keymaps/crkbd/mcuconf.h new file mode 100644 index 0000000..5acc767 --- /dev/null +++ b/keymaps/crkbd/mcuconf.h @@ -0,0 +1,6 @@ +#pragma once +#include_next <mcuconf.h> +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE diff --git a/keymaps/crkbd/readme.md b/keymaps/crkbd/readme.md new file mode 100644 index 0000000..e1257ea --- /dev/null +++ b/keymaps/crkbd/readme.md @@ -0,0 +1,2 @@ +### [proton-c crkbd](https://github.com/waffle87/waffle_corne) + diff --git a/keymaps/crkbd/rules.mk b/keymaps/crkbd/rules.mk new file mode 100644 index 0000000..eef496f --- /dev/null +++ b/keymaps/crkbd/rules.mk @@ -0,0 +1,11 @@ +MCU = STM32F303 +CONVERT_TO = proton_c +SERIAL_DRIVER = usart +WS2812_DRIVER = pwm +OLED_ENABLE = yes +AUDIO_ENABLE = yes +RGB_MATRIX_ENABLE = yes +ENCODER_ENABLE = yes +ENCODER_MAP_ENABLE = yes +POINTING_DEVICE_ENABLE = yes +POINTING_DEVICE_DRIVER = pimoroni_trackball |