Code refactoring
Motivation: - save some RAM joining the autoreport flags into 1 byte - encapsulate the magic of setting bit masks/features into a class with a stable public interface
This commit is contained in:
parent
9264454d3a
commit
31951fe8c9
@ -390,22 +390,79 @@ static int saved_fanSpeed = 0; //!< Print fan speed
|
|||||||
|
|
||||||
static int saved_feedmultiply_mm = 100;
|
static int saved_feedmultiply_mm = 100;
|
||||||
|
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_TEMPERATURES) || defined(AUTO_REPORT_FANS) || defined(AUTO_REPORT_POSITION)
|
class AutoReportFeatures {
|
||||||
static LongTimer auto_report_timer; //Also used for AUTO_REPORT_TEMPERATURES
|
union {
|
||||||
static uint8_t auto_report_period = 0; //Also used for AUTO_REPORT_TEMPERATURES
|
struct {
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_TEMPERATURES or AUTO_REPORT_FANS or AUTO_REPORT_POSITION
|
uint8_t temp : 1; //Temperature flag
|
||||||
|
uint8_t fans : 1; //Fans flag
|
||||||
|
uint8_t pos: 1; //Position flag
|
||||||
|
uint8_t ar4 : 1; //Unused
|
||||||
|
uint8_t ar5 : 1; //Unused
|
||||||
|
uint8_t ar6 : 1; //Unused
|
||||||
|
uint8_t ar7 : 1; //Unused
|
||||||
|
} __attribute__((packed)) bits;
|
||||||
|
uint8_t byte;
|
||||||
|
} arFunctionsActive;
|
||||||
|
uint8_t auto_report_period; //Also used for AUTO_REPORT_TEMPERATURES
|
||||||
|
public:
|
||||||
|
LongTimer auto_report_timer; //Also used for AUTO_REPORT_TEMPERATURES
|
||||||
|
AutoReportFeatures():auto_report_period(0){
|
||||||
|
#if defined(AUTO_REPORT_ALL)
|
||||||
|
arFunctionsActive.byte = 0xff;
|
||||||
|
#else
|
||||||
|
arFunctionsActive.byte = 0;
|
||||||
|
# if defined(AUTO_REPORT_TEMPERATURES)
|
||||||
|
arFunctionsActive.bits.temp = 1;
|
||||||
|
# endif
|
||||||
|
# if defined(AUTO_REPORT_FANS)
|
||||||
|
arFunctionsActive.bits.fans = 1;
|
||||||
|
# endif
|
||||||
|
# if defined(AUTO_REPORT_POSITION)
|
||||||
|
arFunctionsActive.bits.pos = 1;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool Temp()const { return arFunctionsActive.bits.temp != 0; }
|
||||||
|
inline void SetTemp(uint8_t v){ arFunctionsActive.bits.temp = v; }
|
||||||
|
|
||||||
#if defined(AUTO_REPORT_TEMPERATURES) || defined(AUTO_REPORT_ALL)
|
inline bool Fans()const { return arFunctionsActive.bits.fans != 0; }
|
||||||
static bool auto_report_temp_active = false;
|
inline void SetFans(uint8_t v){ arFunctionsActive.bits.fans = v; }
|
||||||
#endif //AUTO_REPORT_TEMPERATURES
|
|
||||||
|
|
||||||
#if defined(AUTO_REPORT_FANS) || defined(AUTO_REPORT_ALL)
|
inline bool Pos()const { return arFunctionsActive.bits.pos != 0; }
|
||||||
static bool auto_report_fans_active = false;
|
inline void SetPos(uint8_t v){ arFunctionsActive.bits.pos = v; }
|
||||||
#endif //AUTO_REPORT_FANS
|
|
||||||
|
inline void SetMask(uint8_t mask){ arFunctionsActive.byte = mask; }
|
||||||
|
|
||||||
|
/// sets the autoreporting timer's period
|
||||||
|
/// setting it to zero stops the timer
|
||||||
|
void SetPeriod(uint8_t p){
|
||||||
|
auto_report_period = p;
|
||||||
|
if (auto_report_period != 0){
|
||||||
|
auto_report_timer.start();
|
||||||
|
} else{
|
||||||
|
auto_report_timer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void TimerStart() { auto_report_timer.start(); }
|
||||||
|
inline bool TimerRunning()const { return auto_report_timer.running(); }
|
||||||
|
inline bool TimerExpired() { return auto_report_timer.expired(auto_report_period * 1000ul); }
|
||||||
|
};
|
||||||
|
|
||||||
#if defined(AUTO_REPORT_POSITION) || defined(AUTO_REPORT_ALL)
|
AutoReportFeatures autoReportFeatures;
|
||||||
static bool auto_report_position_active = false;
|
|
||||||
#endif //AUTO_REPORT_POSITION
|
//#if defined(AUTO_REPORT_TEMPERATURES) || defined(AUTO_REPORT_ALL)
|
||||||
|
//static bool auto_report_temp_active = false;
|
||||||
|
//#endif //AUTO_REPORT_TEMPERATURES
|
||||||
|
|
||||||
|
//#if defined(AUTO_REPORT_FANS) || defined(AUTO_REPORT_ALL)
|
||||||
|
//static bool auto_report_fans_active = false;
|
||||||
|
//#endif //AUTO_REPORT_FANS
|
||||||
|
|
||||||
|
//#if defined(AUTO_REPORT_POSITION) || defined(AUTO_REPORT_ALL)
|
||||||
|
//static bool auto_report_position_active = false;
|
||||||
|
//#endif //AUTO_REPORT_POSITION
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//=============================Routines======================================
|
//=============================Routines======================================
|
||||||
@ -1744,24 +1801,24 @@ void host_keepalive() {
|
|||||||
long ms = _millis();
|
long ms = _millis();
|
||||||
|
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_TEMPERATURES) || defined(AUTO_REPORT_FANS) || defined(AUTO_REPORT_POSITION)
|
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_TEMPERATURES) || defined(AUTO_REPORT_FANS) || defined(AUTO_REPORT_POSITION)
|
||||||
if (auto_report_timer.running())
|
if ( autoReportFeatures.TimerRunning())
|
||||||
{
|
{
|
||||||
if (auto_report_timer.expired(auto_report_period * 1000ul))
|
if (autoReportFeatures.TimerExpired())
|
||||||
{
|
{
|
||||||
if(auto_report_temp_active){
|
if(autoReportFeatures.Temp()){
|
||||||
gcode_M105(active_extruder);
|
gcode_M105(active_extruder);
|
||||||
}
|
}
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_FANS) && (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
|
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_FANS) && (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
|
||||||
if(auto_report_fans_active){
|
if(autoReportFeatures.Fans()){
|
||||||
gcode_M123();
|
gcode_M123();
|
||||||
}
|
}
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_FANS and (FANCHECK and TACH_0 or TACH_1)
|
#endif //AUTO_REPORT_ALL or AUTO_REPORT_FANS and (FANCHECK and TACH_0 or TACH_1)
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_POSITION)
|
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_POSITION)
|
||||||
if(auto_report_position_active){
|
if(autoReportFeatures.Pos()){
|
||||||
gcode_M114();
|
gcode_M114();
|
||||||
}
|
}
|
||||||
#endif //AUTO_REPORT_POSITION or AUTO_REPORT_FANS or AUTO_REPORT_POSITION
|
#endif //AUTO_REPORT_POSITION or AUTO_REPORT_FANS or AUTO_REPORT_POSITION
|
||||||
auto_report_timer.start();
|
autoReportFeatures.TimerStart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif //AUTO_REPORT_ALL
|
#endif //AUTO_REPORT_ALL
|
||||||
@ -6457,7 +6514,7 @@ Sigma_Exit:
|
|||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
- `S` - Set autoreporting interval in seconds. 0 to disable. Maximum: 255
|
- `S` - Set autoreporting interval in seconds. 0 to disable. Maximum: 255
|
||||||
- `C` - Activate auto-report function. Default is temperature.
|
- `C` - Activate auto-report function (bit mask). Default is temperature.
|
||||||
|
|
||||||
bit 0 = Auto-report temperatures
|
bit 0 = Auto-report temperatures
|
||||||
bit 1 = Auto-report fans
|
bit 1 = Auto-report fans
|
||||||
@ -6470,49 +6527,17 @@ Sigma_Exit:
|
|||||||
*/
|
*/
|
||||||
//!@todo update RepRap Gcode wiki
|
//!@todo update RepRap Gcode wiki
|
||||||
//!@todo Should be temperature always? Octoprint doesn't switch to M105 if M155 timer is set
|
//!@todo Should be temperature always? Octoprint doesn't switch to M105 if M155 timer is set
|
||||||
|
|
||||||
union {
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
uint8_t ar_temp_active : 1; //Temperature flag
|
|
||||||
uint8_t ar_fans_active : 1; //Fans flag
|
|
||||||
uint8_t ar_pos_active : 1; //Position flag
|
|
||||||
uint8_t ar_4_active : 1; //Unused
|
|
||||||
uint8_t ar_5_active : 1; //Unused
|
|
||||||
uint8_t ar_6_active : 1; //Unused
|
|
||||||
uint8_t ar_7_active : 1; //Unused
|
|
||||||
} __attribute__((packed)) bits;
|
|
||||||
uint8_t byte;
|
|
||||||
} arFunctionsActive;
|
|
||||||
case 155:
|
case 155:
|
||||||
{
|
{
|
||||||
if (code_seen('S'))
|
if (code_seen('S')){
|
||||||
{
|
autoReportFeatures.SetPeriod( code_value_uint8() );
|
||||||
auto_report_period = code_value_uint8();
|
|
||||||
if (auto_report_period != 0){
|
|
||||||
auto_report_timer.start();
|
|
||||||
}
|
}
|
||||||
else{
|
if (code_seen('C')){
|
||||||
auto_report_timer.stop();
|
autoReportFeatures.SetMask(code_value());
|
||||||
|
//arFunctionsActive.bits.ar_temp_active = 1; //auto-report temperatures always on
|
||||||
|
} else{
|
||||||
|
autoReportFeatures.SetMask(1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (code_seen('C'))
|
|
||||||
{
|
|
||||||
arFunctionsActive.byte = code_value();
|
|
||||||
//arFunctionsActive.bits.ar_temp_active = 1; //auto-report temperatures always on
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
arFunctionsActive.byte = 1;
|
|
||||||
}
|
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_TEMPERATURES)
|
|
||||||
auto_report_temp_active = arFunctionsActive.bits.ar_temp_active;
|
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_TEMPERATURES
|
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_FANS)
|
|
||||||
auto_report_fans_active = arFunctionsActive.bits.ar_fans_active;
|
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_FANS
|
|
||||||
#if defined(AUTO_REPORT_ALL) || defined(AUTO_REPORT_POSITION)
|
|
||||||
auto_report_position_active = arFunctionsActive.bits.ar_pos_active;
|
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_POSITION
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif //AUTO_REPORT_ALL or AUTO_REPORT_TEMPERATURES or AUTO_REPORT_FANS or AUTO_REPORT_POSITION
|
#endif //AUTO_REPORT_ALL or AUTO_REPORT_TEMPERATURES or AUTO_REPORT_FANS or AUTO_REPORT_POSITION
|
||||||
|
@ -20,10 +20,10 @@ public:
|
|||||||
Timer();
|
Timer();
|
||||||
void start();
|
void start();
|
||||||
void stop(){m_isRunning = false;}
|
void stop(){m_isRunning = false;}
|
||||||
bool running(){return m_isRunning;}
|
bool running()const {return m_isRunning;}
|
||||||
bool expired(T msPeriod);
|
bool expired(T msPeriod);
|
||||||
protected:
|
protected:
|
||||||
T started(){return m_started;}
|
T started()const {return m_started;}
|
||||||
private:
|
private:
|
||||||
bool m_isRunning;
|
bool m_isRunning;
|
||||||
T m_started;
|
T m_started;
|
||||||
|
Loading…
Reference in New Issue
Block a user