programmable wireless relay store changes
This commit is contained in:
36
main.cpp
36
main.cpp
@ -11,7 +11,7 @@
|
||||
#include "bitrep.h"
|
||||
#include "staticvector.h"
|
||||
|
||||
#define COMMAND_BUFFER_SIZE 32
|
||||
#define COMMAND_BUFFER_SIZE 64
|
||||
#define SNPRINTF_BUFFER_SIZE 64
|
||||
|
||||
#define MAX_RELAYS 16
|
||||
@ -26,13 +26,13 @@ inline static void printHelp(Serial* serial)
|
||||
|
||||
serial->write_p(PSTR("Available Commands: \n\
|
||||
help : Show this prompt.\n\
|
||||
relay add [id] : Add Wireless Relay.\n\
|
||||
relay add [id] [name] : Add Wireless Relay.\n\
|
||||
relay delete : Delete last Relay.\n\
|
||||
relay list : Print list of saved Wireless Relays.\n\
|
||||
relay machine [on/off] : Get machine readable relay state when state changes.\n\
|
||||
relay [on/off] [nn] : Turn on/off nth relay.\n\
|
||||
state : Get machine readable state.\n\
|
||||
erase : Erase epprom.\n\
|
||||
dump : Dump epprom.\n\
|
||||
rgb [on/off] : Turn on/off RGB leds at current value.\n\
|
||||
rgb print : Print current RGB value.\n\
|
||||
rgb set [RRR] [GGG] [BBB] : Set RGB value, pattern must be 0.\n\
|
||||
@ -40,7 +40,7 @@ inline static void printHelp(Serial* serial)
|
||||
rgb preset [id] : set preset color.\n\
|
||||
rgb fade [on/off] : turn Colorfade on or off.\n\
|
||||
aux [on/off] : Turn on/off PWM Channel.\n\
|
||||
aux set [VAL] : Set PWM value, pattern must be 0.\n"));
|
||||
aux set [VAL] : Set PWM value.\n"));
|
||||
}
|
||||
|
||||
void save()
|
||||
@ -75,7 +75,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
uint16_t id = strtol(token, nullptr, 2 );
|
||||
if(id != 0 && relays->remainingCapacity() > 0)
|
||||
{
|
||||
token = strtok(NULL, " \n");
|
||||
id = id << 4;
|
||||
token = strtok(NULL, "\0");
|
||||
if( token == NULL )
|
||||
{
|
||||
char name[] = "";
|
||||
@ -87,6 +88,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
WirelessRelay relay(id, token);
|
||||
relays->push_back(relay);
|
||||
}
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Adding relay NUMBER: %u NAME: %s\n", relays->count()-1, relays->back().getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
save();
|
||||
}
|
||||
else if(relays->remainingCapacity() == 0) serial->write_p(PSTR("Relay storage full.\n"));
|
||||
@ -95,6 +98,8 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
else if( strcmp(token, "delete") == 0 )
|
||||
{
|
||||
relays->erase(relays->count());
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "Deleting relay NUMBER: %u NAME: %s\n", relays->count(), relays->at(relays->count()).getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
save();
|
||||
}
|
||||
else if( strcmp(token, "list") == 0 )
|
||||
@ -103,15 +108,14 @@ void relayDispatch(SVector<WirelessRelay, MAX_RELAYS>* relays, Pwm16b* auxPwm, c
|
||||
for(uint8_t i = 0; i < relays->count(); i++)
|
||||
{
|
||||
uint16_t id = relays->at(i).getId();
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ID: %s%s%s%s NAME: %s\n", i,
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "NUMBER: %u ID: %s%s%s NAME: %s\n", i,
|
||||
bit_rep[ id >> 12],
|
||||
bit_rep[(id & 0x0F00) >> 8 ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
bit_rep[ id & 0x000F ],
|
||||
bit_rep[(id & 0x00F0) >> 4 ],
|
||||
relays->at(i).getName());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
serial->putChar('\n');
|
||||
serial->write_p(PSTR("EOL\n"));
|
||||
}
|
||||
else if( strcmp(token, "on") == 0 )
|
||||
{
|
||||
@ -286,10 +290,19 @@ void serialDispatch(Serial* serial, SVector<WirelessRelay, MAX_RELAYS>* relays,
|
||||
}
|
||||
else if(strcmp(token, "erase") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < MAX_RELAYS*2+1; i++) EEPROM_write_char(i, 0);
|
||||
for(uint16_t i = 0; i < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; i++) EEPROM_write_char(i, 0);
|
||||
serial->write_p(PSTR("EEPROM erased\n"));
|
||||
load();
|
||||
}
|
||||
else if(strcmp(token, "dump") == 0)
|
||||
{
|
||||
for(uint16_t i = 0; i < sizeof(*relays)+RELAY_VECTOR_EEPROM_ADDR; i++)
|
||||
{
|
||||
if(i != 0) serial->putChar(',');
|
||||
serial->write((uint16_t)EEPROM_read_char(i));
|
||||
}
|
||||
serial->putChar('\n');
|
||||
}
|
||||
else if(strcmp(token, "help") == 0)
|
||||
{
|
||||
printHelp(serial);
|
||||
@ -328,9 +341,10 @@ int main()
|
||||
|
||||
Pwm16b pwmTc1 ( &TCCR1A, &TCCR1B, &OCR1A, &OCR1B, &ICR1, 0b00000001, true, false);
|
||||
|
||||
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
||||
|
||||
load();
|
||||
|
||||
serial.write_p(PSTR("RGBController v0.7 starting\n"));
|
||||
while(true)
|
||||
{
|
||||
serialDispatch(&serial, &relays, &rgbled, &pwmTc1);
|
||||
|
Reference in New Issue
Block a user