Skip to content

Commit 6d0aab9

Browse files
committed
[Terminal] resolve issues with string names and size
1 parent 6d731d4 commit 6d0aab9

File tree

2 files changed

+97
-20
lines changed

2 files changed

+97
-20
lines changed

Source/GUI/Qt.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,12 @@
287287
,"CMD:Modem:!<data Send raw packet>"
288288
,"CMD:Modem:V<1/0 Silent Mode>"
289289
,"CMD:Modem:v<1/0 Verbose Mode>"
290-
,"CMD:Settings:APRS:Beacon Frequency:<0 to 4,294,967,295>"
290+
,"CMD:Settings:APRS:Beacon Enabled:<True/False>"
291+
,"CMD:Settings:APRS:Beacon Distance:<-3.4028235E+38 to 3.4028235E+38>"
292+
,"CMD:Settings:APRS:Beacon Idle Time:<0 to 4,294,967,295>"
291293
,"CMD:Settings:APRS:Raw Packet:<alphanumeric 99 char max>"
292294
,"CMD:Settings:APRS:Comment:<alphanumeric 99 char max>"
293-
,"CMD:Settings:APRS:Message:<alphanumeric 99 char max>"
295+
,"CMD:Settings:APRS:Message Text:<alphanumeric 99 char max>"
294296
,"CMD:Settings:APRS:Recipient Callsign:<alphanumeric 6 char max>"
295297
,"CMD:Settings:APRS:Recipient SSID:<alphanumeric 2 char max>"
296298
,"CMD:Settings:APRS:My Callsign:<alphanumeric 6 char max>"
@@ -308,8 +310,7 @@
308310
,"CMD:Settings:APRS:Tail:<0 to 65,535>"
309311
,"CMD:Settings:APRS:Retry Count:<0 to 65,535>"
310312
,"CMD:Settings:APRS:Retry Interval:<0 to 65,535>"
311-
,"CMD:Settings:GPS:Update Freq:<0 to 4,294,967,295>"
312-
,"CMD:Settings:GPS:Pos Tolerance:<0-100%>"
313+
,"CMD:Settings:GPS:Pos Tolerance:<-3.4028235E+38 to 3.4028235E+38>"
313314
,"CMD:Settings:GPS:Dest Latitude:<-3.4028235E+38 to 3.4028235E+38>"
314315
,"CMD:Settings:GPS:Dest Longitude:<-3.4028235E+38 to 3.4028235E+38>"
315316
,"CMD:Settings:Display:Timeout:<0 to 4,294,967,295>"
@@ -510,7 +511,7 @@ def create_control_panel(self):
510511
# create the combobox
511512
self.baud_combo = QComboBox()
512513
self.baud_combo.addItems(["9600", "19200", "38400", "57600", "115200"])
513-
self.baud_combo.setCurrentText("115200")
514+
self.baud_combo.setCurrentText("9600")
514515
self.add_movable_widget(baud_combo_qbox, self.baud_combo, [0,0,0,0], Qt.AlignmentFlag.AlignLeft)
515516
# set the spacing of all items in the port horizontal layout to 0 so they are all clos
516517
baud_combo_qbox.setSpacing(0)
@@ -1027,10 +1028,8 @@ def render_log_entry(self, entry):
10271028
tag = entry.get("tag", "Received")
10281029
global IS_DARK_MODE
10291030
if IS_DARK_MODE:
1030-
print("dark mode color")
10311031
color = self.tag_colors_dark_mode.get(tag, "white")
10321032
else:
1033-
print("light mode color")
10341033
color = self.tag_colors_light_mode.get(tag, "black")
10351034

10361035
fmt = QTextCharFormat()

Source/HamMessenger/HamMessenger.ino

Lines changed: 91 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3401,6 +3401,10 @@ const char version[] = __DATE__ " " __TIME__;
34013401
const char* InvalidData_Float = "Invalid data. Expected float -3.4028235E+38-3.4028235E+38 instead got ";
34023402
const char* InvalidData_UnsignedLong = "Invalid data. Expected unsigned long 0-4294967295 instead got ";
34033403
const char* InvalidData_TrueFalse = "Invalid data. Expected True/False or 1/0";
3404+
const char* InvalidData_String99 = "Invalid data. Expected string <= 99 chars";
3405+
const char* InvalidData_String6 = "Invalid data. Expected string <= 6 chars";
3406+
const char* InvalidData_String2 = "Invalid data. Expected string <= 2 chars";
3407+
const char* InvalidData_String1 = "Invalid data. Expected string <= 1 chars";
34043408

34053409
const char exNone[] PROGMEM = ":<Unknown>";
34063410
const char exBool[] PROGMEM = ":<True/False>";
@@ -3529,6 +3533,9 @@ const char version[] = __DATE__ " " __TIME__;
35293533
Serial.println();
35303534
}
35313535

3536+
const byte MAX_LEN = 250;
3537+
char inData[MAX_LEN] = {'\0'};
3538+
byte index = 0;
35323539
const char CMD_DELETE[] PROGMEM = "Delete";
35333540
const char CMD_PRINT[] PROGMEM = "Print";
35343541
const char CMD_MODEM[] PROGMEM = "Modem";
@@ -3539,15 +3546,25 @@ const char version[] = __DATE__ " " __TIME__;
35393546
readModem();
35403547
// usb serial commands are handled here
35413548
bool gotCMD = false;
3542-
char inData[250];
3543-
if (Serial.available()) {
3544-
memset(inData,'\0',sizeof(inData));
3545-
Serial.readBytesUntil('\n', inData, sizeof(inData));
3546-
Serial.print(F("ECHO "));Serial.println(inData);
3547-
if (inData[0]=='C' && inData[1]=='M' && inData[2]=='D' && inData[3]==':') gotCMD=true;
3548-
if (inData[0]=='?') printOutSerialCommands();
3549-
//if (inData[0]=='M' && inData[1]=='S' && inData[2]=='G' && inData[3]==':') sendMessage=true;
3549+
while (Serial.available()) {
3550+
char c = Serial.read();
3551+
if (c == '\n') {
3552+
inData[index] = '\0';
3553+
Serial.print(F("ECHO ["));Serial.print(index+1);Serial.print(F("] "));Serial.println(inData);
3554+
if (inData[0]=='C' && inData[1]=='M' && inData[2]=='D' && inData[3]==':') gotCMD=true;
3555+
if (inData[0]=='?') printOutSerialCommands();
3556+
index = 0;
3557+
} else {
3558+
if (index < MAX_LEN - 1) {
3559+
inData[index++] = c;
3560+
} else {
3561+
// we got to the end of our buffer and never got a \n so lets start over
3562+
index = 0;
3563+
break;
3564+
}
3565+
}
35503566
}
3567+
35513568
if (gotCMD){
35523569
// get the command
35533570
char CMD[30]={'\0'};
@@ -3732,6 +3749,10 @@ const char version[] = __DATE__ " " __TIME__;
37323749

37333750
} else if (strstr(Setting, MenuItems_Settings_APRS[3]) != NULL) { // "Raw Packet"
37343751
while (inData[i] != '\n' && inData[i] != '\0') {
3752+
if (k>99) { // string100 should be no longer than 99 chars (plus \n)
3753+
Serial.print(InvalidData_String99);Serial.println(inData_Value);
3754+
return;
3755+
}
37353756
inData_Value[k] = inData[i];
37363757
i++; k++;
37373758
}
@@ -3743,6 +3764,10 @@ const char version[] = __DATE__ " " __TIME__;
37433764

37443765
} else if (strstr(Setting, MenuItems_Settings_APRS[4]) != NULL) { // "Comment"
37453766
while (inData[i] != '\n' && inData[i] != '\0') {
3767+
if (k>99) { // string100 should be no longer than 99 chars (plus \n)
3768+
Serial.print(InvalidData_String99);Serial.println(inData_Value);
3769+
return;
3770+
}
37463771
inData_Value[k] = inData[i];
37473772
i++; k++;
37483773
}
@@ -3754,6 +3779,10 @@ const char version[] = __DATE__ " " __TIME__;
37543779

37553780
} else if (strstr(Setting, MenuItems_Settings_APRS[5]) != NULL) { // "Message"
37563781
while (inData[i] != '\n' && inData[i] != '\0') {
3782+
if (k>99) { // string100 should be no longer than 99 chars (plus \n)
3783+
Serial.print(InvalidData_String99);Serial.println(inData_Value);
3784+
return;
3785+
}
37573786
inData_Value[k] = inData[i];
37583787
i++; k++;
37593788
}
@@ -3765,6 +3794,10 @@ const char version[] = __DATE__ " " __TIME__;
37653794

37663795
} else if (strstr(Setting, MenuItems_Settings_APRS[6]) != NULL) { // "Recipient Callsign"
37673796
while (inData[i] != '\n' && inData[i] != '\0') {
3797+
if (k>6) { // string7 should be no longer than 6 chars (plus \n)
3798+
Serial.print(InvalidData_String6);Serial.println(inData_Value);
3799+
return;
3800+
}
37683801
inData_Value[k] = inData[i];
37693802
i++; k++;
37703803
}
@@ -3776,6 +3809,10 @@ const char version[] = __DATE__ " " __TIME__;
37763809

37773810
} else if (strstr(Setting, MenuItems_Settings_APRS[7]) != NULL) { // "Recipient SSID"
37783811
while (inData[i] != '\n' && inData[i] != '\0') {
3812+
if (k>2) { // string3 should be no longer than 2 chars (plus \n)
3813+
Serial.print(InvalidData_String2);Serial.println(inData_Value);
3814+
return;
3815+
}
37793816
inData_Value[k] = inData[i];
37803817
i++; k++;
37813818
}
@@ -3788,6 +3825,10 @@ const char version[] = __DATE__ " " __TIME__;
37883825

37893826
} else if (strstr(Setting, MenuItems_Settings_APRS[8]) != NULL) { // "My Callsign"
37903827
while (inData[i] != '\n' && inData[i] != '\0') {
3828+
if (k>6) { // string7 should be no longer than 6 chars (plus \n)
3829+
Serial.print(InvalidData_String6);Serial.println(inData_Value);
3830+
return;
3831+
}
37913832
inData_Value[k] = inData[i];
37923833
i++; k++;
37933834
}
@@ -3799,6 +3840,10 @@ const char version[] = __DATE__ " " __TIME__;
37993840

38003841
} else if (strstr(Setting, MenuItems_Settings_APRS[9]) != NULL) { // "Callsign SSID"
38013842
while (inData[i] != '\n' && inData[i] != '\0') {
3843+
if (k>2) { // string3 should be no longer than 2 chars (plus \n)
3844+
Serial.print(InvalidData_String2);Serial.println(inData_Value);
3845+
return;
3846+
}
38023847
inData_Value[k] = inData[i];
38033848
i++; k++;
38043849
}
@@ -3811,6 +3856,10 @@ const char version[] = __DATE__ " " __TIME__;
38113856

38123857
} else if (strstr(Setting, MenuItems_Settings_APRS[10]) != NULL) { // "Destination Callsign"
38133858
while (inData[i] != '\n' && inData[i] != '\0') {
3859+
if (k>6) { // string7 should be no longer than 6 chars (plus \n)
3860+
Serial.print(InvalidData_String6);Serial.println(inData_Value);
3861+
return;
3862+
}
38143863
inData_Value[k] = inData[i];
38153864
i++; k++;
38163865
}
@@ -3822,6 +3871,10 @@ const char version[] = __DATE__ " " __TIME__;
38223871

38233872
} else if (strstr(Setting, MenuItems_Settings_APRS[11]) != NULL) { // "Destination SSID"
38243873
while (inData[i] != '\n' && inData[i] != '\0') {
3874+
if (k>2) { // string3 should be no longer than 2 chars (plus \n)
3875+
Serial.print(InvalidData_String2);Serial.println(inData_Value);
3876+
return;
3877+
}
38253878
inData_Value[k] = inData[i];
38263879
i++; k++;
38273880
}
@@ -3834,6 +3887,10 @@ const char version[] = __DATE__ " " __TIME__;
38343887

38353888
} else if (strstr(Setting, MenuItems_Settings_APRS[12]) != NULL) { // "PATH1 Callsign"
38363889
while (inData[i] != '\n' && inData[i] != '\0') {
3890+
if (k>6) { // string7 should be no longer than 6 chars (plus \n)
3891+
Serial.print(InvalidData_String6);Serial.println(inData_Value);
3892+
return;
3893+
}
38373894
inData_Value[k] = inData[i];
38383895
i++; k++;
38393896
}
@@ -3845,6 +3902,10 @@ const char version[] = __DATE__ " " __TIME__;
38453902

38463903
} else if (strstr(Setting, MenuItems_Settings_APRS[13]) != NULL) { // "PATH1 SSID"
38473904
while (inData[i] != '\n' && inData[i] != '\0') {
3905+
if (k>2) { // string3 should be no longer than 2 chars (plus \n)
3906+
Serial.print(InvalidData_String2);Serial.println(inData_Value);
3907+
return;
3908+
}
38483909
inData_Value[k] = inData[i];
38493910
i++; k++;
38503911
}
@@ -3857,6 +3918,10 @@ const char version[] = __DATE__ " " __TIME__;
38573918

38583919
} else if (strstr(Setting, MenuItems_Settings_APRS[14]) != NULL) { // "PATH2 Callsign"
38593920
while (inData[i] != '\n' && inData[i] != '\0') {
3921+
if (k>6) { // string7 should be no longer than 6 chars (plus \n)
3922+
Serial.print(InvalidData_String6);Serial.println(inData_Value);
3923+
return;
3924+
}
38603925
inData_Value[k] = inData[i];
38613926
i++; k++;
38623927
}
@@ -3868,6 +3933,10 @@ const char version[] = __DATE__ " " __TIME__;
38683933

38693934
} else if (strstr(Setting, MenuItems_Settings_APRS[15]) != NULL) { // "PATH2 SSID"
38703935
while (inData[i] != '\n' && inData[i] != '\0') {
3936+
if (k>2) { // string3 should be no longer than 2 chars (plus \n)
3937+
Serial.print(InvalidData_String2);Serial.println(inData_Value);
3938+
return;
3939+
}
38713940
inData_Value[k] = inData[i];
38723941
i++; k++;
38733942
}
@@ -3880,6 +3949,10 @@ const char version[] = __DATE__ " " __TIME__;
38803949

38813950
} else if (strstr(Setting, MenuItems_Settings_APRS[16]) != NULL) { // "Symbol"
38823951
while (inData[i] != '\n' && inData[i] != '\0') {
3952+
if (k>1) { // string2 should be no longer than 1 chars (plus \n)
3953+
Serial.print(InvalidData_String1);Serial.println(inData_Value);
3954+
return;
3955+
}
38833956
inData_Value[k] = inData[i];
38843957
i++; k++;
38853958
}
@@ -3892,6 +3965,10 @@ const char version[] = __DATE__ " " __TIME__;
38923965

38933966
} else if (strstr(Setting, MenuItems_Settings_APRS[17]) != NULL) { // "Table"
38943967
while (inData[i] != '\n' && inData[i] != '\0') {
3968+
if (k>1) { // string2 should be no longer than 1 chars (plus \n)
3969+
Serial.print(InvalidData_String1);Serial.println(inData_Value);
3970+
return;
3971+
}
38953972
inData_Value[k] = inData[i];
38963973
i++; k++;
38973974
}
@@ -4225,13 +4302,10 @@ const char version[] = __DATE__ " " __TIME__;
42254302
void writeStructToSd(File& file, void* dataPtr, size_t dataSize, const char* label, bool addNewline = true) {
42264303
if (file) {
42274304
uint32_t size = file.size();
4228-
//if (size > MAX_FILE_SIZE * WARN_THRESHOLD) {
42294305
if (size >= WARN_AT_BYTES) {
42304306
Serial.print(F("[WARNING] "));
42314307
Serial.print(label);
42324308
Serial.print(F(" file is getting large: "));
4233-
//Serial.print(size);
4234-
//Serial.println(F(" bytes."));
42354309
printFormattedSize(size);
42364310
Serial.println(F("). Consider offloading or deleting."));
42374311
}
@@ -4452,8 +4526,12 @@ void extractMsgCallParts(const char input[15], char callsign[7], char ssid[3]) {
44524526
#pragma endregion
44534527

44544528
void setup(){
4455-
4456-
Serial.begin(115200);
4529+
// chose the baud rate wisely
4530+
// the arduino has a serial buffer size of 64 bytes.
4531+
// if the data is received too fast, the buffer may overflow before the arduino gets to Serial.read() it
4532+
// at 9600 baud, we can read a 131 char string without losing data. this is long enough for our 99 char limit for strings (raw, comment, and message) plus the command structure
4533+
// for example: CMD:Settings:APRS:Message Text:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
4534+
Serial.begin(9600);
44574535
Serial1.begin(9600); // modem
44584536
Serial2.begin(9600); // gps
44594537
while (!Serial1) // wait for modem

0 commit comments

Comments
 (0)