NbusBridge.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * @file NbusBridge.h
  3. * @brief Deklarácia modulu nBus Bridge
  4. * @date Mar 7, 2025
  5. * @author Juraj Dudak
  6. */
  7. #ifndef SRC_NBUSBRIDGE_H_
  8. #define SRC_NBUSBRIDGE_H_
  9. #include "NbusSlave.h"
  10. /* DEFINES BEGIN */
  11. /** Maximálny počet zariadení slave na internej zbernici.
  12. * Pozor, súvisí to s alokáciou prostriedkov na MCU.
  13. */
  14. #define MAX_SLAVES 16
  15. /** Makro zistí adresu modulu z RX paketu */
  16. #define MODULE_ADDRESS(packet) packet[0]
  17. /** Makro zistí adresu seznora z RX paketu */
  18. #define SENSOR_ADDRESS(packet) packet[1]
  19. /** Makro zistí kód funkcie z RX paketu */
  20. #define FUNCTION_CODE(packet) packet[2]
  21. #define DATA0_ADDRESS(packet) packet[3]
  22. /** Adresa broadcastu */
  23. #define BROADCAST_ADDRESS 0
  24. /** Virtuálna adresa modulu nBus Bridge */
  25. #define BRIDGE_ADDRESS 0xFF
  26. #define BRIDGE_INFO_VERSION "1.0"
  27. #define BRIDGE_INFO_HW_FAMILY "STM"
  28. #define BRIDGE_INFO_HW_VERSION "0.5"
  29. #define PDU_SIZE 3
  30. #define RX_META 4
  31. #define DATAPACKET_SIZE (NBUS_MAX_FRAME_SIZE*MAX_SLAVES)
  32. /* DEFINES END */
  33. typedef enum {
  34. STATE_STOPPED,
  35. STATE_TO_STOP,
  36. STATE_RUNNING,
  37. }RunState_e;
  38. /**
  39. * @brief Trieda zabezpečujúca interpretáciu príkazov protokolu nBus.
  40. */
  41. class NbusBridge {
  42. private:
  43. /** Objekt zabezpečujúci komunikáciu na internej aj externej zbernici nBus */
  44. NbusCommunicator *_communicator;
  45. /** Statické pole objektov nBus slave */
  46. NbusSlave _slaves[MAX_SLAVES];
  47. /** Pole detegovaných adries modulov slave. Pole sa naplní pri automatickom skene internej zbernice */
  48. uint8_t _slave_adress[MAX_SLAVES];
  49. /** Počet detegovaných slave zariadení. */
  50. uint8_t _num_slaves;
  51. /** Príznak indikuje, či je modul Bridge v stave RUN */
  52. RunState_e _run_state;
  53. /** Interný buffer */
  54. DataFrame *_worker_frame_ptr;
  55. /** Pole bajtov použité pre generovanie odpovede pomocou triedy DataFrame */
  56. uint8_t _data_packet[DATAPACKET_SIZE];
  57. /** Dataframe (wrapper nad _dataPacket), do ktorého za vygeneruje odsielaný packet.*/
  58. DataFrame _raw_data_frame;
  59. DataFrame _master_frame;
  60. Nbus_pdu _pdu;
  61. public:
  62. NbusBridge();
  63. /** Nastaví komunikačný modul */
  64. void setCommunicator(NbusCommunicator *nc);
  65. virtual ~NbusBridge();
  66. void scan();
  67. uint8_t getNumSlaves();
  68. NbusSlave * getSlave(uint8_t index);
  69. DataFrame * getBridgeSlaves();
  70. DataFrame * getBridgeInfo();
  71. void processRequest(uint8_t *rxFrame, uint8_t size);
  72. void process_bridge_request(uint8_t *rxFrame, uint8_t size);
  73. void process_slave_request(uint8_t *rxFrame, uint8_t size);
  74. void broadcastStart();
  75. void broadcastStop();
  76. void processRunningState();
  77. void process_broadcast(uint8_t *rxFrame);
  78. };
  79. #endif /* SRC_NBUSBRIDGE_H_ */