Skip to content

Commit 7b8dc05

Browse files
committed
Add socketReadCallbackPlus - provides proper support for UDP & binary TCP data
1 parent d0d6428 commit 7b8dc05

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

keywords.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ processReadEvent KEYWORD2
5151
poll KEYWORD2
5252
setSocketListenCallback KEYWORD2
5353
setSocketReadCallback KEYWORD2
54+
setSocketReadCallbackPlus KEYWORD2
5455
setSocketCloseCallback KEYWORD2
5556
setGpsReadCallback KEYWORD2
5657
setSIMstateReportCallback KEYWORD2

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ SARA_R5::SARA_R5(int powerPin, int resetPin, uint8_t maxInitDepth)
2929
_maxInitDepth = maxInitDepth;
3030
_socketListenCallback = NULL;
3131
_socketReadCallback = NULL;
32+
_socketReadCallbackPlus = NULL;
3233
_socketCloseCallback = NULL;
3334
_gpsRequestCallback = NULL;
3435
_simStateReportCallback = NULL;
@@ -473,6 +474,11 @@ void SARA_R5::setSocketReadCallback(void (*socketReadCallback)(int, String))
473474
_socketReadCallback = socketReadCallback;
474475
}
475476

477+
void SARA_R5::setSocketReadCallbackPlus(void (*socketReadCallbackPlus)(int, const char *, int, IPAddress, int)) // socket, data, length, remoteAddress, remotePort
478+
{
479+
_socketReadCallbackPlus = socketReadCallbackPlus;
480+
}
481+
476482
void SARA_R5::setSocketCloseCallback(void (*socketCloseCallback)(int))
477483
{
478484
_socketCloseCallback = socketCloseCallback;
@@ -4011,7 +4017,17 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndication(int socket, int length)
40114017

40124018
if (_socketReadCallback != NULL)
40134019
{
4014-
_socketReadCallback(socket, String(readDest));
4020+
String dataAsString; // Create an empty string
4021+
for (int i = 0; i < length; i++) // Copy the data from readDest into the String in a binary-compatible way
4022+
dataAsString.concat(readDest[i]);
4023+
_socketReadCallback(socket, dataAsString);
4024+
}
4025+
4026+
if (_socketReadCallbackPlus != NULL)
4027+
{
4028+
IPAddress dummyAddress = { 0, 0, 0, 0 };
4029+
int dummyPort = 0;
4030+
_socketReadCallbackPlus(socket, (const char *)readDest, length, dummyAddress, dummyPort);
40154031
}
40164032

40174033
free(readDest);
@@ -4022,6 +4038,8 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
40224038
{
40234039
SARA_R5_error_t err;
40244040
char *readDest;
4041+
IPAddress remoteAddress = { 0, 0, 0, 0 };
4042+
int remotePort = 0;
40254043

40264044
if ((socket < 0) || (length < 0))
40274045
{
@@ -4034,7 +4052,7 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
40344052
return SARA_R5_ERROR_OUT_OF_MEMORY;
40354053
}
40364054

4037-
err = socketReadUDP(socket, length, readDest);
4055+
err = socketReadUDP(socket, length, readDest, &remoteAddress, &remotePort);
40384056
if (err != SARA_R5_ERROR_SUCCESS)
40394057
{
40404058
free(readDest);
@@ -4043,7 +4061,15 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
40434061

40444062
if (_socketReadCallback != NULL)
40454063
{
4046-
_socketReadCallback(socket, String(readDest));
4064+
String dataAsString; // Create an empty string
4065+
for (int i = 0; i < length; i++) // Copy the data from readDest into the String in a binary-compatible way
4066+
dataAsString.concat(readDest[i]);
4067+
_socketReadCallback(socket, dataAsString);
4068+
}
4069+
4070+
if (_socketReadCallbackPlus != NULL)
4071+
{
4072+
_socketReadCallbackPlus(socket, (const char *)readDest, length, remoteAddress, remotePort);
40474073
}
40484074

40494075
free(readDest);

src/SparkFun_u-blox_SARA-R5_Arduino_Library.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ class SARA_R5 : public Print
488488
// Callbacks (called during polling)
489489
void setSocketListenCallback(void (*socketListenCallback)(int, IPAddress, unsigned int, int, IPAddress, unsigned int));
490490
void setSocketReadCallback(void (*socketReadCallback)(int, String));
491+
void setSocketReadCallbackPlus(void (*socketReadCallbackPlus)(int, const char *, int, IPAddress, int)); // socket, data, length, remoteAddress, remotePort
491492
void setSocketCloseCallback(void (*socketCloseCallback)(int));
492493
void setGpsReadCallback(void (*gpsRequestCallback)(ClockData time,
493494
PositionData gps, SpeedData spd, unsigned long uncertainty));
@@ -755,6 +756,7 @@ class SARA_R5 : public Print
755756

756757
void (*_socketListenCallback)(int, IPAddress, unsigned int, int, IPAddress, unsigned int);
757758
void (*_socketReadCallback)(int, String);
759+
void (*_socketReadCallbackPlus)(int, const char *, int, IPAddress, int); // socket, data, length, remoteAddress, remotePort
758760
void (*_socketCloseCallback)(int);
759761
void (*_gpsRequestCallback)(ClockData, PositionData, SpeedData, unsigned long);
760762
void (*_simStateReportCallback)(SARA_R5_sim_states_t);

0 commit comments

Comments
 (0)