ublox-cellular-base_R4_PR
UbloxCellularBase.h@29:8a38f91009ad, 2019-08-26 (annotated)
- Committer:
- wajahat.abbas@u-blox.com
- Date:
- Mon Aug 26 14:55:37 2019 +0500
- Revision:
- 29:8a38f91009ad
- Parent:
- 26:e4e444cc7b14
- Child:
- 30:38230504a646
MNO set mechanism changed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fahimalavi | 26:e4e444cc7b14 | 1 | /* Copyright (c) 2019 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 | 14:e420232ee4e7 | 20 | #include "mbed_toolchain.h" // for MBED_DEPRECATED |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 21 | #include "ubloxATCmdParser.h" |
RobMeades | 0:5cffef3371f6 | 22 | #include "FileHandle.h" |
RobMeades | 0:5cffef3371f6 | 23 | |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 24 | #ifdef TARGET_UBLOX_C030_R410M |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 25 | #define MAX_NUM_PROFILES 12 //ref to enum MNOProfile |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 26 | #elif TARGET_UBLOX_C030_R412M |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 27 | #define MAX_NUM_PROFILES 7 |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 28 | #endif |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 29 | |
RobMeades | 0:5cffef3371f6 | 30 | /********************************************************************** |
RobMeades | 0:5cffef3371f6 | 31 | * CLASSES |
RobMeades | 0:5cffef3371f6 | 32 | **********************************************************************/ |
RobMeades | 0:5cffef3371f6 | 33 | |
RobMeades | 0:5cffef3371f6 | 34 | /** UbloxCellularBase class. |
RobMeades | 0:5cffef3371f6 | 35 | * |
RobMeades | 0:5cffef3371f6 | 36 | * This class provides all the base support for generic u-blox modems |
RobMeades | 0:5cffef3371f6 | 37 | * on C030 and C027 boards: module identification, power-up, network |
RobMeades | 0:5cffef3371f6 | 38 | * registration, etc. |
RobMeades | 0:5cffef3371f6 | 39 | */ |
RobMeades | 0:5cffef3371f6 | 40 | class UbloxCellularBase { |
RobMeades | 0:5cffef3371f6 | 41 | |
RobMeades | 0:5cffef3371f6 | 42 | public: |
RobMeades | 0:5cffef3371f6 | 43 | /** Circuit Switched network registration status (CREG Usage). |
RobMeades | 0:5cffef3371f6 | 44 | * UBX-13001820 - AT Commands Example Application Note (Section 7.10.3). |
RobMeades | 0:5cffef3371f6 | 45 | */ |
RobMeades | 0:5cffef3371f6 | 46 | typedef enum { |
RobMeades | 0:5cffef3371f6 | 47 | CSD_NOT_REGISTERED_NOT_SEARCHING = 0, |
RobMeades | 0:5cffef3371f6 | 48 | CSD_REGISTERED = 1, |
RobMeades | 0:5cffef3371f6 | 49 | CSD_NOT_REGISTERED_SEARCHING = 2, |
RobMeades | 0:5cffef3371f6 | 50 | CSD_REGISTRATION_DENIED = 3, |
RobMeades | 0:5cffef3371f6 | 51 | CSD_UNKNOWN_COVERAGE = 4, |
RobMeades | 0:5cffef3371f6 | 52 | CSD_REGISTERED_ROAMING = 5, |
RobMeades | 0:5cffef3371f6 | 53 | CSD_SMS_ONLY = 6, |
RobMeades | 0:5cffef3371f6 | 54 | CSD_SMS_ONLY_ROAMING = 7, |
RobMeades | 0:5cffef3371f6 | 55 | CSD_CSFB_NOT_PREFERRED = 9 |
RobMeades | 0:5cffef3371f6 | 56 | } NetworkRegistrationStatusCsd; |
RobMeades | 0:5cffef3371f6 | 57 | |
RobMeades | 0:5cffef3371f6 | 58 | /** Packet Switched network registration status (CGREG Usage). |
RobMeades | 0:5cffef3371f6 | 59 | * UBX-13001820 - AT Commands Example Application Note (Section 18.27.3). |
RobMeades | 0:5cffef3371f6 | 60 | */ |
RobMeades | 0:5cffef3371f6 | 61 | typedef enum { |
RobMeades | 0:5cffef3371f6 | 62 | PSD_NOT_REGISTERED_NOT_SEARCHING = 0, |
RobMeades | 0:5cffef3371f6 | 63 | PSD_REGISTERED = 1, |
RobMeades | 0:5cffef3371f6 | 64 | PSD_NOT_REGISTERED_SEARCHING = 2, |
RobMeades | 0:5cffef3371f6 | 65 | PSD_REGISTRATION_DENIED = 3, |
RobMeades | 0:5cffef3371f6 | 66 | PSD_UNKNOWN_COVERAGE = 4, |
RobMeades | 0:5cffef3371f6 | 67 | PSD_REGISTERED_ROAMING = 5, |
RobMeades | 0:5cffef3371f6 | 68 | PSD_EMERGENCY_SERVICES_ONLY = 8 |
RobMeades | 0:5cffef3371f6 | 69 | } NetworkRegistrationStatusPsd; |
RobMeades | 0:5cffef3371f6 | 70 | |
RobMeades | 0:5cffef3371f6 | 71 | /** EPS network registration status (CEREG Usage). |
RobMeades | 0:5cffef3371f6 | 72 | * UBX-13001820 - AT Commands Example Application Note (Section 18.36.3). |
RobMeades | 0:5cffef3371f6 | 73 | */ |
RobMeades | 0:5cffef3371f6 | 74 | typedef enum { |
RobMeades | 0:5cffef3371f6 | 75 | EPS_NOT_REGISTERED_NOT_SEARCHING = 0, |
RobMeades | 0:5cffef3371f6 | 76 | EPS_REGISTERED = 1, |
RobMeades | 0:5cffef3371f6 | 77 | EPS_NOT_REGISTERED_SEARCHING = 2, |
RobMeades | 0:5cffef3371f6 | 78 | EPS_REGISTRATION_DENIED = 3, |
RobMeades | 0:5cffef3371f6 | 79 | EPS_UNKNOWN_COVERAGE = 4, |
RobMeades | 0:5cffef3371f6 | 80 | EPS_REGISTERED_ROAMING = 5, |
RobMeades | 0:5cffef3371f6 | 81 | EPS_EMERGENCY_SERVICES_ONLY = 8 |
RobMeades | 0:5cffef3371f6 | 82 | } NetworkRegistrationStatusEps; |
RobMeades | 0:5cffef3371f6 | 83 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 84 | /** modem PSM states. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 85 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 86 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 87 | typedef enum { |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 88 | AWAKE = 0, |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 89 | ASLEEP = 1 |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 90 | } ModemPSMState; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 91 | |
fahimalavi | 26:e4e444cc7b14 | 92 | /** |
fahimalavi | 26:e4e444cc7b14 | 93 | * edrx access technology |
fahimalavi | 26:e4e444cc7b14 | 94 | */ |
fahimalavi | 26:e4e444cc7b14 | 95 | typedef enum { |
fahimalavi | 26:e4e444cc7b14 | 96 | EDRXGSM_EC_GSM_IoT_mode = 1, |
fahimalavi | 26:e4e444cc7b14 | 97 | EDRXGSM_A_Gb_mode, |
fahimalavi | 26:e4e444cc7b14 | 98 | EDRXUTRAN_Iu_mode, |
fahimalavi | 26:e4e444cc7b14 | 99 | EDRXEUTRAN_WB_S1_mode, |
fahimalavi | 26:e4e444cc7b14 | 100 | EDRXEUTRAN_NB_S1_mode |
fahimalavi | 26:e4e444cc7b14 | 101 | }tEDRXAccessTechnology; |
fahimalavi | 26:e4e444cc7b14 | 102 | |
RobMeades | 0:5cffef3371f6 | 103 | /** Initialise the modem, ready for use. |
RobMeades | 0:5cffef3371f6 | 104 | * |
RobMeades | 0:5cffef3371f6 | 105 | * @param pin PIN for the SIM card. |
RobMeades | 0:5cffef3371f6 | 106 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 107 | */ |
RobMeades | 0:5cffef3371f6 | 108 | bool init(const char *pin = 0); |
RobMeades | 0:5cffef3371f6 | 109 | |
RobMeades | 0:5cffef3371f6 | 110 | /** Perform registration with the network. |
RobMeades | 0:5cffef3371f6 | 111 | * |
RobMeades | 0:5cffef3371f6 | 112 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 113 | */ |
RobMeades | 0:5cffef3371f6 | 114 | bool nwk_registration(); |
RobMeades | 0:5cffef3371f6 | 115 | |
RobMeades | 0:5cffef3371f6 | 116 | /** True if the modem is registered for circuit |
RobMeades | 0:5cffef3371f6 | 117 | * switched data, otherwise false. |
RobMeades | 0:5cffef3371f6 | 118 | */ |
RobMeades | 0:5cffef3371f6 | 119 | bool is_registered_csd(); |
RobMeades | 0:5cffef3371f6 | 120 | |
RobMeades | 0:5cffef3371f6 | 121 | /** True if the modem is registered for packet |
RobMeades | 0:5cffef3371f6 | 122 | * switched data, otherwise false. |
RobMeades | 0:5cffef3371f6 | 123 | */ |
RobMeades | 0:5cffef3371f6 | 124 | bool is_registered_psd(); |
RobMeades | 0:5cffef3371f6 | 125 | |
RobMeades | 0:5cffef3371f6 | 126 | /** True if the modem is registered for enhanced |
RobMeades | 0:5cffef3371f6 | 127 | * packet switched data (i.e. LTE and beyond), |
RobMeades | 0:5cffef3371f6 | 128 | * otherwise false. |
RobMeades | 0:5cffef3371f6 | 129 | */ |
RobMeades | 0:5cffef3371f6 | 130 | bool is_registered_eps(); |
RobMeades | 0:5cffef3371f6 | 131 | |
RobMeades | 0:5cffef3371f6 | 132 | /** Perform deregistration from the network. |
RobMeades | 0:5cffef3371f6 | 133 | * |
RobMeades | 0:5cffef3371f6 | 134 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 135 | */ |
RobMeades | 0:5cffef3371f6 | 136 | bool nwk_deregistration(); |
RobMeades | 0:5cffef3371f6 | 137 | |
RobMeades | 0:5cffef3371f6 | 138 | /** Put the modem into its lowest power state. |
RobMeades | 0:5cffef3371f6 | 139 | */ |
RobMeades | 0:5cffef3371f6 | 140 | void deinit(); |
RobMeades | 0:5cffef3371f6 | 141 | |
RobMeades | 0:5cffef3371f6 | 142 | /** Set the PIN code for the SIM card. |
RobMeades | 0:5cffef3371f6 | 143 | * |
RobMeades | 0:5cffef3371f6 | 144 | * @param pin PIN for the SIM card. |
RobMeades | 0:5cffef3371f6 | 145 | */ |
RobMeades | 0:5cffef3371f6 | 146 | void set_pin(const char *pin); |
RobMeades | 0:5cffef3371f6 | 147 | |
RobMeades | 0:5cffef3371f6 | 148 | /** Enable or disable SIM pin checking. |
RobMeades | 0:5cffef3371f6 | 149 | * |
RobMeades | 0:5cffef3371f6 | 150 | * @param enableNotDisable true if SIM PIN checking is to be enabled, |
RobMeades | 0:5cffef3371f6 | 151 | * otherwise false. |
RobMeades | 0:5cffef3371f6 | 152 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 153 | */ |
RobMeades | 0:5cffef3371f6 | 154 | bool sim_pin_check_enable(bool enableNotDisable); |
RobMeades | 0:5cffef3371f6 | 155 | |
RobMeades | 0:5cffef3371f6 | 156 | /** Change the SIM pin. |
RobMeades | 0:5cffef3371f6 | 157 | * |
RobMeades | 0:5cffef3371f6 | 158 | * @param new_pin the new PIN to use. |
RobMeades | 0:5cffef3371f6 | 159 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 160 | */ |
RobMeades | 0:5cffef3371f6 | 161 | bool change_sim_pin(const char *new_pin); |
RobMeades | 0:5cffef3371f6 | 162 | |
fahim alavi |
11:57f64bc518c0 | 163 | /** Get the IMEI. |
fahim alavi |
11:57f64bc518c0 | 164 | * |
fahim alavi |
11:57f64bc518c0 | 165 | * @return true if successful, otherwise false. |
fahim alavi |
11:57f64bc518c0 | 166 | */ |
RobMeades | 14:e420232ee4e7 | 167 | MBED_DEPRECATED("This method is now replaced by const char * imei(), please use that instead") |
fahim alavi |
12:aa3cbc3f88c5 | 168 | bool get_imei(char *imei_to_send, int size); |
fahim alavi |
11:57f64bc518c0 | 169 | |
RobMeades | 14:e420232ee4e7 | 170 | /** Get the IMEI of the module. |
RobMeades | 14:e420232ee4e7 | 171 | * |
RobMeades | 14:e420232ee4e7 | 172 | * @return a pointer to the IMEI as a null-terminated string. |
RobMeades | 14:e420232ee4e7 | 173 | */ |
RobMeades | 14:e420232ee4e7 | 174 | const char *imei(); |
RobMeades | 14:e420232ee4e7 | 175 | |
RobMeades | 14:e420232ee4e7 | 176 | /** Get the Mobile Equipment ID (which may be the same as the IMEI). |
RobMeades | 14:e420232ee4e7 | 177 | * |
RobMeades | 14:e420232ee4e7 | 178 | * @return a pointer to the Mobile Equipment ID as a null-terminated string. |
RobMeades | 14:e420232ee4e7 | 179 | */ |
RobMeades | 14:e420232ee4e7 | 180 | const char *meid(); |
RobMeades | 14:e420232ee4e7 | 181 | |
RobMeades | 14:e420232ee4e7 | 182 | /** Get the IMSI of the SIM. |
RobMeades | 14:e420232ee4e7 | 183 | * |
RobMeades | 14:e420232ee4e7 | 184 | * @return a pointer to the IMSI as a null-terminated string. |
RobMeades | 14:e420232ee4e7 | 185 | */ |
RobMeades | 14:e420232ee4e7 | 186 | const char *imsi(); |
RobMeades | 14:e420232ee4e7 | 187 | |
RobMeades | 14:e420232ee4e7 | 188 | /** Get the ICCID of the SIM. |
RobMeades | 14:e420232ee4e7 | 189 | * |
RobMeades | 14:e420232ee4e7 | 190 | * @return a pointer to the ICCID as a null-terminated string. |
RobMeades | 14:e420232ee4e7 | 191 | */ |
RobMeades | 14:e420232ee4e7 | 192 | const char *iccid(); |
RobMeades | 14:e420232ee4e7 | 193 | |
RobMeades | 14:e420232ee4e7 | 194 | /** Get the RSSI. |
RobMeades | 14:e420232ee4e7 | 195 | * |
RobMeades | 14:e420232ee4e7 | 196 | * @return the RSSI in dBm. If it is not possible to obtain an |
RobMeades | 14:e420232ee4e7 | 197 | * RSSI reading at the time (e.g. because the modem is in |
RobMeades | 14:e420232ee4e7 | 198 | * data mode rather than AT command mode) then 0 is returned. |
RobMeades | 14:e420232ee4e7 | 199 | */ |
RobMeades | 14:e420232ee4e7 | 200 | int rssi(); |
RobMeades | 14:e420232ee4e7 | 201 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 202 | /** RAT values for +URAT command |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 203 | * R412M only supports value 7 (CatM1), 8 (NB1), and 9 (GPRS) |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 204 | */ |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 205 | typedef enum { |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 206 | GSM_GPRS_EGPRS = 0, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 207 | GSM_UMTS = 1, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 208 | UMTS = 2, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 209 | URAT_LTE = 3, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 210 | GSM_UMTS_LTE = 4, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 211 | GSM_LTE = 5, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 212 | UMTS_LTE = 6, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 213 | LTE_CATM1 = 7, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 214 | LTE_CATNB1 = 8, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 215 | GPRS_EGPRS = 9, |
wajahat.abbas@u-blox.com | 22:779971811c46 | 216 | NOT_USED = -1 |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 217 | } RAT; |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 218 | |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 219 | /** Module functionality modes. Ref to section 5.3.3 of UBX-13002752 for details. |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 220 | */ |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 221 | typedef enum { |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 222 | FUNC_MIN = 0, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 223 | FUNC_FULL = 1, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 224 | FUNC_AIRPLANE = 4, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 225 | FUNC_EN_SIM_TLKT_DEDICATED = 6, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 226 | FUNC_DS_SIM_TLKT = 7, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 227 | FUNC_EN_SIM_TLKT_RAW = 9, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 228 | FUNC_RESET = 15, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 229 | FUNC_RESET_WITH_SIM = 16, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 230 | FUNC_MIN_WITH_SIM = 19, |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 231 | FUNC_HALT = 127 |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 232 | } FunctionalityMode; |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 233 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 234 | #ifdef TARGET_UBLOX_C030_R41XM |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 235 | /** Supported MNO profiles for SARA-R4. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 236 | */ |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 237 | typedef enum { |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 238 | SW_DEFAULT = 0, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 239 | SIM_ICCID = 1, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 240 | ATT = 2, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 241 | TMO = 5, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 242 | VODAFONE = 19, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 243 | DT = 31, |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 244 | STANDARD_EU = 100 |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 245 | #ifdef TARGET_UBLOX_C030_R410M |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 246 | , VERIZON = 3, |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 247 | TELSTRA = 4, |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 248 | CT = 6, |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 249 | SPRINT = 8, |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 250 | TELUS = 21 |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 251 | #endif |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 252 | } MNOProfile; |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 253 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 254 | #if MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 255 | #define DEFAULT_MNO_PROFILE (MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 256 | #else |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 257 | #define DEFAULT_MNO_PROFILE SW_DEFAULT |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 258 | #endif |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 259 | |
wajahat.abbas@u-blox.com | 21:98aea8f49cd8 | 260 | /** Reads the current MNO profile from modem and sets it to user specified profile. |
wajahat.abbas@u-blox.com | 21:98aea8f49cd8 | 261 | * User can also specify profile in mbed_lib.json file and call set_mno_profile without any arguments. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 262 | * |
wajahat.abbas@u-blox.com | 21:98aea8f49cd8 | 263 | * Note: MNO profile should only be set in detached state and a reboot is required for settings to take effect |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 264 | * Note 2: ref to UBX-17003787 B.5, setting MNO profile can change other parameters such as PSM, Band mask, URAT etc. |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 265 | * Application must always set a profile first and if required, change parameters afterwards. |
wajahat.abbas@u-blox.com | 21:98aea8f49cd8 | 266 | * @param profile MNO profile to use |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 267 | * @return true if operation was successful, false if there was an error |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 268 | */ |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 269 | bool set_mno_profile(MNOProfile profile = DEFAULT_MNO_PROFILE); |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 270 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 271 | /** Get current MNO profile. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 272 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 273 | * @param profile pointer to variable that can hold the value for returned profile |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 274 | * @return true if operation was successful, false if there was an error |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 275 | */ |
wajahat.abbas@u-blox.com | 22:779971811c46 | 276 | bool get_mno_profile(int *profile); |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 277 | |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 278 | /** Enable or disable the UPSV Power Saving Mode. |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 279 | * |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 280 | * @param idle_mode_value 1: enable idle mode |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 281 | * 0: disable idle mode |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 282 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 283 | */ |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 284 | bool set_idle_mode(bool enable = false); |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 285 | |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 286 | /** Queries the modem for idle mode status. |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 287 | * |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 288 | * @param status pointer to variable that can hold the value for idle mode status |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 289 | * 1: enabled |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 290 | * 0: disabled |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 291 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 292 | */ |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 293 | bool get_idle_mode(int *status); |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 294 | #endif |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 295 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 296 | /** Set Radio Access Technology on modem. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 297 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 298 | * Note: RAT should only be set in detached state and a reboot is required for settings to take effect |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 299 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 300 | * @param selected_rat Radio Access Technology to use |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 301 | * @param preferred_rat Radio Access Technology to use if selected_rat is not available |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 302 | * @param second_preferred_rat Radio Access Technology to use if selected_rat and preferred_rat are not available |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 303 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 304 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 305 | */ |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 306 | bool set_modem_rat(RAT selected_rat, RAT preferred_rat = NOT_USED, RAT second_preferred_rat = NOT_USED); |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 307 | |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 308 | /** Get last saved values for RAT using +URAT read command. Note: The current selected RAT is indicated by DeviceInfo.rat |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 309 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 310 | * @param selected_rat pointer to variable that can hold the value for selected_rat |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 311 | * @param preferred_rat pointer to variable that can hold the value for preferred_rat |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 312 | * @param second_preferred_rat pointer to variable that can hold the value for second_preferred_rat |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 313 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 314 | * Note: NOT_USED will be returned in the variables if dual or tri modes are not enabled. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 315 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 316 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 317 | */ |
wajahat.abbas@u-blox.com | 22:779971811c46 | 318 | bool get_modem_rat(int *selected_rat, int *preferred_rat, int *second_preferred_rat); |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 319 | |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 320 | /** Sets the modem to specified functionality mode. |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 321 | * |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 322 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 323 | */ |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 324 | bool set_functionality_mode(FunctionalityMode mode); |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 325 | |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 326 | /** Get the modem functionality mode |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 327 | * |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 328 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 329 | */ |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 330 | bool get_functionality_mode(int *mode); |
wajahat.abbas@u-blox.com | 24:e26a6ab0dd75 | 331 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 332 | /** reboot the modem using AT+CFUN=15. Application should call init() or connect() before making any other API calls. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 333 | * |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 334 | * @return true if successful, otherwise false. |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 335 | */ |
wajahat.abbas@u-blox.com | 20:31d5e048fbfa | 336 | bool reboot_modem(); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 337 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 338 | #ifdef TARGET_UBLOX_C030_R412M |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 339 | /** Important: Callback function is executed in context of AT parser so a user should not issue any AT commands from inside the callback. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 340 | * It is recommended to set a flag/event/signal in callback and application can use that to wake up the modem and re-initialize it |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 341 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 342 | * application callback for modem going in to PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 343 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 344 | * @param func callback function to be executed when modem is going in to PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 345 | * @param param parameter to be passed to callback function. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 346 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 347 | void attach_cb_psm_going_in(Callback<void(void*)> func, void *param) |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 348 | { |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 349 | _func_psm_going_in = func; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 350 | _cb_param_psm_going_in = param; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 351 | } |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 352 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 353 | /** Important: Callback function is executed in context of AT parser so a user should not issue any AT commands from inside the callback. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 354 | * It is recommended to set a flag/event/signal in callback and application can use that to wake up the modem and re-initialize it |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 355 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 356 | * application callback for modem coming out of PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 357 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 358 | * @param func callback function to be executed when modem is coming out of PSM sleep. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 359 | * @param param parameter to be passed to callback function. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 360 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 361 | void attach_cb_psm_coming_out(Callback<void(void*)> func, void *param) |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 362 | { |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 363 | _func_psm_coming_out = func; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 364 | _cb_param_psm_coming_out = param; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 365 | } |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 366 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 367 | /** de-register the application callback for modem going in to PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 368 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 369 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 370 | void detach_cb_psm_going_in() |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 371 | { |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 372 | _func_psm_going_in = NULL; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 373 | _cb_param_psm_going_in = NULL; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 374 | } |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 375 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 376 | /** de-register application callback for modem coming out of PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 377 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 378 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 379 | void detach_cb_psm_coming_out() |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 380 | { |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 381 | _func_psm_coming_out = NULL; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 382 | _cb_param_psm_coming_out = NULL; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 383 | } |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 384 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 385 | /** Enable or disable the 3GPP PSM. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 386 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 387 | * Note: Application should reboot the module after enabling PSM in order to enter PSM state. (reboot_modem()) |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 388 | * Note: Modem can be woken up by toggling the power-on signal. (wakeup_modem()) |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 389 | * Note: When device enters PSM, all connections(PPP, sockets) and settings that are not saved in NV memory(ATE0, CREG etc) are lost. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 390 | * host application should be prepared to re-initialize the modem and re-establish the connections. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 391 | * Note: PSM is disabled if both periodic_time and active_time are 0. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 392 | * Note: Not all variants/firmware versions support PSM URCs and in that case function will return false. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 393 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 394 | * PSM string encoding code is borrowed from AT_CellularPower.cpp |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 395 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 396 | * @param periodic_time requested periodic TAU in seconds. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 397 | * @param active_time requested active time in seconds. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 398 | * @param func callback function to execute when modem goes to sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 399 | * @param ptr parameter to callback function |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 400 | * @return True if successful, otherwise false. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 401 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 402 | bool set_power_saving_mode(int periodic_tau, int active_time); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 403 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 404 | /** Reads the 3GPP PSM status (enabled or disabled) and returns assigned periodic tau and active time values. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 405 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 406 | * @param status 0: PSM disabled, 1: PSM enabled |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 407 | * @param periodic_tau assigned periodic TAU in seconds. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 408 | * @param active_time assigned active time in seconds |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 409 | * @return True if command successful, otherwise false. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 410 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 411 | bool get_power_saving_mode(int *status, int *periodic_tau, int *active_time); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 412 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 413 | /** Wake up the modem from PSM. Ref to comment on set_power_saving_mode, application should call init() or connect() |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 414 | * before making any other API calls. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 415 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 416 | void wakeup_modem(); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 417 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 418 | /** True if the modem is not in PSM sleep |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 419 | * otherwise false. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 420 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 421 | bool is_modem_awake(); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 422 | #endif |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 423 | |
fahimalavi | 26:e4e444cc7b14 | 424 | #ifdef TARGET_UBLOX_C030_R41XM |
fahimalavi | 26:e4e444cc7b14 | 425 | /** Set discontinuous reception time on cellular device. |
fahimalavi | 26:e4e444cc7b14 | 426 | * SARA-R404M / SARA-R410M-02B / SARA-R410M-52B / SARA-R412M / SARA-N4 : The <Paging_time_window> parameter cannot be set by means of the set command. |
fahimalavi | 26:e4e444cc7b14 | 427 | * |
fahimalavi | 26:e4e444cc7b14 | 428 | * |
fahimalavi | 26:e4e444cc7b14 | 429 | * @remark See 3GPP TS 27.007 eDRX for details. |
fahimalavi | 26:e4e444cc7b14 | 430 | * |
fahimalavi | 26:e4e444cc7b14 | 431 | * @param mode disable or enable the use of eDRX |
fahimalavi | 26:e4e444cc7b14 | 432 | * @param act_type type of access technology |
fahimalavi | 26:e4e444cc7b14 | 433 | * @param edrx_value requested edxr value. Extended DRX parameters information element. |
fahimalavi | 26:e4e444cc7b14 | 434 | * |
fahimalavi | 26:e4e444cc7b14 | 435 | * @return 0 on success |
fahimalavi | 26:e4e444cc7b14 | 436 | * 1 on failure |
fahimalavi | 26:e4e444cc7b14 | 437 | */ |
fahimalavi | 26:e4e444cc7b14 | 438 | int set_receive_period(int mode, tEDRXAccessTechnology act_type, uint8_t edrx_value); |
fahimalavi | 26:e4e444cc7b14 | 439 | |
fahimalavi | 26:e4e444cc7b14 | 440 | /** Set discontinuous reception time on cellular device. |
fahimalavi | 26:e4e444cc7b14 | 441 | * |
fahimalavi | 26:e4e444cc7b14 | 442 | * @remark See 3GPP TS 27.007 eDRX for details. |
fahimalavi | 26:e4e444cc7b14 | 443 | * |
fahimalavi | 26:e4e444cc7b14 | 444 | * @param mode disable or enable the use of eDRX |
fahimalavi | 26:e4e444cc7b14 | 445 | * @param act_type type of access technology |
fahimalavi | 26:e4e444cc7b14 | 446 | * |
fahimalavi | 26:e4e444cc7b14 | 447 | * @return 0 on success |
fahimalavi | 26:e4e444cc7b14 | 448 | * 1 on failure |
fahimalavi | 26:e4e444cc7b14 | 449 | */ |
fahimalavi | 26:e4e444cc7b14 | 450 | int set_receive_period(int mode, tEDRXAccessTechnology act_type); |
fahimalavi | 26:e4e444cc7b14 | 451 | |
fahimalavi | 26:e4e444cc7b14 | 452 | /** Set discontinuous reception time on cellular device. (Disable) |
fahimalavi | 26:e4e444cc7b14 | 453 | * |
fahimalavi | 26:e4e444cc7b14 | 454 | * @remark See 3GPP TS 27.007 eDRX for details. |
fahimalavi | 26:e4e444cc7b14 | 455 | * |
fahimalavi | 26:e4e444cc7b14 | 456 | * @param mode disable or enable the use of eDRX |
fahimalavi | 26:e4e444cc7b14 | 457 | * |
fahimalavi | 26:e4e444cc7b14 | 458 | * @return 0 on success |
fahimalavi | 26:e4e444cc7b14 | 459 | * 1 on failure |
fahimalavi | 26:e4e444cc7b14 | 460 | */ |
fahimalavi | 26:e4e444cc7b14 | 461 | int set_receive_period(int mode); |
fahimalavi | 26:e4e444cc7b14 | 462 | |
fahimalavi | 26:e4e444cc7b14 | 463 | /** get discontinuous reception time on cellular device. |
fahimalavi | 26:e4e444cc7b14 | 464 | * |
fahimalavi | 26:e4e444cc7b14 | 465 | * @remark See 3GPP TS 27.007 eDRX for details. |
fahimalavi | 26:e4e444cc7b14 | 466 | * |
fahimalavi | 26:e4e444cc7b14 | 467 | * @return uint32_t |
fahimalavi | 26:e4e444cc7b14 | 468 | */ |
fahimalavi | 26:e4e444cc7b14 | 469 | uint32_t get_receive_period(); |
fahimalavi | 26:e4e444cc7b14 | 470 | #endif |
fahimalavi | 26:e4e444cc7b14 | 471 | |
RobMeades | 0:5cffef3371f6 | 472 | protected: |
RobMeades | 0:5cffef3371f6 | 473 | |
RobMeades | 0:5cffef3371f6 | 474 | #define OUTPUT_ENTER_KEY "\r" |
RobMeades | 0:5cffef3371f6 | 475 | |
RobMeades | 0:5cffef3371f6 | 476 | #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE |
RobMeades | 0:5cffef3371f6 | 477 | #define AT_PARSER_BUFFER_SIZE MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE |
RobMeades | 0:5cffef3371f6 | 478 | #else |
RobMeades | 0:5cffef3371f6 | 479 | #define AT_PARSER_BUFFER_SIZE 256 |
RobMeades | 0:5cffef3371f6 | 480 | #endif |
RobMeades | 0:5cffef3371f6 | 481 | |
RobMeades | 0:5cffef3371f6 | 482 | #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT |
RobMeades | 0:5cffef3371f6 | 483 | #define AT_PARSER_TIMEOUT MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT |
RobMeades | 0:5cffef3371f6 | 484 | #else |
RobMeades | 0:5cffef3371f6 | 485 | #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds |
RobMeades | 0:5cffef3371f6 | 486 | #endif |
RobMeades | 0:5cffef3371f6 | 487 | |
RobMeades | 0:5cffef3371f6 | 488 | /** A string that would not normally be sent by the modem on the AT interface. |
RobMeades | 0:5cffef3371f6 | 489 | */ |
RobMeades | 0:5cffef3371f6 | 490 | #define UNNATURAL_STRING "\x01" |
RobMeades | 0:5cffef3371f6 | 491 | |
RobMeades | 0:5cffef3371f6 | 492 | /** Supported u-blox modem variants. |
RobMeades | 0:5cffef3371f6 | 493 | */ |
RobMeades | 0:5cffef3371f6 | 494 | typedef enum { |
RobMeades | 0:5cffef3371f6 | 495 | DEV_TYPE_NONE = 0, |
RobMeades | 0:5cffef3371f6 | 496 | DEV_SARA_G35, |
RobMeades | 0:5cffef3371f6 | 497 | DEV_LISA_U2, |
RobMeades | 0:5cffef3371f6 | 498 | DEV_LISA_U2_03S, |
RobMeades | 0:5cffef3371f6 | 499 | DEV_SARA_U2, |
fahim alavi |
11:57f64bc518c0 | 500 | DEV_SARA_R4, |
RobMeades | 0:5cffef3371f6 | 501 | DEV_LEON_G2, |
RobMeades | 0:5cffef3371f6 | 502 | DEV_TOBY_L2, |
RobMeades | 0:5cffef3371f6 | 503 | DEV_MPCI_L2 |
RobMeades | 0:5cffef3371f6 | 504 | } DeviceType; |
RobMeades | 0:5cffef3371f6 | 505 | |
RobMeades | 0:5cffef3371f6 | 506 | /** Network registration status. |
RobMeades | 0:5cffef3371f6 | 507 | * UBX-13001820 - AT Commands Example Application Note (Section 4.1.4.5). |
RobMeades | 0:5cffef3371f6 | 508 | */ |
RobMeades | 0:5cffef3371f6 | 509 | typedef enum { |
RobMeades | 0:5cffef3371f6 | 510 | GSM = 0, |
RobMeades | 0:5cffef3371f6 | 511 | COMPACT_GSM = 1, |
RobMeades | 0:5cffef3371f6 | 512 | UTRAN = 2, |
RobMeades | 0:5cffef3371f6 | 513 | EDGE = 3, |
RobMeades | 0:5cffef3371f6 | 514 | HSDPA = 4, |
RobMeades | 0:5cffef3371f6 | 515 | HSUPA = 5, |
RobMeades | 0:5cffef3371f6 | 516 | HSDPA_HSUPA = 6, |
fahimalavi | 10:c4281fa79b8f | 517 | LTE = 7, |
fahim alavi |
12:aa3cbc3f88c5 | 518 | EC_GSM_IoT = 8, |
fahim alavi |
12:aa3cbc3f88c5 | 519 | E_UTRAN_NB_S1 = 9 |
RobMeades | 0:5cffef3371f6 | 520 | } RadioAccessNetworkType; |
RobMeades | 0:5cffef3371f6 | 521 | |
RobMeades | 0:5cffef3371f6 | 522 | /** Info about the modem. |
RobMeades | 0:5cffef3371f6 | 523 | */ |
RobMeades | 0:5cffef3371f6 | 524 | typedef struct { |
RobMeades | 0:5cffef3371f6 | 525 | DeviceType dev; |
RobMeades | 0:5cffef3371f6 | 526 | char iccid[20 + 1]; //!< Integrated Circuit Card ID. |
RobMeades | 0:5cffef3371f6 | 527 | char imsi[15 + 1]; //!< International Mobile Station Identity. |
RobMeades | 0:5cffef3371f6 | 528 | char imei[15 + 1]; //!< International Mobile Equipment Identity. |
RobMeades | 0:5cffef3371f6 | 529 | char meid[18 + 1]; //!< Mobile Equipment IDentifier. |
RobMeades | 0:5cffef3371f6 | 530 | volatile RadioAccessNetworkType rat; //!< Type of network (e.g. 2G, 3G, LTE). |
RobMeades | 0:5cffef3371f6 | 531 | volatile NetworkRegistrationStatusCsd reg_status_csd; //!< Circuit switched attach status. |
RobMeades | 0:5cffef3371f6 | 532 | volatile NetworkRegistrationStatusPsd reg_status_psd; //!< Packet switched attach status. |
RobMeades | 0:5cffef3371f6 | 533 | volatile NetworkRegistrationStatusEps reg_status_eps; //!< Evolved Packet Switched (e.g. LTE) attach status. |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 534 | #ifdef TARGET_UBLOX_C030_R412M |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 535 | volatile ModemPSMState modem_psm_state; //!< last known modem PSM state |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 536 | #endif |
RobMeades | 0:5cffef3371f6 | 537 | } DeviceInfo; |
RobMeades | 0:5cffef3371f6 | 538 | |
RobMeades | 0:5cffef3371f6 | 539 | /* IMPORTANT: the variables below are available to |
RobMeades | 0:5cffef3371f6 | 540 | * classes that inherit this in order to keep things |
RobMeades | 0:5cffef3371f6 | 541 | * simple. However, ONLY this class should free |
RobMeades | 0:5cffef3371f6 | 542 | * any of the pointers, or there will be havoc. |
RobMeades | 0:5cffef3371f6 | 543 | */ |
RobMeades | 0:5cffef3371f6 | 544 | |
RobMeades | 0:5cffef3371f6 | 545 | /** Point to the instance of the AT parser in use. |
RobMeades | 0:5cffef3371f6 | 546 | */ |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 547 | #ifdef TARGET_UBLOX_C030_R41XM |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 548 | UbloxATCmdParser *_at; |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 549 | #else |
RobMeades | 0:5cffef3371f6 | 550 | ATCmdParser *_at; |
wajahat.abbas@u-blox.com | 25:e67d3d9d2e7e | 551 | #endif |
RobMeades | 0:5cffef3371f6 | 552 | |
RobMeades | 0:5cffef3371f6 | 553 | /** The current AT parser timeout value. |
RobMeades | 0:5cffef3371f6 | 554 | */ |
RobMeades | 0:5cffef3371f6 | 555 | int _at_timeout; |
RobMeades | 0:5cffef3371f6 | 556 | |
RobMeades | 0:5cffef3371f6 | 557 | /** File handle used by the AT parser. |
RobMeades | 0:5cffef3371f6 | 558 | */ |
RobMeades | 0:5cffef3371f6 | 559 | FileHandle *_fh; |
RobMeades | 0:5cffef3371f6 | 560 | |
RobMeades | 0:5cffef3371f6 | 561 | /** The mutex resource. |
RobMeades | 0:5cffef3371f6 | 562 | */ |
RobMeades | 0:5cffef3371f6 | 563 | Mutex _mtx; |
RobMeades | 0:5cffef3371f6 | 564 | |
RobMeades | 0:5cffef3371f6 | 565 | /** General info about the modem as a device. |
RobMeades | 0:5cffef3371f6 | 566 | */ |
RobMeades | 0:5cffef3371f6 | 567 | DeviceInfo _dev_info; |
RobMeades | 0:5cffef3371f6 | 568 | |
RobMeades | 0:5cffef3371f6 | 569 | /** The SIM PIN to use. |
RobMeades | 0:5cffef3371f6 | 570 | */ |
RobMeades | 0:5cffef3371f6 | 571 | const char *_pin; |
RobMeades | 0:5cffef3371f6 | 572 | |
RobMeades | 0:5cffef3371f6 | 573 | /** Set to true to spit out debug traces. |
RobMeades | 0:5cffef3371f6 | 574 | */ |
RobMeades | 0:5cffef3371f6 | 575 | bool _debug_trace_on; |
rob.meades@u-blox.com | 4:2e640a101db1 | 576 | |
rob.meades@u-blox.com | 4:2e640a101db1 | 577 | /** The baud rate to the modem. |
rob.meades@u-blox.com | 4:2e640a101db1 | 578 | */ |
rob.meades@u-blox.com | 4:2e640a101db1 | 579 | int _baud; |
RobMeades | 0:5cffef3371f6 | 580 | |
RobMeades | 0:5cffef3371f6 | 581 | /** True if the modem is ready register to the network, |
RobMeades | 0:5cffef3371f6 | 582 | * otherwise false. |
RobMeades | 0:5cffef3371f6 | 583 | */ |
RobMeades | 0:5cffef3371f6 | 584 | bool _modem_initialised; |
RobMeades | 0:5cffef3371f6 | 585 | |
RobMeades | 0:5cffef3371f6 | 586 | /** True it the SIM requires a PIN, otherwise false. |
RobMeades | 0:5cffef3371f6 | 587 | */ |
RobMeades | 0:5cffef3371f6 | 588 | bool _sim_pin_check_enabled; |
RobMeades | 0:5cffef3371f6 | 589 | |
RobMeades | 0:5cffef3371f6 | 590 | /** Sets the modem up for powering on |
RobMeades | 0:5cffef3371f6 | 591 | * |
RobMeades | 0:5cffef3371f6 | 592 | * modem_init() is equivalent to plugging in the device, e.g., attaching power and serial port. |
RobMeades | 0:5cffef3371f6 | 593 | * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. |
RobMeades | 0:5cffef3371f6 | 594 | */ |
RobMeades | 0:5cffef3371f6 | 595 | virtual void modem_init(); |
RobMeades | 0:5cffef3371f6 | 596 | |
RobMeades | 0:5cffef3371f6 | 597 | /** Sets the modem in unplugged state |
RobMeades | 0:5cffef3371f6 | 598 | * |
RobMeades | 0:5cffef3371f6 | 599 | * modem_deinit() will be equivalent to pulling the plug off of the device, i.e., detaching power |
RobMeades | 0:5cffef3371f6 | 600 | * and serial port. This puts the modem in lowest power state. |
RobMeades | 0:5cffef3371f6 | 601 | * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. |
RobMeades | 0:5cffef3371f6 | 602 | */ |
RobMeades | 0:5cffef3371f6 | 603 | virtual void modem_deinit(); |
RobMeades | 0:5cffef3371f6 | 604 | |
RobMeades | 0:5cffef3371f6 | 605 | /** Powers up the modem |
RobMeades | 0:5cffef3371f6 | 606 | * |
RobMeades | 0:5cffef3371f6 | 607 | * modem_power_up() is equivalent to pressing the soft power button. |
RobMeades | 0:5cffef3371f6 | 608 | * The driver may repeat this if the modem is not responsive to AT commands. |
RobMeades | 0:5cffef3371f6 | 609 | * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. |
RobMeades | 0:5cffef3371f6 | 610 | */ |
RobMeades | 0:5cffef3371f6 | 611 | virtual void modem_power_up(); |
RobMeades | 0:5cffef3371f6 | 612 | |
RobMeades | 0:5cffef3371f6 | 613 | /** Powers down the modem |
RobMeades | 0:5cffef3371f6 | 614 | * |
RobMeades | 0:5cffef3371f6 | 615 | * modem_power_down() is equivalent to turning off the modem by button press. |
RobMeades | 0:5cffef3371f6 | 616 | * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. |
RobMeades | 0:5cffef3371f6 | 617 | */ |
RobMeades | 0:5cffef3371f6 | 618 | virtual void modem_power_down(); |
RobMeades | 0:5cffef3371f6 | 619 | |
RobMeades | 0:5cffef3371f6 | 620 | /* Note: constructor and destructor protected so that this |
RobMeades | 0:5cffef3371f6 | 621 | * class can only ever be inherited, never used directly. |
RobMeades | 0:5cffef3371f6 | 622 | */ |
RobMeades | 0:5cffef3371f6 | 623 | UbloxCellularBase(); |
RobMeades | 0:5cffef3371f6 | 624 | ~UbloxCellularBase(); |
RobMeades | 0:5cffef3371f6 | 625 | |
RobMeades | 0:5cffef3371f6 | 626 | /** Initialise this class. |
RobMeades | 0:5cffef3371f6 | 627 | * |
RobMeades | 0:5cffef3371f6 | 628 | * @param tx the UART TX data pin to which the modem is attached. |
RobMeades | 0:5cffef3371f6 | 629 | * @param rx the UART RX data pin to which the modem is attached. |
RobMeades | 0:5cffef3371f6 | 630 | * @param baud the UART baud rate. |
RobMeades | 0:5cffef3371f6 | 631 | * @param debug_on true to switch AT interface debug on, otherwise false. |
RobMeades | 0:5cffef3371f6 | 632 | * |
RobMeades | 0:5cffef3371f6 | 633 | * Note: it would be more natural to do this in the constructor |
RobMeades | 0:5cffef3371f6 | 634 | * however, to avoid the diamond of death, this class is only |
RobMeades | 0:5cffef3371f6 | 635 | * every inherited virtually. Classes that are inherited virtually |
RobMeades | 0:5cffef3371f6 | 636 | * do not get passed parameters in their constructor and hence |
RobMeades | 0:5cffef3371f6 | 637 | * classInit() must be called separately by the first one to wake |
RobMeades | 0:5cffef3371f6 | 638 | * the beast. |
RobMeades | 0:5cffef3371f6 | 639 | */ |
RobMeades | 0:5cffef3371f6 | 640 | void baseClassInit(PinName tx = MDMTXD, |
RobMeades | 0:5cffef3371f6 | 641 | PinName rx = MDMRXD, |
RobMeades | 0:5cffef3371f6 | 642 | int baud = MBED_CONF_UBLOX_CELL_BAUD_RATE, |
RobMeades | 0:5cffef3371f6 | 643 | bool debug_on = false); |
RobMeades | 0:5cffef3371f6 | 644 | |
RobMeades | 0:5cffef3371f6 | 645 | /** Set the AT parser timeout. |
RobMeades | 0:5cffef3371f6 | 646 | */ |
RobMeades | 0:5cffef3371f6 | 647 | void at_set_timeout(int timeout); |
RobMeades | 0:5cffef3371f6 | 648 | |
RobMeades | 0:5cffef3371f6 | 649 | /** Read up to size characters from buf |
RobMeades | 0:5cffef3371f6 | 650 | * or until the character "end" is reached, overwriting |
RobMeades | 0:5cffef3371f6 | 651 | * the newline with 0 and ensuring a terminator |
RobMeades | 0:5cffef3371f6 | 652 | * in all cases. |
RobMeades | 0:5cffef3371f6 | 653 | * |
RobMeades | 0:5cffef3371f6 | 654 | * @param buf the buffer to write to. |
RobMeades | 0:5cffef3371f6 | 655 | * @param size the size of the buffer. |
RobMeades | 0:5cffef3371f6 | 656 | * @param end the character to stop at. |
RobMeades | 0:5cffef3371f6 | 657 | * @return the number of characters read, |
RobMeades | 0:5cffef3371f6 | 658 | * not including the terminator. |
RobMeades | 0:5cffef3371f6 | 659 | */ |
RobMeades | 0:5cffef3371f6 | 660 | int read_at_to_char(char * buf, int size, char end); |
RobMeades | 0:5cffef3371f6 | 661 | |
RobMeades | 0:5cffef3371f6 | 662 | /** Powers up the modem. |
RobMeades | 0:5cffef3371f6 | 663 | * |
RobMeades | 0:5cffef3371f6 | 664 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 665 | */ |
RobMeades | 0:5cffef3371f6 | 666 | bool power_up(); |
RobMeades | 0:5cffef3371f6 | 667 | |
RobMeades | 0:5cffef3371f6 | 668 | /** Power down the modem. |
RobMeades | 0:5cffef3371f6 | 669 | */ |
RobMeades | 0:5cffef3371f6 | 670 | void power_down(); |
RobMeades | 0:5cffef3371f6 | 671 | |
RobMeades | 0:5cffef3371f6 | 672 | /** Lock a mutex when accessing the modem. |
RobMeades | 0:5cffef3371f6 | 673 | */ |
RobMeades | 0:5cffef3371f6 | 674 | void lock(void) { _mtx.lock(); } |
RobMeades | 0:5cffef3371f6 | 675 | |
RobMeades | 0:5cffef3371f6 | 676 | /** Helper to make sure that lock unlock pair is always balanced |
RobMeades | 0:5cffef3371f6 | 677 | */ |
RobMeades | 0:5cffef3371f6 | 678 | #define LOCK() { lock() |
RobMeades | 0:5cffef3371f6 | 679 | |
RobMeades | 0:5cffef3371f6 | 680 | /** Unlock the modem when done accessing it. |
RobMeades | 0:5cffef3371f6 | 681 | */ |
RobMeades | 0:5cffef3371f6 | 682 | void unlock(void) { _mtx.unlock(); } |
RobMeades | 0:5cffef3371f6 | 683 | |
RobMeades | 0:5cffef3371f6 | 684 | /** Helper to make sure that lock unlock pair is always balanced |
RobMeades | 0:5cffef3371f6 | 685 | */ |
RobMeades | 0:5cffef3371f6 | 686 | #define UNLOCK() } unlock() |
RobMeades | 0:5cffef3371f6 | 687 | |
RobMeades | 0:5cffef3371f6 | 688 | /** Set the device identity in _dev_info |
RobMeades | 0:5cffef3371f6 | 689 | * based on the ATI string returned by |
RobMeades | 0:5cffef3371f6 | 690 | * the module. |
RobMeades | 0:5cffef3371f6 | 691 | * |
RobMeades | 0:5cffef3371f6 | 692 | * @return true if dev is a known value, |
RobMeades | 0:5cffef3371f6 | 693 | * otherwise false. |
RobMeades | 0:5cffef3371f6 | 694 | */ |
RobMeades | 0:5cffef3371f6 | 695 | bool set_device_identity(DeviceType *dev); |
RobMeades | 0:5cffef3371f6 | 696 | |
RobMeades | 0:5cffef3371f6 | 697 | /** Perform any modem initialisation that is |
RobMeades | 0:5cffef3371f6 | 698 | * specialised by device type. |
RobMeades | 0:5cffef3371f6 | 699 | * |
RobMeades | 0:5cffef3371f6 | 700 | * @return true if successful, otherwise false. |
RobMeades | 0:5cffef3371f6 | 701 | */ |
RobMeades | 0:5cffef3371f6 | 702 | bool device_init(DeviceType dev); |
RobMeades | 0:5cffef3371f6 | 703 | |
RobMeades | 0:5cffef3371f6 | 704 | /** Set up the SIM. |
RobMeades | 0:5cffef3371f6 | 705 | * |
RobMeades | 0:5cffef3371f6 | 706 | * @return true if successful, otherwiss false. |
RobMeades | 0:5cffef3371f6 | 707 | */ |
RobMeades | 0:5cffef3371f6 | 708 | bool initialise_sim_card(); |
RobMeades | 0:5cffef3371f6 | 709 | |
wajahat.abbas@u-blox.com | 29:8a38f91009ad | 710 | #ifdef TARGET_UBLOX_C030_R41XM |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 711 | /** Converts the given uint to binary string. Fills the given str starting from [0] with the number of bits defined by bit_cnt |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 712 | * For example uint_to_binary_string(9, str, 10) would fill str "0000001001" |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 713 | * For example uint_to_binary_string(9, str, 3) would fill str "001" |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 714 | * |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 715 | * @param num uint to converts to binary string |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 716 | * @param str buffer for converted binary string |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 717 | * @param str_size size of the str buffer |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 718 | * @param bit_cnt defines how many bits are filled to buffer started from lsb |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 719 | */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 720 | void uint_to_binary_str(uint32_t num, char* str, int str_size, int bit_cnt); |
fahimalavi | 26:e4e444cc7b14 | 721 | |
fahimalavi | 26:e4e444cc7b14 | 722 | /** Converts the given binary string to uint. |
fahimalavi | 26:e4e444cc7b14 | 723 | * For example binary_str_to_uint("0000001001", 10) would return 9 |
fahimalavi | 26:e4e444cc7b14 | 724 | * |
fahimalavi | 26:e4e444cc7b14 | 725 | * @param binary_string binary string from where chars are converted to uint |
fahimalavi | 26:e4e444cc7b14 | 726 | * @param binary_string_length length of the param binary_string |
fahimalavi | 26:e4e444cc7b14 | 727 | * @return uint represented by the binary string |
fahimalavi | 26:e4e444cc7b14 | 728 | */ |
fahimalavi | 26:e4e444cc7b14 | 729 | uint32_t binary_str_to_uint(const char *binary_string, int binary_string_length); |
fahimalavi | 26:e4e444cc7b14 | 730 | |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 731 | #endif |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 732 | |
RobMeades | 0:5cffef3371f6 | 733 | private: |
RobMeades | 0:5cffef3371f6 | 734 | |
RobMeades | 0:5cffef3371f6 | 735 | void set_nwk_reg_status_csd(int status); |
RobMeades | 0:5cffef3371f6 | 736 | void set_nwk_reg_status_psd(int status); |
RobMeades | 0:5cffef3371f6 | 737 | void set_nwk_reg_status_eps(int status); |
RobMeades | 0:5cffef3371f6 | 738 | void set_rat(int AcTStatus); |
RobMeades | 0:5cffef3371f6 | 739 | bool get_iccid(); |
RobMeades | 0:5cffef3371f6 | 740 | bool get_imsi(); |
RobMeades | 0:5cffef3371f6 | 741 | bool get_imei(); |
RobMeades | 0:5cffef3371f6 | 742 | bool get_meid(); |
RobMeades | 0:5cffef3371f6 | 743 | bool set_sms(); |
RobMeades | 0:5cffef3371f6 | 744 | void parser_abort_cb(); |
RobMeades | 0:5cffef3371f6 | 745 | void CMX_ERROR_URC(); |
RobMeades | 0:5cffef3371f6 | 746 | void CREG_URC(); |
RobMeades | 0:5cffef3371f6 | 747 | void CGREG_URC(); |
RobMeades | 0:5cffef3371f6 | 748 | void CEREG_URC(); |
RobMeades | 0:5cffef3371f6 | 749 | void UMWI_URC(); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 750 | #ifdef TARGET_UBLOX_C030_R412M |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 751 | void UUPSMR_URC(); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 752 | bool _psm_status; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 753 | void *_cb_param_psm_going_in; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 754 | Callback<void(void*)> _func_psm_going_in; /**< Callback. */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 755 | void *_cb_param_psm_coming_out; |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 756 | Callback<void(void*)> _func_psm_coming_out; /**< Callback. */ |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 757 | void set_modem_psm_state(int state); |
wajahat.abbas@u-blox.com | 23:eaab8e812a5d | 758 | #endif |
fahimalavi | 26:e4e444cc7b14 | 759 | #ifdef TARGET_UBLOX_C030_R41XM |
fahimalavi | 26:e4e444cc7b14 | 760 | bool _edrx_configured; |
fahimalavi | 26:e4e444cc7b14 | 761 | #endif |
RobMeades | 0:5cffef3371f6 | 762 | }; |
RobMeades | 0:5cffef3371f6 | 763 | |
rob.meades@u-blox.com | 1:5aaecf2572dc | 764 | #endif // _UBLOX_CELLULAR_BASE_ |
RobMeades | 0:5cffef3371f6 | 765 |