10 #pragma message ("Commanders : No DCC commander !") 13 DCC_Decoder DCC_Decoder::DCCInstance;
16 DccAccDecoderPacket DccCommanderClass::func_AccPacket;
25 int realAddress = address;
27 #ifdef COMMANDERS_DEBUG_MODE 28 #ifdef COMMANDERS_DEBUG_VERBOSE_MODE 29 Serial.print(F(
"Dcc packet found : real data : "));
30 Serial.print(realAddress);
31 Serial.print(F(
" / "));
32 Serial.print(data, DEC);
33 Serial.print(F(
" / "));
34 Serial.print(activate, DEC);
38 if (!DccCommander.UseRawDccAddresses)
43 realAddress += (data & 0x06) >> 1;
47 #ifdef COMMANDERS_DEBUG_MODE 48 #ifdef COMMANDERS_DEBUG_VERBOSE_MODE 49 Serial.print(F(
" converted : "));
50 Serial.print(realAddress);
51 Serial.print(F(
" / "));
52 Serial.print(data, DEC);
53 Serial.print(F(
" / "));
54 Serial.println(activate, DEC);
65 if (activate == DccCommander.RaiseEventOnActivation)
67 if (DCCINT(realAddress, data) == DccCommander.LastDccId)
68 if (millis() - DccCommander.LastEventDate < DccCommander.RaiseEventDebounceDelay)
70 #ifdef COMMANDERS_DEBUG_MODE 71 Serial.print(F(
"DccCommander packet IGNORED :"));
72 Serial.print(realAddress);
73 Serial.print(F(
" / "));
74 Serial.println(data, DEC);
79 DccCommander.LastEventDate = millis();
81 #ifdef COMMANDERS_DEBUG_MODE 82 Serial.print(F(
"DccCommander packet received :"));
83 Serial.print(realAddress);
84 Serial.print(F(
" / "));
85 Serial.println(data, DEC);
87 if (DccCommanderClass::func_AccPacket)
88 (DccCommanderClass::func_AccPacket)(realAddress, activate, data);
93 DccCommander.LastDccId = DCCINT(realAddress, data);
98 #ifdef COMMANDERS_DEBUG_MODE 99 #define CHECK(val, text) CheckIndex(val, F(text)) 101 #define CHECK(val, text) 105 void StatusBlink_handler()
113 DCC.beginDecoder(i, j, interruptNumber);
114 this->UseRawDccAddresses = inUseRawDccAddresses;
118 pinMode(interruptNumber, OUTPUT_INTERRUPT);
121 this->LastEventDate = 0;
122 this->RaiseEventOnActivation =
false;
123 this->RaiseEventDebounceDelay = 200;
127 if (inInterruptMonitor)
128 DCC.SetInterruptMonitor(StatusBlink_handler);
130 #ifdef COMMANDERS_PRINT_COMMANDERS 131 this->Interrupt = interruptNumber;
137 this->RaiseEventOnActivation = inRaiseEventOnActivation;
138 this->RaiseEventDebounceDelay = inRaiseEventDebounceDelay;
147 #ifdef COMMANDERS_DEBUG_MODE 148 #ifdef COMMANDERS_DEBUG_VERBOSE_MODE 149 static int countLoop = 0;
153 static unsigned long start = 0;
155 #define ELAPSEDTIME ((unsigned long) -2) 163 #ifdef COMMANDERS_DEBUG_MODE 164 #ifdef COMMANDERS_DEBUG_VERBOSE_MODE 183 unsigned long last = this->LastDccId;
198 DccCommanderClass::func_AccPacket = func;
201 #ifdef COMMANDERS_DEBUG_MODE 204 Serial.print(F(
"DCC Commander event : Address : "));
205 Serial.print(DCCID(inId), DEC);
206 Serial.print(F(
" / "));
207 Serial.print(DCCACTIVATION(inId), DEC);
208 Serial.print(F(
" / "));
214 Serial.print(F(
"MOVE "));
232 Serial.print(F(
"MOVEPOSITION : "));
233 Serial.println(inEventData, DEC);
236 Serial.println(F(
"MOVEPOSITIONID"));
239 Serial.print(F(
"MOVEPOSITIONINDEX : "));
240 Serial.println(inEventData, DEC);
243 Serial.print(F(
"CONFIG : "));
244 Serial.print(COMMANDERSCONFIGADDRESS(inEventData), DEC);
245 Serial.print(F(
" / "));
246 Serial.println(COMMANDERSCONFIGVALUE(inEventData), DEC);
252 #ifdef COMMANDERS_PRINT_COMMANDERS 255 Serial.print(F(
"Commander: DccCommander - Interrupt: "));
256 Serial.println(this->Interrupt);
static void SetAccessoryDecoderPacketHandler(DccAccDecoderPacket func)
static void SetLastEventData(int inData)
static void SetLastEventType(COMMANDERS_EVENT_TYPE inEvent)
void RaiseEventWhen(boolean inRaiseEventOnActivation, int inRaiseEventDebounceDelay = 200)
void begin(int i, int j, int interruptNumber, boolean inInterruptMonitor = false, boolean inUseRawDccAddresses = false)
static GPIO_pin_t StatusLedPin
static void printEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
static unsigned long RaiseEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent = COMMANDERS_EVENT_MOVEPOSITIONID, int inData = 0)
static void DccAccessoryDecoderPacket(int address, boolean activate, uint8_t data)