From d9c88c9e71a6040c24f87a760f17eebaed090953 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" <5425387+Ralim@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:06:26 +1000 Subject: [PATCH] Sequre T55 Support (#1928) * Add T55 to build * Approx in T55 * Update ThermoModel.cpp * use PT1000 lookup logic * Handle no accelerometer * Setup for temp reading * Lock max temp * No movement pin * Compensate for heater coil resistance change * Fix min offset for T55 * Fixup font for T55 * Update draw_profile_advanced.cpp * Update draw_temperature_change.cpp --------- Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- .github/workflows/push.yml | 1 + Makefile | 2 +- README.md | 1 + source/Core/BSP/Sequre/BSP.cpp | 28 ++++- source/Core/BSP/Sequre/Pins.h | 30 +++++- source/Core/BSP/Sequre/Setup.cpp | 20 +++- source/Core/BSP/Sequre/ThermoModel.cpp | 74 +++++++++++++ source/Core/BSP/Sequre/configuration.h | 102 +++++++++++++++--- source/Core/BSP/Sequre/stm32f1xx_hal_msp.c | 3 + source/Core/Drivers/Font.h | 28 ++++- source/Core/Src/Settings.cpp | 2 +- source/Core/Threads/MOVThread.cpp | 8 +- .../mono_128x32/draw_profile_advanced.cpp | 4 +- .../mono_128x32/draw_temperature_change.cpp | 2 +- .../Threads/UI/logic/ShowStartupWarnings.cpp | 5 + source/Makefile | 5 +- source/build.sh | 2 +- 17 files changed, 283 insertions(+), 34 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 6086382fd8..e21305a47c 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -25,6 +25,7 @@ jobs: "Pinecilv2", "S60", "S60P", + "T55", "TS101", ] fail-fast: true diff --git a/Makefile b/Makefile index 20b009b5f5..08c65515d1 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ DOCKER_CMD=$(DOCKER_BIN) -f $(DOCKER_YML) run --rm builder MKDOCS_YML=$(CURDIR)/scripts/IronOS-mkdocs.yml # supported models -MODELS=TS100 TS80 TS80P Pinecil MHP30 Pinecilv2 S60 TS101 S60P # target names & dir names +MODELS=TS100 TS80 TS80P Pinecil MHP30 Pinecilv2 S60 TS101 S60P T55 # target names & dir names MODELS_ML=Pinecil Pinecilv2 # target names MODELS_MULTILANG=Pinecil_multi-lang Pinecilv2_multi-lang # dir names diff --git a/README.md b/README.md index 3d2f5ab287..29ec302082 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ _This firmware does **NOT** support the USB port while running for changing sett | Miniware TS101 | ✔️ | ❌ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ | Full OLED resolution not yet supported. | | Sequre S60 | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. | | Sequre S60P | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. | +| Sequre T55 | ❌ | ❌ | ✔️ | ❌ | ❌ | N/A | ✔️ | Full OLED resolution not yet supported. | | Miniware TS80P | ❌ | ✔️ | ✔️ | ❌ | ❌ | N/A | ✔️ | | | Miniware TS100 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌\*\* | | | Miniware TS80 | ❌ | ✔️ | ❌ | ❌ | ❌ | N/A | ❌\*\*\* | | diff --git a/source/Core/BSP/Sequre/BSP.cpp b/source/Core/BSP/Sequre/BSP.cpp index ebf46e7f8d..16d6dfd611 100644 --- a/source/Core/BSP/Sequre/BSP.cpp +++ b/source/Core/BSP/Sequre/BSP.cpp @@ -53,6 +53,7 @@ static const uint16_t NTCHandleLookup[] = { }; uint16_t getHandleTemperature(uint8_t sample) { +#ifdef TMP36_ADC1_CHANNEL int32_t result = getADCHandleTemp(sample); // S60 uses 10k NTC resistor // For now not doing interpolation @@ -62,6 +63,9 @@ uint16_t getHandleTemperature(uint8_t sample) { } } return 45 * 10; +#else + return 0; // Not implemented +#endif } uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) { @@ -242,7 +246,25 @@ uint64_t getDeviceID() { return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32); } -uint8_t getTipResistanceX10() { return TIP_RESISTANCE; } +uint8_t getTipResistanceX10() { +#ifdef COPPER_HEATER_COIL + + // TODO + //! Warning, must never return 0. + TemperatureType_t measuredTemperature = TipThermoModel::getTipInC(false); + if (measuredTemperature < 25) { + return 50; // Start assuming under spec to soft-start + } + + // Assuming a temperature rise of 0.00393 per deg c over 20C + + uint32_t scaler = 393 * (measuredTemperature - 20); + + return TIP_RESISTANCE + ((TIP_RESISTANCE * scaler) / 100000); +#else + return TIP_RESISTANCE; +#endif +} bool isTipShorted() { return false; } uint8_t preStartChecksDone() { return 1; } @@ -252,3 +274,7 @@ uint16_t getTipInertia() { return TIP_THERMAL_INERTIA; } void setBuzzer(bool on) {} void showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); } + +#ifdef CUSTOM_MAX_TEMP_C +TemperatureType_t getCustomTipMaxInC() { return MAX_TEMP_C; } +#endif \ No newline at end of file diff --git a/source/Core/BSP/Sequre/Pins.h b/source/Core/BSP/Sequre/Pins.h index 24b65bb528..f00be339fd 100644 --- a/source/Core/BSP/Sequre/Pins.h +++ b/source/Core/BSP/Sequre/Pins.h @@ -69,5 +69,33 @@ #define MOVEMENT_Pin GPIO_PIN_3 #define MOVEMENT_GPIO_Port GPIOA -#endif +#endif // MODEL_S60P + +#ifdef MODEL_T55 + +#define KEY_A_Pin GPIO_PIN_1 +#define KEY_A_GPIO_Port GPIOB +// No cold junction compensation as its a PT1000 +#define TIP_TEMP_Pin GPIO_PIN_5 +#define TIP_TEMP_GPIO_Port GPIOA +#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_5 +#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_5 + +#define VIN_Pin GPIO_PIN_4 +#define VIN_GPIO_Port GPIOA +#define VIN_ADC1_CHANNEL ADC_CHANNEL_4 +#define VIN_ADC2_CHANNEL ADC_CHANNEL_4 +#define KEY_B_Pin GPIO_PIN_0 +#define KEY_B_GPIO_Port GPIOB + +#define PWM_Out_Pin GPIO_PIN_8 +#define PWM_Out_GPIO_Port GPIOB +#define PWM_Out_CHANNEL TIM_CHANNEL_3 // Timer 4; channel 3 +#define SCL2_Pin GPIO_PIN_6 +#define SCL2_GPIO_Port GPIOB +#define SDA2_Pin GPIO_PIN_7 +#define SDA2_GPIO_Port GPIOB + +#endif // MODEL_T55 + #endif /* BSP_MINIWARE_PINS_H_ */ diff --git a/source/Core/BSP/Sequre/Setup.cpp b/source/Core/BSP/Sequre/Setup.cpp index a5d5845ea1..9546ab3e80 100644 --- a/source/Core/BSP/Sequre/Setup.cpp +++ b/source/Core/BSP/Sequre/Setup.cpp @@ -51,7 +51,8 @@ void Setup_HAL() { HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings - // Setup movement pin +// Setup movement pin +#ifdef MOVEMENT_Pin { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = MOVEMENT_Pin; @@ -60,9 +61,11 @@ void Setup_HAL() { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(MOVEMENT_GPIO_Port, &GPIO_InitStruct); } +#endif } uint16_t getADCHandleTemp(uint8_t sample) { +#ifdef TMP36_ADC1_CHANNEL static history filter = {{0}, 0, 0}; if (sample) { uint32_t sum = 0; @@ -72,6 +75,9 @@ uint16_t getADCHandleTemp(uint8_t sample) { filter.update(sum); } return filter.average() >> 1; +#else + return 0; +#endif } uint16_t getADCVin(uint8_t sample) { @@ -165,13 +171,19 @@ static void MX_ADC1_Init(void) { hadc1.Init.NbrOfConversion = 1; HAL_ADC_Init(&hadc1); - /**Configure Regular Channel - */ +/**Configure Regular Channel + */ +#ifdef TMP36_ADC1_CHANNEL sConfig.Channel = TMP36_ADC1_CHANNEL; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&hadc1, &sConfig); - +#else + sConfig.Channel = VIN_ADC1_CHANNEL; // Filler + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; + HAL_ADC_ConfigChannel(&hadc1, &sConfig); +#endif /**Configure Injected Channel */ // F in = 10.66 MHz diff --git a/source/Core/BSP/Sequre/ThermoModel.cpp b/source/Core/BSP/Sequre/ThermoModel.cpp index 90c12ab107..9fe3859758 100644 --- a/source/Core/BSP/Sequre/ThermoModel.cpp +++ b/source/Core/BSP/Sequre/ThermoModel.cpp @@ -8,4 +8,78 @@ #include "Utils.h" #include "configuration.h" +#ifdef TEMP_uV_LOOKUP_PT1000 +// Use https://br.flukecal.com/pt100-table-generator to make table for resistance to temp +const int32_t ohmsToDegC[] = { + // + // Resistance (ohms x10) Temperature (Celsius) + + 10000, 0, // + 10390, 10, // + 10779, 20, // + 11167, 30, // + 11554, 40, // + 11940, 50, // + 12324, 60, // + 12708, 70, // + 13090, 80, // + 13471, 90, // + 13851, 100, // + 14229, 110, // + 14607, 120, // + 14983, 130, // + 15358, 140, // + 15733, 150, // + 16105, 160, // + 16477, 170, // + 16848, 180, // + 17217, 190, // + 17586, 200, // + 17953, 210, // + 18319, 220, // + 18684, 230, // + 19047, 240, // + 19410, 250, // + 19771, 260, // + 20131, 270, // + 20490, 280, // + 20848, 290, // + 21205, 300, // + 21561, 310, // + 21915, 320, // + 22268, 330, // + 22621, 340, // + 22972, 350, // + 23321, 360, // + 23670, 370, // + 24018, 380, // + 24364, 390, // + 24709, 400, // + 25053, 410, // + 25396, 420, // + 25738, 430, // + 26078, 440, // + 26418, 450, // + 26756, 460, // + 27093, 470, // + 27429, 480, // + 27764, 490, // + 28098, 500, // + +}; + +TemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { + + // 3.3V -> 1K ->(ADC) <- PT1000 <- GND + // PT100 = (adc*r1)/(3.3V-adc) + uint32_t reading_mv = tipuVDelta / 1000; + uint32_t resistance_x10 = (reading_mv * 10000) / (3300 - reading_mv); + + return Utils::InterpolateLookupTable(ohmsToDegC, sizeof(ohmsToDegC) / (2 * sizeof(int32_t)), resistance_x10); +} + +#endif // TEMP_uV_LOOKUP_PT1000 + +#ifdef TEMP_uV_LOOKUP_S60 TemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return (tipuVDelta * 50) / 485; } +#endif // TEMP_uV_LOOKUP_S60 diff --git a/source/Core/BSP/Sequre/configuration.h b/source/Core/BSP/Sequre/configuration.h index e1e572f751..fca1fb71e5 100644 --- a/source/Core/BSP/Sequre/configuration.h +++ b/source/Core/BSP/Sequre/configuration.h @@ -100,9 +100,6 @@ #define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 -#define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 10 - #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define TEMPERATURE_INF 0 // default to 0 @@ -120,22 +117,12 @@ // Vin_max = (3.3*(r1+r2))/(r2) // vdiv = (32768*4)/(vin_max*10) -#if defined(MODEL_S60) + defined(MODEL_S60P) == 0 +#if defined(MODEL_S60) + defined(MODEL_S60P) + defined(MODEL_T55) == 0 #error "No model defined!" #endif #define NEEDS_VBUS_PROBE 0 -#define MIN_CALIBRATION_OFFSET 100 // Min value for calibration -#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C -#define PID_TIM_HZ (8) // Tick rate of the PID loop -#define MAX_TEMP_C 450 // Max soldering temp selectable °C -#define MAX_TEMP_F 850 // Max soldering temp selectable °F -#define MIN_TEMP_C 10 // Min soldering temp selectable °C -#define MIN_TEMP_F 60 // Min soldering temp selectable °F -#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C -#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F - #ifdef MODEL_S60 #define VOLTAGE_DIV 460 // Default divider scaler #define CALIBRATION_OFFSET 200 // Default adc offset in uV @@ -145,7 +132,9 @@ #define POWER_LIMIT_STEPS 5 #define OP_AMP_GAIN_STAGE 536 #define TEMP_uV_LOOKUP_S60 -#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate +#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate +#define THERMAL_RUNAWAY_TIME_SEC 20 +#define THERMAL_RUNAWAY_TEMP_C 10 #define HARDWARE_MAX_WATTAGE_X10 600 @@ -177,7 +166,9 @@ #define POWER_LIMIT_STEPS 5 #define OP_AMP_GAIN_STAGE 536 #define TEMP_uV_LOOKUP_S60 -#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate +#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate +#define THERMAL_RUNAWAY_TIME_SEC 20 +#define THERMAL_RUNAWAY_TEMP_C 10 #define HARDWARE_MAX_WATTAGE_X10 600 @@ -200,7 +191,86 @@ #define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place #endif /* S60P */ +#ifdef MODEL_T55 +// T55 Hotplate is similar to Project-Argon, PCB heater + PT100 sensor but no current rolloff compensation +// Uses a HUB238 for PD negotiation like the S60, also has a buzzer. Feels like designed to share with S60 +// Hold back left button for "DFU" + +#define SOLDERING_TEMP 200 // Default soldering temp is 200.0 °C +#define VOLTAGE_DIV 460 // Default divider scaler +#define MIN_CALIBRATION_OFFSET 0 // Should be 0 +#define CALIBRATION_OFFSET 0 // Default adc offset in uV +#define PID_POWER_LIMIT 70 // Sets the max pwm power limit +#define POWER_LIMIT 0 // 0 watts default limit +#define MAX_POWER_LIMIT 70 +#define POWER_LIMIT_STEPS 5 +#define OP_AMP_GAIN_STAGE 1 +#define TEMP_uV_LOOKUP_PT1000 +#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate +#define NO_DISPLAY_ROTATE // Disable OLED rotation by accel +#define MAX_TEMP_C 350 // Max soldering temp selectable °C +#define MAX_TEMP_F 660 // Max soldering temp selectable °F +#define MIN_TEMP_C 10 // Min soldering temp selectable °C +#define MIN_TEMP_F 50 // Min soldering temp selectable °F +#define MIN_BOOST_TEMP_C 150 // The min settable temp for boost mode °C +#define MIN_BOOST_TEMP_F 300 // The min settable temp for boost mode °F +#define NO_SLEEP_MODE +#define HARDWARE_MAX_WATTAGE_X10 850 + +#define TIP_THERMAL_MASS 30 // X10 watts to raise 1 deg C in 1 second +#define TIP_THERMAL_INERTIA 10 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive +#define THERMAL_RUNAWAY_TIME_SEC 60 +#define THERMAL_RUNAWAY_TEMP_C 3 + +#define COPPER_HEATER_COIL 1 // Have a heater coil that changes resistance on us +#define TIP_RESISTANCE 52 // PCB heater, measured at ~19C. Will shift by temp a decent amount +#define CUSTOM_MAX_TEMP_C +#define PROFILE_SUPPORT 1 // Soldering Profiles +#define OLED_128x32 1 // Larger OLED +#define OLED_FLIP 1 // Mounted upside down +#define POW_PD_EXT 1 // Older HUB238 +#define USB_PD_EPR_WATTAGE 0 /*No EPR*/ +#define DEBUG_POWER_MENU_BUTTON_B 1 +#define HAS_POWER_DEBUG_MENU +#define NO_ACCEL 1 +#define I2C_SOFT_BUS_2 // For now we are doing software I2C to get around hardware chip issues +#define OLED_I2CBB2 +#define FILTER_DISPLAYED_TIP_TEMP 16 // Filtering for GUI display + +#define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place +#endif /* T55 */ + #define FLASH_LOGOADDR (0x08000000 + (62 * 1024)) #define SETTINGS_START_PAGE (0x08000000 + (63 * 1024)) +// Defaults + +#ifndef MIN_CALIBRATION_OFFSET +#define MIN_CALIBRATION_OFFSET 100 // Min value for calibration +#endif +#ifndef SOLDERING_TEMP +#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C +#endif +#ifndef PID_TIM_HZ +#define PID_TIM_HZ (8) // Tick rate of the PID loop +#endif +#ifndef MAX_TEMP_C +#define MAX_TEMP_C 450 // Max soldering temp selectable °C +#endif +#ifndef MAX_TEMP_F +#define MAX_TEMP_F 850 // Max soldering temp selectable °F +#endif +#ifndef MIN_TEMP_C +#define MIN_TEMP_C 10 // Min soldering temp selectable °C +#endif +#ifndef MIN_TEMP_F +#define MIN_TEMP_F 60 // Min soldering temp selectable °F +#endif +#ifndef MIN_BOOST_TEMP_C +#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C +#endif +#ifndef MIN_BOOST_TEMP_F +#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F +#endif + #endif /* CONFIGURATION_H_ */ diff --git a/source/Core/BSP/Sequre/stm32f1xx_hal_msp.c b/source/Core/BSP/Sequre/stm32f1xx_hal_msp.c index 6610a0d4fd..9a19a7c581 100644 --- a/source/Core/BSP/Sequre/stm32f1xx_hal_msp.c +++ b/source/Core/BSP/Sequre/stm32f1xx_hal_msp.c @@ -56,12 +56,15 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { PB0 ------> ADC2_IN8 PB1 ------> ADC2_IN9 */ + GPIO_InitStruct.Pin = TIP_TEMP_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct); +#ifdef TMP36_INPUT_Pin GPIO_InitStruct.Pin = TMP36_INPUT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct); +#endif GPIO_InitStruct.Pin = VIN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct); diff --git a/source/Core/Drivers/Font.h b/source/Core/Drivers/Font.h index 347143da9b..0d0943ff34 100644 --- a/source/Core/Drivers/Font.h +++ b/source/Core/Drivers/Font.h @@ -93,8 +93,7 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0xF1, 0xF1, 0xF1, 0x02, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xB0, 0x8C, 0x83, 0x80, 0x80, 0x80, 0x80, 0xB3, 0xB3, 0xB3, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8C, 0xB0, 0xC0, 0x00, 0x00}; - - #if defined(MODEL_S60) || defined(MODEL_S60P) || defined(MODEL_TS101) + #if defined(MODEL_S60) || defined(MODEL_S60P) || defined(MODEL_TS101) || defined(MODEL_T55) #if defined(MODEL_S60) || defined(MODEL_S60P) const uint8_t buttonA[] = { // width = 56 @@ -144,6 +143,31 @@ 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x71, 0xe0, 0xc1, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x04, 0x07, 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}; + + #elif defined(MODEL_T55) + const uint8_t buttonA[] = { + // width = 56 + // height = 32 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x88, 0x70, 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, 0x01, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x51, 0x40, 0x40, 0x47, 0x48, 0xa0, 0x60, 0xa7, 0x60, 0xa0, 0x60, 0xa0, 0x40, 0x00, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x08, 0xbc, 0x08, 0xbc, 0x00, 0xfc, 0xfc, 0x3c, 0x84, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x47, 0x40, 0x44, 0x21, 0x20, 0x18, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + const uint8_t disconnectedTip[] = { + // width = 56 + // height = 32 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8e, 0x9c, 0x38, 0x70, 0xe0, 0xc0, + 0x80, 0x20, 0x70, 0x38, 0x9c, 0x8e, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x04, 0x01, + 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 const uint8_t buttonB[] = { diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index b663e42262..9425590f82 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -51,7 +51,7 @@ typedef struct { static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = { //{ min, max, increment, default} - { MIN_TEMP_C, MAX_TEMP_F, 5, 320}, // SolderingTemp + { MIN_TEMP_C, MAX_TEMP_F, 5, SOLDERING_TEMP}, // SolderingTemp { MIN_TEMP_C, MAX_TEMP_F, 5, 150}, // SleepTemp { 0, 15, 1, SLEEP_TIME}, // SleepTime { 0, 4, 1, CUT_OUT_SETTING}, // MinDCVoltageCells diff --git a/source/Core/Threads/MOVThread.cpp b/source/Core/Threads/MOVThread.cpp index 2b01883767..9739cd4670 100644 --- a/source/Core/Threads/MOVThread.cpp +++ b/source/Core/Threads/MOVThread.cpp @@ -30,8 +30,6 @@ uint8_t accelInit = 0; TickType_t lastMovementTime = 0; // Order matters for probe order, some Acceleromters do NOT like bad reads; and we have a bunch of overlap of addresses void detectAccelerometerVersion() { - DetectedAccelerometerVersion = AccelType::Scanning; - #ifdef ACCEL_MMA if (MMA8652FC::detect()) { if (MMA8652FC::initalize()) { @@ -141,6 +139,12 @@ inline void readAccelerometer(int16_t &tx, int16_t &ty, int16_t &tz, Orientation } } void startMOVTask(void const *argument __unused) { +#ifdef NO_ACCEL + DetectedAccelerometerVersion = AccelType::None; + for (;;) { + osDelay(2 * TICKS_SECOND); + } +#endif osDelay(TICKS_100MS / 5); // This is here as the BMA doesnt start up instantly and can wedge the I2C bus if probed too fast after boot detectAccelerometerVersion(); diff --git a/source/Core/Threads/UI/drawing/mono_128x32/draw_profile_advanced.cpp b/source/Core/Threads/UI/drawing/mono_128x32/draw_profile_advanced.cpp index f16d552826..cc8c99464b 100644 --- a/source/Core/Threads/UI/drawing/mono_128x32/draw_profile_advanced.cpp +++ b/source/Core/Threads/UI/drawing/mono_128x32/draw_profile_advanced.cpp @@ -31,9 +31,9 @@ void ui_draw_soldering_profile_advanced(TemperatureType_t tipTemp, TemperatureTy // print time progress / preheat / cooldown if (OLED::getRotation()) { - OLED::setCursor(42, 8); + OLED::setCursor(42, 16); } else { - OLED::setCursor(0, 8); + OLED::setCursor(0, 16); } if (phase == 0) { diff --git a/source/Core/Threads/UI/drawing/mono_128x32/draw_temperature_change.cpp b/source/Core/Threads/UI/drawing/mono_128x32/draw_temperature_change.cpp index 1acd5a0c38..f0f5f92291 100644 --- a/source/Core/Threads/UI/drawing/mono_128x32/draw_temperature_change.cpp +++ b/source/Core/Threads/UI/drawing/mono_128x32/draw_temperature_change.cpp @@ -3,7 +3,7 @@ #ifdef OLED_128x32 void ui_draw_temperature_change(void) { - OLED::setCursor(0, 0); + OLED::setCursor(8, 8); if (OLED::getRotation()) { OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE); } else { diff --git a/source/Core/Threads/UI/logic/ShowStartupWarnings.cpp b/source/Core/Threads/UI/logic/ShowStartupWarnings.cpp index 238bac6f06..433eb7b0ec 100644 --- a/source/Core/Threads/UI/logic/ShowStartupWarnings.cpp +++ b/source/Core/Threads/UI/logic/ShowStartupWarnings.cpp @@ -31,6 +31,9 @@ OperatingMode showWarnings(const ButtonState buttons, guiContext *cxt) { #endif break; case 2: // Accelerometer detection +#ifdef NO_ACCEL + cxt->scratch_state.state1 = 3; +#else if (DetectedAccelerometerVersion == AccelType::Scanning) { break; } @@ -49,6 +52,8 @@ OperatingMode showWarnings(const ButtonState buttons, guiContext *cxt) { } else { cxt->scratch_state.state1 = 3; } +#endif + break; case 3: diff --git a/source/Makefile b/source/Makefile index ca47135e98..01cd929fdd 100644 --- a/source/Makefile +++ b/source/Makefile @@ -6,7 +6,7 @@ ALL_MINIWARE_MODELS=TS100 TS80 TS80P TS101 ALL_PINECIL_MODELS=Pinecil ALL_PINECIL_V2_MODELS=Pinecilv2 ALL_MHP30_MODELS=MHP30 -ALL_SEQURE_MODELS=S60 S60P +ALL_SEQURE_MODELS=S60 S60P T55 ALL_MODELS=$(ALL_MINIWARE_MODELS) $(ALL_PINECIL_MODELS) $(ALL_MHP30_MODELS) $(ALL_PINECIL_V2_MODELS) $(ALL_SEQURE_MODELS) ifneq ($(model),$(filter $(model),$(ALL_MODELS))) @@ -144,7 +144,8 @@ flash_size=62k ifeq ($(model), S60P) bootldr_size=0x5000 DEVICE_DFU_ADDRESS=0x08005000 -else +else +# S60 or T55 bootldr_size=0x4400 DEVICE_DFU_ADDRESS=0x08004400 endif diff --git a/source/build.sh b/source/build.sh index 53671a1652..415e1f943d 100755 --- a/source/build.sh +++ b/source/build.sh @@ -6,7 +6,7 @@ TRANSLATION_DIR="../Translations" # AVAILABLE_LANGUAGES will be calculating according to json files in $TRANSLATION_DIR AVAILABLE_LANGUAGES=() BUILD_LANGUAGES=() -AVAILABLE_MODELS=("TS100" "TS80" "TS80P" "Pinecil" "MHP30" "Pinecilv2" "S60" "S60P" "TS101") +AVAILABLE_MODELS=("TS100" "TS80" "TS80P" "Pinecil" "MHP30" "Pinecilv2" "S60" "S60P" "T55" "TS101") BUILD_MODELS=() builder_info() {