diff --git a/device/bootloader/Source/main.c b/device/bootloader/Source/main.c index 3664914..66edbde 100644 --- a/device/bootloader/Source/main.c +++ b/device/bootloader/Source/main.c @@ -33,6 +33,7 @@ #define BATTERY_UPDATE_DELAY (1000U) #define POSITION_UPDATE_DELAY_MS (100U) ///< 100ms delay between each position update +#define BATTERY_VOLTAGE_FULL (2900) #define BATTERY_VOLTAGE_WARNING (1500) extern volatile __attribute__((section(".shared_data"))) ipc_shared_data_t ipc_shared_data; @@ -51,6 +52,7 @@ typedef struct { static const gpio_t _status_red_led = { .port = DB_RGB_LED_PWM_RED_PORT, .pin = DB_RGB_LED_PWM_RED_PIN }; static const gpio_t _status_green_led = { .port = DB_RGB_LED_PWM_GREEN_PORT, .pin = DB_RGB_LED_PWM_GREEN_PIN }; +static const gpio_t _status_blue_led = { .port = DB_RGB_LED_PWM_BLUE_PORT, .pin = DB_RGB_LED_PWM_BLUE_PIN }; static bootloader_app_data_t _bootloader_vars = { 0 }; @@ -323,6 +325,7 @@ int main(void) { // Status LEDs db_gpio_init(&_status_red_led, DB_GPIO_OUT); db_gpio_init(&_status_green_led, DB_GPIO_OUT); + db_gpio_init(&_status_blue_led, DB_GPIO_OUT); // Periodic Timer and Lighthouse initialization db_timer_init(1); @@ -390,12 +393,18 @@ int main(void) { _bootloader_vars.battery_update = false; uint16_t battery_level = battery_level_read(); ipc_shared_data.battery_level = battery_level; - if (battery_level > BATTERY_VOLTAGE_WARNING) { + if (battery_level > BATTERY_VOLTAGE_FULL) { + db_gpio_clear(&_status_red_led); + db_gpio_clear(&_status_green_led); + db_gpio_toggle(&_status_blue_led); + } else if (battery_level > BATTERY_VOLTAGE_WARNING) { db_gpio_clear(&_status_red_led); db_gpio_toggle(&_status_green_led); + db_gpio_clear(&_status_blue_led); } else { db_gpio_toggle(&_status_red_led); db_gpio_clear(&_status_green_led); + db_gpio_clear(&_status_blue_led); } } diff --git a/swarmit/testbed/controller.py b/swarmit/testbed/controller.py index ffddad5..a69b433 100644 --- a/swarmit/testbed/controller.py +++ b/swarmit/testbed/controller.py @@ -46,6 +46,7 @@ SERIAL_PORT_DEFAULT = get_default_port() BROADCAST_ADDRESS = 0xFFFFFFFFFFFFFFFF VOLTAGE_MAX = 3000 # mV +VOLTAGE_FULL = 2900 # mV VOLTAGE_WARNING = 1500 # mV @@ -119,7 +120,11 @@ def addr_to_hex(addr: int) -> str: def battery_level_color(level: int): - return "green" if level > VOLTAGE_WARNING else "red" + if level > VOLTAGE_FULL: + return "cyan" + if level > VOLTAGE_WARNING: + return "green" + return "red" def generate_status(status_data, devices=[], status_message="found"): diff --git a/swarmit/tests/test_controller.py b/swarmit/tests/test_controller.py index be2b0c8..ad635f3 100644 --- a/swarmit/tests/test_controller.py +++ b/swarmit/tests/test_controller.py @@ -209,7 +209,7 @@ def test_controller_status(capsys): out, _ = capsys.readouterr() assert "No device found" in out - node1 = SwarmitNode(address=0x01, adapter=test_adapter) + node1 = SwarmitNode(address=0x01, adapter=test_adapter, battery=2950) node2 = SwarmitNode(address=0x02, adapter=test_adapter, battery=2100) node3 = SwarmitNode(address=0x03, adapter=test_adapter, battery=1500) nodes = [node1, node2, node3] @@ -222,7 +222,7 @@ def test_controller_status(capsys): assert f"{node1.address:08X}" in out assert f"{node2.address:08X}" in out assert f"{node3.address:08X}" in out - assert f"{2500/1000:.2f}V" in out + assert f"{2950/1000:.2f}V" in out assert f"{2100/1000:.2f}V" in out assert f"{1500/1000:.2f}V" in out