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

Kod definiujący i obsługujący zdarzenia związane z usługami w warstwie GATT. Więcej...

#include "BLE_service.h"
#include "sensor_uart.h"

Definicje

#define MAX_TRANSMIT_SIZE   240
 
#define BT_UUID_AIR_QUALITY_SERVICE   BT_UUID_DECLARE_128(AIR_QUALITY_SERVICE_UUID)
 
#define BT_UUID_PM25   BT_UUID_DECLARE_128(PM25_UUID)
 
#define BT_UUID_PM10   BT_UUID_DECLARE_128(PM10_UUID)
 
#define BT_UUID_AQS_MGMT_SERVICE   BT_UUID_DECLARE_128(AQS_MGMT_SERVICE_UUID)
 
#define BT_UUID_SLEEP_STATUS   BT_UUID_DECLARE_128(SLEEP_STATUS_UUID)
 
#define BT_UUID_REPORTING_STATUS   BT_UUID_DECLARE_128(REPORTING_STATUS_UUID)
 
#define BT_UUID_ID   BT_UUID_DECLARE_128(ID_UUID)
 
#define BT_UUID_WORKING_PERIOD   BT_UUID_DECLARE_128(WORKING_PERIOD_UUID)
 
#define BT_UUID_QUERY_DATA   BT_UUID_DECLARE_128(QUERY_DATA_UUID)
 

Wyliczenia

enum  command {
  sleep_status , reporting_mode , sensor_ID , working_period ,
  query_data
}
 Enumerator rozróżniający której charakterystyki dotyczy żądania zapisu/odczytu.
 

Funkcje

enum command set_comm (const struct bt_uuid *uuid)
 Funkcja zwracająca enumerator command na podstawie UUID charakterystyki.
 
const void * ss_var (enum instruction inst)
 Funkcja zwracjająca adres zmiennej, w której są przechowywane parametry opisujące bieżącą konfigurację czujnika.
 
static ssize_t read_from_sensor (enum instruction inst, uint16_t min_len, uint16_t len, struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t offset)
 Funkcja wyzwalająca odczyt bieżącej konfiguracji z czujnika na żądanie odczytu charakterystyki. Resetuje semafor wait_for_read, wywołuje funkcje send_inst(), która wysyła żądanie odczytu konfiguracji do czujnika i czeka na zwolnienie semafora wait_for_read, co oznacza, że odpowiedź została z czujnika odebrana i przetworzona. Na końcu za pomocą systemowej funkcji bt_gatt_attr_read() ustawia wartość odczytanej zmiennej w buforze wyjściowym lub zwraca kod błędu.
 
static ssize_t on_read (struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
 Funkcja callback wywoływana przez system w momencie żądania odczytu charakterystyki GATT. Zwraca przechwycony numer.
 
static ssize_t status_return (uint16_t len, uint8_t status)
 Funkcja zwracająca liczbę wysłanych bajtów w przypadku powodzenia wysłania instrukcji zmiany konfiguracji czujnika, lub kod błędu w przeciwnym przypadku.
 
static ssize_t on_recive (struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags)
 Funkcja callback uruchamiana przez system w momencie żądania zapisu charakterystyki. W zależności od charakterystyki której dotyczy żądanie weryfikuje poprawność otrzymanych danych, a następnie wywołuje funkcje send_inst(), która wysyła do czujnika ramkę z parametrami do ustawienia.
 
void on_cccd_changed (const struct bt_gatt_attr *attr, uint16_t val)
 Funkcja callback wywoływana w momencie zmiany konfiguracji CCCD Wypisyje komunikaty informacyjne o zdarzeniu jakie wystąpiło.
 
 BT_GATT_SERVICE_DEFINE (Air_Quality_Service, BT_GATT_PRIMARY_SERVICE(BT_UUID_AIR_QUALITY_SERVICE), BT_GATT_CHARACTERISTIC(BT_UUID_PM25, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE), BT_GATT_CHARACTERISTIC(BT_UUID_PM10, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE), BT_GATT_CHARACTERISTIC(BT_UUID_QUERY_DATA, BT_GATT_CHRC_WRITE, BT_GATT_PERM_WRITE, NULL, on_recive, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN))
 
 BT_GATT_SERVICE_DEFINE (Sensor_Mgmt_Service, BT_GATT_PRIMARY_SERVICE(BT_UUID_AQS_MGMT_SERVICE), BT_GATT_CHARACTERISTIC(BT_UUID_SLEEP_STATUS, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN), BT_GATT_CHARACTERISTIC(BT_UUID_REPORTING_STATUS, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN), BT_GATT_CHARACTERISTIC(BT_UUID_ID, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN), BT_GATT_CHARACTERISTIC(BT_UUID_WORKING_PERIOD, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL), BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN))
 
static void on_sent (struct bt_conn *conn, void *user_data)
 Funkcja callback uruchamiana przez system w momencie wysłania powiadomienia o zmianie wartości. Wypisuje na konsole szeregową komunikaty informacyjne.
 
void air_quality_send (struct bt_conn *conn, const uint16_t *pm25, const uint16_t *pm10, uint16_t len)
 Funkcja wysyłająca powiadomienie o zmianie wartości odczytów stanu jakości powietrza. Sprawdza, czy w danym połączeniu zostały zasubskrybowane powiadomienia oraz czy wynik odczytu się zmienił od ostatniego powiadomienia i, jeżeli obywa sprawdzenia są prawdziwe, wysyła zmienioną wartość.
 

Zmienne

uint16_t pm25l = 0
 
uint16_t pm10l = 0
 

Opis szczegółowy

Autor
Maciej Jędrasik (Maciej.Jedrasik.STUD@pw.edu.pl)
Wersja
1.0
Data
2024-05-29

Dokumentacja definicji

◆ MAX_TRANSMIT_SIZE

#define MAX_TRANSMIT_SIZE   240

Maksywalny rozmiar bufora dla BLE

Dokumentacja funkcji

◆ air_quality_send()

void air_quality_send ( struct bt_conn * conn,
const uint16_t * pm25,
const uint16_t * pm10,
uint16_t len )
Parametry
connStruktura opisująca połączenie
pm25Wartość stężenia pyłu zawiesinowego PM2.5
pm10Wartość stężenia pyłu zawiesinowego PM2.5
lenRozmiar parametrów do wysłania

◆ BT_GATT_SERVICE_DEFINE() [1/2]

BT_GATT_SERVICE_DEFINE ( Air_Quality_Service ,
BT_GATT_PRIMARY_SERVICE(BT_UUID_AIR_QUALITY_SERVICE) ,
BT_GATT_CHARACTERISTIC(BT_UUID_PM25, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE) ,
BT_GATT_CHARACTERISTIC(BT_UUID_PM10, BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, NULL, NULL, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE) ,
BT_GATT_CHARACTERISTIC(BT_UUID_QUERY_DATA, BT_GATT_CHRC_WRITE, BT_GATT_PERM_WRITE, NULL, on_recive, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN)  )

Deefinicja usługi Air Quality Service i jej charakterystyk

◆ BT_GATT_SERVICE_DEFINE() [2/2]

BT_GATT_SERVICE_DEFINE ( Sensor_Mgmt_Service ,
BT_GATT_PRIMARY_SERVICE(BT_UUID_AQS_MGMT_SERVICE) ,
BT_GATT_CHARACTERISTIC(BT_UUID_SLEEP_STATUS, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN) ,
BT_GATT_CHARACTERISTIC(BT_UUID_REPORTING_STATUS, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN) ,
BT_GATT_CHARACTERISTIC(BT_UUID_ID, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN) ,
BT_GATT_CHARACTERISTIC(BT_UUID_WORKING_PERIOD, BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN, on_read, on_recive, NULL) ,
BT_GATT_CCC(on_cccd_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE_AUTHEN)  )

Definicja usługi Air Quality Sensor Management Service i jej charakterystyk

◆ on_cccd_changed()

void on_cccd_changed ( const struct bt_gatt_attr * attr,
uint16_t val )
Parametry
attrStruktura opisująca atrybuty warstwy GATT
valTyp zdarzenia, który spowodował wywołanie funkcji.

◆ on_read()

static ssize_t on_read ( struct bt_conn * conn,
const struct bt_gatt_attr * attr,
void * buf,
uint16_t len,
uint16_t offset )
static
Parametry
connStruktura opisująca połączenie, które spowodowało wywołanie funkcji
attrStruktura opisująca atrybuty warstwy GATT
bufBufor, w którym należy umieścić odczytane dane
lenMiejsce dostępne w buforze
offsetPozycja w buforze, od której należy zacząć umieszczać dane
Zwraca
Ilość odczytanych danych w przypadku sukcesu bądź kod błędu w pozostaych przypadkach

◆ on_recive()

static ssize_t on_recive ( struct bt_conn * conn,
const struct bt_gatt_attr * attr,
const void * buf,
uint16_t len,
uint16_t offset,
uint8_t flags )
static
Parametry
connStruktura opisująca połączenie, które spowodowało wywołanie funkcji
attrStruktura opisująca atrybuty warstwy GATT
bufBufor, w którym znajdują się dane do ustawienie
lenLiczba bajtów znajdujących się w buforze
offsetPoczątkowe miejsce danych w buforze
flagsFlagi
Zwraca
Liczba zapisanych bajtów w przypadku powodzenia lub kod błędu w przeciwnym przypadku.

◆ on_sent()

static void on_sent ( struct bt_conn * conn,
void * user_data )
static
Parametry
connStruktura opisująca połączenie, którego dotyczy powiadomienie.
user_data

◆ read_from_sensor()

static ssize_t read_from_sensor ( enum instruction inst,
uint16_t min_len,
uint16_t len,
struct bt_conn * conn,
const struct bt_gatt_attr * attr,
void * buf,
uint16_t offset )
static
Parametry
instParametr, którego dotyczy żądanie odczytu
min_lenWielkość zmiennej opisującej parametr
lenDostępne miejsce w buforze
connStruktura opisująca połączenie, którego dotyczy żądanie odczytu
attrStruktura opisująca atrybuty GATT
bufBufor
offsetPoczątkowe miejsce w buforze od którego należy umieścić dane.
Zwraca
ssize_t Ilość umieszczonych bajtów danych bądź kod błędu.

◆ set_comm()

enum command set_comm ( const struct bt_uuid * uuid)
Parametry
uuidwskaźnik do uuid, którego dotyczy żądanie
Zwraca
odpowiedni enumerator command

◆ ss_var()

const void * ss_var ( enum instruction inst)
Parametry
instinstrukcja, której dotyczy żądanie odczytu
Zwraca
wskaźnik do zmiennej opisującej żądany parametr

◆ status_return()

static ssize_t status_return ( uint16_t len,
uint8_t status )
static
Parametry
len
status
Zwraca
ssize_t

Dokumentacja zmiennych

◆ pm25l

uint16_t pm25l = 0

Ostatnia wartość stężenia pyłu zawiesinowego wysłana do czujnika.