BAROS32/include/baros_ble.h

82 lines
2.3 KiB
C

#ifndef __BAROS_BLE_H__
#define __BAROS_BLE_H__
#include <stdbool.h>
#include "esp_event_base.h"
#include "host/ble_hs.h"
#ifdef MACSTR
#undef MACSTR
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
#endif
#ifdef MAC2STR
#undef MAC2STR
#define MAC2STR(a) (uint8_t)(a)[0], (uint8_t)(a)[1], (uint8_t)(a)[2], (uint8_t)(a)[3], (uint8_t)(a)[4], (uint8_t)(a)[5]
#endif
#define BAROS_NAME_MAX_LEN ( 32)
#define BAROS_BLE_SERVICE_PUMP_ENABLED (0x4200)
#define BAROS_BLE_SERVICE_PUMP_STATE (0x4300)
#define BAROS_BLE_SERVICE_PUMP_DURATION (0x4350)
#define BAROS_BLE_SERVICE_BARBACK (0x4400)
#define BAROS_CHAR_BUTTON (BAROS_BLE_SERVICE_BARBACK + 1) // 0x4401
#define BAROS_CHAR_NAME (BAROS_BLE_SERVICE_BARBACK + 2) // 0x4402
#define BAROS_CHAR_POUR (BAROS_BLE_SERVICE_BARBACK + 3) // 0x4403
ESP_EVENT_DECLARE_BASE(EVENT_BAROS_BLE);
#include "baros.h"
typedef enum {
BAROS_BLE_DISC,
BAROS_BLE_CONNECT,
} baros_ble_event_t;
typedef struct {
const char *name;
baros_role_t role;
} baros_ble_cfg_t;
typedef struct {
char *name;
uint8_t name_len;
ble_addr_t addr;
baros_role_t role;
} baros_ble_discovery_t;
typedef void baros_ble_connect_callback_t(ble_addr_t addr, void *arg);
typedef struct {
ble_addr_t addr;
void *arg;
baros_ble_connect_callback_t *cb;
} baros_ble_connect_cfg_t;
typedef struct baros_list_node baros_list_node_t;
struct baros_list_node {
baros_list_node_t *first;
baros_list_node_t *last;
baros_list_node_t *next;
baros_list_node_t *prev;
void *element;
};
uint8_t baros_ble_init(baros_ble_cfg_t *cfg);
void baros_ble_connect(baros_ble_connect_cfg_t *cfg);
typedef bool baros_list_find_element_callback(void *element, void *arg);
void *baros_list_find_element(baros_list_node_t *list, baros_list_find_element_callback *cb, void *arg);
void *baros_list_find_node(baros_list_node_t *list, baros_list_find_element_callback *cb, void *arg);
void baros_list_free(baros_list_node_t *list);
baros_list_node_t *baros_list_find_all_nodes(baros_list_node_t *list, baros_list_find_element_callback *cb, void *arg);
baros_list_node_t *baros_list_add(baros_list_node_t *list, void *element);
extern baros_list_node_t *peer_list;
#endif