Merge branch 'patch-2' of github.com:resistancelion/IronOS into rl-menubuttons

This commit is contained in:
Ivan Zorin
2025-02-07 05:21:36 +03:00
11 changed files with 96 additions and 48 deletions

View File

@@ -495,7 +495,7 @@ static __INLINE q63_t mult32x64(q63_t x, q31_t y) { return ((((q63_t)(x & 0x0000
/*
#if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM )
#define __CLZ __clz
#endif
#endif
*/
/* note: function can be removed when all toolchain support __CLZ for Cortex-M0 */
#if defined(ARM_MATH_CM0_FAMILY) && ((defined(__ICCARM__)))

View File

@@ -36,9 +36,9 @@
* \code
* #if defined(__NMSIS_VERSION) && (__NMSIS_VERSION >= 0x00010105)
* #warning "Yes, we have NMSIS 1.1.5 or later"
* #else
* #else
* #error "We need NMSIS 1.1.5 or later!"
* #endif
* #endif
* \endcode
*
* @{

View File

@@ -206,7 +206,7 @@ typedef enum IRQn {
#ifdef NMSIS_ECLIC_VIRTUAL
#ifndef NMSIS_ECLIC_VIRTUAL_HEADER_FILE
#define NMSIS_ECLIC_VIRTUAL_HEADER_FILE "nmsis_eclic_virtual.h"
#endif
#endif
#include NMSIS_ECLIC_VIRTUAL_HEADER_FILE
#else
#define ECLIC_SetCfgNlbits __ECLIC_SetCfgNlbits
@@ -238,7 +238,7 @@ typedef enum IRQn {
#ifdef NMSIS_VECTAB_VIRTUAL
#ifndef NMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define NMSIS_VECTAB_VIRTUAL_HEADER_FILE "nmsis_vectab_virtual.h"
#endif
#endif
#include NMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define ECLIC_SetVector __ECLIC_SetVector

View File

@@ -36,9 +36,9 @@
* \code
* #if defined(__NMSIS_VERSION) && (__NMSIS_VERSION >= 0x00010105)
* #warning "Yes, we have NMSIS 1.1.5 or later"
* #else
* #else
* #error "We need NMSIS 1.1.5 or later!"
* #endif
* #endif
* \endcode
*
* @{

View File

@@ -495,7 +495,7 @@ static __INLINE q63_t mult32x64(q63_t x, q31_t y) { return ((((q63_t)(x & 0x0000
/*
#if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM )
#define __CLZ __clz
#endif
#endif
*/
/* note: function can be removed when all toolchain support __CLZ for Cortex-M0 */
#if defined(ARM_MATH_CM0_FAMILY) && ((defined(__ICCARM__)))

View File

@@ -168,7 +168,7 @@
0x03, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#endif
#endif
const uint8_t buttonB[] = {
// width = 56
@@ -356,7 +356,7 @@
0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x2b, 0x09, 0x07, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x01,
}
};
#else
#else
#if defined(MODEL_TS100) || defined(MODEL_Pinecil) || defined(MODEL_Pinecilv2)
const uint8_t buttonA[] = {
// width = 42
@@ -401,7 +401,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0xd0, 0xc8, 0x08, 0x10, 0x10, 0x10, 0x10,
0x20, 0x20, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#endif
#endif
const uint8_t buttonB[] = {
// width = 42
@@ -578,8 +578,8 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE8, 0x70, 0x7A, 0x5E, 0x8E, 0x1C, 0x30, 0x00, //
0x00, 0x10, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
#endif
};
#endif
};
#endif
// clang-format on
#endif /* FONT_H_ */

View File

@@ -47,36 +47,36 @@ enum SettingsOptions {
CalibrationOffset = 23, // This stores the temperature offset for this tip in the iron.
PowerLimit = 24, // Maximum power iron allowed to output
ReverseButtonTempChangeEnabled = 25, // Change the plus and minus button assigment
ReverseButtonNavEnabled = 26, // Change the A and B button assigment in menus
TempChangeLongStep = 27, // Temperature-change-increment on long button press
TempChangeShortStep = 28, // Temperature-change-increment on short button press
HallEffectSensitivity = 29, // Operating mode of the hall effect sensor
AccelMissingWarningCounter = 30, // Counter of how many times we have warned we cannot detect the accelerometer
PDMissingWarningCounter = 31, // Counter of how many times we have warned we cannot detect the pd interface
UILanguage = 32, // Selected UI Language code, null-terminated *only if* the length is less than 8 chars
PDNegTimeout = 33, // PD timeout in 100ms steps
OLEDInversion = 34, // Invert the colours on the display
OLEDBrightness = 35, // Brightness for the OLED display
LOGOTime = 36, // Duration the logo will be displayed for
CalibrateCJC = 37, // Toggle calibrate CJC at next boot
BluetoothLE = 38, // Toggle BLE if present
USBPDMode = 39, // Toggle PPS & EPR
ProfilePhases = 40, // Number of profile mode phases
ProfilePreheatTemp = 41, // Temperature to preheat to before the first phase
ProfilePreheatSpeed = 42, // Maximum allowed preheat speed in degrees per second
ProfilePhase1Temp = 43, // Temperature to target for the end of phase 1
ProfilePhase1Duration = 44, // Target duration for phase 1
ProfilePhase2Temp = 45, // Temperature to target for the end of phase 2
ProfilePhase2Duration = 46, // Target duration for phase 2
ProfilePhase3Temp = 47, // Temperature to target for the end of phase 3
ProfilePhase3Duration = 48, // Target duration for phase 3
ProfilePhase4Temp = 49, // Temperature to target for the end of phase 4
ProfilePhase4Duration = 50, // Target duration for phase 4
ProfilePhase5Temp = 51, // Temperature to target for the end of phase 5
ProfilePhase5Duration = 52, // Target duration for phase 5
ProfileCooldownSpeed = 53, // Maximum allowed cooldown speed in degrees per second
HallEffectSleepTime = 54, // Seconds (/5) timeout to sleep when hall effect over threshold
SolderingTipType = 55, // Selecting the type of soldering tip fitted
TempChangeLongStep = 26, // Temperature-change-increment on long button press
TempChangeShortStep = 27, // Temperature-change-increment on short button press
HallEffectSensitivity = 28, // Operating mode of the hall effect sensor
AccelMissingWarningCounter = 29, // Counter of how many times we have warned we cannot detect the accelerometer
PDMissingWarningCounter = 30, // Counter of how many times we have warned we cannot detect the pd interface
UILanguage = 31, // Selected UI Language code, null-terminated *only if* the length is less than 8 chars
PDNegTimeout = 32, // PD timeout in 100ms steps
OLEDInversion = 33, // Invert the colours on the display
OLEDBrightness = 34, // Brightness for the OLED display
LOGOTime = 35, // Duration the logo will be displayed for
CalibrateCJC = 36, // Toggle calibrate CJC at next boot
BluetoothLE = 37, // Toggle BLE if present
USBPDMode = 38, // Toggle PPS & EPR
ProfilePhases = 39, // Number of profile mode phases
ProfilePreheatTemp = 40, // Temperature to preheat to before the first phase
ProfilePreheatSpeed = 41, // Maximum allowed preheat speed in degrees per second
ProfilePhase1Temp = 42, // Temperature to target for the end of phase 1
ProfilePhase1Duration = 43, // Target duration for phase 1
ProfilePhase2Temp = 44, // Temperature to target for the end of phase 2
ProfilePhase2Duration = 45, // Target duration for phase 2
ProfilePhase3Temp = 46, // Temperature to target for the end of phase 3
ProfilePhase3Duration = 47, // Target duration for phase 3
ProfilePhase4Temp = 48, // Temperature to target for the end of phase 4
ProfilePhase4Duration = 49, // Target duration for phase 4
ProfilePhase5Temp = 50, // Temperature to target for the end of phase 5
ProfilePhase5Duration = 51, // Target duration for phase 5
ProfileCooldownSpeed = 52, // Maximum allowed cooldown speed in degrees per second
HallEffectSleepTime = 53, // Seconds (/5) timeout to sleep when hall effect over threshold
SolderingTipType = 54, // Selecting the type of soldering tip fitted
ReverseButtonNavEnabled = 55, // Change the A and B button assigment in menus
//
SettingsOptionsLength = 56, // End marker
};

View File

@@ -45,9 +45,13 @@ OperatingMode guiHandleDraw(void) {
OLED::clearScreen(); // Clear ready for render pass
bool d = getSettingValue(SettingsOptions::ReverseButtonNavEnabled);
bool e = getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled);
#ifdef REVERSE_NAV_EVERYWHERE
bool f = currentOperatingMode == OperatingMode::TemperatureAdjust;
// Read button state
ButtonState buttons = getButtonState((e && f) || (d && !e && !f) || (d && e && !f));
#else
ButtonState buttons = getButtonState();
#endif
// Enforce screen on if buttons pressed, movement, hot tip etc
if (buttons != BUTTON_NONE) {
OLED::setDisplayState(OLED::DisplayState::ON);
@@ -113,7 +117,11 @@ OperatingMode guiHandleDraw(void) {
newMode = gui_SolderingSleepingMode(buttons, &context);
break;
case OperatingMode::TemperatureAdjust:
newMode = gui_solderingTempAdjust(buttons, &context);
#ifdef REVERSE_NAV_EVERYWHERE
newMode = gui_solderingTempAdjust(getButtonState(), &context);
#else
newMode = gui_solderingTempAdjust(getButtonState(e), &context);
#endif
break;
case OperatingMode::DebugMenuReadout:
newMode = showDebugMenu(buttons, &context);
@@ -122,7 +130,11 @@ OperatingMode guiHandleDraw(void) {
newMode = performCJCC(buttons, &context);
break;
case OperatingMode::SettingsMenu:
newMode = gui_SettingsMenu(buttons, &context);
#ifdef REVERSE_NAV_EVERYWHERE
newMode = gui_SettingsMenu(getButtonState(), &context);
#else
newMode = gui_SettingsMenu(getButtonState(d), &context);
#endif
break;
case OperatingMode::InitialisationDone:
newMode = handle_post_init_state();

View File

@@ -8,27 +8,43 @@ extern uint8_t disconnectedTipF[sizeof(disconnectedTip)];
void ui_draw_homescreen_simplified(TemperatureType_t tipTemp) {
bool isFlipped = OLED::getRotation();
bool isReverse = getSettingValue(SettingsOptions::ReverseButtonNavEnabled);
bool tipDisconnected = isTipDisconnected();
#ifdef REVERSE_NAV_EVERYWHERE
bool isReverse = getSettingValue(SettingsOptions::ReverseButtonNavEnabled);
#endif
// Flip and switch buttons accordingly
#ifdef REVERSE_NAV_EVERYWHERE
OLED::drawArea(isFlipped ? 68 : 0, 0, 56, 32, isFlipped ? (isReverse ? buttonBF : buttonAF) : (isReverse ? buttonB : buttonA));
OLED::drawArea(isFlipped ? 12 : 58, 0, 56, 32, isFlipped ? (isReverse ? buttonAF : buttonBF) : (isReverse ? buttonA : buttonB));
#else
OLED::drawArea(isFlipped ? 68 : 0, 0, 56, 32, isFlipped ? buttonAF : buttonA);
OLED::drawArea(isFlipped ? 12 : 58, 0, 56, 32, isFlipped ? buttonBF : buttonB);
#endif
if ((tipTemp > 55) || tipDisconnected) {
// draw temp over the start soldering button
// Location changes on screen rotation and due to button swapping
// in right handed mode we want to draw over the first part
#ifdef REVERSE_NAV_EVERYWHERE
OLED::fillArea(isReverse ? (isFlipped ? 26 : 58) : (isFlipped ? 68 : 0), 0, 56, 32, 0); // clear the area
OLED::setCursor(isReverse ? (isFlipped ? 27 : 59) : (isFlipped ? 56 : 0), 0);
#else
OLED::fillArea(isFlipped ? 68 : 0, 0, 56, 32, 0); // clear the area
OLED::setCursor(isFlipped ? 56 : 0, 0);
#endif
// If tip is disconnected draw the notification, otherwise - the temp
if (tipDisconnected) {
// Draw-in the missing tip symbol
#ifdef REVERSE_NAV_EVERYWHERE
if (isReverse) {
OLED::drawArea(isFlipped ? 20 : 54, 0, 56, 32, isFlipped ? disconnectedTipF : disconnectedTip);
} else {
#endif
OLED::drawArea(isFlipped ? 54 : 0, 0, 56, 32, isFlipped ? disconnectedTipF : disconnectedTip);
#ifdef REVERSE_NAV_EVERYWHERE
}
#endif
} else if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) {
ui_draw_tip_temperature(false, FontStyle::LARGE); // Draw-in the temp
}

View File

@@ -7,27 +7,43 @@ extern uint8_t disconnectedTipF[sizeof(disconnectedTip)];
void ui_draw_homescreen_simplified(TemperatureType_t tipTemp) {
bool isFlipped = OLED::getRotation();
bool isReverse = getSettingValue(SettingsOptions::ReverseButtonNavEnabled);
bool tipDisconnected = isTipDisconnected();
#ifdef REVERSE_NAV_EVERYWHERE
bool isReverse = getSettingValue(SettingsOptions::ReverseButtonNavEnabled);
#endif
// Flip and switch buttons accordingly
#ifdef REVERSE_NAV_EVERYWHERE
OLED::drawArea(isFlipped ? 54 : 0, 0, 42, 16, isFlipped ? (isReverse ? buttonBF : buttonAF) : (isReverse ? buttonB : buttonA));
OLED::drawArea(isFlipped ? 12 : 42, 0, 42, 16, isFlipped ? (isReverse ? buttonAF : buttonBF) : (isReverse ? buttonA : buttonB));
#else
OLED::drawArea(isFlipped ? 54 : 0, 0, 42, 16, isFlipped ? buttonAF : buttonA);
OLED::drawArea(isFlipped ? 12 : 42, 0, 42, 16, isFlipped ? buttonBF : buttonB);
#endif
if ((tipTemp > 55) || tipDisconnected) {
// draw temp over the start soldering button
// Location changes on screen rotation and due to button swapping
// in right handed mode we want to draw over the first part
#ifdef REVERSE_NAV_EVERYWHERE
OLED::fillArea(isReverse ? (isFlipped ? 14 : 42) : (isFlipped ? 55 : 0), 0, 41, 16, 0); // clear the area
OLED::setCursor(isReverse ? (isFlipped ? 15 : 43) : (isFlipped ? 56 : 0), 0);
#else
OLED::fillArea(isFlipped ? 55 : 0, 0, 41, 16, 0); // clear the area
OLED::setCursor(isFlipped ? 56 : 0, 0);
#endif
// If tip is disconnected draw the notification, otherwise - the temp
if (tipDisconnected) {
// Draw-in the missing tip symbol
#ifdef REVERSE_NAV_EVERYWHERE
if (isReverse) {
OLED::drawArea(isFlipped ? 12 : 42, 0, 42, 16, isFlipped ? disconnectedTipF : disconnectedTip);
} else {
#endif
OLED::drawArea(isFlipped ? 54 : 0, 0, 42, 16, isFlipped ? disconnectedTipF : disconnectedTip);
#ifdef REVERSE_NAV_EVERYWHERE
}
#endif
} else if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) {
ui_draw_tip_temperature(false, FontStyle::LARGE); // Draw-in the temp
}

View File

@@ -17,7 +17,11 @@ bool shouldShutdown(void) {
}
}
}
if (getButtonState(getSettingValue(SettingsOptions::ReverseButtonNavEnabled)) == BUTTON_B_LONG) { // allow also if back button is pressed long
#ifdef REVERSE_NAV_EVERYWHERE
if (getButtonState(getSettingValue(SettingsOptions::ReverseButtonNavEnabled) == BUTTON_B_LONG) { // allow also if back button is pressed long
#else
if (getButtonState() == BUTTON_B_LONG) { // allow also if back button is pressed long
#endif
return true;
}
return false;