| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- /**
- * @file nbus_types.h
- *
- * @brief Definícia dátových štruktúr v protokolu nBUS
- * @author Juraj Dudak
- */
- #ifndef __NBUS_TYPES_H
- #define __NBUS_TYPES_H
- #include <stdint.h>
- #include "mcu_platform.h"
- #include "nbus_config.h"
- /**
- * @brief Počet bajtov v pakete, ktoré tvoria réžiu.
- */
- #define META_SIZE 5
- /**
- * @brief Maximálna veľkosť dátovej časti v pakete.
- */
- #define PAYLOAD_SIZE 128
- /**
- * @brief Maximálna veľkosť komunikačného bufferu.
- */
- #define BUFF_SIZE (PAYLOAD_SIZE + META_SIZE)
- /**
- * @brief Symbolické konštanty pre príznak pripravenosti dát
- */
- typedef enum {
- /** Dáta nie sú pripravené. */
- DATA_EMPTY,
- /** Dáta sú pripravené. */
- DATA_READY,
- /** Dáta sú chybné. */
- DATA_ERROR,
- } DataReadyTypedef;
- /**
- * @brief Definícia GPIO pinu na platforma STM32.
- */
- typedef struct {
- /** GPIO port */
- GPIO_TypeDef* port;
- /** číslo pinu na zvolenom porte */
- uint16_t pin;
- } McuPin_typeDef;
- /**
- * @brief Definícia periférií pre protokol uBUS.
- */
- typedef struct {
- /** @brief Handler pre rozhranie UART */
- UART_HandleTypeDef* huart;
- /**
- * @brief Časovač pre detekciu timeoutu na UART.
- */
- TIM_HandleTypeDef* uart_timer;
- // doplnkove periferie
- #if SELF_MONITORING == 1
- // in case of error in this place, set the macro SELF_MONITORING to 0
- /**
- * @brief ADC periféria pre monitorovanie vnúterného stavu modulu.
- *
- * Táto vlastnosť je aktívna len v prípade ak má makro SELF_MONITORING hodnotu 1
- */
- ADC_HandleTypeDef* adc;
- #else
- void* adc;
- #endif
- /**
- * @brief Definícia pinu pre signalizačnú LED diódu
- */
- McuPin_typeDef* led;
- #if USE_SW_485 == 1
- /**
- * @brief Definícia pinu riadenie smeru komunikácie RS485.
- *
- * Táto vlastnosť je aktívna len v prípade ak má makro USE_SW_485 hodnotu 1
- */
- McuPin_typeDef* rs485De;
- #else
- void* rs485De;
- #endif
- } Peripheral_typeDef;
- typedef struct __attribute__((packed)) {
- uint8_t function : 5;
- uint8_t notReadWrite : 1;
- uint8_t reserve : 1;
- uint8_t error : 1;
- } nBus_functionCode_t;
- #define REQUEST_GET 0
- #define REQUEST_SET 1
- typedef struct __attribute__((packed)) {
- uint8_t address : 5;
- uint8_t type : 3;
- } nBus_sensorByte_t;
- typedef enum {
- UART_RX_1B,
- UART_RX_PAYLOAD,
- UART_RECEIVED
- } nBus_Uart_RX_state;
- /**
- * @brief Určuje typ nBUS príkazu.
- */
- typedef enum {
- /**
- * Funckia, resp. príkaz určený konkrétny koncový senzor.
- */
- UNICAST_TO_SENSOR,
- /**
- * Funckia, resp. príkaz určený konkrétny koncový senzor.
- */
- UNICAST_TO_MODULE,
- BROADCAST_SPECIFIC_SENSORS,
- BROADCAST_GLOBAL
- } nBusCommandType_t;
- typedef enum {
- NO_RESPONSE,
- SEND_RESPONSE
- }nBus_response_t;
- /**
- * @brief Základná štruktúra protokolu nBUS.
- *
- * Obsahuje stavové a funkčné premenné zabezpečujúce správnu implementáciu komunikácie.
- */
- typedef struct {
- /**
- * @brief Prijímací buffer nBUS.
- */
- uint8_t rx_buffer[BUFF_SIZE]; // buffer prijatych znakov
- /** @brief pomocny RX buffer */
- uint8_t tmp_buffer[1];
- /**
- * @brief Index pre prijímací buffer nBUS.
- */
- volatile uint16_t rx_buffer_index; // buffer prijatych znakov
- /**
- * @brief Odosielací buffer uBUS.
- */
- uint8_t tx_buffer[BUFF_SIZE]; // buffer odosielanych znakov
- /**
- * @brief Dĺžka prijatej správy
- */
- uint8_t volatile rx_length; // usart flag - obsahuje pocet prijatych byte
- /**
- * @brief Dĺžka odosielanej správy
- */
- uint16_t volatile tx_length; // usart flag - obsahuje pocet vysielanych byte
- /**
- * @brief Prvy bajt adresy zariadenia slave
- */
- volatile uint8_t addressModule;
- /**
- * @brief Druhy bajt adresy zariadenia slave
- */
- volatile nBus_sensorByte_t sensorInfo;
- nBus_functionCode_t function_code;
- volatile nBusCommandType_t request_type;
- /** @brief Flag pre signalizaciu ukoncenia primu dat cez UART. */
- volatile nBus_Uart_RX_state uart_state;
- nBus_response_t send_response;
- /** @brief CRC8 sucet pre datovy ramec */
- volatile uint8_t CRC8;
- /**
- * @brief Periférie protokolu uBUS.
- */
- Peripheral_typeDef* periph;
- #if USE_USART_DMA_TX == 1
- /**
- * @brief Príznak ukončenia odoslania dát cez DMA
- *
- * Vlastnosť existuje, len ak má makro USE_USART_DMA_TX hodnotu 1
- */
- volatile uint8_t flag_UartTxCplt_DMA;
- #endif
- } nBus_TypeDef;
- /**
- * @brief Určuje typ uBUS príkazu pre koncove slave zariadenie.
- */
- typedef enum {
- /**
- * všeobecný príkaz, dáta sú uložené v konfigurácii (FLASH)
- */
- COMMAND_SLAVE_GENERAL,
- /**
- * špecifický príkaz (state, reset, set/get value/param). Pracuje sa s koncovým senzorom. Obsluja poziadavky je v module pre daný senzor.
- */
- COMMAND_SLAVE_SPECIFIC,
- } UnicastSlaveCommandType;
- /**
- * @brief Určuje stav komunikačnej vrstvy
- */
- typedef enum {
- /**
- * Dáta sú prijaté a pripravené na spracovanie.
- */
- UART_DATA_READY,
- /**
- * Nie je prijatý žiadny príkaz na spracovanie.
- */
- UART_DATA_EMPTY,
- } UART_DataState;
- /**
- * @brief Určuje stav senzora
- */
- typedef enum {
- /**
- * Zariadenie je pripojene a pripravene
- */
- DEVICE_READY,
- /**
- * Zariadenie sa nedetekovalo
- */
- DEVICE_ERROR,
- } DeviceReady_TypeDef;
- /**
- * @TODO prerobit na nBUS
- * @brief Pripraví chybovú odpoveď prorokolu nBus.
- *
- * Vo funkcii sa nastaví aj správna dĺžka odpovede.
- * @param error_code chybový kód odpovede
- */
- #define error_response(error_code) \
- { \
- uBus.sb_length = META_SIZE + 1; \
- uBus.send_buff[2] = uBus.send_buff[2] | FLAG_ERROR; \
- uBus.send_buff[3] = error_code; \
- }
- #endif
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
|