Base class for the u-blox N2xx modems. Cannot be used standalone, only inherited by classes that do properly useful stuff. Or, to put it another way, if you are using any of the classes ending with 'n2xx', you will need this class also. Note: requires the N211 module firmware to be at least 06.57 A01.02.

Dependents:   example-ublox-cellular-interface HelloMQTT example-ublox-cellular-interface_r410M example-ublox-mbed-client ... more

Committer:
philware
Date:
Tue Jan 09 14:35:43 2018 +0000
Revision:
10:1afe5ed24f0c
Parent:
8:72412b28c93f
Added new imei() imsi() type functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
philware 1:d4ff95ab40ae 1 /* Copyright (c) 2017 ARM Limited
philware 1:d4ff95ab40ae 2 *
philware 1:d4ff95ab40ae 3 * Licensed under the Apache License, Version 2.0 (the "License");
philware 1:d4ff95ab40ae 4 * you may not use this file except in compliance with the License.
philware 1:d4ff95ab40ae 5 * You may obtain a copy of the License at
philware 1:d4ff95ab40ae 6 *
philware 1:d4ff95ab40ae 7 * http://www.apache.org/licenses/LICENSE-2.0
philware 1:d4ff95ab40ae 8 *
philware 1:d4ff95ab40ae 9 * Unless required by applicable law or agreed to in writing, software
philware 1:d4ff95ab40ae 10 * distributed under the License is distributed on an "AS IS" BASIS,
philware 1:d4ff95ab40ae 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
philware 1:d4ff95ab40ae 12 * See the License for the specific language governing permissions and
philware 1:d4ff95ab40ae 13 * limitations under the License.
philware 1:d4ff95ab40ae 14 */
philware 1:d4ff95ab40ae 15
philware 1:d4ff95ab40ae 16 #ifndef _UBLOX_CELLULAR_BASE_N2XX_
philware 1:d4ff95ab40ae 17 #define _UBLOX_CELLULAR_BASE_N2XX_
philware 1:d4ff95ab40ae 18
philware 1:d4ff95ab40ae 19 #include "mbed.h"
philware 1:d4ff95ab40ae 20 #include "ATCmdParser.h"
philware 1:d4ff95ab40ae 21 #include "FileHandle.h"
philware 1:d4ff95ab40ae 22
philware 1:d4ff95ab40ae 23 /**********************************************************************
philware 1:d4ff95ab40ae 24 * CLASSES
philware 1:d4ff95ab40ae 25 **********************************************************************/
philware 1:d4ff95ab40ae 26
philware 1:d4ff95ab40ae 27 /** UbloxCellularBase class.
philware 1:d4ff95ab40ae 28 *
philware 1:d4ff95ab40ae 29 * This class provides all the base support for generic u-blox modems
philware 1:d4ff95ab40ae 30 * on C030 and C027 boards: module identification, power-up, network
philware 1:d4ff95ab40ae 31 * registration, etc.
philware 1:d4ff95ab40ae 32 */
philware 1:d4ff95ab40ae 33 class UbloxCellularBaseN2xx {
philware 1:d4ff95ab40ae 34
philware 1:d4ff95ab40ae 35 public:
philware 1:d4ff95ab40ae 36 /** Circuit Switched network registration status (CREG Usage).
philware 1:d4ff95ab40ae 37 * UBX-13001820 - AT Commands Example Application Note (Section 7.10.3).
philware 1:d4ff95ab40ae 38 */
philware 1:d4ff95ab40ae 39 typedef enum {
philware 1:d4ff95ab40ae 40 CSD_NOT_REGISTERED_NOT_SEARCHING = 0,
philware 1:d4ff95ab40ae 41 CSD_REGISTERED = 1,
philware 1:d4ff95ab40ae 42 CSD_NOT_REGISTERED_SEARCHING = 2,
philware 1:d4ff95ab40ae 43 CSD_REGISTRATION_DENIED = 3,
philware 1:d4ff95ab40ae 44 CSD_UNKNOWN_COVERAGE = 4,
philware 1:d4ff95ab40ae 45 CSD_REGISTERED_ROAMING = 5,
philware 1:d4ff95ab40ae 46 CSD_SMS_ONLY = 6,
philware 1:d4ff95ab40ae 47 CSD_SMS_ONLY_ROAMING = 7,
philware 1:d4ff95ab40ae 48 CSD_CSFB_NOT_PREFERRED = 9
philware 1:d4ff95ab40ae 49 } NetworkRegistrationStatusCsd;
philware 1:d4ff95ab40ae 50
philware 1:d4ff95ab40ae 51 /** Packet Switched network registration status (CGREG Usage).
philware 1:d4ff95ab40ae 52 * UBX-13001820 - AT Commands Example Application Note (Section 18.27.3).
philware 1:d4ff95ab40ae 53 */
philware 1:d4ff95ab40ae 54 typedef enum {
philware 1:d4ff95ab40ae 55 PSD_NOT_REGISTERED_NOT_SEARCHING = 0,
philware 1:d4ff95ab40ae 56 PSD_REGISTERED = 1,
philware 1:d4ff95ab40ae 57 PSD_NOT_REGISTERED_SEARCHING = 2,
philware 1:d4ff95ab40ae 58 PSD_REGISTRATION_DENIED = 3,
philware 1:d4ff95ab40ae 59 PSD_UNKNOWN_COVERAGE = 4,
philware 1:d4ff95ab40ae 60 PSD_REGISTERED_ROAMING = 5,
philware 1:d4ff95ab40ae 61 PSD_EMERGENCY_SERVICES_ONLY = 8
philware 1:d4ff95ab40ae 62 } NetworkRegistrationStatusPsd;
philware 1:d4ff95ab40ae 63
philware 1:d4ff95ab40ae 64 /** EPS network registration status (CEREG Usage).
philware 1:d4ff95ab40ae 65 * UBX-13001820 - AT Commands Example Application Note (Section 18.36.3).
philware 1:d4ff95ab40ae 66 */
philware 1:d4ff95ab40ae 67 typedef enum {
philware 1:d4ff95ab40ae 68 EPS_NOT_REGISTERED_NOT_SEARCHING = 0,
philware 1:d4ff95ab40ae 69 EPS_REGISTERED = 1,
philware 1:d4ff95ab40ae 70 EPS_NOT_REGISTERED_SEARCHING = 2,
philware 1:d4ff95ab40ae 71 EPS_REGISTRATION_DENIED = 3,
philware 1:d4ff95ab40ae 72 EPS_UNKNOWN_COVERAGE = 4,
philware 1:d4ff95ab40ae 73 EPS_REGISTERED_ROAMING = 5,
philware 1:d4ff95ab40ae 74 EPS_EMERGENCY_SERVICES_ONLY = 8
philware 1:d4ff95ab40ae 75 } NetworkRegistrationStatusEps;
philware 1:d4ff95ab40ae 76
philware 1:d4ff95ab40ae 77 /** Initialise the modem, ready for use.
philware 1:d4ff95ab40ae 78 *
philware 1:d4ff95ab40ae 79 * @param pin PIN for the SIM card.
philware 1:d4ff95ab40ae 80 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 81 */
philware 1:d4ff95ab40ae 82 bool init(const char *pin = 0);
philware 1:d4ff95ab40ae 83
philware 1:d4ff95ab40ae 84 /** Perform registration with the network.
philware 1:d4ff95ab40ae 85 *
philware 1:d4ff95ab40ae 86 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 87 */
philware 1:d4ff95ab40ae 88 bool nwk_registration();
philware 1:d4ff95ab40ae 89
philware 1:d4ff95ab40ae 90 /** True if the modem is registered for circuit
philware 1:d4ff95ab40ae 91 * switched data, otherwise false.
philware 1:d4ff95ab40ae 92 */
philware 1:d4ff95ab40ae 93 bool is_registered_csd();
philware 1:d4ff95ab40ae 94
philware 1:d4ff95ab40ae 95 /** True if the modem is registered for packet
philware 1:d4ff95ab40ae 96 * switched data, otherwise false.
philware 1:d4ff95ab40ae 97 */
philware 1:d4ff95ab40ae 98 bool is_registered_psd();
philware 1:d4ff95ab40ae 99
philware 1:d4ff95ab40ae 100 /** True if the modem is registered for enhanced
philware 1:d4ff95ab40ae 101 * packet switched data (i.e. LTE and beyond),
philware 1:d4ff95ab40ae 102 * otherwise false.
philware 1:d4ff95ab40ae 103 */
philware 1:d4ff95ab40ae 104 bool is_registered_eps();
philware 1:d4ff95ab40ae 105
philware 1:d4ff95ab40ae 106 /** Perform deregistration from the network.
philware 1:d4ff95ab40ae 107 *
philware 1:d4ff95ab40ae 108 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 109 */
philware 1:d4ff95ab40ae 110 bool nwk_deregistration();
philware 1:d4ff95ab40ae 111
philware 1:d4ff95ab40ae 112 /** Put the modem into its lowest power state.
philware 1:d4ff95ab40ae 113 */
philware 1:d4ff95ab40ae 114 void deinit();
philware 1:d4ff95ab40ae 115
philware 1:d4ff95ab40ae 116 /** Set the PIN code for the SIM card.
philware 1:d4ff95ab40ae 117 *
philware 1:d4ff95ab40ae 118 * @param pin PIN for the SIM card.
philware 1:d4ff95ab40ae 119 */
philware 1:d4ff95ab40ae 120 void set_pin(const char *pin);
philware 1:d4ff95ab40ae 121
philware 1:d4ff95ab40ae 122 /** Enable or disable SIM pin checking.
philware 1:d4ff95ab40ae 123 *
philware 1:d4ff95ab40ae 124 * @param enableNotDisable true if SIM PIN checking is to be enabled,
philware 1:d4ff95ab40ae 125 * otherwise false.
philware 1:d4ff95ab40ae 126 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 127 */
philware 1:d4ff95ab40ae 128 bool sim_pin_check_enable(bool enableNotDisable);
philware 1:d4ff95ab40ae 129
philware 1:d4ff95ab40ae 130 /** Change the SIM pin.
philware 1:d4ff95ab40ae 131 *
philware 1:d4ff95ab40ae 132 * @param new_pin the new PIN to use.
philware 1:d4ff95ab40ae 133 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 134 */
philware 1:d4ff95ab40ae 135 bool change_sim_pin(const char *new_pin);
philware 1:d4ff95ab40ae 136
philware 1:d4ff95ab40ae 137 /** get the Manufacturer Info
philware 1:d4ff95ab40ae 138 *
philware 1:d4ff95ab40ae 139 * @param response the manufacturer
philware 1:d4ff95ab40ae 140 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 141 */
philware 1:d4ff95ab40ae 142 bool cgmi(const char *response);
philware 1:d4ff95ab40ae 143
philware 1:d4ff95ab40ae 144 /** get the Module name
philware 1:d4ff95ab40ae 145 *
philware 1:d4ff95ab40ae 146 * @param response the module name
philware 1:d4ff95ab40ae 147 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 148 */
philware 1:d4ff95ab40ae 149 bool cgmm(const char *response);
philware 1:d4ff95ab40ae 150
philware 1:d4ff95ab40ae 151 /** get International Module Subscriber Information
philware 1:d4ff95ab40ae 152 *
philware 1:d4ff95ab40ae 153 * @param response the IMSI
philware 1:d4ff95ab40ae 154 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 155 */
philware 1:d4ff95ab40ae 156 bool cimi(const char *response);
philware 1:d4ff95ab40ae 157
philware 1:d4ff95ab40ae 158 /** get the serial number
philware 1:d4ff95ab40ae 159 *
philware 1:d4ff95ab40ae 160 * @param response the serial number
philware 1:d4ff95ab40ae 161 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 162 */
philware 1:d4ff95ab40ae 163 bool ccid(const char *response);
philware 1:d4ff95ab40ae 164
philware 1:d4ff95ab40ae 165 /** get the firmware version
philware 1:d4ff95ab40ae 166 *
philware 1:d4ff95ab40ae 167 * @param response the firmware version
philware 1:d4ff95ab40ae 168 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 169 */
philware 1:d4ff95ab40ae 170 bool cgmr(const char *response);
philware 1:d4ff95ab40ae 171
philware 1:d4ff95ab40ae 172 /** get the IMEI
philware 1:d4ff95ab40ae 173 *
philware 1:d4ff95ab40ae 174 * @param response the IMEI
philware 1:d4ff95ab40ae 175 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 176 */
philware 1:d4ff95ab40ae 177 bool cgsn(int snt, const char *response);
philware 1:d4ff95ab40ae 178
philware 1:d4ff95ab40ae 179 /** Connect to the specified PLMN
philware 1:d4ff95ab40ae 180 *
philware 1:d4ff95ab40ae 181 * @param plmn the PLMN to register on
philware 1:d4ff95ab40ae 182 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 183 */
philware 1:d4ff95ab40ae 184 bool cops(const char*plmn);
philware 1:d4ff95ab40ae 185
philware 1:d4ff95ab40ae 186 /** Set the mode of operation for registering
philware 1:d4ff95ab40ae 187 *
philware 1:d4ff95ab40ae 188 * @param mode 0=Auto, 1=Manual, 2=Deregister
philware 1:d4ff95ab40ae 189 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 190 */
philware 1:d4ff95ab40ae 191 bool cops(int mode);
philware 1:d4ff95ab40ae 192
philware 1:d4ff95ab40ae 193 /** Gets the COPS mode of operation
philware 1:d4ff95ab40ae 194 *
philware 1:d4ff95ab40ae 195 * @param status returns the mode
philware 1:d4ff95ab40ae 196 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 197 */
philware 1:d4ff95ab40ae 198 bool get_cops(int *status);
philware 1:d4ff95ab40ae 199
philware 1:d4ff95ab40ae 200 /** Enable or Disable the Radio/Modem
philware 1:d4ff95ab40ae 201 *
philware 1:d4ff95ab40ae 202 * @param mode 0=disable, 1=enable
philware 1:d4ff95ab40ae 203 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 204 */
philware 1:d4ff95ab40ae 205 bool cfun(int mode);
philware 1:d4ff95ab40ae 206
philware 1:d4ff95ab40ae 207 /** Reboot the SARA-N2xx module
philware 1:d4ff95ab40ae 208 *
philware 1:d4ff95ab40ae 209 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 210 */
philware 1:d4ff95ab40ae 211 bool reboot();
philware 1:d4ff95ab40ae 212
philware 1:d4ff95ab40ae 213 /** Sets the AUTOCONNECT feature of SARA-N2xx module
philware 1:d4ff95ab40ae 214 *
philware 1:d4ff95ab40ae 215 * @param state true to enable, false to disable
philware 1:d4ff95ab40ae 216 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 217 */
philware 1:d4ff95ab40ae 218 bool auto_connect(bool state);
philware 1:d4ff95ab40ae 219
philware 1:d4ff95ab40ae 220 /** Set the specified NCONFIG parameter
philware 1:d4ff95ab40ae 221 *
philware 1:d4ff95ab40ae 222 * @param name name of the NCONFIG parameter to enable/disable
philware 1:d4ff95ab40ae 223 * @param state true to enable, false to disable
philware 1:d4ff95ab40ae 224 * @return ture if successful, otherwise false.
philware 1:d4ff95ab40ae 225 */
philware 1:d4ff95ab40ae 226 bool nconfig(const char *name, bool state);
mudassar0121 7:f1c3373e4ff5 227
mudassar0121 7:f1c3373e4ff5 228
mudassar0121 7:f1c3373e4ff5 229 /** Get the IMEI.
mudassar0121 7:f1c3373e4ff5 230 *
mudassar0121 7:f1c3373e4ff5 231 * @return true if successful, otherwise false.
mudassar0121 7:f1c3373e4ff5 232 */
philware 10:1afe5ed24f0c 233 MBED_DEPRECATED("This method is now replaced by const char * imei(), please use that instead")
fahim alavi 8:72412b28c93f 234 bool get_imei(char *buffer, int size);
philware 10:1afe5ed24f0c 235
philware 10:1afe5ed24f0c 236 /** Get the IMEI of the module.
philware 10:1afe5ed24f0c 237 *
philware 10:1afe5ed24f0c 238 * @return a pointer to the IMEI as a null-terminated string.
philware 10:1afe5ed24f0c 239 */
philware 10:1afe5ed24f0c 240 const char *imei();
philware 10:1afe5ed24f0c 241
philware 10:1afe5ed24f0c 242 /** Get the Mobile Equipment ID (which may be the same as the IMEI).
philware 10:1afe5ed24f0c 243 *
philware 10:1afe5ed24f0c 244 * @return a pointer to the Mobile Equipment ID as a null-terminated string.
philware 10:1afe5ed24f0c 245 */
philware 10:1afe5ed24f0c 246 const char *meid();
philware 10:1afe5ed24f0c 247
philware 10:1afe5ed24f0c 248 /** Get the IMSI of the SIM.
philware 10:1afe5ed24f0c 249 *
philware 10:1afe5ed24f0c 250 * @return a pointer to the IMSI as a null-terminated string.
philware 10:1afe5ed24f0c 251 */
philware 10:1afe5ed24f0c 252 const char *imsi();
philware 10:1afe5ed24f0c 253
philware 10:1afe5ed24f0c 254 /** Get the ICCID of the SIM.
philware 10:1afe5ed24f0c 255 *
philware 10:1afe5ed24f0c 256 * @return a pointer to the ICCID as a null-terminated string.
philware 10:1afe5ed24f0c 257 */
philware 10:1afe5ed24f0c 258 const char *iccid();
philware 10:1afe5ed24f0c 259
philware 10:1afe5ed24f0c 260 /** Get the RSSI.
philware 10:1afe5ed24f0c 261 *
philware 10:1afe5ed24f0c 262 * @return the RSSI in dBm. If it is not possible to obtain an
philware 10:1afe5ed24f0c 263 * RSSI reading at the time (e.g. because the modem is in
philware 10:1afe5ed24f0c 264 * data mode rather than AT command mode) then 0 is returned.
philware 10:1afe5ed24f0c 265 */
philware 10:1afe5ed24f0c 266 int rssi();
philware 1:d4ff95ab40ae 267
philware 1:d4ff95ab40ae 268 protected:
philware 1:d4ff95ab40ae 269
philware 1:d4ff95ab40ae 270 #define OUTPUT_ENTER_KEY "\r"
philware 1:d4ff95ab40ae 271
philware 1:d4ff95ab40ae 272 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
philware 1:d4ff95ab40ae 273 #define AT_PARSER_BUFFER_SIZE MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
philware 1:d4ff95ab40ae 274 #else
philware 1:d4ff95ab40ae 275 #define AT_PARSER_BUFFER_SIZE 256
philware 1:d4ff95ab40ae 276 #endif
philware 1:d4ff95ab40ae 277
philware 1:d4ff95ab40ae 278 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
philware 1:d4ff95ab40ae 279 #define AT_PARSER_TIMEOUT MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
philware 1:d4ff95ab40ae 280 #else
philware 1:d4ff95ab40ae 281 #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds
philware 1:d4ff95ab40ae 282 #endif
philware 1:d4ff95ab40ae 283
philware 1:d4ff95ab40ae 284 /** A string that would not normally be sent by the modem on the AT interface.
philware 1:d4ff95ab40ae 285 */
philware 1:d4ff95ab40ae 286 #define UNNATURAL_STRING "\x01"
philware 1:d4ff95ab40ae 287
philware 1:d4ff95ab40ae 288 /** Supported u-blox modem variants.
philware 1:d4ff95ab40ae 289 */
philware 1:d4ff95ab40ae 290 typedef enum {
philware 1:d4ff95ab40ae 291 DEV_TYPE_NONE = 0,
philware 1:d4ff95ab40ae 292 DEV_SARA_G35,
philware 1:d4ff95ab40ae 293 DEV_LISA_U2,
philware 1:d4ff95ab40ae 294 DEV_LISA_U2_03S,
philware 1:d4ff95ab40ae 295 DEV_SARA_U2,
philware 1:d4ff95ab40ae 296 DEV_LEON_G2,
philware 1:d4ff95ab40ae 297 DEV_TOBY_L2,
philware 1:d4ff95ab40ae 298 DEV_MPCI_L2,
philware 1:d4ff95ab40ae 299 DEV_SARA_N2,
philware 1:d4ff95ab40ae 300 } DeviceType;
philware 1:d4ff95ab40ae 301
philware 1:d4ff95ab40ae 302 /** Network registration status.
philware 1:d4ff95ab40ae 303 * UBX-13001820 - AT Commands Example Application Note (Section 4.1.4.5).
philware 1:d4ff95ab40ae 304 */
philware 1:d4ff95ab40ae 305 typedef enum {
philware 1:d4ff95ab40ae 306 GSM = 0,
philware 1:d4ff95ab40ae 307 COMPACT_GSM = 1,
philware 1:d4ff95ab40ae 308 UTRAN = 2,
philware 1:d4ff95ab40ae 309 EDGE = 3,
philware 1:d4ff95ab40ae 310 HSDPA = 4,
philware 1:d4ff95ab40ae 311 HSUPA = 5,
philware 1:d4ff95ab40ae 312 HSDPA_HSUPA = 6,
philware 1:d4ff95ab40ae 313 LTE = 7
philware 1:d4ff95ab40ae 314 } RadioAccessNetworkType;
philware 1:d4ff95ab40ae 315
philware 1:d4ff95ab40ae 316 /** Info about the modem.
philware 1:d4ff95ab40ae 317 */
philware 1:d4ff95ab40ae 318 typedef struct {
philware 1:d4ff95ab40ae 319 DeviceType dev;
philware 1:d4ff95ab40ae 320 char iccid[20 + 1]; //!< Integrated Circuit Card ID.
philware 1:d4ff95ab40ae 321 char imsi[15 + 1]; //!< International Mobile Station Identity.
philware 1:d4ff95ab40ae 322 char imei[15 + 1]; //!< International Mobile Equipment Identity.
philware 1:d4ff95ab40ae 323 char meid[18 + 1]; //!< Mobile Equipment IDentifier.
philware 1:d4ff95ab40ae 324 volatile RadioAccessNetworkType rat; //!< Type of network (e.g. 2G, 3G, LTE).
philware 1:d4ff95ab40ae 325 volatile NetworkRegistrationStatusCsd reg_status_csd; //!< Circuit switched attach status.
philware 1:d4ff95ab40ae 326 volatile NetworkRegistrationStatusPsd reg_status_psd; //!< Packet switched attach status.
philware 1:d4ff95ab40ae 327 volatile NetworkRegistrationStatusEps reg_status_eps; //!< Evolved Packet Switched (e.g. LTE) attach status.
philware 1:d4ff95ab40ae 328 } DeviceInfo;
philware 1:d4ff95ab40ae 329
philware 1:d4ff95ab40ae 330 typedef struct {
philware 1:d4ff95ab40ae 331 char cgmm[32+1];
philware 1:d4ff95ab40ae 332 char cgmi[32+1];
philware 1:d4ff95ab40ae 333 char cgmr[32+1];
philware 1:d4ff95ab40ae 334 char cgsn[32+1];
philware 1:d4ff95ab40ae 335 } sara_n2xx_info;
philware 1:d4ff95ab40ae 336
philware 1:d4ff95ab40ae 337 /* IMPORTANT: the variables below are available to
philware 1:d4ff95ab40ae 338 * classes that inherit this in order to keep things
philware 1:d4ff95ab40ae 339 * simple. However, ONLY this class should free
philware 1:d4ff95ab40ae 340 * any of the pointers, or there will be havoc.
philware 1:d4ff95ab40ae 341 */
philware 1:d4ff95ab40ae 342
philware 1:d4ff95ab40ae 343 /** Point to the instance of the AT parser in use.
philware 1:d4ff95ab40ae 344 */
philware 1:d4ff95ab40ae 345 ATCmdParser *_at;
philware 1:d4ff95ab40ae 346
philware 1:d4ff95ab40ae 347 /** The current AT parser timeout value.
philware 1:d4ff95ab40ae 348 */
philware 1:d4ff95ab40ae 349 int _at_timeout;
philware 1:d4ff95ab40ae 350
philware 1:d4ff95ab40ae 351 /** File handle used by the AT parser.
philware 1:d4ff95ab40ae 352 */
philware 1:d4ff95ab40ae 353 FileHandle *_fh;
philware 1:d4ff95ab40ae 354
philware 1:d4ff95ab40ae 355 /** The mutex resource.
philware 1:d4ff95ab40ae 356 */
philware 1:d4ff95ab40ae 357 Mutex _mtx;
philware 1:d4ff95ab40ae 358
philware 1:d4ff95ab40ae 359 /** General info about the modem as a device.
philware 1:d4ff95ab40ae 360 */
philware 1:d4ff95ab40ae 361 DeviceInfo _dev_info;
philware 1:d4ff95ab40ae 362
philware 1:d4ff95ab40ae 363 /**
philware 1:d4ff95ab40ae 364 * Information about the SARA-N2xx module
philware 1:d4ff95ab40ae 365 */
philware 1:d4ff95ab40ae 366 sara_n2xx_info _sara_n2xx_info;
philware 1:d4ff95ab40ae 367
philware 1:d4ff95ab40ae 368 /** The SIM PIN to use.
philware 1:d4ff95ab40ae 369 */
philware 1:d4ff95ab40ae 370 const char *_pin;
philware 1:d4ff95ab40ae 371
philware 1:d4ff95ab40ae 372 /** Set to true to spit out debug traces.
philware 1:d4ff95ab40ae 373 */
philware 1:d4ff95ab40ae 374 bool _debug_trace_on;
philware 1:d4ff95ab40ae 375
philware 1:d4ff95ab40ae 376 /** True if the modem is ready register to the network,
philware 1:d4ff95ab40ae 377 * otherwise false.
philware 1:d4ff95ab40ae 378 */
philware 1:d4ff95ab40ae 379 bool _modem_initialised;
philware 1:d4ff95ab40ae 380
philware 1:d4ff95ab40ae 381 /** True it the SIM requires a PIN, otherwise false.
philware 1:d4ff95ab40ae 382 */
philware 1:d4ff95ab40ae 383 bool _sim_pin_check_enabled;
philware 1:d4ff95ab40ae 384
philware 1:d4ff95ab40ae 385 /** Sets the modem up for powering on
philware 1:d4ff95ab40ae 386 *
philware 1:d4ff95ab40ae 387 * modem_init() is equivalent to plugging in the device, e.g., attaching power and serial port.
philware 1:d4ff95ab40ae 388 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 389 */
philware 1:d4ff95ab40ae 390 virtual void modem_init();
philware 1:d4ff95ab40ae 391
philware 1:d4ff95ab40ae 392 /** Sets the modem in unplugged state
philware 1:d4ff95ab40ae 393 *
philware 1:d4ff95ab40ae 394 * modem_deinit() will be equivalent to pulling the plug off of the device, i.e., detaching power
philware 1:d4ff95ab40ae 395 * and serial port. This puts the modem in lowest power state.
philware 1:d4ff95ab40ae 396 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 397 */
philware 1:d4ff95ab40ae 398 virtual void modem_deinit();
philware 1:d4ff95ab40ae 399
philware 1:d4ff95ab40ae 400 /** Powers up the modem
philware 1:d4ff95ab40ae 401 *
philware 1:d4ff95ab40ae 402 * modem_power_up() is equivalent to pressing the soft power button.
philware 1:d4ff95ab40ae 403 * The driver may repeat this if the modem is not responsive to AT commands.
philware 1:d4ff95ab40ae 404 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 405 */
philware 1:d4ff95ab40ae 406 virtual void modem_power_up();
philware 1:d4ff95ab40ae 407
philware 1:d4ff95ab40ae 408 /** Powers down the modem
philware 1:d4ff95ab40ae 409 *
philware 1:d4ff95ab40ae 410 * modem_power_down() is equivalent to turning off the modem by button press.
philware 1:d4ff95ab40ae 411 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 412 */
philware 1:d4ff95ab40ae 413 virtual void modem_power_down();
philware 1:d4ff95ab40ae 414
philware 1:d4ff95ab40ae 415 /* Note: constructor and destructor protected so that this
philware 1:d4ff95ab40ae 416 * class can only ever be inherited, never used directly.
philware 1:d4ff95ab40ae 417 */
philware 1:d4ff95ab40ae 418 UbloxCellularBaseN2xx();
philware 1:d4ff95ab40ae 419 ~UbloxCellularBaseN2xx();
philware 1:d4ff95ab40ae 420
philware 1:d4ff95ab40ae 421 /** Initialise this class.
philware 1:d4ff95ab40ae 422 *
philware 1:d4ff95ab40ae 423 * @param tx the UART TX data pin to which the modem is attached.
philware 1:d4ff95ab40ae 424 * @param rx the UART RX data pin to which the modem is attached.
philware 1:d4ff95ab40ae 425 * @param baud the UART baud rate.
philware 1:d4ff95ab40ae 426 * @param debug_on true to switch AT interface debug on, otherwise false.
philware 1:d4ff95ab40ae 427 *
philware 1:d4ff95ab40ae 428 * Note: it would be more natural to do this in the constructor
philware 1:d4ff95ab40ae 429 * however, to avoid the diamond of death, this class is only
philware 1:d4ff95ab40ae 430 * every inherited virtually. Classes that are inherited virtually
philware 1:d4ff95ab40ae 431 * do not get passed parameters in their constructor and hence
philware 1:d4ff95ab40ae 432 * classInit() must be called separately by the first one to wake
philware 1:d4ff95ab40ae 433 * the beast.
philware 1:d4ff95ab40ae 434 */
philware 1:d4ff95ab40ae 435 void baseClassInit(PinName tx = MDMTXD,
philware 1:d4ff95ab40ae 436 PinName rx = MDMRXD,
philware 4:8cd7a682a5ab 437 int baud = MBED_CONF_UBLOX_CELL_N2XX_BAUD_RATE,
philware 1:d4ff95ab40ae 438 bool debug_on = false);
philware 1:d4ff95ab40ae 439
philware 1:d4ff95ab40ae 440 /** Set the AT parser timeout.
philware 1:d4ff95ab40ae 441 */
philware 1:d4ff95ab40ae 442 void at_set_timeout(int timeout);
philware 1:d4ff95ab40ae 443
philware 1:d4ff95ab40ae 444 /** Read up to size characters from buf
philware 1:d4ff95ab40ae 445 * or until the character "end" is reached, overwriting
philware 1:d4ff95ab40ae 446 * the newline with 0 and ensuring a terminator
philware 1:d4ff95ab40ae 447 * in all cases.
philware 1:d4ff95ab40ae 448 *
philware 1:d4ff95ab40ae 449 * @param buf the buffer to write to.
philware 1:d4ff95ab40ae 450 * @param size the size of the buffer.
philware 1:d4ff95ab40ae 451 * @param end the character to stop at.
philware 1:d4ff95ab40ae 452 * @return the number of characters read,
philware 1:d4ff95ab40ae 453 * not including the terminator.
philware 1:d4ff95ab40ae 454 */
philware 1:d4ff95ab40ae 455 int read_at_to_char(char * buf, int size, char end);
philware 1:d4ff95ab40ae 456
philware 1:d4ff95ab40ae 457 /** Powers up the modem.
philware 1:d4ff95ab40ae 458 *
philware 1:d4ff95ab40ae 459 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 460 */
philware 1:d4ff95ab40ae 461 bool power_up();
philware 1:d4ff95ab40ae 462
philware 1:d4ff95ab40ae 463 /** Power down the modem.
philware 1:d4ff95ab40ae 464 */
philware 1:d4ff95ab40ae 465 void power_down();
philware 1:d4ff95ab40ae 466
philware 1:d4ff95ab40ae 467 /** Lock a mutex when accessing the modem.
philware 1:d4ff95ab40ae 468 */
philware 1:d4ff95ab40ae 469 void lock(void) { _mtx.lock(); }
philware 1:d4ff95ab40ae 470
philware 1:d4ff95ab40ae 471 /** Helper to make sure that lock unlock pair is always balanced
philware 1:d4ff95ab40ae 472 */
philware 1:d4ff95ab40ae 473 #define LOCK() { lock()
philware 1:d4ff95ab40ae 474
philware 1:d4ff95ab40ae 475 /** Unlock the modem when done accessing it.
philware 1:d4ff95ab40ae 476 */
philware 1:d4ff95ab40ae 477 void unlock(void) { _mtx.unlock(); }
philware 1:d4ff95ab40ae 478
philware 1:d4ff95ab40ae 479 /** Helper to make sure that lock unlock pair is always balanced
philware 1:d4ff95ab40ae 480 */
philware 1:d4ff95ab40ae 481 #define UNLOCK() } unlock()
philware 1:d4ff95ab40ae 482
philware 1:d4ff95ab40ae 483 /** Set the device identity in _dev_info
philware 1:d4ff95ab40ae 484 * based on the ATI string returned by
philware 1:d4ff95ab40ae 485 * the module.
philware 1:d4ff95ab40ae 486 *
philware 1:d4ff95ab40ae 487 * @return true if dev is a known value,
philware 1:d4ff95ab40ae 488 * otherwise false.
philware 1:d4ff95ab40ae 489 */
philware 1:d4ff95ab40ae 490 bool set_device_identity(DeviceType *dev);
philware 1:d4ff95ab40ae 491
philware 1:d4ff95ab40ae 492 /** Perform any modem initialisation that is
philware 1:d4ff95ab40ae 493 * specialised by device type.
philware 1:d4ff95ab40ae 494 *
philware 1:d4ff95ab40ae 495 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 496 */
philware 1:d4ff95ab40ae 497 bool device_init(DeviceType dev);
philware 1:d4ff95ab40ae 498
philware 1:d4ff95ab40ae 499 /** Set up the SIM.
philware 1:d4ff95ab40ae 500 *
philware 1:d4ff95ab40ae 501 * @return true if successful, otherwiss false.
philware 1:d4ff95ab40ae 502 */
philware 1:d4ff95ab40ae 503 bool initialise_sim_card();
philware 1:d4ff95ab40ae 504
philware 1:d4ff95ab40ae 505 int read_at_to_newline(char * buf, int size);
philware 1:d4ff95ab40ae 506
philware 1:d4ff95ab40ae 507 private:
philware 1:d4ff95ab40ae 508 void set_nwk_reg_status_csd(int status);
philware 1:d4ff95ab40ae 509 void set_nwk_reg_status_psd(int status);
philware 1:d4ff95ab40ae 510 void set_nwk_reg_status_eps(int status);
philware 1:d4ff95ab40ae 511 void set_rat(int AcTStatus);
philware 1:d4ff95ab40ae 512 bool get_iccid();
philware 1:d4ff95ab40ae 513 bool get_imsi();
philware 1:d4ff95ab40ae 514 bool get_imei();
philware 1:d4ff95ab40ae 515 bool get_meid(); // *** NOT IMPLEMENTED, returns false
philware 1:d4ff95ab40ae 516 bool set_sms(); // *** NOT IMPLEMENTED, returns false
philware 1:d4ff95ab40ae 517 void parser_abort_cb();
philware 1:d4ff95ab40ae 518 void CMX_ERROR_URC();
philware 1:d4ff95ab40ae 519 void CEREG_URC();
philware 1:d4ff95ab40ae 520
philware 1:d4ff95ab40ae 521 bool get_sara_n2xx_info();
philware 1:d4ff95ab40ae 522 bool cereg(int n);
philware 1:d4ff95ab40ae 523 nsapi_error_t get_cereg();
philware 1:d4ff95ab40ae 524 nsapi_error_t get_cscon();
philware 1:d4ff95ab40ae 525 nsapi_error_t get_csq();
philware 1:d4ff95ab40ae 526
philware 1:d4ff95ab40ae 527 bool at_send(const char *cmd);
philware 1:d4ff95ab40ae 528 bool at_send(const char *cmd, int n);
philware 1:d4ff95ab40ae 529 bool at_send(const char *cmd, const char *arg);
philware 1:d4ff95ab40ae 530
philware 1:d4ff95ab40ae 531 bool at_req(const char *cmd, const char *recvFormat, const char *response);
philware 1:d4ff95ab40ae 532 bool at_req(const char *cmd, const char *recvFormat, int *response);
philware 1:d4ff95ab40ae 533 };
philware 1:d4ff95ab40ae 534
philware 1:d4ff95ab40ae 535 #endif // _UBLOX_CELLULAR_BASE_
philware 1:d4ff95ab40ae 536