/** * @file nbus_defines.h * * @date: Nov 26, 2025 * @author: Juraj Dudak, Matus Necas */ #ifndef INC_NBUS_DEFINES_H_ #define INC_NBUS_DEFINES_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 /* BEGIN GENERAL NBUS DEFINES */ /** @brief Macro for broadcast address (MA = 0). */ #define NBUS_BROADCAST_ADDRESS 0x00 /** @brief Macro for NBus Bridge address (MA = 0, SA = BRIDGE). */ #define NBUS_BRIDGE_ADDRESS 0xFF /** @brief Macro for RX meta size in bytes. */ #define NBUS_RX_META_SIZE 4 /** @brief Macro for module address in RX packet. */ #define NBUS_RX_MODULE_ADDRESS(packet) (packet)[0] /** @brief Macro for sensor address in RX packet. */ #define NBUS_RX_SENSOR_ADDRESS(packet) (packet)[1] /** @brief Macro for function code in RX packet. */ #define NBUS_RX_FUNCTION_CODE(packet) (packet)[2] /** @brief Macro for #0 data byte in RX packet. */ #define NBUS_RX_DATA0(packet) (packet)[3] /** @brief Macro for CRC8 byte in RX packet. */ #define NBUS_RX_CRC8(packet, size) (packet)[(size) - 1] /** @brief Macro for TX meta size in bytes. */ #define NBUS_TX_META_SIZE 5 /** @brief Macro for #0 data byte in TX packet. */ #define NBUS_TX_DATA0(packet) (packet)[4] /** @brief Macro for set command flag. */ #define NBUS_SET_CMD(cmd) ((cmd) | 0x20) /** @brief Macro to set error response. */ #define NBUS_SET_ERR_RESPONSE(fc) ((fc) | 0x80) #define NBUS_CHECK_ERR_RESPONSE(packet) ((packet)[2] & 0x80) /* END GENERAL NBUS DEFINES */ /** @brief 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; /** @brief Enumerate for Bridge run state. */ typedef enum { STATE_STOPPED, STATE_TO_STOP, STATE_RUNNING, } Nbus_RunState_e; /** @brief Structure for PDU data. */ typedef struct { uint8_t ma; uint8_t sa; Nbus_FC_e fc; } Nbus_PDU_t; /** @brief Structure for sensor count. */ typedef struct { uint8_t read_only_count; uint8_t read_write_count; } Nbus_SensorCnt_t; /** @brief 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; /** @brief Enumerate for status codes. */ typedef enum { STATUS_NOT_SUPPORTED = 0xFF, STATUS_SUCCESS = 0x00, STATUS_FAIL = 0x01 } Nbus_SC_e; #endif /* INC_NBUS_DEFINES_H_ */