@@ -29,6 +29,7 @@ SARA_R5::SARA_R5(int powerPin, int resetPin, uint8_t maxInitDepth)
29
29
_maxInitDepth = maxInitDepth;
30
30
_socketListenCallback = NULL ;
31
31
_socketReadCallback = NULL ;
32
+ _socketReadCallbackPlus = NULL ;
32
33
_socketCloseCallback = NULL ;
33
34
_gpsRequestCallback = NULL ;
34
35
_simStateReportCallback = NULL ;
@@ -473,6 +474,11 @@ void SARA_R5::setSocketReadCallback(void (*socketReadCallback)(int, String))
473
474
_socketReadCallback = socketReadCallback;
474
475
}
475
476
477
+ void SARA_R5::setSocketReadCallbackPlus (void (*socketReadCallbackPlus)(int , const char *, int , IPAddress, int )) // socket, data, length, remoteAddress, remotePort
478
+ {
479
+ _socketReadCallbackPlus = socketReadCallbackPlus;
480
+ }
481
+
476
482
void SARA_R5::setSocketCloseCallback (void (*socketCloseCallback)(int ))
477
483
{
478
484
_socketCloseCallback = socketCloseCallback;
@@ -4011,7 +4017,17 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndication(int socket, int length)
4011
4017
4012
4018
if (_socketReadCallback != NULL )
4013
4019
{
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);
4015
4031
}
4016
4032
4017
4033
free (readDest);
@@ -4022,6 +4038,8 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
4022
4038
{
4023
4039
SARA_R5_error_t err;
4024
4040
char *readDest;
4041
+ IPAddress remoteAddress = { 0 , 0 , 0 , 0 };
4042
+ int remotePort = 0 ;
4025
4043
4026
4044
if ((socket < 0 ) || (length < 0 ))
4027
4045
{
@@ -4034,7 +4052,7 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
4034
4052
return SARA_R5_ERROR_OUT_OF_MEMORY;
4035
4053
}
4036
4054
4037
- err = socketReadUDP (socket, length, readDest);
4055
+ err = socketReadUDP (socket, length, readDest, &remoteAddress, &remotePort );
4038
4056
if (err != SARA_R5_ERROR_SUCCESS)
4039
4057
{
4040
4058
free (readDest);
@@ -4043,7 +4061,15 @@ SARA_R5_error_t SARA_R5::parseSocketReadIndicationUDP(int socket, int length)
4043
4061
4044
4062
if (_socketReadCallback != NULL )
4045
4063
{
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);
4047
4073
}
4048
4074
4049
4075
free (readDest);
0 commit comments