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

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -9,11 +9,11 @@ bool stopped = false;
ISR (USART_RX_vect) //I have seen worse interrupt sintax ISR (USART_RX_vect) //I have seen worse interrupt sintax
{ {
rxBuffer[interruptIndex % BUFFER_SIZE] = UDR0; rxBuffer[interruptIndex % BUFFER_SIZE] = UDR0;
/*if (interruptIndex - BUFFER_SIZE > 0 && _rxIndex - BUFFER_SIZE > 0) if (interruptIndex - BUFFER_SIZE > 0 && _rxIndex - BUFFER_SIZE > 0)
{ {
interruptIndex -= BUFFER_SIZE; interruptIndex -= BUFFER_SIZE;
_rxIndex -= BUFFER_SIZE; _rxIndex -= BUFFER_SIZE;
}*/ }
if(serialFlowControl && !stopped && interruptIndex - _rxIndex > BUFFER_SIZE - 64) if(serialFlowControl && !stopped && interruptIndex - _rxIndex > BUFFER_SIZE - 64)
{ {
loop_until_bit_is_set(UCSR0A, UDRE0); loop_until_bit_is_set(UCSR0A, UDRE0);

View File

@ -1,7 +1,7 @@
#ifndef SERIAL_H #ifndef SERIAL_H
#define SERIAL_H #define SERIAL_H
#define BAUD 19200 #define BAUD 38400
#define BUFFER_SIZE 1024 #define BUFFER_SIZE 1024
#include <util/setbaud.h> #include <util/setbaud.h>