Skip to content

Commit d42f0a1

Browse files
committed
Add support for socket Direct Link mode
1 parent f913293 commit d42f0a1

File tree

4 files changed

+117
-3
lines changed

4 files changed

+117
-3
lines changed

keywords.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ socketWriteUDP KEYWORD2
105105
socketRead KEYWORD2
106106
socketReadUDP KEYWORD2
107107
socketListen KEYWORD2
108+
socketDirectLinkMode KEYWORD2
109+
socketDirectLinkTimeTrigger KEYWORD2
110+
socketDirectLinkDataLengthTrigger KEYWORD2
111+
socketDirectLinkCharacterTrigger KEYWORD2
112+
socketDirectLinkCongestionTimer KEYWORD2
108113
socketGetLastError KEYWORD2
109114
lastRemoteIP KEYWORD2
110115
ping KEYWORD2

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SparkFun u-blox SARA-R5 Arduino Library
2-
version=1.0.1
2+
version=1.0.2
33
author=SparkFun Electronics <techsupport@sparkfun.com>
44
maintainer=SparkFun Electronics <sparkfun.com>
55
sentence=Library for the u-blox SARA-R5 LTE-M / NB-IoT modules with secure cloud

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,6 +2290,107 @@ SARA_R5_error_t SARA_R5::socketListen(int socket, unsigned int port)
22902290
return err;
22912291
}
22922292

2293+
SARA_R5_error_t SARA_R5::socketDirectLinkMode(int socket)
2294+
{
2295+
SARA_R5_error_t err;
2296+
char *command;
2297+
2298+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_DIRECT_LINK) + 8);
2299+
if (command == NULL)
2300+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2301+
sprintf(command, "%s=%d", SARA_R5_SOCKET_DIRECT_LINK, socket);
2302+
2303+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_CONNECT, NULL,
2304+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2305+
2306+
free(command);
2307+
return err;
2308+
}
2309+
2310+
SARA_R5_error_t SARA_R5::socketDirectLinkTimeTrigger(int socket, int timerTrigger)
2311+
{
2312+
// valid range is 0 (trigger disabled), 100-120000
2313+
if (!((timerTrigger == 0) || ((timerTrigger >= 100) && (timerTrigger <= 120000))))
2314+
return SARA_R5_ERROR_ERROR;
2315+
2316+
SARA_R5_error_t err;
2317+
char *command;
2318+
2319+
command = sara_r5_calloc_char(strlen(SARA_R5_UD_CONFIGURATION) + 16);
2320+
if (command == NULL)
2321+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2322+
sprintf(command, "%s=5,%d,%d", SARA_R5_UD_CONFIGURATION, socket, timerTrigger);
2323+
2324+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, NULL,
2325+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2326+
2327+
free(command);
2328+
return err;
2329+
}
2330+
2331+
SARA_R5_error_t SARA_R5::socketDirectLinkDataLengthTrigger(int socket, int dataLengthTrigger)
2332+
{
2333+
// valid range is 0, 3-1472 for UDP
2334+
if (!((dataLengthTrigger == 0) || ((dataLengthTrigger >= 3) && (dataLengthTrigger <= 1472))))
2335+
return SARA_R5_ERROR_ERROR;
2336+
2337+
SARA_R5_error_t err;
2338+
char *command;
2339+
2340+
command = sara_r5_calloc_char(strlen(SARA_R5_UD_CONFIGURATION) + 16);
2341+
if (command == NULL)
2342+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2343+
sprintf(command, "%s=6,%d,%d", SARA_R5_UD_CONFIGURATION, socket, dataLengthTrigger);
2344+
2345+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, NULL,
2346+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2347+
2348+
free(command);
2349+
return err;
2350+
}
2351+
2352+
SARA_R5_error_t SARA_R5::socketDirectLinkCharacterTrigger(int socket, int characterTrigger)
2353+
{
2354+
// The allowed range is -1, 0-255, the factory-programmed value is -1; -1 means trigger disabled.
2355+
if (!((characterTrigger >= -1) && (characterTrigger <= 255)))
2356+
return SARA_R5_ERROR_ERROR;
2357+
2358+
SARA_R5_error_t err;
2359+
char *command;
2360+
2361+
command = sara_r5_calloc_char(strlen(SARA_R5_UD_CONFIGURATION) + 16);
2362+
if (command == NULL)
2363+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2364+
sprintf(command, "%s=7,%d,%d", SARA_R5_UD_CONFIGURATION, socket, characterTrigger);
2365+
2366+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, NULL,
2367+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2368+
2369+
free(command);
2370+
return err;
2371+
}
2372+
2373+
SARA_R5_error_t SARA_R5::socketDirectLinkCongestionTimer(int socket, int congestionTimer)
2374+
{
2375+
// valid range is 0, 1000-72000
2376+
if (!((congestionTimer == 0) || ((congestionTimer >= 1000) && (congestionTimer <= 72000))))
2377+
return SARA_R5_ERROR_ERROR;
2378+
2379+
SARA_R5_error_t err;
2380+
char *command;
2381+
2382+
command = sara_r5_calloc_char(strlen(SARA_R5_UD_CONFIGURATION) + 16);
2383+
if (command == NULL)
2384+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2385+
sprintf(command, "%s=8,%d,%d", SARA_R5_UD_CONFIGURATION, socket, congestionTimer);
2386+
2387+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, NULL,
2388+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2389+
2390+
free(command);
2391+
return err;
2392+
}
2393+
22932394
//Issues command to get last socket error, then prints to serial. Also updates rx/backlog buffers.
22942395
int SARA_R5::socketGetLastError()
22952396
{

src/SparkFun_u-blox_SARA-R5_Arduino_Library.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ const char SARA_R5_READ_SOCKET[] = "+USORD"; // Read from a socket
118118
const char SARA_R5_READ_UDP_SOCKET[] = "+USORF"; // Read UDP data from a socket
119119
const char SARA_R5_LISTEN_SOCKET[] = "+USOLI"; // Listen for connection on socket
120120
const char SARA_R5_GET_ERROR[] = "+USOER"; // Get last socket error.
121+
const char SARA_R5_SOCKET_DIRECT_LINK[] = "+USODL"; // Set socket in Direct Link mode
122+
const char SARA_R5_UD_CONFIGURATION[] = "+UDCONF"; // User Datagram Configuration
121123
// ### Ping
122124
const char SARA_R5_PING_COMMAND[] = "+UPING"; // Ping
123125
// ### HTTP
@@ -139,6 +141,7 @@ const char SARA_R5_FILE_SYSTEM_READ_FILE[] = "+URDFILE"; // Read a file
139141
// ### Response
140142
const char SARA_R5_RESPONSE_OK[] = "OK\r\n";
141143
const char SARA_R5_RESPONSE_ERROR[] = "ERROR\r\n";
144+
const char SARA_R5_RESPONSE_CONNECT[] = "CONNECT\r\n";
142145

143146
// CTRL+Z and ESC ASCII codes for SMS message sends
144147
const char ASCII_CTRL_Z = 0x1A;
@@ -208,7 +211,7 @@ typedef enum
208211
SARA_R5_ERROR_UNEXPECTED_RESPONSE, // 4
209212
SARA_R5_ERROR_NO_RESPONSE, // 5
210213
SARA_R5_ERROR_DEREGISTERED, // 6
211-
SARA_R5_ERROR_ERROR // 7
214+
SARA_R5_ERROR_ERROR // 7
212215
} SARA_R5_error_t;
213216
#define SARA_R5_SUCCESS SARA_R5_ERROR_SUCCESS
214217

@@ -597,10 +600,15 @@ class SARA_R5 : public Print
597600
SARA_R5_error_t socketWrite(int socket, const char *str);
598601
SARA_R5_error_t socketWrite(int socket, String str);
599602
SARA_R5_error_t socketWriteUDP(int socket, const char *address, int port, const char *str, int len = -1);
600-
SARA_R5_error_t socketWriteUDP(int socket, String address, int port, String str, int len = -1);
603+
SARA_R5_error_t socketWriteUDP(int socket, String address, int port, String str, int len = -1);
601604
SARA_R5_error_t socketRead(int socket, int length, char *readDest);
602605
SARA_R5_error_t socketReadUDP(int socket, int length, char *readDest);
603606
SARA_R5_error_t socketListen(int socket, unsigned int port);
607+
SARA_R5_error_t socketDirectLinkMode(int socket);
608+
SARA_R5_error_t socketDirectLinkTimeTrigger(int socket, int timerTrigger);
609+
SARA_R5_error_t socketDirectLinkDataLengthTrigger(int socket, int dataLengthTrigger);
610+
SARA_R5_error_t socketDirectLinkCharacterTrigger(int socket, int characterTrigger);
611+
SARA_R5_error_t socketDirectLinkCongestionTimer(int socket, int congestionTimer);
604612
int socketGetLastError();
605613
IPAddress lastRemoteIP(void);
606614

0 commit comments

Comments
 (0)