From 2fa8104164c147ec36e09dd2a2cc29775618a106 Mon Sep 17 00:00:00 2001 From: IMback Date: Sun, 28 Oct 2018 21:49:08 +0100 Subject: [PATCH] programmable wireless relay store changes --- WirelessRelay.cpp | 2 +- WirelessRelay.h | 5 ++--- eeprom.h | 2 +- main.cpp | 36 +++++++++++++++++++++++++----------- staticvector.h | 2 +- 5 files changed, 30 insertions(+), 17 deletions(-) diff --git a/WirelessRelay.cpp b/WirelessRelay.cpp index 8f83c10..a6288cf 100644 --- a/WirelessRelay.cpp +++ b/WirelessRelay.cpp @@ -14,7 +14,7 @@ void WirelessRelay::sendId() for(short i = 0; i<10; i++) { - sendBit( _id & 1 << (15 - i) ? true : false ); + sendBit( _id & 1 << (15 - i) ); } } diff --git a/WirelessRelay.h b/WirelessRelay.h index 9b9a611..453d79a 100644 --- a/WirelessRelay.h +++ b/WirelessRelay.h @@ -4,12 +4,11 @@ #include #include"writepin.h" -#define LARGE_TIME 750 -#define SMALL_TIME 250 - class WirelessRelay { public: + static const uint16_t LARGE_TIME = 750; + static const uint8_t SMALL_TIME = 250; static const uint16_t MAX_NAME_LENGTH = 32; diff --git a/eeprom.h b/eeprom.h index 88e476d..ee9b531 100644 --- a/eeprom.h +++ b/eeprom.h @@ -47,5 +47,5 @@ template T EEPROM_read_class(uint16_t address) template void EEPROM_read_class(uint16_t address, T* in) { - EEPROM_read_string( address, reinterpret_cast(&in), sizeof(T) ); + EEPROM_read_string( address, reinterpret_cast(in), sizeof(T) ); } diff --git a/main.cpp b/main.cpp index 4969e94..977a829 100644 --- a/main.cpp +++ b/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* 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* 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* 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* 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* 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); diff --git a/staticvector.h b/staticvector.h index 2864e1f..0d9eab7 100644 --- a/staticvector.h +++ b/staticvector.h @@ -32,7 +32,7 @@ public: T back() { - return array[stored]; + return array[stored-1]; } bool empty() const