|
|
@@ -28,8 +28,6 @@
|
|
|
*/
|
|
|
#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
|
|
|
*/
|
|
|
@@ -43,11 +41,21 @@ typedef enum {
|
|
|
} DataReadyTypedef;
|
|
|
|
|
|
|
|
|
-
|
|
|
+/**
|
|
|
+ * @brief Definuje význam bytu FC v požiadavke. Bajt FC má index 2 v RX bufferi.
|
|
|
+ * bit 7: príznak chyby
|
|
|
+ * bit 6: rezervovaný
|
|
|
+ * bit 5: ~r/w príznak pr zápis údajov
|
|
|
+ * bt 4-0: kód funkcie.
|
|
|
+ */
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
+ /** Kód funkcie. Bit 0..4 */
|
|
|
uint8_t function : 5;
|
|
|
+ /** Príznak pre zápis údajov. Bit 5 */
|
|
|
uint8_t notReadWrite : 1;
|
|
|
+ /** Rezervoané. Bit 6 */
|
|
|
uint8_t reserve : 1;
|
|
|
+ /** Príznak chyby. Bit 7 */
|
|
|
uint8_t error : 1;
|
|
|
} nBus_functionCode_t;
|
|
|
|
|
|
@@ -55,15 +63,29 @@ typedef struct __attribute__((packed)) {
|
|
|
#define REQUEST_GET 0
|
|
|
#define REQUEST_SET 1
|
|
|
|
|
|
+/**
|
|
|
+ * @brief Definuje význam bytu ADR v požiadavke. Bajt ADR má index 0 v RX bufferi.
|
|
|
+ * Baj obsahuje adresu koncového senzora (bit 0..4) a typ senzora (bit 5-7)
|
|
|
+ */
|
|
|
typedef struct __attribute__((packed)) {
|
|
|
+ /** Adresa pripojeného senzora. Povolené adresy 1..31. Pozícia v ADR byte: 0..4*/
|
|
|
uint8_t address : 5;
|
|
|
+ /** Definuje typ senora: vstup/výstup.
|
|
|
+ * bit 7: 0-výstupné zariadenia, 1-vstupné zariadenia
|
|
|
+ */
|
|
|
uint8_t type : 3;
|
|
|
} nBus_sensorByte_t;
|
|
|
|
|
|
|
|
|
+/**
|
|
|
+ * @brief Stavy komunikačného rozhrania počas behu programu.
|
|
|
+ */
|
|
|
typedef enum {
|
|
|
+ /** Čaká sa na príjem dát. Nasledujúci stav: UART_RX_RECEIVING */
|
|
|
UART_RX_WAIT,
|
|
|
+ /** Dáta sa prijímajú. Nasledujúci stav: UART_RX_RECEIVED */
|
|
|
UART_RX_RECEIVING,
|
|
|
+ /** Dáta sú prijané, v ďašom cykle sa budú spracovať. Nasledujúci stav: UART_RX_WAIT*/
|
|
|
UART_RX_RECEIVED
|
|
|
} nBus_Uart_RX_state;
|
|
|
|
|
|
@@ -80,12 +102,24 @@ typedef enum {
|
|
|
* Funckia, resp. príkaz určený konkrétny koncový senzor.
|
|
|
*/
|
|
|
UNICAST_TO_MODULE,
|
|
|
+ /**
|
|
|
+ * Funckia, resp. príkaz určený špecifické senzory.
|
|
|
+ */
|
|
|
BROADCAST_SPECIFIC_SENSORS,
|
|
|
+ /**
|
|
|
+ * Funckia, resp. príkaz určený pre všetky moduly.
|
|
|
+ */
|
|
|
BROADCAST_GLOBAL
|
|
|
} nBusCommandType_t;
|
|
|
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Určuje typ odpovede na požiadavku.
|
|
|
+ */
|
|
|
typedef enum {
|
|
|
+ /** Na požiadavku sa nebude odpovedať. Zvyčajte pri BROADCAST požiadavke. */
|
|
|
NO_RESPONSE,
|
|
|
+ /** Na požiadavku sa bude odpovedať. Zvyčajte pri UNICAST požiadavke. */
|
|
|
SEND_RESPONSE
|
|
|
|
|
|
}nBus_response_t;
|
|
|
@@ -97,13 +131,55 @@ typedef enum {
|
|
|
} nBusMeasurementActive_t;
|
|
|
|
|
|
|
|
|
+/**
|
|
|
+ * @brief Dátová štruktúra pre implementáciu základných funkcií na aplikačnej úrovni.
|
|
|
+ * Komunikačný zásobník nBus je HW nezávislá implementácia komunikačného protokolu. Pre zabezpečenie
|
|
|
+ * elementárnych akcií je potrebné tieto akcie implementovať na konkrétnej hardvérovej platforme.
|
|
|
+ * Jedná sa o:
|
|
|
+ * - uart_receive: naštartovanie procesu prijímania dát s uvedením max dĺžky
|
|
|
+ * - uart_transmit: odoslaneie odpovede
|
|
|
+ * - led_on/led_off/led_toggle: ovládani dignalizačnej LED diódy
|
|
|
+ * - delay_ms: blokujúca pauza
|
|
|
+ * - loop_callback: interný callback pre signalizáciu externých udalostí z aplikácie.
|
|
|
+ */
|
|
|
typedef struct{
|
|
|
+ /**
|
|
|
+ * @brief Spustenie príjmu dát na vstunom komunikačnom rozhraní (UART, ..).
|
|
|
+ * 1 parameter: pointer na pole, kde sa uložia načítané dáta.
|
|
|
+ * 2 parameter: maximálna dĺžka načítaných dát.
|
|
|
+ * @note Načíranie dát musí byť asynchrónne. Celé načítanie musí manažovať aplikácia.
|
|
|
+ * Po úspešnom načítaní musí aplikácia zavolať funkciu nbus_cb_UART_RX(dataI); @see nbus_cb_UART_RX
|
|
|
+ */
|
|
|
void (*uart_receive)(uint8_t *, int);
|
|
|
+ /**
|
|
|
+ * @brief Odoslanie odpovede cez komunikačné rozhranie.
|
|
|
+ * 1 parameter: dáta na odoslanie
|
|
|
+ * 2 parameter: počet abjtov na odoslanie
|
|
|
+ */
|
|
|
void (*uart_transmit)(uint8_t *, int);
|
|
|
+ /**
|
|
|
+ * @brief Zapnutie signalizácie
|
|
|
+ */
|
|
|
void (*led_on)(void);
|
|
|
+ /**
|
|
|
+ * @brief Vypnutie signalizácie
|
|
|
+ */
|
|
|
void (*led_off)(void);
|
|
|
+ /**
|
|
|
+ * @brief Zmena stavu signalizácie
|
|
|
+ */
|
|
|
void (*led_toggle)(void);
|
|
|
+ /**
|
|
|
+ * @brief Blokujúca pauza [ms].
|
|
|
+ */
|
|
|
void (*delay_ms)(uint8_t);
|
|
|
+ /**
|
|
|
+ * Callback protokolu nBus pre signalizáciu udalostí. Tento callback sa v protokole nBus spúšťa každú iteráciu v hlavnej slučke.
|
|
|
+ * Stav aplikácie uruje návratová hodnota tohto callbacku:
|
|
|
+ * 0 - žiadna udalosť nenastala
|
|
|
+ * 1 - signál pre pripravenosť dát z pripojených senzorov. Hodnota 1 spôsobí prečítanie dát z pripojeného sensora (nBus.interface->read())
|
|
|
+ * 2 - signál oznamujúci ukončenie načítania vstupných dát cez komunikačné rozhranie. Je to signál pre ukočenie načítania, ktoré bolo sputené cez uart_receive
|
|
|
+ */
|
|
|
uint8_t (*loop_callback)(void);
|
|
|
|
|
|
}nBusPlatformInterface_t;
|