add support for signals
split main into more files
This commit is contained in:
parent
76e3bc0a76
commit
ab2767af18
10 changed files with 657 additions and 327 deletions
116
signaldispatch.h
Normal file
116
signaldispatch.h
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
#pragma once
|
||||
|
||||
void printSignalState(uint8_t id, Serial* serial)
|
||||
{
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE,
|
||||
"SIGNAL NUMBER: %u ADDRESS: %u SUBADDRESS: %u TYPE: %u CURRENT PACKET: %x STATE: %u\n",
|
||||
id, signals[id].getAddress(), signals[id].getSubaddress(), signals[id].getType(),
|
||||
signals[id].getPacket(), signals[id].getState());
|
||||
serial->write(buffer, SNPRINTF_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
int signalDispatch(char* inBuffer, Serial* serial)
|
||||
{
|
||||
if( strcmp(inBuffer, "add") == 0 )
|
||||
{
|
||||
char* token = strtok(NULL, " ");
|
||||
uint8_t address = 0;
|
||||
if(token != NULL)
|
||||
address = strtol(token, nullptr, 10);
|
||||
if(address != 0 && signals.remainingCapacity() > 0)
|
||||
{
|
||||
uint8_t subaddress = 0;
|
||||
uint8_t type = 0;
|
||||
|
||||
token = strtok(NULL, " ");
|
||||
if(token != NULL)
|
||||
subaddress = strtol(token, nullptr, 10);
|
||||
|
||||
token = strtok(NULL, " ");
|
||||
if(token != NULL)
|
||||
type = strtol(token, nullptr, 10);
|
||||
|
||||
signals.push_back(Signal(address, subaddress, type));
|
||||
serial->write_p(PSTR("SIGNAL saved! "));
|
||||
printSignalState(signals.count()-1, serial);
|
||||
|
||||
save_state();
|
||||
return 0;
|
||||
}
|
||||
serial->write_p(PSTR("Usage: signal add [address] [subaddress] [type]"));
|
||||
}
|
||||
else if( strcmp(inBuffer, "list") == 0 )
|
||||
{
|
||||
serial->write_p(PSTR("Signals:\n"));
|
||||
for(uint8_t i = 0; i < signals.count(); i++)
|
||||
printSignalState(i, serial);
|
||||
serial->putChar('\n');
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
uint8_t id = strtol(inBuffer, nullptr, 10);
|
||||
if(id < signals.count() )
|
||||
{
|
||||
setPower(true);
|
||||
char* token = strtok(NULL, " ");
|
||||
if(token != NULL && strcmp(token, "set") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " ");
|
||||
if(token != NULL)
|
||||
{
|
||||
uint8_t state = strtol(token, nullptr, 10);;
|
||||
signals[id].setState(state);
|
||||
serial->write_p(PSTR("Set signal state"));
|
||||
serial->write((int)state);
|
||||
serial->putChar('\n');
|
||||
printSignalState(id, serial);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(token != NULL && strcmp(token, "raw") == 0 )
|
||||
{
|
||||
token = strtok(NULL, " ");
|
||||
serial->flush();
|
||||
if(token != NULL)
|
||||
{
|
||||
cli();
|
||||
uint16_t i = strtol(token, nullptr, 16 );
|
||||
snprintf(buffer, SNPRINTF_BUFFER_SIZE, "SENDING: %x to %x\n", i, signals[id].getAddress());
|
||||
serial->write(buffer, strlen(buffer));
|
||||
while(!serial->dataIsWaiting())
|
||||
{
|
||||
signals[id].sendRaw(i);
|
||||
sei();
|
||||
_delay_ms(20);
|
||||
cli();
|
||||
}
|
||||
serial->write_p(PSTR("Finished\n"));
|
||||
serial->flush();
|
||||
sei();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(token != NULL && strcmp(token, "delete") == 0)
|
||||
{
|
||||
signals.erase(id);
|
||||
serial->write_p(PSTR("Signal: "));
|
||||
serial->write(id);
|
||||
serial->write_p(PSTR(" deleted\n"));
|
||||
save_state();
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write_p(PSTR("Not a valid command\n"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
serial->write_p(PSTR("Id out of range.\n"));
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
return -3;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue