NbusBridge.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 BROADCAST_ADDRESS 0
  22. #define RX_META 4
  23. #define DATAPACKET_SIZE (NBUS_MAX_FRAME_SIZE*MAX_SLAVES)
  24. /* DEFINES END */
  25. typedef enum {
  26. STATE_STOPPED,
  27. STATE_TO_STOP,
  28. STATE_RUNNING,
  29. }RunState_e;
  30. /**
  31. * @brief Trieda zabezpečujúca interpretáciu príkazov protokolu nBus.
  32. */
  33. class NbusBridge {
  34. private:
  35. /** Objekt zabezpečujúci komunikáciu na internej aj externej zbernici nBus */
  36. NbusCommunicator *_communicator;
  37. /** Statické pole objektov nBus slave */
  38. NbusSlave _slaves[MAX_SLAVES];
  39. /** Pole detegovaných adries modulov slave. Pole sa naplní pri automatickom skene internej zbernice */
  40. uint8_t _slave_adress[MAX_SLAVES];
  41. /** Počet detegovaných slave zariadení. */
  42. uint8_t _num_slaves;
  43. /** Príznak indikuje, či je modul Bridge v stave RUN */
  44. RunState_e _run_state;
  45. /** Interný buffer */
  46. DataFrame *_workerFrame;
  47. /** Pole bajtov použité pre generovanie odpovede pomocou triedy DataFrame */
  48. uint8_t _dataPacket[DATAPACKET_SIZE];
  49. /** Dataframe (wrapper nad _dataPacket), do ktorého za vygeneruje odsielaný packet.*/
  50. DataFrame *_dataFrame;
  51. void transmit(DataFrame *packet);
  52. DataFrame *_frame_nbus_internal;
  53. Nbus_pdu _pdu;
  54. public:
  55. NbusBridge();
  56. /** Nastaví komunikačný modul */
  57. void setCommunicator(NbusCommunicator *nc);
  58. virtual ~NbusBridge();
  59. void scan();
  60. uint8_t getNumSlaves();
  61. NbusSlave * getSlave(uint8_t index);
  62. DataFrame * getSlavesInfo();
  63. void sendResponseToMaster(DataFrame *response_frame);
  64. void processRequest(uint8_t *rxFrame, uint8_t size);
  65. void broadcastStart();
  66. void broadcastStop();
  67. void processRunningState();
  68. void process_broadcast(uint8_t *rxFrame);
  69. };
  70. #endif /* SRC_NBUSBRIDGE_H_ */