Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
UbloxCellularBase.h
00001 /* Copyright (c) 2019 ARM Limited 00002 * 00003 * Licensed under the Apache License, Version 2.0 (the "License"); 00004 * you may not use this file except in compliance with the License. 00005 * You may obtain a copy of the License at 00006 * 00007 * http://www.apache.org/licenses/LICENSE-2.0 00008 * 00009 * Unless required by applicable law or agreed to in writing, software 00010 * distributed under the License is distributed on an "AS IS" BASIS, 00011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00012 * See the License for the specific language governing permissions and 00013 * limitations under the License. 00014 */ 00015 00016 #ifndef _UBLOX_CELLULAR_BASE_ 00017 #define _UBLOX_CELLULAR_BASE_ 00018 00019 #include "mbed.h" 00020 #include "mbed_toolchain.h" // for MBED_DEPRECATED 00021 #include "ubloxATCmdParser.h" 00022 #include "FileHandle.h" 00023 00024 #ifdef TARGET_UBLOX_C030_R410M 00025 #define MAX_NUM_PROFILES 12 //ref to enum MNOProfile 00026 #elif TARGET_UBLOX_C030_R412M 00027 #define MAX_NUM_PROFILES 7 00028 #endif 00029 00030 /********************************************************************** 00031 * CLASSES 00032 **********************************************************************/ 00033 00034 /** UbloxCellularBase class. 00035 * 00036 * This class provides all the base support for generic u-blox modems 00037 * on C030 and C027 boards: module identification, power-up, network 00038 * registration, etc. 00039 */ 00040 class UbloxCellularBase { 00041 00042 public: 00043 /** Circuit Switched network registration status (CREG Usage). 00044 * UBX-13001820 - AT Commands Example Application Note (Section 7.10.3). 00045 */ 00046 typedef enum { 00047 CSD_NOT_REGISTERED_NOT_SEARCHING = 0, 00048 CSD_REGISTERED = 1, 00049 CSD_NOT_REGISTERED_SEARCHING = 2, 00050 CSD_REGISTRATION_DENIED = 3, 00051 CSD_UNKNOWN_COVERAGE = 4, 00052 CSD_REGISTERED_ROAMING = 5, 00053 CSD_SMS_ONLY = 6, 00054 CSD_SMS_ONLY_ROAMING = 7, 00055 CSD_CSFB_NOT_PREFERRED = 9 00056 } NetworkRegistrationStatusCsd; 00057 00058 /** Packet Switched network registration status (CGREG Usage). 00059 * UBX-13001820 - AT Commands Example Application Note (Section 18.27.3). 00060 */ 00061 typedef enum { 00062 PSD_NOT_REGISTERED_NOT_SEARCHING = 0, 00063 PSD_REGISTERED = 1, 00064 PSD_NOT_REGISTERED_SEARCHING = 2, 00065 PSD_REGISTRATION_DENIED = 3, 00066 PSD_UNKNOWN_COVERAGE = 4, 00067 PSD_REGISTERED_ROAMING = 5, 00068 PSD_EMERGENCY_SERVICES_ONLY = 8 00069 } NetworkRegistrationStatusPsd; 00070 00071 /** EPS network registration status (CEREG Usage). 00072 * UBX-13001820 - AT Commands Example Application Note (Section 18.36.3). 00073 */ 00074 typedef enum { 00075 EPS_NOT_REGISTERED_NOT_SEARCHING = 0, 00076 EPS_REGISTERED = 1, 00077 EPS_NOT_REGISTERED_SEARCHING = 2, 00078 EPS_REGISTRATION_DENIED = 3, 00079 EPS_UNKNOWN_COVERAGE = 4, 00080 EPS_REGISTERED_ROAMING = 5, 00081 EPS_EMERGENCY_SERVICES_ONLY = 8 00082 } NetworkRegistrationStatusEps; 00083 00084 /** modem PSM states. 00085 * 00086 */ 00087 typedef enum { 00088 AWAKE = 0, 00089 ASLEEP = 1 00090 } ModemPSMState; 00091 00092 /** 00093 * edrx access technology 00094 */ 00095 typedef enum { 00096 EDRXGSM_EC_GSM_IoT_mode = 1, 00097 EDRXGSM_A_Gb_mode, 00098 EDRXUTRAN_Iu_mode, 00099 EDRXEUTRAN_WB_S1_mode, 00100 EDRXEUTRAN_NB_S1_mode 00101 }tEDRXAccessTechnology; 00102 00103 /** Initialise the modem, ready for use. 00104 * 00105 * @param pin PIN for the SIM card. 00106 * @return true if successful, otherwise false. 00107 */ 00108 bool init(const char *pin = 0); 00109 00110 /** Perform registration with the network. 00111 * 00112 * @return true if successful, otherwise false. 00113 */ 00114 bool nwk_registration(); 00115 00116 /** True if the modem is registered for circuit 00117 * switched data, otherwise false. 00118 */ 00119 bool is_registered_csd(); 00120 00121 /** True if the modem is registered for packet 00122 * switched data, otherwise false. 00123 */ 00124 bool is_registered_psd(); 00125 00126 /** True if the modem is registered for enhanced 00127 * packet switched data (i.e. LTE and beyond), 00128 * otherwise false. 00129 */ 00130 bool is_registered_eps(); 00131 00132 /** Perform deregistration from the network. 00133 * 00134 * @return true if successful, otherwise false. 00135 */ 00136 bool nwk_deregistration(); 00137 00138 /** Put the modem into its lowest power state. 00139 */ 00140 void deinit(); 00141 00142 /** Set the PIN code for the SIM card. 00143 * 00144 * @param pin PIN for the SIM card. 00145 */ 00146 void set_pin(const char *pin); 00147 00148 /** Enable or disable SIM pin checking. 00149 * 00150 * @param enableNotDisable true if SIM PIN checking is to be enabled, 00151 * otherwise false. 00152 * @return true if successful, otherwise false. 00153 */ 00154 bool sim_pin_check_enable(bool enableNotDisable); 00155 00156 /** Change the SIM pin. 00157 * 00158 * @param new_pin the new PIN to use. 00159 * @return true if successful, otherwise false. 00160 */ 00161 bool change_sim_pin(const char *new_pin); 00162 00163 /** Get the IMEI. 00164 * 00165 * @return true if successful, otherwise false. 00166 */ 00167 MBED_DEPRECATED("This method is now replaced by const char * imei(), please use that instead") 00168 bool get_imei(char *imei_to_send, int size); 00169 00170 /** Get the IMEI of the module. 00171 * 00172 * @return a pointer to the IMEI as a null-terminated string. 00173 */ 00174 const char *imei(); 00175 00176 /** Get the Mobile Equipment ID (which may be the same as the IMEI). 00177 * 00178 * @return a pointer to the Mobile Equipment ID as a null-terminated string. 00179 */ 00180 const char *meid(); 00181 00182 /** Get the IMSI of the SIM. 00183 * 00184 * @return a pointer to the IMSI as a null-terminated string. 00185 */ 00186 const char *imsi(); 00187 00188 /** Get the ICCID of the SIM. 00189 * 00190 * @return a pointer to the ICCID as a null-terminated string. 00191 */ 00192 const char *iccid(); 00193 00194 /** Get the RSSI. 00195 * 00196 * @return the RSSI in dBm. If it is not possible to obtain an 00197 * RSSI reading at the time (e.g. because the modem is in 00198 * data mode rather than AT command mode) then 0 is returned. 00199 */ 00200 int rssi(); 00201 00202 /** RAT values for +URAT command 00203 * R412M only supports value 7 (CatM1), 8 (NB1), and 9 (GPRS) 00204 */ 00205 typedef enum { 00206 GSM_GPRS_EGPRS = 0, 00207 GSM_UMTS = 1, 00208 UMTS = 2, 00209 URAT_LTE = 3, 00210 GSM_UMTS_LTE = 4, 00211 GSM_LTE = 5, 00212 UMTS_LTE = 6, 00213 LTE_CATM1 = 7, 00214 LTE_CATNB1 = 8, 00215 GPRS_EGPRS = 9, 00216 NOT_USED = -1 00217 } RAT; 00218 00219 /** Module functionality modes. Ref to section 5.3.3 of UBX-13002752 for details. 00220 */ 00221 typedef enum { 00222 FUNC_MIN = 0, 00223 FUNC_FULL = 1, 00224 FUNC_AIRPLANE = 4, 00225 FUNC_EN_SIM_TLKT_DEDICATED = 6, 00226 FUNC_DS_SIM_TLKT = 7, 00227 FUNC_EN_SIM_TLKT_RAW = 9, 00228 FUNC_RESET = 15, 00229 FUNC_RESET_WITH_SIM = 16, 00230 FUNC_MIN_WITH_SIM = 19, 00231 FUNC_HALT = 127 00232 } FunctionalityMode; 00233 00234 #ifdef TARGET_UBLOX_C030_R41XM 00235 /** Supported MNO profiles for SARA-R4. 00236 */ 00237 typedef enum { 00238 SW_DEFAULT = 0, 00239 SIM_ICCID = 1, 00240 ATT = 2, 00241 TMO = 5, 00242 VODAFONE = 19, 00243 DT = 31, 00244 STANDARD_EU = 100 00245 #ifdef TARGET_UBLOX_C030_R410M 00246 , VERIZON = 3, 00247 TELSTRA = 4, 00248 CT = 6, 00249 SPRINT = 8, 00250 TELUS = 21 00251 #endif 00252 } MNOProfile; 00253 00254 #if MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE 00255 #define DEFAULT_MNO_PROFILE (MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE 00256 #else 00257 #define DEFAULT_MNO_PROFILE SW_DEFAULT 00258 #endif 00259 00260 /** Reads the current MNO profile from modem and sets it to user specified profile. 00261 * User can also specify profile in mbed_lib.json file and call set_mno_profile without any arguments. 00262 * 00263 * Note: MNO profile should only be set in detached state and a reboot is required for settings to take effect 00264 * Note 2: ref to UBX-17003787 B.5, setting MNO profile can change other parameters such as PSM, Band mask, URAT etc. 00265 * Application must always set a profile first and if required, change parameters afterwards. 00266 * @param profile MNO profile to use 00267 * @return true if operation was successful, false if there was an error 00268 */ 00269 bool set_mno_profile(MNOProfile profile = DEFAULT_MNO_PROFILE); 00270 00271 /** Get current MNO profile. 00272 * 00273 * @param profile pointer to variable that can hold the value for returned profile 00274 * @return true if operation was successful, false if there was an error 00275 */ 00276 bool get_mno_profile(int *profile); 00277 00278 /** Enable or disable the UPSV Power Saving Mode. 00279 * 00280 * @param idle_mode_value 1: enable idle mode 00281 * 0: disable idle mode 00282 * @return true if successful, otherwise false. 00283 */ 00284 bool set_idle_mode(bool enable = false); 00285 00286 /** Queries the modem for idle mode status. 00287 * 00288 * @param status pointer to variable that can hold the value for idle mode status 00289 * 1: enabled 00290 * 0: disabled 00291 * @return true if successful, otherwise false. 00292 */ 00293 bool get_idle_mode(int *status); 00294 #endif 00295 00296 /** Set Radio Access Technology on modem. 00297 * 00298 * Note: RAT should only be set in detached state and a reboot is required for settings to take effect 00299 * 00300 * @param selected_rat Radio Access Technology to use 00301 * @param preferred_rat Radio Access Technology to use if selected_rat is not available 00302 * @param second_preferred_rat Radio Access Technology to use if selected_rat and preferred_rat are not available 00303 * 00304 * @return true if successful, otherwise false. 00305 */ 00306 bool set_modem_rat(RAT selected_rat, RAT preferred_rat = NOT_USED, RAT second_preferred_rat = NOT_USED); 00307 00308 /** Get last saved values for RAT using +URAT read command. Note: The current selected RAT is indicated by DeviceInfo.rat 00309 * 00310 * @param selected_rat pointer to variable that can hold the value for selected_rat 00311 * @param preferred_rat pointer to variable that can hold the value for preferred_rat 00312 * @param second_preferred_rat pointer to variable that can hold the value for second_preferred_rat 00313 * 00314 * Note: NOT_USED will be returned in the variables if dual or tri modes are not enabled. 00315 * 00316 * @return true if successful, otherwise false. 00317 */ 00318 bool get_modem_rat(int *selected_rat, int *preferred_rat, int *second_preferred_rat); 00319 00320 /** Sets the modem to specified functionality mode. 00321 * 00322 * @return true if successful, otherwise false. 00323 */ 00324 bool set_functionality_mode(FunctionalityMode mode); 00325 00326 /** Get the modem functionality mode 00327 * 00328 * @return true if successful, otherwise false. 00329 */ 00330 bool get_functionality_mode(int *mode); 00331 00332 /** reboot the modem using AT+CFUN=15. Application should call init() or connect() before making any other API calls. 00333 * 00334 * @return true if successful, otherwise false. 00335 */ 00336 bool reboot_modem(); 00337 00338 #ifdef TARGET_UBLOX_C030_R412M 00339 /** Important: Callback function is executed in context of AT parser so a user should not issue any AT commands from inside the callback. 00340 * 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 00341 * 00342 * application callback for modem going in to PSM sleep 00343 * 00344 * @param func callback function to be executed when modem is going in to PSM sleep 00345 * @param param parameter to be passed to callback function. 00346 */ 00347 void attach_cb_psm_going_in(Callback<void(void*)> func, void *param) 00348 { 00349 _func_psm_going_in = func; 00350 _cb_param_psm_going_in = param; 00351 } 00352 00353 /** Important: Callback function is executed in context of AT parser so a user should not issue any AT commands from inside the callback. 00354 * 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 00355 * 00356 * application callback for modem coming out of PSM sleep 00357 * 00358 * @param func callback function to be executed when modem is coming out of PSM sleep. 00359 * @param param parameter to be passed to callback function. 00360 */ 00361 void attach_cb_psm_coming_out(Callback<void(void*)> func, void *param) 00362 { 00363 _func_psm_coming_out = func; 00364 _cb_param_psm_coming_out = param; 00365 } 00366 00367 /** de-register the application callback for modem going in to PSM sleep 00368 * 00369 */ 00370 void detach_cb_psm_going_in() 00371 { 00372 _func_psm_going_in = NULL; 00373 _cb_param_psm_going_in = NULL; 00374 } 00375 00376 /** de-register application callback for modem coming out of PSM sleep 00377 * 00378 */ 00379 void detach_cb_psm_coming_out() 00380 { 00381 _func_psm_coming_out = NULL; 00382 _cb_param_psm_coming_out = NULL; 00383 } 00384 00385 /** Enable or disable the 3GPP PSM. 00386 * 00387 * Note: Application should reboot the module after enabling PSM in order to enter PSM state. (reboot_modem()) 00388 * Note: Modem can be woken up by toggling the power-on signal. (wakeup_modem()) 00389 * Note: When device enters PSM, all connections(PPP, sockets) and settings that are not saved in NV memory(ATE0, CREG etc) are lost. 00390 * host application should be prepared to re-initialize the modem and re-establish the connections. 00391 * Note: PSM is disabled if both periodic_time and active_time are 0. 00392 * Note: Not all variants/firmware versions support PSM URCs and in that case function will return false. 00393 * 00394 * PSM string encoding code is borrowed from AT_CellularPower.cpp 00395 * 00396 * @param periodic_time requested periodic TAU in seconds. 00397 * @param active_time requested active time in seconds. 00398 * @param func callback function to execute when modem goes to sleep 00399 * @param ptr parameter to callback function 00400 * @return True if successful, otherwise false. 00401 */ 00402 bool set_power_saving_mode(int periodic_tau, int active_time); 00403 00404 /** Reads the 3GPP PSM status (enabled or disabled) and returns assigned periodic tau and active time values. 00405 * 00406 * @param status 0: PSM disabled, 1: PSM enabled 00407 * @param periodic_tau assigned periodic TAU in seconds. 00408 * @param active_time assigned active time in seconds 00409 * @return True if command successful, otherwise false. 00410 */ 00411 bool get_power_saving_mode(int *status, int *periodic_tau, int *active_time); 00412 00413 /** Wake up the modem from PSM. Ref to comment on set_power_saving_mode, application should call init() or connect() 00414 * before making any other API calls. 00415 */ 00416 void wakeup_modem(); 00417 00418 /** True if the modem is not in PSM sleep 00419 * otherwise false. 00420 */ 00421 bool is_modem_awake(); 00422 #endif 00423 00424 #ifdef TARGET_UBLOX_C030_R41XM 00425 /** Set discontinuous reception time on cellular device. 00426 * 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. 00427 * 00428 * 00429 * @remark See 3GPP TS 27.007 eDRX for details. 00430 * 00431 * @param mode disable or enable the use of eDRX 00432 * @param act_type type of access technology 00433 * @param edrx_value requested edxr value. Extended DRX parameters information element. 00434 * 00435 * @return 0 on success 00436 * 1 on failure 00437 */ 00438 int set_receive_period(int mode, tEDRXAccessTechnology act_type, uint8_t edrx_value); 00439 00440 /** Set discontinuous reception time on cellular device. 00441 * 00442 * @remark See 3GPP TS 27.007 eDRX for details. 00443 * 00444 * @param mode disable or enable the use of eDRX 00445 * @param act_type type of access technology 00446 * 00447 * @return 0 on success 00448 * 1 on failure 00449 */ 00450 int set_receive_period(int mode, tEDRXAccessTechnology act_type); 00451 00452 /** Set discontinuous reception time on cellular device. (Disable) 00453 * 00454 * @remark See 3GPP TS 27.007 eDRX for details. 00455 * 00456 * @param mode disable or enable the use of eDRX 00457 * 00458 * @return 0 on success 00459 * 1 on failure 00460 */ 00461 int set_receive_period(int mode); 00462 00463 /** get discontinuous reception time on cellular device. 00464 * 00465 * @remark See 3GPP TS 27.007 eDRX for details. 00466 * 00467 * @return uint32_t 00468 */ 00469 uint32_t get_receive_period(); 00470 #endif 00471 00472 protected: 00473 00474 #define OUTPUT_ENTER_KEY "\r" 00475 00476 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE 00477 #define AT_PARSER_BUFFER_SIZE MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_BUFFER_SIZE 00478 #else 00479 #define AT_PARSER_BUFFER_SIZE 256 00480 #endif 00481 00482 #if MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT 00483 #define AT_PARSER_TIMEOUT MBED_CONF_UBLOX_CELL_GEN_DRV_AT_PARSER_TIMEOUT 00484 #else 00485 #define AT_PARSER_TIMEOUT 8*1000 // Milliseconds 00486 #endif 00487 00488 /** A string that would not normally be sent by the modem on the AT interface. 00489 */ 00490 #define UNNATURAL_STRING "\x01" 00491 00492 /** Supported u-blox modem variants. 00493 */ 00494 typedef enum { 00495 DEV_TYPE_NONE = 0, 00496 DEV_SARA_G35, 00497 DEV_LISA_U2, 00498 DEV_LISA_U2_03S, 00499 DEV_SARA_U2, 00500 DEV_SARA_R4, 00501 DEV_LEON_G2, 00502 DEV_TOBY_L2, 00503 DEV_MPCI_L2 00504 } DeviceType; 00505 00506 /** Network registration status. 00507 * UBX-13001820 - AT Commands Example Application Note (Section 4.1.4.5). 00508 */ 00509 typedef enum { 00510 GSM = 0, 00511 COMPACT_GSM = 1, 00512 UTRAN = 2, 00513 EDGE = 3, 00514 HSDPA = 4, 00515 HSUPA = 5, 00516 HSDPA_HSUPA = 6, 00517 LTE = 7, 00518 EC_GSM_IoT = 8, 00519 E_UTRAN_NB_S1 = 9 00520 } RadioAccessNetworkType; 00521 00522 /** Info about the modem. 00523 */ 00524 typedef struct { 00525 DeviceType dev; 00526 char iccid[20 + 1]; //!< Integrated Circuit Card ID. 00527 char imsi[15 + 1]; //!< International Mobile Station Identity. 00528 char imei[15 + 1]; //!< International Mobile Equipment Identity. 00529 char meid[18 + 1]; //!< Mobile Equipment IDentifier. 00530 volatile RadioAccessNetworkType rat; //!< Type of network (e.g. 2G, 3G, LTE). 00531 volatile NetworkRegistrationStatusCsd reg_status_csd; //!< Circuit switched attach status. 00532 volatile NetworkRegistrationStatusPsd reg_status_psd; //!< Packet switched attach status. 00533 volatile NetworkRegistrationStatusEps reg_status_eps; //!< Evolved Packet Switched (e.g. LTE) attach status. 00534 #ifdef TARGET_UBLOX_C030_R412M 00535 volatile ModemPSMState modem_psm_state; //!< last known modem PSM state 00536 #endif 00537 } DeviceInfo; 00538 00539 /* IMPORTANT: the variables below are available to 00540 * classes that inherit this in order to keep things 00541 * simple. However, ONLY this class should free 00542 * any of the pointers, or there will be havoc. 00543 */ 00544 00545 /** Point to the instance of the AT parser in use. 00546 */ 00547 #ifdef TARGET_UBLOX_C030_R41XM 00548 UbloxATCmdParser *_at; 00549 #else 00550 ATCmdParser *_at; 00551 #endif 00552 00553 /** The current AT parser timeout value. 00554 */ 00555 int _at_timeout; 00556 00557 /** File handle used by the AT parser. 00558 */ 00559 FileHandle *_fh; 00560 00561 /** The mutex resource. 00562 */ 00563 Mutex _mtx; 00564 00565 /** General info about the modem as a device. 00566 */ 00567 DeviceInfo _dev_info; 00568 00569 /** The SIM PIN to use. 00570 */ 00571 const char *_pin; 00572 00573 /** Set to true to spit out debug traces. 00574 */ 00575 bool _debug_trace_on; 00576 00577 /** The baud rate to the modem. 00578 */ 00579 int _baud; 00580 00581 /** True if the modem is ready register to the network, 00582 * otherwise false. 00583 */ 00584 bool _modem_initialised; 00585 00586 /** True it the SIM requires a PIN, otherwise false. 00587 */ 00588 bool _sim_pin_check_enabled; 00589 00590 /** Sets the modem up for powering on 00591 * 00592 * modem_init() is equivalent to plugging in the device, e.g., attaching power and serial port. 00593 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. 00594 */ 00595 virtual void modem_init(); 00596 00597 /** Sets the modem in unplugged state 00598 * 00599 * modem_deinit() will be equivalent to pulling the plug off of the device, i.e., detaching power 00600 * and serial port. This puts the modem in lowest power state. 00601 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. 00602 */ 00603 virtual void modem_deinit(); 00604 00605 /** Powers up the modem 00606 * 00607 * modem_power_up() is equivalent to pressing the soft power button. 00608 * The driver may repeat this if the modem is not responsive to AT commands. 00609 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. 00610 */ 00611 virtual void modem_power_up(); 00612 00613 /** Powers down the modem 00614 * 00615 * modem_power_down() is equivalent to turning off the modem by button press. 00616 * Uses onboard_modem_api.h where the implementation of onboard_modem_api is provided by the target. 00617 */ 00618 virtual void modem_power_down(); 00619 00620 /* Note: constructor and destructor protected so that this 00621 * class can only ever be inherited, never used directly. 00622 */ 00623 UbloxCellularBase(); 00624 ~UbloxCellularBase(); 00625 00626 /** Initialise this class. 00627 * 00628 * @param tx the UART TX data pin to which the modem is attached. 00629 * @param rx the UART RX data pin to which the modem is attached. 00630 * @param baud the UART baud rate. 00631 * @param debug_on true to switch AT interface debug on, otherwise false. 00632 * 00633 * Note: it would be more natural to do this in the constructor 00634 * however, to avoid the diamond of death, this class is only 00635 * every inherited virtually. Classes that are inherited virtually 00636 * do not get passed parameters in their constructor and hence 00637 * classInit() must be called separately by the first one to wake 00638 * the beast. 00639 */ 00640 void baseClassInit(PinName tx = MDMTXD, 00641 PinName rx = MDMRXD, 00642 int baud = MBED_CONF_UBLOX_CELL_BAUD_RATE, 00643 bool debug_on = false); 00644 00645 /** Set the AT parser timeout. 00646 */ 00647 void at_set_timeout(int timeout); 00648 00649 /** Read up to size characters from buf 00650 * or until the character "end" is reached, overwriting 00651 * the newline with 0 and ensuring a terminator 00652 * in all cases. 00653 * 00654 * @param buf the buffer to write to. 00655 * @param size the size of the buffer. 00656 * @param end the character to stop at. 00657 * @return the number of characters read, 00658 * not including the terminator. 00659 */ 00660 int read_at_to_char(char * buf, int size, char end); 00661 00662 /** Powers up the modem. 00663 * 00664 * @return true if successful, otherwise false. 00665 */ 00666 bool power_up(); 00667 00668 /** Power down the modem. 00669 */ 00670 void power_down(); 00671 00672 /** Lock a mutex when accessing the modem. 00673 */ 00674 void lock(void) { _mtx.lock(); } 00675 00676 /** Helper to make sure that lock unlock pair is always balanced 00677 */ 00678 #define LOCK() { lock() 00679 00680 /** Unlock the modem when done accessing it. 00681 */ 00682 void unlock(void) { _mtx.unlock(); } 00683 00684 /** Helper to make sure that lock unlock pair is always balanced 00685 */ 00686 #define UNLOCK() } unlock() 00687 00688 /** Set the device identity in _dev_info 00689 * based on the ATI string returned by 00690 * the module. 00691 * 00692 * @return true if dev is a known value, 00693 * otherwise false. 00694 */ 00695 bool set_device_identity(DeviceType *dev); 00696 00697 /** Perform any modem initialisation that is 00698 * specialised by device type. 00699 * 00700 * @return true if successful, otherwise false. 00701 */ 00702 bool device_init(DeviceType dev); 00703 00704 /** Set up the SIM. 00705 * 00706 * @return true if successful, otherwiss false. 00707 */ 00708 bool initialise_sim_card(); 00709 00710 #ifdef TARGET_UBLOX_C030_R41XM 00711 /** Converts the given uint to binary string. Fills the given str starting from [0] with the number of bits defined by bit_cnt 00712 * For example uint_to_binary_string(9, str, 10) would fill str "0000001001" 00713 * For example uint_to_binary_string(9, str, 3) would fill str "001" 00714 * 00715 * @param num uint to converts to binary string 00716 * @param str buffer for converted binary string 00717 * @param str_size size of the str buffer 00718 * @param bit_cnt defines how many bits are filled to buffer started from lsb 00719 */ 00720 void uint_to_binary_str(uint32_t num, char* str, int str_size, int bit_cnt); 00721 00722 /** Converts the given binary string to uint. 00723 * For example binary_str_to_uint("0000001001", 10) would return 9 00724 * 00725 * @param binary_string binary string from where chars are converted to uint 00726 * @param binary_string_length length of the param binary_string 00727 * @return uint represented by the binary string 00728 */ 00729 uint32_t binary_str_to_uint(const char *binary_string, int binary_string_length); 00730 00731 #endif 00732 00733 private: 00734 00735 void set_nwk_reg_status_csd(int status); 00736 void set_nwk_reg_status_psd(int status); 00737 void set_nwk_reg_status_eps(int status); 00738 void set_rat(int AcTStatus); 00739 bool get_iccid(); 00740 bool get_imsi(); 00741 bool get_imei(); 00742 bool get_meid(); 00743 bool set_sms(); 00744 void parser_abort_cb(); 00745 void CMX_ERROR_URC(); 00746 void CREG_URC(); 00747 void CGREG_URC(); 00748 void CEREG_URC(); 00749 void UMWI_URC(); 00750 #ifdef TARGET_UBLOX_C030_R412M 00751 void UUPSMR_URC(); 00752 bool _psm_status; 00753 void *_cb_param_psm_going_in; 00754 Callback<void(void*)> _func_psm_going_in; /**< Callback. */ 00755 void *_cb_param_psm_coming_out; 00756 Callback<void(void*)> _func_psm_coming_out; /**< Callback. */ 00757 void set_modem_psm_state(int state); 00758 #endif 00759 #ifdef TARGET_UBLOX_C030_R41XM 00760 bool _edrx_configured; 00761 #endif 00762 }; 00763 00764 #endif // _UBLOX_CELLULAR_BASE_ 00765
Generated on Thu Jul 21 2022 21:50:29 by
1.7.2