ublox-cellular-base_mno
Embed:
(wiki syntax)
Show/hide line numbers
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