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:
mudassar0121
Date:
Wed Jan 03 05:50:31 2018 +0000
Revision:
7:f1c3373e4ff5
Parent:
4:8cd7a682a5ab
Child:
8:72412b28c93f
Copy imei function added for SARA R410M support

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 */
mudassar0121 7:f1c3373e4ff5 233 bool get_imei(char *buffer,int size);
philware 1:d4ff95ab40ae 234
philware 1:d4ff95ab40ae 235 protected:
philware 1:d4ff95ab40ae 236
philware 1:d4ff95ab40ae 237 #define OUTPUT_ENTER_KEY "\r"
philware 1:d4ff95ab40ae 238
philware 1:d4ff95ab40ae 239 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
philware 1:d4ff95ab40ae 240 #define AT_PARSER_BUFFER_SIZE MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
philware 1:d4ff95ab40ae 241 #else
philware 1:d4ff95ab40ae 242 #define AT_PARSER_BUFFER_SIZE 256
philware 1:d4ff95ab40ae 243 #endif
philware 1:d4ff95ab40ae 244
philware 1:d4ff95ab40ae 245 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
philware 1:d4ff95ab40ae 246 #define AT_PARSER_TIMEOUT MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
philware 1:d4ff95ab40ae 247 #else
philware 1:d4ff95ab40ae 248 #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds
philware 1:d4ff95ab40ae 249 #endif
philware 1:d4ff95ab40ae 250
philware 1:d4ff95ab40ae 251 /** A string that would not normally be sent by the modem on the AT interface.
philware 1:d4ff95ab40ae 252 */
philware 1:d4ff95ab40ae 253 #define UNNATURAL_STRING "\x01"
philware 1:d4ff95ab40ae 254
philware 1:d4ff95ab40ae 255 /** Supported u-blox modem variants.
philware 1:d4ff95ab40ae 256 */
philware 1:d4ff95ab40ae 257 typedef enum {
philware 1:d4ff95ab40ae 258 DEV_TYPE_NONE = 0,
philware 1:d4ff95ab40ae 259 DEV_SARA_G35,
philware 1:d4ff95ab40ae 260 DEV_LISA_U2,
philware 1:d4ff95ab40ae 261 DEV_LISA_U2_03S,
philware 1:d4ff95ab40ae 262 DEV_SARA_U2,
philware 1:d4ff95ab40ae 263 DEV_LEON_G2,
philware 1:d4ff95ab40ae 264 DEV_TOBY_L2,
philware 1:d4ff95ab40ae 265 DEV_MPCI_L2,
philware 1:d4ff95ab40ae 266 DEV_SARA_N2,
philware 1:d4ff95ab40ae 267 } DeviceType;
philware 1:d4ff95ab40ae 268
philware 1:d4ff95ab40ae 269 /** Network registration status.
philware 1:d4ff95ab40ae 270 * UBX-13001820 - AT Commands Example Application Note (Section 4.1.4.5).
philware 1:d4ff95ab40ae 271 */
philware 1:d4ff95ab40ae 272 typedef enum {
philware 1:d4ff95ab40ae 273 GSM = 0,
philware 1:d4ff95ab40ae 274 COMPACT_GSM = 1,
philware 1:d4ff95ab40ae 275 UTRAN = 2,
philware 1:d4ff95ab40ae 276 EDGE = 3,
philware 1:d4ff95ab40ae 277 HSDPA = 4,
philware 1:d4ff95ab40ae 278 HSUPA = 5,
philware 1:d4ff95ab40ae 279 HSDPA_HSUPA = 6,
philware 1:d4ff95ab40ae 280 LTE = 7
philware 1:d4ff95ab40ae 281 } RadioAccessNetworkType;
philware 1:d4ff95ab40ae 282
philware 1:d4ff95ab40ae 283 /** Info about the modem.
philware 1:d4ff95ab40ae 284 */
philware 1:d4ff95ab40ae 285 typedef struct {
philware 1:d4ff95ab40ae 286 DeviceType dev;
philware 1:d4ff95ab40ae 287 char iccid[20 + 1]; //!< Integrated Circuit Card ID.
philware 1:d4ff95ab40ae 288 char imsi[15 + 1]; //!< International Mobile Station Identity.
philware 1:d4ff95ab40ae 289 char imei[15 + 1]; //!< International Mobile Equipment Identity.
philware 1:d4ff95ab40ae 290 char meid[18 + 1]; //!< Mobile Equipment IDentifier.
philware 1:d4ff95ab40ae 291 volatile RadioAccessNetworkType rat; //!< Type of network (e.g. 2G, 3G, LTE).
philware 1:d4ff95ab40ae 292 volatile NetworkRegistrationStatusCsd reg_status_csd; //!< Circuit switched attach status.
philware 1:d4ff95ab40ae 293 volatile NetworkRegistrationStatusPsd reg_status_psd; //!< Packet switched attach status.
philware 1:d4ff95ab40ae 294 volatile NetworkRegistrationStatusEps reg_status_eps; //!< Evolved Packet Switched (e.g. LTE) attach status.
philware 1:d4ff95ab40ae 295 } DeviceInfo;
philware 1:d4ff95ab40ae 296
philware 1:d4ff95ab40ae 297 typedef struct {
philware 1:d4ff95ab40ae 298 char cgmm[32+1];
philware 1:d4ff95ab40ae 299 char cgmi[32+1];
philware 1:d4ff95ab40ae 300 char cgmr[32+1];
philware 1:d4ff95ab40ae 301 char cgsn[32+1];
philware 1:d4ff95ab40ae 302 } sara_n2xx_info;
philware 1:d4ff95ab40ae 303
philware 1:d4ff95ab40ae 304 /* IMPORTANT: the variables below are available to
philware 1:d4ff95ab40ae 305 * classes that inherit this in order to keep things
philware 1:d4ff95ab40ae 306 * simple. However, ONLY this class should free
philware 1:d4ff95ab40ae 307 * any of the pointers, or there will be havoc.
philware 1:d4ff95ab40ae 308 */
philware 1:d4ff95ab40ae 309
philware 1:d4ff95ab40ae 310 /** Point to the instance of the AT parser in use.
philware 1:d4ff95ab40ae 311 */
philware 1:d4ff95ab40ae 312 ATCmdParser *_at;
philware 1:d4ff95ab40ae 313
philware 1:d4ff95ab40ae 314 /** The current AT parser timeout value.
philware 1:d4ff95ab40ae 315 */
philware 1:d4ff95ab40ae 316 int _at_timeout;
philware 1:d4ff95ab40ae 317
philware 1:d4ff95ab40ae 318 /** File handle used by the AT parser.
philware 1:d4ff95ab40ae 319 */
philware 1:d4ff95ab40ae 320 FileHandle *_fh;
philware 1:d4ff95ab40ae 321
philware 1:d4ff95ab40ae 322 /** The mutex resource.
philware 1:d4ff95ab40ae 323 */
philware 1:d4ff95ab40ae 324 Mutex _mtx;
philware 1:d4ff95ab40ae 325
philware 1:d4ff95ab40ae 326 /** General info about the modem as a device.
philware 1:d4ff95ab40ae 327 */
philware 1:d4ff95ab40ae 328 DeviceInfo _dev_info;
philware 1:d4ff95ab40ae 329
philware 1:d4ff95ab40ae 330 /**
philware 1:d4ff95ab40ae 331 * Information about the SARA-N2xx module
philware 1:d4ff95ab40ae 332 */
philware 1:d4ff95ab40ae 333 sara_n2xx_info _sara_n2xx_info;
philware 1:d4ff95ab40ae 334
philware 1:d4ff95ab40ae 335 /** The SIM PIN to use.
philware 1:d4ff95ab40ae 336 */
philware 1:d4ff95ab40ae 337 const char *_pin;
philware 1:d4ff95ab40ae 338
philware 1:d4ff95ab40ae 339 /** Set to true to spit out debug traces.
philware 1:d4ff95ab40ae 340 */
philware 1:d4ff95ab40ae 341 bool _debug_trace_on;
philware 1:d4ff95ab40ae 342
philware 1:d4ff95ab40ae 343 /** True if the modem is ready register to the network,
philware 1:d4ff95ab40ae 344 * otherwise false.
philware 1:d4ff95ab40ae 345 */
philware 1:d4ff95ab40ae 346 bool _modem_initialised;
philware 1:d4ff95ab40ae 347
philware 1:d4ff95ab40ae 348 /** True it the SIM requires a PIN, otherwise false.
philware 1:d4ff95ab40ae 349 */
philware 1:d4ff95ab40ae 350 bool _sim_pin_check_enabled;
philware 1:d4ff95ab40ae 351
philware 1:d4ff95ab40ae 352 /** Sets the modem up for powering on
philware 1:d4ff95ab40ae 353 *
philware 1:d4ff95ab40ae 354 * modem_init() is equivalent to plugging in the device, e.g., attaching power and serial port.
philware 1:d4ff95ab40ae 355 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 356 */
philware 1:d4ff95ab40ae 357 virtual void modem_init();
philware 1:d4ff95ab40ae 358
philware 1:d4ff95ab40ae 359 /** Sets the modem in unplugged state
philware 1:d4ff95ab40ae 360 *
philware 1:d4ff95ab40ae 361 * modem_deinit() will be equivalent to pulling the plug off of the device, i.e., detaching power
philware 1:d4ff95ab40ae 362 * and serial port. This puts the modem in lowest power state.
philware 1:d4ff95ab40ae 363 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 364 */
philware 1:d4ff95ab40ae 365 virtual void modem_deinit();
philware 1:d4ff95ab40ae 366
philware 1:d4ff95ab40ae 367 /** Powers up the modem
philware 1:d4ff95ab40ae 368 *
philware 1:d4ff95ab40ae 369 * modem_power_up() is equivalent to pressing the soft power button.
philware 1:d4ff95ab40ae 370 * The driver may repeat this if the modem is not responsive to AT commands.
philware 1:d4ff95ab40ae 371 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 372 */
philware 1:d4ff95ab40ae 373 virtual void modem_power_up();
philware 1:d4ff95ab40ae 374
philware 1:d4ff95ab40ae 375 /** Powers down the modem
philware 1:d4ff95ab40ae 376 *
philware 1:d4ff95ab40ae 377 * modem_power_down() is equivalent to turning off the modem by button press.
philware 1:d4ff95ab40ae 378 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
philware 1:d4ff95ab40ae 379 */
philware 1:d4ff95ab40ae 380 virtual void modem_power_down();
philware 1:d4ff95ab40ae 381
philware 1:d4ff95ab40ae 382 /* Note: constructor and destructor protected so that this
philware 1:d4ff95ab40ae 383 * class can only ever be inherited, never used directly.
philware 1:d4ff95ab40ae 384 */
philware 1:d4ff95ab40ae 385 UbloxCellularBaseN2xx();
philware 1:d4ff95ab40ae 386 ~UbloxCellularBaseN2xx();
philware 1:d4ff95ab40ae 387
philware 1:d4ff95ab40ae 388 /** Initialise this class.
philware 1:d4ff95ab40ae 389 *
philware 1:d4ff95ab40ae 390 * @param tx the UART TX data pin to which the modem is attached.
philware 1:d4ff95ab40ae 391 * @param rx the UART RX data pin to which the modem is attached.
philware 1:d4ff95ab40ae 392 * @param baud the UART baud rate.
philware 1:d4ff95ab40ae 393 * @param debug_on true to switch AT interface debug on, otherwise false.
philware 1:d4ff95ab40ae 394 *
philware 1:d4ff95ab40ae 395 * Note: it would be more natural to do this in the constructor
philware 1:d4ff95ab40ae 396 * however, to avoid the diamond of death, this class is only
philware 1:d4ff95ab40ae 397 * every inherited virtually. Classes that are inherited virtually
philware 1:d4ff95ab40ae 398 * do not get passed parameters in their constructor and hence
philware 1:d4ff95ab40ae 399 * classInit() must be called separately by the first one to wake
philware 1:d4ff95ab40ae 400 * the beast.
philware 1:d4ff95ab40ae 401 */
philware 1:d4ff95ab40ae 402 void baseClassInit(PinName tx = MDMTXD,
philware 1:d4ff95ab40ae 403 PinName rx = MDMRXD,
philware 4:8cd7a682a5ab 404 int baud = MBED_CONF_UBLOX_CELL_N2XX_BAUD_RATE,
philware 1:d4ff95ab40ae 405 bool debug_on = false);
philware 1:d4ff95ab40ae 406
philware 1:d4ff95ab40ae 407 /** Set the AT parser timeout.
philware 1:d4ff95ab40ae 408 */
philware 1:d4ff95ab40ae 409 void at_set_timeout(int timeout);
philware 1:d4ff95ab40ae 410
philware 1:d4ff95ab40ae 411 /** Read up to size characters from buf
philware 1:d4ff95ab40ae 412 * or until the character "end" is reached, overwriting
philware 1:d4ff95ab40ae 413 * the newline with 0 and ensuring a terminator
philware 1:d4ff95ab40ae 414 * in all cases.
philware 1:d4ff95ab40ae 415 *
philware 1:d4ff95ab40ae 416 * @param buf the buffer to write to.
philware 1:d4ff95ab40ae 417 * @param size the size of the buffer.
philware 1:d4ff95ab40ae 418 * @param end the character to stop at.
philware 1:d4ff95ab40ae 419 * @return the number of characters read,
philware 1:d4ff95ab40ae 420 * not including the terminator.
philware 1:d4ff95ab40ae 421 */
philware 1:d4ff95ab40ae 422 int read_at_to_char(char * buf, int size, char end);
philware 1:d4ff95ab40ae 423
philware 1:d4ff95ab40ae 424 /** Powers up the modem.
philware 1:d4ff95ab40ae 425 *
philware 1:d4ff95ab40ae 426 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 427 */
philware 1:d4ff95ab40ae 428 bool power_up();
philware 1:d4ff95ab40ae 429
philware 1:d4ff95ab40ae 430 /** Power down the modem.
philware 1:d4ff95ab40ae 431 */
philware 1:d4ff95ab40ae 432 void power_down();
philware 1:d4ff95ab40ae 433
philware 1:d4ff95ab40ae 434 /** Lock a mutex when accessing the modem.
philware 1:d4ff95ab40ae 435 */
philware 1:d4ff95ab40ae 436 void lock(void) { _mtx.lock(); }
philware 1:d4ff95ab40ae 437
philware 1:d4ff95ab40ae 438 /** Helper to make sure that lock unlock pair is always balanced
philware 1:d4ff95ab40ae 439 */
philware 1:d4ff95ab40ae 440 #define LOCK() { lock()
philware 1:d4ff95ab40ae 441
philware 1:d4ff95ab40ae 442 /** Unlock the modem when done accessing it.
philware 1:d4ff95ab40ae 443 */
philware 1:d4ff95ab40ae 444 void unlock(void) { _mtx.unlock(); }
philware 1:d4ff95ab40ae 445
philware 1:d4ff95ab40ae 446 /** Helper to make sure that lock unlock pair is always balanced
philware 1:d4ff95ab40ae 447 */
philware 1:d4ff95ab40ae 448 #define UNLOCK() } unlock()
philware 1:d4ff95ab40ae 449
philware 1:d4ff95ab40ae 450 /** Set the device identity in _dev_info
philware 1:d4ff95ab40ae 451 * based on the ATI string returned by
philware 1:d4ff95ab40ae 452 * the module.
philware 1:d4ff95ab40ae 453 *
philware 1:d4ff95ab40ae 454 * @return true if dev is a known value,
philware 1:d4ff95ab40ae 455 * otherwise false.
philware 1:d4ff95ab40ae 456 */
philware 1:d4ff95ab40ae 457 bool set_device_identity(DeviceType *dev);
philware 1:d4ff95ab40ae 458
philware 1:d4ff95ab40ae 459 /** Perform any modem initialisation that is
philware 1:d4ff95ab40ae 460 * specialised by device type.
philware 1:d4ff95ab40ae 461 *
philware 1:d4ff95ab40ae 462 * @return true if successful, otherwise false.
philware 1:d4ff95ab40ae 463 */
philware 1:d4ff95ab40ae 464 bool device_init(DeviceType dev);
philware 1:d4ff95ab40ae 465
philware 1:d4ff95ab40ae 466 /** Set up the SIM.
philware 1:d4ff95ab40ae 467 *
philware 1:d4ff95ab40ae 468 * @return true if successful, otherwiss false.
philware 1:d4ff95ab40ae 469 */
philware 1:d4ff95ab40ae 470 bool initialise_sim_card();
philware 1:d4ff95ab40ae 471
philware 1:d4ff95ab40ae 472 int read_at_to_newline(char * buf, int size);
philware 1:d4ff95ab40ae 473
philware 1:d4ff95ab40ae 474 private:
philware 1:d4ff95ab40ae 475 void set_nwk_reg_status_csd(int status);
philware 1:d4ff95ab40ae 476 void set_nwk_reg_status_psd(int status);
philware 1:d4ff95ab40ae 477 void set_nwk_reg_status_eps(int status);
philware 1:d4ff95ab40ae 478 void set_rat(int AcTStatus);
philware 1:d4ff95ab40ae 479 bool get_iccid();
philware 1:d4ff95ab40ae 480 bool get_imsi();
philware 1:d4ff95ab40ae 481 bool get_imei();
philware 1:d4ff95ab40ae 482 bool get_meid(); // *** NOT IMPLEMENTED, returns false
philware 1:d4ff95ab40ae 483 bool set_sms(); // *** NOT IMPLEMENTED, returns false
philware 1:d4ff95ab40ae 484 void parser_abort_cb();
philware 1:d4ff95ab40ae 485 void CMX_ERROR_URC();
philware 1:d4ff95ab40ae 486 void CEREG_URC();
philware 1:d4ff95ab40ae 487
philware 1:d4ff95ab40ae 488 bool get_sara_n2xx_info();
philware 1:d4ff95ab40ae 489 bool cereg(int n);
philware 1:d4ff95ab40ae 490 nsapi_error_t get_cereg();
philware 1:d4ff95ab40ae 491 nsapi_error_t get_cscon();
philware 1:d4ff95ab40ae 492 nsapi_error_t get_csq();
philware 1:d4ff95ab40ae 493
philware 1:d4ff95ab40ae 494 bool at_send(const char *cmd);
philware 1:d4ff95ab40ae 495 bool at_send(const char *cmd, int n);
philware 1:d4ff95ab40ae 496 bool at_send(const char *cmd, const char *arg);
philware 1:d4ff95ab40ae 497
philware 1:d4ff95ab40ae 498 bool at_req(const char *cmd, const char *recvFormat, const char *response);
philware 1:d4ff95ab40ae 499 bool at_req(const char *cmd, const char *recvFormat, int *response);
philware 1:d4ff95ab40ae 500 };
philware 1:d4ff95ab40ae 501
philware 1:d4ff95ab40ae 502 #endif // _UBLOX_CELLULAR_BASE_
philware 1:d4ff95ab40ae 503