#ifndef __SPROCKET_H__ #define __SPROCKET_H__ #define _TASK_SLEEP_ON_IDLE_RUN #define _TASK_STD_FUNCTION #define _TASK_PRIORITY #include //#include #include #include #include "FS.h" #ifdef ESP32 #include "SPIFFS.h" #endif #include "Network.h" #include "SprocketConfig.h" #include "Plugin.h" using namespace std; using namespace std::placeholders; // FIXME move to some global fnc lib #define ARRAY_LENGTH(array) sizeof(array)/sizeof(array[0]) class Sprocket : public Mediator { protected: // TODO move scheduler out of Sprocket // => see difference between standalone and mesh sprochet usage of scheduler Scheduler* scheduler; Network network; private: SprocketMessage currentMessage; public: SprocketConfig config; std::vector plugins; Sprocket(); Sprocket(SprocketConfig); Sprocket* init(SprocketConfig); Sprocket* addTask(Task&); virtual void loop(); virtual Sprocket* activate(); virtual Sprocket* activate(Scheduler*) { return this; }; virtual void dispatch( uint32_t from, String &msg ); void addPlugin(Plugin* p); void activatePlugins(Scheduler* scheduler); }; #endif