mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef H_ESP_CENTRAL_
 | 
						|
#define H_ESP_CENTRAL_
 | 
						|
 | 
						|
#include "modlog/modlog.h"
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#define PEER_ADDR_VAL_SIZE                                  6
 | 
						|
 | 
						|
/** Misc. */
 | 
						|
void print_bytes(const uint8_t *bytes, int len);
 | 
						|
void print_mbuf(const struct os_mbuf *om);
 | 
						|
void print_mbuf_data(const struct os_mbuf *om);
 | 
						|
char *addr_str(const void *addr);
 | 
						|
void print_uuid(const ble_uuid_t *uuid);
 | 
						|
void print_conn_desc(const struct ble_gap_conn_desc *desc);
 | 
						|
void print_adv_fields(const struct ble_hs_adv_fields *fields);
 | 
						|
void ext_print_adv_report(const void *param);
 | 
						|
 | 
						|
/** Peer. */
 | 
						|
struct peer_dsc {
 | 
						|
    SLIST_ENTRY(peer_dsc) next;
 | 
						|
    struct ble_gatt_dsc dsc;
 | 
						|
};
 | 
						|
SLIST_HEAD(peer_dsc_list, peer_dsc);
 | 
						|
 | 
						|
struct peer_chr {
 | 
						|
    SLIST_ENTRY(peer_chr) next;
 | 
						|
    struct ble_gatt_chr chr;
 | 
						|
 | 
						|
    struct peer_dsc_list dscs;
 | 
						|
};
 | 
						|
SLIST_HEAD(peer_chr_list, peer_chr);
 | 
						|
SLIST_HEAD(peer_svc_list, peer_svc);
 | 
						|
 | 
						|
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
 | 
						|
struct peer_incl_svc {
 | 
						|
    SLIST_ENTRY(peer_incl_svc) next;
 | 
						|
    struct ble_gatt_incl_svc svc;
 | 
						|
};
 | 
						|
SLIST_HEAD(peer_incl_svc_list, peer_incl_svc);
 | 
						|
#endif
 | 
						|
 | 
						|
struct peer_svc {
 | 
						|
    SLIST_ENTRY(peer_svc) next;
 | 
						|
    struct ble_gatt_svc svc;
 | 
						|
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
 | 
						|
    struct peer_incl_svc_list incl_svc;
 | 
						|
#endif
 | 
						|
    struct peer_chr_list chrs;
 | 
						|
};
 | 
						|
 | 
						|
struct peer;
 | 
						|
typedef void peer_disc_fn(const struct peer *peer, int status, void *arg);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief The callback function for the devices traversal.
 | 
						|
 *
 | 
						|
 * @param peer
 | 
						|
 * @param arg
 | 
						|
 * @return int  0, continue; Others, stop the traversal.
 | 
						|
 *
 | 
						|
 */
 | 
						|
typedef int peer_traverse_fn(const struct peer *peer, void *arg);
 | 
						|
 | 
						|
struct peer {
 | 
						|
    SLIST_ENTRY(peer) next;
 | 
						|
    uint16_t conn_handle;
 | 
						|
 | 
						|
    uint8_t peer_addr[PEER_ADDR_VAL_SIZE];
 | 
						|
 | 
						|
    /** List of discovered GATT services. */
 | 
						|
    struct peer_svc_list svcs;
 | 
						|
 | 
						|
    /** Keeps track of where we are in the service discovery process. */
 | 
						|
    uint16_t disc_prev_chr_val;
 | 
						|
    struct peer_svc *cur_svc;
 | 
						|
 | 
						|
    /** Callback that gets executed when service discovery completes. */
 | 
						|
    peer_disc_fn *disc_cb;
 | 
						|
    void *disc_cb_arg;
 | 
						|
};
 | 
						|
 | 
						|
void peer_traverse_all(peer_traverse_fn *trav_cb, void *arg);
 | 
						|
 | 
						|
int peer_disc_svc_by_uuid(uint16_t conn_handle, const ble_uuid_t *uuid, peer_disc_fn *disc_cb,
 | 
						|
                          void *disc_cb_arg);
 | 
						|
 | 
						|
int peer_disc_all(uint16_t conn_handle, peer_disc_fn *disc_cb,
 | 
						|
                  void *disc_cb_arg);
 | 
						|
const struct peer_dsc *
 | 
						|
peer_dsc_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
 | 
						|
                   const ble_uuid_t *chr_uuid, const ble_uuid_t *dsc_uuid);
 | 
						|
const struct peer_chr *
 | 
						|
peer_chr_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
 | 
						|
                   const ble_uuid_t *chr_uuid);
 | 
						|
const struct peer_svc *
 | 
						|
peer_svc_find_uuid(const struct peer *peer, const ble_uuid_t *uuid);
 | 
						|
int peer_delete(uint16_t conn_handle);
 | 
						|
int peer_add(uint16_t conn_handle);
 | 
						|
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
 | 
						|
int peer_init(int max_peers, int max_svcs, int max_incl_svcs, int max_chrs, int max_dscs);
 | 
						|
#else
 | 
						|
int peer_init(int max_peers, int max_svcs, int max_chrs, int max_dscs);
 | 
						|
#endif
 | 
						|
struct peer *
 | 
						|
peer_find(uint16_t conn_handle);
 | 
						|
#if MYNEWT_VAL(ENC_ADV_DATA)
 | 
						|
int peer_set_addr(uint16_t conn_handle, uint8_t *peer_addr);
 | 
						|
#endif
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |