| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- /**
- * @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 "nbus_config.h"
- #include "app_bridge.h"
- #include "nbus_memory.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)
- #define CMD_FLAG_GET 1
- #define CMD_FLAG_SET 0
- /**
- * @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;
- 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;
- typedef enum {
- MEASURE_STOPPED,
- MEASURE_RUNNING,
- } nBusMeasurementActive_t;
- typedef struct{
- void (*uart_receive)(uint8_t *, int);
- void (*uart_transmit)(uint8_t *, int );
- void (*uart_abort_receive)();
- void (*led_on)(void);
- void (*led_off)(void);
- void (*led_toggle)(void);
- void (*timer_uart_start)(int);
- void (*timer_uart_stop)(void);
- void (*delay_ms)(uint8_t);
- uint8_t (*loop_callback)(void);
- }nBusPlatformInterface_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 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;
- volatile nBusMeasurementActive_t measure_active;
- volatile uint32_t data_timebase;
- nBusAppInterface_t *interface;
- nBus_memoryInterface_t *memoryInterface;
- #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
- nBusPlatformInterface_t *hw_platform;
- } 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;
- /**
- * @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
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
|