Skip to content

Commit 4bc9088

Browse files
committed
Revert "Add a semaphore for tcpServer - UNTESTED"
This reverts commit d66c96d.
1 parent 936db2f commit 4bc9088

File tree

2 files changed

+49
-86
lines changed

2 files changed

+49
-86
lines changed

Firmware/RTK_Everywhere/RTK_Everywhere.ino

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,11 +343,6 @@ const TickType_t ringBuffer_longWait_ms = 300 / portTICK_PERIOD_MS;
343343
SemaphoreHandle_t ringBufferSemaphore = NULL;
344344
const char *ringBufferSemaphoreHolder = "None";
345345

346-
// tcpServer semaphore - prevent tcpServerClientSendData (handleGnssDataTask) and tcpServerUpdate
347-
// from gatecrashing each other. See #695 for why this is needed.
348-
SemaphoreHandle_t tcpServerSemaphore = NULL;
349-
const char *tcpServerSemaphoreHolder = "None";
350-
351346
// Display used/free space in menu and config page
352347
uint64_t sdCardSize;
353348
uint64_t sdFreeSpace;

Firmware/RTK_Everywhere/TcpServer.ino

Lines changed: 49 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -139,42 +139,26 @@ int32_t tcpServerClientSendData(int index, uint8_t *data, uint16_t length)
139139
{
140140
if (tcpServerClient[index])
141141
{
142-
// Use a semaphore to prevent tcpServerUpdate from gatecrashing
143-
if (tcpServerSemaphore == NULL)
144-
tcpServerSemaphore = xSemaphoreCreateMutex(); // Create the mutex
145-
146-
// Take the semaphore
147-
if (xSemaphoreTake(tcpServerSemaphore, 50 / portTICK_PERIOD_MS) == pdPASS)
142+
length = tcpServerClient[index]->write(data, length);
143+
if (length > 0)
148144
{
149-
tcpServerSemaphoreHolder = "tcpServerClientSendData";
150-
151-
length = tcpServerClient[index]->write(data, length);
145+
// Update the data sent flag when data successfully sent
152146
if (length > 0)
147+
tcpServerClientDataSent = tcpServerClientDataSent | (1 << index);
148+
if ((settings.debugTcpServer || PERIODIC_DISPLAY(PD_TCP_SERVER_CLIENT_DATA)) && (!inMainMenu))
153149
{
154-
// Update the data sent flag when data successfully sent
155-
if (length > 0)
156-
tcpServerClientDataSent = tcpServerClientDataSent | (1 << index);
157-
if ((settings.debugTcpServer || PERIODIC_DISPLAY(PD_TCP_SERVER_CLIENT_DATA)) && (!inMainMenu))
158-
{
159-
PERIODIC_CLEAR(PD_TCP_SERVER_CLIENT_DATA);
160-
systemPrintf("TCP server wrote %d bytes to %s\r\n", length,
161-
tcpServerClientIpAddress[index].toString().c_str());
162-
}
163-
}
164-
165-
// Failed to write the data
166-
else
167-
{
168-
// Done with this client connection
169-
tcpServerStopClient(index);
170-
length = 0;
150+
PERIODIC_CLEAR(PD_TCP_SERVER_CLIENT_DATA);
151+
systemPrintf("TCP server wrote %d bytes to %s\r\n", length,
152+
tcpServerClientIpAddress[index].toString().c_str());
171153
}
172-
173-
xSemaphoreGive(tcpServerSemaphore);
174154
}
155+
156+
// Failed to write the data
175157
else
176158
{
177-
systemPrintf("tcpServerClientSendData could not get semaphore - held by %s\r\n", tcpServerSemaphoreHolder);
159+
// Done with this client connection
160+
tcpServerStopClient(index);
161+
length = 0;
178162
}
179163
}
180164
return length;
@@ -569,62 +553,46 @@ void tcpServerUpdate()
569553
// and respond accordingly
570554
if (settings.enableNtripCaster || settings.baseCasterOverride)
571555
{
572-
// Use a semaphore to prevent tcpServerClientSendData from gatecrashing
573-
if (tcpServerSemaphore == NULL)
574-
tcpServerSemaphore = xSemaphoreCreateMutex(); // Create the mutex
575-
576-
// Take the semaphore
577-
if (xSemaphoreTake(tcpServerSemaphore, 50 / portTICK_PERIOD_MS) == pdPASS)
556+
// Read response from client
557+
char response[512];
558+
int spot = 0;
559+
while (tcpServerClient[index]->available())
560+
{
561+
response[spot++] = tcpServerClient[index]->read();
562+
if (spot == sizeof(response))
563+
spot = 0; // Wrap
564+
}
565+
response[spot] = '\0'; // Terminate string
566+
567+
if (strnstr(response, "GET / ", sizeof(response)) != NULL) // No mount point in header
568+
{
569+
if (settings.debugTcpServer)
570+
systemPrintln("Mount point table requested.");
571+
572+
// Respond with a single mountpoint
573+
const char fakeSourceTable[] =
574+
"SOURCETABLE 200 OK\r\nServer: SparkPNT Caster/1.0\r\nContent-Type: "
575+
"text/plain\r\nContent-Length: 96\r\n\r\nSTR;SparkBase;none;RTCM "
576+
"3.0;none;none;none;none;none;none;none;none;none;none;none;B;N;none;none";
577+
578+
tcpServerClient[index]->write(fakeSourceTable, strlen(fakeSourceTable));
579+
580+
tcpServerStopClient(index); // Disconnect from client
581+
}
582+
else if (strnstr(response, "GET /", sizeof(response)) != NULL) // Mount point in header
578583
{
579-
tcpServerSemaphoreHolder = "tcpServerUpdate";
580-
581-
// Read response from client
582-
char response[512];
583-
int spot = 0;
584-
while (tcpServerClient[index]->available())
585-
{
586-
response[spot++] = tcpServerClient[index]->read();
587-
if (spot == sizeof(response))
588-
spot = 0; // Wrap
589-
}
590-
response[spot] = '\0'; // Terminate string
591-
592-
if (strnstr(response, "GET / ", sizeof(response)) != NULL) // No mount point in header
593-
{
594-
if (settings.debugTcpServer)
595-
systemPrintln("Mount point table requested.");
596-
597-
// Respond with a single mountpoint
598-
const char fakeSourceTable[] =
599-
"SOURCETABLE 200 OK\r\nServer: SparkPNT Caster/1.0\r\nContent-Type: "
600-
"text/plain\r\nContent-Length: 96\r\n\r\nSTR;SparkBase;none;RTCM "
601-
"3.0;none;none;none;none;none;none;none;none;none;none;none;B;N;none;none";
602-
603-
tcpServerClient[index]->write(fakeSourceTable, strlen(fakeSourceTable));
604-
605-
tcpServerStopClient(index); // Disconnect from client
606-
}
607-
else if (strnstr(response, "GET /", sizeof(response)) != NULL) // Mount point in header
608-
{
609-
// NTRIP Client is sending us their mount point. Begin sending RTCM.
610-
if (settings.debugTcpServer)
611-
systemPrintln("NTRIP Client connected - Sending ICY 200 OK");
612-
613-
char confirmConnection[] = "ICY 200 OK\r\n";
614-
tcpServerClient[index]->write(confirmConnection, strlen(confirmConnection));
615-
}
616-
else
617-
{
618-
// Unknown response
619-
if (settings.debugTcpServer)
620-
systemPrintf("Unknown response: %s\r\n", response);
621-
}
622-
623-
xSemaphoreGive(tcpServerSemaphore);
584+
// NTRIP Client is sending us their mount point. Begin sending RTCM.
585+
if (settings.debugTcpServer)
586+
systemPrintln("NTRIP Client connected - Sending ICY 200 OK");
587+
588+
char confirmConnection[] = "ICY 200 OK\r\n";
589+
tcpServerClient[index]->write(confirmConnection, strlen(confirmConnection));
624590
}
625591
else
626592
{
627-
systemPrintf("tcpServerUpdate could not get semaphore - held by %s\r\n", tcpServerSemaphoreHolder);
593+
// Unknown response
594+
if (settings.debugTcpServer)
595+
systemPrintf("Unknown response: %s\r\n", response);
628596
}
629597
} // settings.enableNtripCaster == true || settings.baseCasterOverride == true
630598

0 commit comments

Comments
 (0)