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