16
16
17
17
#include < SparkFun_u-blox_SARA-R5_Arduino_Library.h>
18
18
19
- #define SARA_R5_STANDARD_RESPONSE_TIMEOUT 1000
20
- #define SARA_R5_SET_BAUD_TIMEOUT 500
21
- #define SARA_R5_POWER_PULSE_PERIOD 3200
22
- #define SARA_R5_RESET_PULSE_PERIOD 10000
23
- #define SARA_R5_IP_CONNECT_TIMEOUT 60000
24
- #define SARA_R5_POLL_DELAY 1
25
- #define SARA_R5_SOCKET_WRITE_TIMEOUT 10000
26
-
27
- // ## Suported AT Commands
28
- // ### General
29
- const char SARA_R5_COMMAND_AT[] = " AT" ; // AT "Test"
30
- const char SARA_R5_COMMAND_ECHO[] = " E" ; // Local Echo
31
- const char SARA_R5_COMMAND_MANU_ID[] = " +CGMI" ; // Manufacturer identification
32
- const char SARA_R5_COMMAND_MODEL_ID[] = " +CGMM" ; // Model identification
33
- const char SARA_R5_COMMAND_FW_VER_ID[] = " +CGMR" ; // Firmware version identification
34
- const char SARA_R5_COMMAND_IMEI[] = " +CGSN" ; // IMEI identification
35
- const char SARA_R5_COMMAND_IMSI[] = " +CIMI" ; // IMSI identification
36
- const char SARA_R5_COMMAND_CCID[] = " +CCID" ; // SIM CCID
37
- const char SARA_R5_COMMAND_REQ_CAP[] = " +GCAP" ; // Request capabilities list
38
- // ### Control and status
39
- const char SARA_R5_COMMAND_POWER_OFF[] = " +CPWROFF" ; // Module switch off
40
- const char SARA_R5_COMMAND_FUNC[] = " +CFUN" ; // Functionality (reset, etc.)
41
- const char SARA_R5_COMMAND_CLOCK[] = " +CCLK" ; // Real-time clock
42
- const char SARA_R5_COMMAND_AUTO_TZ[] = " +CTZU" ; // Automatic time zone update
43
- const char SARA_R5_COMMAND_TZ_REPORT[] = " +CTZR" ; // Time zone reporting
44
- // ### Network service
45
- const char SARA_R5_COMMAND_CNUM[] = " +CNUM" ; // Subscriber number
46
- const char SARA_R5_SIGNAL_QUALITY[] = " +CSQ" ;
47
- const char SARA_R5_OPERATOR_SELECTION[] = " +COPS" ;
48
- const char SARA_R5_REGISTRATION_STATUS[] = " +CREG" ;
49
- const char SARA_R5_READ_OPERATOR_NAMES[] = " +COPN" ;
50
- const char SARA_R5_COMMAND_MNO[] = " +UMNOPROF" ; // MNO (mobile network operator) Profile
51
- // ### SMS
52
- const char SARA_R5_MESSAGE_FORMAT[] = " +CMGF" ; // Set SMS message format
53
- const char SARA_R5_SEND_TEXT[] = " +CMGS" ; // Send SMS message
54
- // V24 control and V25ter (UART interface)
55
- const char SARA_R5_COMMAND_BAUD[] = " +IPR" ; // Baud rate
56
- // ### Packet switched data services
57
- const char SARA_R5_MESSAGE_PDP_DEF[] = " +CGDCONT" ;
58
- const char SARA_R5_MESSAGE_ENTER_PPP[] = " D" ;
59
- // ### GPIO
60
- const char SARA_R5_COMMAND_GPIO[] = " +UGPIOC" ; // GPIO Configuration
61
- // ### IP
62
- const char SARA_R5_CREATE_SOCKET[] = " +USOCR" ; // Create a new socket
63
- const char SARA_R5_CLOSE_SOCKET[] = " +USOCL" ; // Close a socket
64
- const char SARA_R5_CONNECT_SOCKET[] = " +USOCO" ; // Connect to server on socket
65
- const char SARA_R5_WRITE_SOCKET[] = " +USOWR" ; // Write data to a socket
66
- const char SARA_R5_WRITE_UDP_SOCKET[] = " +USOST" ; // Write data to a UDP socket
67
- const char SARA_R5_READ_SOCKET[] = " +USORD" ; // Read from a socket
68
- const char SARA_R5_READ_UDP_SOCKET[] = " +USORF" ; // Read UDP data from a socket.
69
- const char SARA_R5_LISTEN_SOCKET[] = " +USOLI" ; // Listen for connection on socket
70
- const char SARA_R5_GET_ERROR[] = " +USOER" ; // Get last socket error.
71
- // ### GNSS
72
- const char SARA_R5_GNSS_POWER[] = " +UGPS" ; // GNSS power management configuration
73
- const char SARA_R5_GNSS_ASSISTED_IND[] = " +UGIND" ; // Assisted GNSS unsolicited indication
74
- const char SARA_R5_GNSS_REQUEST_LOCATION[] = " +ULOC" ; // Ask for localization information
75
- const char SARA_R5_GNSS_GPRMC[] = " +UGRMC" ; // Ask for localization information
76
- const char SARA_R5_GNSS_REQUEST_TIME[] = " +UTIME" ; // Ask for time information from cellular modem (CellTime)
77
- const char SARA_R5_GNSS_CONFIGURE_SENSOR[] = " +ULOCGNSS" ; // Configure GNSS sensor
78
- const char SARA_R5_GNSS_CONFIGURE_LOCATION[] = " +ULOCCELL" ; // Configure cellular location sensor (CellLocate®)
79
-
80
- const char SARA_R5_RESPONSE_OK[] = " OK\r\n " ;
81
- const char SARA_R5_RESPONSE_ERROR[] = " ERROR\r\n " ;
82
-
83
- // CTRL+Z and ESC ASCII codes for SMS message sends
84
- const char ASCII_CTRL_Z = 0x1A ;
85
- const char ASCII_ESC = 0x1B ;
86
-
87
- #define NOT_AT_COMMAND false
88
- #define AT_COMMAND true
89
-
90
- #define SARA_R5_NUM_SOCKETS 6
91
-
92
- #define NUM_SUPPORTED_BAUD 6
93
- const unsigned long SARA_R5_SUPPORTED_BAUD[NUM_SUPPORTED_BAUD] =
94
- {
95
- 115200 ,
96
- 9600 ,
97
- 19200 ,
98
- 38400 ,
99
- 57600 ,
100
- 230400 };
101
- #define SARA_R5_DEFAULT_BAUD_RATE 115200
102
-
103
- const int RXBuffSize = 2056 ;
104
- const int rxWindowUS = 1000 ;
105
- char saraRXBuffer[RXBuffSize];
106
- char saraResponseBacklog[RXBuffSize];
107
-
108
19
static boolean parseGPRMCString (char *rmcString, PositionData *pos, ClockData *clk, SpeedData *spd);
109
20
110
21
SARA_R5::SARA_R5 (int powerPin, int resetPin, uint8_t maxInitDepth)
@@ -481,10 +392,10 @@ SARA_R5_error_t SARA_R5::enableEcho(boolean enable)
481
392
return err;
482
393
}
483
394
484
- String SARA_R5::manufacturerID (void )
395
+ String SARA_R5::getManufacturerID (void )
485
396
{
486
397
char *response;
487
- char idResponse[16 ] = { 0x00 };
398
+ char idResponse[16 ] = { 0x00 }; // E.g. u-blox
488
399
SARA_R5_error_t err;
489
400
490
401
response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
@@ -502,10 +413,10 @@ String SARA_R5::manufacturerID(void)
502
413
return String (idResponse);
503
414
}
504
415
505
- String SARA_R5::modelID (void )
416
+ String SARA_R5::getModelID (void )
506
417
{
507
418
char *response;
508
- char idResponse[16 ] = { 0x00 };
419
+ char idResponse[16 ] = { 0x00 }; // E.g. SARA-R510M8Q
509
420
SARA_R5_error_t err;
510
421
511
422
response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
@@ -523,13 +434,55 @@ String SARA_R5::modelID(void)
523
434
return String (idResponse);
524
435
}
525
436
526
- String SARA_R5::imei (void )
437
+ String SARA_R5::getFirmwareVersion (void )
527
438
{
528
439
char *response;
529
- char imeiResponse [16 ] = { 0x00 };
440
+ char idResponse [16 ] = { 0x00 }; // E.g. 11.40
530
441
SARA_R5_error_t err;
531
442
532
- response = sara_r5_calloc_char (sizeof (imeiResponse) + 16 ); // E.g. 004999010640000
443
+ response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
444
+
445
+ err = sendCommandWithResponse (SARA_R5_COMMAND_FW_VER_ID,
446
+ SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
447
+ if (err == SARA_R5_ERROR_SUCCESS)
448
+ {
449
+ if (sscanf (response, " \r\n %s\r\n " , idResponse) != 1 )
450
+ {
451
+ memset (idResponse, 0 , 16 );
452
+ }
453
+ }
454
+ free (response);
455
+ return String (idResponse);
456
+ }
457
+
458
+ String SARA_R5::getSerialNo (void )
459
+ {
460
+ char *response;
461
+ char idResponse[16 ] = { 0x00 }; // E.g. 357520070120767
462
+ SARA_R5_error_t err;
463
+
464
+ response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
465
+
466
+ err = sendCommandWithResponse (SARA_R5_COMMAND_SERIAL_NO,
467
+ SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
468
+ if (err == SARA_R5_ERROR_SUCCESS)
469
+ {
470
+ if (sscanf (response, " \r\n %s\r\n " , idResponse) != 1 )
471
+ {
472
+ memset (idResponse, 0 , 16 );
473
+ }
474
+ }
475
+ free (response);
476
+ return String (idResponse);
477
+ }
478
+
479
+ String SARA_R5::getIMEI (void )
480
+ {
481
+ char *response;
482
+ char imeiResponse[16 ] = { 0x00 }; // E.g. 004999010640000
483
+ SARA_R5_error_t err;
484
+
485
+ response = sara_r5_calloc_char (sizeof (imeiResponse) + 16 );
533
486
534
487
err = sendCommandWithResponse (SARA_R5_COMMAND_IMEI,
535
488
SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
@@ -544,10 +497,10 @@ String SARA_R5::imei(void)
544
497
return String (imeiResponse);
545
498
}
546
499
547
- String SARA_R5::imsi (void )
500
+ String SARA_R5::getIMSI (void )
548
501
{
549
502
char *response;
550
- char imsiResponse[16 ] = { 0x00 };
503
+ char imsiResponse[16 ] = { 0x00 }; // E.g. 222107701772423
551
504
SARA_R5_error_t err;
552
505
553
506
response = sara_r5_calloc_char (sizeof (imsiResponse) + 16 );
@@ -565,10 +518,10 @@ String SARA_R5::imsi(void)
565
518
return String (imsiResponse);
566
519
}
567
520
568
- String SARA_R5::ccid (void )
521
+ String SARA_R5::getCCID (void )
569
522
{
570
523
char *response;
571
- char ccidResponse[21 ] = { 0x00 };
524
+ char ccidResponse[21 ] = { 0x00 }; // E.g. +CCID: 8939107900010087330
572
525
SARA_R5_error_t err;
573
526
574
527
response = sara_r5_calloc_char (sizeof (ccidResponse) + 16 );
@@ -586,6 +539,48 @@ String SARA_R5::ccid(void)
586
539
return String (ccidResponse);
587
540
}
588
541
542
+ String SARA_R5::getSubscriberNo (void )
543
+ {
544
+ char *response;
545
+ char idResponse[21 ] = { 0x00 };
546
+ SARA_R5_error_t err;
547
+
548
+ response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
549
+
550
+ err = sendCommandWithResponse (SARA_R5_COMMAND_CNUM,
551
+ SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
552
+ if (err == SARA_R5_ERROR_SUCCESS)
553
+ {
554
+ if (sscanf (response, " \r\n +CCID: %s" , idResponse) != 1 )
555
+ {
556
+ memset (idResponse, 0 , 21 );
557
+ }
558
+ }
559
+ free (response);
560
+ return String (idResponse);
561
+ }
562
+
563
+ String SARA_R5::getCapabilities (void )
564
+ {
565
+ char *response;
566
+ char idResponse[128 ] = { 0x00 }; // E.g. +GCAP: +FCLASS, +CGSM
567
+ SARA_R5_error_t err;
568
+
569
+ response = sara_r5_calloc_char (sizeof (idResponse) + 16 );
570
+
571
+ err = sendCommandWithResponse (SARA_R5_COMMAND_REQ_CAP,
572
+ SARA_R5_RESPONSE_OK, response, SARA_R5_STANDARD_RESPONSE_TIMEOUT);
573
+ if (err == SARA_R5_ERROR_SUCCESS)
574
+ {
575
+ if (sscanf (response, " \r\n +GCAP: %s" , idResponse) != 1 )
576
+ {
577
+ memset (idResponse, 0 , 128 );
578
+ }
579
+ }
580
+ free (response);
581
+ return String (idResponse);
582
+ }
583
+
589
584
SARA_R5_error_t SARA_R5::reset (void )
590
585
{
591
586
SARA_R5_error_t err;
0 commit comments