Commanders
Arduino buttons/bus library
EventsSequencer.hpp
1 //-------------------------------------------------------------------
2 #ifndef __EventsSequencer_Hpp__
3 #define __EventsSequencer_Hpp__
4 //-------------------------------------------------------------------
5 
6 #include <Commanders.h>
7 
8 #ifndef NO_EVENTSSEQUENCER
9 
14 {
15  unsigned long id;
17  int data;
18  unsigned long delay; // delay for 'this' command
19  EventsSequencerItem *next;
20 
21  EventsSequencerItem *GetNext() { return this->next; }
22  void SetNext(EventsSequencerItem *inNext) { this->next = inNext; }
23  unsigned long GetDelay() { return this->delay; }
24 };
25 
28 #define FLAG_PERPETUAL 0
29 
31 #define FLAG_PPOINTER 1
32 
34 #define FLAG_PAUSED 2
35 
43 {
44 private:
45  EventsSequencer * pNextSequencer;
46  static EventsSequencer *pFirstSequencer;
47 
48  EventsSequencer *GetNextSequencer() { return this->pNextSequencer; }
49 
50  static EventsSequencer *GetLastSequencer();
51 
52  unsigned long int startDate;
53  byte flags;
54 
57  EventsSequencerItem *GetFirstItem(EventsSequencerItem *apLocal = NULL) const;
60  EventsSequencerItem *GetCurrentItem(EventsSequencerItem *apLocal = NULL) const;
63  EventsSequencerItem *GetLastItem() const;
64 
68  void WritePPointer(bool flag) { bitWrite(this->flags, FLAG_PPOINTER, flag); }
71  void SetPPointer() { bitSet(this->flags, FLAG_PPOINTER); }
74  void ResetPPointer() { bitClear(this->flags, FLAG_PPOINTER); }
75 
79  void WritePerpetual(bool flag) { bitWrite(this->flags, FLAG_PERPETUAL, flag); }
83  void WritePaused(bool flag) { bitWrite(this->flags, FLAG_PAUSED, flag); }
84 
87  void SetPerpetual() { bitSet(this->flags, FLAG_PERPETUAL); }
90  void SetPaused() { bitSet(this->flags, FLAG_PAUSED); }
91 
94  void ResetPerpetual() { bitClear(this->flags, FLAG_PERPETUAL); }
97  void ResetPaused() { bitClear(this->flags, FLAG_PAUSED); }
98 
99  bool IsCurrentItemLast();
100 
101 public:
108 
111  EventsSequencer();
112 
116  bool IsPerpetual() const { return bitRead(this->flags, FLAG_PERPETUAL) > 0; }
120  bool IsPPointer() const { return bitRead(this->flags, FLAG_PPOINTER) > 0; }
124  bool IsPaused() const { return bitRead(this->flags, FLAG_PAUSED) > 0; }
125 
129  void begin(bool inPerpetual) { this->WritePerpetual(inPerpetual); }
130 
137  void AddEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inType, int inData, unsigned long inDelay);
141  void AddEvents(const EventsSequencerItem *apEvents);
144  void StartItem(EventsSequencerItem *inItem = NULL);
145 
148  void Start() { this->StartItem(); }
151  void Stop() { this->pCurrent = NULL; }
154  void Pause() { this->SetPaused(); }
157  void Continue() { this->ResetPaused(); }
158 
162  bool loop();
163 
166  static void loops();
167 
168 #ifdef COMMANDERS_PRINT_COMMANDERS
169 
172  void printSequencer();
176  static void printAllSequencers();
177 #endif
178 };
179 
180 
181 #endif
182 #endif
void StartItem(EventsSequencerItem *inItem = NULL)
void AddEvents(const EventsSequencerItem *apEvents)
void AddEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inType, int inData, unsigned long inDelay)
void begin(bool inPerpetual)
bool IsPaused() const
bool IsPPointer() const
bool IsPerpetual() const
EventsSequencerItem * pCurrent
static void printAllSequencers()
static void loops()
EventsSequencerItem * pFirst
COMMANDERS_EVENT_TYPE
Definition: Events.h:25