Loom 4 v4.5
Arduino library for Internet of Things Rapid Prototyping in environmental sensing
Loading...
Searching...
No Matches
Loom_Manager.h
1#pragma once
2
3#include <ArduinoJson.h>
4#include <vector>
5#include <unordered_map>
6
7#include "Module.h"
8
9#define WAIT_TIME_MS 20000 // Time to wait for the serial interface to start
10#define BAUD_RATE 115200 // Serial interface baud rate
11
18class Manager{
19 public:
20
26 Manager(const char* devName, uint32_t instanceNum);
27
32 void registerModule(Module* module);
33
38 DynamicJsonDocument& getDocument(); // Returns a reference to the main JSON document storing
39
46 template <typename T>
47 void addData(const char* moduleName, const char* dataName, T data){
48 JsonObject json = get_data_object(moduleName);
49 json[dataName] = data;
50 };
51
56 void beginSerial(bool waitForSerial = true);
57
61 void initialize();
62
66 void measure();
67
71 void package();
72
76 void power_up();
77
81 void power_down();
82
86 void display_data();
87
92 void pause(const uint32_t ms) const;
93
98 void getJSONString(char array[2000]);
99
104 const char* get_device_name(){ return deviceName; };
105
110 void set_device_name(const char* name) { strcpy(deviceName, name); };
111
116 int get_instance_num(){ return instanceNumber; };
117
122 void set_instance_num(int num) { instanceNumber = num; };
123
128 const char* get_serial_num(){ return serial_num; };
129
133 void useHypnos() { usingHypnos = true; };
134
139 void setEnableState(bool state) { hypnosEnabled = state; };
140
145 JsonObject get_data_object(const char* moduleName);
146
150 int get_packet_number() { return packetNumber; };
151
152 private:
153
154 /* Device Information */
155 char deviceName[100]; // Name of the device
156 uint32_t instanceNumber; // Instance number of the device
157 uint32_t packetNumber = 1; // Tracks the current packet number
158 char serial_num[33];
159
160 void read_serial_num(); // Read the serial number out of the feather's registers
161
162 /* Module Data */
163 DynamicJsonDocument doc; // JSON document that will store all sensor information
164 JsonArray contentsArray; // Stores the contents of the modules
165 std::vector<std::pair<const char*, Module*>> modules; // List of modules that have been added to the stack
166
167 /* Validation */
168 bool hasInitialized = false; // Whether or not the initialize function has been called, if not it could be the source of hanging so we want to know
169 bool usingHypnos = false; // If the setup is using a hypnos
170 bool hypnosEnabled = false; // If the power rails on the hypnos are enabled this means we should be able to initialize
171
172
173};
Definition: Loom_Manager.h:18
void getJSONString(char array[2000])
Definition: Loom_Manager.cpp:232
const char * get_serial_num()
Definition: Loom_Manager.h:128
int get_instance_num()
Definition: Loom_Manager.h:116
void initialize()
Definition: Loom_Manager.cpp:210
void measure()
Definition: Loom_Manager.cpp:63
void useHypnos()
Definition: Loom_Manager.h:133
const char * get_device_name()
Definition: Loom_Manager.h:104
int get_packet_number()
Definition: Loom_Manager.h:150
void package()
Definition: Loom_Manager.cpp:91
void power_down()
Definition: Loom_Manager.cpp:168
void set_instance_num(int num)
Definition: Loom_Manager.h:122
void power_up()
Definition: Loom_Manager.cpp:149
void registerModule(Module *module)
Definition: Loom_Manager.cpp:13
void addData(const char *moduleName, const char *dataName, T data)
Definition: Loom_Manager.h:47
void beginSerial(bool waitForSerial=true)
Definition: Loom_Manager.cpp:47
void display_data()
Definition: Loom_Manager.cpp:187
JsonObject get_data_object(const char *moduleName)
Definition: Loom_Manager.cpp:131
DynamicJsonDocument & getDocument()
Definition: Loom_Manager.cpp:43
void setEnableState(bool state)
Definition: Loom_Manager.h:139
void pause(const uint32_t ms) const
Definition: Loom_Manager.cpp:261
void set_device_name(const char *name)
Definition: Loom_Manager.h:110
Definition: Module.h:30