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>
This commit is contained in:
1
.github/workflows/push.yml
vendored
1
.github/workflows/push.yml
vendored
@@ -25,6 +25,7 @@ jobs:
|
|||||||
"Pinecilv2",
|
"Pinecilv2",
|
||||||
"S60",
|
"S60",
|
||||||
"S60P",
|
"S60P",
|
||||||
|
"T55",
|
||||||
"TS101",
|
"TS101",
|
||||||
]
|
]
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -52,7 +52,7 @@ DOCKER_CMD=$(DOCKER_BIN) -f $(DOCKER_YML) run --rm builder
|
|||||||
MKDOCS_YML=$(CURDIR)/scripts/IronOS-mkdocs.yml
|
MKDOCS_YML=$(CURDIR)/scripts/IronOS-mkdocs.yml
|
||||||
|
|
||||||
# supported models
|
# 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_ML=Pinecil Pinecilv2 # target names
|
||||||
MODELS_MULTILANG=Pinecil_multi-lang Pinecilv2_multi-lang # dir names
|
MODELS_MULTILANG=Pinecil_multi-lang Pinecilv2_multi-lang # dir names
|
||||||
|
|
||||||
|
|||||||
@@ -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. |
|
| Miniware TS101 | ✔️ | ❌ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ | Full OLED resolution not yet supported. |
|
||||||
| Sequre S60 | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. |
|
| Sequre S60 | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. |
|
||||||
| Sequre S60P | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | 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 TS80P | ❌ | ✔️ | ✔️ | ❌ | ❌ | N/A | ✔️ | |
|
||||||
| Miniware TS100 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌\*\* | |
|
| Miniware TS100 | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌\*\* | |
|
||||||
| Miniware TS80 | ❌ | ✔️ | ❌ | ❌ | ❌ | N/A | ❌\*\*\* | |
|
| Miniware TS80 | ❌ | ✔️ | ❌ | ❌ | ❌ | N/A | ❌\*\*\* | |
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ static const uint16_t NTCHandleLookup[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
uint16_t getHandleTemperature(uint8_t sample) {
|
uint16_t getHandleTemperature(uint8_t sample) {
|
||||||
|
#ifdef TMP36_ADC1_CHANNEL
|
||||||
int32_t result = getADCHandleTemp(sample);
|
int32_t result = getADCHandleTemp(sample);
|
||||||
// S60 uses 10k NTC resistor
|
// S60 uses 10k NTC resistor
|
||||||
// For now not doing interpolation
|
// For now not doing interpolation
|
||||||
@@ -62,6 +63,9 @@ uint16_t getHandleTemperature(uint8_t sample) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 45 * 10;
|
return 45 * 10;
|
||||||
|
#else
|
||||||
|
return 0; // Not implemented
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
|
uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
|
||||||
@@ -242,7 +246,25 @@ uint64_t getDeviceID() {
|
|||||||
return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32);
|
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; }
|
bool isTipShorted() { return false; }
|
||||||
uint8_t preStartChecksDone() { return 1; }
|
uint8_t preStartChecksDone() { return 1; }
|
||||||
|
|
||||||
@@ -252,3 +274,7 @@ uint16_t getTipInertia() { return TIP_THERMAL_INERTIA; }
|
|||||||
void setBuzzer(bool on) {}
|
void setBuzzer(bool on) {}
|
||||||
|
|
||||||
void showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }
|
void showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }
|
||||||
|
|
||||||
|
#ifdef CUSTOM_MAX_TEMP_C
|
||||||
|
TemperatureType_t getCustomTipMaxInC() { return MAX_TEMP_C; }
|
||||||
|
#endif
|
||||||
@@ -69,5 +69,33 @@
|
|||||||
#define MOVEMENT_Pin GPIO_PIN_3
|
#define MOVEMENT_Pin GPIO_PIN_3
|
||||||
#define MOVEMENT_GPIO_Port GPIOA
|
#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_ */
|
#endif /* BSP_MINIWARE_PINS_H_ */
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ void Setup_HAL() {
|
|||||||
HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings
|
HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings
|
||||||
|
|
||||||
// Setup movement pin
|
// Setup movement pin
|
||||||
|
#ifdef MOVEMENT_Pin
|
||||||
{
|
{
|
||||||
GPIO_InitTypeDef GPIO_InitStruct;
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
GPIO_InitStruct.Pin = MOVEMENT_Pin;
|
GPIO_InitStruct.Pin = MOVEMENT_Pin;
|
||||||
@@ -60,9 +61,11 @@ void Setup_HAL() {
|
|||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
HAL_GPIO_Init(MOVEMENT_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(MOVEMENT_GPIO_Port, &GPIO_InitStruct);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getADCHandleTemp(uint8_t sample) {
|
uint16_t getADCHandleTemp(uint8_t sample) {
|
||||||
|
#ifdef TMP36_ADC1_CHANNEL
|
||||||
static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};
|
static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};
|
||||||
if (sample) {
|
if (sample) {
|
||||||
uint32_t sum = 0;
|
uint32_t sum = 0;
|
||||||
@@ -72,6 +75,9 @@ uint16_t getADCHandleTemp(uint8_t sample) {
|
|||||||
filter.update(sum);
|
filter.update(sum);
|
||||||
}
|
}
|
||||||
return filter.average() >> 1;
|
return filter.average() >> 1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getADCVin(uint8_t sample) {
|
uint16_t getADCVin(uint8_t sample) {
|
||||||
@@ -167,11 +173,17 @@ static void MX_ADC1_Init(void) {
|
|||||||
|
|
||||||
/**Configure Regular Channel
|
/**Configure Regular Channel
|
||||||
*/
|
*/
|
||||||
|
#ifdef TMP36_ADC1_CHANNEL
|
||||||
sConfig.Channel = TMP36_ADC1_CHANNEL;
|
sConfig.Channel = TMP36_ADC1_CHANNEL;
|
||||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
|
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
|
||||||
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
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
|
/**Configure Injected Channel
|
||||||
*/
|
*/
|
||||||
// F in = 10.66 MHz
|
// F in = 10.66 MHz
|
||||||
|
|||||||
@@ -8,4 +8,78 @@
|
|||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
#include "configuration.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; }
|
TemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return (tipuVDelta * 50) / 485; }
|
||||||
|
#endif // TEMP_uV_LOOKUP_S60
|
||||||
|
|||||||
@@ -100,9 +100,6 @@
|
|||||||
#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0
|
#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0
|
||||||
#define DETAILED_IDLE 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 CUT_OUT_SETTING 0 // default to no cut-off voltage
|
||||||
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
|
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
|
||||||
#define TEMPERATURE_INF 0 // default to 0
|
#define TEMPERATURE_INF 0 // default to 0
|
||||||
@@ -120,22 +117,12 @@
|
|||||||
// Vin_max = (3.3*(r1+r2))/(r2)
|
// Vin_max = (3.3*(r1+r2))/(r2)
|
||||||
// vdiv = (32768*4)/(vin_max*10)
|
// 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!"
|
#error "No model defined!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NEEDS_VBUS_PROBE 0
|
#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
|
#ifdef MODEL_S60
|
||||||
#define VOLTAGE_DIV 460 // Default divider scaler
|
#define VOLTAGE_DIV 460 // Default divider scaler
|
||||||
#define CALIBRATION_OFFSET 200 // Default adc offset in uV
|
#define CALIBRATION_OFFSET 200 // Default adc offset in uV
|
||||||
@@ -146,6 +133,8 @@
|
|||||||
#define OP_AMP_GAIN_STAGE 536
|
#define OP_AMP_GAIN_STAGE 536
|
||||||
#define TEMP_uV_LOOKUP_S60
|
#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
|
#define HARDWARE_MAX_WATTAGE_X10 600
|
||||||
|
|
||||||
@@ -178,6 +167,8 @@
|
|||||||
#define OP_AMP_GAIN_STAGE 536
|
#define OP_AMP_GAIN_STAGE 536
|
||||||
#define TEMP_uV_LOOKUP_S60
|
#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
|
#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
|
#define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place
|
||||||
#endif /* S60P */
|
#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 FLASH_LOGOADDR (0x08000000 + (62 * 1024))
|
||||||
#define SETTINGS_START_PAGE (0x08000000 + (63 * 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_ */
|
#endif /* CONFIGURATION_H_ */
|
||||||
|
|||||||
@@ -56,12 +56,15 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {
|
|||||||
PB0 ------> ADC2_IN8
|
PB0 ------> ADC2_IN8
|
||||||
PB1 ------> ADC2_IN9
|
PB1 ------> ADC2_IN9
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = TIP_TEMP_Pin;
|
GPIO_InitStruct.Pin = TIP_TEMP_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
#ifdef TMP36_INPUT_Pin
|
||||||
GPIO_InitStruct.Pin = TMP36_INPUT_Pin;
|
GPIO_InitStruct.Pin = TMP36_INPUT_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
#endif
|
||||||
GPIO_InitStruct.Pin = VIN_Pin;
|
GPIO_InitStruct.Pin = VIN_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||||
HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|||||||
@@ -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, 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};
|
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) || defined(MODEL_T55)
|
||||||
#if defined(MODEL_S60) || defined(MODEL_S60P) || defined(MODEL_TS101)
|
|
||||||
#if defined(MODEL_S60) || defined(MODEL_S60P)
|
#if defined(MODEL_S60) || defined(MODEL_S60P)
|
||||||
const uint8_t buttonA[] = {
|
const uint8_t buttonA[] = {
|
||||||
// width = 56
|
// 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,
|
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, 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};
|
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
|
#endif
|
||||||
|
|
||||||
const uint8_t buttonB[] = {
|
const uint8_t buttonB[] = {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ typedef struct {
|
|||||||
|
|
||||||
static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = {
|
static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = {
|
||||||
//{ min, max, increment, default}
|
//{ 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
|
{ MIN_TEMP_C, MAX_TEMP_F, 5, 150}, // SleepTemp
|
||||||
{ 0, 15, 1, SLEEP_TIME}, // SleepTime
|
{ 0, 15, 1, SLEEP_TIME}, // SleepTime
|
||||||
{ 0, 4, 1, CUT_OUT_SETTING}, // MinDCVoltageCells
|
{ 0, 4, 1, CUT_OUT_SETTING}, // MinDCVoltageCells
|
||||||
|
|||||||
@@ -30,8 +30,6 @@ uint8_t accelInit = 0;
|
|||||||
TickType_t lastMovementTime = 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
|
// Order matters for probe order, some Acceleromters do NOT like bad reads; and we have a bunch of overlap of addresses
|
||||||
void detectAccelerometerVersion() {
|
void detectAccelerometerVersion() {
|
||||||
DetectedAccelerometerVersion = AccelType::Scanning;
|
|
||||||
|
|
||||||
#ifdef ACCEL_MMA
|
#ifdef ACCEL_MMA
|
||||||
if (MMA8652FC::detect()) {
|
if (MMA8652FC::detect()) {
|
||||||
if (MMA8652FC::initalize()) {
|
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) {
|
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
|
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();
|
detectAccelerometerVersion();
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ void ui_draw_soldering_profile_advanced(TemperatureType_t tipTemp, TemperatureTy
|
|||||||
|
|
||||||
// print time progress / preheat / cooldown
|
// print time progress / preheat / cooldown
|
||||||
if (OLED::getRotation()) {
|
if (OLED::getRotation()) {
|
||||||
OLED::setCursor(42, 8);
|
OLED::setCursor(42, 16);
|
||||||
} else {
|
} else {
|
||||||
OLED::setCursor(0, 8);
|
OLED::setCursor(0, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phase == 0) {
|
if (phase == 0) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#ifdef OLED_128x32
|
#ifdef OLED_128x32
|
||||||
void ui_draw_temperature_change(void) {
|
void ui_draw_temperature_change(void) {
|
||||||
|
|
||||||
OLED::setCursor(0, 0);
|
OLED::setCursor(8, 8);
|
||||||
if (OLED::getRotation()) {
|
if (OLED::getRotation()) {
|
||||||
OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);
|
OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ OperatingMode showWarnings(const ButtonState buttons, guiContext *cxt) {
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case 2: // Accelerometer detection
|
case 2: // Accelerometer detection
|
||||||
|
#ifdef NO_ACCEL
|
||||||
|
cxt->scratch_state.state1 = 3;
|
||||||
|
#else
|
||||||
if (DetectedAccelerometerVersion == AccelType::Scanning) {
|
if (DetectedAccelerometerVersion == AccelType::Scanning) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -49,6 +52,8 @@ OperatingMode showWarnings(const ButtonState buttons, guiContext *cxt) {
|
|||||||
} else {
|
} else {
|
||||||
cxt->scratch_state.state1 = 3;
|
cxt->scratch_state.state1 = 3;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ ALL_MINIWARE_MODELS=TS100 TS80 TS80P TS101
|
|||||||
ALL_PINECIL_MODELS=Pinecil
|
ALL_PINECIL_MODELS=Pinecil
|
||||||
ALL_PINECIL_V2_MODELS=Pinecilv2
|
ALL_PINECIL_V2_MODELS=Pinecilv2
|
||||||
ALL_MHP30_MODELS=MHP30
|
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)
|
ALL_MODELS=$(ALL_MINIWARE_MODELS) $(ALL_PINECIL_MODELS) $(ALL_MHP30_MODELS) $(ALL_PINECIL_V2_MODELS) $(ALL_SEQURE_MODELS)
|
||||||
|
|
||||||
ifneq ($(model),$(filter $(model),$(ALL_MODELS)))
|
ifneq ($(model),$(filter $(model),$(ALL_MODELS)))
|
||||||
@@ -145,6 +145,7 @@ ifeq ($(model), S60P)
|
|||||||
bootldr_size=0x5000
|
bootldr_size=0x5000
|
||||||
DEVICE_DFU_ADDRESS=0x08005000
|
DEVICE_DFU_ADDRESS=0x08005000
|
||||||
else
|
else
|
||||||
|
# S60 or T55
|
||||||
bootldr_size=0x4400
|
bootldr_size=0x4400
|
||||||
DEVICE_DFU_ADDRESS=0x08004400
|
DEVICE_DFU_ADDRESS=0x08004400
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ TRANSLATION_DIR="../Translations"
|
|||||||
# AVAILABLE_LANGUAGES will be calculating according to json files in $TRANSLATION_DIR
|
# AVAILABLE_LANGUAGES will be calculating according to json files in $TRANSLATION_DIR
|
||||||
AVAILABLE_LANGUAGES=()
|
AVAILABLE_LANGUAGES=()
|
||||||
BUILD_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=()
|
BUILD_MODELS=()
|
||||||
|
|
||||||
builder_info() {
|
builder_info() {
|
||||||
|
|||||||
Reference in New Issue
Block a user