#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FRAM_ADDRESS 0x56 #define INPUT_BANK_A_ADDRESS 0x21 #define INPUT_BANK_B_ADDRESS 0x22 #define PWM_BANK_ADDRESS 0x5F #define RTC_ADDRESS 0x68 class ESPMegaPRO { public: ESPMegaPRO(); bool begin(); void loop(); bool installCard(uint8_t slot, ExpansionCard* card); bool updateTimeFromNTP(); void enableIotModule(); void enableInternalDisplay(HardwareSerial *serial); rtctime_t getTime(); void dumpFRAMtoSerial(uint16_t start, uint16_t end); void dumpFRAMtoSerialASCII(uint16_t start, uint16_t end); void setTime(int hours, int minutes, int seconds, int day, int month, int year); ExpansionCard* getCard(uint8_t slot); FRAM fram; DigitalInputCard inputs = DigitalInputCard(INPUT_BANK_A_ADDRESS, INPUT_BANK_B_ADDRESS); DigitalOutputCard outputs = DigitalOutputCard(PWM_BANK_ADDRESS); InternalDisplay *display; ESPMegaIoT *iot; private: bool iotEnabled = false; bool internalDisplayEnabled = false; ExpansionCard* cards[255]; bool cardInstalled[255]; uint8_t cardCount = 0; };