| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | /// @file#pragma once#include <stdint.h>#include "eeprom.h"// See documentation here: https://help.prusa3d.com/article/spooljoin-mmu2s_134252namespace SpoolJoin {class SpoolJoin {public:    SpoolJoin();    enum class EEPROM : uint8_t {        Unknown, ///< SpoolJoin is unknown while printer is booting up        Enabled, ///< SpoolJoin is enabled in EEPROM        Disabled, ///< SpoolJoin is disabled in EEPROM        Empty = 0xFF ///< EEPROM has not been set before and all bits are 1 (0xFF) - either a new printer or user erased the memory    };    /// @brief Called when EEPROM is ready to be read    void initSpoolJoinStatus();    /// @brief Enable SpoolJoin    inline void enableSpoolJoin() { updateSpoolJoinStatus(EEPROM::Enabled); };    /// @brief Disable SpoolJoin    inline void disableSpoolJoin() { updateSpoolJoinStatus(EEPROM::Disabled); };    /// @brief Toggle SpoolJoin    static void toggleSpoolJoin();    /// @brief Check if SpoolJoin is enabled    /// @returns true if enabled, false if disabled    bool isSpoolJoinEnabled();    /// @brief Update the saved MMU slot number so SpoolJoin can determine the next slot to use    /// @param slot number of the slot to set    void setSlot(uint8_t slot);    /// @brief Fetch the next slot number should count from 0 to 4.    /// When filament slot 4 is depleted, the next slot should be 0.    /// @returns the next slot, ranges from 0 to 4    uint8_t nextSlot();private:    /// @brief Update EEPROM    /// @param newStatus Status to write into EEPROM    void updateSpoolJoinStatus(EEPROM newStatus);    /// @brief SpoolJoin status    enum EEPROM status;    /// @brief Currently used slot, ranges from 0 to 4    uint8_t currentMMUSlot;};extern SpoolJoin spooljoin;} // namespace SpoolJoin
 |