Added support for a 16-char display to be received from the IOP, with a

selectable timeout.

Verified the basics of it working.

Subsequently updated with better timeout code.  This compiles, but has
not been tested.
This commit is contained in:
Rob French 2020-06-06 00:07:50 -05:00
parent 5a6c8308d3
commit bbf883d3c5
2 changed files with 46 additions and 13 deletions

View File

@ -73,8 +73,8 @@ void iopSendMode(char cw_mode, char is_usb, char digi_mode, char is_test)
} }
unsigned int skipTimeCount = 0; unsigned int skipTimeCount = 0;
byte CAT_BUFF[5]; byte CAT_BUFF[34];
byte CAT_SNDBUFF[5]; byte CAT_SNDBUFF[34];
void SendCatData(byte sendCount) void SendCatData(byte sendCount)
{ {
@ -812,6 +812,7 @@ byte rxBufferCheckCount = 0;
byte isProcessCheck_Cat = 0; byte isProcessCheck_Cat = 0;
char iopStatusWindow[4] = " "; // may need to move this if it's not visible to ubitx_lcd_1602 char iopStatusWindow[4] = " "; // may need to move this if it's not visible to ubitx_lcd_1602
char iopMenuDisplay[17] = " ";
// KC4UPR - these are used to delay the display of the Smeter, if the // KC4UPR - these are used to delay the display of the Smeter, if the
// IOP status has recently been displayed, to give time to see it. // IOP status has recently been displayed, to give time to see it.
@ -819,6 +820,8 @@ char iopStatusWindow[4] = " "; // may need to move this if it's not visible t
#define SMETER_DELAY_TIME 5000 #define SMETER_DELAY_TIME 5000
bool displaySmeter = true; bool displaySmeter = true;
int delaySmeter; int delaySmeter;
int delayTopLine = 0;
int stateTopLine = 0;
//fromType normal : 0, TX : 1, CW_STRAIGHT : 2, CW_PADDLE : 3, CW_AUTOMODE : 4 //fromType normal : 0, TX : 1, CW_STRAIGHT : 2, CW_PADDLE : 3, CW_AUTOMODE : 4
//if cw mode, no delay //if cw mode, no delay
@ -865,16 +868,13 @@ void Check_Cat(byte fromType)
//Arived CAT DATA //Arived CAT DATA
// KC4UPR - IOP update - 6 characters; first character determines mode (CAT or IOP) // KC4UPR - IOP update - 6 characters; first character determines mode (CAT or IOP)
for (i = 0; i < 6; i++) { //5; i++) // Will adjust based on readlength
if (i == 0) {
byte first = Serial.read(); byte first = Serial.read();
readPrefix = byteToPrefix(first); readPrefix = byteToPrefix(first);
readLength = byteToLength(first); readLength = byteToLength(first);
} else { for (int i = 0; i < readLength; i++) {
CAT_BUFF[i-1] = Serial.read(); 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 // 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. // it alone for now.
@ -884,7 +884,7 @@ void Check_Cat(byte fromType)
isProcessCheck_Cat = 1; isProcessCheck_Cat = 1;
if (readPrefix == IOP_PREFIX) { if (readPrefix == IOP_PREFIX) {
recvIOPMessage(msg, CAT_BUFF, 5); // not super robust... if IOP ever sends more (or less) than a 5 (6) byte message recvIOPMessage(msg, CAT_BUFF, readLength); // not super robust... if IOP ever sends more (or less) than a 5 (6) byte message
// following assumes it's a status message, 4 chars (including trailing null, which I'm ignoring... // following assumes it's a status message, 4 chars (including trailing null, which I'm ignoring...
switch(msg.id) { switch(msg.id) {
case IOP_SSB_STATUS_MSG: case IOP_SSB_STATUS_MSG:
@ -901,6 +901,20 @@ void Check_Cat(byte fromType)
case IOP_MODE_REQUEST: case IOP_MODE_REQUEST:
iopSendMode(cwMode, isUSB, digiMode, isTest); iopSendMode(cwMode, isUSB, digiMode, isTest);
break; break;
case IOP_MENU_DISPLAY_MSG:
for (int i = 0; i < 16; i++) {
iopMenuDisplay[i] = msg.data[i+1];
}
if (int8_t(msg.data[0]) == 0) {
stateTopLine = 4;
} else if (int8_t(msg.data[0]) < 0) {
stateTopLine = 0;
} else { // > 0
delayTopLine = millis() + (int8_t(msg.data[0]) * 1000);
stateTopLine = 2;
}
break;
} }
} else if (readPrefix == CAT_PREFIX) { } else if (readPrefix == CAT_PREFIX) {

View File

@ -530,6 +530,25 @@ int freqScrollPosition = 0;
void updateLine2Buffer(char displayType) void updateLine2Buffer(char displayType)
{ {
unsigned long tmpFreq = 0; unsigned long tmpFreq = 0;
if ((stateTopLine == 2) || (stateTopLine == 4)) {
strcpy(line2Buffer, iopMenuDisplay);
if (stateTopLine == 4) {
stateTopLine = 3;
} else {
stateTopLine = 1;
}
}
if (stateTopLine == 3) {
return;
} else if (stateTopLine == 1) {
if (delayTopLine < millis()) {
stateTopLine = 0;
} else {
return;
}
}
if (ritOn) if (ritOn)
{ {
strcpy(line2Buffer, "RitTX:"); strcpy(line2Buffer, "RitTX:");
@ -738,7 +757,7 @@ void idle_process()
return; return;
//if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message //if line2DisplayStatus == 0 <-- this condition is clear Line, you can display any message
if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2)) { if (line2DisplayStatus == 0 || (((displayOption1 & 0x04) == 0x04) && line2DisplayStatus == 2) || stateTopLine > 0) {
if (checkCount++ > 1) if (checkCount++ > 1)
{ {
updateLine2Buffer(0); //call by scheduler updateLine2Buffer(0); //call by scheduler