aboutsummaryrefslogtreecommitdiffhomepage
path: root/source/Core/Threads/OperatingModes/DebugMenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Core/Threads/OperatingModes/DebugMenu.cpp')
-rw-r--r--source/Core/Threads/OperatingModes/DebugMenu.cpp187
1 files changed, 89 insertions, 98 deletions
diff --git a/source/Core/Threads/OperatingModes/DebugMenu.cpp b/source/Core/Threads/OperatingModes/DebugMenu.cpp
index adf03ddd..a33e9ff8 100644
--- a/source/Core/Threads/OperatingModes/DebugMenu.cpp
+++ b/source/Core/Threads/OperatingModes/DebugMenu.cpp
@@ -1,111 +1,102 @@
#include "OperatingModes.h"
-extern osThreadId GUITaskHandle;
-extern osThreadId MOVTaskHandle;
-extern osThreadId PIDTaskHandle;
-extern OperatingMode currentMode;
+extern osThreadId GUITaskHandle;
+extern osThreadId MOVTaskHandle;
+extern osThreadId PIDTaskHandle;
-void showDebugMenu(void) {
- currentMode = OperatingMode::debug;
- uint8_t screen = 0;
- ButtonState b;
- for (;;) {
- OLED::clearScreen(); // Ensure the buffer starts clean
- OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)
- OLED::print(SmallSymbolVersionNumber, FontStyle::SMALL); // Print version number
- OLED::setCursor(0, 8); // second line
- OLED::print(DebugMenu[screen], FontStyle::SMALL);
- switch (screen) {
- case 0: // Build Date
- break;
- case 1: // Device ID
- {
- uint64_t id = getDeviceID();
+OperatingMode showDebugMenu(const ButtonState buttons, guiContext *cxt) {
+ OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)
+ OLED::print(SmallSymbolVersionNumber, FontStyle::SMALL); // Print version number
+ OLED::setCursor(0, 8); // second line
+ OLED::print(DebugMenu[cxt->scratch_state.state1], FontStyle::SMALL);
+ switch (cxt->scratch_state.state1) {
+ case 0: // Build Date
+ break;
+ case 1: // Device ID
+ {
+ uint64_t id = getDeviceID();
#ifdef DEVICE_HAS_VALIDATION_CODE
- // If device has validation code; then we want to take over both lines of the screen
- OLED::clearScreen(); // Ensure the buffer starts clean
- OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)
- OLED::print(DebugMenu[screen], FontStyle::SMALL);
- OLED::drawHex(getDeviceValidation(), FontStyle::SMALL, 8);
- OLED::setCursor(0, 8); // second line
+ // If device has validation code; then we want to take over both lines of the screen
+ OLED::clearScreen(); // Ensure the buffer starts clean
+ OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)
+ OLED::print(DebugMenu[cxt->scratch_state.state1], FontStyle::SMALL);
+ OLED::drawHex(getDeviceValidation(), FontStyle::SMALL, 8);
+ OLED::setCursor(0, 8); // second line
#endif
- OLED::drawHex((uint32_t)(id >> 32), FontStyle::SMALL, 8);
- OLED::drawHex((uint32_t)(id & 0xFFFFFFFF), FontStyle::SMALL, 8);
- } break;
- case 2: // ACC Type
- OLED::print(AccelTypeNames[(int)DetectedAccelerometerVersion], FontStyle::SMALL);
- break;
- case 3: // Power Negotiation Status
- OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL);
- break;
- case 4: // Input Voltage
- printVoltage();
- break;
- case 5: // Temp in °C
- OLED::printNumber(TipThermoModel::getTipInC(), 6, FontStyle::SMALL);
- break;
- case 6: // Handle Temp in °C
- OLED::printNumber(getHandleTemperature(0) / 10, 6, FontStyle::SMALL);
- OLED::print(SmallSymbolDot, FontStyle::SMALL);
- OLED::printNumber(getHandleTemperature(0) % 10, 1, FontStyle::SMALL);
- break;
- case 7: // Max Temp Limit in °C
- OLED::printNumber(TipThermoModel::getTipMaxInC(), 6, FontStyle::SMALL);
- break;
- case 8: // System Uptime
- OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 8, FontStyle::SMALL);
- break;
- case 9: // Movement Timestamp
- OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL);
- break;
- case 10: // Tip Resistance in Ω large to pad over so that we cover ID left overs
- OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL);
- OLED::print(SmallSymbolDot, FontStyle::SMALL);
- OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL);
- break;
- case 11: // Raw Tip in µV
- OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 8, FontStyle::SMALL);
- break;
- case 12: // Tip Cold Junction Compensation Offset in µV
- OLED::printNumber(getSettingValue(SettingsOptions::CalibrationOffset), 8, FontStyle::SMALL);
- break;
- case 13: // High Water Mark for GUI
- OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 8, FontStyle::SMALL);
- break;
- case 14: // High Water Mark for Movement Task
- OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 8, FontStyle::SMALL);
- break;
- case 15: // High Water Mark for PID Task
- OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 8, FontStyle::SMALL);
- break;
- break;
+ OLED::drawHex((uint32_t)(id >> 32), FontStyle::SMALL, 8);
+ OLED::drawHex((uint32_t)(id & 0xFFFFFFFF), FontStyle::SMALL, 8);
+ } break;
+ case 2: // ACC Type
+ OLED::print(AccelTypeNames[(int)DetectedAccelerometerVersion], FontStyle::SMALL);
+ break;
+ case 3: // Power Negotiation Status
+ OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL);
+ break;
+ case 4: // Input Voltage
+ printVoltage();
+ break;
+ case 5: // Temp in °C
+ OLED::printNumber(TipThermoModel::getTipInC(), 6, FontStyle::SMALL);
+ break;
+ case 6: // Handle Temp in °C
+ OLED::printNumber(getHandleTemperature(0) / 10, 6, FontStyle::SMALL);
+ OLED::print(SmallSymbolDot, FontStyle::SMALL);
+ OLED::printNumber(getHandleTemperature(0) % 10, 1, FontStyle::SMALL);
+ break;
+ case 7: // Max Temp Limit in °C
+ OLED::printNumber(TipThermoModel::getTipMaxInC(), 6, FontStyle::SMALL);
+ break;
+ case 8: // System Uptime
+ OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 8, FontStyle::SMALL);
+ break;
+ case 9: // Movement Timestamp
+ OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL);
+ break;
+ case 10: // Tip Resistance in Ω
+ OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); // large to pad over so that we cover ID left overs
+ OLED::print(SmallSymbolDot, FontStyle::SMALL);
+ OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL);
+ break;
+ case 11: // Raw Tip in µV
+ OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 8, FontStyle::SMALL);
+ break;
+ case 12: // Tip Cold Junction Compensation Offset in µV
+ OLED::printNumber(getSettingValue(SettingsOptions::CalibrationOffset), 8, FontStyle::SMALL);
+ break;
+ case 13: // High Water Mark for GUI
+ OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 8, FontStyle::SMALL);
+ break;
+ case 14: // High Water Mark for Movement Task
+ OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 8, FontStyle::SMALL);
+ break;
+ case 15: // High Water Mark for PID Task
+ OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 8, FontStyle::SMALL);
+ break;
+ break;
#ifdef HALL_SENSOR
- case 16: // Raw Hall Effect Value
- {
- int16_t hallEffectStrength = getRawHallEffect();
- if (hallEffectStrength < 0) {
- hallEffectStrength = -hallEffectStrength;
- }
- OLED::printNumber(hallEffectStrength, 6, FontStyle::SMALL);
- } break;
+ case 16: // Raw Hall Effect Value
+ {
+ int16_t hallEffectStrength = getRawHallEffect();
+ if (hallEffectStrength < 0) {
+ hallEffectStrength = -hallEffectStrength;
+ }
+ OLED::printNumber(hallEffectStrength, 6, FontStyle::SMALL);
+ } break;
#endif
- default:
- break;
- }
+ default:
+ break;
+ }
- OLED::refresh();
- b = getButtonState();
- if (b == BUTTON_B_SHORT) {
- return;
- } else if (b == BUTTON_F_SHORT) {
- screen++;
+ if (buttons == BUTTON_B_SHORT) {
+ cxt->transitionMode = TransitionAnimation::Down;
+ return OperatingMode::HomeScreen;
+ } else if (buttons == BUTTON_F_SHORT) {
+ cxt->scratch_state.state1++;
#ifdef HALL_SENSOR
- screen = screen % 17;
+ cxt->scratch_state.state1 = cxt->scratch_state.state1 % 17;
#else
- screen = screen % 16;
+ cxt->scratch_state.state1 = cxt->scratch_state.state1 % 16;
#endif
- }
-
- GUIDelay();
}
+ return OperatingMode::DebugMenuReadout; // Stay in debug menu
}