Add m2 keyboard

This commit is contained in:
jonylee1986 2023-02-15 17:15:41 +08:00
parent e4c41b4337
commit 55c34ae6aa
11 changed files with 1266 additions and 0 deletions

134
keyboards/hfdkb/m2/config.h Normal file
View File

@ -0,0 +1,134 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* Use 5 dynamic keymap layers */
#define DYNAMIC_KEYMAP_LAYER_COUNT 6
#define RGB_TRIGGER_ON_KEYDOWN
/* Force NKRO on boot up regardless of the setting saved in the EEPROM (uncomment to enable it) */
#define FORCE_NKRO
/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 21
/* key matrix pins */
#define MATRIX_ROW_PINS {B15, C6, C7, C8, C9, A8}
#define MATRIX_COL_PINS { C1, C2, C3, A0, A1, A2, A3, A4, A5, A6, A7, C4, C5, B0, B1, B2,B10,B11,B12,B13,B14}
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION ROW2COL
/* encoder resolution */
#define ENCODER_RESOLUTION 2
#define TAP_CODE_DELAY 20
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* SPI Config for spi flash*/
#define SPI_DRIVER SPIDQ
#define SPI_SCK_PIN B3
#define SPI_MOSI_PIN B5
#define SPI_MISO_PIN B4
#define SPI_MOSI_PAL_MODE 5
#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
#define WEAR_LEVELING_BACKING_SIZE (8 * 1024)
/* I2C Config for LED Driver */
#define DRIVER_COUNT 2
#define DRIVER_ADDR_1 0b1110100
#define DRIVER_ADDR_2 0b1110111
#define I2C1_SDA_PIN B7
#define I2C1_SCL_PIN B6
#define I2C1_SCL_PAL_MODE 4
#define I2C1_OPMODE OPMODE_I2C
#define I2C1_CLOCK_SPEED 400000 /* 400000 */
#define DRIVER_1_LED_TOTAL 60
#define DRIVER_2_LED_TOTAL 38
#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#define RGB_MATRIX_CENTER {112,32}
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_KEYRELEASES
// 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_ALPHAS_MODS
// #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_SOLID_COLOR // Static single hue, no speed support
#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_RAIN
// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
//#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
//#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
//#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
//#define ENABLE_RGB_MATRIX_SOLID_SPLASH
//#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#define RGB_MATRIX_HUE_STEP 62
#define RGB_MATRIX_SAT_STEP 62
#define RGB_MATRIX_VAL_STEP 50
#define RGB_MATRIX_SPD_STEP 62
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 /* The maximum brightness level */

View File

@ -0,0 +1,23 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
#define SPI_USE_WAIT TRUE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>

View File

@ -0,0 +1,122 @@
{
"keyboard_name": "MonsGeek Keyboard",
"manufacturer": "www.hfd.cn",
"maintainer": "hfd",
"usb": {
"vid": "0xFFFE",
"pid": "0x0008",
"device_version": "1.1.0"
},
"processor": "WB32FQ95",
"bootloader": "wb32-dfu",
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "Esc", "x": 0, "y": 0 },
{ "label": "F1", "x": 2, "y": 0 },
{ "label": "F2", "x": 3, "y": 0 },
{ "label": "F3", "x": 4, "y": 0 },
{ "label": "F4", "x": 5, "y": 0 },
{ "label": "F5", "x": 6.5, "y": 0 },
{ "label": "F6", "x": 7.5, "y": 0 },
{ "label": "F7", "x": 8.5, "y": 0 },
{ "label": "F8", "x": 9.5, "y": 0 },
{ "label": "F9", "x": 11, "y": 0 },
{ "label": "F10", "x": 12, "y": 0 },
{ "label": "F11", "x": 13, "y": 0 },
{ "label": "F12", "x": 14, "y": 0 },
{ "label": "Delete", "x": 15, "y": 0 },
{ "label": "PrtSc", "x": 16, "y": 0 },
{ "label": "Home", "x": 17, "y": 0 },
{ "label": "Pgup", "x": 18, "y": 0 },
{ "label": "Pgdn", "x": 19, "y": 0 },
{ "label": "~", "x": 0, "y": 1.25 },
{ "label": "!", "x": 1, "y": 1.25 },
{ "label": "@", "x": 2, "y": 1.25 },
{ "label": "#", "x": 3, "y": 1.25 },
{ "label": "$", "x": 4, "y": 1.25 },
{ "label": "%", "x": 5, "y": 1.25 },
{ "label": "^", "x": 6, "y": 1.25 },
{ "label": "&", "x": 7, "y": 1.25 },
{ "label": "*", "x": 8, "y": 1.25 },
{ "label": "(", "x": 9, "y": 1.25 },
{ "label": ")", "x": 10, "y": 1.25 },
{ "label": "_", "x": 11, "y": 1.25 },
{ "label": "+", "x": 12, "y": 1.25 },
{ "label": "Bksp", "x": 14, "y": 1.25 },
{ "label": "Numlock", "x": 16, "y": 1.25 },
{ "label": "/", "x": 17, "y": 1.25 },
{ "label": "*", "x": 18, "y": 1.25 },
{ "label": "-", "x": 19, "y": 1.25 },
{ "label": "Tab", "x": 0, "y": 2.25, "w": 1.5 },
{ "label": "Q", "x": 1.5, "y": 2.25 },
{ "label": "W", "x": 2.5, "y": 2.25 },
{ "label": "E", "x": 3.5, "y": 2.25 },
{ "label": "R", "x": 4.5, "y": 2.25 },
{ "label": "T", "x": 5.5, "y": 2.25 },
{ "label": "Y", "x": 6.5, "y": 2.25 },
{ "label": "U", "x": 7.5, "y": 2.25 },
{ "label": "I", "x": 8.5, "y": 2.25 },
{ "label": "O", "x": 9.5, "y": 2.25 },
{ "label": "P", "x": 10.5, "y": 2.25 },
{ "label": "{", "x": 11.5, "y": 2.25 },
{ "label": "}", "x": 12.5, "y": 2.25 },
{ "label": "|", "x": 13.5, "y": 2.25, "w": 1.5 },
{ "label": "7", "x": 16, "y": 2.25 },
{ "label": "8", "x": 17, "y": 2.25 },
{ "label": "9", "x": 18, "y": 2.25, "w": 1.5 },
{ "label": "+", "x": 19, "y": 2.25 },
{ "label": "Caps Lock", "x": 0, "y": 3.25, "w": 1.75 },
{ "label": "A", "x": 1.75, "y": 3.25 },
{ "label": "S", "x": 2.75, "y": 3.25 },
{ "label": "D", "x": 3.75, "y": 3.25 },
{ "label": "F", "x": 4.75, "y": 3.25 },
{ "label": "G", "x": 5.75, "y": 3.25 },
{ "label": "H", "x": 6.75, "y": 3.25 },
{ "label": "J", "x": 7.75, "y": 3.25 },
{ "label": "K", "x": 8.75, "y": 3.25 },
{ "label": "L", "x": 9.75, "y": 3.25 },
{ "label": ":", "x": 10.75, "y": 3.25 },
{ "label": "'", "x": 11.75, "y": 3.25 },
{ "label": "Enter", "x": 12.75, "y": 3.25 },
{ "label": "4", "x": 17, "y": 3.25, "w": 1.25 },
{ "label": "5", "x": 18, "y": 3.25 },
{ "label": "6", "x": 19, "y": 3.25 },
{ "label": "Shift", "x": 0, "y": 4.25, "w": 1.25 },
{ "label": "Z", "x": 2.25, "y": 4.25 },
{ "label": "X", "x": 3.25, "y": 4.25 },
{ "label": "C", "x": 4.25, "y": 4.25 },
{ "label": "V", "x": 5.25, "y": 4.25 },
{ "label": "B", "x": 6.25, "y": 4.25 },
{ "label": "N", "x": 7.25, "y": 4.25 },
{ "label": "M", "x": 8.25, "y": 4.25 },
{ "label": "<", "x": 9.25, "y": 4.25 },
{ "label": ">", "x": 10.25, "y": 4.25 },
{ "label": "?", "x": 11.25, "y": 4.25 },
{ "label": "Shift", "x": 12.25, "y": 4.25, "w": 1.75 },
{ "label": "Up", "x": 15, "y": 4.25 },
{ "label": "1", "x": 16, "y": 4.25 },
{ "label": "2", "x": 17, "y": 4.25 },
{ "label": "3", "x": 18, "y": 4.25 },
{ "label": "4", "x": 19, "y": 4.25 },
{ "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25 },
{ "label": "Win", "x": 1.25, "y": 5.25, "w": 1.25 },
{ "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25 },
{ "label": "Space", "x": 3.75, "y": 5.25, "w": 6.25 },
{ "label": "Alt", "x": 10, "y": 5.25, "w": 1.25 },
{ "label": "Fn", "x": 12.5, "y": 5.25, "w": 1.25 },
{ "label": "Left", "x": 13.75, "y": 5.25, "w": 1.25 },
{ "label": "Down", "x": 15, "y": 5.25 },
{ "label": "Right", "x": 16, "y": 5.25 },
{ "label": "0", "x": 17, "y": 5.25 },
{ "label": ".", "x": 18, "y": 5.25 }
]
}
}
}

View File

@ -0,0 +1,115 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum __layers {
WIN_B,
WIN_WASD,
WIN_FN,
MAC_B,
MAC_WASD,
MAC_FN
};
enum custom_keycodes {
KC_MISSION_CONTROL = SAFE_RANGE,
KC_LAUNCHPAD,
KC_RESET
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[WIN_B] = LAYOUT( /* Base */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[WIN_WASD] = LAYOUT( /* Base */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
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_W, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_A, KC_S, KC_D, KC_P0, KC_PDOT),
[WIN_FN] = LAYOUT( /* FN */
KC_ESC, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM,KC_MSEL,KC_MPLY,KC_MPRV,KC_MNXT,KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_SPD, RGB_SPI, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, TG(WIN_WASD), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_INS, DF(MAC_B), KC_PSCR, KC_LBRC, KC_RBRC, RGB_MOD, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, RGB_TOG, KC_SCLN, KC_QUOT, RGB_HUI, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_CALC, KC_V, KC_B, KC_N, KC_MUTE, KC_VOLD,KC_VOLU, KC_SLSH, KC_RSFT, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, MAGIC_TOGGLE_GUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),RGB_SAD, RGB_VAD, RGB_SAI, KC_P0, KC_PDOT),
[MAC_B] = LAYOUT( /* Base */
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[MAC_WASD] = LAYOUT( /* Base */
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[MAC_FN] = LAYOUT( /* FN */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_SPD, RGB_SPI, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q,TG(MAC_WASD),KC_E, KC_R, KC_T, KC_Y, KC_U, KC_INS, DF(WIN_B), KC_PSCR, KC_LBRC, KC_RBRC, RGB_MOD, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, RGB_TOG, KC_SCLN, KC_QUOT, RGB_HUI, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_CALC, KC_V, KC_B, KC_N, KC_MUTE, KC_VOLD,KC_VOLU, KC_SLSH, KC_RSFT, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),RGB_SAD, RGB_VAD, RGB_SAI, KC_P0, KC_PDOT)
};
// clang-format on
#if CONSOLE_ENABLE
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
// debug_matrix=true;
// debug_keyboard=true;
// debug_mouse=true;
}
#endif
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[WIN_WASD] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) },
[MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[MAC_WASD] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) }
};
#endif

View File

@ -0,0 +1,115 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
enum __layers {
WIN_B,
WIN_WASD,
WIN_FN,
MAC_B,
MAC_WASD,
MAC_FN
};
enum custom_keycodes {
KC_MISSION_CONTROL = SAFE_RANGE,
KC_LAUNCHPAD,
KC_RESET
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[WIN_B] = LAYOUT( /* Base */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[WIN_WASD] = LAYOUT( /* Base */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
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_W, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),KC_A, KC_S, KC_D, KC_P0, KC_PDOT),
[WIN_FN] = LAYOUT( /* FN */
KC_ESC, KC_MYCM, KC_MAIL, KC_WSCH, KC_WHOM,KC_MSEL,KC_MPLY,KC_MPRV,KC_MNXT,KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_SPD, RGB_SPI, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, TG(WIN_WASD), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_INS, DF(MAC_B), KC_PSCR, KC_LBRC, KC_RBRC, RGB_MOD, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, RGB_TOG, KC_SCLN, KC_QUOT, RGB_HUI, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_CALC, KC_V, KC_B, KC_N, KC_MUTE, KC_VOLD,KC_VOLU, KC_SLSH, KC_RSFT, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, MAGIC_TOGGLE_GUI, KC_LALT, KC_SPC, KC_RALT, MO(WIN_FN),RGB_SAD, RGB_VAD, RGB_SAI, KC_P0, KC_PDOT),
[MAC_B] = LAYOUT( /* Base */
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
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_P7, KC_P8, KC_P9, KC_PPLS,
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_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[MAC_WASD] = LAYOUT( /* Base */
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, KC_F5, KC_F6, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, 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_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
[MAC_FN] = LAYOUT( /* FN */
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_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_SPD, RGB_SPI, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q,TG(MAC_WASD),KC_E, KC_R, KC_T, KC_Y, KC_U, KC_INS, DF(WIN_B), KC_PSCR, KC_LBRC, KC_RBRC, RGB_MOD, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, RGB_TOG, KC_SCLN, KC_QUOT, RGB_HUI, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_CALC, KC_V, KC_B, KC_N, KC_MUTE, KC_VOLD,KC_VOLU, KC_SLSH, KC_RSFT, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(MAC_FN),RGB_SAD, RGB_VAD, RGB_SAI, KC_P0, KC_PDOT)
};
// clang-format on
#if CONSOLE_ENABLE
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
// debug_matrix=true;
// debug_keyboard=true;
// debug_mouse=true;
}
#endif
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
[WIN_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[WIN_WASD] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[WIN_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) },
[MAC_B] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[MAC_WASD] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
[MAC_FN] = { ENCODER_CCW_CW(RGB_VAI, RGB_VAD) }
};
#endif

View File

@ -0,0 +1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = no

620
keyboards/hfdkb/m2/m2.c Normal file
View File

@ -0,0 +1,620 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "m2.h"
#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{1, A_1, B_1, C_1},
{1, A_2, B_2, C_2},
{1, A_3, B_3, C_3},
{1, A_4, B_4, C_4},
{1, A_5, B_5, C_5},
{1, A_6, B_6, C_6},
{1, A_7, B_7, C_7},
{1, A_8, B_8, C_8},
{1, A_9, B_9, C_9},
{1, A_10, B_10, C_10},
{1, A_11, B_11, C_11},
{1, A_12, B_12, C_12},
{1, A_13, B_13, C_13},
{1, A_14, B_14, C_14},
{1, D_11, E_11, F_11},
{1, D_12, E_12, F_12},
{1, D_13, E_13, F_13},
{1, D_14, E_14, F_14},
{0, A_1, B_1, C_1},
{0, A_2, B_2, C_2},
{0, A_3, B_3, C_3},
{0, A_4, B_4, C_4},
{0, A_5, B_5, C_5},
{0, A_6, B_6, C_6},
{0, A_7, B_7, C_7},
{0, A_8, B_8, C_8},
{0, A_9, B_9, C_9},
{0, A_10, B_10, C_10},
{0, A_11, B_11, C_11},
{0, A_12, B_12, C_12},
{0, A_13, B_13, C_13},
{0, A_14, B_14, C_14},
{1, D_4, E_4, F_4},
{1, D_5, E_5, F_5},
{1, D_6, E_6, F_6},
{1, D_7, E_7, F_7},
{0, D_1, E_1, F_1},
{0, D_2, E_2, F_2},
{0, D_3, E_3, F_3},
{0, D_4, E_4, F_4},
{0, D_5, E_5, F_5},
{0, D_6, E_6, F_6},
{0, D_7, E_7, F_7},
{0, D_8, E_8, F_8},
{0, D_9, E_9, F_9},
{0, D_10, E_10, F_10},
{0, D_11, E_11, F_11},
{0, D_12, E_12, F_12},
{0, D_13, E_13, F_13},
{0, D_14, E_14, F_14},
{1, D_8, E_8, F_8},
{1, D_9, E_9, F_9},
{1, D_10, E_10, F_10},
{1, G_7, H_7, I_7},
{0, G_1, H_1, I_1},
{0, G_2, H_2, I_2},
{0, G_3, H_3, I_3},
{0, G_4, H_4, I_4},
{0, G_5, H_5, I_5},
{0, G_6, H_6, I_6},
{0, G_7, H_7, I_7},
{0, G_8, H_8, I_8},
{0, G_9, H_9, I_9},
{0, G_10, H_10, I_10},
{0, G_11, H_11, I_11},
{0, G_12, H_12, I_12},
{0, G_13, H_13, I_13},
{1, G_4, H_4, I_4},
{1, G_5, H_5, I_5},
{1, G_6, H_6, I_6},
{0, J_1, K_1, L_1},
{0, J_2, K_2, L_2},
{0, J_3, K_3, L_3},
{0, J_4, K_4, L_4},
{0, J_5, K_5, L_5},
{0, J_6, K_6, L_6},
{0, J_7, K_7, L_7},
{0, J_8, K_8, L_8},
{0, J_9, K_9, L_9},
{0, J_10, K_10, L_10},
{0, J_11, K_11, L_11},
{0, J_12, K_12, L_12},
{1, J_4, K_4, L_4},
{1, J_7, K_7, L_7},
{1, J_8, K_8, L_8},
{1, J_9, K_9, L_9},
{1, J_10, K_10, L_10},
{0, J_13, K_13, L_13},
{0, J_14, K_14, L_14},
{0, J_15, K_15, L_15},
{0, J_16, K_16, L_16},
{0, G_14, H_14, I_14},
{0, G_15, H_15, I_15},
{0, G_16, H_16, I_16},
{1, J_2, K_2, L_2},
{1, J_3, K_3, L_3},
{1, J_5, K_5, L_5},
{1, J_6, K_6, L_6},
};
led_config_t g_led_config = {
{
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, NO_LED, NO_LED, NO_LED, 14, 15, 16, 17},
{ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, NO_LED, NO_LED, NO_LED, 32, 33, 34, 35},
{ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, NO_LED, NO_LED, NO_LED, 50, 51, 52, 53},
{ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, NO_LED, 66, NO_LED, NO_LED, NO_LED, 67, 68, 69, NO_LED},
{ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, NO_LED, NO_LED, 81, NO_LED, 82, NO_LED, 83, 84, 85, 86},
{ 87, 88, 89, NO_LED, NO_LED, 90, NO_LED, NO_LED, NO_LED, 91, 92, 93, NO_LED, NO_LED, NO_LED, 94, 95,NO_LED, 96, 97, NO_LED}
},
{
{ 0, 0}, // 0
{ 13, 0}, // 1
{ 26, 0}, // 2
{ 39, 0}, // 3
{ 52, 0}, // 4
{ 65, 0}, // 5
{ 79, 0}, // 6
{ 92, 0}, // 7
{105, 0}, // 8
{118, 0}, // 9
{131, 0}, // 10
{144, 0}, // 11
{158, 0}, // 12
{171, 0}, // 13
{184, 0}, // 14
{197, 0}, // 15
{210, 0}, // 16
{224, 0}, // 17
{ 0, 12}, // 18
{ 13, 12}, // 19
{ 26, 12}, // 20
{ 39, 12}, // 21
{ 52, 12}, // 22
{ 65, 12}, // 23
{ 79, 12}, // 24
{ 92, 12}, // 25
{105, 12}, // 26
{118, 12}, // 27
{131, 12}, // 28
{144, 12}, // 29
{158, 12}, // 30
{171, 12}, // 31
{184, 12}, // 32
{197, 12}, // 33
{210, 12}, // 34
{224, 12}, // 35
{ 0, 25}, // 36
{ 13, 25}, // 37
{ 26, 25}, // 38
{ 39, 25}, // 39
{ 52, 25}, // 40
{ 65, 25}, // 41
{ 79, 25}, // 42
{ 92, 25}, // 43
{105, 25}, // 44
{118, 25}, // 45
{131, 25}, // 46
{144, 25}, // 47
{158, 25}, // 48
{171, 25}, // 49
{184, 25}, // 50
{197, 25}, // 51
{210, 25}, // 52
{224, 25}, // 53
{ 0, 38}, // 54
{ 13, 38}, // 55
{ 26, 38}, // 56
{ 39, 38}, // 57
{ 52, 38}, // 58
{ 65, 38}, // 59
{ 79, 38}, // 60
{ 92, 38}, // 61
{105, 38}, // 62
{118, 38}, // 63
{131, 38}, // 64
{144, 38}, // 65
{163, 38}, // 66
{184, 38}, // 67
{197, 38}, // 68
{210, 38}, // 69
{ 0, 51}, // 70
{ 26, 51}, // 71
{ 39, 51}, // 72
{ 52, 51}, // 73
{ 65, 51}, // 74
{ 79, 51}, // 75
{ 92, 51}, // 76
{105, 51}, // 77
{118, 51}, // 78
{131, 51}, // 79
{144, 51}, // 80
{158, 51}, // 81
{171, 51}, // 82
{184, 51}, // 83
{197, 51}, // 84
{210, 51}, // 85
{224, 51}, // 86
{ 0, 64}, // 87
{ 18, 64}, // 88
{ 37, 64}, // 89
{ 92, 64}, // 90
{130, 64}, // 91
{145, 64}, // 92
{158, 64}, // 93
{171, 64}, // 94
{184, 64}, // 95
{197, 64}, // 96
{210, 64}, // 97
},
{
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
}
};
#endif //RGB_MATRIX_ENABLE
enum __layers {
WIN_B,
WIN_WASD,
WIN_FN,
MAC_B,
MAC_WASD,
MAC_FN
};
enum colors { WHITE, RED, GREEN, BLUE };
enum colors led_color_status = WHITE;
enum custom_keycodes {
KC_MISSION_CONTROL = SAFE_RANGE,
KC_LAUNCHPAD,
KC_RESET
};
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD
static bool fn_make_flag = false;
static bool Lkey_flag = false;
static bool reset_glint_flag = false;
static bool while_test_flag = false;
static bool alarm_flag = false;
static uint16_t current_time = 0;
static uint8_t glint_cnt = 0;
static uint16_t scancode = 0;
static uint8_t alarm_cnt = 0;
HSV hsv;
void led_test(uint8_t color);
void clear_eeprom(void);
#ifdef RGB_MATRIX_ENABLE
static uint16_t map_current_time = 0;
static bool pwron_flag = false;
bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
return false;
}
if(pwron_flag == false){
map_current_time = timer_read();
if(map_current_time<3000){
map_current_time++;
for (uint8_t i = led_min; i < led_max; i++) {
rgb_matrix_set_color(i, 150, 150, 150);
}
}
if(map_current_time >= 3000)
pwron_flag = true;
}
return true;
}
#endif //RGB_MATRIX_ENABLE
void led_init_ports(void){
//set our LED pings as output
setPinOutput(A15); // LED1 Num Lock
writePinHigh(A15);
setPinOutput(C10); // LDE2 Caps Lock
writePinHigh(C10);
setPinOutput(C11); // LED3 Win Lock
writePinHigh(C11);
}
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
// writePin sets the pin high for 1 and low for 0.
// In this example the pins are inverted, setting
// it low/0 turns it on, and high/1 turns the LED off.
// This behavior depends on whether the LED is between the pin
// and VCC or the pin and GND.
writePin(A15, led_state.num_lock);
writePin(C10, led_state.caps_lock);
writePin(C11, keymap_config.no_gui);
}
return res;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_MISSION_CONTROL:
if (record->event.pressed) {
host_consumer_send(0x29F);
} else {
host_consumer_send(0);
}
return false; // Skip all further processing of this key
case KC_LAUNCHPAD:
if (record->event.pressed) {
host_consumer_send(0x2A0);
} else {
host_consumer_send(0);
}
return false; // Skip all further processing of this key
#ifdef VIA_ENABLE
case KC_RESET: {
if (record->event.pressed) {
#include "via.h"
via_eeprom_set_valid(false);
eeconfig_init_via();
}
return false;
}
#endif
}
return true;
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
switch (keycode) {
case MO(WIN_FN):
case MO(MAC_FN):
fn_make_flag = record->event.pressed;
return true;
case KC_GRV:
if (fn_make_flag && record->event.pressed) {
Lkey_flag = true;
current_time = timer_read();
scancode = KC_GRV;
return false;
} else {
Lkey_flag = 0;
}
return true;
case KC_LCTL:
if (fn_make_flag && record->event.pressed) {
if(while_test_flag)
{
while_test_flag = false;
rgb_matrix_init();
}
else
{
Lkey_flag = true;
current_time = timer_read();
scancode = KC_LCTL;
}
return false;
} else {
Lkey_flag = 0;
}
return true;
case DF(WIN_B):
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
layer_state_set(WIN_B);
set_single_persistent_default_layer(WIN_B);
return false;
}
return true;
case DF(MAC_B):
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
keymap_config.no_gui = 0;
// layer_state_set(MAC_B);
set_single_persistent_default_layer(MAC_B);
return false;
}
return true;
case TG(WIN_WASD):
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
// set_single_persistent_default_layer(WIN_WASD);
return false;
}
return true;
case TG(MAC_WASD):
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
// set_single_persistent_default_layer(MAC_WASD);
return false;
}
return true;
case MAGIC_TOGGLE_GUI:
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
writePin(C11, !keymap_config.no_gui);
}
return true;
case RGB_VAI:
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
if(rgblight_get_val()<180){
alarm_cnt = 2;
}
}
return true;
case RGB_VAD:
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
if(rgblight_get_val()>10){
alarm_cnt = 2;
}
}
return true;
case RGB_SAI:
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
if(rgblight_get_sat()<240){
alarm_cnt = 2;
}
}
return true;
case RGB_SAD:
if ((fn_make_flag && record->event.pressed)&&(alarm_flag == 0)) {
if(rgblight_get_sat()>10){
alarm_cnt = 2;
}
}
return true;
default:
return process_record_user(keycode, record);
}
}
void matrix_scan_kb(void) {
if(Lkey_flag){
if(scancode == KC_GRV){
if (timer_elapsed(current_time) >= 3000) {
Lkey_flag = false;
clear_eeprom();
current_time = timer_read();
reset_glint_flag = true;
glint_cnt = 0;
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_OFF);
}
}
else if(scancode == KC_LCTL){
if (timer_elapsed(current_time) >= 3000) {
Lkey_flag = false;
clear_eeprom();
while_test_flag = true;
glint_cnt = 0;
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
rgb_matrix_sethsv_noeeprom(HSV_WHITE);
}
}
}
else if(reset_glint_flag){
if ((timer_elapsed(current_time)) >= 300) {
current_time = timer_read();
if (((glint_cnt++) & 0x01 )== 0) {
rgb_matrix_sethsv_noeeprom(HSV_WHITE);
} else {
rgb_matrix_sethsv_noeeprom(HSV_OFF);
}
if (glint_cnt >= 3) {
glint_cnt = 0;
reset_glint_flag = false;
rgb_matrix_init();
}
}
}
else if(while_test_flag){
if ((timer_elapsed(current_time)) >= 1000) {
current_time = timer_read();
if ((glint_cnt%4) == 0) {
rgb_matrix_sethsv_noeeprom(HSV_RED);
} else if ((glint_cnt%4)== 1) {
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
} else if ((glint_cnt%4)== 2) {
rgb_matrix_sethsv_noeeprom(HSV_BLUE);
} else if ((glint_cnt%4)== 3) {
rgb_matrix_sethsv_noeeprom(HSV_WHITE);
}
glint_cnt++;
if(glint_cnt>=30)
{
glint_cnt = 0;
while_test_flag = false;
rgb_matrix_init();
}
}
}
else if(alarm_cnt != 0)
{
alarm_cnt--;
if(alarm_cnt == 0){
alarm_flag = true;
rgb_matrix_toggle_noeeprom();
current_time = timer_read();
}
}
else if(alarm_flag){
if ((timer_elapsed(current_time)) >= 200) {
rgb_matrix_toggle_noeeprom();
alarm_flag = 0;
}
}
}
void led_test(uint8_t color) {
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
switch (color) {
case WHITE:
rgb_matrix_sethsv_noeeprom(HSV_WHITE);
break;
case RED:
rgb_matrix_sethsv_noeeprom(HSV_RED);
break;
case GREEN:
rgb_matrix_sethsv_noeeprom(HSV_GREEN);
break;
case BLUE:
rgb_matrix_sethsv_noeeprom(HSV_BLUE);
break;
}
}
void clear_eeprom(void) {
layer_state_t default_layer_temp = default_layer_state;
eeconfig_init();
layer_state_set(default_layer_temp);
default_layer_set(default_layer_temp);
keymap_config.no_gui = 0;
#ifdef VIA_ENABLE
// This resets the layout options
via_set_layout_options(VIA_EEPROM_LAYOUT_OPTIONS_DEFAULT);
// This resets the keymaps in EEPROM to what is in flash.
dynamic_keymap_reset();
// This resets the macros in EEPROM to nothing.
dynamic_keymap_macro_reset();
#endif
rgb_matrix_enable_noeeprom();
}

39
keyboards/hfdkb/m2/m2.h Normal file
View File

@ -0,0 +1,39 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#define LAYOUT(\
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K017, K018, K019, K020,\
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K117, K118, K119, K120,\
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K217, K218, K219, K220,\
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K317, K318, K319, \
K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K415, K417, K418, K419, K420,\
K500, K501, K502, K505, K509, K510, K511, K515, K516, K518, K519 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, KC_NO,KC_NO,KC_NO,K017, K018, K019, K020}, \
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO,KC_NO,KC_NO,K117, K118, K119, K120}, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO,KC_NO,KC_NO,K217, K218, K219, K220}, \
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO,KC_NO,KC_NO,K317, K318, K319,KC_NO}, \
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, KC_NO,KC_NO, K413, KC_NO,K415,KC_NO, K417, K418, K419, K420}, \
{ K500, K501, K502,KC_NO,KC_NO, K505, KC_NO,KC_NO,KC_NO,K509, K510, K511, KC_NO,KC_NO,KC_NO,K515, K516,KC_NO, K518, K519,KC_NO} \
}
// clang-format on

View File

@ -0,0 +1,24 @@
/* Copyright (C) 2022 jonylee@hfd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef WB32_SPI_USE_QSPI
#define WB32_SPI_USE_QSPI TRUE
#undef WB32_I2C_USE_I2C1
#define WB32_I2C_USE_I2C1 TRUE

View File

@ -0,0 +1,51 @@
// !!! DO NOT ADD #pragma once !!! //
// Step 1.
// Declare custom effects using the RGB_MATRIX_EFFECT macro
// (note the lack of semicolon after the macro!)
RGB_MATRIX_EFFECT(turn_off_rgb)
RGB_MATRIX_EFFECT(kb_reset_rgb)
// Step 2.
// Define effects inside the `RGB_MATRIX_CUSTOM_EFFECT_IMPLS` ifdef block
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
// e.g: A simple effect, self-contained within a single method
static bool turn_off_rgb(effect_params_t *params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
for (uint8_t i = led_min; i < led_max; i++) {
rgb_matrix_set_color(i, 0x00, 0x00, 0x00);
}
return rgb_matrix_check_finished_leds(led_max);
}
// e.g: A more complex effect, relying on external methods and state, with
// dedicated init and run methods
static uint8_t some_global_state;
static void kb_reset_rgb_init(effect_params_t* params) {
some_global_state = 0;
}
static bool kb_reset_rgb_run(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
some_global_state++;
if(some_global_state&0x01){
for (uint8_t i = led_min; i < led_max; i++)
rgb_matrix_set_color(i, 0, 0, 0);
}
else{
for (uint8_t i = led_min; i < led_max; i++)
rgb_matrix_set_color(i, 0xc0, 0xc0, 0xc0);
}
if(some_global_state>=7)
rgb_matrix_init();
return rgb_matrix_check_finished_leds(led_max);
}
static bool kb_reset_rgb(effect_params_t* params) {
if (params->init) kb_reset_rgb_init(params);
return kb_reset_rgb_run(params);
}
#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS

View File

@ -0,0 +1,21 @@
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
KEYBOARD_SHARED_EP = yes
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = no
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3733
EEPROM_DRIVER = wear_leveling
WEAR_LEVELING_DRIVER = spi_flash
#RGB_MATRIX_CUSTOM_USER = yes #Add turnoff LED