broken serial
This commit is contained in:
Binary file not shown.
Binary file not shown.
36
main.cpp
36
main.cpp
@ -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)
|
||||
|
BIN
rgbcontroller
BIN
rgbcontroller
Binary file not shown.
1178
rgbcontroller.hex
1178
rgbcontroller.hex
File diff suppressed because it is too large
Load Diff
@ -9,11 +9,11 @@ bool stopped = false;
|
||||
ISR (USART_RX_vect) //I have seen worse interrupt sintax
|
||||
{
|
||||
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;
|
||||
_rxIndex -= BUFFER_SIZE;
|
||||
}*/
|
||||
}
|
||||
if(serialFlowControl && !stopped && interruptIndex - _rxIndex > BUFFER_SIZE - 64)
|
||||
{
|
||||
loop_until_bit_is_set(UCSR0A, UDRE0);
|
||||
|
Reference in New Issue
Block a user