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

[Keyboard] Add NuPhy Air75 V2 keyboard #21949

Closed
wants to merge 10 commits into from
Closed
61 changes: 61 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/ansi.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright 2023 Persama (@Persama)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "ansi.h"

bool process_record_kb(uint16_t keycode, keyrecord_t *record)
{
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
case MAC_VOICE:
if (record->event.pressed) {
host_consumer_send(0xcf);
} else {
host_consumer_send(0);
}
return false;
default:
return true;
}
}

void dial_sw_scan(void)
drashna marked this conversation as resolved.
Show resolved Hide resolved
{
static uint8_t dial_scan = 0;
static uint8_t dial_save = 0xff;
static uint32_t dial_scan_timer = 0;

if (timer_elapsed32(dial_scan_timer) < 50) return;
dial_scan_timer = timer_read32(); // store time of last refresh

dial_scan = readPin(SYS_MODE_PIN);
if (dial_scan != dial_save) {
if (dial_scan) {
default_layer_set(1 << 0); // MAC
keymap_config.nkro = 0;
} else {
default_layer_set(1 << 2); // WIN
keymap_config.nkro = 1;
}
}
dial_save = dial_scan;
}

void keyboard_post_init_kb(void)
{
setPinOutput(DRIVER_LED_CS_PIN);
setPinOutput(DC_BOOST_PIN);
setPinInputHigh(SYS_MODE_PIN);

writePinLow(DRIVER_LED_CS_PIN);
writePinHigh(DC_BOOST_PIN);

keyboard_post_init_user();
}

void housekeeping_task_kb(void)
{
dial_sw_scan();
housekeeping_task_user();
}
9 changes: 9 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/ansi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2023 Persama (@Persama)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include "quantum.h"

enum custom_keycodes {
MAC_VOICE = QK_KB_0,
};
11 changes: 11 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright 2023 Persama (@Persama)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#define EECONFIG_USER_DATA_SIZE 8 // This is the size of the EEPROM for the custom VIA-specific data
Persama marked this conversation as resolved.
Show resolved Hide resolved

#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended

#define SYS_MODE_PIN C1
#define DC_BOOST_PIN C2
#define DRIVER_LED_CS_PIN C6
268 changes: 268 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/info.json
drashna marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
{
"keyboard_name": "NuPhy Air75 V2",
"manufacturer": "github.com/persama",
"bootloader": "stm32-dfu",
"processor": "STM32F072",
"usb":{
"vid": "0x19F5",
drashna marked this conversation as resolved.
Show resolved Hide resolved
"pid": "0x3245",
"device_version": "0.0.1",
"no_startup_check": true
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"console": true,
"command": true,
"nkro": true,
"key_lock": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["A4", "A5", "A6", "B9", "B0", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "A8", "A9", "A10", "A15", "B3"],
"rows": ["C14", "C15", "A0", "A1", "A2", "A3"]
},
"diode_direction": "COL2ROW",
"debounce": 2,
"ws2812": {
"pin": "A7"
},
"rgb_matrix": {
"driver": "ws2812",
"center_point": [80, 30],
"max_brightness": 100,
"val_steps": 20,
"speed_steps": 52,
"animations": {
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"rainbow_moving_chevron": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},

"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 10, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 20, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 30, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 40, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 50, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 60, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 70, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 90, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 100, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 110, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 120, "y": 0, "flags": 4},
{"matrix": [2, 14], "x": 130, "y": 0, "flags": 4},
{"matrix": [0, 15], "x": 140, "y": 0, "flags": 4},
{"matrix": [0, 14], "x": 150, "y": 0, "flags": 4},

{"matrix": [1, 16], "x": 150, "y": 10, "flags": 4},
{"matrix": [1, 13], "x": 130, "y": 10, "flags": 4},
{"matrix": [1, 12], "x": 120, "y": 10, "flags": 4},
{"matrix": [1, 11], "x": 110, "y": 10, "flags": 4},
{"matrix": [1, 10], "x": 100, "y": 10, "flags": 4},
{"matrix": [1, 9], "x": 90, "y": 10, "flags": 4},
{"matrix": [1, 8], "x": 80, "y": 10, "flags": 4},
{"matrix": [1, 7], "x": 70, "y": 10, "flags": 4},
{"matrix": [1, 6], "x": 60, "y": 10, "flags": 4},
{"matrix": [1, 5], "x": 50, "y": 10, "flags": 4},
{"matrix": [1, 4], "x": 40, "y": 10, "flags": 4},
{"matrix": [1, 3], "x": 30, "y": 10, "flags": 4},
{"matrix": [1, 2], "x": 20, "y": 10, "flags": 4},
{"matrix": [1, 1], "x": 10, "y": 10, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 10, "flags": 4},

{"matrix": [2, 0], "x": 0, "y": 20, "flags": 4},
{"matrix": [2, 1], "x": 15, "y": 20, "flags": 4},
{"matrix": [2, 2], "x": 25, "y": 20, "flags": 4},
{"matrix": [2, 3], "x": 35, "y": 20, "flags": 4},
{"matrix": [2, 4], "x": 45, "y": 20, "flags": 4},
{"matrix": [2, 5], "x": 55, "y": 20, "flags": 4},
{"matrix": [2, 6], "x": 65, "y": 20, "flags": 4},
{"matrix": [2, 7], "x": 75, "y": 20, "flags": 4},
{"matrix": [2, 8], "x": 85, "y": 20, "flags": 4},
{"matrix": [2, 9], "x": 95, "y": 20, "flags": 4},
{"matrix": [2, 10], "x": 105, "y": 20, "flags": 4},
{"matrix": [2, 11], "x": 115, "y": 20, "flags": 4},
{"matrix": [2, 12], "x": 125, "y": 20, "flags": 4},
{"matrix": [2, 13], "x": 135, "y": 20, "flags": 4},
{"matrix": [2, 16], "x": 150, "y": 20, "flags": 4},

{"matrix": [1, 15], "x": 150, "y": 30, "flags": 4},
{"matrix": [3, 13], "x": 127.5, "y": 30, "flags": 4},
{"matrix": [3, 11], "x": 117.5, "y": 30, "flags": 4},
{"matrix": [3, 10], "x": 107.5, "y": 30, "flags": 4},
{"matrix": [3, 9], "x": 97.5, "y": 30, "flags": 4},
{"matrix": [3, 8], "x": 87.5, "y": 30, "flags": 4},
{"matrix": [3, 7], "x": 77.5, "y": 30, "flags": 4},
{"matrix": [3, 6], "x": 67.5, "y": 30, "flags": 4},
{"matrix": [3, 5], "x": 57.5, "y": 30, "flags": 4},
{"matrix": [3, 4], "x": 47.5, "y": 30, "flags": 4},
{"matrix": [3, 3], "x": 37.5, "y": 30, "flags": 4},
{"matrix": [3, 2], "x": 27.5, "y": 30, "flags": 4},
{"matrix": [3, 1], "x": 17.5, "y": 30, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 30, "flags": 4},

{"matrix": [4, 0], "x": 0, "y": 40, "flags": 4},
{"matrix": [4, 2], "x": 22.5, "y": 40, "flags": 4},
{"matrix": [4, 3], "x": 32.5, "y": 40, "flags": 4},
{"matrix": [4, 4], "x": 42.5, "y": 40, "flags": 4},
{"matrix": [4, 5], "x": 52.5, "y": 40, "flags": 4},
{"matrix": [4, 6], "x": 62.5, "y": 40, "flags": 4},
{"matrix": [4, 7], "x": 72.5, "y": 40, "flags": 4},
{"matrix": [4, 8], "x": 82.5, "y": 40, "flags": 4},
{"matrix": [4, 9], "x": 92.5, "y": 40, "flags": 4},
{"matrix": [4, 10], "x": 102.5, "y": 40, "flags": 4},
{"matrix": [4, 11], "x": 112.5, "y": 40, "flags": 4},
{"matrix": [4, 13], "x": 122.5, "y": 40, "flags": 4},
{"matrix": [4, 14], "x": 140, "y": 40, "flags": 4},
{"matrix": [2, 15], "x": 150, "y": 40, "flags": 4},

{"matrix": [5, 15], "x": 150, "y": 50, "flags": 4},
{"matrix": [5, 14], "x": 140, "y": 50, "flags": 4},
{"matrix": [5, 13], "x": 130, "y": 50, "flags": 4},
{"matrix": [3, 14], "x": 120, "y": 50, "flags": 4},
{"matrix": [5, 10], "x": 110, "y": 50, "flags": 4},
{"matrix": [5, 9], "x": 100, "y": 50, "flags": 4},
{"matrix": [5, 6], "x": 37.5, "y": 50, "flags": 4},
{"matrix": [5, 2], "x": 25, "y": 50, "flags": 4},
{"matrix": [5, 1], "x": 12.5, "y": 50, "flags": 4},
{"matrix": [5, 0], "x": 0, "y": 50, "flags": 4}
]
},
"layouts": {
"LAYOUT_ansi_84": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "F2", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "F3", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "F4", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "F5", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "F6", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "F7", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "F8", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "F9", "matrix": [0, 9], "x": 9, "y": 0},
{"label": "F10", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "F11", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "F12", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "Print", "matrix": [2, 14], "x": 13, "y": 0},
{"label": "Ins", "matrix": [0, 15], "x": 14, "y": 0},
{"label": "Del", "matrix": [0, 14], "x": 15, "y": 0},

{"label": "~`", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "!1", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "@2", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "#3", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "$4", "matrix": [1, 4], "x": 4, "y": 1},
{"label": "%5", "matrix": [1, 5], "x": 5, "y": 1},
{"label": "^6", "matrix": [1, 6], "x": 6, "y": 1},
{"label": "&7", "matrix": [1, 7], "x": 7, "y": 1},
{"label": "*8", "matrix": [1, 8], "x": 8, "y": 1},
{"label": "(9", "matrix": [1, 9], "x": 9, "y": 1},
{"label": ")0", "matrix": [1, 10], "x": 10, "y": 1},
{"label": "_-", "matrix": [1, 11], "x": 11, "y": 1},
{"label": "+=", "matrix": [1, 12], "x": 12, "y": 1},
{"label": "Backsp", "matrix": [1, 13], "x": 13, "y": 1, "w": 2},
{"label": "PageUp", "matrix": [1, 16], "x": 15, "y": 1},

{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2},
{"label": "{[", "matrix": [2, 11], "x": 11.5, "y": 2},
{"label": "}]", "matrix": [2, 12], "x": 12.5, "y": 2},
{"label": "|\\", "matrix": [2, 13], "x": 13.5, "y": 2, "w": 1.5},
{"label": "PageDn", "matrix": [2, 16], "x": 15, "y": 2},

{"label": "Caps", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3},
{"label": ":", "matrix": [3, 10], "x": 10.75, "y": 3},
{"label": "\"", "matrix": [3, 11], "x": 11.75, "y": 3},
{"label": "Enter", "matrix": [3, 13], "x": 12.75, "y": 3, "w": 2.25},
{"label": "Home", "matrix": [1, 15], "x": 15, "y": 3},

{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4},
{"label": "<,", "matrix": [4, 9], "x": 9.25, "y": 4},
{"label": ">.", "matrix": [4, 10], "x": 10.25, "y": 4},
{"label": "?/", "matrix": [4, 11], "x": 11.25, "y": 4},
{"label": "Shift", "matrix": [4, 13], "x": 12.25, "y": 4, "w": 1.75},
{"label": "↑", "matrix": [4, 14], "x": 14, "y": 4},
{"label": "End", "matrix": [2, 15], "x": 15, "y": 4},

{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5, "w": 1.25},
{"label": "Opt", "matrix": [5, 1], "x": 1.25, "y": 5, "w": 1.25},
{"label": "Cmd", "matrix": [5, 2], "x": 2.5, "y": 5, "w": 1.25},
{"label": "Space", "matrix": [5, 6], "x": 3.75, "y": 5, "w": 6.25},
{"label": "Cmd", "matrix": [5, 9], "x": 10, "y": 5},
{"label": "Fn", "matrix": [5, 10], "x": 11, "y": 5},
{"label": "Ctrl", "matrix": [3, 14], "x": 12, "y": 5},
{"label": "←", "matrix": [5, 13], "x": 13, "y": 5},
{"label": "↓", "matrix": [5, 14], "x": 14, "y": 5},
{"label": "→", "matrix": [5, 15], "x": 15, "y": 5}

]
}
}
}

Loading