diff --git a/drivers/CoreIMU/include/CoreIMU.hpp b/drivers/CoreIMU/include/CoreIMU.hpp index 4ff5046f0..0d7c38f4a 100644 --- a/drivers/CoreIMU/include/CoreIMU.hpp +++ b/drivers/CoreIMU/include/CoreIMU.hpp @@ -26,7 +26,8 @@ class CoreIMU : public interface::IMU, public interface::DeepSleepEnabled void enableOnDataReadyInterrupt() final; void disableOnDataReadyInterrupt() final; - void enableOnWakeUpInterrupt(std::function const &callback) final; + void registerOnWakeUpCallback(std::function const &callback) final; + void enableOnWakeUpInterrupt() final; void disableOnWakeUpInterrupt() final; void setPowerMode(PowerMode mode) final; diff --git a/drivers/CoreIMU/source/CoreIMU.cpp b/drivers/CoreIMU/source/CoreIMU.cpp index 22ab2887a..4966482e7 100644 --- a/drivers/CoreIMU/source/CoreIMU.cpp +++ b/drivers/CoreIMU/source/CoreIMU.cpp @@ -137,7 +137,12 @@ void CoreIMU::disableDeepSleep() setPowerMode(interface::IMU::PowerMode::Normal); } -void CoreIMU::enableOnWakeUpInterrupt(std::function const &callback) +void CoreIMU::registerOnWakeUpCallback(std::function const &callback) +{ + _on_wake_up_callback = callback; +} + +void CoreIMU::enableOnWakeUpInterrupt() { // ? Set filter and disable user offset lsm6dsox_xl_hp_path_internal_set(&_register_io_function, LSM6DSOX_USE_SLOPE); @@ -157,8 +162,6 @@ void CoreIMU::enableOnWakeUpInterrupt(std::function const &callback) }; lsm6dsox_pin_int1_route_set(&_register_io_function, lsm6dsox_int1); - _on_wake_up_callback = callback; - auto on_wake_up_callback = [this] { _event_queue.call([this] { lsm6dsox_all_sources_t all_source; diff --git a/drivers/CoreIMU/tests/CoreIMU_test.cpp b/drivers/CoreIMU/tests/CoreIMU_test.cpp index 65e79c494..cb2ba2dbc 100644 --- a/drivers/CoreIMU/tests/CoreIMU_test.cpp +++ b/drivers/CoreIMU/tests/CoreIMU_test.cpp @@ -122,15 +122,34 @@ TEST_F(CoreIMUTest, disableDeepSleep) coreimu.disableDeepSleep(); } -TEST_F(CoreIMUTest, enableOnWakeUpInterrupt) +TEST_F(CoreIMUTest, onWakeUpCallback) { - auto mock_wake_up_callback = MockFunction {}; + MockFunction mock_callback; + + EXPECT_CALL(mocki2c, write).Times(AtLeast(1)); + EXPECT_CALL(mocki2c, read).Times(AtLeast(1)); + EXPECT_CALL(mock_callback, Call).Times(AnyNumber()); + + coreimu.registerOnWakeUpCallback(mock_callback.AsStdFunction()); + + auto on_rise_callback = spy_InterruptIn_getRiseCallback(); + on_rise_callback(); +} +TEST_F(CoreIMUTest, emptyOnWakeUpCallback) +{ + coreimu.registerOnWakeUpCallback({}); + + auto on_rise_callback = spy_InterruptIn_getRiseCallback(); + on_rise_callback(); +} + +TEST_F(CoreIMUTest, enableOnWakeUpInterrupt) +{ EXPECT_CALL(mocki2c, write).Times(AtLeast(1)); EXPECT_CALL(mocki2c, read).Times(AtLeast(1)); - EXPECT_CALL(mock_wake_up_callback, Call).Times(AnyNumber()); - coreimu.enableOnWakeUpInterrupt(mock_wake_up_callback.AsStdFunction()); + coreimu.enableOnWakeUpInterrupt(); } TEST_F(CoreIMUTest, disableOnWakeUpInterrupt) @@ -151,6 +170,7 @@ TEST_F(CoreIMUTest, switchCallbacks) EXPECT_CALL(mocki2c, read).Times(AnyNumber()); coreimu.registerOnDataReadyCallback(mock_data_available_callback.AsStdFunction()); + coreimu.registerOnWakeUpCallback(mock_wake_up_callback.AsStdFunction()); { // Enable Data Available @@ -174,7 +194,7 @@ TEST_F(CoreIMUTest, switchCallbacks) // Enable Wake Up EXPECT_CALL(mock_data_available_callback, Call).Times(0); EXPECT_CALL(mock_wake_up_callback, Call).Times(AnyNumber()); - coreimu.enableOnWakeUpInterrupt(mock_wake_up_callback.AsStdFunction()); + coreimu.enableOnWakeUpInterrupt(); on_rise_callback = spy_InterruptIn_getRiseCallback(); on_rise_callback(); } diff --git a/include/interface/drivers/IMU.hpp b/include/interface/drivers/IMU.hpp index bcbdcbde7..b255cb2ba 100644 --- a/include/interface/drivers/IMU.hpp +++ b/include/interface/drivers/IMU.hpp @@ -54,8 +54,9 @@ class IMU virtual void enableOnDataReadyInterrupt() = 0; virtual void disableOnDataReadyInterrupt() = 0; - virtual void enableOnWakeUpInterrupt(std::function const &callback) = 0; - virtual void disableOnWakeUpInterrupt() = 0; + virtual void registerOnWakeUpCallback(std::function const &callback) = 0; + virtual void enableOnWakeUpInterrupt() = 0; + virtual void disableOnWakeUpInterrupt() = 0; virtual void setPowerMode(PowerMode) = 0; }; diff --git a/tests/unit/mocks/mocks/leka/IMU.h b/tests/unit/mocks/mocks/leka/IMU.h index 828200469..e29f4442c 100644 --- a/tests/unit/mocks/mocks/leka/IMU.h +++ b/tests/unit/mocks/mocks/leka/IMU.h @@ -19,7 +19,8 @@ class IMU : public interface::IMU MOCK_METHOD(void, enableOnDataReadyInterrupt, (), (override)); MOCK_METHOD(void, disableOnDataReadyInterrupt, (), (override)); - void enableOnWakeUpInterrupt(std::function const &cb) override { wake_up_callback = cb; } + void registerOnWakeUpCallback(std::function const &cb) override { wake_up_callback = cb; } + MOCK_METHOD(void, enableOnWakeUpInterrupt, (), (override)); MOCK_METHOD(void, disableOnWakeUpInterrupt, (), (override)); void call_data_ready_callback(const SensorData &data) { data_ready_callback(data); }