/* * File: UI_Control.h * Created: Created: Friday August 2025 10:21:04 * Author: Chris */ #ifndef UI_CONTROL_H #define UI_CONTROL_H // ============================================================================================ // Includes #include #include #include #include "pico/stdlib.h" // ============================================================================================ // Defines #define CURRENT_TIME_ms (uint32_t)(time_us_64() / 1000) // ============================================================================================ // Datatypes typedef struct { uint8_t Base_Threshold; // Steps needed to trigger level 1 acceleration uint8_t Level_Step; // Additional steps per acceleration level uint8_t Max_Level; // Maximum acceleration level (1-10) uint16_t Timeout_ms; // Inactivity timeout to reset acceleration (ms) uint8_t Multipliers[10]; // Multiplier for each acceleration level } Encoder_Acceleration_Config; typedef struct { // Configuration const Encoder_Acceleration_Config* config; // State tracking uint8_t Speed_Counter; // Current speed counter uint8_t Acceleration_Level; // Current acceleration level (0 = no accel) uint32_t Last_Activity_Time; // Last encoder activity timestamp (ms) // Statistics (for debugging) uint32_t Total_Steps; // Total encoder steps processed uint32_t Accelerated_Steps; // Steps that used acceleration } Encoder_Acceleration_Instance; // ============================================================================================ // Function Declarations void UI_Control_Init(void); void UI_Control_Selector_Inc(int32_t* selector, int32_t minimum, int32_t maximum, bool circle_around); void UI_Control_Selector_Dec(int32_t* selector, int32_t minimum, int32_t maximum, bool circle_around); void UI_Control_Acceleration_Init_Custom(const Encoder_Acceleration_Config* config); void UI_Control_Acceleration_Set_Enabled(bool enable); void UI_Control_Acceleration_Reset(void); void UI_Control_Acceleration_Update(uint32_t current_time_ms); uint8_t UI_Control_Acceleration_Get_Level(void); bool UI_Control_Acceleration_Is_Active(void); void UI_Control_Acceleration_Get_Stats(uint32_t* total_steps, uint32_t* accelerated_steps); #endif // UI_CONTROL_H