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
90 changes: 90 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/ansi.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright 2023 Persama (@Persama)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "ansi.h"

bool process_record_user(uint16_t keycode, keyrecord_t *record)
Persama marked this conversation as resolved.
Show resolved Hide resolved
{
switch (keycode) {
case MAC_SEARCH:
drashna marked this conversation as resolved.
Show resolved Hide resolved
if (record->event.pressed) {
register_code(KC_LGUI);
register_code(KC_SPACE);
wait_ms(50);
unregister_code(KC_LGUI);
unregister_code(KC_SPACE);
}
return false;
case MAC_VOICE:
if (record->event.pressed) {
host_consumer_send(0xcf);
} else {
host_consumer_send(0);
}
return false;
case MAC_PRT:
if (record->event.pressed) {
register_code(KC_LGUI);
register_code(KC_LSFT);
register_code(KC_3);
wait_ms(50);
unregister_code(KC_3);
unregister_code(KC_LSFT);
unregister_code(KC_LGUI);
}
return false;
case MAC_PRTA:
if (record->event.pressed) {
register_code(KC_LGUI);
register_code(KC_LSFT);
register_code(KC_4);
wait_ms(50);
unregister_code(KC_4);
unregister_code(KC_LSFT);
unregister_code(KC_LGUI);
}
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;

// 20ms扫描间隔
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();
}
12 changes: 12 additions & 0 deletions keyboards/nuphy/air75_v2/ansi/ansi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright 2023 Persama (@Persama)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include "quantum.h"

enum custom_keycodes {
MAC_SEARCH = QK_KB_0,
MAC_VOICE,
MAC_PRT,
MAC_PRTA
};
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
272 changes: 272 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,272 @@
{
"keyboard_name": "NuPhy Air75 V2",
"manufacturer": "github.com/persama",
"bootloader": "stm32-dfu",
"processor": "STM32F072",
"usb":{
"vid": "0x19F5",
"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",
"dynamic_keymap": {
"layer_count": 8
},
Persama marked this conversation as resolved.
Show resolved Hide resolved
"debounce": 2,
"ws2812": {
"driver": "bitbang",
Persama marked this conversation as resolved.
Show resolved Hide resolved
"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