mirror of https://github.com/lumapu/ahoy.git
				
				
			
				 3 changed files with 164 additions and 25 deletions
			
			
		| @ -0,0 +1,126 @@ | |||
| //-----------------------------------------------------------
 | |||
| // You69Man, 2023
 | |||
| //
 | |||
| // This program is free software; you can redistribute it and/or
 | |||
| // modify it under the terms of the GNU General Public License
 | |||
| // version 2 as published by the Free Software Foundation.
 | |||
| //-----------------------------------------------------------
 | |||
| 
 | |||
| /**
 | |||
|  * @file timemonitor.h | |||
|  * | |||
|  * Class declaration for TimeMonitor | |||
|  */ | |||
| 
 | |||
| #ifndef __TIMEMONITOR_H__ | |||
| #define __TIMEMONITOR_H__ | |||
| 
 | |||
| #include <Arduino.h> | |||
| 
 | |||
| class TimeMonitor { | |||
|     public: | |||
|         /**
 | |||
|          * A constructor for initializing a TimeMonitor | |||
|          * @note TimeMonitor witch default constructor is stopped | |||
|          */ | |||
|         TimeMonitor(void) {}; | |||
| 
 | |||
|         /**
 | |||
|          * A constructor for initializing a TimeMonitor | |||
|          * @param timeout timeout in ms | |||
|          * @param start   (optional) if true, start TimeMonitor immediately | |||
|          * @note TimeMonitor witch default constructor is stopped | |||
|          */ | |||
|         TimeMonitor(uint32_t timeout, bool start = false) { | |||
|             if (start) | |||
|                 startTimeMonitor(timeout); | |||
|             else | |||
|                 configureTimeMonitor(timeout); | |||
|         }; | |||
| 
 | |||
|         /**
 | |||
|          * Start the TimeMonitor with new timeout configuration | |||
|          * @param timeout timout in ms | |||
|          */ | |||
|         void startTimeMonitor(uint32_t timeout) { | |||
|             mStartTime = millis(); | |||
|             mTimeout = timeout; | |||
|             mStarted = true; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Restart the TimeMonitor with already set timeout configuration | |||
|          * @note returns nothing | |||
|          */ | |||
|         void reStartTimeMonitor(void) { | |||
|             mStartTime = millis(); | |||
|             mStarted = true; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Configure the TimeMonitor to new timeout configuration | |||
|          * @param timeout timeout in ms | |||
|          * @note This doesn't restart an already running TimeMonitor. | |||
|          *       If timer is already running and new timeout is longer that current timeout runtime of the running timer is expanded | |||
|          *       If timer is already running and new timeout is shorter that current timeout this can immediately lead to a timeout | |||
|          */ | |||
|         void configureTimeMonitor(uint32_t timeout) { | |||
|             mTimeout = timeout; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Stop the TimeMonitor | |||
|          */ | |||
|         void stopTimeMonitor(void) { | |||
|             mStarted = false; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Get timeout status of the TimeMonitor | |||
|          * @return bool | |||
|          *         true:  TimeMonitor already timed out | |||
|          *         false: TimeMonitor still in time or TimeMonitor was stopped | |||
|          */ | |||
|         bool isTimeout(void) { | |||
|             if ((mStarted) && (millis() - mStartTime >= mTimeout)) | |||
|                 return true; | |||
|             else | |||
|                 return false; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Get timeout configuration of the TimeMonitor | |||
|          * @return uint32_t timeout value in ms | |||
|          */ | |||
|         uint32_t getTimeout(void) const { | |||
|             return mTimeout; | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Get residual time of the TimeMonitor until timeout | |||
|          * @return uint32_t residual time until timeout in ms | |||
|          * @note   in case of a stopped TimeMonitor residual time is always 0xFFFFFFFFUL | |||
|          *         in case of a timed out TimeMonitor residual time is always 0UL (zero) | |||
|          */ | |||
|         uint32_t getResidualTime(void) const { | |||
|             uint32_t delayed =  millis() - mStartTime; | |||
|             return(mStarted ? (delayed < mTimeout ? mTimeout - delayed : 0UL) : 0xFFFFFFFFUL); | |||
|         } | |||
| 
 | |||
|         /**
 | |||
|          * Get overall run time of the TimeMonitor | |||
|          * @return uint32_t residual time until timeout in ms | |||
|          * @note   in case of a stopped TimeMonitor residual time is always 0xFFFFFFFFUL | |||
|          *         in case of a timed out TimeMonitor residual time is always 0UL (zero) | |||
|          */ | |||
|         uint32_t getRunTime(void) const { | |||
|             return(mStarted ? millis() - mStartTime : 0UL); | |||
|         } | |||
| 
 | |||
|     private: | |||
|         uint32_t mStartTime = 0UL;  // start time of the TimeMonitor
 | |||
|         uint32_t mTimeout = 0UL;    // timeout configuration of the TimeMonitor
 | |||
|         bool     mStarted = false;  // start/stop state of the TimeMonitor
 | |||
| }; | |||
| 
 | |||
| #endif | |||
					Loading…
					
					
				
		Reference in new issue