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;
22  EventsSequencerItem *GetNext() { return this->next; }
24  void SetNext(EventsSequencerItem *inNext) { this->next = inNext; }
26  unsigned long GetDelay() { return this->delay; }
27 };
28 
31 #define FLAG_PERPETUAL 0
32 
34 #define FLAG_PPOINTER 1
35 
37 #define FLAG_PAUSED 2
38 
46 {
47 private:
48  EventsSequencer * pNextSequencer;
49  static EventsSequencer *pFirstSequencer;
50 
51  EventsSequencer *GetNextSequencer() { return this->pNextSequencer; }
52 
53  static EventsSequencer *GetLastSequencer();
54 
55  unsigned long int startDate;
56  byte flags;
57 
60  EventsSequencerItem *GetFirstItem(EventsSequencerItem *apLocal = NULL) const;
63  EventsSequencerItem *GetCurrentItem(EventsSequencerItem *apLocal = NULL) const;
66  EventsSequencerItem *GetLastItem() const;
67 
71  void WritePPointer(bool flag) { bitWrite(this->flags, FLAG_PPOINTER, flag); }
74  void SetPPointer() { bitSet(this->flags, FLAG_PPOINTER); }
77  void ResetPPointer() { bitClear(this->flags, FLAG_PPOINTER); }
78 
82  void WritePerpetual(bool flag) { bitWrite(this->flags, FLAG_PERPETUAL, flag); }
86  void WritePaused(bool flag) { bitWrite(this->flags, FLAG_PAUSED, flag); }
87 
90  void SetPerpetual() { bitSet(this->flags, FLAG_PERPETUAL); }
93  void SetPaused() { bitSet(this->flags, FLAG_PAUSED); }
94 
97  void ResetPerpetual() { bitClear(this->flags, FLAG_PERPETUAL); }
100  void ResetPaused() { bitClear(this->flags, FLAG_PAUSED); }
101 
102  bool IsCurrentItemLast();
103 
104 public:
111 
114  EventsSequencer();
115 
119  bool IsPerpetual() const { return bitRead(this->flags, FLAG_PERPETUAL) > 0; }
123  bool IsPPointer() const { return bitRead(this->flags, FLAG_PPOINTER) > 0; }
127  bool IsPaused() const { return bitRead(this->flags, FLAG_PAUSED) > 0; }
128 
132  void begin(bool inPerpetual) { this->WritePerpetual(inPerpetual); }
133 
140  void AddEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inType, int inData, unsigned long inDelay);
144  void AddEvents(const EventsSequencerItem *apEvents);
147  void StartItem(EventsSequencerItem *inItem = NULL);
148 
151  void Start() { this->StartItem(); }
154  void Stop() { this->pCurrent = NULL; }
157  void Pause() { this->SetPaused(); }
160  void Continue() { this->ResetPaused(); }
161 
165  bool loop();
166 
169  static void loops();
170 
171 #ifdef COMMANDERS_PRINT_COMMANDERS
172 
175  void printSequencer();
179  static void printAllSequencers();
180 #endif
181 };
182 
183 
184 #endif
185 #endif
static void printAllSequencers()
void StartItem(EventsSequencerItem *inItem = NULL)
void AddEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inType, int inData, unsigned long inDelay)
bool IsPaused() const
bool IsPPointer() const
bool IsPerpetual() const
EventsSequencerItem * pCurrent
unsigned long GetDelay()
void AddEvents(const EventsSequencerItem *apEvents)
void SetNext(EventsSequencerItem *inNext)
EventsSequencerItem * next
static void loops()
EventsSequencerItem * pFirst
COMMANDERS_EVENT_TYPE type
void begin(bool inPerpetual)
EventsSequencerItem * GetNext()
COMMANDERS_EVENT_TYPE
Definition: Events.h:25