This commit is contained in:
temp4gh 2025-07-24 16:13:22 +02:00 committed by GitHub
commit 5263dd2fa7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 2367 additions and 0 deletions

View File

@ -0,0 +1,9 @@
BLUETOOTH_DIR = bluetooth
SRC += \
$(BLUETOOTH_DIR)/bluetooth_main.c \
$(BLUETOOTH_DIR)/btfunc.c \
$(BLUETOOTH_DIR)/btspi.c \
$(BLUETOOTH_DIR)/btsys.c
VPATH += $(TOP_DIR)/keyboards/redragon/k715_pro/$(BLUETOOTH_DIR)

View File

@ -0,0 +1,31 @@
/* Copyright 2024 temp4gh
*
* 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 "quantum.h"
__attribute__((weak)) void bluetooth_pre_task(void) {}
__attribute__((weak)) void bluetooth_task(void) {}
__attribute__((weak)) void bluetooth_post_task(void) {}
void bluetooth_tasks(void) {
bluetooth_pre_task();
bluetooth_task();
bluetooth_post_task();
}
void housekeeping_task_kb(void) {
bluetooth_tasks();
}

View File

@ -0,0 +1,78 @@
/* Copyright 2023 temp4gh
*
* 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 <stdbool.h>
#include "quantum.h"
#include "btfunc.h"
#include "btspi.h"
#include "k715_pro.h"
extern user_settings_config g_config;
extern tDevInfo dev_info;
void k715bt_send_ble_req_bt_info(void)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_GET_INFO, NULL, 0);
}
void k715bt_send_ble_req_bt_name(void)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_GETNAME, NULL, 0);
}
void k715bt_send_mcu_req_ble_fwver(void)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_MCU_REQ_BT_FWVER, NULL, 0);
}
void k715bt_send_ble_switch_device_mode(uint8_t mode)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_MODE_SET, &mode, 1);
}
void k715bt_send_ble_pair(uint8_t pair_timeout, uint8_t *adv_data, uint8_t adv_data_len)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_PAIR, NULL, 0);
}
void k715bt_send_ble_reconnect_bt(uint8_t reconn_timeout)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_BACK, &reconn_timeout, 1);
}
void k715bt_send_ble_disconnect_bt(void)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_DISCONNECT, NULL, 0);
}
void k715bt_send_ble_set_device_name(uint8_t *dev_name, uint8_t dev_name_len)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_SETNAME, dev_name, dev_name_len);
}
void k715bt_send_ble_set_bt_channel(uint8_t bt_channel)
{
k715bt_send_spi_extend_single_packet(KBD_CMD_BT_SETCHN, &bt_channel, 1);
}
void k715bt_switch_channel(uint8_t bt_channel)
{
if(g_config.bt_ch != bt_channel)
{
k715bt_send_ble_set_bt_channel(bt_channel);
g_config.bt_ch = bt_channel;
}
}

View File

@ -0,0 +1,30 @@
/* Copyright 2023 temp4gh
*
* 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 "stdint.h"
void k715bt_send_ble_req_bt_info(void);
void k715bt_send_ble_req_bt_name(void);
void k715bt_send_mcu_req_ble_fwver(void);
void k715bt_send_ble_set_device_name(uint8_t *dev_name, uint8_t dev_name_len);
void k715bt_send_ble_switch_device_mode(uint8_t mode);
void k715bt_send_ble_set_bt_channel(uint8_t bt_channel);
void k715bt_send_ble_pair(uint8_t pair_timeout, uint8_t *adv_data, uint8_t adv_data_len);
void k715bt_send_ble_reconnect_bt(uint8_t reconn_timeout);
void k715bt_send_ble_disconnect_bt(void);
void k715bt_switch_channel(uint8_t bt_channel);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,204 @@
/* Copyright 2023 temp4gh
*
* 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 ENABLE_SPI_BLE_MODULE
#define SPI_MODE 3
#define SPI_DIVISOR 32
#define IS31FL3733_POWERON_PIN B2
#define EXT_IS31FL3733_SUSPEND_PIN (IS31FL3733_POWERON_PIN)
#define EXT_READ_DIP_PIN_USB_MODE C13
#define EXT_READ_DIP_PIN_BT_MODE C14
#define CAPS_LOCK_DRV_PIN B8
#define set_caps_lock_on() palClearLine(CAPS_LOCK_DRV_PIN)
#define set_caps_lock_off() palSetLine(CAPS_LOCK_DRV_PIN)
#define EXT_READ_SPI_SLAVE_INT_PIN B9
#define EXT_READ_SPI_SLAVE_GPIO_INIT (PAL_MODE_INPUT_PULLUP)
#define EXT_READ_SPI_SLAVE_READY (PAL_LOW)
#define EXT_READ_SPI_SLAVE_NOT_READY (PAL_HIGH)
#define KBD_BT_MODE 0
#define KBD_USB_MODE 2
#define KBD_POWEROFF_MODE 8
#define INVALID_DIP_DEVICE_MODE 0xFF
#define DEVICE_MODE_BT KBD_BT_MODE
#define DEVICE_MODE_2D4G KBD_24G_MODE
#define DEVICE_MODE_USB KBD_USB_MODE
#define BTSTATEDISCONN 0
#define BTSTATEDISCOVER 1
#define BTSTATECONNECTED 2
#define BTSTATERECONN 3
#define BT_CHANNEL_1 1
#define BT_CHANNEL_INVALID 0xFF
#define BT_BACK_TIMEOUT 60000
#define BT_BACK_TIMEOUT_MS ((BT_BACK_TIMEOUT) / 1000)
#define BT_BP_TIMEOUT 60000
#define BT_BP_TIMEOUT_MS ((BT_BP_TIMEOUT) / 1000)
//means use default value
#define DEFAULT_BT_BP_TIMEOUT 0
//based on ms
#define RF_TIMEOUT_OFFSET 1000
#define MAX_SPI_BLE_SINGLE_PACKET_LENGTH 12
#define MAX_SPI_BLE_MUL_PACKET_LENGTH 11
#define MAX_SPI_BLE_SINGLE_PACKET_LOAD_LENGTH 13
#define MAX_BLE_SPI_RX_FRAME_MAX_SIZE 16
#define MAX_BLE_SPI_TX_FRAME_MAX_SIZE (MAX_BLE_SPI_RX_FRAME_MAX_SIZE)
#define MAX_BLE_SPI_NOTIFY_CMD_BUF_SIZE (32)
#define SPI_BLE_PACKET_HEADER 0x5A
#define SEND_BT_NAME_DELAY_MS 10
#define KBD_CMD_UNKNOW 0x0
#define KBD_CMD_MODE_SET 0x11
#define KBD_CMD_BT_PAIR 0x21
#define KBD_CMD_BT_BACK 0x22
#define KBD_CMD_BT_DISCONNECT 0x23
#define KBD_CMD_BT_SETNAME 0x25
#define KBD_CMD_BT_GETNAME 0x26
#define KBD_CMD_BT_SETCHN 0x27
#define KBD_CMD_GET_INFO 0x51
#define KBD_CMD_INVALID 0x0
#define KBD_CMD_BT_QUERY_KEY_STATE 0x66
#define KBD_CMD_MCU_RESP_KEY_STATE 0x67
#define KBD_CMD_QUERY_LOST_KEY_STATE 0x68
#define KBD_CMD_SEND_BT_TEST_RF 0x71
#define KBD_CMD_MCU_REQ_BT_FWVER 0x72
#define KBD_CMD_MCU_RECV_BT_FWVER 0x72
#define KBD_CMD_BT_REQ_MCU_FWVER 0x73
#define KBD_CMD_SEND_BT_MCU_FWVER 0x73
#define KBD_CMD_BT_REQ_DEV_STATUS 0x74
#define KBD_CMD_SEND_BT_DEV_STATUS 0x74
#define KBD_CMD_BT_REQ_LIGHT_CONTROL 0x75
#define KBD_CMD_BT_REQ_DEEP_SLEEP 0x76
#define KBD_CMD_BT_SET_TEST_MODE 0x77
typedef struct
{
uint32_t NumLock: 1;
uint32_t CapsLock: 1;
uint32_t ScrollLock: 1;
uint32_t red: 1;
uint32_t green: 1;
uint32_t blue: 1;
uint32_t win_lock: 1;
uint32_t kbd_lock: 1;
uint32_t btstate: 2;
uint32_t wifistate: 3;
uint32_t btpair: 1;
uint32_t btback: 1;
uint32_t lowVoltage: 1;
uint32_t devmode: 7;
uint32_t btconnected: 1;
uint32_t usbstate: 3;
uint32_t fn_down: 1;
uint32_t pair: 1;
uint32_t res_bt_isr: 1;
uint32_t usb_connected: 2;
uint32_t last_key_ms;
uint32_t bt_timeout;
} tDevInfo;
#define BLE_SPI_RX_BUF_MAX_SIZE 20
typedef struct
{
uint8_t spi_read_buf[BLE_SPI_RX_BUF_MAX_SIZE];
uint8_t spi_read_length;
} spi_read_data_t;
typedef struct __attribute__((__packed__))
{
uint32_t NumLock: 1;
uint32_t CapsLock: 1;
uint32_t ScrollLock: 1;
uint32_t res: 1;
uint32_t remote_btn_down: 1;
uint32_t remote_btn_dec: 1;
uint32_t remote_btn_add: 1;
uint32_t remote_chg: 1;
uint32_t state_bt: 8;
uint32_t state_24g: 8;
uint32_t state_usb: 8;
uint8_t mode;
uint8_t eff_mode;
uint8_t eff_bright;
uint8_t eff_speed;
uint8_t eff_r;
uint8_t eff_g;
uint8_t eff_b;
uint8_t ch;
}
spi_slave_dev_info_t;
#define KB_MAGIC_NUMBER 0xBE
typedef struct
{
uint8_t magic_num;
uint8_t caps_lock: 1;
uint8_t num_lock: 1;
uint8_t scroll_lock: 1;
uint8_t winlock_state: 1;
uint8_t kbd_lock: 1;
uint8_t reset_factory: 1;
uint8_t reserved_bit: 2;
uint8_t kbd_dev_mode;
uint8_t bt_ch;
uint8_t bt_used;
uint8_t bt_last_connected;
uint8_t reset_reason;
uint8_t unused;
} user_settings_config;
#define spi_use_begin() do{}while(0)
#define spi_use_end() do{}while(0)
#define kbd_spi_send_byte(_t_) spi_write(_t_)
#define kbd_spi_rec_byte(_t_) spi_read()
void set_dev_info_bt_pair_timeout(void);
void set_dev_info_bt_reconn_timeout(void);
void check_read_spi_data(void);
void update_caps_led(void);
void k715_bt_start_pair(uint8_t chn);
bool is_usb_mode_enabled(void);
bool is_bt_mode_enabled(void);
void k715_ble_spi_init(void);
void k715bt_send_spi_extend_single_packet(uint8_t param_type, uint8_t *param_data, uint8_t param_len);

View File

@ -0,0 +1,50 @@
/* Copyright 2024 temp4gh
*
* 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 "quantum.h"
#include "config.h"
#include "btspi.h"
void init_set_IS31FL3733_poweron(void)
{
palSetLineMode(IS31FL3733_POWERON_PIN, PAL_MODE_OUTPUT_PUSHPULL);
palSetLine(IS31FL3733_POWERON_PIN);
}
void bootloader_jump(void)
{
NVIC_SystemReset();
}
void mcu_reset(void)
{
NVIC_SystemReset();
}
void board_init(void)
{
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_DISABLE;
palSetLineMode(CAPS_LOCK_DRV_PIN, PAL_MODE_OUTPUT_PUSHPULL);
set_caps_lock_off();
palSetPadMode(GPIOC, 11, PAL_MODE_INPUT);
palSetPadMode(GPIOA, 13, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOA, 14, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOA, 15, PAL_MODE_OUTPUT_PUSHPULL);
init_set_IS31FL3733_poweron();
}

View File

@ -0,0 +1,27 @@
/* Copyright 2023 temp4gh
*
* 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 IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
#define IS31FL3733_I2C_ADDRESS_2 IS31FL3733_I2C_ADDRESS_GND_VCC
#define SPI_DRIVER SPID2
#define SPI_SCK_PIN B13
#define SPI_MOSI_PIN B15
#define SPI_MISO_PIN B14
#define SPI_SLAVE_CS B12

View File

@ -0,0 +1,28 @@
/* Copyright 2020 QMK
*
* 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 <halconf.h>
#undef HAL_USE_I2C
#define HAL_USE_I2C TRUE
#undef HAL_USE_SPI
#define HAL_USE_SPI TRUE
#undef SPI_SELECT_MODE
#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD

View File

@ -0,0 +1,303 @@
/* Copyright 2023 temp4gh
*
* 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
#include "spi_master.h"
#include "host_driver.h"
#include "config.h"
#include "k715_pro.h"
#include "btspi.h"
const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] =
{
{0, SW7_CS1, SW9_CS1, SW8_CS1},
{0, SW7_CS3, SW9_CS3, SW8_CS3},
{0, SW7_CS4, SW9_CS4, SW8_CS4},
{0, SW7_CS5, SW9_CS5, SW8_CS5},
{0, SW7_CS6, SW9_CS6, SW8_CS6},
{0, SW7_CS7, SW9_CS7, SW8_CS7},
{0, SW7_CS8, SW9_CS8, SW8_CS8},
{0, SW7_CS9, SW9_CS9, SW8_CS9},
{0, SW7_CS10, SW9_CS10, SW8_CS10},
{0, SW7_CS11, SW9_CS11, SW8_CS11},
{0, SW7_CS12, SW9_CS12, SW8_CS12},
{0, SW7_CS13, SW9_CS13, SW8_CS13},
{0, SW7_CS14, SW9_CS14, SW8_CS14},
{0, SW7_CS15, SW9_CS15, SW8_CS15},
{0, SW4_CS1, SW6_CS1, SW5_CS1},
{0, SW4_CS2, SW6_CS2, SW5_CS2},
{0, SW4_CS3, SW6_CS3, SW5_CS3},
{0, SW4_CS4, SW6_CS4, SW5_CS4},
{0, SW4_CS5, SW6_CS5, SW5_CS5},
{0, SW4_CS6, SW6_CS6, SW5_CS6},
{0, SW4_CS7, SW6_CS7, SW5_CS7},
{0, SW4_CS8, SW6_CS8, SW5_CS8},
{0, SW4_CS9, SW6_CS9, SW5_CS9},
{0, SW4_CS10, SW6_CS10, SW5_CS10},
{0, SW4_CS11, SW6_CS11, SW5_CS11},
{0, SW4_CS12, SW6_CS12, SW5_CS12},
{0, SW4_CS13, SW6_CS13, SW5_CS13},
{0, SW4_CS14, SW6_CS14, SW5_CS14},
{0, SW4_CS15, SW6_CS15, SW5_CS15},
{0, SW1_CS1, SW3_CS1, SW2_CS1},
{0, SW1_CS2, SW3_CS2, SW2_CS2},
{0, SW1_CS3, SW3_CS3, SW2_CS3},
{0, SW1_CS4, SW3_CS4, SW2_CS4},
{0, SW1_CS5, SW3_CS5, SW2_CS5},
{0, SW1_CS6, SW3_CS6, SW2_CS6},
{0, SW1_CS7, SW3_CS7, SW2_CS7},
{0, SW1_CS8, SW3_CS8, SW2_CS8},
{0, SW1_CS9, SW3_CS9, SW2_CS9},
{0, SW1_CS10, SW3_CS10, SW2_CS10},
{0, SW1_CS11, SW3_CS11, SW2_CS11},
{0, SW1_CS12, SW3_CS12, SW2_CS12},
{0, SW1_CS13, SW3_CS13, SW2_CS13},
{0, SW1_CS14, SW3_CS14, SW2_CS14},
{0, SW1_CS15, SW3_CS15, SW2_CS15},
{1, SW7_CS1, SW9_CS1, SW8_CS1},
{1, SW7_CS2, SW9_CS2, SW8_CS2},
{1, SW7_CS3, SW9_CS3, SW8_CS3},
{1, SW7_CS4, SW9_CS4, SW8_CS4},
{1, SW7_CS5, SW9_CS5, SW8_CS5},
{1, SW7_CS6, SW9_CS6, SW8_CS6},
{1, SW7_CS7, SW9_CS7, SW8_CS7},
{1, SW7_CS8, SW9_CS8, SW8_CS8},
{1, SW7_CS9, SW9_CS9, SW8_CS9},
{1, SW7_CS10, SW9_CS10, SW8_CS10},
{1, SW7_CS11, SW9_CS11, SW8_CS11},
{1, SW7_CS12, SW9_CS12, SW8_CS12},
{1, SW7_CS13, SW9_CS13, SW8_CS13},
{1, SW7_CS14, SW9_CS14, SW8_CS14},
{1, SW7_CS15, SW9_CS15, SW8_CS15},
{1, SW4_CS1, SW6_CS1, SW5_CS1},
{1, SW4_CS2, SW6_CS2, SW5_CS2},
{1, SW4_CS3, SW6_CS3, SW5_CS3},
{1, SW4_CS4, SW6_CS4, SW5_CS4},
{1, SW4_CS5, SW6_CS5, SW5_CS5},
{1, SW4_CS6, SW6_CS6, SW5_CS6},
{1, SW4_CS7, SW6_CS7, SW5_CS7},
{1, SW4_CS8, SW6_CS8, SW5_CS8},
{1, SW4_CS9, SW6_CS9, SW5_CS9},
{1, SW4_CS10, SW6_CS10, SW5_CS10},
{1, SW4_CS11, SW6_CS11, SW5_CS11},
{1, SW4_CS12, SW6_CS12, SW5_CS12},
{1, SW4_CS13, SW6_CS13, SW5_CS13},
{1, SW4_CS14, SW6_CS14, SW5_CS14},
{1, SW4_CS15, SW6_CS15, SW5_CS15},
{1, SW1_CS1, SW3_CS1, SW2_CS1},
{1, SW1_CS2, SW3_CS2, SW2_CS2},
{1, SW1_CS3, SW3_CS3, SW2_CS3},
{1, SW1_CS5, SW3_CS5, SW2_CS5},
{1, SW1_CS6, SW3_CS6, SW2_CS6},
{1, SW1_CS7, SW3_CS7, SW2_CS7},
{1, SW1_CS8, SW3_CS8, SW2_CS8},
{1, SW1_CS9, SW3_CS9, SW2_CS9},
{1, SW1_CS10, SW3_CS10, SW2_CS10},
{1, SW1_CS11, SW3_CS11, SW2_CS11},
{1, SW1_CS12, SW3_CS12, SW2_CS12},
{1, SW1_CS13, SW3_CS13, SW2_CS13},
{1, SW1_CS14, SW3_CS14, SW2_CS14},
{1, SW1_CS15, SW3_CS15, SW2_CS15},
{0, SW7_CS2, SW9_CS2, SW8_CS2},
{1, SW1_CS4, SW3_CS4, SW2_CS4}
};
static void send_ble_hid_report(uint8_t report_type, uint8_t *hid_report_buf, uint8_t data_len)
{
switch(report_type)
{
case BLE_HID_REPORT_TYPE_NORMAL_KEY:
{
k715bt_send_spi_extend_single_packet(report_type, hid_report_buf, data_len);
break;
}
case BLE_HID_REPORT_TYPE_EXTRA_KEY:
{
k715bt_send_spi_extend_single_packet(report_type, hid_report_buf, data_len);
break;
}
default:
{
break;
}
}
}
static uint8_t k715_ble_leds(void)
{
return 0;
}
static void k715_send_keyboard(report_keyboard_t *report)
{
uint8_t raw_data[KEYBOARD_REPORT_KEYS + 2];
raw_data[0] = report->mods;
raw_data[1] = 0;
for(int i = 0; i < KEYBOARD_REPORT_KEYS; i++)
{
raw_data[2 + i] = report->keys[i];
}
send_ble_hid_report(BLE_HID_REPORT_TYPE_NORMAL_KEY, raw_data, KEYBOARD_REPORT_KEYS + 2);
}
#ifdef NKRO_ENABLE
static void k715_send_nkro(report_nkro_t *report)
{
uint8_t raw_data[NKRO_REPORT_BITS + 2];
raw_data[0] = report->mods;
raw_data[1] = 0;
for(int i = 0; i < NKRO_REPORT_BITS; i++)
{
raw_data[2 + i] = report->bits[i];
}
send_ble_hid_report(BLE_HID_REPORT_TYPE_ALL_KEY, raw_data, NKRO_REPORT_BITS + 2);
}
#endif
static void k715_send_mouse(report_mouse_t *report)
{
}
static void k715_send_extra(report_extra_t *report)
{
if(report->report_id == REPORT_ID_CONSUMER)
{
uint8_t extra_buf[6];
memset(extra_buf, 0, sizeof(extra_buf));
memcpy(extra_buf, &report->usage, 2);
send_ble_hid_report(BLE_HID_REPORT_TYPE_EXTRA_KEY, extra_buf, sizeof(extra_buf));
}
}
static host_driver_t k715_ble_driver =
{
#ifdef NKRO_ENABLE
k715_ble_leds, k715_send_keyboard, k715_send_nkro, k715_send_mouse, k715_send_extra
#else
k715_ble_leds, k715_send_keyboard, NULL, k715_send_mouse, k715_send_extra
#endif
};
static bool _swtich_bt_driver(void)
{
if(host_get_driver() == &k715_ble_driver)
{
return false;
}
clear_keyboard();
#ifdef NKRO_ENABLE
keymap_config.nkro = true;
#else
keymap_config.nkro = false;
#endif
host_set_driver(&k715_ble_driver);
return true;
}
void k715bt_bt_swtich_ble_driver(void)
{
if(is_bt_mode_enabled())
{
_swtich_bt_driver();
}
}
void k715_rgb_matrix_flags_init(void)
{
rgb_matrix_enable();
rgb_matrix_set_flags(NORMAL_LED_FLAG_BIT);
}
void k715_bt_init(void)
{
k715_ble_spi_init();
k715_rgb_matrix_flags_init();
}
bool led_update_kb(led_t led_state)
{
bool res = led_update_user(led_state);
if(res)
{
update_caps_led();
}
return res;
}
bool process_record_kb_bt(uint16_t keycode, keyrecord_t *record)
{
static uint8_t chn = 0;
switch(keycode)
{
case BT_CHN1:
case BT_CHN2:
case BT_CHN3:
if(is_bt_mode_enabled())
{
if(record->event.pressed)
{
chn = keycode - BT_CHN1 + 1;
k715_bt_start_pair(chn);
}
else
{
chn = 0;
}
}
break;
default:
break;
}
return true;
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record)
{
if(!process_record_user(keycode, record))
{
return false;
}
return process_record_kb_bt(keycode, record);
}
void bluetooth_task(void)
{
k715bt_bt_swtich_ble_driver();
check_read_spi_data();
}
void keyboard_post_init_kb(void)
{
k715_bt_init();
keyboard_post_init_user();
}

View File

@ -0,0 +1,35 @@
/* Copyright 2023 temp4gh
*
* 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 BLE_HID_REPORT_TYPE_NORMAL_KEY 0x1
#define BLE_HID_REPORT_TYPE_MOUSE_KEY 0x2
#define BLE_HID_REPORT_TYPE_EXTRA_KEY 0x3
#define BLE_HID_REPORT_TYPE_SYSTEM_KEY 0x4
#define BLE_HID_REPORT_TYPE_ALL_KEY 0x5
enum {
BT_CHN1,
BT_CHN2,
BT_CHN3,
NEW_SAFE_RANGE
};
#define NORMAL_LED_FLAG_BIT (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER)

View File

@ -0,0 +1,242 @@
{
"manufacturer": "redragon",
"keyboard_name": "k715 pro",
"bootloader": "stm32duino",
"bootmagic": {
"matrix": [1, 0]
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 2
},
"encoder": {
"rotary": [
{"pin_a": "B5", "pin_b": "B4"}
]
},
"features": {
"bootmagic": true,
"console": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"nkro": false,
"rgb_matrix": true
},
"indicators": {
"caps_lock": "B8",
"on_state": 0
},
"matrix_pins": {
"cols": ["A6", "A7", "C4", "C5", "B0", "B1", "C6", "C7", "C8", "C9", "A8", "A9", "A10", "A13", "A14", "A15"],
"rows": ["A0", "A1", "A2", "A3", "A4", "A5"]
},
"processor": "STM32F103",
"rgb_matrix": {
"animations": {
"solid_color": true,
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"hue_wave": true,
"pixel_flow": true
},
"driver": "is31fl3733",
"layout": [
{"matrix": [0, 0], "x": 7, "y": 2, "flags": 4},
{"matrix": [0, 2], "x": 34, "y": 2, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 2, "flags": 4},
{"matrix": [0, 4], "x": 61, "y": 2, "flags": 4},
{"matrix": [0, 5], "x": 75, "y": 2, "flags": 4},
{"matrix": [0, 6], "x": 95, "y": 2, "flags": 4},
{"matrix": [0, 7], "x": 109, "y": 2, "flags": 4},
{"matrix": [0, 8], "x": 122, "y": 2, "flags": 4},
{"matrix": [0, 9], "x": 136, "y": 2, "flags": 4},
{"matrix": [0, 10], "x": 157, "y": 2, "flags": 4},
{"matrix": [0, 11], "x": 170, "y": 2, "flags": 4},
{"matrix": [0, 12], "x": 184, "y": 2, "flags": 4},
{"matrix": [0, 13], "x": 198, "y": 2, "flags": 4},
{"matrix": [0, 14], "x": 217, "y": 2, "flags": 4},
{"matrix": [1, 0], "x": 7, "y": 14, "flags": 4},
{"matrix": [1, 1], "x": 20, "y": 14, "flags": 4},
{"matrix": [1, 2], "x": 34, "y": 14, "flags": 4},
{"matrix": [1, 3], "x": 48, "y": 14, "flags": 4},
{"matrix": [1, 4], "x": 61, "y": 14, "flags": 4},
{"matrix": [1, 5], "x": 75, "y": 14, "flags": 4},
{"matrix": [1, 6], "x": 89, "y": 14, "flags": 4},
{"matrix": [1, 7], "x": 102, "y": 14, "flags": 4},
{"matrix": [1, 8], "x": 116, "y": 14, "flags": 4},
{"matrix": [1, 9], "x": 129, "y": 14, "flags": 4},
{"matrix": [1, 10], "x": 143, "y": 14, "flags": 4},
{"matrix": [1, 11], "x": 157, "y": 14, "flags": 4},
{"matrix": [1, 12], "x": 170, "y": 14, "flags": 4},
{"matrix": [1, 13], "x": 190, "y": 14, "flags": 4},
{"matrix": [1, 14], "x": 217, "y": 14, "flags": 4},
{"matrix": [2, 0], "x": 10, "y": 24, "flags": 4},
{"matrix": [2, 1], "x": 27, "y": 24, "flags": 4},
{"matrix": [2, 2], "x": 40, "y": 24, "flags": 4},
{"matrix": [2, 3], "x": 54, "y": 24, "flags": 4},
{"matrix": [2, 4], "x": 68, "y": 24, "flags": 4},
{"matrix": [2, 5], "x": 81, "y": 24, "flags": 4},
{"matrix": [2, 6], "x": 95, "y": 24, "flags": 4},
{"matrix": [2, 7], "x": 109, "y": 24, "flags": 4},
{"matrix": [2, 8], "x": 122, "y": 24, "flags": 4},
{"matrix": [2, 9], "x": 136, "y": 24, "flags": 4},
{"matrix": [2, 10], "x": 150, "y": 24, "flags": 4},
{"matrix": [2, 11], "x": 163, "y": 24, "flags": 4},
{"matrix": [2, 12], "x": 177, "y": 24, "flags": 4},
{"matrix": [2, 13], "x": 194, "y": 24, "flags": 4},
{"matrix": [2, 14], "x": 217, "y": 24, "flags": 4},
{"matrix": [3, 0], "x": 12, "y": 34, "flags": 4},
{"matrix": [3, 1], "x": 30, "y": 34, "flags": 4},
{"matrix": [3, 2], "x": 44, "y": 34, "flags": 4},
{"matrix": [3, 3], "x": 58, "y": 34, "flags": 4},
{"matrix": [3, 4], "x": 71, "y": 34, "flags": 4},
{"matrix": [3, 5], "x": 85, "y": 34, "flags": 4},
{"matrix": [3, 6], "x": 99, "y": 34, "flags": 4},
{"matrix": [3, 7], "x": 112, "y": 34, "flags": 4},
{"matrix": [3, 8], "x": 126, "y": 34, "flags": 4},
{"matrix": [3, 9], "x": 140, "y": 34, "flags": 4},
{"matrix": [3, 10], "x": 153, "y": 34, "flags": 4},
{"matrix": [3, 11], "x": 167, "y": 34, "flags": 4},
{"x": 180, "y": 34, "flags": 4},
{"matrix": [3, 13], "x": 189, "y": 34, "flags": 4},
{"matrix": [3, 14], "x": 217, "y": 34, "flags": 4},
{"matrix": [4, 0], "x": 8, "y": 44, "flags": 4},
{"x": 24, "y": 44, "flags": 4},
{"matrix": [4, 2], "x": 38, "y": 44, "flags": 4},
{"matrix": [4, 3], "x": 51, "y": 44, "flags": 4},
{"matrix": [4, 4], "x": 65, "y": 44, "flags": 4},
{"matrix": [4, 5], "x": 78, "y": 44, "flags": 4},
{"matrix": [4, 6], "x": 92, "y": 44, "flags": 4},
{"matrix": [4, 7], "x": 106, "y": 44, "flags": 4},
{"matrix": [4, 8], "x": 119, "y": 44, "flags": 4},
{"matrix": [4, 9], "x": 133, "y": 44, "flags": 4},
{"matrix": [4, 10], "x": 147, "y": 44, "flags": 4},
{"matrix": [4, 11], "x": 160, "y": 44, "flags": 4},
{"matrix": [4, 12], "x": 179, "y": 44, "flags": 4},
{"matrix": [4, 13], "x": 201, "y": 46, "flags": 4},
{"matrix": [4, 14], "x": 217, "y": 44, "flags": 4},
{"matrix": [5, 0], "x": 8, "y": 54, "flags": 4},
{"matrix": [5, 1], "x": 25, "y": 54, "flags": 4},
{"matrix": [5, 2], "x": 43, "y": 54, "flags": 4},
{"x": 67, "y": 57, "flags": 4},
{"x": 80, "y": 57, "flags": 4},
{"x": 94, "y": 54, "flags": 4},
{"matrix": [5, 6], "x": 107, "y": 57, "flags": 4},
{"x": 120, "y": 57, "flags": 4},
{"matrix": [5, 9], "x": 143, "y": 54, "flags": 4},
{"matrix": [5, 10], "x": 157, "y": 54, "flags": 4},
{"matrix": [5, 11], "x": 170, "y": 54, "flags": 4},
{"matrix": [5, 12], "x": 187, "y": 56, "flags": 4},
{"matrix": [5, 13], "x": 201, "y": 56, "flags": 4},
{"matrix": [5, 14], "x": 214, "y": 56, "flags": 4},
{"x": 207, "y": 23, "flags": 8},
{"x": 207, "y": 27, "flags": 8}
]
},
"usb": {
"device_version": "0.0.1",
"pid": "0x00D1",
"vid": "0x369B",
"no_startup_check": true
},
"layout_aliases": {
"LAYOUT_75_ansi": "LAYOUT"
},
"layouts": {
"LAYOUT": {
"layout": [
{"label": "ESC", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "F1", "matrix": [0, 2], "x": 1.5, "y": 0},
{"label": "F2", "matrix": [0, 3], "x": 2.5, "y": 0},
{"label": "F3", "matrix": [0, 4], "x": 3.5, "y": 0},
{"label": "F4", "matrix": [0, 5], "x": 4.5, "y": 0},
{"label": "F5", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "F6", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "F7", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "F8", "matrix": [0, 9], "x": 9, "y": 0},
{"label": "F9", "matrix": [0, 10], "x": 10.5, "y": 0},
{"label": "F10", "matrix": [0, 11], "x": 11.5, "y": 0},
{"label": "F11", "matrix": [0, 12], "x": 12.5, "y": 0},
{"label": "F12", "matrix": [0, 13], "x": 13.5, "y": 0},
{"label": "END", "matrix": [0, 15], "x": 15, "y": 0},
{"label": "GRV", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label": "2", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label": "3", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label": "4", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label": "5", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label": "6", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label": "7", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label": "8", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label": "9", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label": "0", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label": "MINS", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label": "EQL", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label": "BSPC", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label": "INS", "matrix": [1, 14], "x": 15, "y": 1.25},
{"label": "TAB", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label": "W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label": "E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label": "R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label": "T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label": "Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label": "U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label": "I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label": "O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label": "P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label": "LBRC", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label": "RBRC", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label": "BSLS", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label": "DEL", "matrix": [2, 14], "x": 15, "y": 2.25},
{"label": "CAPS", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label": "S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label": "D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label": "F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label": "G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label": "H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label": "J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label": "K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label": "L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label": "SCLN", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label": "QUOT", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label": "ENT", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
{"label": "PGUP", "matrix": [3, 14], "x": 15, "y": 3.25},
{"label": "LSFT", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label": "Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label": "X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label": "C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label": "V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label": "B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label": "N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label": "M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label": "COMM", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label": "DOT", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label": "SLSH", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label": "RSFT", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
{"label": "UP", "matrix": [4, 13], "x": 14, "y": 4.25},
{"label": "PGDN", "matrix": [4, 14], "x": 15, "y": 4.25},
{"label": "LCTL", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"label": "LGUI", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"label": "LALT", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"label": "SPC", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
{"label": "RALT", "matrix": [5, 9], "x": 10, "y": 5.25},
{"label": "MO(1)", "matrix": [5, 10], "x": 11, "y": 5.25},
{"label": "RCTL", "matrix": [5, 11], "x": 12, "y": 5.25},
{"label": "LEFT", "matrix": [5, 12], "x": 13, "y": 5.25},
{"label": "DOWN", "matrix": [5, 13], "x": 14, "y": 5.25},
{"label": "RGHT", "matrix": [5, 14], "x": 15, "y": 5.25}
]
}
}
}

View File

@ -0,0 +1,50 @@
/* Copyright 2024 temp4gh
*
* 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
#include "k715_pro.h"
enum layer_names
{
_BASE,
_FnLay,
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
[_FnLay] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
};
#endif
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
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_MUTE,
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_INS,
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_DEL,
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_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_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FnLay), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
),
[_FnLay] = LAYOUT(
EE_CLR, KC_BRID, KC_BRIU, A(KC_TAB),G(KC_H),G(KC_D), G(KC_S), KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX,
XXXXXXX, BT_CHN1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCRL, KC_PSCR, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, XXXXXXX, RGB_VAI, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, XXXXXXX, _______, XXXXXXX, RGB_SPD, RGB_VAD, RGB_SPI
)
};

View File

@ -0,0 +1,2 @@
SPI_DRIVER_REQUIRED = yes
ENCODER_MAP_ENABLE = yes

View File

@ -0,0 +1,25 @@
/* Copyright 2020 QMK
*
* 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 STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
#undef STM32_SPI_USE_SPI2
#define STM32_SPI_USE_SPI2 TRUE

View File

@ -0,0 +1 @@
include keyboards/redragon/k715_pro/bluetooth/bluetooth.mk

View File

@ -0,0 +1,21 @@
# K715 Pro
![k715_pro](https://i.imgur.com/kpoGXfc.png)
A customizable 80% keyboard with wire and bluetooth.
- Keyboard Maintainer: [temp4gh](https://github.com/temp4gh)
- Hardware Supported:K715 pro PCB
- Hardware Availability: www.redragonzone.com
Make example for this keyboard (after setting up your build environment):
make redragon/k715_pro:default
Flashing example for this keyboard:
make redragon/k715_pro:default:flash
**Reset Key**: Hold down the key located at *K10*, commonly programmed as *Grave* while plugging in the keyboard.
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).

View File