From 98baf20860831957285a6d2acca1680bae15124f Mon Sep 17 00:00:00 2001 From: uvok Date: Sat, 2 Aug 2025 18:56:34 +0200 Subject: Prepare having a display indicator --- include/badge/ble.h | 15 +++++++++++++-- include/badge/display.h | 2 ++ include/badge/indicator.h | 11 +++++++++++ src/ble.cpp | 4 ++-- src/display.cpp | 8 +++++++- src/main.cpp | 11 ++++++++++- 6 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 include/badge/indicator.h diff --git a/include/badge/ble.h b/include/badge/ble.h index 231b103..27b4749 100644 --- a/include/badge/ble.h +++ b/include/badge/ble.h @@ -1,13 +1,24 @@ #pragma once +#include "indicator.h" #include namespace de::uvok::badge { + enum class BleActionType + { + None, + Template, + Indicator + }; + typedef struct { - bool has_data; - uint8_t new_template; + BleActionType action_type; + union { + uint8_t new_template; + DisplayIndicator new_indicator; + }; } ble_poll_result_t; void ble_init(void); diff --git a/include/badge/display.h b/include/badge/display.h index 567eef5..d78c899 100644 --- a/include/badge/display.h +++ b/include/badge/display.h @@ -1,5 +1,6 @@ #pragma once +#include "indicator.h" #include namespace de::uvok::badge @@ -13,4 +14,5 @@ namespace de::uvok::badge uint8_t display_prev(void); uint8_t display_refresh(void); void display_direct(uint8_t num); + void display_indicator(DisplayIndicator); } // namespace de::uvok::badge diff --git a/include/badge/indicator.h b/include/badge/indicator.h new file mode 100644 index 0000000..033a186 --- /dev/null +++ b/include/badge/indicator.h @@ -0,0 +1,11 @@ +#pragma once + +namespace de::uvok::badge +{ + enum class DisplayIndicator + { + None, + Advertising, + Connected + }; +} // namespace de::uvok::badge diff --git a/src/ble.cpp b/src/ble.cpp index ff38b18..a7bb73b 100644 --- a/src/ble.cpp +++ b/src/ble.cpp @@ -127,9 +127,9 @@ de::uvok::badge::ble_poll_result_t de::uvok::badge::ble_poll(void) { const uint8_t val = value_changed.value; value_changed.changed = false; - return (ble_poll_result_t){.has_data = true, .new_template = val}; + return (ble_poll_result_t){.action_type = BleActionType::Template, .new_template = val}; } - return (ble_poll_result_t){.has_data = false}; + return (ble_poll_result_t){.action_type = BleActionType::None}; } void de::uvok::badge::ble_set_image(uint8_t image) diff --git a/src/display.cpp b/src/display.cpp index 74561f3..3a2d99f 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -190,11 +190,17 @@ void de::uvok::badge::display_direct(uint8_t num) { LOG_F("Display direct\n"); if (num >= image_count) - return; + return; displayed = num; displayDo(DISPLAY_FULL); } +void de::uvok::badge::display_indicator(DisplayIndicator indicator) +{ + +} + + /* // -> #include "output_h4x4a.xbm" diff --git a/src/main.cpp b/src/main.cpp index af388bd..0f6af57 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -83,11 +83,20 @@ void loop() { de::uvok::badge::ble_poll_result_t pollres = de::uvok::badge::ble_poll(); - if (pollres.has_data) + switch (pollres.action_type) { + case de::uvok::badge::BleActionType::Template: { + de::uvok::badge::display_direct(pollres.new_template); lastActivity = millis(); } + break; + case de::uvok::badge::BleActionType::Indicator: { + de::uvok::badge::display_indicator(pollres.new_indicator); + lastActivity = millis(); + } + break; + } } if (millis() - lastActivity > SLEEP_TIME && !de::uvok::badge::ble_is_active()) -- cgit v1.2.3