Implementation of the CellularInterface for u-blox C027 and C030 (non-N2xx flavour) modems that uses the IP stack on-board the cellular modem, hence not requiring LWIP (and so less RAM) and allowing any AT command exchanges to be carried out at the same time as data transfers (since the modem remains in AT mode all the time). This library may be used from mbed 5.5 onwards. If you need to use SMS, USSD or access the modem file system at the same time as using the CellularInterface then use ublox-at-cellular-interface-ext instead.

Dependents:   example-ublox-cellular-interface example-ublox-cellular-interface_r410M example-ublox-mbed-client example-ublox-cellular-interface ... more

Files at this revision

API Documentation at this revision

Comitter:
wajahat.abbas@u-blox.com
Date:
Wed Oct 09 14:48:57 2019 +0500
Parent:
36:9d48ec522cb4
Child:
38:c3ad075a347b
Commit message:
Updated test cases for C030_R41XM

Changed in this revision

TESTS/unit_tests/default/main.cpp Show annotated file Show diff for this revision Revisions of this file
TESTS/unit_tests/dynamic/main.cpp Show annotated file Show diff for this revision Revisions of this file
UbloxATCellularInterface.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/TESTS/unit_tests/default/main.cpp	Mon Aug 19 17:36:04 2019 +0500
+++ b/TESTS/unit_tests/default/main.cpp	Wed Oct 09 14:48:57 2019 +0500
@@ -162,6 +162,7 @@
 // Connection flag
 static bool connection_has_gone_down = false;
 
+#ifdef MBED_CONF_APP_ECHO_SERVER
 // Data to exchange
 static const char send_data[] =  "_____0000:0123456789012345678901234567890123456789"
                                  "01234567890123456789012345678901234567890123456789"
@@ -205,6 +206,7 @@
                                  "01234567890123456789012345678901234567890123456789"
                                  "_____2000:0123456789012345678901234567890123456789"
                                  "01234567890123456789012345678901234567890123456789";
+#endif
 
 // ----------------------------------------------------------------
 // PRIVATE FUNCTIONS
@@ -1056,19 +1058,8 @@
     use_connection(pLocalInterface);
     drop_connection(pLocalInterface);
     delete pLocalInterface;
-
-    pLocalInterface = new UbloxATCellularInterface(MDMTXD, MDMRXD,
-                                                   MBED_CONF_UBLOX_CELL_BAUD_RATE,
-                                                   MBED_CONF_APP_DEBUG_ON);
-    pLocalInterface->connection_status_cb(connection_down_cb);
-
-    TEST_ASSERT(pLocalInterface->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
-                                         MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
-    use_connection(pLocalInterface);
-    drop_connection(pLocalInterface);
-    delete pLocalInterface;
 }
-
+#if defined (TARGET_UBLOX_C030_U201) || defined (TARGET_UBLOX_C030_R412M)
 void test_set_new_rat() {
 
 	int currentSelectedRat = -1, currentPreferredRat = -1, currentSecondPreferredRat = -1;
@@ -1098,11 +1089,10 @@
 
     // Check RAT configured correctly
     TEST_ASSERT((currentSelectedRat == UbloxATCellularInterface::GSM_UMTS) && (currentPreferredRat == UbloxATCellularInterface::UMTS));
-#endif
 
-#ifdef TARGET_UBLOX_C030_R412M
+#elif TARGET_UBLOX_C030_R412M
     // Set new RAT
-    TEST_ASSERT(interface->set_modem_rat(UbloxATCellularInterface::LTE_CATM1, UbloxATCellularInterface::LTE_CATNB1));
+    TEST_ASSERT(interface->set_modem_rat(UbloxATCellularInterface::LTE_CATM1, UbloxATCellularInterface::LTE_CATNB1, UbloxATCellularInterface::GPRS_EGPRS));
     tr_debug("RAT configured\n");
 
     // Get latest set RAT on modem
@@ -1146,6 +1136,7 @@
     // Rebooting modem for settings to take effect
 	TEST_ASSERT(interface->reboot_modem());
 }
+#endif
 
 #ifdef TARGET_UBLOX_C030_R41XM
 void test_mno_profile() {
@@ -1153,7 +1144,7 @@
     int previous_profile, current_profile;
 
     // Power-up the modem
-    TEST_ASSERT(interface->init(MBED_CONF_APP_DEFAULT_PIN));
+    interface->init(MBED_CONF_APP_DEFAULT_PIN); //init can return false if profile set is SW_DEFAULT
 
     // Check if modem is registered with network
     if (interface->is_registered_csd() || interface->is_registered_psd() || interface->is_registered_eps()) {
@@ -1164,10 +1155,10 @@
 
     // Getting current mno profile
     TEST_ASSERT(interface->get_mno_profile(&previous_profile));
-    tr_debug("Previous MNO profile is: %d\n\n", previous_profile);
+    tr_debug("Previous MNO profile is: %d\n", previous_profile);
 
     // Set MNO profile
-    TEST_ASSERT(interface->set_mno_profile((UbloxATCellularInterface::MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE));
+    TEST_ASSERT(interface->set_mno_profile(UbloxATCellularInterface::STANDARD_EU));
     tr_debug("MNO configured\n");
 
     // Rebooting modem for settings to take effect
@@ -1175,17 +1166,19 @@
 	tr_debug("Reboot successful\n");
 	wait_ms(5000);
 
+	TEST_ASSERT(interface->init(MBED_CONF_APP_DEFAULT_PIN));
+
     // Check MNO profile configured correctly
     TEST_ASSERT(interface->get_mno_profile(&current_profile));
-    tr_debug("New MNO profile is: %d\n\n", current_profile);
+    tr_debug("New MNO profile is: %d\n", current_profile);
 
-    TEST_ASSERT((UbloxATCellularInterface::MNOProfile)current_profile == (UbloxATCellularInterface::MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE);
+    TEST_ASSERT(interface->disable_psm());
+
+    TEST_ASSERT((UbloxATCellularInterface::MNOProfile)current_profile == UbloxATCellularInterface::STANDARD_EU);
 
     TEST_ASSERT(interface->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
                                    MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
 
-    interface->get_receive_period();
-
     drop_connection(interface);
 }
 
@@ -1201,20 +1194,15 @@
         // Deregister from Network
         drop_connection(interface);
     }
-    // Set MNO profile
-    TEST_ASSERT(interface->set_mno_profile((UbloxATCellularInterface::MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE));
-    tr_debug("MNO configured\n");
 
+    //disable edrx
+    interface->set_receive_period(3, UbloxCellularBase::EDRXEUTRAN_WB_S1_mode);
+    interface->set_receive_period(3, UbloxCellularBase::EDRXEUTRAN_NB_S1_mode);
+
+    //set edrx
     interface->set_receive_period(2, UbloxCellularBase::EDRXEUTRAN_WB_S1_mode, c_edrx_value);
     interface->set_receive_period(2, UbloxCellularBase::EDRXEUTRAN_NB_S1_mode, c_edrx_value);
 
-    // Rebooting modem for settings to take effect
-    TEST_ASSERT(interface->reboot_modem());
-    tr_debug("Reboot successful\n");
-    wait_ms(5000);
-
-    //TEST_ASSERT(interface->get_receive_period() == c_edrx_value);
-
     TEST_ASSERT(interface->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
                                        MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
 
@@ -1222,26 +1210,12 @@
 
     drop_connection(interface);
 
-    interface->set_receive_period(3, UbloxCellularBase::EDRXEUTRAN_WB_S1_mode);
-    interface->set_receive_period(3, UbloxCellularBase::EDRXEUTRAN_NB_S1_mode);
-
-    // Set MNO profile
-    TEST_ASSERT(interface->set_mno_profile((UbloxATCellularInterface::MNOProfile)(MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE+1)));
-    tr_debug("MNO configured\n");
-
-    // Rebooting modem for settings to take effect
+    //re-apply default mno profile
+    TEST_ASSERT(interface->set_mno_profile(UbloxATCellularInterface::STANDARD_EU));
     TEST_ASSERT(interface->reboot_modem());
-    tr_debug("Reboot successful\n");
     wait_ms(5000);
-
-    // Set MNO profile
-    TEST_ASSERT(interface->set_mno_profile((UbloxATCellularInterface::MNOProfile)MBED_CONF_UBLOX_CELL_DEFAULT_MNO_PROFILE));
-    tr_debug("MNO configured\n");
-
-    // Rebooting modem for settings to take effect
-    TEST_ASSERT(interface->reboot_modem());
-    tr_debug("Reboot successful\n");
-    wait_ms(5000);
+    TEST_ASSERT(interface->init(MBED_CONF_APP_DEFAULT_PIN));
+    TEST_ASSERT(interface->disable_psm());
 }
 #endif
 
--- a/TESTS/unit_tests/dynamic/main.cpp	Mon Aug 19 17:36:04 2019 +0500
+++ b/TESTS/unit_tests/dynamic/main.cpp	Wed Oct 09 14:48:57 2019 +0500
@@ -221,7 +221,6 @@
 // Test that sleep is possible both
 // before and after running the driver.
 void test_sleep() {
-    
     TEST_ASSERT(sleep_manager_can_deep_sleep() == true);
 
     // Create an instance of the cellular interface
@@ -232,7 +231,24 @@
     interface->connection_status_cb(connection_down_cb);
 
     // Use it
+#ifdef TARGET_UBLOX_C030_R41XM
+    int mno_profile;
+    if (interface->init(MBED_CONF_APP_DEFAULT_PIN) == false) //init can return false if profile set is SW_DEFAULT
+    {
+        TEST_ASSERT(interface->get_mno_profile(&mno_profile));
+        if (mno_profile == UbloxATCellularInterface::SW_DEFAULT) {
+            TEST_ASSERT(interface->set_mno_profile(UbloxATCellularInterface::STANDARD_EU));
+            TEST_ASSERT(interface->reboot_modem());
+            tr_debug("Reboot successful\n");
+            wait_ms(5000);
+        }
+    }
     TEST_ASSERT(interface->init(MBED_CONF_APP_DEFAULT_PIN));
+
+    TEST_ASSERT(interface->disable_psm());
+#else
+    TEST_ASSERT(interface->init(MBED_CONF_APP_DEFAULT_PIN));
+#endif
     TEST_ASSERT(interface->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
                                    MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
     use_connection(interface);
--- a/UbloxATCellularInterface.cpp	Mon Aug 19 17:36:04 2019 +0500
+++ b/UbloxATCellularInterface.cpp	Wed Oct 09 14:48:57 2019 +0500
@@ -346,9 +346,10 @@
                                                        nsapi_security_t auth)
 {
     bool success = false;
+
+#ifndef TARGET_UBLOX_C030_R41XM
     int at_timeout = _at_timeout;
 
-#ifndef TARGET_UBLOX_C030_R41XM
     if (_at->send("AT+CGDCONT=%d,\"IP\",\"%s\"", cid, apn) && _at->recv("OK") &&
         _at->send("AT+UAUTHREQ=%d,%d,\"%s\",\"%s\"", cid, nsapi_security_to_modem_security(auth),
                   username, password) && _at->recv("OK") &&