#ifndef __BAROS_BLE_H__ #define __BAROS_BLE_H__ #include #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