improved UART Parser for LoRa
This commit is contained in:
parent
3e571a515d
commit
5ae054f314
@ -79,7 +79,7 @@ void LoRa_Process()
|
|||||||
if (e220ttl.available() > 1)
|
if (e220ttl.available() > 1)
|
||||||
{
|
{
|
||||||
ResponseContainer rc = e220ttl.receiveMessageRSSI();
|
ResponseContainer rc = e220ttl.receiveMessageRSSI();
|
||||||
// Is something goes wrong print error
|
// If something goes wrong, print error
|
||||||
if (rc.status.code != 1)
|
if (rc.status.code != 1)
|
||||||
{
|
{
|
||||||
Serial.println(rc.status.getResponseDescription());
|
Serial.println(rc.status.getResponseDescription());
|
||||||
@ -96,34 +96,45 @@ void LoRa_Process()
|
|||||||
#elif defined(FEATURE_ENABLE_UARTLORA)
|
#elif defined(FEATURE_ENABLE_UARTLORA)
|
||||||
|
|
||||||
static char packageInput[32];
|
static char packageInput[32];
|
||||||
static bool packageRecieved = false;
|
static bool packageReceived = false;
|
||||||
static unsigned int bufferPtr = 0;
|
static unsigned int bufferPtr = 0;
|
||||||
int recievedSize = 0;
|
int receivedSize = 0;
|
||||||
|
|
||||||
while (SerialLoRa.available() && packageRecieved == false)
|
while (SerialLoRa.available() && !packageReceived)
|
||||||
{
|
{
|
||||||
if (bufferPtr < sizeof(packageInput) - 1)
|
if (bufferPtr < sizeof(packageInput) - 1)
|
||||||
{
|
{
|
||||||
packageInput[bufferPtr] = SerialLoRa.read();
|
char c = SerialLoRa.read();
|
||||||
packageInput[bufferPtr + 1] = 0; // always terminate String
|
packageInput[bufferPtr] = c;
|
||||||
|
packageInput[bufferPtr + 1] = '\0'; // always terminate string
|
||||||
|
|
||||||
if (packageInput[bufferPtr] == '\n')
|
if (c == '\n')
|
||||||
{
|
{
|
||||||
packageRecieved = true;
|
packageReceived = true;
|
||||||
recievedSize = bufferPtr;
|
receivedSize = bufferPtr;
|
||||||
bufferPtr = 0;
|
bufferPtr = 0;
|
||||||
Debug_pushMessage("Got LoRa UART: %s\n", packageInput);
|
Debug_pushMessage("Got LoRa UART: %s\n", packageInput);
|
||||||
}
|
}
|
||||||
else if ((packageInput[bufferPtr] >= 0x30) || (packageInput[bufferPtr] <= 0x5A)) // only accept Numbers, UpperCase-Letters and some special chars
|
else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c == ' ' || c == ',' || c == '.')) // Accept numbers, uppercase letters, and some special chars
|
||||||
{
|
{
|
||||||
bufferPtr++;
|
bufferPtr++;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug_pushMessage("Invalid character received: %c\n", c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug_pushMessage("Buffer overflow. Resetting buffer.\n");
|
||||||
|
bufferPtr = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packageRecieved) {
|
if (packageReceived)
|
||||||
Parse_LoRa_UartCommand(packageInput, recievedSize);
|
{
|
||||||
packageRecieved = false;
|
Parse_LoRa_UartCommand(packageInput, receivedSize);
|
||||||
|
packageReceived = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -251,14 +262,14 @@ void Parse_LoRa_UartCommand(char input[], int size)
|
|||||||
while (ptr != NULL)
|
while (ptr != NULL)
|
||||||
{
|
{
|
||||||
strncpy(command, ptr, sizeof(command) - 1); // Platz für Nullterminator lassen
|
strncpy(command, ptr, sizeof(command) - 1); // Platz für Nullterminator lassen
|
||||||
command[sizeof(command) - 1] = '\0'; // Nullterminator setzen
|
command[sizeof(command) - 1] = '\0'; // Nullterminator setzen
|
||||||
|
|
||||||
ptr = strtok(NULL, delimiter);
|
ptr = strtok(NULL, delimiter);
|
||||||
|
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
{
|
{
|
||||||
strncpy(value, ptr, sizeof(value) - 1); // Platz für Nullterminator lassen
|
strncpy(value, ptr, sizeof(value) - 1); // Platz für Nullterminator lassen
|
||||||
value[sizeof(value) - 1] = '\0'; // Nullterminator setzen
|
value[sizeof(value) - 1] = '\0'; // Nullterminator setzen
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user