Skip to content

Commit 1fb3cc8

Browse files
committed
Correct socketWrite for binary data. Add IPAddress overloads for socketWriteUDP and socketConnect.
1 parent 8fa3c60 commit 1fb3cc8

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2161,7 +2161,19 @@ SARA_R5_error_t SARA_R5::socketConnect(int socket, const char *address,
21612161
return err;
21622162
}
21632163

2164-
SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str)
2164+
SARA_R5_error_t SARA_R5::socketConnect(int socket, IPAddress address,
2165+
unsigned int port)
2166+
{
2167+
char *charAddress = sara_r5_calloc_char(16);
2168+
if (charAddress == NULL)
2169+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2170+
memset(charAddress, 0, 16);
2171+
sprintf(charAddress, "%d.%d.%d.%d", address[0], address[1], address[2], address[3]);
2172+
2173+
return (socketConnect(socket, (const char *)charAddress, port));
2174+
}
2175+
2176+
SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str, int len)
21652177
{
21662178
char *command;
21672179
char *response;
@@ -2177,7 +2189,8 @@ SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str)
21772189
free(command);
21782190
return SARA_R5_ERROR_OUT_OF_MEMORY;
21792191
}
2180-
sprintf(command, "%s=%d,%d", SARA_R5_WRITE_SOCKET, socket, strlen(str));
2192+
int dataLen = len == -1 ? strlen(str) : len;
2193+
sprintf(command, "%s=%d,%d", SARA_R5_WRITE_SOCKET, socket, dataLen);
21812194

21822195
err = sendCommandWithResponse(command, "@", response,
21832196
SARA_R5_2_MIN_TIMEOUT);
@@ -2188,12 +2201,26 @@ SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str)
21882201
while (millis() < (writeDelay + 50))
21892202
; //uBlox specification says to wait 50ms after receiving "@" to write data.
21902203

2191-
if (_printDebug == true)
2204+
if (len == -1)
21922205
{
2193-
_debugPort->print(F("socketWrite: writing: "));
2194-
_debugPort->println(str);
2206+
if (_printDebug == true)
2207+
{
2208+
_debugPort->print(F("socketWrite: writing: "));
2209+
_debugPort->println(str);
2210+
}
2211+
hwPrint(str);
21952212
}
2196-
hwPrint(str);
2213+
else
2214+
{
2215+
if (_printDebug == true)
2216+
{
2217+
_debugPort->print(F("socketWrite: writing "));
2218+
_debugPort->print(len);
2219+
_debugPort->println(F(" bytes"));
2220+
}
2221+
hwWriteData(str, len);
2222+
}
2223+
21972224
err = waitForResponse(SARA_R5_RESPONSE_OK, SARA_R5_RESPONSE_ERROR, SARA_R5_SOCKET_WRITE_TIMEOUT);
21982225
}
21992226

@@ -2216,7 +2243,7 @@ SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str)
22162243

22172244
SARA_R5_error_t SARA_R5::socketWrite(int socket, String str)
22182245
{
2219-
return socketWrite(socket, str.c_str());
2246+
return socketWrite(socket, str.c_str(), str.length());
22202247
}
22212248

22222249
SARA_R5_error_t SARA_R5::socketWriteUDP(int socket, const char *address, int port, const char *str, int len)
@@ -2265,6 +2292,17 @@ SARA_R5_error_t SARA_R5::socketWriteUDP(int socket, const char *address, int por
22652292
return err;
22662293
}
22672294

2295+
SARA_R5_error_t SARA_R5::socketWriteUDP(int socket, IPAddress address, int port, const char *str, int len)
2296+
{
2297+
char *charAddress = sara_r5_calloc_char(16);
2298+
if (charAddress == NULL)
2299+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2300+
memset(charAddress, 0, 16);
2301+
sprintf(charAddress, "%d.%d.%d.%d", address[0], address[1], address[2], address[3]);
2302+
2303+
return (socketWriteUDP(socket, (const char *)charAddress, port, str, len));
2304+
}
2305+
22682306
SARA_R5_error_t SARA_R5::socketWriteUDP(int socket, String address, int port, String str, int len)
22692307
{
22702308
return socketWriteUDP(socket, address.c_str(), port, str.c_str(), len);

src/SparkFun_u-blox_SARA-R5_Arduino_Library.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,9 +636,11 @@ class SARA_R5 : public Print
636636
int socketOpen(SARA_R5_socket_protocol_t protocol, unsigned int localPort = 0);
637637
SARA_R5_error_t socketClose(int socket, unsigned long timeout = SARA_R5_2_MIN_TIMEOUT);
638638
SARA_R5_error_t socketConnect(int socket, const char *address, unsigned int port);
639-
SARA_R5_error_t socketWrite(int socket, const char *str);
639+
SARA_R5_error_t socketConnect(int socket, IPAddress address, unsigned int port);
640+
SARA_R5_error_t socketWrite(int socket, const char *str, int len = -1);
640641
SARA_R5_error_t socketWrite(int socket, String str);
641642
SARA_R5_error_t socketWriteUDP(int socket, const char *address, int port, const char *str, int len = -1);
643+
SARA_R5_error_t socketWriteUDP(int socket, IPAddress address, int port, const char *str, int len = -1);
642644
SARA_R5_error_t socketWriteUDP(int socket, String address, int port, String str, int len = -1);
643645
SARA_R5_error_t socketRead(int socket, int length, char *readDest);
644646
SARA_R5_error_t socketReadUDP(int socket, int length, char *readDest);

0 commit comments

Comments
 (0)