Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ICE-Application/src/ConfigurationHandler/Controls/TimerControl.h@0:61364762ee0e, 2017-01-24 (annotated)
- Committer:
- jmarkel44
- Date:
- Tue Jan 24 19:05:33 2017 +0000
- Revision:
- 0:61364762ee0e
Port from IAR to Nucleo-F412 board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmarkel44 | 0:61364762ee0e | 1 | /****************************************************************************** |
jmarkel44 | 0:61364762ee0e | 2 | * |
jmarkel44 | 0:61364762ee0e | 3 | * File: TimerControl.h |
jmarkel44 | 0:61364762ee0e | 4 | * Desciption: ICE Timer Control Class |
jmarkel44 | 0:61364762ee0e | 5 | * |
jmarkel44 | 0:61364762ee0e | 6 | *****************************************************************************/ |
jmarkel44 | 0:61364762ee0e | 7 | #ifndef TIMERCONTROL_H |
jmarkel44 | 0:61364762ee0e | 8 | #define TIMERCONTROL_H |
jmarkel44 | 0:61364762ee0e | 9 | |
jmarkel44 | 0:61364762ee0e | 10 | //#include "ConfigurationHandler.h" |
jmarkel44 | 0:61364762ee0e | 11 | #include <string> |
jmarkel44 | 0:61364762ee0e | 12 | #include <stdio.h> |
jmarkel44 | 0:61364762ee0e | 13 | #include <vector> |
jmarkel44 | 0:61364762ee0e | 14 | |
jmarkel44 | 0:61364762ee0e | 15 | typedef enum { |
jmarkel44 | 0:61364762ee0e | 16 | TIMER_CONTROL_OK, |
jmarkel44 | 0:61364762ee0e | 17 | TIMER_CONTROL_UNK_STATE, |
jmarkel44 | 0:61364762ee0e | 18 | TIMER_CONTROL_ERROR, |
jmarkel44 | 0:61364762ee0e | 19 | TIMER_CONTROL_DESTROY |
jmarkel44 | 0:61364762ee0e | 20 | } TimerControlError_t; |
jmarkel44 | 0:61364762ee0e | 21 | |
jmarkel44 | 0:61364762ee0e | 22 | |
jmarkel44 | 0:61364762ee0e | 23 | //! Timer Control - implements a timer control. |
jmarkel44 | 0:61364762ee0e | 24 | /// @code |
jmarkel44 | 0:61364762ee0e | 25 | /// #include "TimerControl.h" |
jmarkel44 | 0:61364762ee0e | 26 | /// |
jmarkel44 | 0:61364762ee0e | 27 | /// int main(void) |
jmarkel44 | 0:61364762ee0e | 28 | /// { |
jmarkel44 | 0:61364762ee0e | 29 | /// TimerControl *t = new TimerControl(); |
jmarkel44 | 0:61364762ee0e | 30 | /// bool rc = t->load(controlFile); |
jmarkel44 | 0:61364762ee0e | 31 | /// if ( rc != true ) { |
jmarkel44 | 0:61364762ee0e | 32 | /// logError("%s: failed to load the manual control\n"); |
jmarkel44 | 0:61364762ee0e | 33 | /// delete t; |
jmarkel44 | 0:61364762ee0e | 34 | /// exit(-1); |
jmarkel44 | 0:61364762ee0e | 35 | /// } |
jmarkel44 | 0:61364762ee0e | 36 | /// |
jmarkel44 | 0:61364762ee0e | 37 | /// t->start(); |
jmarkel44 | 0:61364762ee0e | 38 | /// for ( ;; ) { |
jmarkel44 | 0:61364762ee0e | 39 | /// t->update(); |
jmarkel44 | 0:61364762ee0e | 40 | /// } |
jmarkel44 | 0:61364762ee0e | 41 | /// } |
jmarkel44 | 0:61364762ee0e | 42 | /// @endcode |
jmarkel44 | 0:61364762ee0e | 43 | class TimerControl |
jmarkel44 | 0:61364762ee0e | 44 | { |
jmarkel44 | 0:61364762ee0e | 45 | private: |
jmarkel44 | 0:61364762ee0e | 46 | std::string controlFile; // file containing control data |
jmarkel44 | 0:61364762ee0e | 47 | std::string id; // timer identifier |
jmarkel44 | 0:61364762ee0e | 48 | std::string output; // output to control |
jmarkel44 | 0:61364762ee0e | 49 | unsigned int priority; // control priority |
jmarkel44 | 0:61364762ee0e | 50 | unsigned int day; |
jmarkel44 | 0:61364762ee0e | 51 | unsigned int startHour; // start hour (0-23) |
jmarkel44 | 0:61364762ee0e | 52 | unsigned int startMin; // start minute (0-59) |
jmarkel44 | 0:61364762ee0e | 53 | unsigned int startSec; // start second (0-59) |
jmarkel44 | 0:61364762ee0e | 54 | unsigned int duration; // duration in seconds |
jmarkel44 | 0:61364762ee0e | 55 | unsigned int week; // every week, first week, ... |
jmarkel44 | 0:61364762ee0e | 56 | |
jmarkel44 | 0:61364762ee0e | 57 | enum State { |
jmarkel44 | 0:61364762ee0e | 58 | STATE_INIT, |
jmarkel44 | 0:61364762ee0e | 59 | STATE_OFF, |
jmarkel44 | 0:61364762ee0e | 60 | STATE_RUNNING, |
jmarkel44 | 0:61364762ee0e | 61 | STATE_FINISHED, |
jmarkel44 | 0:61364762ee0e | 62 | STATE_DISABLED |
jmarkel44 | 0:61364762ee0e | 63 | }; |
jmarkel44 | 0:61364762ee0e | 64 | State currentState; |
jmarkel44 | 0:61364762ee0e | 65 | |
jmarkel44 | 0:61364762ee0e | 66 | unsigned long nextScheduledStartTime; |
jmarkel44 | 0:61364762ee0e | 67 | unsigned long startTime; |
jmarkel44 | 0:61364762ee0e | 68 | |
jmarkel44 | 0:61364762ee0e | 69 | bool isVirtualOutput; |
jmarkel44 | 0:61364762ee0e | 70 | |
jmarkel44 | 0:61364762ee0e | 71 | // validate control file data |
jmarkel44 | 0:61364762ee0e | 72 | bool validateControlData(const char *buf); |
jmarkel44 | 0:61364762ee0e | 73 | |
jmarkel44 | 0:61364762ee0e | 74 | // copy control file data to object |
jmarkel44 | 0:61364762ee0e | 75 | void copyControlData(const char *buf); |
jmarkel44 | 0:61364762ee0e | 76 | |
jmarkel44 | 0:61364762ee0e | 77 | // start a feed |
jmarkel44 | 0:61364762ee0e | 78 | void startFeed(void); |
jmarkel44 | 0:61364762ee0e | 79 | |
jmarkel44 | 0:61364762ee0e | 80 | // stop a feed |
jmarkel44 | 0:61364762ee0e | 81 | void stopFeed(void); |
jmarkel44 | 0:61364762ee0e | 82 | |
jmarkel44 | 0:61364762ee0e | 83 | // calculate time until start |
jmarkel44 | 0:61364762ee0e | 84 | unsigned long calcStartTime() const; |
jmarkel44 | 0:61364762ee0e | 85 | |
jmarkel44 | 0:61364762ee0e | 86 | const char *displayTime(void); |
jmarkel44 | 0:61364762ee0e | 87 | |
jmarkel44 | 0:61364762ee0e | 88 | public: |
jmarkel44 | 0:61364762ee0e | 89 | TimerControl() { |
jmarkel44 | 0:61364762ee0e | 90 | currentState = STATE_INIT; |
jmarkel44 | 0:61364762ee0e | 91 | } |
jmarkel44 | 0:61364762ee0e | 92 | ~TimerControl() { |
jmarkel44 | 0:61364762ee0e | 93 | printf("\r%s invoked\n", __func__); |
jmarkel44 | 0:61364762ee0e | 94 | } |
jmarkel44 | 0:61364762ee0e | 95 | /// load control data from a JSON configuration file |
jmarkel44 | 0:61364762ee0e | 96 | bool load(std::string filename); |
jmarkel44 | 0:61364762ee0e | 97 | |
jmarkel44 | 0:61364762ee0e | 98 | /// start a timer control instance |
jmarkel44 | 0:61364762ee0e | 99 | void start(void); |
jmarkel44 | 0:61364762ee0e | 100 | |
jmarkel44 | 0:61364762ee0e | 101 | /// update a timer control instance |
jmarkel44 | 0:61364762ee0e | 102 | TimerControlError_t update(void); |
jmarkel44 | 0:61364762ee0e | 103 | |
jmarkel44 | 0:61364762ee0e | 104 | /// unregister a timer control instance from the output thread |
jmarkel44 | 0:61364762ee0e | 105 | void unregisterControl(void); |
jmarkel44 | 0:61364762ee0e | 106 | |
jmarkel44 | 0:61364762ee0e | 107 | /// display pertinent data of a timer control instance |
jmarkel44 | 0:61364762ee0e | 108 | void display(void); |
jmarkel44 | 0:61364762ee0e | 109 | |
jmarkel44 | 0:61364762ee0e | 110 | std::string getControlFile(void) const { |
jmarkel44 | 0:61364762ee0e | 111 | return controlFile; |
jmarkel44 | 0:61364762ee0e | 112 | } |
jmarkel44 | 0:61364762ee0e | 113 | |
jmarkel44 | 0:61364762ee0e | 114 | std::string getId(void) const { |
jmarkel44 | 0:61364762ee0e | 115 | return id; |
jmarkel44 | 0:61364762ee0e | 116 | } |
jmarkel44 | 0:61364762ee0e | 117 | |
jmarkel44 | 0:61364762ee0e | 118 | std::string getOutput(void) const { |
jmarkel44 | 0:61364762ee0e | 119 | return output; |
jmarkel44 | 0:61364762ee0e | 120 | } |
jmarkel44 | 0:61364762ee0e | 121 | |
jmarkel44 | 0:61364762ee0e | 122 | unsigned int getPriority(void) const { |
jmarkel44 | 0:61364762ee0e | 123 | return priority; |
jmarkel44 | 0:61364762ee0e | 124 | } |
jmarkel44 | 0:61364762ee0e | 125 | |
jmarkel44 | 0:61364762ee0e | 126 | unsigned int getDuration(void) const { |
jmarkel44 | 0:61364762ee0e | 127 | return duration; |
jmarkel44 | 0:61364762ee0e | 128 | } |
jmarkel44 | 0:61364762ee0e | 129 | |
jmarkel44 | 0:61364762ee0e | 130 | State getCurrentState(void) const { |
jmarkel44 | 0:61364762ee0e | 131 | return currentState; |
jmarkel44 | 0:61364762ee0e | 132 | } |
jmarkel44 | 0:61364762ee0e | 133 | }; |
jmarkel44 | 0:61364762ee0e | 134 | |
jmarkel44 | 0:61364762ee0e | 135 | #endif |