mirror of
https://github.com/whowechina/iidx_pico.git
synced 2025-02-20 04:21:01 +01:00
Live view in tt theme setting
This commit is contained in:
parent
2dcff302be
commit
a7539dae9f
Binary file not shown.
@ -103,13 +103,24 @@ static void core0_loop()
|
||||
|
||||
uint16_t buttons = button_read();
|
||||
uint16_t angle = turntable_raw() >> 4;
|
||||
if (setup_run(buttons, angle)) {
|
||||
rgb_force_display(setup_led_button, setup_led_tt);
|
||||
setup_run(buttons, angle);
|
||||
|
||||
bool ov_tt = setup_needs_tt_led();
|
||||
bool ov_btn = setup_needs_button_led();
|
||||
|
||||
if (ov_tt) {
|
||||
rgb_override_tt(setup_led_tt);
|
||||
}
|
||||
if (ov_btn) {
|
||||
rgb_override_button(setup_led_button);
|
||||
} else {
|
||||
hid_report.buttons = buttons;
|
||||
rgb_set_button_light(buttons);
|
||||
}
|
||||
|
||||
if (!ov_tt && !ov_btn) {
|
||||
save_loop();
|
||||
}
|
||||
|
||||
report_usb_hid();
|
||||
cli_fps_count(0);
|
||||
|
||||
@ -124,10 +135,11 @@ void init()
|
||||
tusb_init();
|
||||
|
||||
button_init();
|
||||
turntable_init();
|
||||
|
||||
rgb_init();
|
||||
tt_rainbow_init();
|
||||
tt_blade_init();
|
||||
rgb_init();
|
||||
turntable_init();
|
||||
|
||||
boot_check();
|
||||
stdio_init_all();
|
||||
|
@ -25,9 +25,10 @@
|
||||
|
||||
static const uint8_t button_rgb_map[BUTTON_RGB_NUM] = BUTTON_RGB_MAP;
|
||||
|
||||
static void trap() {}
|
||||
static tt_effect_t effects[10] = { {trap, trap, trap, 0} };
|
||||
static tt_effect_t effects[7] = { };
|
||||
static size_t effect_num = 0;
|
||||
#define EFFECT_MAX count_of(effects)
|
||||
|
||||
static unsigned current_effect = 0;
|
||||
|
||||
#define _MAP_LED(x) _MAKE_MAPPER(x)
|
||||
@ -93,17 +94,33 @@ uint32_t tt_led_angle = 0;
|
||||
|
||||
static uint32_t button_led_buf[BUTTON_RGB_NUM] = {0};
|
||||
|
||||
void set_effect(uint32_t index)
|
||||
static void fn_nop() {};
|
||||
static void fn_tt_led_off()
|
||||
{
|
||||
if (index < effect_num) {
|
||||
current_effect = index;
|
||||
effects[current_effect].init(effects[current_effect].context);
|
||||
} else {
|
||||
current_effect = effect_num;
|
||||
memset(tt_led_buf, 0, sizeof(tt_led_buf));
|
||||
}
|
||||
|
||||
static void effect_reset()
|
||||
{
|
||||
for (int i = 0; i < EFFECT_MAX; i++) {
|
||||
effects[i].init = fn_nop;
|
||||
effects[i].set_angle = fn_nop;
|
||||
effects[i].update = fn_tt_led_off;
|
||||
effects[i].context = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void drive_led()
|
||||
static void set_effect(uint32_t index)
|
||||
{
|
||||
if (index < EFFECT_MAX) {
|
||||
if (current_effect != index) {
|
||||
current_effect = index;
|
||||
effects[current_effect].init(effects[current_effect].context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void drive_led()
|
||||
{
|
||||
for (int i = 0; i < ARRAY_SIZE(button_led_buf); i++) {
|
||||
pio_sm_put_blocking(pio0, 0, button_led_buf[i] << 8);
|
||||
@ -185,18 +202,6 @@ uint32_t tt_hsv(hsv_t hsv)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void button_lights_update()
|
||||
{
|
||||
for (int i = 0; i < BUTTON_RGB_NUM; i++) {
|
||||
int led = button_rgb_map[i];
|
||||
if (hid_lights[i] > 0) {
|
||||
button_led_buf[led] = button_hsv(iidx_cfg->key_on[i]);
|
||||
} else {
|
||||
button_led_buf[led] = button_hsv(iidx_cfg->key_off[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rgb_set_angle(uint32_t angle)
|
||||
{
|
||||
tt_led_angle = angle;
|
||||
@ -231,9 +236,22 @@ void rgb_set_hid_light(uint8_t const *lights, uint8_t num)
|
||||
}
|
||||
}
|
||||
|
||||
#define OVERRIDE_EXPIRE 100000ULL
|
||||
static uint64_t override_tt_expire_time = 0;
|
||||
static uint64_t override_button_expire_time = 0;
|
||||
uint32_t *override_tt_buf = NULL;
|
||||
uint32_t *override_button_buf = NULL;
|
||||
|
||||
static void tt_lights_update()
|
||||
{
|
||||
if (time_us_64() < hid_light_tt_expire) {
|
||||
uint64_t now = time_us_64();
|
||||
|
||||
if (now < override_tt_expire_time) {
|
||||
memcpy(tt_led_buf, override_tt_buf, TT_LED_NUM * sizeof(uint32_t));
|
||||
return;
|
||||
}
|
||||
|
||||
if (now < hid_light_tt_expire) {
|
||||
/* Higher priority for the HID lights */
|
||||
uint32_t color = tt_rgb32(tt_hid[0], tt_hid[1], tt_hid[2], false);
|
||||
for (int i = 0; i < TT_LED_NUM; i++) {
|
||||
@ -242,30 +260,42 @@ static void tt_lights_update()
|
||||
return;
|
||||
}
|
||||
|
||||
set_effect(iidx_cfg->tt_led.effect);
|
||||
/* Lower priority for the local effects */
|
||||
effects[current_effect].update(effects[current_effect].context);
|
||||
}
|
||||
|
||||
#define FORCE_EXPIRE_DURATION 100000ULL
|
||||
static uint64_t forced_expire_time = 0;
|
||||
uint32_t *force_buttons = NULL;
|
||||
uint32_t *force_tt = NULL;
|
||||
|
||||
static void forced_update()
|
||||
static void button_lights_update()
|
||||
{
|
||||
for (int i = 0; i < BUTTON_RGB_NUM; i++) {
|
||||
int led = button_rgb_map[i];
|
||||
button_led_buf[led] = force_buttons[i];
|
||||
uint64_t now = time_us_64();
|
||||
if (now < override_button_expire_time) {
|
||||
for (int i = 0; i < BUTTON_RGB_NUM; i++) {
|
||||
int led = button_rgb_map[i];
|
||||
button_led_buf[led] = override_button_buf[i];
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(tt_led_buf, force_tt, TT_LED_NUM * sizeof(uint32_t));
|
||||
for (int i = 0; i < BUTTON_RGB_NUM; i++) {
|
||||
int led = button_rgb_map[i];
|
||||
if (hid_lights[i] > 0) {
|
||||
button_led_buf[led] = button_hsv(iidx_cfg->key_on[i]);
|
||||
} else {
|
||||
button_led_buf[led] = button_hsv(iidx_cfg->key_off[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rgb_force_display(uint32_t *buttons, uint32_t *tt)
|
||||
void rgb_override_tt(uint32_t *tt)
|
||||
{
|
||||
force_buttons = buttons;
|
||||
force_tt = tt;
|
||||
forced_expire_time = time_us_64() + FORCE_EXPIRE_DURATION;
|
||||
override_tt_buf = tt;
|
||||
override_tt_expire_time = time_us_64() + OVERRIDE_EXPIRE;
|
||||
}
|
||||
|
||||
void rgb_override_button(uint32_t *button)
|
||||
{
|
||||
override_button_buf = button;
|
||||
override_button_expire_time = time_us_64() + OVERRIDE_EXPIRE;
|
||||
}
|
||||
|
||||
static void wipe_out_tt_led()
|
||||
@ -304,7 +334,7 @@ void rgb_init()
|
||||
gpio_set_drive_strength(BUTTON_RGB_PIN, GPIO_DRIVE_STRENGTH_2MA);
|
||||
ws2812_program_init(pio0, 0, pio0_offset, BUTTON_RGB_PIN, 800000, false);
|
||||
|
||||
/* We don't start the tt LED program yet */
|
||||
effect_reset();
|
||||
}
|
||||
|
||||
static void follow_mode_change()
|
||||
@ -332,19 +362,22 @@ void rgb_update()
|
||||
|
||||
follow_mode_change();
|
||||
|
||||
set_effect(iidx_cfg->tt_led.effect);
|
||||
if (time_us_64() > forced_expire_time) {
|
||||
tt_lights_update();
|
||||
button_lights_update();
|
||||
} else {
|
||||
forced_update();
|
||||
}
|
||||
tt_lights_update();
|
||||
button_lights_update();
|
||||
|
||||
drive_led();
|
||||
}
|
||||
|
||||
static void trap()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void rgb_reg_tt_effect(tt_effect_t effect)
|
||||
{
|
||||
if (effect_num >= EFFECT_MAX) {
|
||||
return;
|
||||
}
|
||||
effects[effect_num] = effect;
|
||||
effect_num++;
|
||||
effects[effect_num] = (tt_effect_t) { trap, trap, trap, 0 };
|
||||
}
|
||||
|
@ -25,7 +25,8 @@ void rgb_set_level(uint8_t level);
|
||||
void rgb_set_button_light(uint16_t buttons);
|
||||
void rgb_set_hid_light(uint8_t const *lights, uint8_t num);
|
||||
|
||||
void rgb_force_display(uint32_t *keyboard, uint32_t *tt);
|
||||
void rgb_override_tt(uint32_t *tt);
|
||||
void rgb_override_button(uint32_t *button);
|
||||
|
||||
typedef struct {
|
||||
void (*init)(uint32_t context);
|
||||
|
@ -530,14 +530,16 @@ static struct {
|
||||
mode_func rotate;
|
||||
mode_func loop;
|
||||
mode_func enter;
|
||||
bool tt_led;
|
||||
bool button_led;
|
||||
} mode_defs[] = {
|
||||
[MODE_NONE] = { nop, none_rotate, none_loop, nop},
|
||||
[MODE_TURNTABLE] = { tt_key_change, tt_rotate, tt_loop, tt_enter},
|
||||
[MODE_LEVEL] = { level_key_change, level_rotate, level_loop, nop},
|
||||
[MODE_TT_THEME] = { tt_theme_key_change, nop, tt_theme_loop, nop},
|
||||
[MODE_KEY_THEME] = { key_theme_key_change, nop, key_theme_loop, nop},
|
||||
[MODE_KEY_OFF] = { key_change, key_rotate, key_loop, key_enter},
|
||||
[MODE_KEY_ON] = { key_change, key_rotate, key_loop, key_enter},
|
||||
[MODE_NONE] = { nop, none_rotate, none_loop, nop, false, false },
|
||||
[MODE_TURNTABLE] = { tt_key_change, tt_rotate, tt_loop, tt_enter, true, true },
|
||||
[MODE_LEVEL] = { level_key_change, level_rotate, level_loop, nop, true, true },
|
||||
[MODE_TT_THEME] = { tt_theme_key_change, nop, tt_theme_loop, nop, false, true },
|
||||
[MODE_KEY_THEME] = { key_theme_key_change, nop, key_theme_loop, nop, false, true },
|
||||
[MODE_KEY_OFF] = { key_change, key_rotate, key_loop, key_enter, true, true },
|
||||
[MODE_KEY_ON] = { key_change, key_rotate, key_loop, key_enter, true, true },
|
||||
};
|
||||
|
||||
static void join_mode(setup_mode_t new_mode)
|
||||
@ -562,7 +564,7 @@ static void quit_mode(bool apply)
|
||||
current_mode = MODE_NONE;
|
||||
}
|
||||
|
||||
bool setup_run(uint16_t keys, uint16_t angle)
|
||||
void setup_run(uint16_t keys, uint16_t angle)
|
||||
{
|
||||
setup_tick_ms = time_us_64() / 1000;
|
||||
input.keys = keys;
|
||||
@ -586,8 +588,16 @@ bool setup_run(uint16_t keys, uint16_t angle)
|
||||
|
||||
input.last_keys = keys;
|
||||
input.last_angle = angle;
|
||||
}
|
||||
|
||||
return current_mode != MODE_NONE;
|
||||
bool setup_needs_tt_led()
|
||||
{
|
||||
return mode_defs[current_mode].tt_led;
|
||||
}
|
||||
|
||||
bool setup_needs_button_led()
|
||||
{
|
||||
return mode_defs[current_mode].button_led;
|
||||
}
|
||||
|
||||
void setup_init()
|
||||
|
@ -1,19 +1,21 @@
|
||||
/*
|
||||
* Controller Setup
|
||||
* WHowe <github.com/whowechina>
|
||||
*/
|
||||
|
||||
#ifndef SETUP_H
|
||||
#define SETUP_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "board_defs.h"
|
||||
|
||||
void setup_init();
|
||||
bool setup_run(uint16_t key_flag, uint16_t tt_angle);
|
||||
|
||||
extern uint32_t setup_led_tt[];
|
||||
extern uint32_t setup_led_button[BUTTON_RGB_NUM];
|
||||
|
||||
#endif
|
||||
/*
|
||||
* Controller Setup
|
||||
* WHowe <github.com/whowechina>
|
||||
*/
|
||||
|
||||
#ifndef SETUP_H
|
||||
#define SETUP_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "board_defs.h"
|
||||
|
||||
void setup_init();
|
||||
void setup_run(uint16_t key_flag, uint16_t tt_angle);
|
||||
bool setup_needs_tt_led();
|
||||
bool setup_needs_button_led();
|
||||
|
||||
extern uint32_t setup_led_tt[];
|
||||
extern uint32_t setup_led_button[BUTTON_RGB_NUM];
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user