Move rotation-detect + brightness-ramp into one helper
The detect-rotation/blank/redraw block and the brightness step-up block were two stateful chunks in loop() glued by a brightness_ramp global. Fold them into handle_rotation_change() with local static state — the 'on rotation change, flash to black then ramp back' invariant lives in one place and the loop body shrinks.
This commit is contained in:
+28
-28
@@ -302,7 +302,33 @@ void setup() {
|
|||||||
static ble_state_t last_ble_state = BLE_STATE_INIT;
|
static ble_state_t last_ble_state = BLE_STATE_INIT;
|
||||||
|
|
||||||
// Brightness ramp state for rotation transition
|
// Brightness ramp state for rotation transition
|
||||||
static uint8_t brightness_ramp = 0; // 0=idle, 1-4=ramping up
|
// On rotation change we blank the panel, force a full LVGL redraw at the
|
||||||
|
// new orientation, then ramp brightness back up over ~125ms so the
|
||||||
|
// transition reads as deliberate instead of as a glitch.
|
||||||
|
static void handle_rotation_change(void) {
|
||||||
|
static uint8_t last_rotation = 0;
|
||||||
|
static uint8_t ramp_step = 0; // 0=idle, 1-4=ramping
|
||||||
|
static uint32_t ramp_last = 0;
|
||||||
|
|
||||||
|
uint8_t rot = imu_get_rotation();
|
||||||
|
if (rot != last_rotation) {
|
||||||
|
gfx->setBrightness(0);
|
||||||
|
last_rotation = rot;
|
||||||
|
lv_obj_invalidate(lv_screen_active());
|
||||||
|
ramp_step = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ramp_step == 0) return;
|
||||||
|
uint32_t now = millis();
|
||||||
|
if (now - ramp_last < 25) return;
|
||||||
|
ramp_last = now;
|
||||||
|
|
||||||
|
static const uint8_t levels[] = {60, 120, 170, 200};
|
||||||
|
gfx->setBrightness(levels[ramp_step - 1]);
|
||||||
|
if (ramp_step >= 4) ramp_step = 0;
|
||||||
|
else ramp_step++;
|
||||||
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
touch_read();
|
touch_read();
|
||||||
@@ -339,33 +365,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect rotation change — brightness flash + force redraw
|
handle_rotation_change();
|
||||||
{
|
|
||||||
static uint8_t last_rotation = 0;
|
|
||||||
uint8_t rot = imu_get_rotation();
|
|
||||||
if (rot != last_rotation) {
|
|
||||||
gfx->setBrightness(0); // instant black
|
|
||||||
last_rotation = rot;
|
|
||||||
lv_obj_invalidate(lv_screen_active()); // force full redraw at new rotation
|
|
||||||
brightness_ramp = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ramp brightness back up after rotation
|
|
||||||
if (brightness_ramp > 0) {
|
|
||||||
static uint32_t ramp_last = 0;
|
|
||||||
uint32_t now = millis();
|
|
||||||
if (now - ramp_last > 25) {
|
|
||||||
ramp_last = now;
|
|
||||||
uint8_t levels[] = {60, 120, 170, 200};
|
|
||||||
gfx->setBrightness(levels[brightness_ramp - 1]);
|
|
||||||
if (brightness_ramp >= 4) {
|
|
||||||
brightness_ramp = 0;
|
|
||||||
} else {
|
|
||||||
brightness_ramp++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update BLE status on screen when state changes
|
// Update BLE status on screen when state changes
|
||||||
ble_state_t bs = ble_get_state();
|
ble_state_t bs = ble_get_state();
|
||||||
|
|||||||
Reference in New Issue
Block a user