mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-11-25 20:56:42 +00:00
Fixed some issues as suggested
This commit is contained in:
parent
3995b3669c
commit
f4495d4d41
@ -15,422 +15,22 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "user_kb.h"
|
||||||
#include "ansi.h"
|
#include "ansi.h"
|
||||||
#include "usb_main.h"
|
#include "usb_main.h"
|
||||||
|
|
||||||
user_config_t user_config;
|
extern bool f_rf_sw_press;
|
||||||
DEV_INFO_STRUCT dev_info = {
|
extern bool f_sleep_show;
|
||||||
.rf_baterry = 100,
|
extern bool f_dev_reset_press;
|
||||||
.link_mode = LINK_USB,
|
extern bool f_bat_num_show;
|
||||||
.rf_state = RF_IDLE,
|
extern bool f_rgb_test_press;
|
||||||
};
|
extern bool f_bat_hold;
|
||||||
|
extern uint16_t no_act_time;
|
||||||
|
extern uint8_t rf_sw_temp;
|
||||||
|
extern uint16_t rf_sw_press_delay;
|
||||||
|
extern user_config_t user_config;
|
||||||
|
extern DEV_INFO_STRUCT dev_info;
|
||||||
|
|
||||||
bool f_bat_hold = 0;
|
|
||||||
bool f_sys_show = 0;
|
|
||||||
bool f_sleep_show = 0;
|
|
||||||
bool f_send_channel = 0;
|
|
||||||
bool f_dial_sw_init_ok = 0;
|
|
||||||
bool f_rf_sw_press = 0;
|
|
||||||
bool f_dev_reset_press = 0;
|
|
||||||
bool f_rgb_test_press = 0;
|
|
||||||
bool f_bat_num_show = 0;
|
|
||||||
|
|
||||||
uint16_t rf_linking_time = 0;
|
|
||||||
uint16_t rf_link_show_time = 0;
|
|
||||||
uint8_t rf_blink_cnt = 0;
|
|
||||||
uint16_t no_act_time = 0;
|
|
||||||
uint8_t rf_sw_temp = 0;
|
|
||||||
uint16_t dev_reset_press_delay = 0;
|
|
||||||
uint16_t rf_sw_press_delay = 0;
|
|
||||||
uint16_t rgb_test_press_delay = 0;
|
|
||||||
uint8_t host_mode = 0;
|
|
||||||
host_driver_t *m_host_driver = 0;
|
|
||||||
|
|
||||||
extern bool f_rf_new_adv_ok;
|
|
||||||
extern report_keyboard_t *keyboard_report;
|
|
||||||
extern report_nkro_t *nkro_report;
|
|
||||||
extern uint8_t bitkb_report_buf[32];
|
|
||||||
extern uint8_t bytekb_report_buf[8];
|
|
||||||
extern uint8_t side_mode;
|
|
||||||
extern uint8_t side_light;
|
|
||||||
extern uint8_t side_speed;
|
|
||||||
extern uint8_t side_rgb;
|
|
||||||
extern uint8_t side_colour;
|
|
||||||
|
|
||||||
void dev_sts_sync(void);
|
|
||||||
void rf_uart_init(void);
|
|
||||||
void rf_device_init(void);
|
|
||||||
void uart_send_report_func(void);
|
|
||||||
void uart_receive_pro(void);
|
|
||||||
uint8_t uart_send_cmd(uint8_t cmd, uint8_t ack_cnt, uint8_t delayms);
|
|
||||||
void uart_send_report(uint8_t report_type, uint8_t *report_buf, uint8_t report_size);
|
|
||||||
void side_speed_contol(uint8_t dir);
|
|
||||||
void side_light_contol(uint8_t dir);
|
|
||||||
void side_colour_control(uint8_t dir);
|
|
||||||
void side_mode_control(uint8_t dir);
|
|
||||||
void side_led_show(void);
|
|
||||||
void sleep_handle(void);
|
|
||||||
void bat_led_close(void);
|
|
||||||
void num_led_show(void);
|
|
||||||
void rgb_test_show(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief gpio initial.
|
|
||||||
*/
|
|
||||||
void gpio_init(void) {
|
|
||||||
/* enable led power driver */
|
|
||||||
setPinOutput(DRIVER_LED_CS_PIN);
|
|
||||||
setPinOutput(DRIVER_SIDE_CS_PIN);
|
|
||||||
writePinLow(DRIVER_LED_CS_PIN);
|
|
||||||
writePinLow(DRIVER_SIDE_CS_PIN);
|
|
||||||
/* set side led pin output low */
|
|
||||||
setPinOutput(DRIVER_SIDE_PIN);
|
|
||||||
writePinLow(DRIVER_SIDE_PIN);
|
|
||||||
/* config RF module pin */
|
|
||||||
setPinOutput(NRF_WAKEUP_PIN);
|
|
||||||
writePinHigh(NRF_WAKEUP_PIN);
|
|
||||||
setPinInputHigh(NRF_TEST_PIN);
|
|
||||||
/* reset RF module */
|
|
||||||
setPinOutput(NRF_RESET_PIN);
|
|
||||||
writePinLow(NRF_RESET_PIN);
|
|
||||||
wait_ms(50);
|
|
||||||
writePinHigh(NRF_RESET_PIN);
|
|
||||||
/* config dial switch pin */
|
|
||||||
setPinInputHigh(DEV_MODE_PIN);
|
|
||||||
setPinInputHigh(SYS_MODE_PIN);
|
|
||||||
/* open led DC driver */
|
|
||||||
setPinOutput(DC_BOOST_PIN);
|
|
||||||
writePinHigh(DC_BOOST_PIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief long press key process.
|
|
||||||
*/
|
|
||||||
void long_press_key(void) {
|
|
||||||
static uint32_t long_press_timer = 0;
|
|
||||||
|
|
||||||
if (timer_elapsed32(long_press_timer) < 100) return;
|
|
||||||
long_press_timer = timer_read32();
|
|
||||||
|
|
||||||
// Open a new RF device
|
|
||||||
if (f_rf_sw_press) {
|
|
||||||
rf_sw_press_delay++;
|
|
||||||
if (rf_sw_press_delay >= RF_LONG_PRESS_DELAY) {
|
|
||||||
f_rf_sw_press = 0;
|
|
||||||
|
|
||||||
dev_info.link_mode = rf_sw_temp;
|
|
||||||
dev_info.rf_channel = rf_sw_temp;
|
|
||||||
dev_info.ble_channel = rf_sw_temp;
|
|
||||||
|
|
||||||
uint8_t timeout = 5;
|
|
||||||
while (timeout--) {
|
|
||||||
uart_send_cmd(CMD_NEW_ADV, 0, 1);
|
|
||||||
wait_ms(20);
|
|
||||||
uart_receive_pro();
|
|
||||||
if (f_rf_new_adv_ok) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
rf_sw_press_delay = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The device is restored to factory Settings
|
|
||||||
if (f_dev_reset_press) {
|
|
||||||
dev_reset_press_delay++;
|
|
||||||
if (dev_reset_press_delay >= DEV_RESET_PRESS_DELAY) {
|
|
||||||
f_dev_reset_press = 0;
|
|
||||||
|
|
||||||
if (dev_info.link_mode != LINK_USB) {
|
|
||||||
if (dev_info.link_mode != LINK_RF_24) {
|
|
||||||
dev_info.link_mode = LINK_BT_1;
|
|
||||||
dev_info.ble_channel = LINK_BT_1;
|
|
||||||
dev_info.rf_channel = LINK_BT_1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dev_info.ble_channel = LINK_BT_1;
|
|
||||||
dev_info.rf_channel = LINK_BT_1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uart_send_cmd(CMD_SET_LINK, 10, 10);
|
|
||||||
wait_ms(500);
|
|
||||||
uart_send_cmd(CMD_CLR_DEVICE, 10, 10);
|
|
||||||
|
|
||||||
void device_reset_show(void);
|
|
||||||
void device_reset_init(void);
|
|
||||||
|
|
||||||
eeconfig_init();
|
|
||||||
device_reset_show();
|
|
||||||
device_reset_init();
|
|
||||||
|
|
||||||
if (dev_info.sys_sw_state == SYS_SW_MAC) {
|
|
||||||
default_layer_set(1 << 0);
|
|
||||||
keymap_config.nkro = 0;
|
|
||||||
} else {
|
|
||||||
default_layer_set(1 << 2);
|
|
||||||
keymap_config.nkro = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dev_reset_press_delay = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enter the RGB test mode
|
|
||||||
if (f_rgb_test_press) {
|
|
||||||
rgb_test_press_delay++;
|
|
||||||
if (rgb_test_press_delay >= RGB_TEST_PRESS_DELAY) {
|
|
||||||
f_rgb_test_press = 0;
|
|
||||||
rgb_test_show();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
rgb_test_press_delay = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Release all keys, clear keyboard report.
|
|
||||||
*/
|
|
||||||
void break_all_key(void) {
|
|
||||||
uint8_t report_buf[16];
|
|
||||||
bool nkro_temp = keymap_config.nkro;
|
|
||||||
|
|
||||||
clear_weak_mods();
|
|
||||||
clear_mods();
|
|
||||||
clear_keyboard();
|
|
||||||
|
|
||||||
keymap_config.nkro = 1;
|
|
||||||
memset(keyboard_report, 0, sizeof(report_keyboard_t));
|
|
||||||
host_keyboard_send(keyboard_report);
|
|
||||||
wait_ms(10);
|
|
||||||
|
|
||||||
keymap_config.nkro = 0;
|
|
||||||
memset(keyboard_report, 0, sizeof(report_keyboard_t));
|
|
||||||
host_keyboard_send(keyboard_report);
|
|
||||||
wait_ms(10);
|
|
||||||
|
|
||||||
keymap_config.nkro = nkro_temp;
|
|
||||||
|
|
||||||
if (dev_info.link_mode != LINK_USB) {
|
|
||||||
memset(report_buf, 0, 16);
|
|
||||||
uart_send_report(CMD_RPT_BIT_KB, report_buf, 16);
|
|
||||||
wait_ms(10);
|
|
||||||
uart_send_report(CMD_RPT_BYTE_KB, report_buf, 8);
|
|
||||||
wait_ms(10);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(bitkb_report_buf, 0, sizeof(bitkb_report_buf));
|
|
||||||
memset(bytekb_report_buf, 0, sizeof(bytekb_report_buf));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief switch device link mode.
|
|
||||||
* @param mode : link mode
|
|
||||||
*/
|
|
||||||
void switch_dev_link(uint8_t mode) {
|
|
||||||
if (mode > LINK_USB) return;
|
|
||||||
|
|
||||||
break_all_key();
|
|
||||||
|
|
||||||
dev_info.link_mode = mode;
|
|
||||||
|
|
||||||
dev_info.rf_state = RF_IDLE;
|
|
||||||
f_send_channel = 1;
|
|
||||||
|
|
||||||
if (mode == LINK_USB) {
|
|
||||||
host_mode = HOST_USB_TYPE;
|
|
||||||
host_set_driver(m_host_driver);
|
|
||||||
rf_link_show_time = 0;
|
|
||||||
} else {
|
|
||||||
host_mode = HOST_RF_TYPE;
|
|
||||||
|
|
||||||
host_set_driver(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief scan dial switch.
|
|
||||||
*/
|
|
||||||
void dial_sw_scan(void) {
|
|
||||||
uint8_t dial_scan = 0;
|
|
||||||
static uint8_t dial_save = 0xf0;
|
|
||||||
static uint8_t debounce = 0;
|
|
||||||
static uint32_t dial_scan_timer = 0;
|
|
||||||
static bool f_first = true;
|
|
||||||
|
|
||||||
if (!f_first) {
|
|
||||||
if (timer_elapsed32(dial_scan_timer) < 20) return;
|
|
||||||
}
|
|
||||||
dial_scan_timer = timer_read32();
|
|
||||||
|
|
||||||
setPinInputHigh(DEV_MODE_PIN);
|
|
||||||
setPinInputHigh(SYS_MODE_PIN);
|
|
||||||
|
|
||||||
if (readPin(DEV_MODE_PIN)) dial_scan |= 0X01;
|
|
||||||
if (readPin(SYS_MODE_PIN)) dial_scan |= 0X02;
|
|
||||||
|
|
||||||
if (dial_save != dial_scan) {
|
|
||||||
break_all_key();
|
|
||||||
|
|
||||||
no_act_time = 0;
|
|
||||||
rf_linking_time = 0;
|
|
||||||
|
|
||||||
dial_save = dial_scan;
|
|
||||||
debounce = 25;
|
|
||||||
f_dial_sw_init_ok = 0;
|
|
||||||
return;
|
|
||||||
} else if (debounce) {
|
|
||||||
debounce--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dial_scan & 0x01) {
|
|
||||||
if (dev_info.link_mode != LINK_USB) {
|
|
||||||
switch_dev_link(LINK_USB);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (dev_info.link_mode != dev_info.rf_channel) {
|
|
||||||
switch_dev_link(dev_info.rf_channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dial_scan & 0x02) {
|
|
||||||
if (dev_info.sys_sw_state != SYS_SW_MAC) {
|
|
||||||
f_sys_show = 1;
|
|
||||||
default_layer_set(1 << 0);
|
|
||||||
dev_info.sys_sw_state = SYS_SW_MAC;
|
|
||||||
keymap_config.nkro = 0;
|
|
||||||
break_all_key();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (dev_info.sys_sw_state != SYS_SW_WIN) {
|
|
||||||
f_sys_show = 1;
|
|
||||||
default_layer_set(1 << 2);
|
|
||||||
dev_info.sys_sw_state = SYS_SW_WIN;
|
|
||||||
keymap_config.nkro = 1;
|
|
||||||
break_all_key();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f_dial_sw_init_ok == 0) {
|
|
||||||
f_dial_sw_init_ok = 1;
|
|
||||||
f_first = false;
|
|
||||||
|
|
||||||
if (dev_info.link_mode != LINK_USB) {
|
|
||||||
host_set_driver(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief power on scan dial switch.
|
|
||||||
*/
|
|
||||||
void dial_sw_fast_scan(void) {
|
|
||||||
{
|
|
||||||
uint8_t dial_scan_dev = 0;
|
|
||||||
uint8_t dial_scan_sys = 0;
|
|
||||||
uint8_t dial_check_dev = 0;
|
|
||||||
uint8_t dial_check_sys = 0;
|
|
||||||
uint8_t debounce = 0;
|
|
||||||
|
|
||||||
setPinInputHigh(DEV_MODE_PIN);
|
|
||||||
setPinInputHigh(SYS_MODE_PIN);
|
|
||||||
|
|
||||||
// Debounce to get a stable state
|
|
||||||
for(debounce=0; debounce<10; debounce++) {
|
|
||||||
dial_scan_dev = 0;
|
|
||||||
dial_scan_sys = 0;
|
|
||||||
if (readPin(DEV_MODE_PIN)) dial_scan_dev = 0x01;
|
|
||||||
else dial_scan_dev = 0;
|
|
||||||
if (readPin(SYS_MODE_PIN)) dial_scan_sys = 0x01;
|
|
||||||
else dial_scan_sys = 0;
|
|
||||||
if((dial_scan_dev != dial_check_dev)||(dial_scan_sys != dial_check_sys))
|
|
||||||
{
|
|
||||||
dial_check_dev = dial_scan_dev;
|
|
||||||
dial_check_sys = dial_scan_sys;
|
|
||||||
debounce = 0;
|
|
||||||
}
|
|
||||||
wait_ms(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// RF link mode
|
|
||||||
if (dial_scan_dev) {
|
|
||||||
if (dev_info.link_mode != LINK_USB) {
|
|
||||||
switch_dev_link(LINK_USB);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (dev_info.link_mode != dev_info.rf_channel) {
|
|
||||||
switch_dev_link(dev_info.rf_channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Win or Mac
|
|
||||||
if (dial_scan_sys) {
|
|
||||||
if (dev_info.sys_sw_state != SYS_SW_MAC) {
|
|
||||||
default_layer_set(1 << 0);
|
|
||||||
dev_info.sys_sw_state = SYS_SW_MAC;
|
|
||||||
keymap_config.nkro = 0;
|
|
||||||
break_all_key();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (dev_info.sys_sw_state != SYS_SW_WIN) {
|
|
||||||
//f_sys_show = 1;
|
|
||||||
default_layer_set(1 << 2);
|
|
||||||
dev_info.sys_sw_state = SYS_SW_WIN;
|
|
||||||
keymap_config.nkro = 1;
|
|
||||||
break_all_key();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief timer process.
|
|
||||||
*/
|
|
||||||
void timer_pro(void) {
|
|
||||||
static uint32_t interval_timer = 0;
|
|
||||||
static bool f_first = true;
|
|
||||||
|
|
||||||
if (f_first) {
|
|
||||||
f_first = false;
|
|
||||||
interval_timer = timer_read32();
|
|
||||||
m_host_driver = host_get_driver();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timer_elapsed32(interval_timer) < 10)
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
interval_timer = timer_read32();
|
|
||||||
|
|
||||||
if (rf_link_show_time < RF_LINK_SHOW_TIME) rf_link_show_time++;
|
|
||||||
|
|
||||||
if (no_act_time < 0xffff) no_act_time++;
|
|
||||||
|
|
||||||
if (rf_linking_time < 0xffff) rf_linking_time++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief londing eeprom data.
|
|
||||||
*/
|
|
||||||
void londing_eeprom_data(void) {
|
|
||||||
eeconfig_read_user_datablock(&user_config);
|
|
||||||
if (user_config.default_brightness_flag != 0xA5) {
|
|
||||||
/* first power on, set rgb matrix brightness at middle level*/
|
|
||||||
rgb_matrix_sethsv(255, 255, RGB_MATRIX_MAXIMUM_BRIGHTNESS - RGB_MATRIX_VAL_STEP * 2);
|
|
||||||
user_config.default_brightness_flag = 0xA5;
|
|
||||||
user_config.ee_side_mode = side_mode;
|
|
||||||
user_config.ee_side_light = side_light;
|
|
||||||
user_config.ee_side_speed = side_speed;
|
|
||||||
user_config.ee_side_rgb = side_rgb;
|
|
||||||
user_config.ee_side_colour = side_colour;
|
|
||||||
user_config.sleep_enable = true;
|
|
||||||
eeconfig_update_user_datablock(&user_config);
|
|
||||||
} else {
|
|
||||||
side_mode = user_config.ee_side_mode;
|
|
||||||
side_light = user_config.ee_side_light;
|
|
||||||
side_speed = user_config.ee_side_speed;
|
|
||||||
side_rgb = user_config.ee_side_rgb;
|
|
||||||
side_colour = user_config.ee_side_colour;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* qmk process record */
|
/* qmk process record */
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
@ -528,24 +128,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case MAC_TASK:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
host_consumer_send(0x029F);
|
|
||||||
} else {
|
|
||||||
host_consumer_send(0);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
case MAC_SEARCH:
|
|
||||||
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:
|
case MAC_VOICE:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
host_consumer_send(0xcf);
|
host_consumer_send(0xcf);
|
||||||
@ -554,14 +136,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case MAC_CONSOLE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
host_consumer_send(0x02A0);
|
|
||||||
} else {
|
|
||||||
host_consumer_send(0);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
case MAC_DND:
|
case MAC_DND:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
host_system_send(0x9b);
|
host_system_send(0x9b);
|
||||||
@ -570,42 +144,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
}
|
}
|
||||||
return false;
|
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) {
|
|
||||||
if (dev_info.sys_sw_state == SYS_SW_WIN) {
|
|
||||||
register_code(KC_LGUI);
|
|
||||||
register_code(KC_LSFT);
|
|
||||||
register_code(KC_S);
|
|
||||||
wait_ms(50);
|
|
||||||
unregister_code(KC_S);
|
|
||||||
unregister_code(KC_LSFT);
|
|
||||||
unregister_code(KC_LGUI);
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
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;
|
|
||||||
|
|
||||||
case SIDE_VAI:
|
case SIDE_VAI:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
side_light_contol(1);
|
side_light_contol(1);
|
||||||
|
@ -27,12 +27,8 @@ enum custom_keycodes {
|
|||||||
LNK_BLE2,
|
LNK_BLE2,
|
||||||
LNK_BLE3,
|
LNK_BLE3,
|
||||||
|
|
||||||
MAC_TASK,
|
|
||||||
MAC_SEARCH,
|
|
||||||
MAC_VOICE,
|
MAC_VOICE,
|
||||||
MAC_CONSOLE,
|
MAC_DND,
|
||||||
MAC_PRT,
|
|
||||||
MAC_PRTA,
|
|
||||||
|
|
||||||
SIDE_VAI,
|
SIDE_VAI,
|
||||||
SIDE_VAD,
|
SIDE_VAD,
|
||||||
@ -44,129 +40,11 @@ enum custom_keycodes {
|
|||||||
DEV_RESET,
|
DEV_RESET,
|
||||||
SLEEP_MODE,
|
SLEEP_MODE,
|
||||||
BAT_SHOW,
|
BAT_SHOW,
|
||||||
MAC_DND,
|
|
||||||
BAT_NUM,
|
BAT_NUM,
|
||||||
RGB_TEST
|
RGB_TEST
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
#define SYS_PRT G(S(KC_3))
|
||||||
RX_Idle,
|
#define MAC_PRTA G(S(KC_4))
|
||||||
RX_Receiving,
|
#define WIN_PRTA G(S(KC_S))
|
||||||
RX_Done,
|
#define MAC_SEARCH G(KC_SPC)
|
||||||
RX_Fail,
|
|
||||||
RX_OV_ERR,
|
|
||||||
RX_SUM_ERR,
|
|
||||||
RX_CMD_ERR,
|
|
||||||
RX_DATA_ERR,
|
|
||||||
RX_DATA_OV,
|
|
||||||
RX_FORMAT_ERR,
|
|
||||||
|
|
||||||
TX_OK = 0XE0,
|
|
||||||
TX_DONE,
|
|
||||||
TX_BUSY,
|
|
||||||
TX_TIMEOUT,
|
|
||||||
TX_DATA_ERR,
|
|
||||||
|
|
||||||
} TYPE_RX_STATE;
|
|
||||||
|
|
||||||
|
|
||||||
#define RF_IDLE 0
|
|
||||||
#define RF_PAIRING 1
|
|
||||||
#define RF_LINKING 2
|
|
||||||
#define RF_CONNECT 3
|
|
||||||
#define RF_DISCONNECT 4
|
|
||||||
#define RF_SLEEP 5
|
|
||||||
#define RF_SNIF 6
|
|
||||||
#define RF_INVAILD 0XFE
|
|
||||||
#define RF_ERR_STATE 0XFF
|
|
||||||
|
|
||||||
#define CMD_POWER_UP 0XF0
|
|
||||||
#define CMD_SLEEP 0XF1
|
|
||||||
#define CMD_HAND 0XF2
|
|
||||||
#define CMD_SNIF 0XF3
|
|
||||||
#define CMD_24G_SUSPEND 0XF4
|
|
||||||
#define CMD_IDLE_EXIT 0XFE
|
|
||||||
|
|
||||||
#define CMD_RPT_MS 0XE0
|
|
||||||
#define CMD_RPT_BYTE_KB 0XE1
|
|
||||||
#define CMD_RPT_BIT_KB 0XE2
|
|
||||||
#define CMD_RPT_CONSUME 0XE3
|
|
||||||
#define CMD_RPT_SYS 0XE4
|
|
||||||
|
|
||||||
#define CMD_SET_LINK 0XC0
|
|
||||||
#define CMD_SET_CONFIG 0XC1
|
|
||||||
#define CMD_GET_CONFIG 0XC2
|
|
||||||
#define CMD_SET_NAME 0XC3
|
|
||||||
#define CMD_GET_NAME 0XC4
|
|
||||||
#define CMD_CLR_DEVICE 0XC5
|
|
||||||
#define CMD_NEW_ADV 0XC7
|
|
||||||
#define CMD_RF_STS_SYSC 0XC9
|
|
||||||
#define CMD_SET_24G_NAME 0XCA
|
|
||||||
#define CMD_GO_TEST 0XCF
|
|
||||||
#define CMD_RF_DFU 0XB1
|
|
||||||
|
|
||||||
#define CMD_WRITE_DATA 0X80
|
|
||||||
#define CMD_READ_DATA 0X81
|
|
||||||
|
|
||||||
#define LINK_RF_24 0
|
|
||||||
#define LINK_BT_1 1
|
|
||||||
#define LINK_BT_2 2
|
|
||||||
#define LINK_BT_3 3
|
|
||||||
#define LINK_USB 4
|
|
||||||
|
|
||||||
#define UART_HEAD 0x5A
|
|
||||||
#define FUNC_VALID_LEN 32
|
|
||||||
#define UART_MAX_LEN 64
|
|
||||||
|
|
||||||
#define SYS_SW_WIN 0xa1
|
|
||||||
#define SYS_SW_MAC 0xa2
|
|
||||||
|
|
||||||
#define RF_LINK_SHOW_TIME 300
|
|
||||||
|
|
||||||
#define HOST_USB_TYPE 0
|
|
||||||
#define HOST_BLE_TYPE 1
|
|
||||||
#define HOST_RF_TYPE 2
|
|
||||||
|
|
||||||
#define LINK_TIMEOUT (100 * 120)
|
|
||||||
#define SLEEP_TIME_DELAY (100 * 360)
|
|
||||||
#define POWER_DOWN_DELAY (24)
|
|
||||||
|
|
||||||
#define RF_LONG_PRESS_DELAY 30
|
|
||||||
#define DEV_RESET_PRESS_DELAY 30
|
|
||||||
#define RGB_TEST_PRESS_DELAY 30
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t RXDState;
|
|
||||||
uint8_t RXDLen;
|
|
||||||
uint8_t RXDOverTime;
|
|
||||||
uint8_t TXDLenBack;
|
|
||||||
uint8_t TXDOffset;
|
|
||||||
uint8_t TXDBuf[UART_MAX_LEN];
|
|
||||||
uint8_t RXDBuf[UART_MAX_LEN];
|
|
||||||
} USART_MGR_STRUCT;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t link_mode;
|
|
||||||
uint8_t rf_channel;
|
|
||||||
uint8_t ble_channel;
|
|
||||||
uint8_t rf_state;
|
|
||||||
uint8_t rf_charge;
|
|
||||||
uint8_t rf_led;
|
|
||||||
uint8_t rf_baterry;
|
|
||||||
uint8_t sys_sw_state;
|
|
||||||
} DEV_INFO_STRUCT;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t default_brightness_flag;
|
|
||||||
uint8_t ee_side_mode;
|
|
||||||
uint8_t ee_side_light;
|
|
||||||
uint8_t ee_side_speed;
|
|
||||||
uint8_t ee_side_rgb;
|
|
||||||
uint8_t ee_side_colour;
|
|
||||||
uint8_t sleep_enable;
|
|
||||||
uint8_t retain1;
|
|
||||||
uint8_t retain2;
|
|
||||||
} user_config_t;
|
|
||||||
|
@ -24,7 +24,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define NRF_TEST_PIN B5
|
#define NRF_TEST_PIN B5
|
||||||
#define NRF_WAKEUP_PIN B8
|
#define NRF_WAKEUP_PIN B8
|
||||||
#define DRIVER_LED_CS_PIN C6
|
#define DRIVER_LED_CS_PIN C6
|
||||||
|
|
||||||
#define DRIVER_SIDE_PIN C8
|
#define DRIVER_SIDE_PIN C8
|
||||||
#define DRIVER_SIDE_CS_PIN C9
|
#define DRIVER_SIDE_CS_PIN C9
|
||||||
|
|
||||||
@ -40,5 +39,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
#define EECONFIG_USER_DATA_SIZE 8
|
#define EECONFIG_USER_DATA_SIZE 8
|
||||||
|
|
||||||
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
|
|
||||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
"max_brightness": 128,
|
"max_brightness": 128,
|
||||||
"val_steps": 26,
|
"val_steps": 26,
|
||||||
"speed_steps": 52,
|
"speed_steps": 52,
|
||||||
|
"sleep": true,
|
||||||
"animations": {
|
"animations": {
|
||||||
"gradient_up_down": true,
|
"gradient_up_down": true,
|
||||||
"gradient_left_right": true,
|
"gradient_left_right": true,
|
||||||
@ -169,8 +170,9 @@
|
|||||||
"ws2812": {
|
"ws2812": {
|
||||||
"pin": "A7"
|
"pin": "A7"
|
||||||
},
|
},
|
||||||
|
"community_layouts": ["75_ansi"],
|
||||||
"layouts": {
|
"layouts": {
|
||||||
"LAYOUT_ansi_84": {
|
"LAYOUT_75_ansi": {
|
||||||
"layout": [
|
"layout": [
|
||||||
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
|
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
|
||||||
{"label": "F1", "matrix": [0, 1], "x": 1, "y": 0},
|
{"label": "F1", "matrix": [0, 1], "x": 1, "y": 0},
|
||||||
@ -266,3 +268,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
// layer Mac
|
// layer Mac
|
||||||
[0] = LAYOUT_ansi_84(
|
[0] = LAYOUT_75_ansi(
|
||||||
KC_ESC, KC_BRID, KC_BRIU, MAC_TASK, MAC_SEARCH, MAC_VOICE, MAC_DND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, MAC_PRTA, KC_INS, KC_DEL,
|
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, MAC_SEARCH, MAC_VOICE, MAC_DND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, MAC_PRTA, KC_INS, KC_DEL,
|
||||||
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_PGUP,
|
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_PGUP,
|
||||||
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_PGDN,
|
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_PGDN,
|
||||||
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_HOME,
|
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_HOME,
|
||||||
@ -29,8 +29,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
// layer Mac Fn
|
// layer Mac Fn
|
||||||
[1] = LAYOUT_ansi_84(
|
[1] = LAYOUT_75_ansi(
|
||||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MAC_PRT, _______, _______,
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, SYS_PRT, _______, _______,
|
||||||
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, _______, _______, _______, _______, MO(1), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
_______, _______, _______, _______, _______, MO(1), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
||||||
|
|
||||||
// layer win
|
// layer win
|
||||||
[2] = LAYOUT_ansi_84(
|
[2] = LAYOUT_75_ansi(
|
||||||
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_PSCR, KC_INS, KC_DEL,
|
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_PSCR, KC_INS, KC_DEL,
|
||||||
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_PGUP,
|
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_PGUP,
|
||||||
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_PGDN,
|
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_PGDN,
|
||||||
@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
// layer win Fn
|
// layer win Fn
|
||||||
[3] = LAYOUT_ansi_84(
|
[3] = LAYOUT_75_ansi(
|
||||||
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
|
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
|
||||||
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
||||||
@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, _______, _______, _______, _______, MO(3), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
_______, _______, _______, _______, _______, MO(3), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
||||||
|
|
||||||
// layer 4
|
// layer 4
|
||||||
[4] = LAYOUT_ansi_84(
|
[4] = LAYOUT_75_ansi(
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
// layer Mac
|
// layer Mac
|
||||||
[0] = LAYOUT_ansi_84(
|
[0] = LAYOUT_75_ansi(
|
||||||
KC_ESC, KC_BRID, KC_BRIU, MAC_TASK, MAC_SEARCH, MAC_VOICE, MAC_CONSOLE,KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, MAC_PRTA, KC_INS, KC_DEL,
|
KC_ESC, KC_BRID, KC_BRIU, KC_MCTL, MAC_SEARCH, MAC_VOICE, MAC_DND, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, MAC_PRTA, KC_INS, KC_DEL,
|
||||||
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_PGUP,
|
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_PGUP,
|
||||||
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_PGDN,
|
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_PGDN,
|
||||||
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_HOME,
|
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_HOME,
|
||||||
@ -29,8 +29,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
// layer Mac Fn
|
// layer Mac Fn
|
||||||
[1] = LAYOUT_ansi_84(
|
[1] = LAYOUT_75_ansi(
|
||||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MAC_PRT, _______, _______,
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, SYS_PRT, _______, _______,
|
||||||
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, _______, _______, _______, _______, MO(1), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
_______, _______, _______, _______, _______, MO(1), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
||||||
|
|
||||||
// layer win
|
// layer win
|
||||||
[2] = LAYOUT_ansi_84(
|
[2] = LAYOUT_75_ansi(
|
||||||
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_PSCR, KC_INS, KC_DEL,
|
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_PSCR, KC_INS, KC_DEL,
|
||||||
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_PGUP,
|
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_PGUP,
|
||||||
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_PGDN,
|
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_PGDN,
|
||||||
@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(3), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
// layer win Fn
|
// layer win Fn
|
||||||
[3] = LAYOUT_ansi_84(
|
[3] = LAYOUT_75_ansi(
|
||||||
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
|
_______, KC_BRID, KC_BRIU, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______,
|
||||||
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, LNK_BLE1, LNK_BLE2, LNK_BLE3, LNK_RF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DEV_RESET, SLEEP_MODE, BAT_SHOW, _______,
|
||||||
@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
_______, _______, _______, _______, _______, MO(3), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
_______, _______, _______, _______, _______, MO(3), _______, RGB_MOD, RGB_VAD, RGB_HUI),
|
||||||
|
|
||||||
// layer 4
|
// layer 4
|
||||||
[4] = LAYOUT_ansi_84(
|
[4] = LAYOUT_75_ansi(
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
@ -15,8 +15,9 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ansi.h"
|
#include "user_kb.h"
|
||||||
#include "uart.h" // qmk uart.h
|
#include "uart.h" // qmk uart.h
|
||||||
|
#include "ansi.h"
|
||||||
|
|
||||||
USART_MGR_STRUCT Usart_Mgr;
|
USART_MGR_STRUCT Usart_Mgr;
|
||||||
#define RX_SBYTE Usart_Mgr.RXDBuf[0]
|
#define RX_SBYTE Usart_Mgr.RXDBuf[0]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
SRC += side.c
|
SRC += side.c
|
||||||
SRC += rf.c
|
SRC += rf.c
|
||||||
SRC += sleep.c
|
SRC += sleep.c
|
||||||
|
SRC += user_kb.c
|
||||||
SRC += side_driver.c
|
SRC += side_driver.c
|
||||||
QUANTUM_LIB_SRC += uart.c
|
QUANTUM_LIB_SRC += uart.c
|
||||||
|
@ -15,8 +15,10 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "user_kb.h"
|
||||||
#include "ansi.h"
|
#include "ansi.h"
|
||||||
#include "side_table.h"
|
#include "side_table.h"
|
||||||
|
#include "ws2812.h"
|
||||||
|
|
||||||
#define SIDE_BRIGHT_MAX 4
|
#define SIDE_BRIGHT_MAX 4
|
||||||
#define SIDE_SPEED_MAX 4
|
#define SIDE_SPEED_MAX 4
|
||||||
@ -756,7 +758,7 @@ void device_reset_init(void) {
|
|||||||
f_bat_hold = false;
|
f_bat_hold = false;
|
||||||
|
|
||||||
rgb_matrix_enable();
|
rgb_matrix_enable();
|
||||||
rgb_matrix_mode(RGB_MATRIX_DEFAULT_MODE);
|
rgb_matrix_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT);
|
||||||
rgb_matrix_set_speed(255 - RGB_MATRIX_SPD_STEP * 2);
|
rgb_matrix_set_speed(255 - RGB_MATRIX_SPD_STEP * 2);
|
||||||
rgb_matrix_sethsv(255, 255, RGB_MATRIX_MAXIMUM_BRIGHTNESS - RGB_MATRIX_VAL_STEP * 2);
|
rgb_matrix_sethsv(255, 255, RGB_MATRIX_MAXIMUM_BRIGHTNESS - RGB_MATRIX_VAL_STEP * 2);
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "user_kb.h"
|
||||||
#include "ansi.h"
|
#include "ansi.h"
|
||||||
#include "hal_usb.h"
|
#include "hal_usb.h"
|
||||||
#include "usb_main.h"
|
#include "usb_main.h"
|
||||||
|
416
keyboards/nuphy/air75_v2/ansi/user_kb.c
Normal file
416
keyboards/nuphy/air75_v2/ansi/user_kb.c
Normal file
@ -0,0 +1,416 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2023 @ Nuphy <https://nuphy.com/>
|
||||||
|
|
||||||
|
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 "user_kb.h"
|
||||||
|
#include "ansi.h"
|
||||||
|
#include "usb_main.h"
|
||||||
|
|
||||||
|
user_config_t user_config;
|
||||||
|
DEV_INFO_STRUCT dev_info = {
|
||||||
|
.rf_baterry = 100,
|
||||||
|
.link_mode = LINK_USB,
|
||||||
|
.rf_state = RF_IDLE,
|
||||||
|
};
|
||||||
|
bool f_bat_hold = 0;
|
||||||
|
bool f_sys_show = 0;
|
||||||
|
bool f_sleep_show = 0;
|
||||||
|
bool f_send_channel = 0;
|
||||||
|
bool f_dial_sw_init_ok = 0;
|
||||||
|
bool f_rf_sw_press = 0;
|
||||||
|
bool f_dev_reset_press = 0;
|
||||||
|
bool f_rgb_test_press = 0;
|
||||||
|
bool f_bat_num_show = 0;
|
||||||
|
|
||||||
|
uint8_t rf_blink_cnt = 0;
|
||||||
|
uint8_t rf_sw_temp = 0;
|
||||||
|
uint8_t host_mode = 0;
|
||||||
|
uint16_t rf_linking_time = 0;
|
||||||
|
uint16_t rf_link_show_time = 0;
|
||||||
|
uint16_t no_act_time = 0;
|
||||||
|
uint16_t dev_reset_press_delay = 0;
|
||||||
|
uint16_t rf_sw_press_delay = 0;
|
||||||
|
uint16_t rgb_test_press_delay = 0;
|
||||||
|
host_driver_t *m_host_driver = 0;
|
||||||
|
|
||||||
|
extern bool f_rf_new_adv_ok;
|
||||||
|
extern report_keyboard_t *keyboard_report;
|
||||||
|
extern report_nkro_t *nkro_report;
|
||||||
|
extern uint8_t bitkb_report_buf[32];
|
||||||
|
extern uint8_t bytekb_report_buf[8];
|
||||||
|
extern uint8_t side_mode;
|
||||||
|
extern uint8_t side_light;
|
||||||
|
extern uint8_t side_speed;
|
||||||
|
extern uint8_t side_rgb;
|
||||||
|
extern uint8_t side_colour;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief gpio initial.
|
||||||
|
*/
|
||||||
|
void gpio_init(void) {
|
||||||
|
/* enable led power driver */
|
||||||
|
setPinOutput(DRIVER_LED_CS_PIN);
|
||||||
|
setPinOutput(DRIVER_SIDE_CS_PIN);
|
||||||
|
writePinLow(DRIVER_LED_CS_PIN);
|
||||||
|
writePinLow(DRIVER_SIDE_CS_PIN);
|
||||||
|
/* set side led pin output low */
|
||||||
|
setPinOutput(DRIVER_SIDE_PIN);
|
||||||
|
writePinLow(DRIVER_SIDE_PIN);
|
||||||
|
/* config RF module pin */
|
||||||
|
setPinOutput(NRF_WAKEUP_PIN);
|
||||||
|
writePinHigh(NRF_WAKEUP_PIN);
|
||||||
|
setPinInputHigh(NRF_TEST_PIN);
|
||||||
|
/* reset RF module */
|
||||||
|
setPinOutput(NRF_RESET_PIN);
|
||||||
|
writePinLow(NRF_RESET_PIN);
|
||||||
|
wait_ms(50);
|
||||||
|
writePinHigh(NRF_RESET_PIN);
|
||||||
|
/* config dial switch pin */
|
||||||
|
setPinInputHigh(DEV_MODE_PIN);
|
||||||
|
setPinInputHigh(SYS_MODE_PIN);
|
||||||
|
/* open led DC driver */
|
||||||
|
setPinOutput(DC_BOOST_PIN);
|
||||||
|
writePinHigh(DC_BOOST_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief long press key process.
|
||||||
|
*/
|
||||||
|
void long_press_key(void) {
|
||||||
|
static uint32_t long_press_timer = 0;
|
||||||
|
|
||||||
|
if (timer_elapsed32(long_press_timer) < 100) return;
|
||||||
|
long_press_timer = timer_read32();
|
||||||
|
|
||||||
|
// Open a new RF device
|
||||||
|
if (f_rf_sw_press) {
|
||||||
|
rf_sw_press_delay++;
|
||||||
|
if (rf_sw_press_delay >= RF_LONG_PRESS_DELAY) {
|
||||||
|
f_rf_sw_press = 0;
|
||||||
|
|
||||||
|
dev_info.link_mode = rf_sw_temp;
|
||||||
|
dev_info.rf_channel = rf_sw_temp;
|
||||||
|
dev_info.ble_channel = rf_sw_temp;
|
||||||
|
|
||||||
|
uint8_t timeout = 5;
|
||||||
|
while (timeout--) {
|
||||||
|
uart_send_cmd(CMD_NEW_ADV, 0, 1);
|
||||||
|
wait_ms(20);
|
||||||
|
uart_receive_pro();
|
||||||
|
if (f_rf_new_adv_ok) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rf_sw_press_delay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The device is restored to factory Settings
|
||||||
|
if (f_dev_reset_press) {
|
||||||
|
dev_reset_press_delay++;
|
||||||
|
if (dev_reset_press_delay >= DEV_RESET_PRESS_DELAY) {
|
||||||
|
f_dev_reset_press = 0;
|
||||||
|
|
||||||
|
if (dev_info.link_mode != LINK_USB) {
|
||||||
|
if (dev_info.link_mode != LINK_RF_24) {
|
||||||
|
dev_info.link_mode = LINK_BT_1;
|
||||||
|
dev_info.ble_channel = LINK_BT_1;
|
||||||
|
dev_info.rf_channel = LINK_BT_1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dev_info.ble_channel = LINK_BT_1;
|
||||||
|
dev_info.rf_channel = LINK_BT_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uart_send_cmd(CMD_SET_LINK, 10, 10);
|
||||||
|
wait_ms(500);
|
||||||
|
uart_send_cmd(CMD_CLR_DEVICE, 10, 10);
|
||||||
|
|
||||||
|
void device_reset_show(void);
|
||||||
|
void device_reset_init(void);
|
||||||
|
|
||||||
|
eeconfig_init();
|
||||||
|
device_reset_show();
|
||||||
|
device_reset_init();
|
||||||
|
|
||||||
|
if (dev_info.sys_sw_state == SYS_SW_MAC) {
|
||||||
|
default_layer_set(1 << 0);
|
||||||
|
keymap_config.nkro = 0;
|
||||||
|
} else {
|
||||||
|
default_layer_set(1 << 2);
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dev_reset_press_delay = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enter the RGB test mode
|
||||||
|
if (f_rgb_test_press) {
|
||||||
|
rgb_test_press_delay++;
|
||||||
|
if (rgb_test_press_delay >= RGB_TEST_PRESS_DELAY) {
|
||||||
|
f_rgb_test_press = 0;
|
||||||
|
rgb_test_show();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rgb_test_press_delay = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Release all keys, clear keyboard report.
|
||||||
|
*/
|
||||||
|
void break_all_key(void) {
|
||||||
|
uint8_t report_buf[16];
|
||||||
|
bool nkro_temp = keymap_config.nkro;
|
||||||
|
|
||||||
|
clear_weak_mods();
|
||||||
|
clear_mods();
|
||||||
|
clear_keyboard();
|
||||||
|
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
memset(keyboard_report, 0, sizeof(report_keyboard_t));
|
||||||
|
host_keyboard_send(keyboard_report);
|
||||||
|
wait_ms(10);
|
||||||
|
|
||||||
|
keymap_config.nkro = 0;
|
||||||
|
memset(keyboard_report, 0, sizeof(report_keyboard_t));
|
||||||
|
host_keyboard_send(keyboard_report);
|
||||||
|
wait_ms(10);
|
||||||
|
|
||||||
|
keymap_config.nkro = nkro_temp;
|
||||||
|
|
||||||
|
if (dev_info.link_mode != LINK_USB) {
|
||||||
|
memset(report_buf, 0, 16);
|
||||||
|
uart_send_report(CMD_RPT_BIT_KB, report_buf, 16);
|
||||||
|
wait_ms(10);
|
||||||
|
uart_send_report(CMD_RPT_BYTE_KB, report_buf, 8);
|
||||||
|
wait_ms(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(bitkb_report_buf, 0, sizeof(bitkb_report_buf));
|
||||||
|
memset(bytekb_report_buf, 0, sizeof(bytekb_report_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief switch device link mode.
|
||||||
|
* @param mode : link mode
|
||||||
|
*/
|
||||||
|
void switch_dev_link(uint8_t mode) {
|
||||||
|
if (mode > LINK_USB) return;
|
||||||
|
|
||||||
|
break_all_key();
|
||||||
|
|
||||||
|
dev_info.link_mode = mode;
|
||||||
|
|
||||||
|
dev_info.rf_state = RF_IDLE;
|
||||||
|
f_send_channel = 1;
|
||||||
|
|
||||||
|
if (mode == LINK_USB) {
|
||||||
|
host_mode = HOST_USB_TYPE;
|
||||||
|
host_set_driver(m_host_driver);
|
||||||
|
rf_link_show_time = 0;
|
||||||
|
} else {
|
||||||
|
host_mode = HOST_RF_TYPE;
|
||||||
|
|
||||||
|
host_set_driver(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief scan dial switch.
|
||||||
|
*/
|
||||||
|
void dial_sw_scan(void) {
|
||||||
|
uint8_t dial_scan = 0;
|
||||||
|
static uint8_t dial_save = 0xf0;
|
||||||
|
static uint8_t debounce = 0;
|
||||||
|
static uint32_t dial_scan_timer = 0;
|
||||||
|
static bool f_first = true;
|
||||||
|
|
||||||
|
if (!f_first) {
|
||||||
|
if (timer_elapsed32(dial_scan_timer) < 20) return;
|
||||||
|
}
|
||||||
|
dial_scan_timer = timer_read32();
|
||||||
|
|
||||||
|
setPinInputHigh(DEV_MODE_PIN);
|
||||||
|
setPinInputHigh(SYS_MODE_PIN);
|
||||||
|
|
||||||
|
if (readPin(DEV_MODE_PIN)) dial_scan |= 0X01;
|
||||||
|
if (readPin(SYS_MODE_PIN)) dial_scan |= 0X02;
|
||||||
|
|
||||||
|
if (dial_save != dial_scan) {
|
||||||
|
break_all_key();
|
||||||
|
|
||||||
|
no_act_time = 0;
|
||||||
|
rf_linking_time = 0;
|
||||||
|
|
||||||
|
dial_save = dial_scan;
|
||||||
|
debounce = 25;
|
||||||
|
f_dial_sw_init_ok = 0;
|
||||||
|
return;
|
||||||
|
} else if (debounce) {
|
||||||
|
debounce--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dial_scan & 0x01) {
|
||||||
|
if (dev_info.link_mode != LINK_USB) {
|
||||||
|
switch_dev_link(LINK_USB);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (dev_info.link_mode != dev_info.rf_channel) {
|
||||||
|
switch_dev_link(dev_info.rf_channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dial_scan & 0x02) {
|
||||||
|
if (dev_info.sys_sw_state != SYS_SW_MAC) {
|
||||||
|
f_sys_show = 1;
|
||||||
|
default_layer_set(1 << 0);
|
||||||
|
dev_info.sys_sw_state = SYS_SW_MAC;
|
||||||
|
keymap_config.nkro = 0;
|
||||||
|
break_all_key();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (dev_info.sys_sw_state != SYS_SW_WIN) {
|
||||||
|
f_sys_show = 1;
|
||||||
|
default_layer_set(1 << 2);
|
||||||
|
dev_info.sys_sw_state = SYS_SW_WIN;
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
break_all_key();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f_dial_sw_init_ok == 0) {
|
||||||
|
f_dial_sw_init_ok = 1;
|
||||||
|
f_first = false;
|
||||||
|
|
||||||
|
if (dev_info.link_mode != LINK_USB) {
|
||||||
|
host_set_driver(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief power on scan dial switch.
|
||||||
|
*/
|
||||||
|
void dial_sw_fast_scan(void) {
|
||||||
|
{
|
||||||
|
uint8_t dial_scan_dev = 0;
|
||||||
|
uint8_t dial_scan_sys = 0;
|
||||||
|
uint8_t dial_check_dev = 0;
|
||||||
|
uint8_t dial_check_sys = 0;
|
||||||
|
uint8_t debounce = 0;
|
||||||
|
|
||||||
|
setPinInputHigh(DEV_MODE_PIN);
|
||||||
|
setPinInputHigh(SYS_MODE_PIN);
|
||||||
|
|
||||||
|
// Debounce to get a stable state
|
||||||
|
for(debounce=0; debounce<10; debounce++) {
|
||||||
|
dial_scan_dev = 0;
|
||||||
|
dial_scan_sys = 0;
|
||||||
|
if (readPin(DEV_MODE_PIN)) dial_scan_dev = 0x01;
|
||||||
|
else dial_scan_dev = 0;
|
||||||
|
if (readPin(SYS_MODE_PIN)) dial_scan_sys = 0x01;
|
||||||
|
else dial_scan_sys = 0;
|
||||||
|
if((dial_scan_dev != dial_check_dev)||(dial_scan_sys != dial_check_sys))
|
||||||
|
{
|
||||||
|
dial_check_dev = dial_scan_dev;
|
||||||
|
dial_check_sys = dial_scan_sys;
|
||||||
|
debounce = 0;
|
||||||
|
}
|
||||||
|
wait_ms(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// RF link mode
|
||||||
|
if (dial_scan_dev) {
|
||||||
|
if (dev_info.link_mode != LINK_USB) {
|
||||||
|
switch_dev_link(LINK_USB);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (dev_info.link_mode != dev_info.rf_channel) {
|
||||||
|
switch_dev_link(dev_info.rf_channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Win or Mac
|
||||||
|
if (dial_scan_sys) {
|
||||||
|
if (dev_info.sys_sw_state != SYS_SW_MAC) {
|
||||||
|
default_layer_set(1 << 0);
|
||||||
|
dev_info.sys_sw_state = SYS_SW_MAC;
|
||||||
|
keymap_config.nkro = 0;
|
||||||
|
break_all_key();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (dev_info.sys_sw_state != SYS_SW_WIN) {
|
||||||
|
//f_sys_show = 1;
|
||||||
|
default_layer_set(1 << 2);
|
||||||
|
dev_info.sys_sw_state = SYS_SW_WIN;
|
||||||
|
keymap_config.nkro = 1;
|
||||||
|
break_all_key();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief timer process.
|
||||||
|
*/
|
||||||
|
void timer_pro(void) {
|
||||||
|
static uint32_t interval_timer = 0;
|
||||||
|
static bool f_first = true;
|
||||||
|
|
||||||
|
if (f_first) {
|
||||||
|
f_first = false;
|
||||||
|
interval_timer = timer_read32();
|
||||||
|
m_host_driver = host_get_driver();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timer_elapsed32(interval_timer) < 10)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
interval_timer = timer_read32();
|
||||||
|
|
||||||
|
if (rf_link_show_time < RF_LINK_SHOW_TIME) rf_link_show_time++;
|
||||||
|
|
||||||
|
if (no_act_time < 0xffff) no_act_time++;
|
||||||
|
|
||||||
|
if (rf_linking_time < 0xffff) rf_linking_time++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief londing eeprom data.
|
||||||
|
*/
|
||||||
|
void londing_eeprom_data(void) {
|
||||||
|
eeconfig_read_user_datablock(&user_config);
|
||||||
|
if (user_config.default_brightness_flag != 0xA5) {
|
||||||
|
/* first power on, set rgb matrix brightness at middle level*/
|
||||||
|
rgb_matrix_sethsv(255, 255, RGB_MATRIX_MAXIMUM_BRIGHTNESS - RGB_MATRIX_VAL_STEP * 2);
|
||||||
|
user_config.default_brightness_flag = 0xA5;
|
||||||
|
user_config.ee_side_mode = side_mode;
|
||||||
|
user_config.ee_side_light = side_light;
|
||||||
|
user_config.ee_side_speed = side_speed;
|
||||||
|
user_config.ee_side_rgb = side_rgb;
|
||||||
|
user_config.ee_side_colour = side_colour;
|
||||||
|
user_config.sleep_enable = true;
|
||||||
|
eeconfig_update_user_datablock(&user_config);
|
||||||
|
} else {
|
||||||
|
side_mode = user_config.ee_side_mode;
|
||||||
|
side_light = user_config.ee_side_light;
|
||||||
|
side_speed = user_config.ee_side_speed;
|
||||||
|
side_rgb = user_config.ee_side_rgb;
|
||||||
|
side_colour = user_config.ee_side_colour;
|
||||||
|
}
|
||||||
|
}
|
167
keyboards/nuphy/air75_v2/ansi/user_kb.h
Normal file
167
keyboards/nuphy/air75_v2/ansi/user_kb.h
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2023 @ Nuphy <https://nuphy.com/>
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RX_Idle,
|
||||||
|
RX_Receiving,
|
||||||
|
RX_Done,
|
||||||
|
RX_Fail,
|
||||||
|
RX_OV_ERR,
|
||||||
|
RX_SUM_ERR,
|
||||||
|
RX_CMD_ERR,
|
||||||
|
RX_DATA_ERR,
|
||||||
|
RX_DATA_OV,
|
||||||
|
RX_FORMAT_ERR,
|
||||||
|
|
||||||
|
TX_OK = 0XE0,
|
||||||
|
TX_DONE,
|
||||||
|
TX_BUSY,
|
||||||
|
TX_TIMEOUT,
|
||||||
|
TX_DATA_ERR,
|
||||||
|
|
||||||
|
} TYPE_RX_STATE;
|
||||||
|
|
||||||
|
|
||||||
|
#define RF_IDLE 0
|
||||||
|
#define RF_PAIRING 1
|
||||||
|
#define RF_LINKING 2
|
||||||
|
#define RF_CONNECT 3
|
||||||
|
#define RF_DISCONNECT 4
|
||||||
|
#define RF_SLEEP 5
|
||||||
|
#define RF_SNIF 6
|
||||||
|
#define RF_INVAILD 0XFE
|
||||||
|
#define RF_ERR_STATE 0XFF
|
||||||
|
|
||||||
|
#define CMD_POWER_UP 0XF0
|
||||||
|
#define CMD_SLEEP 0XF1
|
||||||
|
#define CMD_HAND 0XF2
|
||||||
|
#define CMD_SNIF 0XF3
|
||||||
|
#define CMD_24G_SUSPEND 0XF4
|
||||||
|
#define CMD_IDLE_EXIT 0XFE
|
||||||
|
|
||||||
|
#define CMD_RPT_MS 0XE0
|
||||||
|
#define CMD_RPT_BYTE_KB 0XE1
|
||||||
|
#define CMD_RPT_BIT_KB 0XE2
|
||||||
|
#define CMD_RPT_CONSUME 0XE3
|
||||||
|
#define CMD_RPT_SYS 0XE4
|
||||||
|
|
||||||
|
#define CMD_SET_LINK 0XC0
|
||||||
|
#define CMD_SET_CONFIG 0XC1
|
||||||
|
#define CMD_GET_CONFIG 0XC2
|
||||||
|
#define CMD_SET_NAME 0XC3
|
||||||
|
#define CMD_GET_NAME 0XC4
|
||||||
|
#define CMD_CLR_DEVICE 0XC5
|
||||||
|
#define CMD_NEW_ADV 0XC7
|
||||||
|
#define CMD_RF_STS_SYSC 0XC9
|
||||||
|
#define CMD_SET_24G_NAME 0XCA
|
||||||
|
#define CMD_GO_TEST 0XCF
|
||||||
|
#define CMD_RF_DFU 0XB1
|
||||||
|
|
||||||
|
#define CMD_WRITE_DATA 0X80
|
||||||
|
#define CMD_READ_DATA 0X81
|
||||||
|
|
||||||
|
#define LINK_RF_24 0
|
||||||
|
#define LINK_BT_1 1
|
||||||
|
#define LINK_BT_2 2
|
||||||
|
#define LINK_BT_3 3
|
||||||
|
#define LINK_USB 4
|
||||||
|
|
||||||
|
#define UART_HEAD 0x5A
|
||||||
|
#define FUNC_VALID_LEN 32
|
||||||
|
#define UART_MAX_LEN 64
|
||||||
|
|
||||||
|
#define SYS_SW_WIN 0xa1
|
||||||
|
#define SYS_SW_MAC 0xa2
|
||||||
|
|
||||||
|
#define RF_LINK_SHOW_TIME 300
|
||||||
|
|
||||||
|
#define HOST_USB_TYPE 0
|
||||||
|
#define HOST_BLE_TYPE 1
|
||||||
|
#define HOST_RF_TYPE 2
|
||||||
|
|
||||||
|
#define LINK_TIMEOUT (100 * 120)
|
||||||
|
#define SLEEP_TIME_DELAY (100 * 360)
|
||||||
|
#define POWER_DOWN_DELAY (24)
|
||||||
|
|
||||||
|
#define RF_LONG_PRESS_DELAY 30
|
||||||
|
#define DEV_RESET_PRESS_DELAY 30
|
||||||
|
#define RGB_TEST_PRESS_DELAY 30
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t RXDState;
|
||||||
|
uint8_t RXDLen;
|
||||||
|
uint8_t RXDOverTime;
|
||||||
|
uint8_t TXDLenBack;
|
||||||
|
uint8_t TXDOffset;
|
||||||
|
uint8_t TXDBuf[UART_MAX_LEN];
|
||||||
|
uint8_t RXDBuf[UART_MAX_LEN];
|
||||||
|
} USART_MGR_STRUCT;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t link_mode;
|
||||||
|
uint8_t rf_channel;
|
||||||
|
uint8_t ble_channel;
|
||||||
|
uint8_t rf_state;
|
||||||
|
uint8_t rf_charge;
|
||||||
|
uint8_t rf_led;
|
||||||
|
uint8_t rf_baterry;
|
||||||
|
uint8_t sys_sw_state;
|
||||||
|
} DEV_INFO_STRUCT;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t default_brightness_flag;
|
||||||
|
uint8_t ee_side_mode;
|
||||||
|
uint8_t ee_side_light;
|
||||||
|
uint8_t ee_side_speed;
|
||||||
|
uint8_t ee_side_rgb;
|
||||||
|
uint8_t ee_side_colour;
|
||||||
|
uint8_t sleep_enable;
|
||||||
|
uint8_t retain1;
|
||||||
|
uint8_t retain2;
|
||||||
|
} user_config_t;
|
||||||
|
|
||||||
|
void dev_sts_sync(void);
|
||||||
|
void rf_uart_init(void);
|
||||||
|
void rf_device_init(void);
|
||||||
|
void uart_send_report_func(void);
|
||||||
|
void uart_receive_pro(void);
|
||||||
|
void uart_send_report(uint8_t report_type, uint8_t *report_buf, uint8_t report_size);
|
||||||
|
void side_speed_contol(uint8_t dir);
|
||||||
|
void side_light_contol(uint8_t dir);
|
||||||
|
void side_colour_control(uint8_t dir);
|
||||||
|
void side_mode_control(uint8_t dir);
|
||||||
|
void side_led_show(void);
|
||||||
|
void sleep_handle(void);
|
||||||
|
void bat_led_close(void);
|
||||||
|
void num_led_show(void);
|
||||||
|
void rgb_test_show(void);
|
||||||
|
void gpio_init(void);
|
||||||
|
void long_press_key(void);
|
||||||
|
void break_all_key(void);
|
||||||
|
void switch_dev_link(uint8_t mode);
|
||||||
|
void dial_sw_scan(void);
|
||||||
|
void dial_sw_fast_scan(void);
|
||||||
|
void timer_pro(void);
|
||||||
|
void londing_eeprom_data(void);
|
||||||
|
uint8_t uart_send_cmd(uint8_t cmd, uint8_t ack_cnt, uint8_t delayms);
|
Loading…
Reference in New Issue
Block a user