6 #ifndef MESSAGEPARSER_H
7 #define MESSAGEPARSER_H
17 #include "MergNodeIdentification.h"
19 #include "MergMemoryManagement.h"
20 #include "CircularBuffer.h"
25 #define Reset_AVR() asm volatile (" jmp 0");
29 #define SELF_ENUM_TIME 1000
30 #define TEMP_BUFFER_SIZE 128
31 #define SELF_ENUM_BUFFER_SIZE 99
32 #define BLINK_RATE 100
86 MergCBUS(byte num_node_vars,byte num_events,byte num_events_vars,byte max_device_numbers);
91 void skipMessage(message_type msg){setBitMessage (msg,
true);};
98 bool hasMessageToHandle();
104 bool initCanBus(
unsigned int port,
unsigned int rate,
unsigned int retries,
unsigned int retryIntervalMilliseconds);
113 bool readCanBus(byte *msg,byte *header,byte *length,byte buf_num);
127 void setLeds(byte green,byte yellow);
141 void saveNodeFlags();
142 void sendMessage(
Message *msg);
146 bool eventMatch(){
return eventmatch;};
154 byte getDeviceNumberIndex(){
return deviceNumberIdx;};
155 state getNodeState(){
return state_mode;};
157 byte sendOnEvent(
bool longEvent,
unsigned int event);
158 byte sendOffEvent(
bool longEvent,
unsigned int event);
159 byte sendOnEvent1(
bool longEvent,
unsigned int event,byte var1);
160 byte sendOffEvent1(
bool longEvent,
unsigned int event,byte var1);
161 byte sendOnEvent2(
bool longEvent,
unsigned int event,byte var1,byte var2);
162 byte sendOffEvent2(
bool longEvent,
unsigned int event,byte var1,byte var2);
163 byte sendOnEvent3(
bool longEvent,
unsigned int event,byte var1,byte var2,byte var3);
164 byte sendOffEvent3(
bool longEvent,
unsigned int event,byte var1,byte var2,byte var3);
167 void setTimerInterval(
long value){timerInterval=value;};
168 long getTimerInterval(){
return timerInterval;}
178 byte mergCanData[CANDATA_SIZE];
180 MergNodeIdentification nodeId;
186 unsigned long std_nn;
188 byte deviceNumberIdx;
189 CircularBuffer msgBuffer;
192 unsigned long startTime;
193 byte buffer[TEMP_BUFFER_SIZE];
197 bool messageToHandle;
199 void setBitMessage(byte pos,
bool val);
201 void getStoredEvents();
204 unsigned int runAutomatic();
206 byte handleConfigMessages();
207 byte handleDCCMessages();
208 byte handleACCMessages();
209 byte handleGeneralMessages();
212 void finishSelfEnumeration();
213 void clearMsgToSend();
214 byte sendCanMessage();
217 void sortArray(byte *a, byte n);
218 void prepareMessage(byte opc);
219 void prepareMessageBuff(byte data0=0,byte data1=0,byte data2=0,byte data3=0,byte data4=0,byte data5=0,byte data6=0,byte data7=0);
220 byte getMessageSize(byte opc);
228 void controlPushButton();
232 void(* resetFunc) (void);
234 unsigned int mainProcess();
235 void doSelfEnnumeration(
bool soft);
237 void doOutOfService();
239 bool isSelfEnumMode();
244 void setNodeState(state newstate){ state_mode=newstate;};
246 byte getAccExtraData(byte idx);
253 #endif // MESSAGEPARSER_H
byte getEventVar(Message *msg, byte varIndex)
Get the variable of a learned event.
Definition: MergCBUS.cpp:1492
byte getNodeMode()
Get the node mode.
Definition: MergCBUS.h:121
unsigned int getDeviceNumber(byte port)
Get the device number for a specific port.
Definition: MergCBUS.cpp:1524
void setUserHandlerFunction(userHandlerType f)
Set the user function to handle other messages.
Definition: MergCBUS.h:106
void setDebug(bool debug)
Put in debug mode.
Definition: MergCBUS.cpp:980
bool isAccOff()
Definition: MergCBUS.cpp:1232
void processMessage(message_type msg)
Set to process certain message.
Definition: MergCBUS.h:95
virtual ~MergCBUS()
Destructor Not used.
Definition: MergCBUS.cpp:82
void setPushButton(byte pb)
Set the CBUS modules stardard push button.
Definition: MergCBUS.h:129
void setLeds(byte green, byte yellow)
Set the CBUS modules stardard leds.
Definition: MergCBUS.cpp:1168
void setSlimMode()
Set the node to slim mode.
Definition: MergCBUS.cpp:1251
bool readCanBus()
Read the can bus from the circular buffer and load the data in the message object.
Definition: MergCBUS.cpp:333
void cbusRead()
Read the can bus message and put in circular buffer. Used by the timer the buffer is 1 byte for the m...
Definition: MergCBUS.cpp:1621
void setDeviceNumber(unsigned int val, byte port)
Set the device number for a specific port.
Definition: MergCBUS.cpp:1515
MergCBUS(byte num_node_vars, byte num_events, byte num_events_vars, byte max_device_numbers)
Constructor Create the internal buffers. Initiate the memory management and transport object...
Definition: MergCBUS.cpp:11
void dumpMemory()
Print all memory to serial. Used for debug.
Definition: MergMemoryManagement.cpp:500
bool initCanBus(unsigned int port, unsigned int rate, unsigned int retries, unsigned int retryIntervalMilliseconds)
Set the port number for SPI communication. Set the CBUS rate and initiate the transport layer...
Definition: MergCBUS.cpp:108
MergNodeIdentification * getNodeId()
Get a reference to node identification.
Definition: MergCBUS.h:102
void setStdNN(unsigned int val)
Set the standard node number for slim mode. The user of this library has to create its own way of let...
Definition: MergCBUS.h:136
void setUpNewMemory()
Reset EEPROM.
Definition: MergCBUS.cpp:1159
void dumpMemory()
Print all EEPROM values.
Definition: MergCBUS.h:125
byte getNodeVar(byte varIndex)
Get node variable by index.
Definition: MergCBUS.cpp:1481
Definition: MergCBUS.h:80
bool isAccOn()
Definition: MergCBUS.cpp:1225
void setFlimMode()
Set the node to flim mode.
Definition: MergCBUS.cpp:1261
void printReceivedMessage()
Print the received message buffer to serial. Used for debug.
Definition: MergCBUS.cpp:1141
unsigned int getEventIndex(Message *msg)
Get the Index in memory of an event.
Definition: MergCBUS.cpp:1470
bool hasThisEvent()
Check it the received event is a learned event. For the messages ACONs,ACOFs,ASONs,ASOFs. Should be called after reading the can bus.
Definition: MergCBUS.cpp:1093
unsigned int getStdNN()
Get the standard node number.
Definition: MergCBUS.h:140
unsigned int run()
Method that deals with the majority of messages and behavior. Auto enummeration, query requests and c...
Definition: MergCBUS.cpp:156
void(* userHandlerType)(Message *, MergCBUS *)
Definition: MergCBUS.h:84
void sendERRMessage(byte code)
Send the error message with the code.
Definition: MergCBUS.cpp:1083
Definition: MergMemoryManagement.h:42
void skipMessage(message_type msg)
Set to skip processing certain message.
Definition: MergCBUS.h:91
void printSentMessage()
Print the message to be sent to serial. Used for debug.
Definition: MergCBUS.cpp:1127