Laboratorium BLE
Wczytywanie...
Szukanie...
Brak dopasowań
Dokumentacja pliku sensor_uart.c

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
 

Opis szczegółowy

Autor
Maciej Jędrasik (Maciej.Jedrasik.STUD@eduwarszawa.pl)
Wersja
1.0 za pomocą interfejsu UART.

Dokumentacja funkcji

◆ print_firmware_version()

void print_firmware_version ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_aq_data()

void process_aq_data ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_C5_commands()

void process_C5_commands ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_device_ID()

void process_device_ID ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_reporting_mode()

void process_reporting_mode ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_results()

void process_results ( struct uart_event * evt)
Parametry
evtStruktura opisująca zdarzenie interfejsu UART. Zawiera informacje o odebranych danych.

◆ process_working_mode()

void process_working_mode ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ process_working_period()

void process_working_period ( uint8_t * buf,
int offset )
Parametry
bufWskaźnik do bufora na dane przychodzące.
offsetPozycja pierwszego bajtu przetwarzanej ramki w buforze.

◆ send_inst()

uint8_t send_inst ( enum instruction inst,
uint8_t arg1,
uint8_t arg2,
bool set )
Parametry
instRodzaj instrukcji do wysłania do czujnika.
arg1Pierwszy argument instrukcji
arg2Drugi argument instrukcji
setParametr opisujący czy czujnik ma ustawić wartość przekazaną w argumentach (true), czy też odpowiedzieć ramką z bieżącą konfiguracją (false)
Zwraca
uint8_t 0 w przypadku powodzenia, kod błędu w pozostałych przypadkach.

◆ set_id_var()

void set_id_var ( uint8_t b1,
uint8_t b2 )
Parametry
b1pierwszy bajt z ID
b2drugi bajt z ID

◆ uart_cb()

static void uart_cb ( const struct device * dev,
struct uart_event * evt,
void * user_data )
static
Parametry
devUżywany interfejs UART
evtStruktura opisująca zdarzenie, które wystąpiło.
user_dataDane użytkownika

Dokumentacja zmiennych

◆ myUart

const struct device* myUart = DEVICE_DT_GET(DT_NODELABEL(uart1))

Interfejs UART

◆ myUart_cfg

const struct uart_config myUart_cfg
Wartość początkowa:
=
{
.baudrate = 9600,
.parity = UART_CFG_PARITY_NONE,
.data_bits = UART_CFG_DATA_BITS_8,
.stop_bits = UART_CFG_STOP_BITS_1,
.flow_ctrl = UART_CFG_FLOW_CTRL_NONE
}

Parametry konfiguracyjne interfejsu szeregowego

◆ pm25

float pm25

Zmienne do przechowywania odczytów jakości powietrza w postaci zmiennoprzecinkowej

◆ pm25r

uint16_t pm25r

Zmienne do przechowywania odczytów jakości powietrza w postaci przesyłanej przez czujnik (zakodowane na 2 bajtach)

◆ requested

int requested =0

Zmienna służąca do wybrania buforu na dane przychodzące

◆ rx_buf

uint8_t rx_buf[2][100]

Bufor na dane przychodzące

◆ ss_device_id

uint16_t ss_device_id = 0

Zmienna przechowująca numer ID czujnika

◆ ss_reporting_mode

bool ss_reporting_mode

Zmienna przechowująca tryb raportowania czujnika

◆ ss_sleep_status

bool ss_sleep_status

Zmienna przechowująca stan uśpienia czujnika

◆ ss_working_period

uint8_t ss_working_period

Zmienna przechowująca okres pracy czujnika

◆ tx_buf

uint8_t tx_buf[19]

Bufor na dane wychodzące