Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Somei70 addition #24444

Merged
merged 15 commits into from
Dec 24, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions keyboards/somei70/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#define OLED_BRIGHTNESS 100
148 changes: 148 additions & 0 deletions keyboards/somei70/keyboard.json
gzowski marked this conversation as resolved.
Show resolved Hide resolved
gzowski marked this conversation as resolved.
Show resolved Hide resolved
gzowski marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
{
"manufacturer": "gzowski",
"keyboard_name": "Somei70",
"maintainer": "gzowski",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true,
gzowski marked this conversation as resolved.
Show resolved Hide resolved
"rgb_matrix": true,
"wpm": true
},
"matrix_pins": {
"cols": ["GP28", "GP27", "GP26", "GP22", "GP20", "GP23", "GP21", "GP16", "GP15", "GP14", "GP13", "GP12", "GP9", "GP8", "GP7"],
"rows": ["GP1", "GP29", "GP6", "GP5", "GP4"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"band_sat": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"dual_beacon": true,
"gradient_left_right": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"raindrops": true
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 96, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 128, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 144, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 160, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 176, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 192, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 212, "y": 0, "flags": 4}
],
"led_flush_limit": 14,
"led_process_limit": 5,
"max_brightness": 200,
"sleep": true
},
"url": "https://github.com/gzowski/somei70",
"usb": {
"device_version": "1.0.0",
"pid": "0x6F64",
"vid": "0x73CA"
},
"ws2812": {
"driver": "vendor",
"pin": "GP0"
},
"layouts": {
"LAYOUT_5x15": {
"layout": [
{"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "MINS", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "EQL", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "BSPC", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
{"label": "TAB", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
{"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
{"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
{"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
{"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
{"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
{"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
{"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
{"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
{"label": "LBRC", "matrix": [1, 11], "x": 11.5, "y": 1},
{"label": "RBRC", "matrix": [1, 12], "x": 12.5, "y": 1},
{"label": "BSLS", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"label": "CAPS", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
{"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
{"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
{"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
{"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
{"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
{"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
{"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
{"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
{"label": "SCLN", "matrix": [2, 10], "x": 10.75, "y": 2},
{"label": "QLOT", "matrix": [2, 11], "x": 11.75, "y": 2},
{"label": "GRV", "matrix": [2, 12], "x": 12.75, "y": 2},
{"label": "DEL", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
{"label": "PGUP", "matrix": [2, 14], "x": 15, "y": 2},
{"label": "LSFT", "matrix": [3, 0], "x": 0, "y": 3, "w": 2},
{"label": "Z", "matrix": [3, 1], "x": 2, "y": 3},
{"label": "X", "matrix": [3, 2], "x": 3, "y": 3},
{"label": "C", "matrix": [3, 3], "x": 4, "y": 3},
{"label": "V", "matrix": [3, 4], "x": 5, "y": 3},
{"label": "B", "matrix": [3, 5], "x": 6, "y": 3},
{"label": "N", "matrix": [3, 6], "x": 7, "y": 3},
{"label": "M", "matrix": [3, 7], "x": 8, "y": 3},
{"label": "COMM", "matrix": [3, 8], "x": 9, "y": 3},
{"label": "DOT", "matrix": [3, 9], "x": 10, "y": 3},
{"label": "SLSH", "matrix": [3, 10], "x": 11, "y": 3},
{"label": "RSFT", "matrix": [3, 11], "x": 12, "y": 3},
{"label": "INS", "matrix": [3, 12], "x": 13, "y": 3},
{"label": "UP", "matrix": [3, 13], "x": 14, "y": 3},
{"label": "PGDN", "matrix": [3, 14], "x": 15, "y": 3},
{"label": "RCTL", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"label": "LGUI", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"label": "LALT", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"label": "SPC", "matrix": [4, 3], "x": 3.75, "y": 4, "w": 2.25},
{"label": "MUTE", "matrix": [4, 4], "x": 6, "y": 4, "w": 1.75},
{"label": "ENT", "matrix": [4, 5], "x": 7.75, "y": 4, "w": 2.25},
{"label": "RALT", "matrix": [4, 6], "x": 10, "y": 4},
{"label": "MO(1)", "matrix": [4, 7], "x": 11, "y": 4},
{"label": "RCTL", "matrix": [4, 8], "x": 12, "y": 4},
{"label": "LEFT", "matrix": [4, 9], "x": 13, "y": 4},
{"label": "DOWN", "matrix": [4, 10], "x": 14, "y": 4},
{"label": "RGHT", "matrix": [4, 11], "x": 15, "y": 4}
]
}
}
}
19 changes: 19 additions & 0 deletions keyboards/somei70/keymaps/default/keymap.c
gzowski marked this conversation as resolved.
Show resolved Hide resolved
gzowski marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright 2024 James Gzowski
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum custom_layer { _LAYERA, _LAYERB };
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAYERA] = LAYOUT_5x15(
KC_ESC , 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_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_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT , KC_GRV , KC_DEL , KC_PGUP,
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_INS , KC_UP , KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_MUTE, KC_ENT, KC_RALT, MO(_LAYERB), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LAYERB] = LAYOUT_5x15(
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_PSCR,
KC_TAB , RGB_MOD, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
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_GRV , KC_DEL , KC_PGUP,
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_INS , KC_UP , KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , RGB_TOG, KC_ENT , KC_RALT, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
gzowski marked this conversation as resolved.
Show resolved Hide resolved
)};
23 changes: 23 additions & 0 deletions keyboards/somei70/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Somei70

70 key alternative layout

* Keyboard Maintainer: [James Gzowski](https://github.com/gzowski)
* Hardware Supported: Elite-Pi, Frood, 0xB2 Splinky or similar, requires D9-D15 pins
* Build Guide: [Somei70](https://github.com/gzowski/somei70)

Make example for this keyboard (after setting up your build environment):

make somei70:default

Flashing example for this keyboard:

make somei70:default: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

* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the PCB, if using a RP2040 press repeatidly to enter boot mode.
* **Hold down boot loader button on MCU** Hold down the boot loader button on the MCU while plugging in the keyboard
87 changes: 87 additions & 0 deletions keyboards/somei70/somei70.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright 2024 James Gzowski
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#ifdef OLED_ENABLE
static uint8_t oled_mode = 0;
static uint8_t esc_press_count = 0;
static uint16_t esc_timer = 0;
// Stats display
void render_stats(void) {
char wpm_str[10];
snprintf(wpm_str, sizeof(wpm_str), "WPM: %03u", get_current_wpm());
oled_write_ln(wpm_str, false);
gzowski marked this conversation as resolved.
Show resolved Hide resolved
if (host_keyboard_led_state().caps_lock) {
oled_write_P(PSTR("CAPS: On "), false);
} else {
oled_write_P(PSTR("CAPS: Off "), false);
}
if (keymap_config.nkro) {
oled_write_ln("NKRO: On", false);
} else {
oled_write_ln("NKRO: Off", false);
}
uint8_t brightness = rgblight_get_val();
char brightness_str[255];
snprintf(brightness_str, sizeof(brightness_str), "LED Brightness: %03u", brightness);
oled_write_ln(brightness_str, false);
gzowski marked this conversation as resolved.
Show resolved Hide resolved
oled_write_ln(PSTR("P: 0x6F64 V: 0x73CA"), false);
}
// Static images
static void render_caps(void) {
static const char PROGMEM my_caps[] = {
0, 128, 192, 192, 248, 120, 8, 8, 24, 24, 48, 96, 96, 176, 24, 12, 4, 6, 6, 30, 60, 48, 48, 240, 240, 16, 16, 16, 16, 16, 16, 16, 16, 16, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 16, 16, 16, 144, 208, 208, 248, 120, 24, 24, 24, 24, 48, 96, 96, 176, 24, 12, 4, 6, 6, 30, 60, 48, 48, 240, 224, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31, 56, 64, 128, 128, 128, 192, 192, 192, 224, 192, 225, 255, 240, 240, 128, 128, 64, 64, 48, 24, 7, 7, 6, 4, 140, 216, 120, 48, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 240,
248, 12, 12, 12, 12, 12, 28, 56, 0, 0, 240, 248, 156, 12, 12, 12, 12, 156, 248, 240, 0, 0, 248, 252, 156, 12, 12, 12, 12, 152, 240, 0, 0, 32, 112, 216, 140, 140, 140, 12, 12, 4, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 7, 31, 56, 64, 128, 128, 128, 192, 192, 192, 224, 192, 225, 255, 240, 240, 128, 128, 64, 64, 48, 24, 7, 7, 6, 4, 140, 216, 120, 48, 0, 0, 224, 240, 24, 4, 3, 1, 0, 0, 0, 0, 6, 255, 135, 7, 15, 31, 17, 49, 32, 32, 32, 96, 224, 224, 32, 48, 17, 27, 14, 4, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 15, 31, 48, 48, 48, 48, 48, 56, 28, 0, 0, 63, 63, 3, 1, 1, 1, 1, 3, 63, 63, 0, 0, 63, 63, 3, 3, 3, 3, 3, 1, 0, 0, 0, 16, 48, 48, 49, 49, 49, 27, 14, 4, 0,
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 224, 240, 24, 4, 3, 1, 0, 0, 0, 0, 6, 255, 135, 7, 15, 31, 17, 49, 32, 32, 32, 96, 224, 224, 32, 48, 17, 27, 14, 4, 0, 0, 3, 7, 6, 30, 60, 48, 32, 48, 48, 24, 12, 7, 7, 12, 16, 32, 96, 96, 120, 124, 60, 12, 15, 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 11, 15, 14, 30, 60, 48, 32, 48, 48, 24, 12, 7, 7, 12, 16, 32, 96, 96, 120, 124, 60, 12, 15, 7, 0, 0, 0, 0, 0, 0, 0,
};
oled_write_raw_P(my_caps, sizeof(my_caps));
}
static void render_logo(void) {
static const char PROGMEM my_logo[] = {
0, 128, 192, 192, 248, 120, 8, 8, 24, 24, 48, 96, 96, 176, 24, 12, 4, 6, 6, 30, 60, 48, 48, 240, 240, 16, 16, 16, 16, 16, 16, 16, 16, 16, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 16, 16, 16, 144, 208, 208, 248, 120, 24, 24, 24, 24, 48, 96, 96, 176, 24, 12, 4, 6, 6, 30, 60, 48, 48, 240, 224, 0, 0, 0, 0, 0, 0, 0, 0, 7, 31, 56, 64, 128, 128, 128, 192, 192, 192, 224, 192, 225, 255, 240, 240, 128, 128, 64, 64, 48, 24, 7, 7, 6, 4, 140, 216, 120, 48, 0, 48, 120, 204, 204, 204, 204, 204, 140, 8, 0, 0,
240, 248, 12, 12, 12, 12, 12, 248, 240, 0, 0, 248, 252, 24, 48, 96, 96, 48, 24, 252, 248, 0, 0, 248, 252, 140, 140, 140, 12, 8, 0, 0, 252, 252, 0, 0, 8, 12, 12, 12, 12, 252, 248, 0, 0, 240, 248, 12, 12, 140, 76, 248, 240, 0, 7, 31, 56, 64, 128, 128, 128, 192, 192, 192, 224, 192, 225, 255, 240, 240, 128, 128, 64, 64, 48, 24, 7, 7, 6, 4, 140, 216, 120, 48, 0, 0, 224, 240, 24, 4, 3, 1, 0, 0, 0, 0, 6, 255, 135, 7, 15, 31, 17, 49, 32, 32, 32, 96, 224, 224, 32, 48, 17, 27, 14, 4, 0, 16, 48, 48, 48, 48, 48, 48, 63, 15, 0, 0, 15, 31, 48, 48, 48, 48, 48, 31, 15, 0, 0, 63, 31, 0, 0, 0, 0, 0, 0, 31, 63, 0, 0, 31, 63, 49, 49, 49, 48, 16, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 63, 63,
0, 0, 15, 31, 50, 49, 48, 48, 31, 15, 0, 224, 240, 24, 4, 3, 1, 0, 0, 0, 0, 6, 255, 135, 7, 15, 31, 17, 49, 32, 32, 32, 96, 224, 224, 32, 48, 17, 27, 14, 4, 0, 0, 3, 7, 6, 30, 60, 48, 32, 48, 48, 24, 12, 7, 7, 12, 16, 32, 96, 96, 120, 124, 60, 12, 15, 15, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 11, 15, 14, 30, 60, 48, 32, 48, 48, 24, 12, 7, 7, 12, 16, 32, 96, 96, 120, 124, 60, 12, 15, 7, 0, 0, 0, 0, 0, 0, 0,
};
oled_write_raw_P(my_logo, sizeof(my_logo));
}
// Render chosen display
void render_oled_display(void) {
if (oled_mode == 0) {
if (host_keyboard_led_state().caps_lock) {
render_caps();
} else {
render_logo();
}
} else if (oled_mode == 1) {
render_stats();
}
}
// Rotate 180 degrees
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
zvecr marked this conversation as resolved.
Show resolved Hide resolved
return OLED_ROTATION_180;
}
bool oled_task_user(void) {
zvecr marked this conversation as resolved.
Show resolved Hide resolved
render_oled_display();
return false;
}
// Record keypress
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
zvecr marked this conversation as resolved.
Show resolved Hide resolved
switch (keycode) {
case KC_ESC:
if (record->event.pressed) {
if (timer_elapsed(esc_timer) > 250) {
esc_press_count = 0;
}
esc_press_count++;
esc_timer = timer_read();

if (esc_press_count == 3) {
oled_clear();
oled_mode = (oled_mode == 0) ? 1 : 0;
esc_press_count = 0;
}
}
break;
}
return true;
zvecr marked this conversation as resolved.
Show resolved Hide resolved
}
#endif