// ============================================================================ // INPUT MANAGER HEADER // ============================================================================ // Handles all input processing and debouncing for touch and button inputs // Converts hardware events into InputEvent objects for games to consume #ifndef INPUT_MANAGER_H #define INPUT_MANAGER_H #include #include "input_event.h" #include "display/low_level_touch.h" // Forward declaration - avoid pulling in full basic1.cpp struct GameConfig; /** * @brief Input Manager - Processes touch and button inputs * * Responsibilities: * - Reading touch controller data * - Debouncing touch and button events * - Converting raw inputs to InputEvent objects * - Gesture recognition * * Does NOT handle: * - Button GPIO initialization (stays in basic1.cpp) * - Interrupt handler registration (stays in basic1.cpp) */ class InputManager { public: /** * @brief Construct InputManager with hardware references * @param touch Pointer to touch controller interface * @param config Pointer to game configuration */ InputManager(LowLevelTouch* touch, const GameConfig* config); /** * @brief Process touch input from controller * @param last_time Pointer to last touch timestamp for debouncing * @return InputEvent (valid=false if no valid input) */ InputEvent process_touch_input(uint32_t* last_time); /** * @brief Process button input from GPIO flags * @return InputEvent (valid=false if no valid input) */ InputEvent process_button_input(); /** * @brief Get human-readable gesture name * @param gesture_code Gesture code from touch controller * @return Constant string with gesture name */ static const char* get_gesture_name(uint8_t gesture_code); /** * @brief Check if touch input is available * @return true if touch controller is present, false otherwise */ bool has_touch() const; /** * @brief Check if hardware buttons are available * @return true if physical buttons are present, false otherwise */ bool has_buttons() const; private: LowLevelTouch* touch; const GameConfig* config; }; #endif // INPUT_MANAGER_H