From 26e4da90ca44321098a70df953c1f35f84dfd489 Mon Sep 17 00:00:00 2001 From: 4yn <4yn@users.noreply.github.com> Date: Thu, 29 Jun 2023 00:53:26 +0800 Subject: [PATCH] turbocharger leds for v5 --- build_uf2/Pico_Game_Controller.uf2 | Bin 50688 -> 56320 bytes src/pico_game_controller.c | 8 +- src/rgb/turbocharger.c | 135 ++++++++++++++++++++++------- 3 files changed, 109 insertions(+), 34 deletions(-) diff --git a/build_uf2/Pico_Game_Controller.uf2 b/build_uf2/Pico_Game_Controller.uf2 index 6147fca5bc4240a03d96e17392ebe3a3d51c8c7b..a23cc811497e46edf0457b5ea1cd41273079fe0f 100644 GIT binary patch delta 10380 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 J@Tv3B{{!Ly)X)F` delta 7518 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 TURBO_LIGHTS_THRESHOLD) { - turbo_lights_idle[i] = 0; turbo_lights_pos[i] -= TURBO_LIGHTS_VEL; turbo_lights_brightness[i] = 1.0f; } else { - turbo_lights_idle[i]++; - if (turbo_lights_idle[i] > TURBO_LIGHTS_FADE) { - turbo_lights_pos[i] = 0; - } else { - turbo_lights_brightness[i] = f_clamp(turbo_lights_brightness[i] - TURBO_LIGHTS_FADE_VEL, 0.0f, 1.0f); + turbo_lights_brightness[i] = f_clamp(turbo_lights_brightness[i] - TURBO_LIGHTS_FADE_VEL, 0.0f, 1.0f); + if (turbo_lights_brightness[i] < EPS) { + turbo_lights_pos[i] = turbo_start_pos[i]; + } + + if (turbo_cur_enc_val[i] < -EPS) { + turbo_lights_pos[i] += TURBO_LIGHTS_VEL * turbo_lights_brightness[i]; + } else if (turbo_cur_enc_val[i] > EPS) { + turbo_lights_pos[i] -= TURBO_LIGHTS_VEL * turbo_lights_brightness[i]; } } @@ -96,15 +116,64 @@ void turbocharger_color_cycle(uint32_t unused) { } } - for (int i = 0; i < WS2812B_LED_SIZE; i++) { - float pos = 2.0f + i + (i >= WS2812B_LED_SIZE / 2 ? 3.0f : 0.0f); - float l_strength = (1.0f - f_clamp(f_abs(turbo_lights_pos[0] - pos), 0.0f, 2.0f) / 2) * turbo_lights_brightness[0]; - float r_strength = (1.0f - f_clamp(f_abs(turbo_lights_pos[1] - pos), 0.0f, 2.0f) / 2) * turbo_lights_brightness[1]; + // base code from color cycle v5 + uint64_t latest_switch_ts = sw_timestamp[0]; + for (int i = 1; i < SW_GPIO_SIZE; i++) + if (latest_switch_ts < sw_timestamp[i]) latest_switch_ts = sw_timestamp[i]; + if (time_us_64() > latest_switch_ts + timeout_us) { // timed out + for (int i = 0; i < WS2812B_LED_SIZE; i++) ws2812b_data[i] = COLOR_BLACK; + } else { + /* Switches */ + for (int i = 0; i < SW_GPIO_SIZE - 3; i++) { + if (time_us_64() - reactive_timeout_timestamp >= REACTIVE_TIMEOUT_MAX) { + if ((report.buttons >> i) % 2 == 1) { + ws2812b_data[2 * i + 2] = SW_COLORS[i + 1]; + } else { + ws2812b_data[2 * i + 2] = COLOR_BLACK; + } + } else { + if (lights_report.lights.buttons[i] == 0) { + ws2812b_data[2 * i + 2] = COLOR_BLACK; + } else { + ws2812b_data[2 * i + 2] = SW_COLORS[i + 1]; + } + } + } - put_pixel(urgb_u32( - i_clamp(l_strength * 70 + r_strength * 250, 0, 255), - i_clamp(l_strength * 230 + r_strength * 60, 0, 255), - i_clamp(l_strength * 250 + r_strength * 200, 0, 255) - )); + /* start button sw_val index is offset by two with respect to LED_GPIO */ + if (time_us_64() - reactive_timeout_timestamp >= REACTIVE_TIMEOUT_MAX) { + if ((report.buttons >> (SW_GPIO_SIZE - 1)) % 2 == 1) { + ws2812b_data[0] = SW_COLORS[0]; + } else { + ws2812b_data[0] = COLOR_BLACK; + } + } else { + if (lights_report.lights.buttons[SW_GPIO_SIZE - 3] == 0) { + ws2812b_data[0] = COLOR_BLACK; + } else { + ws2812b_data[0] = SW_COLORS[0]; + } + } + /* Switch Labels */ + for (int i = 0; i < SW_GPIO_SIZE - 2; i++) { + ws2812b_data[2 * i + 1] = SW_LABEL_COLORS[i]; + } + + /* peripheral turbocharger leds */ + for (int i = 0; i < TURBO_LIGHTS_N; i++) { + float pos = turbo_led_base_pos[i]; + float l_strength = (1.0f - f_clamp(f_abs(turbo_lights_pos[0] - pos), 0.0f, 2.0f) / 2) * turbo_lights_brightness[0]; + float r_strength = (1.0f - f_clamp(f_abs(turbo_lights_pos[1] - pos), 0.0f, 2.0f) / 2) * turbo_lights_brightness[1]; + + ws2812b_data[TURBO_LIGHTS_OFFSET + i].r = i_clamp(l_strength * 70 + r_strength * 250, 0, 255); + ws2812b_data[TURBO_LIGHTS_OFFSET + i].g = i_clamp(l_strength * 230 + r_strength * 60, 0, 255); + ws2812b_data[TURBO_LIGHTS_OFFSET + i].b = i_clamp(l_strength * 250 + r_strength * 200, 0, 255); + } + } + + // put pixels + for (int i = 0; i < WS2812B_LED_SIZE; ++i) { + put_pixel( + urgb_u32(ws2812b_data[i].r, ws2812b_data[i].g, ws2812b_data[i].b)); } }