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];
|
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)
|
||||||
|
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
|
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);
|
||||||
|
Reference in New Issue
Block a user