// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2012-2024 Scott Penrose and WII5 Buoy contributors // // This file is part of WII5 Buoy firmware. // See LICENSE for full terms. /** * @file WII5Maths.h * @brief Maths CPU controller: power, hold, restart, and SD-card hand-off. */ #ifndef WII5Maths_h #define WII5Maths_h #include #include #include #include #include enum WII5MATHS_STEPS { WII5MATHS_UNKNOWN, WII5MATHS_WARN, WII5MATHS_OFF, WII5MATHS_ASK, WII5MATHS_REBOOT, WII5MATHS_BOOT, WII5MATHS_BOOT_WAIT, WII5MATHS_READY, WII5MATHS_HOLD_ON, WII5MATHS_FINISH }; #define MATHS_QUEUE_MAX 2 #define MATHS_QUEUE_BUFFER 150 class WII5Maths : public WII5Power { public: WII5Maths() {} virtual WII5_CONTROLLERS controllerId() {return WII5CONTROLLER_DRIVER;} virtual WII5_DRIVERS driverId() {return WII5DRIVER_MATHS;} void setDebug(bool in); bool getDebug(); void begin(); void loop(); void start(WII5_MATHSMODE mm); void stop(bool force = false); void powerOff(bool force = false); void powerOn(bool force = false); // Stats on running etc time_t lastStartTime; uint32_t lastRunTime; void setMathsUntil(time_t t); time_t getMathsUntil(); bool isRunning(); bool isOff(); void gpioClick(); void setHold(uint32_t in, bool allowLower = false); void woops_on(); void cancelHold(); bool processHold(); void setReturnLine(); void cancelReturnLine(); uint32_t remainingHold(); uint32_t remainingUntil(); bool isMode(WII5_MATHSMODE mm); void sendTime(); void sendQueue(); bool queueCommand(char *val, uint8_t valSize); void queueDone(); protected: uint8_t queueCount; char queueMessage[MATHS_QUEUE_MAX][MATHS_QUEUE_BUFFER]; elapsedMillis queueLast; uint8_t queueRetry; bool running; bool debug; WII5_MATHSMODE mathsMode; uint8_t retry; bool firstboot; // First booted up - wait, not touching power lines time_t mathsUntil; // No longer used // elapsedMillis elapsedHello; // elapsedMillis elapsedRequest; // elapsedMillis elapsedGpio; elapsedMillis returnlineWait; elapsedMillis holdWait; uint32_t holdFor; WII5MATHS_STEPS step; WII5MATHS_STEPS stepLast; elapsedMillis stepWait; elapsedMillis displayWait; elapsedMillis timeWait; }; extern WII5Maths wii5Maths; #endif