Commanders
Arduino buttons/bus library
Commanders.cpp
1 /*************************************************************
2 project: <Commanders>
3 author: <Thierry PARIS>
4 description: <Base functions of the library>
5 *************************************************************/
6 
7 #include <Commanders.h>
8 #include "EventStack.hpp"
9 
10 CommandersEventHandlerFunction Commanders::EventHandler = NULL;
11 COMMANDERS_EVENT_TYPE Commanders::lastEventType;
12 int Commanders::lastEventData;
13 GPIO_pin_t Commanders::StatusLedPin = DP_INVALID;
14 unsigned int Commanders::BlinkDelay = 1000;
15 unsigned long Commanders::StartStatusLed = 0;
16 bool FirstLoop = true;
17 
19 {
20  if (Commanders::StatusLedPin != DP_INVALID && Commanders::StartStatusLed == 0)
21  {
22  Commanders::StartStatusLed = millis();
23  digitalWrite2f(Commanders::StatusLedPin, HIGH);
24  }
25 }
26 
27 unsigned long Commanders::RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent, int inData)
28 {
29 #ifdef VISUALSTUDIO
30  CString buf;
31  _eventLog(_T("Sent"), inId, inEvent, inData);
32 #endif
33 
35  if (*(Commanders::EventHandler) != NULL)
36  {
39  Commanders::EventHandler(inId, inEvent, inData);
40  return inId;
41  }
42 
43  EventStack::EventsStack.PushEvent(inId, inEvent, inData);
44  return UNDEFINED_ID;
45 }
46 
47 #if defined(COMMANDERS_DEBUG_MODE) || defined(COMMANDERS_PRINT_COMMANDERS)
48 
50 {
51  switch (inMoveType)
52  {
53  case COMMANDERS_MOVE_MORE: Serial.print(F("MORE")); break;
54  case COMMANDERS_MOVE_LESS: Serial.print(F("LESS")); break;
55  case COMMANDERS_MOVE_STOP: Serial.print(F("STOP")); break;
56  case COMMANDERS_MOVE_LEFT: Serial.print(F("LEFT")); break;
57  case COMMANDERS_MOVE_RIGHT: Serial.print(F("RIGHT")); break;
58  case COMMANDERS_MOVE_CENTER: Serial.print(F("CENTER")); break;
59  case COMMANDERS_MOVE_TOP: Serial.print(F("TOP")); break;
60  case COMMANDERS_MOVE_BOTTOM: Serial.print(F("BOTTOM")); break;
61  case COMMANDERS_MOVE_STRAIGHT: Serial.print(F("STRAIGHT")); break;
62  case COMMANDERS_MOVE_DIVERGE: Serial.print(F("DIVERGE")); break;
63  case COMMANDERS_MOVE_ON: Serial.print(F("ON")); break;
64  case COMMANDERS_MOVE_OFF: Serial.print(F("OFF")); break;
65  }
66 }
67 
68 void Commanders::printEventData(COMMANDERS_EVENT_TYPE inEventType, int inEventData)
69 {
70  switch (inEventType)
71  {
74  break;
76  Serial.print(inEventData, DEC);
77  break;
79  Serial.print(inEventData, DEC);
80  break;
82  Serial.print(COMMANDERSCONFIGADDRESS(inEventData), DEC);
83  Serial.print(F(" / "));
84  Serial.print(COMMANDERSCONFIGVALUE(inEventData), DEC);
85  break;
86  }
87 }
88 
89 void Commanders::printEventType(COMMANDERS_EVENT_TYPE inEventType, bool inDataFollow)
90 {
91  switch (inEventType)
92  {
93  case COMMANDERS_EVENT_NONE: Serial.print(F("NONE")); break;
94  case COMMANDERS_EVENT_TOGGLE: Serial.print(F("TOGGLE")); break;
95  case COMMANDERS_EVENT_MOVE: Serial.print(F("MOVE")); break;
96  case COMMANDERS_EVENT_MOVEPOSITION: Serial.print(F("MOVEPOSITION")); break;
97  case COMMANDERS_EVENT_MOVEPOSITIONID: Serial.print(F("MOVEPOSITIONID")); break;
98  case COMMANDERS_EVENT_MOVEPOSITIONINDEX:Serial.print(F("MOVEPOSITIONINDEX")); break;
99  case COMMANDERS_EVENT_CONFIG: Serial.print(F("CONFIG")); break;
100  }
101 
102  if (inDataFollow)
103  switch (inEventType)
104  {
109  Serial.print(F(" "));
110  break;
111  }
112 }
113 
114 void Commanders::printEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
115 {
116  Serial.print(F("Commander event : Address : "));
117  Serial.print(inId, DEC);
118  Serial.print(F(" / "));
119  printEventType(inEventType, true);
120  printEventData(inEventType, inEventData);
121  Serial.println(F(""));
122 }
123 #endif
124 
125 unsigned long Commanders::loop()
126 {
127  if (FirstLoop)
128  {
129 #ifdef COMMANDERS_DEBUG_MODE
130  Serial.println(F("*** Setup Commanders Finished."));
131 #endif
133  FirstLoop = false;
134  }
135 
136  if (Commanders::StatusLedPin != DP_INVALID &&
137  Commanders::StartStatusLed > 0 &&
138  millis() - Commanders::StartStatusLed > Commanders::BlinkDelay)
139  {
140  digitalWrite2f(Commanders::StatusLedPin, LOW);
141  Commanders::StartStatusLed = 0;
142  }
143 
144 #ifndef NO_EVENTSSEQUENCER
146 #endif
147 
148  unsigned long id;
149  id = Commander::loops();
150 
151  if (*(Commanders::EventHandler) == NULL)
152  {
154  int data;
155 
157  if (event < EVENT_MAXNUMBER)
158  {
159  EventStack::EventsStack.GetEvent(event, &id, &type, &data);
162  }
163  }
164 
165 #ifdef COMMANDERS_DEBUG_MODE
166  if (id != UNDEFINED_ID)
168 #endif
169 
170  return id;
171 }
static int GetLastEventData()
Definition: Commanders.hpp:84
void GetEvent(byte inIndex, unsigned long *inpId, COMMANDERS_EVENT_TYPE *inpType, int *inpData)
Definition: EventStack.cpp:37
byte GetPendingEventIndex()
Definition: EventStack.cpp:28
static void BeforeFirstLoops()
Definition: Commander.cpp:33
static COMMANDERS_EVENT_TYPE GetLastEventType()
Definition: Commanders.hpp:80
static void printEventData(COMMANDERS_EVENT_TYPE inEventType, int inEventData)
static void printEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
COMMANDERS_MOVE_TYPE
Definition: Events.h:8
static unsigned long loop()
Definition: Commanders.cpp:125
static void printEventMoveType(COMMANDERS_MOVE_TYPE inMoveType)
#define UNDEFINED_ID
Definition: Events.h:38
void PushEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inType, int inData)
Definition: EventStack.cpp:12
static unsigned long loops()
Definition: Commander.cpp:55
static EventStack EventsStack
Definition: EventStack.hpp:36
static void SetLastEventData(int inData)
Definition: Commanders.hpp:93
static void printEventType(COMMANDERS_EVENT_TYPE inEventType, bool inDataFollow)
static void SetLastEventType(COMMANDERS_EVENT_TYPE inEvent)
Definition: Commanders.hpp:89
static unsigned long RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent = COMMANDERS_EVENT_MOVEPOSITIONID, int inData = 0)
Definition: Commanders.cpp:27
static void StatusBlink()
Definition: Commanders.cpp:18
static void loops()
static unsigned int BlinkDelay
Definition: Commanders.hpp:35
static GPIO_pin_t StatusLedPin
Definition: Commanders.hpp:33
COMMANDERS_EVENT_TYPE
Definition: Events.h:25