Merge pull request #3813 from jbrazio/bugfix/3809
Stopwatch and PrintCounter improvements
This commit is contained in:
commit
f9b4b90058
4 changed files with 64 additions and 43 deletions
|
@ -73,6 +73,7 @@ void PrintCounter::saveStats() {
|
|||
// Refuses to save data is object is not loaded
|
||||
if (!this->isLoaded()) return;
|
||||
|
||||
// Saves the struct to EEPROM
|
||||
eeprom_update_block(&this->data, (void *)(this->address + sizeof(uint8_t)), sizeof(printStatistics));
|
||||
}
|
||||
|
||||
|
@ -135,35 +136,46 @@ void PrintCounter::tick() {
|
|||
}
|
||||
}
|
||||
|
||||
void PrintCounter::start() {
|
||||
// @Override
|
||||
bool PrintCounter::start() {
|
||||
#if ENABLED(DEBUG_PRINTCOUNTER)
|
||||
PrintCounter::debug(PSTR("start"));
|
||||
#endif
|
||||
|
||||
if (!this->isPaused()) this->data.totalPrints++;
|
||||
super::start();
|
||||
bool paused = this->isPaused();
|
||||
|
||||
if (super::start()) {
|
||||
if (!paused) {
|
||||
this->data.totalPrints++;
|
||||
this->lastDuration = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
void PrintCounter::stop() {
|
||||
// @Override
|
||||
bool PrintCounter::stop() {
|
||||
#if ENABLED(DEBUG_PRINTCOUNTER)
|
||||
PrintCounter::debug(PSTR("stop"));
|
||||
#endif
|
||||
|
||||
if (!this->isRunning()) return;
|
||||
super::stop();
|
||||
|
||||
if (super::stop()) {
|
||||
this->data.finishedPrints++;
|
||||
this->data.printTime += this->deltaDuration();
|
||||
this->saveStats();
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
// @Override
|
||||
void PrintCounter::reset() {
|
||||
#if ENABLED(DEBUG_PRINTCOUNTER)
|
||||
PrintCounter::debug(PSTR("stop"));
|
||||
#endif
|
||||
|
||||
this->lastDuration = 0;
|
||||
super::reset();
|
||||
this->lastDuration = 0;
|
||||
}
|
||||
|
||||
#if ENABLED(DEBUG_PRINTCOUNTER)
|
||||
|
|
|
@ -138,8 +138,8 @@ class PrintCounter: public Stopwatch {
|
|||
/**
|
||||
* The following functions are being overridden
|
||||
*/
|
||||
void start();
|
||||
void stop();
|
||||
bool start();
|
||||
bool stop();
|
||||
void reset();
|
||||
|
||||
#if ENABLED(DEBUG_PRINTCOUNTER)
|
||||
|
|
|
@ -27,40 +27,46 @@ Stopwatch::Stopwatch() {
|
|||
this->reset();
|
||||
}
|
||||
|
||||
void Stopwatch::stop() {
|
||||
bool Stopwatch::stop() {
|
||||
#if ENABLED(DEBUG_STOPWATCH)
|
||||
Stopwatch::debug(PSTR("stop"));
|
||||
#endif
|
||||
|
||||
if (!this->isRunning()) return;
|
||||
|
||||
this->state = STPWTCH_STOPPED;
|
||||
if (this->isRunning() || this->isPaused()) {
|
||||
this->state = STOPWATCH_STOPPED;
|
||||
this->stopTimestamp = millis();
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
void Stopwatch::pause() {
|
||||
bool Stopwatch::pause() {
|
||||
#if ENABLED(DEBUG_STOPWATCH)
|
||||
Stopwatch::debug(PSTR("pause"));
|
||||
#endif
|
||||
|
||||
if (!this->isRunning()) return;
|
||||
|
||||
this->state = STPWTCH_PAUSED;
|
||||
if (this->isRunning()) {
|
||||
this->state = STOPWATCH_PAUSED;
|
||||
this->stopTimestamp = millis();
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
void Stopwatch::start() {
|
||||
bool Stopwatch::start() {
|
||||
#if ENABLED(DEBUG_STOPWATCH)
|
||||
Stopwatch::debug(PSTR("start"));
|
||||
#endif
|
||||
|
||||
if (this->isRunning()) return;
|
||||
|
||||
if (!this->isRunning()) {
|
||||
if (this->isPaused()) this->accumulator = this->duration();
|
||||
else this->reset();
|
||||
|
||||
this->state = STPWTCH_RUNNING;
|
||||
this->state = STOPWATCH_RUNNING;
|
||||
this->startTimestamp = millis();
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
void Stopwatch::reset() {
|
||||
|
@ -68,18 +74,18 @@ void Stopwatch::reset() {
|
|||
Stopwatch::debug(PSTR("reset"));
|
||||
#endif
|
||||
|
||||
this->state = STPWTCH_STOPPED;
|
||||
this->state = STOPWATCH_STOPPED;
|
||||
this->startTimestamp = 0;
|
||||
this->stopTimestamp = 0;
|
||||
this->accumulator = 0;
|
||||
}
|
||||
|
||||
bool Stopwatch::isRunning() {
|
||||
return (this->state == STPWTCH_RUNNING) ? true : false;
|
||||
return (this->state == STOPWATCH_RUNNING) ? true : false;
|
||||
}
|
||||
|
||||
bool Stopwatch::isPaused() {
|
||||
return (this->state == STPWTCH_PAUSED) ? true : false;
|
||||
return (this->state == STOPWATCH_PAUSED) ? true : false;
|
||||
}
|
||||
|
||||
uint16_t Stopwatch::duration() {
|
||||
|
|
|
@ -29,9 +29,9 @@
|
|||
//#define DEBUG_STOPWATCH
|
||||
|
||||
enum StopwatchState {
|
||||
STPWTCH_STOPPED,
|
||||
STPWTCH_RUNNING,
|
||||
STPWTCH_PAUSED
|
||||
STOPWATCH_STOPPED,
|
||||
STOPWATCH_RUNNING,
|
||||
STOPWATCH_PAUSED
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -56,22 +56,25 @@ class Stopwatch {
|
|||
* @brief Stops the stopwatch
|
||||
* @details Stops the running timer, it will silently ignore the request if
|
||||
* no timer is currently running.
|
||||
* @return true is method was successful
|
||||
*/
|
||||
void stop();
|
||||
bool stop();
|
||||
|
||||
/**
|
||||
* @brief Pauses the stopwatch
|
||||
* @brief Pause the stopwatch
|
||||
* @details Pauses the running timer, it will silently ignore the request if
|
||||
* no timer is currently running.
|
||||
* @return true is method was successful
|
||||
*/
|
||||
void pause();
|
||||
bool pause();
|
||||
|
||||
/**
|
||||
* @brief Starts the stopwatch
|
||||
* @details Starts the timer, it will silently ignore the request if the
|
||||
* timer is already running.
|
||||
* @return true is method was successful
|
||||
*/
|
||||
void start();
|
||||
bool start();
|
||||
|
||||
/**
|
||||
* @brief Resets the stopwatch
|
||||
|
@ -82,21 +85,21 @@ class Stopwatch {
|
|||
/**
|
||||
* @brief Checks if the timer is running
|
||||
* @details Returns true if the timer is currently running, false otherwise.
|
||||
* @return bool
|
||||
* @return true if stopwatch is running
|
||||
*/
|
||||
bool isRunning();
|
||||
|
||||
/**
|
||||
* @brief Checks if the timer is paused
|
||||
* @details Returns true if the timer is currently paused, false otherwise.
|
||||
* @return bool
|
||||
* @return true if stopwatch is paused
|
||||
*/
|
||||
bool isPaused();
|
||||
|
||||
/**
|
||||
* @brief Gets the running time
|
||||
* @details Returns the total number of seconds the timer has been running.
|
||||
* @return uint16_t
|
||||
* @return the delta since starting the stopwatch
|
||||
*/
|
||||
uint16_t duration();
|
||||
|
||||
|
|
Reference in a new issue