@@ -2401,6 +2401,55 @@ SARA_R5_error_t SARA_R5::socketRead(int socket, int length, char *readDest)
2401
2401
return err;
2402
2402
}
2403
2403
2404
+ SARA_R5_error_t SARA_R5::socketReadAvailable (int socket, int *length)
2405
+ {
2406
+ char *command;
2407
+ char *response;
2408
+ SARA_R5_error_t err;
2409
+ int scanNum;
2410
+ int readLength = 0 ;
2411
+ int socketStore = 0 ;
2412
+
2413
+ command = sara_r5_calloc_char (strlen (SARA_R5_READ_SOCKET) + 32 );
2414
+ if (command == NULL )
2415
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2416
+ sprintf (command, " %s=%d,0" , SARA_R5_READ_SOCKET, socket);
2417
+
2418
+ response = sara_r5_calloc_char (strlen (SARA_R5_READ_SOCKET) + 16 );
2419
+ if (response == NULL )
2420
+ {
2421
+ free (command);
2422
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2423
+ }
2424
+
2425
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2426
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2427
+
2428
+ if (err == SARA_R5_ERROR_SUCCESS)
2429
+ {
2430
+ scanNum = sscanf (response, " +USORD: %d,%d" ,
2431
+ &socketStore, &readLength);
2432
+ if (scanNum != 2 )
2433
+ {
2434
+ if (_printDebug == true )
2435
+ {
2436
+ _debugPort->print (F (" socketReadAvailable: error: scanNum is " ));
2437
+ _debugPort->println (scanNum);
2438
+ }
2439
+ free (command);
2440
+ free (response);
2441
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2442
+ }
2443
+
2444
+ *length = readLength;
2445
+ }
2446
+
2447
+ free (command);
2448
+ free (response);
2449
+
2450
+ return err;
2451
+ }
2452
+
2404
2453
SARA_R5_error_t SARA_R5::socketReadUDP (int socket, int length, char *readDest, IPAddress *remoteIPAddress, int *remotePort)
2405
2454
{
2406
2455
char *command;
@@ -2516,6 +2565,55 @@ SARA_R5_error_t SARA_R5::socketReadUDP(int socket, int length, char *readDest, I
2516
2565
return err;
2517
2566
}
2518
2567
2568
+ SARA_R5_error_t SARA_R5::socketReadAvailableUDP (int socket, int *length)
2569
+ {
2570
+ char *command;
2571
+ char *response;
2572
+ SARA_R5_error_t err;
2573
+ int scanNum;
2574
+ int readLength = 0 ;
2575
+ int socketStore = 0 ;
2576
+
2577
+ command = sara_r5_calloc_char (strlen (SARA_R5_READ_UDP_SOCKET) + 32 );
2578
+ if (command == NULL )
2579
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2580
+ sprintf (command, " %s=%d,0" , SARA_R5_READ_UDP_SOCKET, socket);
2581
+
2582
+ response = sara_r5_calloc_char (strlen (SARA_R5_READ_UDP_SOCKET) + 16 );
2583
+ if (response == NULL )
2584
+ {
2585
+ free (command);
2586
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
2587
+ }
2588
+
2589
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
2590
+ SARA_R5_STANDARD_RESPONSE_TIMEOUT);
2591
+
2592
+ if (err == SARA_R5_ERROR_SUCCESS)
2593
+ {
2594
+ scanNum = sscanf (response, " +USORF: %d,%d" ,
2595
+ &socketStore, &readLength);
2596
+ if (scanNum != 2 )
2597
+ {
2598
+ if (_printDebug == true )
2599
+ {
2600
+ _debugPort->print (F (" socketReadAvailableUDP: error: scanNum is " ));
2601
+ _debugPort->println (scanNum);
2602
+ }
2603
+ free (command);
2604
+ free (response);
2605
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
2606
+ }
2607
+
2608
+ *length = readLength;
2609
+ }
2610
+
2611
+ free (command);
2612
+ free (response);
2613
+
2614
+ return err;
2615
+ }
2616
+
2519
2617
SARA_R5_error_t SARA_R5::socketListen (int socket, unsigned int port)
2520
2618
{
2521
2619
SARA_R5_error_t err;
0 commit comments