nbus_structs.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /**
  2. * @file nbus_structs.h
  3. *
  4. * @date: Nov 26, 2025
  5. * @author: Juraj Dudak, Matus Necas
  6. */
  7. #ifndef INC_NBUS_STRUCTS_H_
  8. #define INC_NBUS_STRUCTS_H_
  9. #if defined(STM32F401xC) || defined(STM32F401xE)
  10. #include "stm32f4xx_hal.h"
  11. #endif
  12. #if defined (STM32L432xx)
  13. #include "stm32l4xx_hal.h"
  14. #endif
  15. #if defined (STM32L031xx) || defined (STM32L082xx)
  16. #include "stm32l0xx_hal.h"
  17. #endif
  18. /** Macro for module address in RX packet */
  19. #define MODULE_RX_ADDRESS(packet) (packet)[0]
  20. /** Macro for sensor address in RX packet */
  21. #define SENSOR_RX_ADDRESS(packet) (packet)[1]
  22. /** Macro for function code in RX packet */
  23. #define FUNCTION_RX_CODE(packet) (packet)[2]
  24. /** Macro for #0 data byte in RX packet */
  25. #define DATA0_RX_ADDRESS(packet) (packet)[3]
  26. /** Macro for CRC8 byte in RX packet */
  27. #define CRC8_RX_ADDRESS(packet, size) (packet)[(size) - 1]
  28. /** Macro for #0 data byte in TX packet */
  29. #define DATA0_TX_ADDRESS(packet) (packet)[4]
  30. /** Macro to set error response */
  31. #define SET_ERR_RESPONSE(fc) ((fc) | 0x80)
  32. /** Macro for RX meta size in bytes */
  33. #define RX_META_SIZE 4
  34. /** Macro for TX meta size in bytes */
  35. #define TX_META_SIZE 5
  36. /** Macro for set command flag */
  37. #define SET_CMD(cmd) ((cmd) | 0x20)
  38. /** Macro for module-only address. */
  39. #define NBUS_SLAVE_ADDRESS_MODULE 0
  40. /** Macro for slave cache size. */
  41. #define NBUS_SLAVE_CACHE_SIZE TX_META_SIZE
  42. /* DEFINES BEGIN */
  43. /** Maximálny počet zariadení slave na internej zbernici.
  44. * Pozor, súvisí to s alokáciou prostriedkov na MCU.
  45. */
  46. #define MAX_SLAVES 16
  47. #define ECHO_SCAN_LENGTH 4
  48. #define ECHO_SCAN_DATA {110, 66, 117, 115} // nBus
  49. #define ECHO_SCAN_CHAR0 110
  50. #define ECHO_SCAN_CHAR1 66
  51. #define ECHO_SCAN_CHAR2 117
  52. #define ECHO_SCAN_CHAR3 115
  53. /** Adresa broadcastu */
  54. #define BROADCAST_ADDRESS 0
  55. /** Virtuálna adresa modulu nBus Bridge */
  56. #define BRIDGE_ADDRESS 0xFF
  57. /** Macro for bridge terminator **/
  58. #define BRIDGE_TERMINATOR 0xFF
  59. #define BRIDGE_RUNNING_STATE_DELAY 50
  60. #define BRIDGE_INFO_VERSION "1.0"
  61. #define BRIDGE_INFO_HW_FAMILY "STM"
  62. #define BRIDGE_INFO_HW_VERSION "0.5"
  63. #define DATAPACKET_SIZE (NBUS_COMM_MAX_FRAME_SIZE*MAX_SLAVES)
  64. /* DEFINES END */
  65. /** Enumerate for function codes */
  66. typedef enum {
  67. FC_FIND = 0,
  68. FC_ECHO, /* 1 */
  69. FC_STOP, /* 2 */
  70. FC_START, /* 3 */
  71. FC_PARAM, /* 4 */
  72. FC_SENSOR_CNT, /* 5 */
  73. FC_SLEEP, /* 6 */
  74. FC_WAKEUP, /* 7 */
  75. FC_CALIBRATE, /* 8 */
  76. FC_RESET, /* 9 */
  77. FC_STORE, /* 0xA => 10 */
  78. FC_DATA, /* 0xB => 11 */
  79. FC_SYNC, /* 0xC => 12 */
  80. FC_SENSOR_TYPE, /* 0xD => 13 */
  81. FC_INFO, /* 0xE => 14 */
  82. FC_SENSOR_FORMAT, /* 0xF => 15 */
  83. FC_SLAVES, /* 0x10 => 16 */
  84. } Nbus_FC_e;
  85. /** Enumerate for Bridge run state. */
  86. typedef enum {
  87. STATE_STOPPED,
  88. STATE_TO_STOP,
  89. STATE_RUNNING,
  90. }Nbus_RunState_e;
  91. /** Structure for PDU data. */
  92. typedef struct {
  93. uint8_t ma;
  94. uint8_t sa;
  95. Nbus_FC_e fc;
  96. } Nbus_PDU_t;
  97. /** Enumerate for error codes */
  98. typedef enum {
  99. OK_CODE = 0x00,
  100. ILLEGAL_FUNCTION = 0x01,
  101. ILLEGAL_DEVICE_ADDRESS = 0x02,
  102. ILLEGAL_DATA_VALUE = 0x03,
  103. SLAVE_DEVICE_FAILURE = 0x04,
  104. ACKNOWLEDGE = 0x05,
  105. DEVICE_BUSY = 0x06,
  106. DEVICE_NOT_READY = 0x07,
  107. PARAM_NOT_IMPLEMENTED = 0x10,
  108. ILLEGAL_FUNCTION_PARAM = 0x11,
  109. DEVICE_IS_READ_ONLY = 0x12,
  110. GENERIC_SUBSLAVE_ERROR = 0x13,
  111. ERR_SUBSLAVE_INIT_FAIL = 0x14,
  112. SUBSLAVE_CUSTOM_ERR_1 = 0x1A,
  113. SUBSLAVE_CUSTOM_ERR_2 = 0x1B,
  114. SUBSLAVE_CUSTOM_ERR_3 = 0x1C,
  115. SUBSLAVE_CUSTOM_ERR_4 = 0x1D,
  116. SUBSLAVE_CUSTOM_ERR_5 = 0x1E,
  117. SUBSLAVE_CUSTOM_ERR_6 = 0x1F,
  118. ERR_OUTPUT_ONLY = 0x21,
  119. ERR_INPUT_ONLY = 0x22
  120. } Nbus_EC_e;
  121. /** Enumerate for status codes */
  122. typedef enum {
  123. STATUS_NOT_SUPPORTED = 0xFF,
  124. STATUS_SUCCESS = 0,
  125. STATUS_FAIL = 1
  126. } Nbus_SC_e;
  127. #endif /* INC_NBUS_STRUCTS_H_ */