nbus_structs.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 #0 data byte in TX packet */
  27. #define DATA0_TX_ADDRESS(packet) (packet)[4]
  28. /** Macro to set error response */
  29. #define SET_ERR_RESPONSE(fc) ((fc) | 0x80)
  30. /** Macro for RX meta size in bytes */
  31. #define RX_META_SIZE 4
  32. /** Enumerate for function codes */
  33. typedef enum {
  34. FC_FIND = 0,
  35. FC_ECHO, /* 1 */
  36. FC_STOP, /* 2 */
  37. FC_START, /* 3 */
  38. FC_PARAM, /* 4 */
  39. FC_SENSOR_CNT, /* 5 */
  40. FC_SLEEP, /* 6 */
  41. FC_WAKEUP, /* 7 */
  42. FC_CALIBRATE, /* 8 */
  43. FC_RESET, /* 9 */
  44. FC_STORE, /* 0xA => 10 */
  45. FC_DATA, /* 0xB => 11 */
  46. FC_SYNC, /* 0xC => 12 */
  47. FC_SENSOR_TYPE, /* 0xD => 13 */
  48. FC_INFO, /* 0xE => 14 */
  49. FC_SENSOR_FORMAT, /* 0xF => 15 */
  50. FC_SLAVES, /* 0x10 => 16 */
  51. } Nbus_FC_e;
  52. /** Structure for PDU data */
  53. typedef struct {
  54. uint8_t ma;
  55. uint8_t sa;
  56. Nbus_FC_e fc;
  57. } Nbus_PDU_t;
  58. /** Enumerate for error codes */
  59. typedef enum {
  60. OK_CODE = 0x00,
  61. ILLEGAL_FUNCTION = 0x01,
  62. ILLEGAL_DEVICE_ADDRESS = 0x02,
  63. ILLEGAL_DATA_VALUE = 0x03,
  64. SLAVE_DEVICE_FAILURE = 0x04,
  65. ACKNOWLEDGE = 0x05,
  66. DEVICE_BUSY = 0x06,
  67. DEVICE_NOT_READY = 0x07,
  68. PARAM_NOT_IMPLEMENTED = 0x10,
  69. ILLEGAL_FUNCTION_PARAM = 0x11,
  70. DEVICE_IS_READ_ONLY = 0x12,
  71. GENERIC_SUBSLAVE_ERROR = 0x13,
  72. ERR_SUBSLAVE_INIT_FAIL = 0x14,
  73. SUBSLAVE_CUSTOM_ERR_1 = 0x1A,
  74. SUBSLAVE_CUSTOM_ERR_2 = 0x1B,
  75. SUBSLAVE_CUSTOM_ERR_3 = 0x1C,
  76. SUBSLAVE_CUSTOM_ERR_4 = 0x1D,
  77. SUBSLAVE_CUSTOM_ERR_5 = 0x1E,
  78. SUBSLAVE_CUSTOM_ERR_6 = 0x1F,
  79. ERR_OUTPUT_ONLY = 0x21,
  80. ERR_INPUT_ONLY = 0x22
  81. } Nbus_EC_e;
  82. #endif /* INC_NBUS_STRUCTS_H_ */