From 9802a622d59799f88449111e075da41334b0aa6f Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 4 Feb 2023 06:33:43 +0800 Subject: [PATCH] Track and return Operating Mode with BLE (#1553) Track and return Operating Mode with BLE --- source/Core/BSP/Pinecilv2/ble_handlers.cpp | 9 +++++++-- source/Core/Threads/OperatingModes/DebugMenu.cpp | 2 ++ source/Core/Threads/OperatingModes/HomeScreen.cpp | 3 +++ source/Core/Threads/OperatingModes/OperatingModes.cpp | 8 ++++++++ source/Core/Threads/OperatingModes/OperatingModes.h | 7 +++++++ source/Core/Threads/OperatingModes/Sleep.cpp | 3 +++ source/Core/Threads/OperatingModes/Soldering.cpp | 4 +++- 7 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 source/Core/Threads/OperatingModes/OperatingModes.cpp diff --git a/source/Core/BSP/Pinecilv2/ble_handlers.cpp b/source/Core/BSP/Pinecilv2/ble_handlers.cpp index 4b6f0995..63726ab8 100644 --- a/source/Core/BSP/Pinecilv2/ble_handlers.cpp +++ b/source/Core/BSP/Pinecilv2/ble_handlers.cpp @@ -20,6 +20,7 @@ #include "log.h" #include "uuid.h" +#include "OperatingModes.h" #include "USBPD.h" #include "ble_characteristics.h" #include "ble_handlers.h" @@ -30,7 +31,8 @@ #include "pd.h" #endif -extern TickType_t lastMovementTime; +extern TickType_t lastMovementTime; +extern OperatingMode currentMode; int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) { if (attr == NULL || attr->uuid == NULL) { @@ -123,6 +125,9 @@ int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_att case 13: // Operating mode // TODO: Needs tracking + temp = currentMode; + memcpy(buf, &temp, sizeof(temp)); + return sizeof(temp); break; case 14: // Estimated watts @@ -237,4 +242,4 @@ int ble_char_write_setting_value_callback(struct bt_conn *conn, const struct bt_ } MSG("Unhandled attr write %d | %d\n", (uint32_t)attr->uuid, uuid_value); return 0; -} \ No newline at end of file +} diff --git a/source/Core/Threads/OperatingModes/DebugMenu.cpp b/source/Core/Threads/OperatingModes/DebugMenu.cpp index e10434f5..22b23bcd 100644 --- a/source/Core/Threads/OperatingModes/DebugMenu.cpp +++ b/source/Core/Threads/OperatingModes/DebugMenu.cpp @@ -2,8 +2,10 @@ extern osThreadId GUITaskHandle; extern osThreadId MOVTaskHandle; extern osThreadId PIDTaskHandle; +extern OperatingMode currentMode; void showDebugMenu(void) { + currentMode = OperatingMode::debug; uint8_t screen = 0; ButtonState b; for (;;) { diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index 926bb1fc..fb7ea23f 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -8,6 +8,7 @@ uint8_t buttonAF[sizeof(buttonA)]; uint8_t buttonBF[sizeof(buttonB)]; uint8_t disconnectedTipF[sizeof(disconnectedTip)]; +extern OperatingMode currentMode; void renderHomeScreenAssets(void) { @@ -29,6 +30,7 @@ void drawHomeScreen(bool buttonLockout) { renderHomeScreenAssets(); for (;;) { + currentMode = OperatingMode::idle; ButtonState buttons = getButtonState(); if (buttons != BUTTON_NONE) { OLED::setDisplayState(OLED::DisplayState::ON); @@ -63,6 +65,7 @@ void drawHomeScreen(bool buttonLockout) { } break; case BUTTON_B_SHORT: + currentMode = OperatingMode::settings; enterSettingsMenu(); // enter the settings menu { OLED::useSecondaryFramebuffer(true); diff --git a/source/Core/Threads/OperatingModes/OperatingModes.cpp b/source/Core/Threads/OperatingModes/OperatingModes.cpp new file mode 100644 index 00000000..c09e71d0 --- /dev/null +++ b/source/Core/Threads/OperatingModes/OperatingModes.cpp @@ -0,0 +1,8 @@ +// +// Created by Thomas White on 3/02/2023. +// + +#include "OperatingModes.h" + +// Global variables +OperatingMode currentMode = OperatingMode::idle; \ No newline at end of file diff --git a/source/Core/Threads/OperatingModes/OperatingModes.h b/source/Core/Threads/OperatingModes/OperatingModes.h index 428457d8..a2525010 100644 --- a/source/Core/Threads/OperatingModes/OperatingModes.h +++ b/source/Core/Threads/OperatingModes/OperatingModes.h @@ -24,6 +24,13 @@ extern "C" { #endif // Exposed modes +enum OperatingMode { + idle = 0, + soldering = 1, + sleeping = 2, + settings = 3, + debug = 4 +}; void performCJCC(void); // Used to calibrate the Cold Junction offset void gui_solderingTempAdjust(void); // For adjusting the setpoint temperature of the iron diff --git a/source/Core/Threads/OperatingModes/Sleep.cpp b/source/Core/Threads/OperatingModes/Sleep.cpp index 4b35e257..09b00b8f 100644 --- a/source/Core/Threads/OperatingModes/Sleep.cpp +++ b/source/Core/Threads/OperatingModes/Sleep.cpp @@ -1,7 +1,10 @@ #include "OperatingModes.h" +extern OperatingMode currentMode; + int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { // Drop to sleep temperature and display until movement or button press + currentMode = OperatingMode::sleeping; for (;;) { // user moved or pressed a button, go back to soldering diff --git a/source/Core/Threads/OperatingModes/Soldering.cpp b/source/Core/Threads/OperatingModes/Soldering.cpp index 269200c3..1a557844 100644 --- a/source/Core/Threads/OperatingModes/Soldering.cpp +++ b/source/Core/Threads/OperatingModes/Soldering.cpp @@ -1,7 +1,8 @@ #include "OperatingModes.h" -extern bool heaterThermalRunaway; +extern bool heaterThermalRunaway; +extern OperatingMode currentMode; void gui_solderingMode(uint8_t jumpToSleep) { /* @@ -20,6 +21,7 @@ void gui_solderingMode(uint8_t jumpToSleep) { */ bool boostModeOn = false; bool buttonsLocked = false; + currentMode = OperatingMode::soldering; if (jumpToSleep) { if (gui_SolderingSleepingMode(jumpToSleep == 2, true) == 1) {