From fe31397b2bf83ffabcfdf059cccc6f8c27c0160a Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Thu, 8 Nov 2018 14:48:17 +0100 Subject: [PATCH] adapt mesh app to use mesh plugin --- src/MeshNet.cpp | 4 ++-- src/MeshNet.h | 2 +- src/Network.h | 2 +- src/Plugin.h | 4 ++++ src/Sprocket.h | 2 +- src/base/MeshSprocket.h | 2 +- src/examples/mesh/MeshApp.h | 37 ++++++++++++------------------- src/examples/mesh/config.h | 1 + src/examples/mesh/main.cpp | 26 ++++++++++------------ src/plugins/MeshNetworkPlugin.cpp | 10 ++++++--- 10 files changed, 44 insertions(+), 46 deletions(-) diff --git a/src/MeshNet.cpp b/src/MeshNet.cpp index 1be055f..81adecc 100644 --- a/src/MeshNet.cpp +++ b/src/MeshNet.cpp @@ -40,8 +40,8 @@ void MeshNet::sendTo(uint32_t target, String msg){ mesh.sendSingle(target, msg); } -void MeshNet::broadcast(String msg){ - mesh.sendBroadcast(msg); +void MeshNet::broadcast(String msg, bool self){ + mesh.sendBroadcast(msg, self); } void MeshNet::update(){ diff --git a/src/MeshNet.h b/src/MeshNet.h index f4e2f6f..f36b738 100644 --- a/src/MeshNet.h +++ b/src/MeshNet.h @@ -29,7 +29,7 @@ class MeshNet : public Network { void newConnectionCallback(uint32_t nodeId); void changedConnectionCallback(); void nodeTimeAdjustedCallback(int32_t offset); - void broadcast(String msg); + void broadcast(String msg, bool self = false); void sendTo(uint32_t target, String msg); void onReceive(std::function); int isConnected(){ diff --git a/src/Network.h b/src/Network.h index 62bbec9..f40d4ed 100644 --- a/src/Network.h +++ b/src/Network.h @@ -16,7 +16,7 @@ class Network { virtual int connectStation() { return 0; }; virtual int isConnected(){ return 0; }; virtual void update() {}; - virtual void broadcast(String msg){}; + virtual void broadcast(String msg, bool self = false){}; virtual void sendTo(uint32_t target, String msg) {}; virtual void onReceive(std::function) {}; Network* setScheduler(Scheduler* s) { diff --git a/src/Plugin.h b/src/Plugin.h index ce7e08e..5bbeaf3 100644 --- a/src/Plugin.h +++ b/src/Plugin.h @@ -1,6 +1,10 @@ #ifndef __SPROCKET_PLUGIN__ #define __SPROCKET_PLUGIN__ +#define _TASK_SLEEP_ON_IDLE_RUN +#define _TASK_STD_FUNCTION +#define _TASK_PRIORITY + #include #include #include diff --git a/src/Sprocket.h b/src/Sprocket.h index ae27737..8660a6c 100644 --- a/src/Sprocket.h +++ b/src/Sprocket.h @@ -3,6 +3,7 @@ #define _TASK_SLEEP_ON_IDLE_RUN #define _TASK_STD_FUNCTION +#define _TASK_PRIORITY #include //#include @@ -45,7 +46,6 @@ class Sprocket : public Mediator { void addPlugin(Plugin* p); void activatePlugins(Scheduler* scheduler); - void dispatchMessageToPlugins(SprocketMessage msg); }; #endif \ No newline at end of file diff --git a/src/base/MeshSprocket.h b/src/base/MeshSprocket.h index 3155612..938dfc7 100644 --- a/src/base/MeshSprocket.h +++ b/src/base/MeshSprocket.h @@ -43,7 +43,7 @@ class MeshSprocket : public Sprocket { void loop() { //net->update(); - scheduler.execute(); + scheduler->execute(); } }; diff --git a/src/examples/mesh/MeshApp.h b/src/examples/mesh/MeshApp.h index 2559c36..575228a 100644 --- a/src/examples/mesh/MeshApp.h +++ b/src/examples/mesh/MeshApp.h @@ -1,14 +1,12 @@ #ifndef __MESH_APP__ #define __MESH_APP__ -#include -#include +#include #include +#include #include -//#include #include #include -//#include #include "Mediator.h" using namespace std; @@ -16,48 +14,41 @@ using namespace std::placeholders; AsyncWebServer WEBSERVER(80); -class MeshApp : public MeshSprocket { +class MeshApp : public Sprocket { public: Task heartbeatTask; - MeshApp(SprocketConfig cfg, /* OtaConfig otaCfg, */ WebServerConfig webCfg) : MeshSprocket(cfg) { - //addPlugin(new OtaTcpPlugin(otaCfg)); + MeshApp(SprocketConfig cfg, MeshConfig meshCfg, WebServerConfig webCfg) : Sprocket(cfg) { + addPlugin(new MeshNetworkPlugin(meshCfg)); addPlugin(new WebServerPlugin(webCfg, &WEBSERVER)); addPlugin(new WebConfigPlugin(&WEBSERVER)); - //addPlugin(new MeshManPlugin(&WEBSERVER)); - subscribe("mesh/heartbeat", bind(&MeshApp::messageHandler, this, _1)); + subscribe("device/heartbeat", bind(&MeshApp::messageHandler, this, _1)); } Sprocket* activate(Scheduler* scheduler) { - // call parent method that enables dispatching and plugins - MeshSprocket::activate(scheduler); - + Serial.println("activate MeshApp"); + Sprocket::activate(scheduler); // add a task that sends stuff to the mesh - heartbeatTask.set(TASK_SECOND * 5, TASK_FOREVER, bind(&MeshApp::heartbeat, this, net)); + heartbeatTask.set(TASK_SECOND * 5, TASK_FOREVER, bind(&MeshApp::heartbeat, this)); addTask(heartbeatTask); return this; - } using MeshSprocket::activate; + } using Sprocket::activate; void messageHandler(String msg){ Serial.println(String("MeshApp: ") + msg); } - void heartbeat(MeshNet* network){ - SprocketMessage msg; // = { "wirelos", "broadcast", "local", "alive", 0, }; + void heartbeat(){ + SprocketMessage msg; msg.domain = "wirelos"; msg.to = "broadcast"; msg.payload = "alive"; - msg.topic = "mesh/heartbeat"; + msg.topic = "device/heartbeat"; msg.type = SprocketMessage::APP; String msgStr = msg.toJsonString(); - //network->mesh.sendBroadcast(msgStr, true); - //String mMsg = String("hoi"); - //publish("mediatorMsg", "hi mediator"); + publish("mesh/broadcast", msgStr); } - //void onMessage( uint32_t from, String &msg ) { - // Serial.printf("MeshApp onMessage: received from %u msg=%s\n", from, msg.c_str()); - //} }; #endif \ No newline at end of file diff --git a/src/examples/mesh/config.h b/src/examples/mesh/config.h index e1a48a5..2ac92af 100644 --- a/src/examples/mesh/config.h +++ b/src/examples/mesh/config.h @@ -4,6 +4,7 @@ // Scheduler config #define _TASK_SLEEP_ON_IDLE_RUN #define _TASK_STD_FUNCTION +#define _TASK_PRIORITY // Chip config #define SERIAL_BAUD_RATE 115200 diff --git a/src/examples/mesh/main.cpp b/src/examples/mesh/main.cpp index 5399158..91a9f1c 100644 --- a/src/examples/mesh/main.cpp +++ b/src/examples/mesh/main.cpp @@ -1,24 +1,22 @@ #include "config.h" -#include "MeshNet.h" #include "MeshApp.h" -MeshNet net({ - SPROCKET_MODE, WIFI_CHANNEL, - MESH_PORT, MESH_PREFIX, MESH_PASSWORD, - STATION_SSID, STATION_PASSWORD, HOSTNAME, - MESH_DEBUG_TYPES -}); MeshApp sprocket( - { STARTUP_DELAY, SERIAL_BAUD_RATE }, - /* { OTA_PORT, OTA_PASSWORD }, */ - { WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE } -); + {STARTUP_DELAY, SERIAL_BAUD_RATE}, + {SPROCKET_MODE, WIFI_CHANNEL, + MESH_PORT, MESH_PREFIX, MESH_PASSWORD, + STATION_SSID, STATION_PASSWORD, HOSTNAME, + MESH_DEBUG_TYPES}, + {WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE}); -void setup() { - //sprocket.join(net); +void setup() +{ + delay(3000); + sprocket.activate(); } -void loop() { +void loop() +{ sprocket.loop(); yield(); } \ No newline at end of file diff --git a/src/plugins/MeshNetworkPlugin.cpp b/src/plugins/MeshNetworkPlugin.cpp index 8521f7b..c6a4897 100644 --- a/src/plugins/MeshNetworkPlugin.cpp +++ b/src/plugins/MeshNetworkPlugin.cpp @@ -1,10 +1,8 @@ #ifndef __MESH_NETWORK_PLUGIN__ #define __MESH_NETWORK_PLUGIN__ -#define _TASK_PRIORITY - -#include "TaskSchedulerDeclarations.h" #include "Plugin.h" +#include "TaskSchedulerDeclarations.h" #include #include #include "plugins/NetworkPlugin.cpp" @@ -22,6 +20,7 @@ class MeshNetworkPlugin : public NetworkPlugin MeshNetworkPlugin(MeshConfig cfg) { network = new MeshNet(cfg); + meshScheduler = new Scheduler(); } void activate(Scheduler *userScheduler) @@ -29,8 +28,13 @@ class MeshNetworkPlugin : public NetworkPlugin userScheduler->setHighPriorityScheduler(meshScheduler); network->onReceive(bind(&MeshNetworkPlugin::dispatch, this, _1, _2)); // TODO base subscribers + subscribe("mesh/broadcast", bind(&MeshNetworkPlugin::broadcast, this, _1)); NetworkPlugin::activate(meshScheduler); } + void broadcast(String msg) + { + network->broadcast(msg, true); + } void dispatch(uint32_t from, String &msg) { SprocketMessage sMsg;