123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- #ifndef BLE_ADVERTISING_H__
- #define BLE_ADVERTISING_H__
- #include <stdint.h>
- #include "nrf_error.h"
- #include "ble.h"
- #include "ble_gap.h"
- #include "ble_gattc.h"
- #include "ble_advdata.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define BLE_ADVERTISING_DEF(_name) \
- static ble_advertising_t _name; \
- NRF_SDH_BLE_OBSERVER(_name ## _ble_obs, \
- BLE_ADV_BLE_OBSERVER_PRIO, \
- ble_advertising_on_ble_evt, &_name)
- typedef enum
- {
- BLE_ADV_MODE_IDLE,
- BLE_ADV_MODE_DIRECTED_HIGH_DUTY,
- BLE_ADV_MODE_DIRECTED,
- BLE_ADV_MODE_FAST,
- BLE_ADV_MODE_SLOW,
- } ble_adv_mode_t;
- typedef enum
- {
- BLE_ADV_EVT_IDLE,
- BLE_ADV_EVT_DIRECTED_HIGH_DUTY,
- BLE_ADV_EVT_DIRECTED,
- BLE_ADV_EVT_FAST,
- BLE_ADV_EVT_SLOW,
- BLE_ADV_EVT_FAST_WHITELIST,
- BLE_ADV_EVT_SLOW_WHITELIST,
- BLE_ADV_EVT_WHITELIST_REQUEST,
- BLE_ADV_EVT_PEER_ADDR_REQUEST
- } ble_adv_evt_t;
- typedef struct
- {
- bool ble_adv_on_disconnect_disabled;
- bool ble_adv_whitelist_enabled;
- bool ble_adv_directed_high_duty_enabled;
- bool ble_adv_directed_enabled;
- bool ble_adv_fast_enabled;
- bool ble_adv_slow_enabled;
- uint32_t ble_adv_directed_interval;
- uint32_t ble_adv_directed_timeout;
- uint32_t ble_adv_fast_interval;
- uint32_t ble_adv_fast_timeout;
- uint32_t ble_adv_slow_interval;
- uint32_t ble_adv_slow_timeout;
- bool ble_adv_extended_enabled;
- uint32_t ble_adv_secondary_phy;
- uint32_t ble_adv_primary_phy;
- } ble_adv_modes_config_t;
- typedef void (*ble_adv_evt_handler_t) (ble_adv_evt_t const adv_evt);
- typedef void (*ble_adv_error_handler_t) (uint32_t nrf_error);
- typedef struct
- {
- bool initialized;
- bool advertising_start_pending;
- ble_adv_mode_t adv_mode_current;
- ble_adv_modes_config_t adv_modes_config;
- uint8_t conn_cfg_tag;
- ble_adv_evt_t adv_evt;
- ble_adv_evt_handler_t evt_handler;
- ble_adv_error_handler_t error_handler;
- ble_gap_adv_params_t adv_params;
- uint8_t adv_handle;
- #ifdef BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED
- uint8_t enc_advdata[2][BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED];
- uint8_t enc_scan_rsp_data[2][BLE_GAP_ADV_SET_DATA_SIZE_EXTENDED_CONNECTABLE_MAX_SUPPORTED];
- #else
- uint8_t enc_advdata[2][BLE_GAP_ADV_SET_DATA_SIZE_MAX];
- uint8_t enc_scan_rsp_data[2][BLE_GAP_ADV_SET_DATA_SIZE_MAX];
- #endif
- ble_gap_adv_data_t adv_data;
- ble_gap_adv_data_t *p_adv_data;
- uint16_t current_slave_link_conn_handle;
- ble_gap_addr_t peer_address;
- bool peer_addr_reply_expected;
- bool whitelist_temporarily_disabled;
- bool whitelist_reply_expected;
- bool whitelist_in_use;
- } ble_advertising_t;
- typedef struct
- {
- uint32_t interval;
- uint32_t timeout;
- bool enabled;
- } ble_adv_mode_config_t;
- typedef struct
- {
- ble_advdata_t advdata;
- ble_advdata_t srdata;
- ble_adv_modes_config_t config;
- ble_adv_evt_handler_t evt_handler;
- ble_adv_error_handler_t error_handler;
- } ble_advertising_init_t;
- void ble_advertising_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_adv);
- uint32_t ble_advertising_init(ble_advertising_t * const p_advertising,
- ble_advertising_init_t const * const p_init);
-
- void ble_advertising_conn_cfg_tag_set(ble_advertising_t * const p_advertising, uint8_t ble_cfg_tag);
- uint32_t ble_advertising_start(ble_advertising_t * const p_advertising,
- ble_adv_mode_t advertising_mode);
- uint32_t ble_advertising_peer_addr_reply(ble_advertising_t * const p_advertising,
- ble_gap_addr_t * p_peer_addr);
- uint32_t ble_advertising_whitelist_reply(ble_advertising_t * const p_advertising,
- ble_gap_addr_t const * p_gap_addrs,
- uint32_t addr_cnt,
- ble_gap_irk_t const * p_gap_irks,
- uint32_t irk_cnt);
- uint32_t ble_advertising_restart_without_whitelist(ble_advertising_t * const p_advertising);
- void ble_advertising_modes_config_set(ble_advertising_t * const p_advertising,
- ble_adv_modes_config_t const * const p_adv_modes_config);
- ret_code_t ble_advertising_advdata_update(ble_advertising_t * const p_advertising,
- ble_advdata_t const * const p_advdata,
- ble_advdata_t const * const p_srdata);
- #ifdef __cplusplus
- }
- #endif
- #endif
|