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  ArduiEmulator::ArduinoForm::_eventLog("Sent", inId, inEvent, inData);
31 #endif
32 
34  if (*(Commanders::EventHandler) != NULL)
35  {
38  Commanders::EventHandler(inId, inEvent, inData);
39  return inId;
40  }
41 
42  EventStack::EventsStack.PushEvent(inId, inEvent, inData);
43  return UNDEFINED_ID;
44 }
45 
46 #if defined(COMMANDERS_DEBUG_MODE) || defined(COMMANDERS_PRINT_COMMANDERS)
47 
49 {
50  switch (inMoveType)
51  {
52  case COMMANDERS_MOVE_MORE: Serial.print(F("MORE")); break;
53  case COMMANDERS_MOVE_LESS: Serial.print(F("LESS")); break;
54  case COMMANDERS_MOVE_STOP: Serial.print(F("STOP")); break;
55  case COMMANDERS_MOVE_LEFT: Serial.print(F("LEFT")); break;
56  case COMMANDERS_MOVE_RIGHT: Serial.print(F("RIGHT")); break;
57  case COMMANDERS_MOVE_CENTER: Serial.print(F("CENTER")); break;
58  case COMMANDERS_MOVE_TOP: Serial.print(F("TOP")); break;
59  case COMMANDERS_MOVE_BOTTOM: Serial.print(F("BOTTOM")); break;
60  case COMMANDERS_MOVE_STRAIGHT: Serial.print(F("STRAIGHT")); break;
61  case COMMANDERS_MOVE_DIVERGE: Serial.print(F("DIVERGE")); break;
62  case COMMANDERS_MOVE_ON: Serial.print(F("ON")); break;
63  case COMMANDERS_MOVE_OFF: Serial.print(F("OFF")); break;
64  }
65 }
66 
67 void Commanders::printEventData(COMMANDERS_EVENT_TYPE inEventType, int inEventData)
68 {
69  switch (inEventType)
70  {
73  break;
75  Serial.print(inEventData, DEC);
76  break;
78  Serial.print(inEventData, DEC);
79  break;
81  Serial.print(COMMANDERSCONFIGADDRESS(inEventData), DEC);
82  Serial.print(F(" / "));
83  Serial.print(COMMANDERSCONFIGVALUE(inEventData), DEC);
84  break;
85  }
86 }
87 
88 void Commanders::printEventType(COMMANDERS_EVENT_TYPE inEventType, bool inDataFollow)
89 {
90  switch (inEventType)
91  {
92  case COMMANDERS_EVENT_NONE: Serial.println(F("NONE")); break;
93  case COMMANDERS_EVENT_TOGGLE: Serial.println(F("TOGGLE")); break;
94  case COMMANDERS_EVENT_MOVE: Serial.print(F("MOVE")); break;
95  case COMMANDERS_EVENT_MOVEPOSITION: Serial.print(F("MOVEPOSITION")); break;
96  case COMMANDERS_EVENT_MOVEPOSITIONID: Serial.print(F("MOVEPOSITIONID")); break;
97  case COMMANDERS_EVENT_MOVEPOSITIONINDEX:Serial.print(F("MOVEPOSITIONINDEX")); break;
98  case COMMANDERS_EVENT_CONFIG: Serial.print(F("CONFIG")); break;
99  }
100 
101  if (inDataFollow)
102  switch (inEventType)
103  {
108  Serial.print(F(" "));
109  break;
110  }
111 }
112 
113 void Commanders::printEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
114 {
115  Serial.print(F("Commander event : Address : "));
116  Serial.print(inId, DEC);
117  Serial.print(F(" / "));
118  printEventType(inEventType, true);
119  printEventData(inEventType, inEventData);
120  Serial.println(F(""));
121 }
122 #endif
123 
124 unsigned long Commanders::loop()
125 {
126  if (FirstLoop)
127  {
128 #ifdef COMMANDERS_DEBUG_MODE
129  Serial.println(F("*** Setup Commanders Finished."));
130 #endif
132  FirstLoop = false;
133  }
134 
135  if (Commanders::StatusLedPin != DP_INVALID &&
136  Commanders::StartStatusLed > 0 &&
137  millis() - Commanders::StartStatusLed > Commanders::BlinkDelay)
138  {
139  digitalWrite2f(Commanders::StatusLedPin, LOW);
140  Commanders::StartStatusLed = 0;
141  }
142 
143  unsigned long id;
144  id = Commander::loops();
145 
146  if (*(Commanders::EventHandler) == NULL)
147  {
149  int data;
150 
152  if (event < EVENT_MAXNUMBER)
153  {
154  EventStack::EventsStack.GetEvent(event, &id, &type, &data);
157  }
158  }
159  return id;
160 }
void GetEvent(byte inIndex, unsigned long *inpId, COMMANDERS_EVENT_TYPE *inpType, int *inpData)
Definition: EventStack.cpp:37
static unsigned long loop()
Definition: Commanders.cpp:124
static void printEventType(COMMANDERS_EVENT_TYPE inEventType, bool inDataFollow)
static void BeforeFirstLoops()
Definition: Commander.cpp:33
static void printEventData(COMMANDERS_EVENT_TYPE inEventType, int inEventData)
static void printEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
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 EventStack EventsStack
Definition: EventStack.hpp:36
static void SetLastEventData(int inData)
Definition: Commanders.hpp:93
COMMANDERS_MOVE_TYPE
Definition: Events.h:8
static void SetLastEventType(COMMANDERS_EVENT_TYPE inEvent)
Definition: Commanders.hpp:89
static void StatusBlink()
Definition: Commanders.cpp:18
static unsigned int BlinkDelay
Definition: Commanders.hpp:35
static GPIO_pin_t StatusLedPin
Definition: Commanders.hpp:33
byte GetPendingEventIndex()
Definition: EventStack.cpp:28
static unsigned long loops()
Definition: Commander.cpp:55
static unsigned long RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent = COMMANDERS_EVENT_MOVEPOSITIONID, int inData = 0)
Definition: Commanders.cpp:27
COMMANDERS_EVENT_TYPE
Definition: Events.h:25