#pragma once #include #include #include // Display SPI pins (custom pins for XteinkX4, not hardware SPI defaults) #define EPD_SCLK 8 // SPI Clock #define EPD_MOSI 10 // SPI MOSI (Master Out Slave In) #define EPD_CS 21 // Chip Select #define EPD_DC 4 // Data/Command #define EPD_RST 5 // Reset #define EPD_BUSY 6 // Busy #define SPI_MISO 7 // SPI MISO, shared between SD card and display (Master In Slave Out) #define BAT_GPIO0 0 // Battery voltage #define UART0_RXD 20 // Used for USB connection detection class HalGPIO { #if CROSSPOINT_EMULATED == 0 InputManager inputMgr; #endif public: HalGPIO() = default; // Start button GPIO and setup SPI for screen and SD card void begin(); // Button input methods void update(); bool isPressed(uint8_t buttonIndex) const; bool wasPressed(uint8_t buttonIndex) const; bool wasAnyPressed() const; bool wasReleased(uint8_t buttonIndex) const; bool wasAnyReleased() const; unsigned long getHeldTime() const; // Setup wake up GPIO and enter deep sleep void startDeepSleep(); // Get battery percentage (range 0-100) int getBatteryPercentage() const; // Check if USB is connected bool isUsbConnected() const; // Check if wakeup was caused by power button press bool isWakeupByPowerButton() const; // Button indices static constexpr uint8_t BTN_BACK = 0; static constexpr uint8_t BTN_CONFIRM = 1; static constexpr uint8_t BTN_LEFT = 2; static constexpr uint8_t BTN_RIGHT = 3; static constexpr uint8_t BTN_UP = 4; static constexpr uint8_t BTN_DOWN = 5; static constexpr uint8_t BTN_POWER = 6; };