|
Laboratorium BLE
|
Kod obsługujący komunikację z czujnikiem. Więcej...
#include <zephyr/kernel.h>#include <zephyr/drivers/uart.h>#include "sensor_uart.h"#include "BLE.h"Definicje | |
| #define | UART_RX_TIMEOUT 1500 |
| Czas nieaktywności, po którym systen uznaje, że została odebrana pełna ramka danych. | |
Funkcje | |
| void | init_sensor_uart () |
| Funkcja inicjalizująca interfejs UART. | |
| void | set_id_var (uint8_t b1, uint8_t b2) |
| Funkcja zapamiętująca ID czujnika przechwycone z ramki przychodzącej. | |
| void | process_aq_data (uint8_t *buf, int offset) |
| Funkcja przetwarzająca odczyty jakości powietrza odebrane z czujnika. Zapamiętuje je w zmiennych i zamienia na wartość zmiennoprzecinkową, po czym wywołuje funkcje air_quality_send(), która obsługuje wysyłanie wyników do podłączonych urządzeń. | |
| void | process_reporting_mode (uint8_t *buf, int offset) |
| Funkcja przetwarzająca status trybu raportowania. | |
| void | process_device_ID (uint8_t *buf, int offset) |
| Funkcja przetwarzająca ID czujnika po zmianie. | |
| void | process_working_mode (uint8_t *buf, int offset) |
| Funkcja przetwarzająca tryb pracy czujnika. | |
| void | print_firmware_version (uint8_t *buf, int offset) |
| Funkcja wypisująca wersję oprogramowania sprzętowego czujnika. | |
| void | process_working_period (uint8_t *buf, int offset) |
| Funkcja przetwarzająca okres pracy czujnika. | |
| void | process_C5_commands (uint8_t *buf, int offset) |
| Funkcja przetwarzająca ramki o identyfikatorze komendy C5. Na podstawie pierwszego bajtu danych, który niesie informacje o zawartości ramki uruchamia odpowiednie funkcje, które dalej przetwarzają odebrane dane. | |
| void | process_results (struct uart_event *evt) |
| Funkcja przetwarzająca odebrane dane z czujnika. Sprawdza, czy odebrano kompletną ramkę (bądź ramki), weryfikuje sumę kontrolną i na podstawie identyfikatora komendy wywołuje funkcje, które dalej przetwarzają odebrane dane. | |
| uint8_t | send_inst (enum instruction inst, uint8_t arg1, uint8_t arg2, bool set) |
| Funkcja wysyłająca instrukcje do czujnika. Przeprowadza walidację argumentów, konstruuje ramkę i umieszcza ją w buforze wyjściowym, po czym wywołuje funkcję systemową uart_tx(). | |
| static void | uart_cb (const struct device *dev, struct uart_event *evt, void *user_data) |
| Funkcja callback wywoływana przez system w przypadku wystąpienia zdarzeń związanych z interfejsem UART. Na podstawie rodzaju zdarzenia obsługuje zaistniałą sytuację. | |
Zmienne | |
| int | requested =0 |
| uint8_t | rx_buf [2][100] |
| uint8_t | tx_buf [19] |
| float | pm25 |
| float | pm10 |
| uint16_t | pm25r |
| uint16_t | pm10r |
| const struct device * | myUart = DEVICE_DT_GET(DT_NODELABEL(uart1)) |
| bool | ss_sleep_status |
| bool | ss_reporting_mode |
| uint16_t | ss_device_id = 0 |
| uint8_t | ss_working_period |
| const struct uart_config | myUart_cfg |
| void print_firmware_version | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_aq_data | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_C5_commands | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_device_ID | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_reporting_mode | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_results | ( | struct uart_event * | evt | ) |
| evt | Struktura opisująca zdarzenie interfejsu UART. Zawiera informacje o odebranych danych. |
| void process_working_mode | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| void process_working_period | ( | uint8_t * | buf, |
| int | offset ) |
| buf | Wskaźnik do bufora na dane przychodzące. |
| offset | Pozycja pierwszego bajtu przetwarzanej ramki w buforze. |
| uint8_t send_inst | ( | enum instruction | inst, |
| uint8_t | arg1, | ||
| uint8_t | arg2, | ||
| bool | set ) |
| inst | Rodzaj instrukcji do wysłania do czujnika. |
| arg1 | Pierwszy argument instrukcji |
| arg2 | Drugi argument instrukcji |
| set | Parametr opisujący czy czujnik ma ustawić wartość przekazaną w argumentach (true), czy też odpowiedzieć ramką z bieżącą konfiguracją (false) |
| void set_id_var | ( | uint8_t | b1, |
| uint8_t | b2 ) |
| b1 | pierwszy bajt z ID |
| b2 | drugi bajt z ID |
|
static |
| dev | Używany interfejs UART |
| evt | Struktura opisująca zdarzenie, które wystąpiło. |
| user_data | Dane użytkownika |
| const struct device* myUart = DEVICE_DT_GET(DT_NODELABEL(uart1)) |
Interfejs UART
| const struct uart_config myUart_cfg |
Parametry konfiguracyjne interfejsu szeregowego
| float pm25 |
Zmienne do przechowywania odczytów jakości powietrza w postaci zmiennoprzecinkowej
| uint16_t pm25r |
Zmienne do przechowywania odczytów jakości powietrza w postaci przesyłanej przez czujnik (zakodowane na 2 bajtach)
| int requested =0 |
Zmienna służąca do wybrania buforu na dane przychodzące
| uint8_t rx_buf[2][100] |
Bufor na dane przychodzące
| uint16_t ss_device_id = 0 |
Zmienna przechowująca numer ID czujnika
| bool ss_reporting_mode |
Zmienna przechowująca tryb raportowania czujnika
| bool ss_sleep_status |
Zmienna przechowująca stan uśpienia czujnika
| uint8_t ss_working_period |
Zmienna przechowująca okres pracy czujnika
| uint8_t tx_buf[19] |
Bufor na dane wychodzące