From b7f959a1f1ec07a5b0f083b1dbad8b5b4477982d Mon Sep 17 00:00:00 2001 From: Michael Ammann Date: Sun, 8 May 2022 18:54:09 +0200 Subject: [PATCH] Delete SparkFun_u-blox_SARA-R5_Arduino_Library.h --- src/SparkFun_u-blox_SARA-R5_Arduino_Library.h | 1048 ----------------- 1 file changed, 1048 deletions(-) delete mode 100644 src/SparkFun_u-blox_SARA-R5_Arduino_Library.h diff --git a/src/SparkFun_u-blox_SARA-R5_Arduino_Library.h b/src/SparkFun_u-blox_SARA-R5_Arduino_Library.h deleted file mode 100644 index 482a025..0000000 --- a/src/SparkFun_u-blox_SARA-R5_Arduino_Library.h +++ /dev/null @@ -1,1048 +0,0 @@ -/* - Arduino library for the u-blox SARA-R5 LTE-M / NB-IoT modules with secure cloud, as used on the SparkFun MicroMod Asset Tracker - By: Paul Clark - October 19th 2020 - - Based extensively on the: - Arduino Library for the SparkFun LTE CAT M1/NB-IoT Shield - SARA-R4 - Written by Jim Lindblom @ SparkFun Electronics, September 5, 2018 - - This Arduino library provides mechanisms to initialize and use - the SARA-R5 module over either a SoftwareSerial or hardware serial port. - - Please see LICENSE.md for the license information - -*/ - -#ifndef SPARKFUN_SARA_R5_ARDUINO_LIBRARY_H -#define SPARKFUN_SARA_R5_ARDUINO_LIBRARY_H - -#if (ARDUINO >= 100) -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -#ifdef ARDUINO_ARCH_AVR // Arduino AVR boards (Uno, Pro Micro, etc.) -#define SARA_R5_SOFTWARE_SERIAL_ENABLED // Enable software serial -#endif - -#ifdef ARDUINO_ARCH_SAMD // Arduino SAMD boards (SAMD21, etc.) -#define SARA_R5_SOFTWARE_SERIAL_ENABLEDx // Disable software serial -#endif - -#ifdef ARDUINO_ARCH_APOLLO3 // Arduino Apollo boards (Artemis module, RedBoard Artemis, etc) -#define SARA_R5_SOFTWARE_SERIAL_ENABLEDx // Disable software serial (no longer supported with v2 of Apollo3) -// Note: paulvha has provided software serial support for v2 of the Apollo3 / Artemis core. -// Further details are available at: -// https://github.com/paulvha/apollo3/tree/master/SoftwareSerial -#endif - -#ifdef ARDUINO_ARCH_STM32 // STM32 based boards (Disco, Nucleo, etc) -#define SARA_R5_SOFTWARE_SERIAL_ENABLED // Enable software serial -#endif - -#ifdef ARDUINO_ARCH_ESP32 // ESP32 based boards -// Check to see if ESP Software Serial has been included -// Note: you need to #include at the very start of your script, -// _before_ the #include , for this to work. -// See SARA-R5_Example2_Identification_ESPSoftwareSerial for more details. -#if __has_include( ) -#define SARA_R5_SOFTWARE_SERIAL_ENABLED // Enable software serial -#else -#define SARA_R5_SOFTWARE_SERIAL_ENABLEDx // Disable software serial -#endif -#endif - -#ifdef ARDUINO_ARCH_ESP8266 // ESP8266 based boards -// Check to see if ESP Software Serial has been included -// Note: you need to #include at the very start of your script, -// _before_ the #include , for this to work. -// See SARA-R5_Example2_Identification_ESPSoftwareSerial for more details. -#if __has_include( ) -#define SARA_R5_SOFTWARE_SERIAL_ENABLED // Enable software serial -#else -#define SARA_R5_SOFTWARE_SERIAL_ENABLEDx // Disable software serial -#endif -#endif - -#ifdef SARA_R5_SOFTWARE_SERIAL_ENABLED -#include // SoftwareSerial.h is guarded. It is OK to include it twice. -#endif - -#include - -#define SARA_R5_POWER_PIN -1 // Default to no pin -#define SARA_R5_RESET_PIN -1 - -// Timing -#define SARA_R5_STANDARD_RESPONSE_TIMEOUT 1000 -#define SARA_R5_10_SEC_TIMEOUT 10000 -#define SARA_R5_55_SECS_TIMEOUT 55000 -#define SARA_R5_2_MIN_TIMEOUT 120000 -#define SARA_R5_3_MIN_TIMEOUT 180000 -#define SARA_R5_SET_BAUD_TIMEOUT 500 -#define SARA_R5_POWER_OFF_PULSE_PERIOD 3200 // Hold PWR_ON low for this long to power the module off -#define SARA_R5_POWER_ON_PULSE_PERIOD 100 // Hold PWR_ON low for this long to power the module on (SARA-R510M8S) -#define SARA_R5_RESET_PULSE_PERIOD 23000 // Used to perform an abrupt emergency hardware shutdown. 23 seconds... (Yes, really!) -#define SARA_R5_POWER_OFF_TIMEOUT 40000 // Datasheet says 40 seconds... -#define SARA_R5_IP_CONNECT_TIMEOUT 130000 -#define SARA_R5_POLL_DELAY 1 -#define SARA_R5_SOCKET_WRITE_TIMEOUT 10000 - -// ## Suported AT Commands -// ### General -const char SARA_R5_COMMAND_AT[] = "AT"; // AT "Test" -const char SARA_R5_COMMAND_ECHO[] = "E"; // Local Echo -const char SARA_R5_COMMAND_MANU_ID[] = "+CGMI"; // Manufacturer identification -const char SARA_R5_COMMAND_MODEL_ID[] = "+CGMM"; // Model identification -const char SARA_R5_COMMAND_FW_VER_ID[] = "+CGMR"; // Firmware version identification -const char SARA_R5_COMMAND_SERIAL_NO[] = "+CGSN"; // Product serial number -const char SARA_R5_COMMAND_IMEI[] = "+CSN"; // IMEI identification -const char SARA_R5_COMMAND_IMSI[] = "+CIMI"; // IMSI identification -const char SARA_R5_COMMAND_CCID[] = "+CCID"; // SIM CCID -const char SARA_R5_COMMAND_REQ_CAP[] = "+GCAP"; // Request capabilities list -// ### Control and status -const char SARA_R5_COMMAND_POWER_OFF[] = "+CPWROFF"; // Module switch off -const char SARA_R5_COMMAND_FUNC[] = "+CFUN"; // Functionality (reset, etc.) -const char SARA_R5_COMMAND_CLOCK[] = "+CCLK"; // Real-time clock -const char SARA_R5_COMMAND_AUTO_TZ[] = "+CTZU"; // Automatic time zone update -const char SARA_R5_COMMAND_TZ_REPORT[] = "+CTZR"; // Time zone reporting -// ### Network service -const char SARA_R5_COMMAND_CNUM[] = "+CNUM"; // Subscriber number -const char SARA_R5_SIGNAL_QUALITY[] = "+CSQ"; -const char SARA_R5_OPERATOR_SELECTION[] = "+COPS"; -const char SARA_R5_REGISTRATION_STATUS[] = "+CREG"; -const char SARA_R5_EPSREGISTRATION_STATUS[] = "+CEREG"; -const char SARA_R5_READ_OPERATOR_NAMES[] = "+COPN"; -const char SARA_R5_COMMAND_MNO[] = "+UMNOPROF"; // MNO (mobile network operator) Profile -// ### SIM -const char SARA_R5_SIM_STATE[] = "+USIMSTAT"; -const char SARA_R5_COMMAND_SIMPIN[] = "+CPIN"; // SIM PIN -// ### SMS -const char SARA_R5_MESSAGE_FORMAT[] = "+CMGF"; // Set SMS message format -const char SARA_R5_SEND_TEXT[] = "+CMGS"; // Send SMS message -const char SARA_R5_NEW_MESSAGE_IND[] = "+CNMI"; // New [SMS] message indication -const char SARA_R5_PREF_MESSAGE_STORE[] = "+CPMS"; // Preferred message storage -const char SARA_R5_READ_TEXT_MESSAGE[] = "+CMGR"; // Read message -const char SARA_R5_DELETE_MESSAGE[] = "+CMGD"; // Delete message -// V24 control and V25ter (UART interface) -const char SARA_R5_FLOW_CONTROL[] = "&K"; // Flow control -const char SARA_R5_COMMAND_BAUD[] = "+IPR"; // Baud rate -// ### Packet switched data services -const char SARA_R5_MESSAGE_PDP_DEF[] = "+CGDCONT"; // Packet switched Data Profile context definition -const char SARA_R5_MESSAGE_PDP_CONFIG[] = "+UPSD"; // Packet switched Data Profile configuration -const char SARA_R5_MESSAGE_PDP_ACTION[] = "+UPSDA"; // Perform the action for the specified PSD profile -const char SARA_R5_MESSAGE_PDP_CONTEXT_ACTIVATE[] = "+CGACT"; // Activates or deactivates the specified PDP context -const char SARA_R5_MESSAGE_ENTER_PPP[] = "D"; -const char SARA_R5_NETWORK_ASSIGNED_DATA[] = "+UPSND"; // Packet switched network-assigned data -// ### GPIO -const char SARA_R5_COMMAND_GPIO[] = "+UGPIOC"; // GPIO Configuration -// ### IP -const char SARA_R5_CREATE_SOCKET[] = "+USOCR"; // Create a new socket -const char SARA_R5_CLOSE_SOCKET[] = "+USOCL"; // Close a socket -const char SARA_R5_CONNECT_SOCKET[] = "+USOCO"; // Connect to server on socket -const char SARA_R5_WRITE_SOCKET[] = "+USOWR"; // Write data to a socket -const char SARA_R5_WRITE_UDP_SOCKET[] = "+USOST"; // Write data to a UDP socket -const char SARA_R5_READ_SOCKET[] = "+USORD"; // Read from a socket -const char SARA_R5_READ_UDP_SOCKET[] = "+USORF"; // Read UDP data from a socket -const char SARA_R5_LISTEN_SOCKET[] = "+USOLI"; // Listen for connection on socket -const char SARA_R5_GET_ERROR[] = "+USOER"; // Get last socket error. -const char SARA_R5_SOCKET_DIRECT_LINK[] = "+USODL"; // Set socket in Direct Link mode -const char SARA_R5_SOCKET_CONTROL[] = "+USOCTL"; // Query the socket parameters -const char SARA_R5_UD_CONFIGURATION[] = "+UDCONF"; // User Datagram Configuration -// ### Ping -const char SARA_R5_PING_COMMAND[] = "+UPING"; // Ping -// ### HTTP -const char SARA_R5_HTTP_PROFILE[] = "+UHTTP"; // Configure the HTTP profile. Up to 4 different profiles can be defined -const char SARA_R5_HTTP_COMMAND[] = "+UHTTPC"; // Trigger the specified HTTP command -const char SARA_R5_HTTP_PROTOCOL_ERROR[] = "+UHTTPER"; // Retrieves the error class and code of the latest HTTP operation on the specified HTTP profile. - -const char SARA_R5_MQTT_NVM[] = "+UMQTTNV"; -const char SARA_R5_MQTT_PROFILE[] = "+UMQTT"; -const char SARA_R5_MQTT_COMMAND[] = "+UMQTTC"; -const char SARA_R5_MQTT_PROTOCOL_ERROR[] = "+UMQTTER"; - -// ### GNSS -const char SARA_R5_GNSS_POWER[] = "+UGPS"; // GNSS power management configuration -const char SARA_R5_GNSS_ASSISTED_IND[] = "+UGIND"; // Assisted GNSS unsolicited indication -const char SARA_R5_GNSS_REQUEST_LOCATION[] = "+ULOC"; // Ask for localization information -const char SARA_R5_GNSS_GPRMC[] = "+UGRMC"; // Ask for localization information -const char SARA_R5_GNSS_REQUEST_TIME[] = "+UTIME"; // Ask for time information from cellular modem (CellTime) -const char SARA_R5_GNSS_TIME_INDICATION[] = "+UTIMEIND"; // Time information request status unsolicited indication -const char SARA_R5_GNSS_TIME_CONFIGURATION[] = "+UTIMECFG"; // Sets time configuration -const char SARA_R5_GNSS_CONFIGURE_SENSOR[] = "+ULOCGNSS"; // Configure GNSS sensor -const char SARA_R5_GNSS_CONFIGURE_LOCATION[] = "+ULOCCELL"; // Configure cellular location sensor (CellLocate®) -const char SARA_R5_AIDING_SERVER_CONFIGURATION[] = "+UGSRV"; // Configure aiding server (CellLocate®) -// ### File System -// TO DO: Add support for file tags. Default tag to USER -const char SARA_R5_FILE_SYSTEM_READ_FILE[] = "+URDFILE"; // Read a file -const char SARA_R5_FILE_SYSTEM_DOWNLOAD_FILE[] = "+UDWNFILE"; // Download a file into the module -const char SARA_R5_FILE_SYSTEM_LIST_FILES[] = "+ULSTFILE"; // List of files, size of file, etc. -const char SARA_R5_FILE_SYSTEM_DELETE_FILE[] = "+UDELFILE"; // Delete a file -// ### File System -// TO DO: Add support for file tags. Default tag to USER -const char SARA_R5_SEC_PROFILE[] = "+USECPRF"; -const char SARA_R5_SEC_MANAGER[] = "+USECMNG"; - -// ### Response -const char SARA_R5_RESPONSE_OK[] = "\nOK\r\n"; -const char SARA_R5_RESPONSE_ERROR[] = "\nERROR\r\n"; -const char SARA_R5_RESPONSE_CONNECT[] = "\r\nCONNECT\r\n"; -#define SARA_R5_RESPONSE_OK_OR_ERROR NULL - -// CTRL+Z and ESC ASCII codes for SMS message sends -const char ASCII_CTRL_Z = 0x1A; -const char ASCII_ESC = 0x1B; - -// NMEA data size - used by parseGPRMCString -#define TEMP_NMEA_DATA_SIZE 16 - -#define NOT_AT_COMMAND false -#define AT_COMMAND true - -// The minimum memory allocation for responses from sendCommandWithResponse -// This needs to be large enough to hold the response you're expecting plus and URC's that may arrive during the timeout -#define minimumResponseAllocation 128 - -#define SARA_R5_NUM_SOCKETS 6 - -#define NUM_SUPPORTED_BAUD 9 -const unsigned long SARA_R5_SUPPORTED_BAUD[NUM_SUPPORTED_BAUD] = - { - 115200, - 9600, - 19200, - 38400, - 57600, - 230400, - 460800, - 921600, - 3000000}; -#define SARA_R5_DEFAULT_BAUD_RATE 115200 - -// Flow control definitions for AT&K -// Note: SW (XON/XOFF) flow control is not supported on the SARA_R5 -typedef enum -{ - SARA_R5_DISABLE_FLOW_CONTROL = 0, - SARA_R5_ENABLE_FLOW_CONTROL = 3 -} SARA_R5_flow_control_t; - -// The standard Europe profile should be used as the basis for all other MNOs in Europe outside of Vodafone -// and Deutsche Telekom. However, there may be changes that need to be applied to the module for proper -// operation with any given European MNO such as attach type, RAT preference, band selection, etc. Please -// consult with the preferred network provider. -typedef enum -{ - MNO_INVALID = -1, - MNO_SW_DEFAULT = 0, // Undefined / regulatory - MNO_SIM_ICCID = 1, - MNO_ATT = 2, // AT&T - MNO_VERIZON = 3, - MNO_TELSTRA = 4, - MNO_TMO = 5, // T-Mobile US - MNO_CT = 6, // China Telecom - MNO_SPRINT = 8, - MNO_VODAFONE = 19, - MNO_NTT_DOCOMO = 20, - MNO_TELUS = 21, - MNO_SOFTBANK = 28, - MNO_DT = 31, // Deutsche Telekom - MNO_US_CELLULAR = 32, - MNO_SKT = 39, - MNO_GLOBAL = 90, - MNO_STD_EUROPE = 100, - MNO_STD_EU_NOEPCO = 101 -} mobile_network_operator_t; - -typedef enum -{ - SARA_R5_ERROR_INVALID = -1, // -1 - SARA_R5_ERROR_SUCCESS = 0, // 0 - SARA_R5_ERROR_OUT_OF_MEMORY, // 1 - SARA_R5_ERROR_TIMEOUT, // 2 - SARA_R5_ERROR_UNEXPECTED_PARAM, // 3 - SARA_R5_ERROR_UNEXPECTED_RESPONSE, // 4 - SARA_R5_ERROR_NO_RESPONSE, // 5 - SARA_R5_ERROR_DEREGISTERED, // 6 - SARA_R5_ERROR_ZERO_READ_LENGTH, // 7 - SARA_R5_ERROR_ERROR // 8 -} SARA_R5_error_t; -#define SARA_R5_SUCCESS SARA_R5_ERROR_SUCCESS - -typedef enum -{ - SARA_R5_REGISTRATION_INVALID = -1, - SARA_R5_REGISTRATION_NOT_REGISTERED = 0, - SARA_R5_REGISTRATION_HOME = 1, - SARA_R5_REGISTRATION_SEARCHING = 2, - SARA_R5_REGISTRATION_DENIED = 3, - SARA_R5_REGISTRATION_UNKNOWN = 4, - SARA_R5_REGISTRATION_ROAMING = 5, - SARA_R5_REGISTRATION_HOME_SMS_ONLY = 6, - SARA_R5_REGISTRATION_ROAMING_SMS_ONLY = 7, - SARA_R5_REGISTRATION_EMERGENCY_SERV_ONLY = 8, - SARA_R5_REGISTRATION_HOME_CSFB_NOT_PREFERRED = 9, - SARA_R5_REGISTRATION_ROAMING_CSFB_NOT_PREFERRED = 10 -} SARA_R5_registration_status_t; - -struct DateData -{ - uint8_t day; - uint8_t month; - unsigned int year; -}; - -struct TimeData -{ - uint8_t hour; - uint8_t minute; - uint8_t second; - unsigned int ms; - uint8_t tzh; - uint8_t tzm; -}; - -struct ClockData -{ - struct DateData date; - struct TimeData time; -}; - -struct PositionData -{ - float utc; - float lat; // Degrees: +/- 90 - float lon; // Degrees: +/- 180 - float alt; - char mode; - char status; -}; - -struct SpeedData -{ - float speed; // m/s - float cog; // Degrees - float magVar; // Degrees -}; - -struct operator_stats -{ - uint8_t stat; - String shortOp; - String longOp; - unsigned long numOp; - uint8_t act; -}; - -typedef enum -{ - SARA_R5_TCP = 6, - SARA_R5_UDP = 17 -} SARA_R5_socket_protocol_t; - -typedef enum -{ - SARA_R5_TCP_SOCKET_STATUS_INACTIVE, - SARA_R5_TCP_SOCKET_STATUS_LISTEN, - SARA_R5_TCP_SOCKET_STATUS_SYN_SENT, - SARA_R5_TCP_SOCKET_STATUS_SYN_RCVD, - SARA_R5_TCP_SOCKET_STATUS_ESTABLISHED, - SARA_R5_TCP_SOCKET_STATUS_FIN_WAIT_1, - SARA_R5_TCP_SOCKET_STATUS_FIN_WAIT_2, - SARA_R5_TCP_SOCKET_STATUS_CLOSE_WAIT, - SARA_R5_TCP_SOCKET_STATUS_CLOSING, - SARA_R5_TCP_SOCKET_STATUS_LAST_ACK, - SARA_R5_TCP_SOCKET_STATUS_TIME_WAIT -} SARA_R5_tcp_socket_status_t; - -typedef enum -{ - SARA_R5_MESSAGE_FORMAT_PDU = 0, - SARA_R5_MESSAGE_FORMAT_TEXT = 1 -} SARA_R5_message_format_t; - -typedef enum -{ - SARA_R5_UTIME_MODE_STOP = 0, - SARA_R5_UTIME_MODE_PPS, - SARA_R5_UTIME_MODE_ONE_SHOT, - SARA_R5_UTIME_MODE_EXT_INT -} SARA_R5_utime_mode_t; - -typedef enum -{ - SARA_R5_UTIME_SENSOR_NONE = 0, - SARA_R5_UTIME_SENSOR_GNSS_LTE = 1, - SARA_R5_UTIME_SENSOR_LTE -} SARA_R5_utime_sensor_t; - -typedef enum -{ - SARA_R5_UTIME_URC_CONFIGURATION_DISABLED = 0, - SARA_R5_UTIME_URC_CONFIGURATION_ENABLED -} SARA_R5_utime_urc_configuration_t; - -typedef enum -{ - SARA_R5_SIM_NOT_PRESENT = 0, - SARA_R5_SIM_PIN_NEEDED, - SARA_R5_SIM_PIN_BLOCKED, - SARA_R5_SIM_PUK_BLOCKED, - SARA_R5_SIM_NOT_OPERATIONAL, - SARA_R5_SIM_RESTRICTED, - SARA_R5_SIM_OPERATIONAL - //SARA_R5_SIM_PHONEBOOK_READY, // Not reported by SARA-R5 - //SARA_R5_SIM_USIM_PHONEBOOK_READY, // Not reported by SARA-R5 - //SARA_R5_SIM_TOOLKIT_REFRESH_SUCCESSFUL, // Not reported by SARA-R5 - //SARA_R5_SIM_TOOLKIT_REFRESH_UNSUCCESSFUL, // Not reported by SARA-R5 - //SARA_R5_SIM_PPP_CONNECTION_ACTIVE, // Not reported by SARA-R5 - //SARA_R5_SIM_VOICE_CALL_ACTIVE, // Not reported by SARA-R5 - //SARA_R5_SIM_CSD_CALL_ACTIVE // Not reported by SARA-R5 -} SARA_R5_sim_states_t; - -#define SARA_R5_NUM_PSD_PROFILES 6 // Number of supported PSD profiles -#define SARA_R5_NUM_PDP_CONTEXT_IDENTIFIERS 11 // Number of supported PDP context identifiers -#define SARA_R5_NUM_HTTP_PROFILES 4 // Number of supported HTTP profiles - -typedef enum -{ - SARA_R5_HTTP_OP_CODE_SERVER_IP = 0, - SARA_R5_HTTP_OP_CODE_SERVER_NAME, - SARA_R5_HTTP_OP_CODE_USERNAME, - SARA_R5_HTTP_OP_CODE_PASSWORD, - SARA_R5_HTTP_OP_CODE_AUTHENTICATION, - SARA_R5_HTTP_OP_CODE_SERVER_PORT, - SARA_R5_HTTP_OP_CODE_SECURE, - SARA_R5_HTTP_OP_CODE_REQUEST_TIMEOUT, - SARA_R5_HTTP_OP_CODE_ADD_CUSTOM_HEADERS = 9 -} SARA_R5_http_op_codes_t; - -typedef enum -{ - SARA_R5_HTTP_COMMAND_HEAD = 0, - SARA_R5_HTTP_COMMAND_GET, - SARA_R5_HTTP_COMMAND_DELETE, - SARA_R5_HTTP_COMMAND_PUT, - SARA_R5_HTTP_COMMAND_POST_FILE, - SARA_R5_HTTP_COMMAND_POST_DATA, - SARA_R5_HTTP_COMMAND_GET_FOTA = 100 -} SARA_R5_http_commands_t; - -typedef enum -{ - SARA_R5_HTTP_CONTENT_APPLICATION_X_WWW = 0, - SARA_R5_HTTP_CONTENT_TEXT_PLAIN, - SARA_R5_HTTP_CONTENT_APPLICATION_OCTET, - SARA_R5_HTTP_CONTENT_MULTIPART_FORM, - SARA_R5_HTTP_CONTENT_APPLICATION_JSON, - SARA_R5_HTTP_CONTENT_APPLICATION_XML, - SARA_R5_HTTP_CONTENT_USER_DEFINED -} SARA_R5_http_content_types_t; - -typedef enum -{ - SARA_R5_MQTT_NV_RESTORE = 0, - SARA_R5_MQTT_NV_SET, - SARA_R5_MQTT_NV_STORE, -} SARA_R5_mqtt_nv_parameter_t; - -typedef enum -{ - SARA_R5_MQTT_PROFILE_CLIENT_ID = 0, - SARA_R5_MQTT_PROFILE_SERVERNAME = 2, - SARA_R5_MQTT_PROFILE_IPADDRESS, - SARA_R5_MQTT_PROFILE_USERNAMEPWD, - SARA_R5_MQTT_PROFILE_QOS = 6, - SARA_R5_MQTT_PROFILE_RETAIN, - SARA_R5_MQTT_PROFILE_TOPIC, - SARA_R5_MQTT_PROFILE_MESSAGE, - SARA_R5_MQTT_PROFILE_INACTIVITYTIMEOUT, - SARA_R5_MQTT_PROFILE_SECURE, -} SARA_R5_mqtt_profile_opcode_t; - -typedef enum -{ - SARA_R5_MQTT_COMMAND_LOGOUT = 0, - SARA_R5_MQTT_COMMAND_LOGIN, - SARA_R5_MQTT_COMMAND_PUBLISH, - SARA_R5_MQTT_COMMAND_PUBLISHFILE, - SARA_R5_MQTT_COMMAND_SUBSCRIBE, - SARA_R5_MQTT_COMMAND_UNSUBSCRIBE, - SARA_R5_MQTT_COMMAND_READ, - SARA_R5_MQTT_COMMAND_PING, - SARA_R5_MQTT_COMMAND_PUBLISHBINARY, -} SARA_R5_mqtt_command_opcode_t; - -typedef enum -{ - SARA_R5_PSD_CONFIG_PARAM_PROTOCOL = 0, - SARA_R5_PSD_CONFIG_PARAM_APN, - //SARA_R5_PSD_CONFIG_PARAM_USERNAME, // Not allowed on SARA-R5 - //SARA_R5_PSD_CONFIG_PARAM_PASSWORD, // Not allowed on SARA-R5 - SARA_R5_PSD_CONFIG_PARAM_DNS1 = 4, - SARA_R5_PSD_CONFIG_PARAM_DNS2, - //SARA_R5_PSD_CONFIG_PARAM_AUTHENTICATION, // Not allowed on SARA-R5 - //SARA_R5_PSD_CONFIG_PARAM_IP_ADDRESS, // Not allowed on SARA-R5 - //SARA_R5_PSD_CONFIG_PARAM_DATA_COMPRESSION, // Not allowed on SARA-R5 - //SARA_R5_PSD_CONFIG_PARAM_HEADER_COMPRESSION, // Not allowed on SARA-R5 - SARA_R5_PSD_CONFIG_PARAM_MAP_TO_CID = 100 -} SARA_R5_pdp_configuration_parameter_t; - -typedef enum -{ - SARA_R5_PSD_PROTOCOL_IPV4 = 0, - SARA_R5_PSD_PROTOCOL_IPV6, - SARA_R5_PSD_PROTOCOL_IPV4V6_V4_PREF, - SARA_R5_PSD_PROTOCOL_IPV4V6_V6_PREF -} SARA_R5_pdp_protocol_type_t; - -typedef enum -{ - SARA_R5_PSD_ACTION_RESET = 0, - SARA_R5_PSD_ACTION_STORE, - SARA_R5_PSD_ACTION_LOAD, - SARA_R5_PSD_ACTION_ACTIVATE, - SARA_R5_PSD_ACTION_DEACTIVATE -} SARA_R5_pdp_actions_t; - -typedef enum -{ - SARA_R5_SEC_PROFILE_PARAM_CERT_VAL_LEVEL = 0, - SARA_R5_SEC_PROFILE_PARAM_TLS_VER, - SARA_R5_SEC_PROFILE_PARAM_CYPHER_SUITE, - SARA_R5_SEC_PROFILE_PARAM_ROOT_CA, - SARA_R5_SEC_PROFILE_PARAM_HOSTNAME, - SARA_R5_SEC_PROFILE_PARAM_CLIENT_CERT, - SARA_R5_SEC_PROFILE_PARAM_CLIENT_KEY, - SARA_R5_SEC_PROFILE_PARAM_CLIENT_KEY_PWD, - SARA_R5_SEC_PROFILE_PARAM_PSK, - SARA_R5_SEC_PROFILE_PARAM_PSK_IDENT, - SARA_R5_SEC_PROFILE_PARAM_SNI, -} SARA_R5_sec_profile_parameter_t; - -typedef enum -{ - SARA_R5_SEC_PROFILE_CERTVAL_OPCODE_NO = 0, - SARA_R5_SEC_PROFILE_CERTVAL_OPCODE_YESNOURL, - SARA_R5_SEC_PROFILE_CERVTAL_OPCODE_YESURL, - SARA_R5_SEC_PROFILE_CERTVAL_OPCODE_YESURLDATE, -} SARA_R5_sec_profile_certval_op_code_t; - -typedef enum -{ - SARA_R5_SEC_PROFILE_TLS_OPCODE_ANYVER = 0, - SARA_R5_SEC_PROFILE_TLS_OPCODE_VER1_0, - SARA_R5_SEC_PROFILE_TLS_OPCODE_VER1_1, - SARA_R5_SEC_PROFILE_TLS_OPCODE_VER1_2, - SARA_R5_SEC_PROFILE_TLS_OPCODE_VER1_3, -} SARA_R5_sec_profile_tls_op_code_t; - -typedef enum -{ - SARA_R5_SEC_PROFILE_SUITE_OPCODE_PROPOSEDDEFAULT = 0, -} SARA_R5_sec_profile_suite_op_code_t; - -typedef enum -{ - SARA_R5_SEC_MANAGER_OPCODE_IMPORT = 0, -} SARA_R5_sec_manager_opcode_t; - -typedef enum -{ - SARA_R5_SEC_MANAGER_ROOTCA = 0, - SARA_R5_SEC_MANAGER_CLIENT_CERT, - SARA_R5_SEC_MANAGER_CLIENT_KEY, - SARA_R5_SEC_MANAGER_SERVER_CERT -} SARA_R5_sec_manager_parameter_t; - -typedef enum -{ - MINIMUM_FUNCTIONALITY = 0, // (disable both transmit and receive RF circuits by deactivating both CS and PS services) - FULL_FUNCTIONALITY = 1, - AIRPLANE_MODE = 4, - SIM_TOOLKIT_ENABLE_DEDICATED = 6, - SIM_TOOLKIT_DISABLE_DEDICATED = 7, - SIM_TOOLKIT_ENABLE_RAW = 9, - FAST_SAFE_POWER_OFF = 10, - //SILENT_RESET_WITHOUT_SIM = 15, // Not supported on SARA-R5 - SILENT_RESET_WITH_SIM = 16 - //MINIMUM_FUNCTIONALITY = 19, // Not supported on SARA-R5 - //DEEP_LOW_POWER_STATE = 127 // Not supported on SARA-R5 -} SARA_R5_functionality_t; - -class SARA_R5 : public Print -{ -public: - // Constructor - // The library will use the powerPin and resetPin (if provided) to power the module off/on and perform an emergency reset - // maxInitTries sets the maximum number of initialization attempts. .init is called by .begin. - SARA_R5(int powerPin = SARA_R5_POWER_PIN, int resetPin = SARA_R5_RESET_PIN, uint8_t maxInitTries = 9); - - ~SARA_R5(); - // Begin -- initialize module and ensure it's connected -#ifdef SARA_R5_SOFTWARE_SERIAL_ENABLED - bool begin(SoftwareSerial &softSerial, unsigned long baud = 9600); -#endif - bool begin(HardwareSerial &hardSerial, unsigned long baud = 9600, bool doBegin = true); - - // Debug prints - void enableDebugging(Print &debugPort = Serial); //Turn on debug printing. If user doesn't specify then Serial will be used. - void enableAtDebugging(Print &debugPort = Serial); //Turn on AT debug printing. If user doesn't specify then Serial will be used. - - // Invert the polarity of the power pin - if required - // Normally the SARA's power pin is pulled low and released to toggle the power - // But the Asset Tracker needs this to be pulled high and released instead - void invertPowerPin(bool invert = false); - - SARA_R5_error_t modulePowerOff(void); // Graceful disconnect and shutdown using +CPWROFF. - void modulePowerOn(void); // Requires access to the PWR_ON pin - - // Loop polling and polling setup - process URC's etc. from the module - - // This function was originally written by Matthew Menze for the LTE Shield (SARA-R4) library - // See: https://github.com/sparkfun/SparkFun_LTE_Shield_Arduino_Library/pull/8 - // It does the same job as ::poll but also processes any 'old' data stored in the backlog first - // It also has a built-in timeout - which ::poll does not - // Use this - it is way better than ::poll. Thank you Matthew! - bool bufferedPoll(void); - - // This is the original poll function. - // It is 'blocking' - it does not return when serial data is available until it receives a `\n`. - // ::bufferedPoll is the new improved version. It processes any data in the backlog and includes a timeout. - // Retained for backward-compatibility and just in case you do want to (temporarily) ignore any data in the backlog - bool poll(void); - - // Callbacks (called during polling) - void setSocketListenCallback(void (*socketListenCallback)(int, IPAddress, unsigned int, int, IPAddress, unsigned int)); // listen Socket, local IP Address, listen Port, socket, remote IP Address, port - // This is the original read socket callback - called when a +UUSORD or +UUSORF URC is received - // It works - and handles binary data correctly - but the remote IP Address and Port are lost for UDP connections - // setSocketReadCallbackPlus is preferred! - void setSocketReadCallback(void (*socketReadCallback)(int, String)); // socket, read data - void setSocketReadCallbackPlus(void (*socketReadCallbackPlus)(int, const char *, int, IPAddress, int)); // socket, read data, length, remoteAddress, remotePort - void setSocketCloseCallback(void (*socketCloseCallback)(int)); // socket - void setGpsReadCallback(void (*gpsRequestCallback)(ClockData time, - PositionData gps, SpeedData spd, unsigned long uncertainty)); - void setSIMstateReportCallback(void (*simStateRequestCallback)(SARA_R5_sim_states_t state)); - void setPSDActionCallback(void (*psdActionRequestCallback)(int result, IPAddress ip)); - void setPingCallback(void (*pingRequestCallback)(int retry, int p_size, String remote_hostname, IPAddress ip, int ttl, long rtt)); - void setHTTPCommandCallback(void (*httpCommandRequestCallback)(int profile, int command, int result)); - void setMQTTCommandCallback(void (*mqttCommandRequestCallback)(int command, int result)); - SARA_R5_error_t setRegistrationCallback(void (*registrationCallback)(SARA_R5_registration_status_t status, - unsigned int lac, unsigned int ci, int Act)); - SARA_R5_error_t setEpsRegistrationCallback(void (*epsRegistrationCallback)(SARA_R5_registration_status_t status, - unsigned int tac, unsigned int ci, int Act)); - - // Direct write/print to cell serial port - virtual size_t write(uint8_t c); - virtual size_t write(const char *str); - virtual size_t write(const char *buffer, size_t size); - - // General AT Commands - SARA_R5_error_t at(void); - SARA_R5_error_t enableEcho(bool enable = true); - String getManufacturerID(void); - String getModelID(void); - String getFirmwareVersion(void); - String getSerialNo(void); - String getIMEI(void); - String getIMSI(void); - String getCCID(void); - String getSubscriberNo(void); - String getCapabilities(void); - - // Control and status AT commands - SARA_R5_error_t reset(void); - String clock(void); - // TODO: Return a clock struct - SARA_R5_error_t clock(uint8_t *y, uint8_t *mo, uint8_t *d, - uint8_t *h, uint8_t *min, uint8_t *s, int8_t *tz); // TZ can be +/- and is in increments of 15 minutes. -28 == 7 hours behind UTC/GMT - SARA_R5_error_t setClock(String theTime); - SARA_R5_error_t setClock(uint8_t y, uint8_t mo, uint8_t d, - uint8_t h, uint8_t min, uint8_t s, int8_t tz); // TZ can be +/- and is in increments of 15 minutes. -28 == 7 hours behind UTC/GMT - void autoTimeZoneForBegin(bool enable = true); // Call autoTimeZoneForBegin(false) _before_ .begin if you want to disable the automatic time zone - SARA_R5_error_t autoTimeZone(bool enable); // Enable/disable automatic time zone adjustment - SARA_R5_error_t setUtimeMode(SARA_R5_utime_mode_t mode = SARA_R5_UTIME_MODE_PPS, SARA_R5_utime_sensor_t sensor = SARA_R5_UTIME_SENSOR_GNSS_LTE); // Time mode, source etc. (+UTIME) - SARA_R5_error_t getUtimeMode(SARA_R5_utime_mode_t *mode, SARA_R5_utime_sensor_t *sensor); - SARA_R5_error_t setUtimeIndication(SARA_R5_utime_urc_configuration_t config = SARA_R5_UTIME_URC_CONFIGURATION_ENABLED); // +UTIMEIND - SARA_R5_error_t getUtimeIndication(SARA_R5_utime_urc_configuration_t *config); - SARA_R5_error_t setUtimeConfiguration(int32_t offsetNanoseconds = 0, int32_t offsetSeconds = 0); // +UTIMECFG - SARA_R5_error_t getUtimeConfiguration(int32_t *offsetNanoseconds, int32_t *offsetSeconds); - - // Network service AT commands - int8_t rssi(void); // Receive signal strength - SARA_R5_registration_status_t registration(bool eps = true); - bool setNetworkProfile(mobile_network_operator_t mno, bool autoReset = false, bool urcNotification = false); - mobile_network_operator_t getNetworkProfile(void); - typedef enum - { - PDP_TYPE_INVALID = -1, - PDP_TYPE_IP = 0, - PDP_TYPE_NONIP = 1, - PDP_TYPE_IPV4V6 = 2, - PDP_TYPE_IPV6 = 3 - } SARA_R5_pdp_type; - SARA_R5_error_t setAPN(String apn, uint8_t cid = 1, SARA_R5_pdp_type pdpType = PDP_TYPE_IP); // Set the Access Point Name - SARA_R5_error_t getAPN(int cid, String *apn, IPAddress *ip, SARA_R5_pdp_type* pdpType = NULL); // Return the apn and IP address for the chosen context identifier - - SARA_R5_error_t getSimStatus(String* code); - SARA_R5_error_t setSimPin(String pin); - - // SIM - // Status report Mode: - // Bit States reported - // 0 Reports the (U)SIM initialization status ('s from 0 to 6 may be reported) - // 1 Reports the (U)SIM phonebook initialization status ('s from 7 to 8 may be reported) - // 2 Reports the (U)SIM toolkit REFRESH proactive command execution result ('s from 9 to 13 may be reported) - // Note: For the SARA-R5: =7, 8, 9, 10, 11, 12 and 13 are not reported. - SARA_R5_error_t setSIMstateReportingMode(int mode); - SARA_R5_error_t getSIMstateReportingMode(int *mode); - - typedef enum - { - L2P_DEFAULT, - L2P_PPP, - L2P_M_HEX, - L2P_M_RAW_IP, - L2P_M_OPT_PPP - } SARA_R5_l2p_t; - SARA_R5_error_t enterPPP(uint8_t cid = 1, char dialing_type_char = 0, - unsigned long dialNumber = 99, SARA_R5_l2p_t l2p = L2P_DEFAULT); - - uint8_t getOperators(struct operator_stats *op, int maxOps = 3); - SARA_R5_error_t registerOperator(struct operator_stats oper); - SARA_R5_error_t automaticOperatorSelection(); - SARA_R5_error_t getOperator(String *oper); - SARA_R5_error_t deregisterOperator(void); - - // SMS -- Short Messages Service - SARA_R5_error_t setSMSMessageFormat(SARA_R5_message_format_t textMode = SARA_R5_MESSAGE_FORMAT_TEXT); - SARA_R5_error_t sendSMS(String number, String message); - SARA_R5_error_t getPreferredMessageStorage(int *used, int *total, String memory = "ME"); - SARA_R5_error_t readSMSmessage(int location, String *unread, String *from, String *dateTime, String *message); - SARA_R5_error_t deleteSMSmessage(int location, int deleteFlag = 0); // Default to deleting the single message at the specified location - SARA_R5_error_t deleteReadSMSmessages(void) { return (deleteSMSmessage( 1, 1 )); }; // Delete all the read messages from preferred storage - SARA_R5_error_t deleteReadSentSMSmessages(void) { return (deleteSMSmessage( 1, 2 )); }; // Delete the read and sent messages from preferred storage - SARA_R5_error_t deleteReadSentUnsentSMSmessages(void) { return (deleteSMSmessage( 1, 3 )); }; // Delete the read, sent and unsent messages from preferred storage - SARA_R5_error_t deleteAllSMSmessages(void) { return (deleteSMSmessage( 1, 4 )); }; // Delete the read, sent, unsent and unread messages from preferred storage - - // V24 Control and V25ter (UART interface) AT commands - SARA_R5_error_t setBaud(unsigned long baud); - SARA_R5_error_t setFlowControl(SARA_R5_flow_control_t value = SARA_R5_ENABLE_FLOW_CONTROL); - - // GPIO - // GPIO pin map - typedef enum - { - GPIO1 = 16, - GPIO2 = 23, - GPIO3 = 24, - GPIO4 = 25, - GPIO5 = 42, - GPIO6 = 19 - } SARA_R5_gpio_t; - // GPIO pin modes - typedef enum - { - GPIO_MODE_INVALID = -1, - GPIO_OUTPUT = 0, - GPIO_INPUT, - NETWORK_STATUS, - GNSS_SUPPLY_ENABLE, - GNSS_DATA_READY, - GNSS_RTC_SHARING, - JAMMING_DETECTION, - SIM_CARD_DETECTION, - HEADSET_DETECTION, - GSM_TX_BURST_INDICATION, - MODULE_STATUS_INDICATION, - MODULE_OPERATING_MODE_INDICATION, - I2S_DIGITAL_AUDIO_INTERFACE, - SPI_SERIAL_INTERFACE, - MASTER_CLOCK_GENRATION, - UART_INTERFACE, - WIFI_ENABLE, - RING_INDICATION = 18, - LAST_GASP_ENABLE, - EXTERNAL_GNSS_ANTENNA, - TIME_PULSE_GNSS, - TIME_PULSE_OUTPUT, - TIMESTAMP, - FAST_POWER_OFF, - LWM2M_PULSE, - HARDWARE_FLOW_CONTROL, - ANTENNA_TUNING, - EXT_GNSS_TIME_PULSE, - EXT_GNSS_TIMESTAMP, - DTR_MODE, - KHZ_32768_OUT = 32, - PAD_DISABLED = 255 - } SARA_R5_gpio_mode_t; - SARA_R5_error_t setGpioMode(SARA_R5_gpio_t gpio, SARA_R5_gpio_mode_t mode, int value = 0); - SARA_R5_gpio_mode_t getGpioMode(SARA_R5_gpio_t gpio); - - // IP Transport Layer - int socketOpen(SARA_R5_socket_protocol_t protocol, unsigned int localPort = 0); // Open a socket. Returns the socket number. - SARA_R5_error_t socketClose(int socket, unsigned long timeout = SARA_R5_2_MIN_TIMEOUT); // Close the socket - SARA_R5_error_t socketConnect(int socket, const char *address, unsigned int port); // TCP - connect to a remote IP Address using the specified port. Not required for UDP sockets. - SARA_R5_error_t socketConnect(int socket, IPAddress address, unsigned int port); - // Write data to the specified socket. Works with binary data - but you must specify the data length when using the const char * version - // Works with both TCP and UDP sockets - but socketWriteUDP is preferred for UDP and doesn't require socketOpen to be called first - SARA_R5_error_t socketWrite(int socket, const char *str, int len = -1); - SARA_R5_error_t socketWrite(int socket, String str); // OK for binary data - // Write UDP data to the specified IP Address and port. - // Works with binary data - but you must specify the data length when using the const char * versions - // If you let len default to -1, strlen is used to calculate the data length - and will be incorrect for binary data - SARA_R5_error_t socketWriteUDP(int socket, const char *address, int port, const char *str, int len = -1); - SARA_R5_error_t socketWriteUDP(int socket, IPAddress address, int port, const char *str, int len = -1); - SARA_R5_error_t socketWriteUDP(int socket, String address, int port, String str); - // Read data from the specified socket - // Call socketReadAvailable first to determine how much data is available - or use the callbacks (triggered by URC's) - // Works for both TCP and UDP - but socketReadUDP is preferred for UDP as it records the remote IP Address and port - // bytesRead - if provided - will be updated with the number of bytes actually read. This could be less than length! - SARA_R5_error_t socketRead(int socket, int length, char *readDest, int *bytesRead = NULL); - // Return the number of bytes available (waiting to be read) on the chosen socket - // Uses +USORD. Valid for both TCP and UDP sockets - but socketReadAvailableUDP is preferred for UDP - SARA_R5_error_t socketReadAvailable(int socket, int *length); - // Read data from the specified UDP port - // Call socketReadAvailableUDP first to determine how much data is available - or use the callbacks (triggered by URC's) - // The remote IP Address and port are returned via *remoteIPAddress and *remotePort (if not NULL) - // bytesRead - if provided - will be updated with the number of bytes actually read. This could be less than length! - SARA_R5_error_t socketReadUDP(int socket, int length, char *readDest, IPAddress *remoteIPAddress = NULL, int *remotePort = NULL, int *bytesRead = NULL); - // Return the number of bytes available (waiting to be read) on the chosen UDP socket - SARA_R5_error_t socketReadAvailableUDP(int socket, int *length); - // Start listening for a connection on the specified port. The connection is reported via the socket listen callback - SARA_R5_error_t socketListen(int socket, unsigned int port); - // Place the socket into direct link mode - making it easy to transfer binary data. Wait two seconds and then send +++ to exit the link. - SARA_R5_error_t socketDirectLinkMode(int socket); - // Configure when direct link data is sent - SARA_R5_error_t socketDirectLinkTimeTrigger(int socket, unsigned long timerTrigger); - SARA_R5_error_t socketDirectLinkDataLengthTrigger(int socket, int dataLengthTrigger); - SARA_R5_error_t socketDirectLinkCharacterTrigger(int socket, int characterTrigger); - SARA_R5_error_t socketDirectLinkCongestionTimer(int socket, unsigned long congestionTimer); - // Use +USOCTL (Socket control) to query the socket parameters - SARA_R5_error_t querySocketType(int socket, SARA_R5_socket_protocol_t *protocol); - SARA_R5_error_t querySocketLastError(int socket, int *error); - SARA_R5_error_t querySocketTotalBytesSent(int socket, uint32_t *total); - SARA_R5_error_t querySocketTotalBytesReceived(int socket, uint32_t *total); - SARA_R5_error_t querySocketRemoteIPAddress(int socket, IPAddress *address, int *port); - SARA_R5_error_t querySocketStatusTCP(int socket, SARA_R5_tcp_socket_status_t *status); - SARA_R5_error_t querySocketOutUnackData(int socket, uint32_t *total); - // Return the most recent socket error - int socketGetLastError(); - // Return the remote IP Address from the most recent socket listen indication (socket connection) - // Use the socket listen callback to get the full address and port information - IPAddress lastRemoteIP(void); - - // Ping - SARA_R5_error_t ping(String remote_host, int retry = 4, int p_size = 32, unsigned long timeout = 5000, int ttl = 32); - - // HTTP - SARA_R5_error_t resetHTTPprofile(int profile); // Reset the HTTP profile. Note: The configured HTTP profile parameters are not saved in the non volatile memory. - SARA_R5_error_t setHTTPserverIPaddress(int profile, IPAddress address); // Default: empty string - SARA_R5_error_t setHTTPserverName(int profile, String server); // Default: empty string - SARA_R5_error_t setHTTPusername(int profile, String username); // Default: empty string - SARA_R5_error_t setHTTPpassword(int profile, String password); // Default: empty string - SARA_R5_error_t setHTTPauthentication(int profile, bool authenticate); // Default: no authentication - SARA_R5_error_t setHTTPserverPort(int profile, int port); // Default: 80 - SARA_R5_error_t setHTTPcustomHeader(int profile, String header); // Default: format 0:Content-Type:application/json" - SARA_R5_error_t setHTTPsecure(int profile, bool secure, int secprofile = -1); // Default: disabled (HTTP on port 80). Set to true for HTTPS on port 443 - // TO DO: Add custom request headers - SARA_R5_error_t getHTTPprotocolError(int profile, int *error_class, int *error_code); // Read the most recent HTTP protocol error for this profile - SARA_R5_error_t sendHTTPGET(int profile, String path, String responseFilename); - SARA_R5_error_t sendHTTPPOSTdata(int profile, String path, String responseFilename, String data, SARA_R5_http_content_types_t httpContentType); - SARA_R5_error_t sendHTTPPOSTfile(int profile, String path, String responseFilename, String requestFile, SARA_R5_http_content_types_t httpContentType); - - SARA_R5_error_t nvMQTT(SARA_R5_mqtt_nv_parameter_t parameter); - SARA_R5_error_t setMQTTclientId(String clientId); - SARA_R5_error_t setMQTTserver(String serverName, int port); - SARA_R5_error_t setMQTTsecure(bool secure, int secprofile = -1); - SARA_R5_error_t connectMQTT(void); - SARA_R5_error_t disconnectMQTT(void); - SARA_R5_error_t subscribeMQTTtopic(int max_Qos, String topic); - SARA_R5_error_t unsubscribeMQTTtopic(String topic); - SARA_R5_error_t readMQTT(int* pQos, String* pTopic, uint8_t *readDest, int readLength, int *bytesRead); - SARA_R5_error_t getMQTTprotocolError(int *error_code, int *error_code2); - - // Configure security profiles - SARA_R5_error_t resetSecurityProfile(int secprofile); - SARA_R5_error_t configSecurityProfileString(int secprofile, SARA_R5_sec_profile_parameter_t parameter, String value); - SARA_R5_error_t configSecurityProfile(int secprofile, SARA_R5_sec_profile_parameter_t parameter, int value); - SARA_R5_error_t setSecurityManager(SARA_R5_sec_manager_opcode_t opcode, SARA_R5_sec_manager_parameter_t parameter, String name, String data); - - // Packet Switched Data - // Configure the PDP using +UPSD. See SARA_R5_pdp_configuration_parameter_t for the list of parameters: protocol, APN, username, DNS, etc. - SARA_R5_error_t setPDPconfiguration(int profile, SARA_R5_pdp_configuration_parameter_t parameter, int value); // Set parameters in the chosen PSD profile - SARA_R5_error_t setPDPconfiguration(int profile, SARA_R5_pdp_configuration_parameter_t parameter, SARA_R5_pdp_protocol_type_t value); // Set parameters in the chosen PSD profile - SARA_R5_error_t setPDPconfiguration(int profile, SARA_R5_pdp_configuration_parameter_t parameter, String value); // Set parameters in the chosen PSD profile - SARA_R5_error_t setPDPconfiguration(int profile, SARA_R5_pdp_configuration_parameter_t parameter, IPAddress value); // Set parameters in the chosen PSD profile - SARA_R5_error_t performPDPaction(int profile, SARA_R5_pdp_actions_t action); // Performs the requested action for the specified PSD profile: reset, store, load, activate, deactivate - SARA_R5_error_t activatePDPcontext(bool status, int cid = -1); // Activates or deactivates the specified PDP context. Default to all (cid = -1) - SARA_R5_error_t getNetworkAssignedIPAddress(int profile, IPAddress *address); // Get the dynamic IP address assigned during PDP context activation - - // GPS - typedef enum - { - GNSS_SYSTEM_GPS = 1, - GNSS_SYSTEM_SBAS = 2, - GNSS_SYSTEM_GALILEO = 4, - GNSS_SYSTEM_BEIDOU = 8, - GNSS_SYSTEM_IMES = 16, - GNSS_SYSTEM_QZSS = 32, - GNSS_SYSTEM_GLONASS = 64 - } gnss_system_t; - typedef enum - { - GNSS_AIDING_MODE_NONE = 0, - GNSS_AIDING_MODE_AUTOMATIC = 1, - GNSS_AIDING_MODE_ASSISTNOW_OFFLINE = 2, - GNSS_AIDING_MODE_ASSISTNOW_ONLINE = 4, - GNSS_AIDING_MODE_ASSISTNOW_AUTONOMOUS = 8 - } gnss_aiding_mode_t; - bool isGPSon(void); - SARA_R5_error_t gpsPower(bool enable = true, - gnss_system_t gnss_sys = GNSS_SYSTEM_GPS, - gnss_aiding_mode_t gnss_aiding = GNSS_AIDING_MODE_AUTOMATIC); - //SARA_R5_error_t gpsEnableClock(bool enable = true); - //SARA_R5_error_t gpsGetClock(struct ClockData *clock); - //SARA_R5_error_t gpsEnableFix(bool enable = true); - //SARA_R5_error_t gpsGetFix(float *lat, float *lon, unsigned int *alt, uint8_t *quality, uint8_t *sat); - //SARA_R5_error_t gpsGetFix(struct PositionData *pos); - //SARA_R5_error_t gpsEnablePos(bool enable = true); - //SARA_R5_error_t gpsGetPos(struct PositionData *pos); - //SARA_R5_error_t gpsEnableSat(bool enable = true); - //SARA_R5_error_t gpsGetSat(uint8_t *sats); - SARA_R5_error_t gpsEnableRmc(bool enable = true); // Enable GPRMC messages - SARA_R5_error_t gpsGetRmc(struct PositionData *pos, struct SpeedData *speed, struct ClockData *clk, bool *valid); //Parse a GPRMC message - //SARA_R5_error_t gpsEnableSpeed(bool enable = true); - //SARA_R5_error_t gpsGetSpeed(struct SpeedData *speed); - - SARA_R5_error_t gpsRequest(unsigned int timeout, uint32_t accuracy, bool detailed = true, unsigned int sensor = 3); - - //CellLocate - SARA_R5_error_t gpsAidingServerConf(const char *primaryServer, const char *secondaryServer, const char *authToken, - unsigned int days = 14, unsigned int period = 4, unsigned int resolution = 1, - unsigned int gnssTypes = 65, unsigned int mode = 0, unsigned int dataType = 15); - - // File system - // TO DO: add full support for file tags. Default tag to USER - SARA_R5_error_t getFileContents(String filename, String *contents); // OK for text files. But will fail with binary files (containing \0) on some platforms. - SARA_R5_error_t getFileContents(String filename, char *contents); // OK for binary files. Make sure contents can hold the entire file. Get the size first with getFileSize. - // Append data to a file, delete file first to not appends the data. - SARA_R5_error_t appendFileContents(String filename, String str); - SARA_R5_error_t appendFileContents(String filename, const char *str, int len); - SARA_R5_error_t getFileSize(String filename, int *size); - SARA_R5_error_t deleteFile(String filename); - - // Functionality - SARA_R5_error_t functionality(SARA_R5_functionality_t function = FULL_FUNCTIONALITY); - - // Send a custom command with an expected (potentially partial) response, store entire response - SARA_R5_error_t sendCustomCommandWithResponse(const char *command, const char *expectedResponse, - char *responseDest, unsigned long commandTimeout = SARA_R5_STANDARD_RESPONSE_TIMEOUT, bool at = true); - -private: - HardwareSerial *_hardSerial; -#ifdef SARA_R5_SOFTWARE_SERIAL_ENABLED - SoftwareSerial *_softSerial; -#endif - - Print *_debugPort; //The stream to send debug messages to if enabled. Usually Serial. - bool _printDebug = false; //Flag to print debugging variables - Print *_debugAtPort; //The stream to send debug messages to if enabled. Usually Serial. - bool _printAtDebug = false; //Flag to print debugging variables - - int _powerPin; - int _resetPin; - bool _invertPowerPin = false; - - unsigned long _baud; - IPAddress _lastRemoteIP; - IPAddress _lastLocalIP; - uint8_t _maxInitTries; - bool _autoTimeZoneForBegin = true; - bool _bufferedPollReentrant = false; // Prevent reentry of bufferedPoll - just in case it gets called from a callback - bool _pollReentrant = false; // Prevent reentry of poll - just in case it gets called from a callback - - #define _RXBuffSize 2056 - const unsigned long _rxWindowMillis = 2; // 1ms is not quite long enough for a single char at 9600 baud. millis roll over much less often than micros. See notes in .cpp re. ESP32! - char *_saraRXBuffer; // Allocated in SARA_R5::begin - char *_pruneBuffer; - char *_saraResponseBacklog; - int _saraResponseBacklogLength = 0; // The backlog could contain binary data so we can't use strlen to find its length - - void (*_socketListenCallback)(int, IPAddress, unsigned int, int, IPAddress, unsigned int); - void (*_socketReadCallback)(int, String); - void (*_socketReadCallbackPlus)(int, const char *, int, IPAddress, int); // socket, data, length, remoteAddress, remotePort - void (*_socketCloseCallback)(int); - void (*_gpsRequestCallback)(ClockData, PositionData, SpeedData, unsigned long); - void (*_simStateReportCallback)(SARA_R5_sim_states_t); - void (*_psdActionRequestCallback)(int, IPAddress); - void (*_pingRequestCallback)(int, int, String, IPAddress, int, long); - void (*_httpCommandRequestCallback)(int, int, int); - void (*_mqttCommandRequestCallback)(int, int); - void (*_registrationCallback)(SARA_R5_registration_status_t status, unsigned int lac, unsigned int ci, int Act); - void (*_epsRegistrationCallback)(SARA_R5_registration_status_t status, unsigned int tac, unsigned int ci, int Act); - - - int _lastSocketProtocol[SARA_R5_NUM_SOCKETS]; // Record the protocol for each socket to avoid having to call querySocketType in parseSocketReadIndication - - typedef enum - { - SARA_R5_INIT_STANDARD, - SARA_R5_INIT_AUTOBAUD, - SARA_R5_INIT_RESET - } SARA_R5_init_type_t; - - SARA_R5_error_t init(unsigned long baud, SARA_R5_init_type_t initType = SARA_R5_INIT_STANDARD); - - void powerOn(void); // Brief pulse on PWR_ON to turn module back on - void powerOff(void); // Long pulse on PWR_ON to do a graceful shutdown. Note modulePowerOff (+CPWROFF) is preferred. - - void hwReset(void); - - SARA_R5_error_t setMNOprofile(mobile_network_operator_t mno, bool autoReset = false, bool urcNotification = false); - SARA_R5_error_t getMNOprofile(mobile_network_operator_t *mno); - - // Wait for an expected response (don't send a command) - SARA_R5_error_t waitForResponse(const char *expectedResponse, const char *expectedError, uint16_t timeout); - - // Send command with an expected (potentially partial) response, store entire response - SARA_R5_error_t sendCommandWithResponse(const char *command, const char *expectedResponse, - char *responseDest, unsigned long commandTimeout, int destSize = minimumResponseAllocation, bool at = true); - - // Send a command -- prepend AT if at is true - void sendCommand(const char *command, bool at); - - const int _saraR5maxSocketRead = 1024; // The limit on bytes that can be read in a single read - - SARA_R5_error_t parseSocketReadIndication(int socket, int length); - SARA_R5_error_t parseSocketReadIndicationUDP(int socket, int length); - SARA_R5_error_t parseSocketListenIndication(int listeningSocket, IPAddress localIP, unsigned int listeningPort, int socket, IPAddress remoteIP, unsigned int port); - SARA_R5_error_t parseSocketCloseIndication(String *closeIndication); - - // UART Functions - size_t hwPrint(const char *s); - size_t hwWriteData(const char *buff, int len); - size_t hwWrite(const char c); - int readAvailable(char *inString); - char readChar(void); - int hwAvailable(void); - void beginSerial(unsigned long baud); - void setTimeout(unsigned long timeout); - bool find(char *target); - - SARA_R5_error_t autobaud(unsigned long desiredBaud); - - char *sara_r5_calloc_char(size_t num); - - bool processURCEvent(const char *event); - void pruneBacklog(void); - - // GPS Helper functions - char *readDataUntil(char *destination, unsigned int destSize, char *source, char delimiter); - bool parseGPRMCString(char *rmcString, PositionData *pos, ClockData *clk, SpeedData *spd); -}; - -#endif //SPARKFUN_SARA_R5_ARDUINO_LIBRARY_H