1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * iron.h
- *
- * Created on: Jan 12, 2021
- * Author: David Original work by Jose (PTDreamer), 2017
- */
- #ifndef IRON_H_
- #define IRON_H_
- #include "pid.h"
- #include "settings.h"
- #define PWMminOutput 1 // Min pwm level to maintain iron detection
- typedef void (*setTemperatureReachedCallback)(uint16_t);
- typedef void (*currentModeChanged)(uint8_t);
- typedef union{
- uint8_t Flags; // Flag for errors (wrong iron connection, NTC, internal failure...)
- struct{
- unsigned noIron:1; // No iron detected
- unsigned NTC_high:1; // NTC too high
- unsigned NTC_low:1; // NTC too low
- unsigned V_low:1; // Voltage too low
- unsigned failState:1; // Internal fail-safe state (some undefined variable or data detected)
- unsigned unused_b5:1;
- unsigned unused_b6:1;
- unsigned globalFlag:1; // Global error flag
- };
- }IronError_t;
- # define ErrorMask (uint8_t)0b11111 // mask for used error bit fields (skipping global flag)
- typedef struct {
- TIM_HandleTypeDef *Pwm_Timer; // Pointer to the PWM timer
- uint8_t Pwm_Channel; // PWM channel
- uint16_t Pwm_Limit; // Max PWM output value possible
- uint16_t Pwm_Max; // Max PWM output based on power limit
- uint16_t Pwm_Out; // Last PWM value calculated
- TIM_HandleTypeDef *Delay_Timer; // Pointer to the Delay timer
- int8_t CurrentIronPower; // Last output power
- uint16_t CurrentSetTemperature; // Actual set temperature (Setpoint)
- uint16_t Debug_SetTemperature; // Debug mode temperature
- uint32_t LastSysChangeTime; // Last time a system setting was changed
- uint32_t LastModeChangeTime; // Last time the mode was changed (To provide debouncing)
- uint32_t LastErrorTime; // last time iron error was detected
- uint32_t lastActivityTime; // last time iron handle was moved (In shake mode)
- uint8_t CurrentMode; // Actual working mode (Standby, Sleep, Normal, Boost)
- uint8_t changeMode; // change working mode to (Standby, Sleep, Normal, Boost)
- uint32_t CurrentModeTimer; // Time since actual mode was set
- IronError_t Error; // Error flags
- uint32_t RunawayTimer; // Runaway timer
- uint8_t RunawayLevel; // Runaway actual level
- uint8_t prevRunawayLevel; // Runaway previous level
- bool RunawayStatus; // Runaway triggered flag
- bool updatePwm; // Set when timer values need to be updated
- bool calibrating; // Flag to indicate calibration state (don't save temperature settings)
- bool updateMode; // Flag to indicate the mode must be changed
- bool newActivity; // Flag to indicate handle movement
- bool Cal_TemperatureReachedFlag; // Flag for temperature calibration
- bool DebugMode; // Flag to indicate Debug is enabled
- }iron_t;
- extern volatile iron_t Iron;
- void IronWake(bool source);
- void checkIronError(void);
- bool GetIronError(void);
- void updatePowerLimit(void);
- void runAwayCheck(void);
- void SetFailState(bool FailState);
- bool GetFailState(void);
- void setCurrentMode(uint8_t mode);
- void setModefromStand(uint8_t mode);
- void setUserTemperature(uint16_t temperature);
- uint16_t getUserTemperature(void);
- uint8_t getCurrentMode(void);
- uint16_t getSetTemperature();
- uint16_t getCurrentTemperature();
- int8_t getCurrentPower();
- void initTimers(void);
- void setPwmPeriod(uint16_t period);
- void setPwmDelay(uint16_t delay);
- void setNoIronValue(uint16_t noiron);
- void setSystemTempUnit(bool unit);
- void addSetTemperatureReachedCallback(setTemperatureReachedCallback callback);
- void addModeChangedCallback(currentModeChanged callback);
- void handleIron(void);
- void ironInit(TIM_HandleTypeDef *delaytimer, TIM_HandleTypeDef *pwmtimer, uint32_t pwmchannel);
- uint8_t getIronOn();
- void setDebugTemp(uint16_t value);
- void setDebugMode(uint8_t value);
- void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *_htim);
- #endif /* IRON_H_ */
|