broken serial

This commit is contained in:
IMback
2017-11-07 22:07:48 +01:00
parent d2298d9bd0
commit 73f1bf57ae
7 changed files with 635 additions and 585 deletions

View File

@ -15,6 +15,7 @@ struct WirelessRelayStore
{
WirelessRelay array[MAX_RELAYS];
bool states[MAX_RELAYS]={};
bool printState = true;
uint8_t count;
};
@ -24,8 +25,9 @@ inline static void printHelp(Serial* serial)
help : Show this prompt \n\
relay add [id] : Add Wireless 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\
relay state : Get full machine readable relay state\n\
relay state : Get machine readable relay state\n\
erase : Erase epprom\n\
rgb [on/off] : Turn on/off RGB leds at current value.\n\
rgb print : Print current RGB value.\n\
@ -36,6 +38,18 @@ inline static void printHelp(Serial* serial)
version : Print Version.\n");
}
void writeState( WirelessRelayStore* relays, Serial* serial )
{
serial->write("ST");
serial->write(relays->count);
for(uint8_t i = 0; i < relays->count; i++)
{
serial->putChar(',');
relays->array[i].getExpectedState() ? serial->putChar('1') : serial->putChar('0');
}
serial->putChar('\n');
}
void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial)
{
if( strncmp(inBuffer, "add", 3) == 0 && inBuffer[3] != '\0')
@ -78,6 +92,7 @@ void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial)
char buffer[64];
sprintf(buffer, "RELAY: %u turned on\n", selected);
serial->write(buffer, 64);
if(relays->printState) writeState(relays, serial);
}
else serial->write("No sutch Relay\n");
}
@ -91,16 +106,23 @@ void relayDispatch(WirelessRelayStore* relays, char* inBuffer, Serial* serial)
char buffer[64];
sprintf(buffer, "RELAY: %u turned off\n", selected);
serial->write(buffer, 64);
if(relays->printState) writeState(relays, serial);
}
else serial->write("No sutch Relay\n");
}
else if( strncmp(inBuffer, "state", 5) == 0 && inBuffer[3] != '\0')
{
serial->write("ST");
serial->write(relays->count);
serial->putChar(',');
for(uint8_t i = 0; i < relays->count; i++) relays->array[i].getExpectedState() ? serial->putChar('1') : serial->putChar('0');
serial->putChar('\n');
writeState(relays, serial);
}
else if( strncmp(inBuffer, "machine on", 7) == 0 )
{
relays->printState = true;
serial->write("Turned on State printing\n");
}
else if( strncmp(inBuffer, "machine off", 8) == 0 )
{
relays->printState = false;
serial->write("Turned off State printing\n");
}
else
{
@ -173,7 +195,7 @@ void serialDispatch(Serial* serial , WirelessRelayStore* relays, RgbLed* rgbled)
if(serial->dataIsWaiting())
{
char buffer[COMMAND_BUFFER_SIZE];
const int length = serial->getString(buffer, COMMAND_BUFFER_SIZE);
unsigned int length = serial->getString(buffer, COMMAND_BUFFER_SIZE);
if(length != 0)
{
if(length > 4 && strncmp(buffer, "relay", 5) == 0)