[Keyboard] Add Atlantis PS17 (#19952)
parent
3eb04fee87
commit
54dca8cbff
@ -0,0 +1,53 @@ |
||||
// Copyright 2023 mjbogusz (@mjbogusz)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once |
||||
|
||||
/* Indicator LEDs */ |
||||
#define LED_INDICATOR_0_PIN D0 |
||||
#define LED_INDICATOR_1_PIN D5 |
||||
#define LED_INDICATOR_2_PIN D4 |
||||
|
||||
/* RGB matrix */ |
||||
#define RGB_DI_PIN B7 |
||||
#define RGB_MATRIX_LED_COUNT 28 |
||||
#define RGB_MATRIX_KEYPRESSES |
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED |
||||
|
||||
#ifdef RGB_MATRIX_ENABLE |
||||
// RGB Matrix Animation modes. Explicitly enabled
|
||||
// For full list of effects, see:
|
||||
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
|
||||
#define ENABLE_RGB_MATRIX_SOLID_COLOR |
||||
// #define ENABLE_RGB_MATRIX_ALPHAS_MODS
|
||||
// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
|
||||
// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
|
||||
// #define ENABLE_RGB_MATRIX_BREATHING
|
||||
// #define ENABLE_RGB_MATRIX_BAND_SAT
|
||||
// #define ENABLE_RGB_MATRIX_BAND_VAL
|
||||
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
|
||||
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
|
||||
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
|
||||
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_ALL |
||||
// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||
// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||
// #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
|
||||
// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||
// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL |
||||
// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
|
||||
// #define ENABLE_RGB_MATRIX_DUAL_BEACON
|
||||
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON |
||||
// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
|
||||
// #define ENABLE_RGB_MATRIX_RAINDROPS
|
||||
// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
// #define ENABLE_RGB_MATRIX_HUE_BREATHING
|
||||
// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
|
||||
// #define ENABLE_RGB_MATRIX_HUE_WAVE
|
||||
// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_RAIN |
||||
// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||
// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||
#endif |
@ -0,0 +1,99 @@ |
||||
{ |
||||
"manufacturer": "Atlantis", |
||||
"keyboard_name": "PS17", |
||||
"maintainer": "mjbogusz", |
||||
"url": "https://qmk.fm/keyboards/", |
||||
"processor": "atmega32u4", |
||||
"bootloader": "atmel-dfu", |
||||
"bootloader_instructions": "To reset the board into bootloader mode, tap the Reset switch mounted on the bottom of the PCB.", |
||||
"usb": { |
||||
"device_version": "1.0.0", |
||||
"pid": "0x414B", |
||||
"vid": "0x0015" |
||||
}, |
||||
"features": { |
||||
"bootmagic": false, |
||||
"command": false, |
||||
"console": false, |
||||
"extrakey": true, |
||||
"mousekey": true, |
||||
"nkro": true, |
||||
"encoder": true, |
||||
"rgb_matrix": true |
||||
}, |
||||
"diode_direction": "COL2ROW", |
||||
"matrix_pins": { |
||||
"cols": ["F6", "F7", "D3", "D6"], |
||||
"rows": ["F0", "B4", "B5", "B6", "C6", "C7", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN", "NO_PIN"] |
||||
}, |
||||
"encoder": { |
||||
"rotary": [{ |
||||
"pin_a": "D2", |
||||
"pin_b": "D1" |
||||
}] |
||||
}, |
||||
"layouts": { |
||||
"LAYOUT": { |
||||
"layout": [ |
||||
{ "matrix": [0, 1], "x": 0, "y": 0}, |
||||
|
||||
{ "matrix": [1, 0], "x": 0, "y": 1.5}, |
||||
{ "matrix": [1, 1], "x": 1, "y": 1.5}, |
||||
{ "matrix": [1, 2], "x": 2, "y": 1.5}, |
||||
{ "matrix": [1, 3], "x": 3, "y": 1.5}, |
||||
|
||||
{ "matrix": [2, 0], "x": 0, "y": 2.5}, |
||||
{ "matrix": [2, 1], "x": 1, "y": 2.5}, |
||||
{ "matrix": [2, 2], "x": 2, "y": 2.5}, |
||||
{ "matrix": [2, 3], "x": 3, "y": 2.5, "h": 2}, |
||||
|
||||
{ "matrix": [3, 0], "x": 0, "y": 3.5}, |
||||
{ "matrix": [3, 1], "x": 1, "y": 3.5}, |
||||
{ "matrix": [3, 2], "x": 2, "y": 3.5}, |
||||
|
||||
{ "matrix": [4, 0], "x": 0, "y": 4.5}, |
||||
{ "matrix": [4, 1], "x": 1, "y": 4.5}, |
||||
{ "matrix": [4, 2], "x": 2, "y": 4.5}, |
||||
{ "matrix": [4, 3], "x": 3, "y": 4.5, "h": 2}, |
||||
|
||||
{ "matrix": [5, 0], "x": 0, "y": 5.5, "w": 2}, |
||||
{ "matrix": [5, 2], "x": 2, "y": 5.5} |
||||
] |
||||
} |
||||
}, |
||||
"rgb_matrix": { |
||||
"driver": "WS2812", |
||||
"center_point": [126, 126], |
||||
"layout": [ |
||||
{ "flags": 4, "matrix": [1, 0], "x": 74, "y": 165 }, |
||||
{ "flags": 4, "matrix": [1, 1], "x": 108, "y": 165 }, |
||||
{ "flags": 4, "matrix": [1, 2], "x": 144, "y": 165 }, |
||||
{ "flags": 4, "matrix": [1, 3], "x": 179, "y": 165 }, |
||||
{ "flags": 4, "matrix": [2, 0], "x": 74, "y": 129 }, |
||||
{ "flags": 4, "matrix": [2, 1], "x": 109, "y": 129 }, |
||||
{ "flags": 4, "matrix": [2, 2], "x": 143, "y": 129 }, |
||||
{ "flags": 4, "matrix": [2, 3], "x": 188, "y": 121 }, |
||||
{ "flags": 4, "matrix": [3, 0], "x": 74, "y": 95 }, |
||||
{ "flags": 4, "matrix": [3, 1], "x": 109, "y": 95 }, |
||||
{ "flags": 4, "matrix": [3, 2], "x": 143, "y": 95 }, |
||||
{ "flags": 4, "matrix": [4, 0], "x": 73, "y": 60 }, |
||||
{ "flags": 4, "matrix": [4, 1], "x": 109, "y": 60 }, |
||||
{ "flags": 4, "matrix": [4, 2], "x": 144, "y": 60 }, |
||||
{ "flags": 4, "matrix": [4, 3], "x": 188, "y": 51 }, |
||||
{ "flags": 4, "matrix": [5, 0], "x": 91, "y": 25 }, |
||||
{ "flags": 4, "matrix": [5, 2], "x": 144, "y": 25 }, |
||||
|
||||
{ "flags": 2, "x": 61, "y": 26}, |
||||
{ "flags": 2, "x": 61, "y": 88}, |
||||
{ "flags": 2, "x": 61, "y": 158}, |
||||
{ "flags": 2, "x": 61, "y": 197}, |
||||
{ "flags": 2, "x": 61, "y": 232}, |
||||
{ "flags": 2, "x": 192, "y": 232}, |
||||
{ "flags": 2, "x": 192, "y": 196}, |
||||
{ "flags": 2, "x": 192, "y": 158}, |
||||
{ "flags": 2, "x": 192, "y": 87}, |
||||
{ "flags": 2, "x": 183, "y": 26}, |
||||
{ "flags": 2, "x": 127, "y": 24} |
||||
] |
||||
} |
||||
} |
@ -0,0 +1,49 @@ |
||||
// Copyright 2023 mjbogusz (@mjbogusz)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
// Default layer: numpad + volume control
|
||||
[0] = LAYOUT( |
||||
KC_MUTE, |
||||
TO(1), KC_PSLS, KC_PAST, KC_PMNS, |
||||
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, |
||||
KC_KP_4, KC_KP_5, KC_KP_6, |
||||
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, |
||||
KC_KP_0, KC_PDOT |
||||
), |
||||
[1] = LAYOUT( |
||||
RGB_MOD, |
||||
TO(2), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
[2] = LAYOUT( |
||||
RGB_MOD, |
||||
TO(3), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
[3] = LAYOUT( |
||||
RGB_MOD, |
||||
TO(0), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
}; |
||||
|
||||
#if defined(ENCODER_MAP_ENABLE) |
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { |
||||
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, |
||||
[1] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, |
||||
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, |
||||
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, |
||||
}; |
||||
#endif |
@ -0,0 +1,49 @@ |
||||
// Copyright 2023 mjbogusz (@mjbogusz)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
// Default layer: numpad + volume control
|
||||
[0] = LAYOUT( |
||||
KC_MUTE, |
||||
TO(1), KC_PSLS, KC_PAST, KC_PMNS, |
||||
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, |
||||
KC_KP_4, KC_KP_5, KC_KP_6, |
||||
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, |
||||
KC_KP_0, KC_PDOT |
||||
), |
||||
[1] = LAYOUT( |
||||
KC_MUTE, |
||||
TO(2), XXXXXXX, XXXXXXX, KC_VOLD, |
||||
XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, |
||||
KC_MRWD, KC_MPLY, KC_MFFD, |
||||
KC_MPRV, KC_MSTP, KC_MNXT, KC_MSEL, |
||||
XXXXXXX, XXXXXXX |
||||
), |
||||
[2] = LAYOUT( |
||||
RGB_MOD, |
||||
TO(3), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
[3] = LAYOUT( |
||||
KC_TRNS, |
||||
TO(0), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
}; |
||||
|
||||
#if defined(ENCODER_MAP_ENABLE) |
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { |
||||
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, |
||||
[1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, |
||||
[2] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, |
||||
[3] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, |
||||
}; |
||||
#endif |
@ -0,0 +1 @@ |
||||
ENCODER_MAP_ENABLE = yes
|
@ -0,0 +1,49 @@ |
||||
// Copyright 2023 mjbogusz (@mjbogusz)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
// Default layer: numpad + volume control
|
||||
[0] = LAYOUT( |
||||
KC_MUTE, |
||||
TO(1), KC_PSLS, KC_PAST, KC_PMNS, |
||||
KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, |
||||
KC_KP_4, KC_KP_5, KC_KP_6, |
||||
KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, |
||||
KC_KP_0, KC_PDOT |
||||
), |
||||
[1] = LAYOUT( |
||||
RGB_MOD, |
||||
TO(2), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
[2] = LAYOUT( |
||||
KC_TRNS, |
||||
TO(3), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
[3] = LAYOUT( |
||||
KC_TRNS, |
||||
TO(0), KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS |
||||
), |
||||
}; |
||||
|
||||
#if defined(ENCODER_MAP_ENABLE) |
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { |
||||
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, |
||||
[1] = { ENCODER_CCW_CW(RGB_HUI, RGB_HUD) }, |
||||
[2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, |
||||
[3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, |
||||
}; |
||||
#endif |
@ -0,0 +1,2 @@ |
||||
ENCODER_MAP_ENABLE = yes
|
||||
VIA_ENABLE = yes
|
@ -0,0 +1,53 @@ |
||||
// Copyright 2023 mjbogusz (@mjbogusz)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "quantum.h" |
||||
|
||||
layer_state_t layer_state_set_kb(layer_state_t state) { |
||||
/* Display current layer using indicator LEDs */ |
||||
writePin(LED_INDICATOR_0_PIN, !IS_LAYER_ON_STATE(state, 1)); |
||||
writePin(LED_INDICATOR_1_PIN, !IS_LAYER_ON_STATE(state, 2)); |
||||
writePin(LED_INDICATOR_2_PIN, !IS_LAYER_ON_STATE(state, 3)); |
||||
return layer_state_set_user(state); |
||||
} |
||||
|
||||
void keyboard_pre_init_kb(void) { |
||||
/* Set indicator LEDs as outputs */ |
||||
setPinOutput(LED_INDICATOR_0_PIN); |
||||
setPinOutput(LED_INDICATOR_1_PIN); |
||||
setPinOutput(LED_INDICATOR_2_PIN); |
||||
keyboard_pre_init_user(); |
||||
} |
||||
|
||||
#if defined(ENCODER_ENABLE) |
||||
bool encoder_update_kb(uint8_t index, bool clockwise) { |
||||
if (!encoder_update_user(index, clockwise)) { |
||||
/* Don't process further events if user function exists and returns false */ |
||||
return false; |
||||
} |
||||
|
||||
/* Ignore index - only one encoder on this board */ |
||||
if (clockwise) { |
||||
tap_code_delay(KC_VOLU, 10); |
||||
} else { |
||||
tap_code_delay(KC_VOLD, 10); |
||||
} |
||||
return false; |
||||
} |
||||
#endif |
||||
|
||||
#ifdef RGB_MATRIX_ENABLE |
||||
void suspend_power_down_kb(void) { |
||||
/* Disable indicator LEDs when going to sleep */ |
||||
writePin(LED_INDICATOR_0_PIN, 1); |
||||
writePin(LED_INDICATOR_1_PIN, 1); |
||||
writePin(LED_INDICATOR_2_PIN, 1); |
||||
suspend_power_down_user(); |
||||
} |
||||
|
||||
void suspend_wakeup_init_kb(void) { |
||||
/* Restore indicator LEDs state */ |
||||
layer_state_set_kb(layer_state); |
||||
suspend_wakeup_init_user(); |
||||
} |
||||
#endif |
@ -0,0 +1,34 @@ |
||||
# atlantis/ps17 |
||||
|
||||
 |
||||
|
||||
A 17-key hot-swap numpad/macropad with an EC11 clickable rotary encoder (knob) and RGB backlight and underglow |
||||
|
||||
* Keyboard Maintainer: [mjbogusz](https://github.com/mjbogusz) |
||||
* Hardware Supported: Atlantis PS17 |
||||
* Hardware Availability: [AliExpress, SpiderIsland Tech Co., Ltd Store](https://www.aliexpress.com/item/1005003058226085.html) |
||||
* Additional photos: |
||||
* [Full size](https://i.imgur.com/5qGIv2K.jpg) |
||||
* [PCB front](https://i.imgur.com/OmGBqvC.jpg) |
||||
* [PCB back](https://i.imgur.com/rvoZZ5f.jpg) |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make atlantis/ps17:default |
||||
|
||||
Flashing example for this keyboard: |
||||
|
||||
make atlantis/ps17: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 |
||||
|
||||
Enter the bootloader in 3 ways: |
||||
|
||||
* **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 |
||||
|
||||
## Attributions |
||||
|
||||
Pin mapping and LED physical layout based on [Solartempest work](https://github.com/solartempest/qmk_firmware/tree/master/keyboards/solartempest/ps17) |
@ -0,0 +1 @@ |
||||
LTO_ENABLE = yes
|
Loading…
Reference in new issue