Add method to store a device in cfgmem
This commit is contained in:
parent
c63bd9d2d7
commit
914dfdb1f3
@ -339,6 +339,11 @@ DeviceBase* getDevice(uint8_t pointer)
|
||||
return new Device;
|
||||
}
|
||||
|
||||
void storeDevice(uint8_t pointer, DeviceBase* device)
|
||||
{
|
||||
memcpy(&configuration_memory[pointer], reinterpret_cast<uint8_t*>(device) + 4, device->size());
|
||||
}
|
||||
|
||||
void loopMN()
|
||||
{
|
||||
receive();
|
||||
|
@ -81,6 +81,7 @@ struct DeviceBase
|
||||
virtual bool doSend() = 0;
|
||||
virtual void initialize() = 0;
|
||||
virtual void printStatus() = 0;
|
||||
virtual size_t size() = 0; // Returns sizeof(T) - 4 (4 for the pointer)
|
||||
} __attribute__ ((packed));
|
||||
static_assert(sizeof(DeviceBase) == 7, "Device size wrong");
|
||||
|
||||
@ -102,6 +103,10 @@ struct Device : DeviceBase
|
||||
{
|
||||
SerialUSB.println("This is a dummy device");
|
||||
}
|
||||
size_t size() // Maybe this can be solved with templates too
|
||||
{
|
||||
return sizeof(Device) - 4;
|
||||
}
|
||||
} __attribute__ ((packed));
|
||||
static_assert(sizeof(Device) == 7, "Device size wrong");
|
||||
|
||||
@ -141,6 +146,10 @@ struct AnalogInput : Device // 20 Bytes, each device gets about 17.06 bytes on a
|
||||
SerialUSB.print("AnalogInput on pin A");
|
||||
SerialUSB.println(pin - 14);
|
||||
}
|
||||
size_t size() // Maybe this can be solved with templates too
|
||||
{
|
||||
return sizeof(AnalogInput) - 4;
|
||||
}
|
||||
} __attribute__ ((packed));
|
||||
static_assert(sizeof(AnalogInput) == 24, "AnalogInput size wrong");
|
||||
|
||||
@ -166,15 +175,16 @@ void initMN();
|
||||
void test();
|
||||
void printStatusReport();
|
||||
void setLoopPower(bool state);
|
||||
void saveMemory();
|
||||
void loadMemory();
|
||||
void saveMemory(); // Save everything to flash
|
||||
void loadMemory(); // Load everything (configuration, cfgmem) from flash
|
||||
void refreshConfig();
|
||||
float batteryVoltage();
|
||||
void errorBlink(int n); // Quickly blink n times
|
||||
bool send(uint8_t data[], uint8_t len);
|
||||
bool receive();
|
||||
void initializeDevices();
|
||||
DeviceBase* getDevice(uint8_t pointer);
|
||||
DeviceBase* getDevice(uint8_t pointer); // Gets the device at the specified location from cfgmem
|
||||
void storeDevice(uint8_t pointer, DeviceBase* device); // Stores a device at the specified location in cfgmem (not in flash)
|
||||
void loopMN();
|
||||
void sendSensorData();
|
||||
void sendDeviceData();
|
||||
|
@ -46,6 +46,7 @@ void loop()
|
||||
{
|
||||
size_t config_size = sizeof(MNConfiguration) - sizeof(configuration.client_secret_key) - sizeof(configuration.server_secret_key); // Don't leak the secret key
|
||||
char command = SerialUSB.read();
|
||||
|
||||
switch (command)
|
||||
{
|
||||
case 'C': // Print configuration for in the field debugging
|
||||
|
Loading…
Reference in New Issue
Block a user