Base class for the ublox-xxx-cellular-xxx classes. 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 ublox-xxx-cellular-xxx classes, you will need this class also.

Dependents:   example-ublox-cellular-interface example-ublox-cellular-driver-gen HelloMQTT example-ublox-cellular-interface_r410M ... more

Committer:
fahim alavi
Date:
Tue Jan 09 12:34:53 2018 +0500
Revision:
12:aa3cbc3f88c5
Parent:
11:57f64bc518c0
Child:
14:e420232ee4e7
Code convention applied

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobMeades 0:5cffef3371f6 1 /* Copyright (c) 2017 ARM Limited
RobMeades 0:5cffef3371f6 2 *
RobMeades 0:5cffef3371f6 3 * Licensed under the Apache License, Version 2.0 (the "License");
RobMeades 0:5cffef3371f6 4 * you may not use this file except in compliance with the License.
RobMeades 0:5cffef3371f6 5 * You may obtain a copy of the License at
RobMeades 0:5cffef3371f6 6 *
RobMeades 0:5cffef3371f6 7 * http://www.apache.org/licenses/LICENSE-2.0
RobMeades 0:5cffef3371f6 8 *
RobMeades 0:5cffef3371f6 9 * Unless required by applicable law or agreed to in writing, software
RobMeades 0:5cffef3371f6 10 * distributed under the License is distributed on an "AS IS" BASIS,
RobMeades 0:5cffef3371f6 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
RobMeades 0:5cffef3371f6 12 * See the License for the specific language governing permissions and
RobMeades 0:5cffef3371f6 13 * limitations under the License.
RobMeades 0:5cffef3371f6 14 */
RobMeades 0:5cffef3371f6 15
rob.meades@u-blox.com 1:5aaecf2572dc 16 #ifndef _UBLOX_CELLULAR_BASE_
rob.meades@u-blox.com 1:5aaecf2572dc 17 #define _UBLOX_CELLULAR_BASE_
RobMeades 0:5cffef3371f6 18
RobMeades 0:5cffef3371f6 19 #include "mbed.h"
RobMeades 0:5cffef3371f6 20 #include "ATCmdParser.h"
RobMeades 0:5cffef3371f6 21 #include "FileHandle.h"
RobMeades 0:5cffef3371f6 22
RobMeades 0:5cffef3371f6 23 /**********************************************************************
RobMeades 0:5cffef3371f6 24 * CLASSES
RobMeades 0:5cffef3371f6 25 **********************************************************************/
RobMeades 0:5cffef3371f6 26
RobMeades 0:5cffef3371f6 27 /** UbloxCellularBase class.
RobMeades 0:5cffef3371f6 28 *
RobMeades 0:5cffef3371f6 29 * This class provides all the base support for generic u-blox modems
RobMeades 0:5cffef3371f6 30 * on C030 and C027 boards: module identification, power-up, network
RobMeades 0:5cffef3371f6 31 * registration, etc.
RobMeades 0:5cffef3371f6 32 */
RobMeades 0:5cffef3371f6 33 class UbloxCellularBase {
RobMeades 0:5cffef3371f6 34
RobMeades 0:5cffef3371f6 35 public:
RobMeades 0:5cffef3371f6 36 /** Circuit Switched network registration status (CREG Usage).
RobMeades 0:5cffef3371f6 37 * UBX-13001820 - AT Commands Example Application Note (Section 7.10.3).
RobMeades 0:5cffef3371f6 38 */
RobMeades 0:5cffef3371f6 39 typedef enum {
RobMeades 0:5cffef3371f6 40 CSD_NOT_REGISTERED_NOT_SEARCHING = 0,
RobMeades 0:5cffef3371f6 41 CSD_REGISTERED = 1,
RobMeades 0:5cffef3371f6 42 CSD_NOT_REGISTERED_SEARCHING = 2,
RobMeades 0:5cffef3371f6 43 CSD_REGISTRATION_DENIED = 3,
RobMeades 0:5cffef3371f6 44 CSD_UNKNOWN_COVERAGE = 4,
RobMeades 0:5cffef3371f6 45 CSD_REGISTERED_ROAMING = 5,
RobMeades 0:5cffef3371f6 46 CSD_SMS_ONLY = 6,
RobMeades 0:5cffef3371f6 47 CSD_SMS_ONLY_ROAMING = 7,
RobMeades 0:5cffef3371f6 48 CSD_CSFB_NOT_PREFERRED = 9
RobMeades 0:5cffef3371f6 49 } NetworkRegistrationStatusCsd;
RobMeades 0:5cffef3371f6 50
RobMeades 0:5cffef3371f6 51 /** Packet Switched network registration status (CGREG Usage).
RobMeades 0:5cffef3371f6 52 * UBX-13001820 - AT Commands Example Application Note (Section 18.27.3).
RobMeades 0:5cffef3371f6 53 */
RobMeades 0:5cffef3371f6 54 typedef enum {
RobMeades 0:5cffef3371f6 55 PSD_NOT_REGISTERED_NOT_SEARCHING = 0,
RobMeades 0:5cffef3371f6 56 PSD_REGISTERED = 1,
RobMeades 0:5cffef3371f6 57 PSD_NOT_REGISTERED_SEARCHING = 2,
RobMeades 0:5cffef3371f6 58 PSD_REGISTRATION_DENIED = 3,
RobMeades 0:5cffef3371f6 59 PSD_UNKNOWN_COVERAGE = 4,
RobMeades 0:5cffef3371f6 60 PSD_REGISTERED_ROAMING = 5,
RobMeades 0:5cffef3371f6 61 PSD_EMERGENCY_SERVICES_ONLY = 8
RobMeades 0:5cffef3371f6 62 } NetworkRegistrationStatusPsd;
RobMeades 0:5cffef3371f6 63
RobMeades 0:5cffef3371f6 64 /** EPS network registration status (CEREG Usage).
RobMeades 0:5cffef3371f6 65 * UBX-13001820 - AT Commands Example Application Note (Section 18.36.3).
RobMeades 0:5cffef3371f6 66 */
RobMeades 0:5cffef3371f6 67 typedef enum {
RobMeades 0:5cffef3371f6 68 EPS_NOT_REGISTERED_NOT_SEARCHING = 0,
RobMeades 0:5cffef3371f6 69 EPS_REGISTERED = 1,
RobMeades 0:5cffef3371f6 70 EPS_NOT_REGISTERED_SEARCHING = 2,
RobMeades 0:5cffef3371f6 71 EPS_REGISTRATION_DENIED = 3,
RobMeades 0:5cffef3371f6 72 EPS_UNKNOWN_COVERAGE = 4,
RobMeades 0:5cffef3371f6 73 EPS_REGISTERED_ROAMING = 5,
RobMeades 0:5cffef3371f6 74 EPS_EMERGENCY_SERVICES_ONLY = 8
RobMeades 0:5cffef3371f6 75 } NetworkRegistrationStatusEps;
RobMeades 0:5cffef3371f6 76
RobMeades 0:5cffef3371f6 77 /** Initialise the modem, ready for use.
RobMeades 0:5cffef3371f6 78 *
RobMeades 0:5cffef3371f6 79 * @param pin PIN for the SIM card.
RobMeades 0:5cffef3371f6 80 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 81 */
RobMeades 0:5cffef3371f6 82 bool init(const char *pin = 0);
RobMeades 0:5cffef3371f6 83
RobMeades 0:5cffef3371f6 84 /** Perform registration with the network.
RobMeades 0:5cffef3371f6 85 *
RobMeades 0:5cffef3371f6 86 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 87 */
RobMeades 0:5cffef3371f6 88 bool nwk_registration();
RobMeades 0:5cffef3371f6 89
RobMeades 0:5cffef3371f6 90 /** True if the modem is registered for circuit
RobMeades 0:5cffef3371f6 91 * switched data, otherwise false.
RobMeades 0:5cffef3371f6 92 */
RobMeades 0:5cffef3371f6 93 bool is_registered_csd();
RobMeades 0:5cffef3371f6 94
RobMeades 0:5cffef3371f6 95 /** True if the modem is registered for packet
RobMeades 0:5cffef3371f6 96 * switched data, otherwise false.
RobMeades 0:5cffef3371f6 97 */
RobMeades 0:5cffef3371f6 98 bool is_registered_psd();
RobMeades 0:5cffef3371f6 99
RobMeades 0:5cffef3371f6 100 /** True if the modem is registered for enhanced
RobMeades 0:5cffef3371f6 101 * packet switched data (i.e. LTE and beyond),
RobMeades 0:5cffef3371f6 102 * otherwise false.
RobMeades 0:5cffef3371f6 103 */
RobMeades 0:5cffef3371f6 104 bool is_registered_eps();
RobMeades 0:5cffef3371f6 105
RobMeades 0:5cffef3371f6 106 /** Perform deregistration from the network.
RobMeades 0:5cffef3371f6 107 *
RobMeades 0:5cffef3371f6 108 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 109 */
RobMeades 0:5cffef3371f6 110 bool nwk_deregistration();
RobMeades 0:5cffef3371f6 111
RobMeades 0:5cffef3371f6 112 /** Put the modem into its lowest power state.
RobMeades 0:5cffef3371f6 113 */
RobMeades 0:5cffef3371f6 114 void deinit();
RobMeades 0:5cffef3371f6 115
RobMeades 0:5cffef3371f6 116 /** Set the PIN code for the SIM card.
RobMeades 0:5cffef3371f6 117 *
RobMeades 0:5cffef3371f6 118 * @param pin PIN for the SIM card.
RobMeades 0:5cffef3371f6 119 */
RobMeades 0:5cffef3371f6 120 void set_pin(const char *pin);
RobMeades 0:5cffef3371f6 121
RobMeades 0:5cffef3371f6 122 /** Enable or disable SIM pin checking.
RobMeades 0:5cffef3371f6 123 *
RobMeades 0:5cffef3371f6 124 * @param enableNotDisable true if SIM PIN checking is to be enabled,
RobMeades 0:5cffef3371f6 125 * otherwise false.
RobMeades 0:5cffef3371f6 126 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 127 */
RobMeades 0:5cffef3371f6 128 bool sim_pin_check_enable(bool enableNotDisable);
RobMeades 0:5cffef3371f6 129
RobMeades 0:5cffef3371f6 130 /** Change the SIM pin.
RobMeades 0:5cffef3371f6 131 *
RobMeades 0:5cffef3371f6 132 * @param new_pin the new PIN to use.
RobMeades 0:5cffef3371f6 133 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 134 */
RobMeades 0:5cffef3371f6 135 bool change_sim_pin(const char *new_pin);
RobMeades 0:5cffef3371f6 136
fahim alavi 11:57f64bc518c0 137 /** Get the IMEI.
fahim alavi 11:57f64bc518c0 138 *
fahim alavi 11:57f64bc518c0 139 * @return true if successful, otherwise false.
fahim alavi 11:57f64bc518c0 140 */
fahim alavi 12:aa3cbc3f88c5 141 bool get_imei(char *imei_to_send, int size);
fahim alavi 11:57f64bc518c0 142
RobMeades 0:5cffef3371f6 143 protected:
RobMeades 0:5cffef3371f6 144
RobMeades 0:5cffef3371f6 145 #define OUTPUT_ENTER_KEY "\r"
RobMeades 0:5cffef3371f6 146
RobMeades 0:5cffef3371f6 147 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
RobMeades 0:5cffef3371f6 148 #define AT_PARSER_BUFFER_SIZE MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE
RobMeades 0:5cffef3371f6 149 #else
RobMeades 0:5cffef3371f6 150 #define AT_PARSER_BUFFER_SIZE 256
RobMeades 0:5cffef3371f6 151 #endif
RobMeades 0:5cffef3371f6 152
RobMeades 0:5cffef3371f6 153 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
RobMeades 0:5cffef3371f6 154 #define AT_PARSER_TIMEOUT MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT
RobMeades 0:5cffef3371f6 155 #else
RobMeades 0:5cffef3371f6 156 #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds
RobMeades 0:5cffef3371f6 157 #endif
RobMeades 0:5cffef3371f6 158
RobMeades 0:5cffef3371f6 159 /** A string that would not normally be sent by the modem on the AT interface.
RobMeades 0:5cffef3371f6 160 */
RobMeades 0:5cffef3371f6 161 #define UNNATURAL_STRING "\x01"
RobMeades 0:5cffef3371f6 162
RobMeades 0:5cffef3371f6 163 /** Supported u-blox modem variants.
RobMeades 0:5cffef3371f6 164 */
RobMeades 0:5cffef3371f6 165 typedef enum {
RobMeades 0:5cffef3371f6 166 DEV_TYPE_NONE = 0,
RobMeades 0:5cffef3371f6 167 DEV_SARA_G35,
RobMeades 0:5cffef3371f6 168 DEV_LISA_U2,
RobMeades 0:5cffef3371f6 169 DEV_LISA_U2_03S,
RobMeades 0:5cffef3371f6 170 DEV_SARA_U2,
fahim alavi 11:57f64bc518c0 171 DEV_SARA_R4,
RobMeades 0:5cffef3371f6 172 DEV_LEON_G2,
RobMeades 0:5cffef3371f6 173 DEV_TOBY_L2,
RobMeades 0:5cffef3371f6 174 DEV_MPCI_L2
RobMeades 0:5cffef3371f6 175 } DeviceType;
RobMeades 0:5cffef3371f6 176
RobMeades 0:5cffef3371f6 177 /** Network registration status.
RobMeades 0:5cffef3371f6 178 * UBX-13001820 - AT Commands Example Application Note (Section 4.1.4.5).
RobMeades 0:5cffef3371f6 179 */
RobMeades 0:5cffef3371f6 180 typedef enum {
RobMeades 0:5cffef3371f6 181 GSM = 0,
RobMeades 0:5cffef3371f6 182 COMPACT_GSM = 1,
RobMeades 0:5cffef3371f6 183 UTRAN = 2,
RobMeades 0:5cffef3371f6 184 EDGE = 3,
RobMeades 0:5cffef3371f6 185 HSDPA = 4,
RobMeades 0:5cffef3371f6 186 HSUPA = 5,
RobMeades 0:5cffef3371f6 187 HSDPA_HSUPA = 6,
fahimalavi 10:c4281fa79b8f 188 LTE = 7,
fahim alavi 12:aa3cbc3f88c5 189 EC_GSM_IoT = 8,
fahim alavi 12:aa3cbc3f88c5 190 E_UTRAN_NB_S1 = 9
RobMeades 0:5cffef3371f6 191 } RadioAccessNetworkType;
RobMeades 0:5cffef3371f6 192
RobMeades 0:5cffef3371f6 193 /** Info about the modem.
RobMeades 0:5cffef3371f6 194 */
RobMeades 0:5cffef3371f6 195 typedef struct {
RobMeades 0:5cffef3371f6 196 DeviceType dev;
RobMeades 0:5cffef3371f6 197 char iccid[20 + 1]; //!< Integrated Circuit Card ID.
RobMeades 0:5cffef3371f6 198 char imsi[15 + 1]; //!< International Mobile Station Identity.
RobMeades 0:5cffef3371f6 199 char imei[15 + 1]; //!< International Mobile Equipment Identity.
RobMeades 0:5cffef3371f6 200 char meid[18 + 1]; //!< Mobile Equipment IDentifier.
RobMeades 0:5cffef3371f6 201 volatile RadioAccessNetworkType rat; //!< Type of network (e.g. 2G, 3G, LTE).
RobMeades 0:5cffef3371f6 202 volatile NetworkRegistrationStatusCsd reg_status_csd; //!< Circuit switched attach status.
RobMeades 0:5cffef3371f6 203 volatile NetworkRegistrationStatusPsd reg_status_psd; //!< Packet switched attach status.
RobMeades 0:5cffef3371f6 204 volatile NetworkRegistrationStatusEps reg_status_eps; //!< Evolved Packet Switched (e.g. LTE) attach status.
RobMeades 0:5cffef3371f6 205 } DeviceInfo;
RobMeades 0:5cffef3371f6 206
RobMeades 0:5cffef3371f6 207 /* IMPORTANT: the variables below are available to
RobMeades 0:5cffef3371f6 208 * classes that inherit this in order to keep things
RobMeades 0:5cffef3371f6 209 * simple. However, ONLY this class should free
RobMeades 0:5cffef3371f6 210 * any of the pointers, or there will be havoc.
RobMeades 0:5cffef3371f6 211 */
RobMeades 0:5cffef3371f6 212
RobMeades 0:5cffef3371f6 213 /** Point to the instance of the AT parser in use.
RobMeades 0:5cffef3371f6 214 */
RobMeades 0:5cffef3371f6 215 ATCmdParser *_at;
RobMeades 0:5cffef3371f6 216
RobMeades 0:5cffef3371f6 217 /** The current AT parser timeout value.
RobMeades 0:5cffef3371f6 218 */
RobMeades 0:5cffef3371f6 219 int _at_timeout;
RobMeades 0:5cffef3371f6 220
RobMeades 0:5cffef3371f6 221 /** File handle used by the AT parser.
RobMeades 0:5cffef3371f6 222 */
RobMeades 0:5cffef3371f6 223 FileHandle *_fh;
RobMeades 0:5cffef3371f6 224
RobMeades 0:5cffef3371f6 225 /** The mutex resource.
RobMeades 0:5cffef3371f6 226 */
RobMeades 0:5cffef3371f6 227 Mutex _mtx;
RobMeades 0:5cffef3371f6 228
RobMeades 0:5cffef3371f6 229 /** General info about the modem as a device.
RobMeades 0:5cffef3371f6 230 */
RobMeades 0:5cffef3371f6 231 DeviceInfo _dev_info;
RobMeades 0:5cffef3371f6 232
RobMeades 0:5cffef3371f6 233 /** The SIM PIN to use.
RobMeades 0:5cffef3371f6 234 */
RobMeades 0:5cffef3371f6 235 const char *_pin;
RobMeades 0:5cffef3371f6 236
RobMeades 0:5cffef3371f6 237 /** Set to true to spit out debug traces.
RobMeades 0:5cffef3371f6 238 */
RobMeades 0:5cffef3371f6 239 bool _debug_trace_on;
rob.meades@u-blox.com 4:2e640a101db1 240
rob.meades@u-blox.com 4:2e640a101db1 241 /** The baud rate to the modem.
rob.meades@u-blox.com 4:2e640a101db1 242 */
rob.meades@u-blox.com 4:2e640a101db1 243 int _baud;
RobMeades 0:5cffef3371f6 244
RobMeades 0:5cffef3371f6 245 /** True if the modem is ready register to the network,
RobMeades 0:5cffef3371f6 246 * otherwise false.
RobMeades 0:5cffef3371f6 247 */
RobMeades 0:5cffef3371f6 248 bool _modem_initialised;
RobMeades 0:5cffef3371f6 249
RobMeades 0:5cffef3371f6 250 /** True it the SIM requires a PIN, otherwise false.
RobMeades 0:5cffef3371f6 251 */
RobMeades 0:5cffef3371f6 252 bool _sim_pin_check_enabled;
RobMeades 0:5cffef3371f6 253
RobMeades 0:5cffef3371f6 254 /** Sets the modem up for powering on
RobMeades 0:5cffef3371f6 255 *
RobMeades 0:5cffef3371f6 256 * modem_init() is equivalent to plugging in the device, e.g., attaching power and serial port.
RobMeades 0:5cffef3371f6 257 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
RobMeades 0:5cffef3371f6 258 */
RobMeades 0:5cffef3371f6 259 virtual void modem_init();
RobMeades 0:5cffef3371f6 260
RobMeades 0:5cffef3371f6 261 /** Sets the modem in unplugged state
RobMeades 0:5cffef3371f6 262 *
RobMeades 0:5cffef3371f6 263 * modem_deinit() will be equivalent to pulling the plug off of the device, i.e., detaching power
RobMeades 0:5cffef3371f6 264 * and serial port. This puts the modem in lowest power state.
RobMeades 0:5cffef3371f6 265 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
RobMeades 0:5cffef3371f6 266 */
RobMeades 0:5cffef3371f6 267 virtual void modem_deinit();
RobMeades 0:5cffef3371f6 268
RobMeades 0:5cffef3371f6 269 /** Powers up the modem
RobMeades 0:5cffef3371f6 270 *
RobMeades 0:5cffef3371f6 271 * modem_power_up() is equivalent to pressing the soft power button.
RobMeades 0:5cffef3371f6 272 * The driver may repeat this if the modem is not responsive to AT commands.
RobMeades 0:5cffef3371f6 273 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
RobMeades 0:5cffef3371f6 274 */
RobMeades 0:5cffef3371f6 275 virtual void modem_power_up();
RobMeades 0:5cffef3371f6 276
RobMeades 0:5cffef3371f6 277 /** Powers down the modem
RobMeades 0:5cffef3371f6 278 *
RobMeades 0:5cffef3371f6 279 * modem_power_down() is equivalent to turning off the modem by button press.
RobMeades 0:5cffef3371f6 280 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target.
RobMeades 0:5cffef3371f6 281 */
RobMeades 0:5cffef3371f6 282 virtual void modem_power_down();
RobMeades 0:5cffef3371f6 283
RobMeades 0:5cffef3371f6 284 /* Note: constructor and destructor protected so that this
RobMeades 0:5cffef3371f6 285 * class can only ever be inherited, never used directly.
RobMeades 0:5cffef3371f6 286 */
RobMeades 0:5cffef3371f6 287 UbloxCellularBase();
RobMeades 0:5cffef3371f6 288 ~UbloxCellularBase();
RobMeades 0:5cffef3371f6 289
RobMeades 0:5cffef3371f6 290 /** Initialise this class.
RobMeades 0:5cffef3371f6 291 *
RobMeades 0:5cffef3371f6 292 * @param tx the UART TX data pin to which the modem is attached.
RobMeades 0:5cffef3371f6 293 * @param rx the UART RX data pin to which the modem is attached.
RobMeades 0:5cffef3371f6 294 * @param baud the UART baud rate.
RobMeades 0:5cffef3371f6 295 * @param debug_on true to switch AT interface debug on, otherwise false.
RobMeades 0:5cffef3371f6 296 *
RobMeades 0:5cffef3371f6 297 * Note: it would be more natural to do this in the constructor
RobMeades 0:5cffef3371f6 298 * however, to avoid the diamond of death, this class is only
RobMeades 0:5cffef3371f6 299 * every inherited virtually. Classes that are inherited virtually
RobMeades 0:5cffef3371f6 300 * do not get passed parameters in their constructor and hence
RobMeades 0:5cffef3371f6 301 * classInit() must be called separately by the first one to wake
RobMeades 0:5cffef3371f6 302 * the beast.
RobMeades 0:5cffef3371f6 303 */
RobMeades 0:5cffef3371f6 304 void baseClassInit(PinName tx = MDMTXD,
RobMeades 0:5cffef3371f6 305 PinName rx = MDMRXD,
RobMeades 0:5cffef3371f6 306 int baud = MBED_CONF_UBLOX_CELL_BAUD_RATE,
RobMeades 0:5cffef3371f6 307 bool debug_on = false);
RobMeades 0:5cffef3371f6 308
RobMeades 0:5cffef3371f6 309 /** Set the AT parser timeout.
RobMeades 0:5cffef3371f6 310 */
RobMeades 0:5cffef3371f6 311 void at_set_timeout(int timeout);
RobMeades 0:5cffef3371f6 312
RobMeades 0:5cffef3371f6 313 /** Read up to size characters from buf
RobMeades 0:5cffef3371f6 314 * or until the character "end" is reached, overwriting
RobMeades 0:5cffef3371f6 315 * the newline with 0 and ensuring a terminator
RobMeades 0:5cffef3371f6 316 * in all cases.
RobMeades 0:5cffef3371f6 317 *
RobMeades 0:5cffef3371f6 318 * @param buf the buffer to write to.
RobMeades 0:5cffef3371f6 319 * @param size the size of the buffer.
RobMeades 0:5cffef3371f6 320 * @param end the character to stop at.
RobMeades 0:5cffef3371f6 321 * @return the number of characters read,
RobMeades 0:5cffef3371f6 322 * not including the terminator.
RobMeades 0:5cffef3371f6 323 */
RobMeades 0:5cffef3371f6 324 int read_at_to_char(char * buf, int size, char end);
RobMeades 0:5cffef3371f6 325
RobMeades 0:5cffef3371f6 326 /** Powers up the modem.
RobMeades 0:5cffef3371f6 327 *
RobMeades 0:5cffef3371f6 328 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 329 */
RobMeades 0:5cffef3371f6 330 bool power_up();
RobMeades 0:5cffef3371f6 331
RobMeades 0:5cffef3371f6 332 /** Power down the modem.
RobMeades 0:5cffef3371f6 333 */
RobMeades 0:5cffef3371f6 334 void power_down();
RobMeades 0:5cffef3371f6 335
RobMeades 0:5cffef3371f6 336 /** Lock a mutex when accessing the modem.
RobMeades 0:5cffef3371f6 337 */
RobMeades 0:5cffef3371f6 338 void lock(void) { _mtx.lock(); }
RobMeades 0:5cffef3371f6 339
RobMeades 0:5cffef3371f6 340 /** Helper to make sure that lock unlock pair is always balanced
RobMeades 0:5cffef3371f6 341 */
RobMeades 0:5cffef3371f6 342 #define LOCK() { lock()
RobMeades 0:5cffef3371f6 343
RobMeades 0:5cffef3371f6 344 /** Unlock the modem when done accessing it.
RobMeades 0:5cffef3371f6 345 */
RobMeades 0:5cffef3371f6 346 void unlock(void) { _mtx.unlock(); }
RobMeades 0:5cffef3371f6 347
RobMeades 0:5cffef3371f6 348 /** Helper to make sure that lock unlock pair is always balanced
RobMeades 0:5cffef3371f6 349 */
RobMeades 0:5cffef3371f6 350 #define UNLOCK() } unlock()
RobMeades 0:5cffef3371f6 351
RobMeades 0:5cffef3371f6 352 /** Set the device identity in _dev_info
RobMeades 0:5cffef3371f6 353 * based on the ATI string returned by
RobMeades 0:5cffef3371f6 354 * the module.
RobMeades 0:5cffef3371f6 355 *
RobMeades 0:5cffef3371f6 356 * @return true if dev is a known value,
RobMeades 0:5cffef3371f6 357 * otherwise false.
RobMeades 0:5cffef3371f6 358 */
RobMeades 0:5cffef3371f6 359 bool set_device_identity(DeviceType *dev);
RobMeades 0:5cffef3371f6 360
RobMeades 0:5cffef3371f6 361 /** Perform any modem initialisation that is
RobMeades 0:5cffef3371f6 362 * specialised by device type.
RobMeades 0:5cffef3371f6 363 *
RobMeades 0:5cffef3371f6 364 * @return true if successful, otherwise false.
RobMeades 0:5cffef3371f6 365 */
RobMeades 0:5cffef3371f6 366 bool device_init(DeviceType dev);
RobMeades 0:5cffef3371f6 367
RobMeades 0:5cffef3371f6 368 /** Set up the SIM.
RobMeades 0:5cffef3371f6 369 *
RobMeades 0:5cffef3371f6 370 * @return true if successful, otherwiss false.
RobMeades 0:5cffef3371f6 371 */
RobMeades 0:5cffef3371f6 372 bool initialise_sim_card();
RobMeades 0:5cffef3371f6 373
RobMeades 0:5cffef3371f6 374 private:
RobMeades 0:5cffef3371f6 375
RobMeades 0:5cffef3371f6 376 void set_nwk_reg_status_csd(int status);
RobMeades 0:5cffef3371f6 377 void set_nwk_reg_status_psd(int status);
RobMeades 0:5cffef3371f6 378 void set_nwk_reg_status_eps(int status);
RobMeades 0:5cffef3371f6 379 void set_rat(int AcTStatus);
RobMeades 0:5cffef3371f6 380 bool get_iccid();
RobMeades 0:5cffef3371f6 381 bool get_imsi();
RobMeades 0:5cffef3371f6 382 bool get_imei();
RobMeades 0:5cffef3371f6 383 bool get_meid();
RobMeades 0:5cffef3371f6 384 bool set_sms();
RobMeades 0:5cffef3371f6 385 void parser_abort_cb();
RobMeades 0:5cffef3371f6 386 void CMX_ERROR_URC();
RobMeades 0:5cffef3371f6 387 void CREG_URC();
RobMeades 0:5cffef3371f6 388 void CGREG_URC();
RobMeades 0:5cffef3371f6 389 void CEREG_URC();
RobMeades 0:5cffef3371f6 390 void UMWI_URC();
RobMeades 0:5cffef3371f6 391 };
RobMeades 0:5cffef3371f6 392
rob.meades@u-blox.com 1:5aaecf2572dc 393 #endif // _UBLOX_CELLULAR_BASE_
RobMeades 0:5cffef3371f6 394