Skip to content

Commit 2d4e399

Browse files
committed
Add querySocket functions
1 parent 7b8dc05 commit 2d4e399

File tree

3 files changed

+378
-0
lines changed

3 files changed

+378
-0
lines changed

keywords.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ socketDirectLinkTimeTrigger KEYWORD2
116116
socketDirectLinkDataLengthTrigger KEYWORD2
117117
socketDirectLinkCharacterTrigger KEYWORD2
118118
socketDirectLinkCongestionTimer KEYWORD2
119+
querySocketType KEYWORD2
120+
querySocketLastError KEYWORD2
121+
querySocketTotalBytesSent KEYWORD2
122+
querySocketTotalBytesReceived KEYWORD2
123+
querySocketRemoteIPAddress KEYWORD2
124+
querySocketStatusTCP KEYWORD2
125+
querySocketOutUnackData KEYWORD2
119126
socketGetLastError KEYWORD2
120127
lastRemoteIP KEYWORD2
121128
ping KEYWORD2

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2738,6 +2738,354 @@ SARA_R5_error_t SARA_R5::socketDirectLinkCongestionTimer(int socket, unsigned lo
27382738
return err;
27392739
}
27402740

2741+
SARA_R5_error_t SARA_R5::querySocketType(int socket, SARA_R5_socket_protocol_t *protocol)
2742+
{
2743+
char *command;
2744+
char *response;
2745+
SARA_R5_error_t err;
2746+
int scanNum;
2747+
int socketStore = 0;
2748+
int paramVal;
2749+
2750+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2751+
if (command == NULL)
2752+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2753+
sprintf(command, "%s=%d,0", SARA_R5_SOCKET_CONTROL, socket);
2754+
2755+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2756+
if (response == NULL)
2757+
{
2758+
free(command);
2759+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2760+
}
2761+
2762+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
2763+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2764+
2765+
if (err == SARA_R5_ERROR_SUCCESS)
2766+
{
2767+
scanNum = sscanf(response, "+USOCTL: %d,0,%d",
2768+
&socketStore, &paramVal);
2769+
if (scanNum != 2)
2770+
{
2771+
if (_printDebug == true)
2772+
{
2773+
_debugPort->print(F("querySocketType: error: scanNum is "));
2774+
_debugPort->println(scanNum);
2775+
}
2776+
free(command);
2777+
free(response);
2778+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2779+
}
2780+
2781+
*protocol = (SARA_R5_socket_protocol_t)paramVal;
2782+
}
2783+
2784+
free(command);
2785+
free(response);
2786+
2787+
return err;
2788+
}
2789+
2790+
SARA_R5_error_t SARA_R5::querySocketLastError(int socket, int *error)
2791+
{
2792+
char *command;
2793+
char *response;
2794+
SARA_R5_error_t err;
2795+
int scanNum;
2796+
int socketStore = 0;
2797+
int paramVal;
2798+
2799+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2800+
if (command == NULL)
2801+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2802+
sprintf(command, "%s=%d,1", SARA_R5_SOCKET_CONTROL, socket);
2803+
2804+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2805+
if (response == NULL)
2806+
{
2807+
free(command);
2808+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2809+
}
2810+
2811+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
2812+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2813+
2814+
if (err == SARA_R5_ERROR_SUCCESS)
2815+
{
2816+
scanNum = sscanf(response, "+USOCTL: %d,1,%d",
2817+
&socketStore, &paramVal);
2818+
if (scanNum != 2)
2819+
{
2820+
if (_printDebug == true)
2821+
{
2822+
_debugPort->print(F("querySocketLastError: error: scanNum is "));
2823+
_debugPort->println(scanNum);
2824+
}
2825+
free(command);
2826+
free(response);
2827+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2828+
}
2829+
2830+
*error = paramVal;
2831+
}
2832+
2833+
free(command);
2834+
free(response);
2835+
2836+
return err;
2837+
}
2838+
2839+
SARA_R5_error_t SARA_R5::querySocketTotalBytesSent(int socket, uint32_t *total)
2840+
{
2841+
char *command;
2842+
char *response;
2843+
SARA_R5_error_t err;
2844+
int scanNum;
2845+
int socketStore = 0;
2846+
long unsigned int paramVal;
2847+
2848+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2849+
if (command == NULL)
2850+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2851+
sprintf(command, "%s=%d,2", SARA_R5_SOCKET_CONTROL, socket);
2852+
2853+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2854+
if (response == NULL)
2855+
{
2856+
free(command);
2857+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2858+
}
2859+
2860+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
2861+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2862+
2863+
if (err == SARA_R5_ERROR_SUCCESS)
2864+
{
2865+
scanNum = sscanf(response, "+USOCTL: %d,2,%lu",
2866+
&socketStore, &paramVal);
2867+
if (scanNum != 2)
2868+
{
2869+
if (_printDebug == true)
2870+
{
2871+
_debugPort->print(F("querySocketTotalBytesSent: error: scanNum is "));
2872+
_debugPort->println(scanNum);
2873+
}
2874+
free(command);
2875+
free(response);
2876+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2877+
}
2878+
2879+
*total = (uint32_t)paramVal;
2880+
}
2881+
2882+
free(command);
2883+
free(response);
2884+
2885+
return err;
2886+
}
2887+
2888+
SARA_R5_error_t SARA_R5::querySocketTotalBytesReceived(int socket, uint32_t *total)
2889+
{
2890+
char *command;
2891+
char *response;
2892+
SARA_R5_error_t err;
2893+
int scanNum;
2894+
int socketStore = 0;
2895+
long unsigned int paramVal;
2896+
2897+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2898+
if (command == NULL)
2899+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2900+
sprintf(command, "%s=%d,3", SARA_R5_SOCKET_CONTROL, socket);
2901+
2902+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2903+
if (response == NULL)
2904+
{
2905+
free(command);
2906+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2907+
}
2908+
2909+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
2910+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2911+
2912+
if (err == SARA_R5_ERROR_SUCCESS)
2913+
{
2914+
scanNum = sscanf(response, "+USOCTL: %d,3,%lu",
2915+
&socketStore, &paramVal);
2916+
if (scanNum != 2)
2917+
{
2918+
if (_printDebug == true)
2919+
{
2920+
_debugPort->print(F("querySocketTotalBytesReceived: error: scanNum is "));
2921+
_debugPort->println(scanNum);
2922+
}
2923+
free(command);
2924+
free(response);
2925+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2926+
}
2927+
2928+
*total = (uint32_t)paramVal;
2929+
}
2930+
2931+
free(command);
2932+
free(response);
2933+
2934+
return err;
2935+
}
2936+
2937+
SARA_R5_error_t SARA_R5::querySocketRemoteIPAddress(int socket, IPAddress *address, int *port)
2938+
{
2939+
char *command;
2940+
char *response;
2941+
SARA_R5_error_t err;
2942+
int scanNum;
2943+
int socketStore = 0;
2944+
int paramVals[5];
2945+
2946+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2947+
if (command == NULL)
2948+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2949+
sprintf(command, "%s=%d,4", SARA_R5_SOCKET_CONTROL, socket);
2950+
2951+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
2952+
if (response == NULL)
2953+
{
2954+
free(command);
2955+
return SARA_R5_ERROR_OUT_OF_MEMORY;
2956+
}
2957+
2958+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
2959+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2960+
2961+
if (err == SARA_R5_ERROR_SUCCESS)
2962+
{
2963+
scanNum = sscanf(response, "+USOCTL: %d,4,\"%d.%d.%d.%d\",%d",
2964+
&socketStore,
2965+
&paramVals[0], &paramVals[1], &paramVals[2], &paramVals[3],
2966+
&paramVals[4]);
2967+
if (scanNum != 6)
2968+
{
2969+
if (_printDebug == true)
2970+
{
2971+
_debugPort->print(F("querySocketRemoteIPAddress: error: scanNum is "));
2972+
_debugPort->println(scanNum);
2973+
}
2974+
free(command);
2975+
free(response);
2976+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2977+
}
2978+
2979+
IPAddress tempAddress = { (uint8_t)paramVals[0], (uint8_t)paramVals[1],
2980+
(uint8_t)paramVals[2], (uint8_t)paramVals[3] };
2981+
*address = tempAddress;
2982+
*port = paramVals[4];
2983+
}
2984+
2985+
free(command);
2986+
free(response);
2987+
2988+
return err;
2989+
}
2990+
2991+
SARA_R5_error_t SARA_R5::querySocketStatusTCP(int socket, SARA_R5_tcp_socket_status_t *status)
2992+
{
2993+
char *command;
2994+
char *response;
2995+
SARA_R5_error_t err;
2996+
int scanNum;
2997+
int socketStore = 0;
2998+
int paramVal;
2999+
3000+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
3001+
if (command == NULL)
3002+
return SARA_R5_ERROR_OUT_OF_MEMORY;
3003+
sprintf(command, "%s=%d,10", SARA_R5_SOCKET_CONTROL, socket);
3004+
3005+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
3006+
if (response == NULL)
3007+
{
3008+
free(command);
3009+
return SARA_R5_ERROR_OUT_OF_MEMORY;
3010+
}
3011+
3012+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
3013+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
3014+
3015+
if (err == SARA_R5_ERROR_SUCCESS)
3016+
{
3017+
scanNum = sscanf(response, "+USOCTL: %d,10,%d",
3018+
&socketStore, &paramVal);
3019+
if (scanNum != 2)
3020+
{
3021+
if (_printDebug == true)
3022+
{
3023+
_debugPort->print(F("querySocketStatusTCP: error: scanNum is "));
3024+
_debugPort->println(scanNum);
3025+
}
3026+
free(command);
3027+
free(response);
3028+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
3029+
}
3030+
3031+
*status = (SARA_R5_tcp_socket_status_t)paramVal;
3032+
}
3033+
3034+
free(command);
3035+
free(response);
3036+
3037+
return err;
3038+
}
3039+
3040+
SARA_R5_error_t SARA_R5::querySocketOutUnackData(int socket, uint32_t *total)
3041+
{
3042+
char *command;
3043+
char *response;
3044+
SARA_R5_error_t err;
3045+
int scanNum;
3046+
int socketStore = 0;
3047+
long unsigned int paramVal;
3048+
3049+
command = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
3050+
if (command == NULL)
3051+
return SARA_R5_ERROR_OUT_OF_MEMORY;
3052+
sprintf(command, "%s=%d,11", SARA_R5_SOCKET_CONTROL, socket);
3053+
3054+
response = sara_r5_calloc_char(strlen(SARA_R5_SOCKET_CONTROL) + 16);
3055+
if (response == NULL)
3056+
{
3057+
free(command);
3058+
return SARA_R5_ERROR_OUT_OF_MEMORY;
3059+
}
3060+
3061+
err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK, response,
3062+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
3063+
3064+
if (err == SARA_R5_ERROR_SUCCESS)
3065+
{
3066+
scanNum = sscanf(response, "+USOCTL: %d,11,%lu",
3067+
&socketStore, &paramVal);
3068+
if (scanNum != 2)
3069+
{
3070+
if (_printDebug == true)
3071+
{
3072+
_debugPort->print(F("querySocketOutUnackData: error: scanNum is "));
3073+
_debugPort->println(scanNum);
3074+
}
3075+
free(command);
3076+
free(response);
3077+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
3078+
}
3079+
3080+
*total = (uint32_t)paramVal;
3081+
}
3082+
3083+
free(command);
3084+
free(response);
3085+
3086+
return err;
3087+
}
3088+
27413089
//Issues command to get last socket error, then prints to serial. Also updates rx/backlog buffers.
27423090
int SARA_R5::socketGetLastError()
27433091
{

0 commit comments

Comments
 (0)