Add chunkWrite command handler for secondary serial (Allows for writes over secondary)

This commit is contained in:
Josh Stewart 2023-10-24 12:18:00 +11:00
parent 8fa408c598
commit 00c558ff39
2 changed files with 50 additions and 42 deletions

View File

@ -190,6 +190,10 @@ void legacySerialCommand(void)
Serial.write(highByte(currentStatus.freeRAM));
break;
case 'M':
legacySerialHandler(currentCommand, Serial, serialStatusFlag);
break;
case 'N': // Displays a new line. Like pushing enter in a text editor
Serial.println();
break;
@ -391,48 +395,6 @@ void legacySerialCommand(void)
break;
case 'M':
serialStatusFlag = SERIAL_COMMAND_INPROGRESS_LEGACY;
if(chunkPending == false)
{
//This means it's a new request
//7 bytes required:
//2 - Page identifier
//2 - offset
//2 - Length
//1 - 1st New value
if(Serial.available() >= 7)
{
byte offset1, offset2, length1, length2;
Serial.read(); // First byte of the page identifier can be ignored. It's always 0
currentPage = Serial.read();
//currentPage = 1;
offset1 = Serial.read();
offset2 = Serial.read();
valueOffset = word(offset2, offset1);
length1 = Serial.read();
length2 = Serial.read();
chunkSize = word(length2, length1);
//Regular page data
chunkPending = true;
chunkComplete = 0;
}
}
//This CANNOT be an else of the above if statement as chunkPending gets set to true above
if(chunkPending == true)
{
while( (Serial.available() > 0) && (chunkComplete < chunkSize) )
{
setPageValue(currentPage, (valueOffset + chunkComplete), Serial.read());
chunkComplete++;
}
if(chunkComplete >= chunkSize) { serialStatusFlag = SERIAL_INACTIVE; chunkPending = false; }
}
break;
case 'w':
//No w commands are supported in legacy mode. This should never be called
if(Serial.available() >= 7)
@ -586,6 +548,48 @@ void legacySerialHandler(byte cmd, Stream &targetPort, SerialStatus &targetStatu
}
break;
case 'M':
targetStatusFlag = SERIAL_COMMAND_INPROGRESS_LEGACY;
if(chunkPending == false)
{
//This means it's a new request
//7 bytes required:
//2 - Page identifier
//2 - offset
//2 - Length
//1 - 1st New value
if(targetPort.available() >= 7)
{
byte offset1, offset2, length1, length2;
targetPort.read(); // First byte of the page identifier can be ignored. It's always 0
currentPage = targetPort.read();
//currentPage = 1;
offset1 = targetPort.read();
offset2 = targetPort.read();
valueOffset = word(offset2, offset1);
length1 = targetPort.read();
length2 = targetPort.read();
chunkSize = word(length2, length1);
//Regular page data
chunkPending = true;
chunkComplete = 0;
}
}
//This CANNOT be an else of the above if statement as chunkPending gets set to true above
if(chunkPending == true)
{
while( (targetPort.available() > 0) && (chunkComplete < chunkSize) )
{
setPageValue(currentPage, (valueOffset + chunkComplete), targetPort.read());
chunkComplete++;
}
if(chunkComplete >= chunkSize) { targetStatusFlag = SERIAL_INACTIVE; chunkPending = false; }
}
break;
case 'p':
targetStatusFlag = SERIAL_COMMAND_INPROGRESS_LEGACY;

View File

@ -137,6 +137,10 @@ void secondserial_Command(void)
*/
break;
}
case 'M':
legacySerialHandler(currentSecondaryCommand, secondarySerial, serialSecondaryStatusFlag);
break;
case 'n': // sends the bytes of realtime values from the NEW CAN list
//sendValues(0, NEW_CAN_PACKET_SIZE, 0x32, secondarySerial, serialSecondaryStatusFlag); //send values to serial3