Working! Implemented a more reasonable serial reader.
This commit is contained in:
parent
f588a89ee7
commit
1a1e92a709
@ -832,51 +832,53 @@ void Check_Cat(byte fromType)
|
||||
|
||||
static PrefixID readPrefix;
|
||||
static uint8_t readLength;
|
||||
static IOPMessage msg;
|
||||
static IOPMessage msg;
|
||||
static bool read_in_progress = false;
|
||||
|
||||
//Check Serial Port Buffer
|
||||
if (Serial.available() == 0)
|
||||
if (Serial.available() == 0 && !read_in_progress)
|
||||
{
|
||||
//Set Buffer Clear status
|
||||
rxBufferCheckCount = 0;
|
||||
//rxBufferCheckCount = 0;
|
||||
return;
|
||||
}
|
||||
// KC4UPR - IOP update: changed this to 6 characters, because we're going to have a
|
||||
// first character which defines if this is CAT or IOP.
|
||||
else if (Serial.available() < 6) //5)
|
||||
else // if (Serial.available() < 6) //5)
|
||||
{
|
||||
//First Arrived
|
||||
if (rxBufferCheckCount == 0)
|
||||
{
|
||||
if (!read_in_progress) {
|
||||
byte first = Serial.read();
|
||||
readPrefix = byteToPrefix(first);
|
||||
readLength = byteToLength(first);
|
||||
|
||||
rxBufferCheckCount = Serial.available();
|
||||
rxBufferArriveTime = millis() + CAT_RECEIVE_TIMEOUT; //Set time for timeout
|
||||
}
|
||||
else if (rxBufferArriveTime < millis()) //timeout
|
||||
{
|
||||
//Clear Buffer
|
||||
for (i = 0; i < Serial.available(); i++)
|
||||
rxBufferCheckCount = Serial.read();
|
||||
rxBufferArriveTime = millis() + CAT_RECEIVE_TIMEOUT;
|
||||
|
||||
rxBufferCheckCount = 0;
|
||||
read_in_progress = true;
|
||||
}
|
||||
else if (rxBufferCheckCount < Serial.available()) //increase buffer count, slow arrived
|
||||
{
|
||||
rxBufferCheckCount = Serial.available();
|
||||
rxBufferArriveTime = millis() + CAT_RECEIVE_TIMEOUT; //Set time for timeout
|
||||
|
||||
if (Serial.available() < readLength) { // not ready to read everything yet (not enough bytes)
|
||||
|
||||
if (rxBufferCheckCount < Serial.available()) { // increase buffer count, slow arrival
|
||||
rxBufferCheckCount = Serial.available();
|
||||
rxBufferArriveTime = millis() + CAT_RECEIVE_TIMEOUT; // update time for timeout
|
||||
|
||||
} else if (rxBufferArriveTime < millis()) { // timeout, so clear buffer
|
||||
for (i = 0; i < Serial.available(); i++)
|
||||
rxBufferCheckCount = Serial.read();
|
||||
rxBufferCheckCount = 0;
|
||||
read_in_progress = false;
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < readLength; i++) {
|
||||
CAT_BUFF[i] = Serial.read();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//Arived CAT DATA
|
||||
// KC4UPR - IOP update - 6 characters; first character determines mode (CAT or IOP)
|
||||
// Will adjust based on readlength
|
||||
byte first = Serial.read();
|
||||
readPrefix = byteToPrefix(first);
|
||||
readLength = byteToLength(first);
|
||||
for (int i = 0; i < readLength; i++) {
|
||||
CAT_BUFF[i] = Serial.read();
|
||||
}
|
||||
|
||||
|
||||
// KC4UPR: I don't understand why this is here or how/when it will ever get called, but I will leave
|
||||
// it alone for now.
|
||||
if (isProcessCheck_Cat == 1)
|
||||
@ -1013,6 +1015,7 @@ void Check_Cat(byte fromType)
|
||||
}
|
||||
|
||||
isProcessCheck_Cat = 0;
|
||||
read_in_progress = false;
|
||||
}
|
||||
|
||||
void Init_Cat(long baud, int portConfig)
|
||||
|
Loading…
Reference in New Issue
Block a user