ublox-cellular-base_psm

Dependents:  

Files at this revision

API Documentation at this revision

Comitter:
mudassar0121
Date:
Tue Feb 04 16:34:01 2020 +0500
Parent:
37:a2466fcd63c3
Commit message:
changes for SARA-R5

Changed in this revision

UbloxCellularBase.cpp Show annotated file Show diff for this revision Revisions of this file
UbloxCellularBase.h Show annotated file Show diff for this revision Revisions of this file
--- a/UbloxCellularBase.cpp	Mon Jan 06 14:25:07 2020 +0500
+++ b/UbloxCellularBase.cpp	Tue Feb 04 16:34:01 2020 +0500
@@ -610,7 +610,7 @@
     tr_info("Powering up modem...");
     modem_init();
     /* Give modem a little time to settle down */
-    ThisThread::sleep_for(250);
+    wait_ms(250);
 
     for (int retry_count = 0; !success && (retry_count < 20); retry_count++) {
         //In case of SARA-R4, modem takes a while to turn on, constantly toggling the power pin every ~2 secs causes the modem to never power up.
@@ -633,7 +633,7 @@
     // Set the final baud rate
     if (_at->send("AT+IPR=%d", _baud) && _at->recv("OK")) {
         // Need to wait for things to be sorted out on the modem side
-        ThisThread::sleep_for(100);
+        wait_ms(100);
         ((UARTSerial *)_fh)->set_baud(_baud);
 
         // Turn off modem echoing and turn on verbose responses
@@ -666,7 +666,7 @@
     at_set_timeout(1000);
     if (_at->send("AT")) {
         // C027 needs a delay here
-        ThisThread::sleep_for(100);
+        wait_ms(100);
         if (_at->recv("OK")) {
             success = true;
         }
@@ -737,7 +737,7 @@
             *dev = DEV_LISA_U2;
         else if (strstr(buf, "SARA-U2"))
             *dev = DEV_SARA_U2;
-        else if (strstr(buf, "SARA-R4"))
+        else if (strstr(buf, "SARA-R4") || strstr(buf, "SARA-R5"))
             *dev = DEV_SARA_R4;
         else if (strstr(buf, "LEON-G2"))
             *dev = DEV_LEON_G2;
@@ -809,7 +809,7 @@
         }
 
         /* wait for a second before retry */
-        ThisThread::sleep_for(1000);
+        wait_ms(1000);
     }
 
     if (done) {
@@ -847,21 +847,20 @@
 #ifdef TARGET_UBLOX_C030_R41XM
                     int mno_profile;
                     if (get_mno_profile(&mno_profile)) {
-#ifdef MBED_CONF_APP_DEFAULT_MNO_PROFILE
-                        if (mno_profile != MBED_CONF_APP_DEFAULT_MNO_PROFILE && set_mno_profile((MNOProfile)MBED_CONF_APP_DEFAULT_MNO_PROFILE)) {
+#ifdef MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE
+                        if (set_mno_profile((MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE)) {
                             reboot_modem();
                             while(is_modem_ready() == false) {
-                                ThisThread::sleep_for(1000);
+                                wait_ms(1000);
                             }
                             setup_modem();
-                            mno_profile = MBED_CONF_APP_DEFAULT_MNO_PROFILE;
                         }
 #endif
-                        if (mno_profile == SW_DEFAULT) {
+                        /*if (mno_profile == SW_DEFAULT) {
                             tr_critical("!!CANNOT USE PROFILE 0(SW_DEFAULT). PLEASE SET AN APPROPRIATE MNO PROFILE!!");
                             _default_profile_is_set = true;
                             return false;
-                        }
+                        }*/
                     }
 #ifdef TARGET_UBLOX_C030_R412M
                     int status = 0, periodic_time = 0, active_time = 0;
@@ -872,7 +871,7 @@
                                 _psm_status = ENABLED;
                                 if ( !(set_psm_urcs(true)) ) { //enable PSM URCs
                                     tr_error("Modem does not support PSM URCs, disabling PSM");
-                                    disable_power_saving_mode();
+                                    set_power_saving_mode(0, 0);
                                 } else if (!_func_psm_going_in){
                                     tr_critical("!!PSM IS ENABLED, CALLBACK NOT ATTACHED. PLEASE REGISTER ONE!!");
                                 }
@@ -882,12 +881,10 @@
                         tr_critical("!!PSM IS ENABLED, CALLBACK NOT ATTACHED. PLEASE REGISTER ONE!!");
                     }
 #elif TARGET_UBLOX_C030_R410M
-                    disable_power_saving_mode(); //PSM is currently not supported by driver for R410M due to lack of URCs
+                    disable_psm(); //PSM is currently not supported by driver for R410M due to lack of URCs
 #endif
-                    if (_at->is_idle_mode_enabled() == false || _psm_status == ENABLED) {
-                        //application has not yet enabled idle mode so disable it
-                        //PSM got enabled by MNO, disable idle mode.
-                        set_idle_mode(false);
+                    if (_at->is_idle_mode_enabled() == false) {
+                        set_idle_mode(false); //disable idle mode at start up
                     }
 #endif
                     if (set_device_identity(&_dev_info.dev) && // Set up device identity
@@ -898,7 +895,7 @@
                             // take a while to be retrieved, especially if a SIM PIN
                             // was set)
                             for (x = 0; (x < 3) && !get_imsi(); x++) {
-                                ThisThread::sleep_for(1000);
+                                wait_ms(1000);
                             }
 
                             if (x < 3) { // If we got the IMSI, can get the others
@@ -1294,7 +1291,7 @@
 //application should call init() or connect() in order to initialize the modem
 bool UbloxCellularBase::reboot_modem()
 {
-    return (set_functionality_mode(FUNC_RESET));
+    return (set_functionality_mode(FUNC_RESET_WITH_SIM));
 }
 
 bool UbloxCellularBase::set_functionality_mode(FunctionalityMode mode)
@@ -1636,17 +1633,12 @@
     return status;
 }
 
-bool UbloxCellularBase::disable_power_saving_mode()
+bool UbloxCellularBase::disable_psm()
 {
     bool return_value = false;
 
     LOCK();
     if (_at->send("AT+CPSMS=0") && _at->recv("OK")) {
-#ifdef TARGET_UBLOX_C030_R412M
-        _at->send("AT+UPSMR=0");
-        _at->recv("OK");
-#endif
-        _psm_status = DISABLED;
         return_value = true;
     }
     UNLOCK();
@@ -1720,7 +1712,7 @@
                 break;
 
                 default:
-                    value = -1;
+                    value = 0;
                 break;
             }
             *periodic_time = value;
@@ -1753,7 +1745,7 @@
                 break;
 
                 default:
-                    value = -1;
+                    value = 0;
                 break;
             }
             *active_time = value;
@@ -1769,8 +1761,7 @@
 bool UbloxCellularBase::set_power_saving_mode(int periodic_time, int active_time)
 {
 
-    if (_at->is_idle_mode_enabled() == true) {
-        tr_error("Please disable idle mode(+UPSV) first");
+    if (_at->is_idle_mode_enabled() == true && periodic_time != 0 && active_time != 0 ) {
         return false;
     }
     bool return_val = false;
@@ -1779,7 +1770,14 @@
     int at_timeout = _at_timeout;
     at_set_timeout(10000); //AT+CPSMS has response time of < 10s
 
-    if (_at->send("AT+UPSMR?") && _at->recv("OK")) { //PSM string encoding code borrowed from AT_CellularPower.cpp
+    if (periodic_time == 0 && active_time == 0) {
+        // disable PSM
+        if (_at->send("AT+CPSMS=0") && _at->recv("OK")) {
+            set_psm_urcs(false); //disable the URC
+            _psm_status = DISABLED;
+            return_val = true;
+        }
+    } else if (1){//_at->send("AT+UPSMR?") && _at->recv("OK")) { //PSM string encoding code borrowed from AT_CellularPower.cpp
         /**
             Table 10.5.163a/3GPP TS 24.008: GPRS Timer 3 information element
 
@@ -1927,8 +1925,8 @@
 bool UbloxCellularBase::set_psm_urcs(bool enable)
 {
 
-    bool success = false;
-    LOCK();
+    bool success = true;
+    /*LOCK();
 
     MBED_ASSERT(_at != NULL);
 
@@ -1936,7 +1934,7 @@
         success = true;
     }
 
-    UNLOCK();
+    UNLOCK();*/
     return success;
 }
 #endif
--- a/UbloxCellularBase.h	Mon Jan 06 14:25:07 2020 +0500
+++ b/UbloxCellularBase.h	Tue Feb 04 16:34:01 2020 +0500
@@ -261,7 +261,7 @@
 #ifdef TARGET_UBLOX_C030_R41XM
     /** Set MNO profile. Profile will be applied on next boot.
      *
-     * User can also specify profile in mbed_app.json ("default-mno-profile": 100) and in that case profile will be applied in init().
+     * User can also specify profile in mbed_lib.json ("default-mno-profile": 100) and in that case profile will be applied in init().
      * Modem will also be rebooted so that profile parameters can be applied.
      *
      * Note: MNO profile should only be set in detached state and a reboot is required for settings to take effect
@@ -494,7 +494,7 @@
      *
      *  @return           True if successful, otherwise false.
      */
-    bool disable_power_saving_mode();
+    bool disable_psm();
 #endif
 
 protected:
@@ -794,8 +794,14 @@
     void CEREG_URC();
     void UMWI_URC();
 #ifdef TARGET_UBLOX_C030_R412M
+    typedef enum {
+       DISABLED = 0,
+       ENABLED = 1,
+       UNKNOWN = 2
+    } PSMStatus;
     bool set_psm_urcs(bool enable);
     void UUPSMR_URC();
+    PSMStatus _psm_status;
     void *_cb_param_psm_going_in;
     Callback<void(void*)>    _func_psm_going_in;  /**< Callback. */
     void *_cb_param_psm_coming_out;
@@ -804,12 +810,6 @@
 #endif
 #ifdef TARGET_UBLOX_C030_R41XM
     bool _default_profile_is_set;
-    typedef enum {
-       DISABLED = 0,
-       ENABLED = 1,
-       UNKNOWN = 2
-    } PSMStatus;
-    PSMStatus _psm_status;
 #endif
 };