qmk_firmware/keyboards/nuphy/air75_v2/ansi/side.c

877 lines
23 KiB
C
Raw Normal View History

2023-12-25 14:16:06 +00:00
/*
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/>.
*/
2023-12-27 17:03:37 +00:00
#include "user_kb.h"
2023-12-25 14:16:06 +00:00
#include "ansi.h"
#include "side_table.h"
2023-12-27 17:03:37 +00:00
#include "ws2812.h"
2023-12-25 14:16:06 +00:00
#define SIDE_BRIGHT_MAX 4
#define SIDE_SPEED_MAX 4
#define SIDE_COLOUR_MAX 8
#define SIDE_LINE 6
#define SIDE_LED_NUM 12
#define RF_LED_LINK_PERIOD 500
#define RF_LED_PAIR_PERIOD 250
/* side rgb mode */
enum {
SIDE_WAVE = 0,
SIDE_MIX,
SIDE_STATIC,
SIDE_BREATH,
SIDE_OFF,
};
uint8_t side_mode = 0;
uint8_t side_light = 3;
uint8_t side_speed = 2;
uint8_t side_rgb = 1;
uint8_t side_colour = 0;
uint8_t side_play_point = 0;
uint8_t side_play_cnt = 0;
uint32_t side_play_timer = 0;
uint8_t r_temp, g_temp, b_temp;
rgb_led_t side_leds[SIDE_LED_NUM] = {0};
const uint8_t side_speed_table[5][5] = {
[SIDE_WAVE] = {10, 14, 20, 28, 38}, //
[SIDE_MIX] = {10, 14, 20, 28, 38}, //
[SIDE_STATIC] = {50, 50, 50, 50, 50}, //
[SIDE_BREATH] = {10, 14, 20, 28, 38}, //
[SIDE_OFF] = {50, 50, 50, 50, 50}, //
};
const uint8_t side_light_table[6] = {
0, //
22, //
34, //
55, //
79, //
106, //
};
const uint8_t side_led_index_tab[SIDE_LINE][2] = {
{5, 6}, //
{4, 7}, //
{3, 8}, //
{2, 9}, //
{1, 10}, //
{0, 11}, //
};
extern DEV_INFO_STRUCT dev_info;
extern user_config_t user_config;
extern uint8_t rf_blink_cnt;
extern uint16_t rf_link_show_time;
extern bool f_bat_hold;
extern bool f_sys_show;
extern bool f_sleep_show;
void side_ws2812_setleds(rgb_led_t *ledarray, uint16_t leds);
void rgb_matrix_update_pwm_buffers(void);
/**
* @brief side leds set color vaule.
* @param index: index of side_leds[].
* @param ...
*/
void side_rgb_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
side_leds[index].r = red;
side_leds[index].g = green;
side_leds[index].b = blue;
}
/**
* @brief refresh side leds.
*/
void side_rgb_refresh(void) {
side_ws2812_setleds(side_leds, SIDE_LED_NUM);
}
/**
* @brief Adjusting the brightness of side lights.
* @param dir: 0 - decrease, 1 - increase.
* @note save to eeprom.
*/
void side_light_contol(uint8_t dir) {
if (dir) {
if (side_light > SIDE_BRIGHT_MAX) {
return;
} else
side_light++;
} else {
if (side_light == 0) {
return;
} else
side_light--;
}
user_config.ee_side_light = side_light;
eeconfig_update_user_datablock(&user_config);
}
/**
* @brief Adjusting the speed of side lights.
* @param dir: 0 - decrease, 1 - increase.
* @note save to eeprom.
*/
void side_speed_contol(uint8_t dir) {
if ((side_speed) > SIDE_SPEED_MAX) (side_speed) = SIDE_SPEED_MAX / 2;
if (dir) {
if ((side_speed)) side_speed--;
} else {
if ((side_speed) < SIDE_SPEED_MAX) side_speed++;
}
user_config.ee_side_speed = side_speed;
eeconfig_update_user_datablock(&user_config);
}
/**
* @brief Switch to the next color of side lights.
* @param dir: 0 - prev, 1 - next.
* @note save to eeprom.
*/
void side_colour_control(uint8_t dir) {
if (side_mode != SIDE_WAVE) {
if (side_rgb) {
side_rgb = 0;
side_colour = 0;
}
}
if (dir) {
if (side_rgb) {
side_rgb = 0;
side_colour = 0;
} else {
side_colour++;
if (side_colour >= SIDE_COLOUR_MAX) {
side_rgb = 1;
side_colour = 0;
}
}
} else {
if (side_rgb) {
side_rgb = 0;
side_colour = SIDE_COLOUR_MAX - 1;
} else {
side_colour--;
if (side_colour >= SIDE_COLOUR_MAX) {
side_rgb = 1;
side_colour = 0;
}
}
}
user_config.ee_side_rgb = side_rgb;
user_config.ee_side_colour = side_colour;
eeconfig_update_user_datablock(&user_config);
}
/**
* @brief Change the color mode of side lights.
* @param dir: 0 - prev, 1 - next.
* @note save to eeprom.
*/
void side_mode_control(uint8_t dir) {
if (dir) {
side_mode++;
if (side_mode > SIDE_OFF) {
side_mode = 0;
}
} else {
if (side_mode > 0) {
side_mode--;
} else {
side_mode = SIDE_OFF;
}
}
side_play_point = 0;
user_config.ee_side_mode = side_mode;
eeconfig_update_user_datablock(&user_config);
}
/**
* @brief set left side leds.
* @param ...
*/
void set_left_rgb(uint8_t r, uint8_t g, uint8_t b) {
for (int i = 0; i < 6; i++)
side_rgb_set_color(i, r >> 2, g >> 2, b >> 2);
}
/**
* @brief set right side leds.
* @param ...
*/
void set_right_rgb(uint8_t r, uint8_t g, uint8_t b) {
for (int i = 6; i < 12; i++)
side_rgb_set_color(i, r >> 2, g >> 2, b >> 2);
}
/**
* @brief set left side leds.
*/
void sys_sw_led_show(void) {
static uint32_t sys_show_timer = 0;
static bool sys_show_flag = false;
if (f_sys_show) {
f_sys_show = false;
sys_show_timer = timer_read32();
sys_show_flag = true;
}
if (sys_show_flag) {
if (dev_info.sys_sw_state == SYS_SW_MAC) {
r_temp = 0x80;
g_temp = 0x80;
b_temp = 0x80;
} else {
r_temp = 0x00;
g_temp = 0x00;
b_temp = 0x80;
}
if ((timer_elapsed32(sys_show_timer) / 500) % 2 == 0) {
set_right_rgb(r_temp, g_temp, b_temp);
} else {
set_right_rgb(0x00, 0x00, 0x00);
}
if (timer_elapsed32(sys_show_timer) >= 3000) {
sys_show_flag = false;
}
}
}
/**
* @brief sleep_sw_led_show.
*/
void sleep_sw_led_show(void) {
static uint32_t sleep_show_timer = 0;
static bool sleep_show_flag = false;
if (f_sleep_show) {
f_sleep_show = false;
sleep_show_timer = timer_read32();
sleep_show_flag = true;
}
if (sleep_show_flag) {
if (user_config.sleep_enable) {
r_temp = 0x00;
g_temp = 0x80;
b_temp = 0x00;
} else {
r_temp = 0x80;
g_temp = 0x00;
b_temp = 0x00;
}
if ((timer_elapsed32(sleep_show_timer) / 500) % 2 == 0) {
set_right_rgb(r_temp, g_temp, b_temp);
} else {
set_right_rgb(0x00, 0x00, 0x00);
}
if (timer_elapsed32(sleep_show_timer) >= 3000) {
sleep_show_flag = false;
}
}
}
/**
* @brief sys_led_show.
*/
void sys_led_show(void) {
if (dev_info.link_mode == LINK_USB) {
if (host_keyboard_led_state().caps_lock) {
set_left_rgb(0X00, 0x80, 0x80);
}
}
else {
if (dev_info.rf_led & 0x02) {
set_left_rgb(0X00, 0x80, 0x80);
}
}
}
/**
* @brief light_point_playing.
* @param trend:
* @param step:
* @param len:
* @param point:
*/
static void light_point_playing(uint8_t trend, uint8_t step, uint8_t len, uint8_t *point) {
if (trend) {
*point += step;
if (*point >= len) *point -= len;
} else {
*point -= step;
if (*point >= len) *point = len - (255 - *point) - 1;
}
}
/**
* @brief count_rgb_light.
* @param light_temp:
*/
static void count_rgb_light(uint8_t light_temp) {
uint16_t temp;
temp = (light_temp)*r_temp + r_temp;
r_temp = temp >> 8;
temp = (light_temp)*g_temp + g_temp;
g_temp = temp >> 8;
temp = (light_temp)*b_temp + b_temp;
b_temp = temp >> 8;
}
/**
* @brief side_wave_mode_show.
*/
static void side_wave_mode_show(void) {
uint8_t play_index;
if (side_play_cnt <= side_speed_table[side_mode][side_speed])
return;
else
side_play_cnt -= side_speed_table[side_mode][side_speed];
if (side_play_cnt > 20) side_play_cnt = 0;
if (side_rgb)
light_point_playing(0, 3, FLOW_COLOUR_TAB_LEN, &side_play_point);
else
light_point_playing(0, 2, WAVE_TAB_LEN, &side_play_point);
play_index = side_play_point;
for (int i = 0; i < SIDE_LINE; i++) {
if (side_rgb) {
r_temp = flow_rainbow_colour_tab[play_index][0];
g_temp = flow_rainbow_colour_tab[play_index][1];
b_temp = flow_rainbow_colour_tab[play_index][2];
light_point_playing(1, 24, FLOW_COLOUR_TAB_LEN, &play_index);
} else {
r_temp = colour_lib[side_colour][0];
g_temp = colour_lib[side_colour][1];
b_temp = colour_lib[side_colour][2];
light_point_playing(1, 12, WAVE_TAB_LEN, &play_index);
count_rgb_light(wave_data_tab[play_index]);
}
count_rgb_light(side_light_table[side_light]);
for (int j = 0; j < 2; j++) {
side_rgb_set_color(side_led_index_tab[i][j], r_temp >> 2, g_temp >> 2, b_temp >> 2);
}
}
}
/**
* @brief side_spectrum_mode_show.
*/
static void side_spectrum_mode_show(void) {
if (side_play_cnt <= side_speed_table[side_mode][side_speed])
return;
else
side_play_cnt -= side_speed_table[side_mode][side_speed];
if (side_play_cnt > 20) side_play_cnt = 0;
light_point_playing(1, 1, FLOW_COLOUR_TAB_LEN, &side_play_point);
r_temp = flow_rainbow_colour_tab[side_play_point][0];
g_temp = flow_rainbow_colour_tab[side_play_point][1];
b_temp = flow_rainbow_colour_tab[side_play_point][2];
count_rgb_light(side_light_table[side_light]);
for (int i = 0; i < SIDE_LINE; i++) {
for (int j = 0; j < 2; j++) {
side_rgb_set_color(side_led_index_tab[i][j], r_temp >> 2, g_temp >> 2, b_temp >> 2);
}
}
}
/**
* @brief side_breathe_mode_show.
*/
static void side_breathe_mode_show(void) {
static uint8_t play_point = 0;
if (side_play_cnt <= side_speed_table[side_mode][side_speed])
return;
else
side_play_cnt -= side_speed_table[side_mode][side_speed];
if (side_play_cnt > 20) side_play_cnt = 0;
light_point_playing(0, 1, BREATHE_TAB_LEN, &play_point);
if (0) {
if (play_point == 0) {
if (++side_play_point >= SIDE_COLOUR_MAX) side_play_point = 0;
}
r_temp = colour_lib[side_play_point][0];
g_temp = colour_lib[side_play_point][1];
b_temp = colour_lib[side_play_point][2];
} else {
r_temp = colour_lib[side_colour][0];
g_temp = colour_lib[side_colour][1];
b_temp = colour_lib[side_colour][2];
}
count_rgb_light(breathe_data_tab[play_point]);
count_rgb_light(side_light_table[side_light]);
for (int i = 0; i < SIDE_LINE; i++) {
for (int j = 0; j < 2; j++) {
side_rgb_set_color(side_led_index_tab[i][j], r_temp >> 2, g_temp >> 2, b_temp >> 2);
}
}
}
/**
* @brief side_static_mode_show.
*/
static void side_static_mode_show(void) {
uint8_t play_index;
if (side_play_cnt <= side_speed_table[side_mode][side_speed])
return;
else
side_play_cnt -= side_speed_table[side_mode][side_speed];
if (side_play_cnt > 20) side_play_cnt = 0;
if (side_play_point >= SIDE_COLOUR_MAX) side_play_point = 0;
for (int i = 0; i < SIDE_LINE; i++) {
if (0) {
r_temp = flow_rainbow_colour_tab[16 * i][0];
g_temp = flow_rainbow_colour_tab[16 * i][1];
b_temp = flow_rainbow_colour_tab[16 * i][2];
light_point_playing(0, 24, FLOW_COLOUR_TAB_LEN, &play_index);
} else {
r_temp = colour_lib[side_colour][0];
g_temp = colour_lib[side_colour][1];
b_temp = colour_lib[side_colour][2];
}
count_rgb_light(side_light_table[side_light]);
for (int j = 0; j < 2; j++) {
side_rgb_set_color(side_led_index_tab[i][j], r_temp >> 2, g_temp >> 2, b_temp >> 2);
}
}
}
/**
* @brief side_off_mode_show.
*/
static void side_off_mode_show(void) {
if (side_play_cnt <= side_speed_table[side_mode][side_speed])
return;
else
side_play_cnt -= side_speed_table[side_mode][side_speed];
if (side_play_cnt > 20) side_play_cnt = 0;
r_temp = 0x00;
g_temp = 0x00;
b_temp = 0x00;
for (int i = 0; i < SIDE_LINE; i++) {
for (int j = 0; j < 2; j++) {
side_rgb_set_color(side_led_index_tab[i][j], r_temp >> 2, g_temp >> 2, b_temp >> 2);
}
}
}
/**
* @brief rf_led_show.
*/
void rf_led_show(void) {
static uint32_t rf_blink_timer = 0;
uint16_t rf_blink_priod = 0;
if (rf_blink_cnt || (rf_link_show_time < RF_LINK_SHOW_TIME)) {
if (dev_info.link_mode == LINK_RF_24) {
r_temp = 0x00;
g_temp = 0x80;
b_temp = 0x00;
} else if (dev_info.link_mode == LINK_USB) {
r_temp = 0x80;
g_temp = 0x80;
b_temp = 0x00;
} else {
r_temp = 0x00;
g_temp = 0x00;
b_temp = 0x80;
}
} else {
rf_blink_timer = timer_read32();
return;
}
if (rf_blink_cnt) {
if (dev_info.rf_state == RF_PAIRING)
rf_blink_priod = RF_LED_PAIR_PERIOD;
else
rf_blink_priod = RF_LED_LINK_PERIOD;
if (timer_elapsed32(rf_blink_timer) > (rf_blink_priod >> 1)) {
r_temp = 0x00;
g_temp = 0x00;
b_temp = 0x00;
}
if (timer_elapsed32(rf_blink_timer) >= rf_blink_priod) {
rf_blink_cnt--;
rf_blink_timer = timer_read32();
}
}
set_left_rgb(r_temp, g_temp, b_temp);
}
/**
* @brief bat_num_led.
*/
void bat_num_led(uint8_t bat_percent)
{
uint8_t r, g, b;
// set color
if (bat_percent <= 15) {
r = 0xff; g = 0x00; b = 0x00;
}
else if (bat_percent <= 50) {
r = 0xff; g = 0x40; b = 0x00;
}
else if (bat_percent <= 80) {
r = 0xff; g = 0xff; b = 0x00;
}
else {
r = 0x00; g = 0xff; b = 0x00;
}
// set percent
if (bat_percent >= 1) rgb_matrix_set_color(29, r, g, b);
if (bat_percent > 10) rgb_matrix_set_color(28, r, g, b);
if (bat_percent > 20) rgb_matrix_set_color(27, r, g, b);
if (bat_percent > 30) rgb_matrix_set_color(26, r, g, b);
if (bat_percent > 40) rgb_matrix_set_color(25, r, g, b);
if (bat_percent > 50) rgb_matrix_set_color(24, r, g, b);
if (bat_percent > 60) rgb_matrix_set_color(23, r, g, b);
if (bat_percent > 70) rgb_matrix_set_color(22, r, g, b);
if (bat_percent > 80) rgb_matrix_set_color(21, r, g, b);
if (bat_percent > 90) rgb_matrix_set_color(20, r, g, b);
}
void num_led_show(void)
{
static uint8_t num_bat_temp = 0;
num_bat_temp = dev_info.rf_baterry;
bat_num_led(num_bat_temp);
}
void bat_led_close(void)
{
for(int i=20; i<=29; i++) {
rgb_matrix_set_color(i,0,0,0);
}
}
/**
* @brief bat_percent_led.
*/
void bat_percent_led(uint8_t bat_percent) {
uint8_t bat_end_led = 0;
uint8_t bat_r, bat_g, bat_b;
if (bat_percent <= 15) {
bat_end_led = 0;
bat_r = 0x80, bat_g = 0, bat_b = 0;
} else if (bat_percent <= 20) {
bat_end_led = 1;
bat_r = 0x80, bat_g = 0x40, bat_b = 0;
} else if (bat_percent <= 40) {
bat_end_led = 2;
bat_r = 0x80, bat_g = 0x40, bat_b = 0;
} else if (bat_percent <= 60) {
bat_end_led = 3;
bat_r = 0x80, bat_g = 0x40, bat_b = 0;
} else if (bat_percent <= 80) {
bat_end_led = 4;
bat_r = 0x80, bat_g = 0x40, bat_b = 0;
} else if (bat_percent <= 95) {
bat_end_led = 5;
bat_r = 0x80, bat_g = 0x40, bat_b = 0;
} else {
bat_end_led = 5;
bat_r = 0, bat_g = 0x80, bat_b = 0;
}
uint8_t i = 0;
for (; i <= bat_end_led; i++)
side_rgb_set_color(11 - i, bat_r >> 2, bat_g >> 2, bat_b >> 2);
for (; i < 6; i++)
side_rgb_set_color(11 - i, 0, 0, 0);
}
/**
* @brief bat_led_show.
*/
void bat_led_show(void) {
static bool bat_show_flag = 1;
static bool bat_show_breath = 0;
static bool f_init = 1;
static uint8_t play_point = 0;
static uint32_t bat_play_timer = 0;
static uint32_t bat_show_time = 0;
static uint32_t bat_sts_debounce = 0;
static uint32_t bat_per_debounce = 0;
static uint8_t charge_state = 0;
static uint8_t bat_percent = 0;
if (f_init) {
f_init = 0;
bat_show_time = timer_read32();
charge_state = dev_info.rf_charge;
bat_percent = dev_info.rf_baterry;
}
if (charge_state != dev_info.rf_charge) {
if (timer_elapsed32(bat_sts_debounce) > 1000) {
if (((charge_state & 0x01) == 0) && ((dev_info.rf_charge & 0x01) != 0)) {
bat_show_flag = true;
bat_show_breath = true;
bat_show_time = timer_read32();
}
charge_state = dev_info.rf_charge;
}
} else {
bat_sts_debounce = timer_read32();
if (timer_elapsed32(bat_show_time) > 5000) {
bat_show_flag = false;
bat_show_breath = false;
}
if (charge_state == 0x03) {
bat_show_breath = true;
} else if (charge_state & 0x01) {
dev_info.rf_baterry = 100;
}
}
if (bat_percent != dev_info.rf_baterry) {
if (timer_elapsed32(bat_per_debounce) > 1000) {
bat_percent = dev_info.rf_baterry;
}
} else {
bat_per_debounce = timer_read32();
if (bat_percent < 15) {
bat_show_flag = true;
bat_show_time = timer_read32();
}
}
if (f_bat_hold || bat_show_flag) {
if (bat_show_breath) {
if (timer_elapsed32(bat_play_timer) > 10) {
bat_play_timer = timer_read32();
light_point_playing(0, 1, BREATHE_TAB_LEN, &play_point);
}
r_temp = 0x80;
g_temp = 0x40;
b_temp = 0x00;
count_rgb_light(breathe_data_tab[play_point]);
set_right_rgb(r_temp, g_temp, b_temp);
} else {
bat_percent_led(bat_percent);
}
}
}
/**
* @brief device_reset_show.
*/
void device_reset_show(void) {
writePinHigh(DC_BOOST_PIN);
setPinOutput(DRIVER_SIDE_CS_PIN);
setPinOutput(DRIVER_LED_CS_PIN);
writePinLow(DRIVER_SIDE_CS_PIN);
writePinLow(DRIVER_LED_CS_PIN);
for (int blink_cnt = 0; blink_cnt < 3; blink_cnt++) {
rgb_matrix_set_color_all(0x10, 0x10, 0x10);
set_left_rgb(0x40, 0x40, 0x40);
set_right_rgb(0x40, 0x40, 0x40);
rgb_matrix_update_pwm_buffers();
side_rgb_refresh();
wait_ms(200);
rgb_matrix_set_color_all(0x00, 0x00, 0x00);
set_left_rgb(0x00, 0x00, 0x00);
set_right_rgb(0x00, 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
side_rgb_refresh();
wait_ms(200);
}
}
/**
* @brief device_reset_init.
*/
void device_reset_init(void) {
side_mode = 0;
side_light = 3;
side_speed = 2;
side_rgb = 1;
side_colour = 0;
side_play_point = 0;
side_play_cnt = 0;
side_play_timer = timer_read32();
f_bat_hold = false;
rgb_matrix_enable();
2023-12-27 17:03:37 +00:00
rgb_matrix_mode(RGB_MATRIX_CYCLE_LEFT_RIGHT);
2023-12-25 14:16:06 +00:00
rgb_matrix_set_speed(255 - RGB_MATRIX_SPD_STEP * 2);
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);
}
/**
* RGB test
*/
void rgb_test_show(void)
{
// open power control
writePinHigh(DC_BOOST_PIN);
setPinOutput(DRIVER_LED_CS_PIN);
writePinLow(DRIVER_LED_CS_PIN);
setPinOutput(DRIVER_SIDE_CS_PIN);
writePinLow(DRIVER_SIDE_CS_PIN);
// set test color
rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0xff, 0x00, 0x00);
set_right_rgb(0xff, 0x00, 0x00);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x00, 0xFF, 0x00);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x00, 0xFF, 0x00);
set_right_rgb(0x00, 0xFF, 0x00);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x00, 0x00, 0xFF);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x00, 0x00, 0xFF);
set_right_rgb(0x00, 0x00, 0xFF);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x80, 0x80, 0x80);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x80, 0x80, 0x80);
set_right_rgb(0x80, 0x80, 0x80);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x80, 0x80, 0x00);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x80, 0x80, 0x00);
set_right_rgb(0x80, 0x80, 0x00);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x80, 0x00, 0x80);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x80, 0x00, 0x80);
set_right_rgb(0x80, 0x00, 0x80);
side_rgb_refresh();
wait_ms(500);
rgb_matrix_set_color_all(0x00, 0x80, 0x80);
rgb_matrix_update_pwm_buffers();
set_left_rgb(0x00, 0x80, 0x80);
set_right_rgb(0x00, 0x80, 0x80);
side_rgb_refresh();
wait_ms(500);
}
/**
* @brief side_led_show.
*/
void side_led_show(void) {
static uint32_t side_refresh_time = 0;
side_play_cnt += timer_elapsed32(side_play_timer);
side_play_timer = timer_read32();
switch (side_mode) {
case SIDE_WAVE:
side_wave_mode_show();
break;
case SIDE_MIX:
side_spectrum_mode_show();
break;
case SIDE_BREATH:
side_breathe_mode_show();
break;
case SIDE_STATIC:
side_static_mode_show();
break;
case SIDE_OFF:
side_off_mode_show();
break;
}
bat_led_show();
sleep_sw_led_show();
sys_sw_led_show();
sys_led_show();
rf_led_show();
if (timer_elapsed32(side_refresh_time) > 30) {
side_refresh_time = timer_read32();
side_rgb_refresh();
}
}