diff --git a/UNITTESTS/features/cellular/framework/AT/at_cellulardevice/at_cellulardevicetest.cpp b/UNITTESTS/features/cellular/framework/AT/at_cellulardevice/at_cellulardevicetest.cpp index 16219255df..58447ea155 100644 --- a/UNITTESTS/features/cellular/framework/AT/at_cellulardevice/at_cellulardevicetest.cpp +++ b/UNITTESTS/features/cellular/framework/AT/at_cellulardevice/at_cellulardevicetest.cpp @@ -398,3 +398,17 @@ TEST_F(TestAT_CellularDevice, TestAT_CellularDevice_get_sim_state) delete dev; } + +static void device_ready_cb() +{ +} + +TEST_F(TestAT_CellularDevice, test_AT_CellularDevice_set_ready_cb) +{ + EventQueue que; + FileHandle_stub fh1; + AT_CellularDevice *dev = new AT_CellularDevice(&fh1); + + EXPECT_TRUE(NSAPI_ERROR_UNSUPPORTED == dev->set_ready_cb(&device_ready_cb)); + EXPECT_TRUE(NSAPI_ERROR_UNSUPPORTED == dev->set_ready_cb(0)); +} diff --git a/UNITTESTS/features/cellular/framework/AT/at_cellularpower/at_cellularpowertest.cpp b/UNITTESTS/features/cellular/framework/AT/at_cellularpower/at_cellularpowertest.cpp index 560196788e..f2d8ee9f9e 100644 --- a/UNITTESTS/features/cellular/framework/AT/at_cellularpower/at_cellularpowertest.cpp +++ b/UNITTESTS/features/cellular/framework/AT/at_cellularpower/at_cellularpowertest.cpp @@ -41,10 +41,6 @@ protected: // *INDENT-ON* -static void device_ready_cb() -{ -} - TEST_F(TestAT_CellularPower, Create) { @@ -122,27 +118,3 @@ TEST_F(TestAT_CellularPower, test_AT_CellularPower_reset) ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR; EXPECT_TRUE(NSAPI_ERROR_DEVICE_ERROR == pow.reset()); } - -TEST_F(TestAT_CellularPower, test_AT_CellularPower_set_device_ready_urc_cb) -{ - EventQueue que; - FileHandle_stub fh1; - ATHandler at(&fh1, que, 0, ","); - - AT_CellularPower pow(at); - EXPECT_TRUE(NSAPI_ERROR_UNSUPPORTED == pow.set_device_ready_urc_cb(&device_ready_cb)); - EXPECT_TRUE(NSAPI_ERROR_UNSUPPORTED == pow.set_device_ready_urc_cb(NULL)); -} - -TEST_F(TestAT_CellularPower, test_AT_CellularPower_remove_device_ready_urc_cb) -{ - EventQueue que; - FileHandle_stub fh1; - ATHandler at(&fh1, que, 0, ","); - - AT_CellularPower pow(at); - EXPECT_TRUE(NSAPI_ERROR_UNSUPPORTED == pow.set_device_ready_urc_cb(&device_ready_cb)); - - pow.remove_device_ready_urc_cb(NULL); - pow.remove_device_ready_urc_cb(&device_ready_cb); -} diff --git a/UNITTESTS/stubs/AT_CellularDevice_stub.cpp b/UNITTESTS/stubs/AT_CellularDevice_stub.cpp index 6303dcdc0a..90c347fd10 100644 --- a/UNITTESTS/stubs/AT_CellularDevice_stub.cpp +++ b/UNITTESTS/stubs/AT_CellularDevice_stub.cpp @@ -156,9 +156,14 @@ nsapi_error_t AT_CellularDevice::is_ready() return NSAPI_ERROR_OK; } +nsapi_error_t AT_CellularDevice::set_ready_cb(mbed::Callback callback) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + nsapi_error_t AT_CellularDevice::set_power_save_mode(int periodic_time, int active_time) { - return NSAPI_ERROR_OK; + return NSAPI_ERROR_UNSUPPORTED; } nsapi_error_t AT_CellularDevice::init_module() diff --git a/UNITTESTS/stubs/AT_CellularPower_stub.cpp b/UNITTESTS/stubs/AT_CellularPower_stub.cpp index 1a2918be3b..420878aa57 100644 --- a/UNITTESTS/stubs/AT_CellularPower_stub.cpp +++ b/UNITTESTS/stubs/AT_CellularPower_stub.cpp @@ -54,13 +54,3 @@ nsapi_error_t AT_CellularPower::reset() { return NSAPI_ERROR_OK; } - -nsapi_error_t AT_CellularPower::set_device_ready_urc_cb(mbed::Callback callback) -{ - return NSAPI_ERROR_OK; -} - -void AT_CellularPower::remove_device_ready_urc_cb(mbed::Callback callback) -{ - -} diff --git a/UNITTESTS/target_h/myCellularDevice.h b/UNITTESTS/target_h/myCellularDevice.h index 8a7cb9199a..628a0d7bbb 100644 --- a/UNITTESTS/target_h/myCellularDevice.h +++ b/UNITTESTS/target_h/myCellularDevice.h @@ -114,6 +114,11 @@ public: return NSAPI_ERROR_OK; } + virtual nsapi_error_t set_ready_cb(Callback callback) + { + return NSAPI_ERROR_UNSUPPORTED; + } + nsapi_error_t set_power_save_mode(int periodic_time, int active_time) { return NSAPI_ERROR_OK; diff --git a/features/cellular/TESTS/api/cellular_power/main.cpp b/features/cellular/TESTS/api/cellular_power/main.cpp index 1a24939bb7..0b221be541 100644 --- a/features/cellular/TESTS/api/cellular_power/main.cpp +++ b/features/cellular/TESTS/api/cellular_power/main.cpp @@ -52,7 +52,7 @@ static void urc_callback() static void wait_for_power(CellularPower *pwr) { - nsapi_error_t err = pwr->set_device_ready_urc_cb(&urc_callback); + nsapi_error_t err = cellular_device->set_ready_cb(&urc_callback); TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED); int sanity_count = 0; @@ -66,7 +66,7 @@ static void wait_for_power(CellularPower *pwr) TEST_ASSERT(cellular_device->is_ready() == NSAPI_ERROR_OK); - pwr->remove_device_ready_urc_cb(&urc_callback); + TEST_ASSERT(cellular_device->set_ready_cb(0) == NSAPI_ERROR_OK); } static void test_power_interface() diff --git a/features/cellular/framework/API/CellularDevice.h b/features/cellular/framework/API/CellularDevice.h index 9461e7a28c..8c748ef053 100644 --- a/features/cellular/framework/API/CellularDevice.h +++ b/features/cellular/framework/API/CellularDevice.h @@ -257,6 +257,16 @@ public: */ virtual nsapi_error_t is_ready() = 0; + /** Set callback function to listen when device is ready. + * + * @param callback function to call on device ready, or NULL to remove callback. + * + * @return NSAPI_ERROR_OK on success + * NSAPI_ERROR_NO_MEMORY on memory failure + * NSAPI_ERROR_UNSUPPORTED if not overridden by the target modem + */ + virtual nsapi_error_t set_ready_cb(Callback callback) = 0; + /** Set power save mode * * @remark See 3GPP TS 27.007 PSM for details diff --git a/features/cellular/framework/API/CellularPower.h b/features/cellular/framework/API/CellularPower.h index c3293be4de..b523850c42 100644 --- a/features/cellular/framework/API/CellularPower.h +++ b/features/cellular/framework/API/CellularPower.h @@ -92,24 +92,6 @@ public: * NSAPI_ERROR_DEVICE_ERROR on failure */ virtual nsapi_error_t reset() = 0; - - /** Set URC callback function for device specific ready urc. URC is defined in device specific - * power API. Used in startup sequence to listen when device is ready - * for using at commands and possible sim. - * - * @param callback Callback function called when urc received - * - * @return NSAPI_ERROR_OK on success - * NSAPI_ERROR_NO_MEMORY on memory failure - * NSAPI_ERROR_UNSUPPORTED if not overridden by the target modem - */ - virtual nsapi_error_t set_device_ready_urc_cb(mbed::Callback callback) = 0; - - /** Removes the device ready urc from the list of urc's. - * - * @param callback callback to remove from the list of urc's - */ - virtual void remove_device_ready_urc_cb(mbed::Callback callback) = 0; }; } // namespace mbed diff --git a/features/cellular/framework/AT/AT_CellularDevice.cpp b/features/cellular/framework/AT/AT_CellularDevice.cpp index 49195f9016..4f0bfc0b6c 100644 --- a/features/cellular/framework/AT/AT_CellularDevice.cpp +++ b/features/cellular/framework/AT/AT_CellularDevice.cpp @@ -381,6 +381,11 @@ nsapi_error_t AT_CellularDevice::is_ready() return _at->unlock_return_error(); } +nsapi_error_t AT_CellularDevice::set_ready_cb(Callback callback) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + nsapi_error_t AT_CellularDevice::set_power_save_mode(int periodic_time, int active_time) { _at->lock(); diff --git a/features/cellular/framework/AT/AT_CellularDevice.h b/features/cellular/framework/AT/AT_CellularDevice.h index 33c373054d..814ae8350f 100644 --- a/features/cellular/framework/AT/AT_CellularDevice.h +++ b/features/cellular/framework/AT/AT_CellularDevice.h @@ -72,6 +72,8 @@ public: virtual nsapi_error_t is_ready(); + virtual nsapi_error_t set_ready_cb(Callback callback); + virtual nsapi_error_t set_power_save_mode(int periodic_time, int active_time = 0); virtual nsapi_error_t init_module(); diff --git a/features/cellular/framework/AT/AT_CellularPower.cpp b/features/cellular/framework/AT/AT_CellularPower.cpp index a6216c36fc..c4b4b8b4f6 100644 --- a/features/cellular/framework/AT/AT_CellularPower.cpp +++ b/features/cellular/framework/AT/AT_CellularPower.cpp @@ -73,12 +73,3 @@ nsapi_error_t AT_CellularPower::reset() _at.cmd_stop_read_resp(); return _at.unlock_return_error(); } - -nsapi_error_t AT_CellularPower::set_device_ready_urc_cb(mbed::Callback callback) -{ - return NSAPI_ERROR_UNSUPPORTED; -} - -void AT_CellularPower::remove_device_ready_urc_cb(mbed::Callback callback) -{ -} diff --git a/features/cellular/framework/AT/AT_CellularPower.h b/features/cellular/framework/AT/AT_CellularPower.h index 6a261d82e9..b31653f473 100644 --- a/features/cellular/framework/AT/AT_CellularPower.h +++ b/features/cellular/framework/AT/AT_CellularPower.h @@ -43,10 +43,6 @@ public: virtual nsapi_error_t set_power_level(int func_level, int do_reset = 0); virtual nsapi_error_t reset(); - - virtual nsapi_error_t set_device_ready_urc_cb(mbed::Callback callback); - - virtual void remove_device_ready_urc_cb(mbed::Callback callback); }; } // namespace mbed diff --git a/features/cellular/framework/device/CellularStateMachine.cpp b/features/cellular/framework/device/CellularStateMachine.cpp index b0a2b94e1e..ecd3a6e2a8 100644 --- a/features/cellular/framework/device/CellularStateMachine.cpp +++ b/features/cellular/framework/device/CellularStateMachine.cpp @@ -387,8 +387,7 @@ bool CellularStateMachine::device_ready() if (_event_status_cb) { _event_status_cb((nsapi_event_t)CellularDeviceReady, (intptr_t)&_cb_data); } - - _power->remove_device_ready_urc_cb(mbed::callback(this, &CellularStateMachine::ready_urc_cb)); + _cellularDevice.set_ready_cb(0); _cellularDevice.close_power(); _power = NULL; return true; @@ -406,7 +405,7 @@ void CellularStateMachine::state_device_ready() } } else { if (_retry_count == 0) { - _power->set_device_ready_urc_cb(mbed::callback(this, &CellularStateMachine::ready_urc_cb)); + _cellularDevice.set_ready_cb(callback(this, &CellularStateMachine::device_ready_cb)); } retry_state_or_fail(); } diff --git a/features/cellular/framework/device/CellularStateMachine.h b/features/cellular/framework/device/CellularStateMachine.h index 35d3c8dc28..c9d10e9f25 100644 --- a/features/cellular/framework/device/CellularStateMachine.h +++ b/features/cellular/framework/device/CellularStateMachine.h @@ -154,7 +154,7 @@ private: bool is_registered_to_plmn(); void report_failure(const char *msg); void event(); - void ready_urc_cb(); + void device_ready_cb(); void pre_event(CellularState state); bool check_is_target_reached(); diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.cpp b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.cpp index 55e673acfd..a5c9c9d8f2 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.cpp +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.cpp @@ -32,6 +32,8 @@ using namespace events; #define MAX_STARTUP_TRIALS 5 #define MAX_RESET_TRIALS 5 +#define DEVICE_READY_URC "CPIN:" + static const AT_CellularBase::SupportedFeature unsupported_features[] = { AT_CellularBase::AT_CGSN_WITH_TYPE, AT_CellularBase::AT_CGDATA, @@ -62,7 +64,3 @@ AT_CellularContext *QUECTEL_BG96::create_context_impl(ATHandler &at, const char return new QUECTEL_BG96_CellularContext(at, this, apn); } -AT_CellularInformation *QUECTEL_BG96::open_information_impl(ATHandler &at) -{ - return new QUECTEL_BG96_CellularInformation(at); -} diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.h b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.h index 1cc8b4a892..956803edf4 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.h +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96.h @@ -32,6 +32,8 @@ protected: // AT_CellularDevice virtual AT_CellularPower *open_power_impl(ATHandler &at); virtual AT_CellularContext *create_context_impl(ATHandler &at, const char *apn); virtual AT_CellularInformation *open_information_impl(ATHandler &at); + virtual nsapi_error_t set_ready_cb(Callback callback); + public: void handle_urc(FileHandle *fh); }; diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.cpp b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.cpp index 4ab4e07037..6ef1917c12 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.cpp +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.cpp @@ -24,13 +24,3 @@ using namespace mbed; QUECTEL_BG96_CellularPower::QUECTEL_BG96_CellularPower(ATHandler &atHandler) : AT_CellularPower(atHandler) { } - -nsapi_error_t QUECTEL_BG96_CellularPower::set_device_ready_urc_cb(mbed::Callback callback) -{ - return _at.set_urc_handler(DEVICE_READY_URC, callback); -} - -void QUECTEL_BG96_CellularPower::remove_device_ready_urc_cb(mbed::Callback callback) -{ - _at.set_urc_handler(DEVICE_READY_URC, 0); -} diff --git a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.h b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.h index ec7368cbfe..6d3f4077d3 100644 --- a/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.h +++ b/features/cellular/framework/targets/QUECTEL/BG96/QUECTEL_BG96_CellularPower.h @@ -25,10 +25,6 @@ namespace mbed { class QUECTEL_BG96_CellularPower : public AT_CellularPower { public: QUECTEL_BG96_CellularPower(ATHandler &atHandler); - -public: //from CellularPower - virtual nsapi_error_t set_device_ready_urc_cb(mbed::Callback callback); - virtual void remove_device_ready_urc_cb(mbed::Callback callback); }; } // namespace mbed