|
|
|
@ -39,10 +39,10 @@
|
|
|
|
|
|
|
|
|
|
#if HOTENDS <= 1
|
|
|
|
|
#define HOTEND_INDEX 0
|
|
|
|
|
#define E_UNUSED() UNUSED(e)
|
|
|
|
|
#define E_NAME
|
|
|
|
|
#else
|
|
|
|
|
#define HOTEND_INDEX e
|
|
|
|
|
#define E_UNUSED()
|
|
|
|
|
#define E_NAME e
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// Identifiers for other heaters
|
|
|
|
@ -304,17 +304,15 @@ class Temperature {
|
|
|
|
|
static bool allow_cold_extrude;
|
|
|
|
|
static int16_t extrude_min_temp;
|
|
|
|
|
FORCE_INLINE static bool tooCold(const int16_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp; }
|
|
|
|
|
FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
FORCE_INLINE static bool tooColdToExtrude(const uint8_t E_NAME) {
|
|
|
|
|
return tooCold(degHotend(HOTEND_INDEX));
|
|
|
|
|
}
|
|
|
|
|
FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t E_NAME) {
|
|
|
|
|
return tooCold(degTargetHotend(HOTEND_INDEX));
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { UNUSED(e); return false; }
|
|
|
|
|
FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { UNUSED(e); return false; }
|
|
|
|
|
FORCE_INLINE static bool tooColdToExtrude(const uint8_t) { return false; }
|
|
|
|
|
FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t) { return false; }
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
FORCE_INLINE static bool hotEnoughToExtrude(const uint8_t e) { return !tooColdToExtrude(e); }
|
|
|
|
@ -546,16 +544,13 @@ class Temperature {
|
|
|
|
|
* Preheating hotends
|
|
|
|
|
*/
|
|
|
|
|
#ifdef MILLISECONDS_PREHEAT_TIME
|
|
|
|
|
static bool is_preheating(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
static bool is_preheating(const uint8_t E_NAME) {
|
|
|
|
|
return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]);
|
|
|
|
|
}
|
|
|
|
|
static void start_preheat_time(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
static void start_preheat_time(const uint8_t E_NAME) {
|
|
|
|
|
preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME;
|
|
|
|
|
}
|
|
|
|
|
static void reset_preheat_time(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
static void reset_preheat_time(const uint8_t E_NAME) {
|
|
|
|
|
preheat_end_time[HOTEND_INDEX] = 0;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
@ -566,39 +561,36 @@ class Temperature {
|
|
|
|
|
//inline so that there is no performance decrease.
|
|
|
|
|
//deg=degreeCelsius
|
|
|
|
|
|
|
|
|
|
FORCE_INLINE static float degHotend(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
return temp_hotend[HOTEND_INDEX].celsius;
|
|
|
|
|
#else
|
|
|
|
|
return 0;
|
|
|
|
|
#endif
|
|
|
|
|
FORCE_INLINE static float degHotend(const uint8_t E_NAME) {
|
|
|
|
|
return (0
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
+ temp_hotend[HOTEND_INDEX].celsius
|
|
|
|
|
#endif
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if ENABLED(SHOW_TEMP_ADC_VALUES)
|
|
|
|
|
FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
return temp_hotend[HOTEND_INDEX].raw;
|
|
|
|
|
#else
|
|
|
|
|
return 0;
|
|
|
|
|
#endif
|
|
|
|
|
FORCE_INLINE static int16_t rawHotendTemp(const uint8_t E_NAME) {
|
|
|
|
|
return (0
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
+ temp_hotend[HOTEND_INDEX].raw
|
|
|
|
|
#endif
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
return temp_hotend[HOTEND_INDEX].target;
|
|
|
|
|
#else
|
|
|
|
|
return 0;
|
|
|
|
|
#endif
|
|
|
|
|
FORCE_INLINE static int16_t degTargetHotend(const uint8_t E_NAME) {
|
|
|
|
|
return (0
|
|
|
|
|
#if HOTENDS
|
|
|
|
|
+ temp_hotend[HOTEND_INDEX].target
|
|
|
|
|
#endif
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if WATCH_HOTENDS
|
|
|
|
|
static void start_watching_hotend(const uint8_t e=0);
|
|
|
|
|
#else
|
|
|
|
|
static inline void start_watching_hotend(const uint8_t e=0) { UNUSED(e); }
|
|
|
|
|
static inline void start_watching_hotend(const uint8_t=0) {}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if HOTENDS
|
|
|
|
@ -612,8 +604,7 @@ class Temperature {
|
|
|
|
|
static inline void start_watching_E5() { start_watching_hotend(5); }
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static void setTargetHotend(const int16_t celsius, const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
static void setTargetHotend(const int16_t celsius, const uint8_t E_NAME) {
|
|
|
|
|
const uint8_t ee = HOTEND_INDEX;
|
|
|
|
|
#ifdef MILLISECONDS_PREHEAT_TIME
|
|
|
|
|
if (celsius == 0)
|
|
|
|
@ -628,13 +619,11 @@ class Temperature {
|
|
|
|
|
start_watching_hotend(ee);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FORCE_INLINE static bool isHeatingHotend(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
FORCE_INLINE static bool isHeatingHotend(const uint8_t E_NAME) {
|
|
|
|
|
return temp_hotend[HOTEND_INDEX].target > temp_hotend[HOTEND_INDEX].celsius;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FORCE_INLINE static bool isCoolingHotend(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
FORCE_INLINE static bool isCoolingHotend(const uint8_t E_NAME) {
|
|
|
|
|
return temp_hotend[HOTEND_INDEX].target < temp_hotend[HOTEND_INDEX].celsius;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -765,8 +754,7 @@ class Temperature {
|
|
|
|
|
|
|
|
|
|
#if HEATER_IDLE_HANDLER
|
|
|
|
|
|
|
|
|
|
static void reset_heater_idle_timer(const uint8_t e) {
|
|
|
|
|
E_UNUSED();
|
|
|
|
|
static void reset_heater_idle_timer(const uint8_t E_NAME) {
|
|
|
|
|
hotend_idle[HOTEND_INDEX].reset();
|
|
|
|
|
start_watching_hotend(HOTEND_INDEX);
|
|
|
|
|
}
|
|
|
|
|