| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /**
- * @file NbusBridge.h
- * @brief Deklarácia modulu nBus Bridge
- * @date Mar 7, 2025
- * @author Juraj Dudak
- */
- #ifndef SRC_NBUSBRIDGE_H_
- #define SRC_NBUSBRIDGE_H_
- #include "NbusSlave.h"
- /* DEFINES BEGIN */
- /** Maximálny počet zariadení slave na internej zbernici.
- * Pozor, súvisí to s alokáciou prostriedkov na MCU.
- */
- #define MAX_SLAVES 16
- #define ECHO_SCAN_LENGTH 4
- #define ECHO_SCAN_DATA {110, 66, 117, 115} // nBus
- #define ECHO_SCAN_CHAR0 110
- #define ECHO_SCAN_CHAR1 66
- #define ECHO_SCAN_CHAR2 117
- #define ECHO_SCAN_CHAR3 115
- /** Adresa broadcastu */
- #define BROADCAST_ADDRESS 0
- /** Virtuálna adresa modulu nBus Bridge */
- #define BRIDGE_ADDRESS 0xFF
- /** Macro for bridge terminator **/
- #define BRIDGE_TERMINATOR 0xFF
- #define BRIDGE_INFO_VERSION "1.0"
- #define BRIDGE_INFO_HW_FAMILY "STM"
- #define BRIDGE_INFO_HW_VERSION "0.5"
- #define DATAPACKET_SIZE (NBUS_MAX_FRAME_SIZE*MAX_SLAVES)
- /* DEFINES END */
- typedef enum {
- STATE_STOPPED,
- STATE_TO_STOP,
- STATE_RUNNING,
- }RunState_e;
- /**
- * @brief Trieda zabezpečujúca interpretáciu príkazov protokolu nBus.
- */
- class NbusBridge {
- private:
- uint8_t _crc8x_fast(void const *mem, uint16_t len);
- /** Objekt zabezpečujúci komunikáciu na internej aj externej zbernici nBus */
- NbusCommunicator *_communicator{nullptr};
- /** Statické pole objektov nBus slave */
- NbusSlave _slaves[MAX_SLAVES];
- /** Pole detegovaných adries modulov slave. Pole sa naplní pri automatickom skene internej zbernice */
- uint8_t _slave_adress[MAX_SLAVES]{0};
- /** Počet detegovaných slave zariadení. */
- uint8_t _num_slaves{0};
- /** Príznak indikuje, či je modul Bridge v stave RUN */
- RunState_e _run_state{STATE_STOPPED};
- /** Interný buffer */
- DataFrame *_worker_frame_ptr{nullptr};
- /** Pole bajtov použité pre generovanie odpovede pomocou triedy DataFrame */
- uint8_t _data_packet[DATAPACKET_SIZE]{0};
- /** Dataframe (wrapper nad _dataPacket), do ktorého za vygeneruje odsielaný packet.*/
- DataFrame _raw_data_frame{_data_packet, DATAPACKET_SIZE, TYPE_RAW, CRC_OFF};
- DataFrame _master_frame{_data_packet, DATAPACKET_SIZE, TYPE_PLAIN, CRC_ON};
- uint8_t _scan_request{0};
- Nbus_PDU_t _pdu{BROADCAST_ADDRESS, BROADCAST_ADDRESS, FC_ECHO};
- public:
- /** Nastaví komunikačný modul */
- void setCommunicator(NbusCommunicator *nc);
- void scan();
- uint8_t getNumSlaves();
- NbusSlave * getSlave(uint8_t index);
- DataFrame * bridge_getSlaves();
- DataFrame * bridge_getInfo();
- DataFrame * bridge_getData();
- DataFrame * bridge_setErrResponse(Nbus_EC_e ec);
- void processRequest(uint8_t *rxFrame, uint8_t size);
- void process_broadcast(uint8_t *rxFrame);
- void process_bridge_request(uint8_t *rxFrame, uint8_t size);
- void process_slave_request(uint8_t *rxFrame, uint8_t size);
- void broadcastStart();
- void broadcastStop();
- void processRunningState();
- };
- #endif /* SRC_NBUSBRIDGE_H_ */
|