From 467f7dd2b9c949e42a796ec9749a6604bf8d1052 Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Thu, 28 Apr 2022 11:41:03 +0200 Subject: [PATCH 1/3] :truck: (rc): Rename onStartChargingBehavior into onChargingBehavior --- libs/RobotKit/include/RobotController.h | 4 ++-- .../RobotController_test_registerEvents.cpp | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/RobotKit/include/RobotController.h b/libs/RobotKit/include/RobotController.h index e4406bf3e4..be43f25c4c 100644 --- a/libs/RobotKit/include/RobotController.h +++ b/libs/RobotKit/include/RobotController.h @@ -123,7 +123,7 @@ class RobotController : public interface::RobotController return is_charging; } - void onStartChargingBehavior(uint8_t level) + void onChargingBehavior(uint8_t level) { _service_battery.setBatteryLevel(level); @@ -145,7 +145,7 @@ class RobotController : public interface::RobotController using namespace std::chrono_literals; using namespace system::robot::sm; - _battery_kit.onDataUpdated([this](uint8_t level) { onStartChargingBehavior(level); }); + _battery_kit.onDataUpdated([this](uint8_t level) { onChargingBehavior(level); }); _lcd.turnOn(); auto on_charging_start_timeout = [this] { diff --git a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp index b79f0ca440..2ab48efbe3 100644 --- a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp +++ b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp @@ -103,7 +103,7 @@ TEST_F(RobotControllerTest, registerEventsBatteryIsCharging) rc.registerEvents(); } -TEST_F(RobotControllerTest, onStartChargingBehaviorLevelBelow25) +TEST_F(RobotControllerTest, onChargingBehaviorLevelBelow25) { auto battery_level = 0; @@ -111,10 +111,10 @@ TEST_F(RobotControllerTest, onStartChargingBehaviorLevelBelow25) // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); - rc.onStartChargingBehavior(battery_level); + rc.onChargingBehavior(battery_level); } -TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove5Below25) +TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove5Below25) { auto battery_level = 22; @@ -122,10 +122,10 @@ TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove5Below25) // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); - rc.onStartChargingBehavior(battery_level); + rc.onChargingBehavior(battery_level); } -TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove25Below50) +TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove25Below50) { auto battery_level = 42; @@ -133,10 +133,10 @@ TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove25Below50) // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); - rc.onStartChargingBehavior(battery_level); + rc.onChargingBehavior(battery_level); } -TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove50Below75) +TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove50Below75) { auto battery_level = 66; @@ -144,10 +144,10 @@ TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove50Below75) // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); - rc.onStartChargingBehavior(battery_level); + rc.onChargingBehavior(battery_level); } -TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove75) +TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove75) { auto battery_level = 90; @@ -155,7 +155,7 @@ TEST_F(RobotControllerTest, onStartChargingBehaviorLevelAbove75) // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); - rc.onStartChargingBehavior(battery_level); + rc.onChargingBehavior(battery_level); } TEST_F(RobotControllerTest, onBleConnection) From 1e4e6626473d44eae5c079b4afd0661bb78fe859 Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Thu, 28 Apr 2022 15:21:56 +0200 Subject: [PATCH 2/3] :recycle: (rc): Set onDataUpdated definition in 1 place instead of 3 --- libs/RobotKit/include/RobotController.h | 18 +++++++++--------- libs/RobotKit/tests/RobotController_test.h | 1 + .../RobotController_test_registerEvents.cpp | 15 ++++----------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/libs/RobotKit/include/RobotController.h b/libs/RobotKit/include/RobotController.h index be43f25c4c..ef6e4f469a 100644 --- a/libs/RobotKit/include/RobotController.h +++ b/libs/RobotKit/include/RobotController.h @@ -125,8 +125,6 @@ class RobotController : public interface::RobotController void onChargingBehavior(uint8_t level) { - _service_battery.setBatteryLevel(level); - if (level < 5) { _behaviorkit.chargingZero(); } else if (level < 25) { @@ -145,7 +143,6 @@ class RobotController : public interface::RobotController using namespace std::chrono_literals; using namespace system::robot::sm; - _battery_kit.onDataUpdated([this](uint8_t level) { onChargingBehavior(level); }); _lcd.turnOn(); auto on_charging_start_timeout = [this] { @@ -157,11 +154,7 @@ class RobotController : public interface::RobotController _timeout.start(1min); } - void stopChargingBehavior() final - { - _timeout.stop(); - _battery_kit.onDataUpdated([this](uint8_t level) { _service_battery.setBatteryLevel(level); }); - } + void stopChargingBehavior() final { _timeout.stop(); } void startConnectionBehavior() final { @@ -222,7 +215,14 @@ class RobotController : public interface::RobotController // Setup callbacks for monitoring - _battery_kit.onDataUpdated([this](uint8_t level) { _service_battery.setBatteryLevel(level); }); + _battery_kit.onDataUpdated([this](uint8_t level) { + auto is_charging = _battery.isCharging(); + + _service_battery.setBatteryLevel(level); + if (is_charging) { + onChargingBehavior(level); + } + }); auto on_low_battery = [this] { if (!_battery.isCharging()) { diff --git a/libs/RobotKit/tests/RobotController_test.h b/libs/RobotKit/tests/RobotController_test.h index defdf511b3..28aeb0177f 100644 --- a/libs/RobotKit/tests/RobotController_test.h +++ b/libs/RobotKit/tests/RobotController_test.h @@ -149,6 +149,7 @@ class RobotControllerTest : public testing::Test Sequence on_data_updated_sequence; EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence); + EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence); EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); EXPECT_CALL(timeout, onTimeout).WillOnce(GetCallback(&on_sleep_timeout)); diff --git a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp index 2ab48efbe3..61a83453bf 100644 --- a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp +++ b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp @@ -18,7 +18,8 @@ TEST_F(RobotControllerTest, registerEventsBatteryIsNotCharging) EXPECT_CALL(battery, level).InSequence(on_low_battery_sequence); Sequence on_data_updated_sequence; - EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence); + EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence).WillOnce(Return(false)); + EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence); // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); @@ -67,7 +68,9 @@ TEST_F(RobotControllerTest, registerEventsBatteryIsCharging) Sequence on_data_updated_sequence; EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence); + EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence).WillOnce(Return(true)); EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); + EXPECT_CALL(mock_videokit, displayImage).InSequence(on_data_updated_sequence); EXPECT_CALL(timeout, onTimeout); @@ -108,8 +111,6 @@ TEST_F(RobotControllerTest, onChargingBehaviorLevelBelow25) auto battery_level = 0; EXPECT_CALL(mock_videokit, displayImage(std::filesystem::path {"/fs/images/low_battery.jpg"})).Times(1); - // TODO: Specify which BLE service and what is expected if necessary - EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); rc.onChargingBehavior(battery_level); } @@ -119,8 +120,6 @@ TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove5Below25) auto battery_level = 22; EXPECT_CALL(mock_videokit, displayImage(std::filesystem::path {"/fs/images/battery_red.jpg"})).Times(1); - // TODO: Specify which BLE service and what is expected if necessary - EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); rc.onChargingBehavior(battery_level); } @@ -130,8 +129,6 @@ TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove25Below50) auto battery_level = 42; EXPECT_CALL(mock_videokit, displayImage(std::filesystem::path {"/fs/images/battery_yellow_2.jpg"})).Times(1); - // TODO: Specify which BLE service and what is expected if necessary - EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); rc.onChargingBehavior(battery_level); } @@ -141,8 +138,6 @@ TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove50Below75) auto battery_level = 66; EXPECT_CALL(mock_videokit, displayImage(std::filesystem::path {"/fs/images/battery_green_3.jpg"})).Times(1); - // TODO: Specify which BLE service and what is expected if necessary - EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); rc.onChargingBehavior(battery_level); } @@ -152,8 +147,6 @@ TEST_F(RobotControllerTest, onChargingBehaviorLevelAbove75) auto battery_level = 90; EXPECT_CALL(mock_videokit, displayImage(std::filesystem::path {"/fs/images/battery_green_4.jpg"})).Times(1); - // TODO: Specify which BLE service and what is expected if necessary - EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)); rc.onChargingBehavior(battery_level); } From 63d19b6b2d305ce11c2561ec47640180f0a8eb2c Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Thu, 28 Apr 2022 15:41:22 +0200 Subject: [PATCH 3/3] :sparkles: (rc): Update advertising data in BLE with battery and charging status --- libs/RobotKit/include/RobotController.h | 5 +++++ libs/RobotKit/tests/RobotController_test.h | 1 + libs/RobotKit/tests/RobotController_test_registerEvents.cpp | 2 ++ 3 files changed, 8 insertions(+) diff --git a/libs/RobotKit/include/RobotController.h b/libs/RobotKit/include/RobotController.h index ef6e4f469a..e45844460b 100644 --- a/libs/RobotKit/include/RobotController.h +++ b/libs/RobotKit/include/RobotController.h @@ -218,6 +218,11 @@ class RobotController : public interface::RobotController _battery_kit.onDataUpdated([this](uint8_t level) { auto is_charging = _battery.isCharging(); + auto advertising_data = _ble.getAdvertisingData(); + advertising_data.battery = level; + advertising_data.is_charging = static_cast(is_charging); + _ble.setAdvertisingData(advertising_data); + _service_battery.setBatteryLevel(level); if (is_charging) { onChargingBehavior(level); diff --git a/libs/RobotKit/tests/RobotController_test.h b/libs/RobotKit/tests/RobotController_test.h index 28aeb0177f..596f6a692c 100644 --- a/libs/RobotKit/tests/RobotController_test.h +++ b/libs/RobotKit/tests/RobotController_test.h @@ -150,6 +150,7 @@ class RobotControllerTest : public testing::Test Sequence on_data_updated_sequence; EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence); EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence); + EXPECT_CALL(mbed_mock_gap, setAdvertisingPayload).InSequence(on_data_updated_sequence); EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); EXPECT_CALL(timeout, onTimeout).WillOnce(GetCallback(&on_sleep_timeout)); diff --git a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp index 61a83453bf..a2addb3e6b 100644 --- a/libs/RobotKit/tests/RobotController_test_registerEvents.cpp +++ b/libs/RobotKit/tests/RobotController_test_registerEvents.cpp @@ -20,6 +20,7 @@ TEST_F(RobotControllerTest, registerEventsBatteryIsNotCharging) Sequence on_data_updated_sequence; EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence).WillOnce(Return(false)); EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence); + EXPECT_CALL(mbed_mock_gap, setAdvertisingPayload).InSequence(on_data_updated_sequence); // TODO: Specify which BLE service and what is expected if necessary EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); @@ -69,6 +70,7 @@ TEST_F(RobotControllerTest, registerEventsBatteryIsCharging) Sequence on_data_updated_sequence; EXPECT_CALL(battery, level).InSequence(on_data_updated_sequence); EXPECT_CALL(battery, isCharging).InSequence(on_data_updated_sequence).WillOnce(Return(true)); + EXPECT_CALL(mbed_mock_gap, setAdvertisingPayload).InSequence(on_data_updated_sequence); EXPECT_CALL(mbed_mock_gatt, write(_, _, _, _)).InSequence(on_data_updated_sequence); EXPECT_CALL(mock_videokit, displayImage).InSequence(on_data_updated_sequence);