/** * @file nbus_structs.h * * @date: Nov 26, 2025 * @author: Juraj Dudak, Matus Necas */ #ifndef INC_NBUS_STRUCTS_H_ #define INC_NBUS_STRUCTS_H_ #if defined(STM32F401xC) || defined(STM32F401xE) #include "stm32f4xx_hal.h" #endif #if defined (STM32L432xx) #include "stm32l4xx_hal.h" #endif #if defined (STM32L031xx) || defined (STM32L082xx) #include "stm32l0xx_hal.h" #endif /** Macro for module address in RX packet */ #define MODULE_RX_ADDRESS(packet) (packet)[0] /** Macro for sensor address in RX packet */ #define SENSOR_RX_ADDRESS(packet) (packet)[1] /** Macro for function code in RX packet */ #define FUNCTION_RX_CODE(packet) (packet)[2] /** Macro for #0 data byte in RX packet */ #define DATA0_RX_ADDRESS(packet) (packet)[3] /** Macro for #0 data byte in TX packet */ #define DATA0_TX_ADDRESS(packet) (packet)[4] /** Macro to set error response */ #define SET_ERR_RESPONSE(fc) ((fc) | 0x80) /** Macro for RX meta size in bytes */ #define RX_META_SIZE 4 /** Enumerate for function codes */ typedef enum { FC_FIND = 0, FC_ECHO, /* 1 */ FC_STOP, /* 2 */ FC_START, /* 3 */ FC_PARAM, /* 4 */ FC_SENSOR_CNT, /* 5 */ FC_SLEEP, /* 6 */ FC_WAKEUP, /* 7 */ FC_CALIBRATE, /* 8 */ FC_RESET, /* 9 */ FC_STORE, /* 0xA => 10 */ FC_DATA, /* 0xB => 11 */ FC_SYNC, /* 0xC => 12 */ FC_SENSOR_TYPE, /* 0xD => 13 */ FC_INFO, /* 0xE => 14 */ FC_SENSOR_FORMAT, /* 0xF => 15 */ FC_SLAVES, /* 0x10 => 16 */ } Nbus_FC_e; /** Structure for PDU data */ typedef struct { uint8_t ma; uint8_t sa; Nbus_FC_e fc; } Nbus_PDU_t; /** Enumerate for error codes */ typedef enum { OK_CODE = 0x00, ILLEGAL_FUNCTION = 0x01, ILLEGAL_DEVICE_ADDRESS = 0x02, ILLEGAL_DATA_VALUE = 0x03, SLAVE_DEVICE_FAILURE = 0x04, ACKNOWLEDGE = 0x05, DEVICE_BUSY = 0x06, DEVICE_NOT_READY = 0x07, PARAM_NOT_IMPLEMENTED = 0x10, ILLEGAL_FUNCTION_PARAM = 0x11, DEVICE_IS_READ_ONLY = 0x12, GENERIC_SUBSLAVE_ERROR = 0x13, ERR_SUBSLAVE_INIT_FAIL = 0x14, SUBSLAVE_CUSTOM_ERR_1 = 0x1A, SUBSLAVE_CUSTOM_ERR_2 = 0x1B, SUBSLAVE_CUSTOM_ERR_3 = 0x1C, SUBSLAVE_CUSTOM_ERR_4 = 0x1D, SUBSLAVE_CUSTOM_ERR_5 = 0x1E, SUBSLAVE_CUSTOM_ERR_6 = 0x1F, ERR_OUTPUT_ONLY = 0x21, ERR_INPUT_ONLY = 0x22 } Nbus_EC_e; #endif /* INC_NBUS_STRUCTS_H_ */