18#ifndef NIMBLE_CPP_SERVER_H_
19#define NIMBLE_CPP_SERVER_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_PERIPHERAL)
24# if defined(CONFIG_NIMBLE_CPP_IDF)
25# include "host/ble_gap.h"
27# include "nimble/nimble/host/include/host/ble_gap.h"
38# define NIMBLE_ATT_REMOVE_HIDE 1
39# define NIMBLE_ATT_REMOVE_DELETE 2
42class NimBLEServerCallbacks;
47class NimBLECharacteristic;
48# if MYNEWT_VAL(BLE_ROLE_BROADCASTER)
49# if MYNEWT_VAL(BLE_EXT_ADV)
50class NimBLEExtAdvertising;
55# if MYNEWT_VAL(BLE_ROLE_CENTRAL)
65 uint8_t getConnectedCount()
const;
66 bool disconnect(uint16_t connHandle, uint8_t reason = BLE_ERR_REM_USER_CONN_TERM)
const;
67 bool disconnect(
const NimBLEConnInfo& connInfo, uint8_t reason = BLE_ERR_REM_USER_CONN_TERM)
const;
68 void setCallbacks(NimBLEServerCallbacks* pCallbacks,
bool deleteCallbacks =
true);
69 void updateConnParams(uint16_t connHandle, uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout)
const;
70 NimBLEService* createService(
const char* uuid);
71 NimBLEService* createService(
const NimBLEUUID& uuid);
72 NimBLEService* getServiceByUUID(
const char* uuid, uint16_t instanceId = 0)
const;
73 NimBLEService* getServiceByUUID(
const NimBLEUUID& uuid, uint16_t instanceId = 0)
const;
74 NimBLEService* getServiceByHandle(uint16_t handle)
const;
75 void removeService(NimBLEService* service,
bool deleteSvc =
false);
76 void addService(NimBLEService* service);
77 uint16_t getPeerMTU(uint16_t connHandle)
const;
78 std::vector<uint16_t> getPeerDevices()
const;
82 void advertiseOnDisconnect(
bool enable);
83 void setDataLen(uint16_t connHandle, uint16_t tx_octets)
const;
84 bool updatePhy(uint16_t connHandle, uint8_t txPhysMask, uint8_t rxPhysMask, uint16_t phyOptions);
85 bool getPhy(uint16_t connHandle, uint8_t* txPhy, uint8_t* rxPhy);
87# if MYNEWT_VAL(BLE_ROLE_CENTRAL)
88 NimBLEClient* getClient(uint16_t connHandle);
93# if MYNEWT_VAL(BLE_ROLE_BROADCASTER)
94# if MYNEWT_VAL(BLE_EXT_ADV)
95 NimBLEExtAdvertising* getAdvertising()
const;
96 bool startAdvertising(uint8_t instanceId,
int duration = 0,
int maxEvents = 0)
const;
97 bool stopAdvertising(uint8_t instanceId)
const;
100# if !MYNEWT_VAL(BLE_EXT_ADV) || defined(_DOXYGEN_)
102 bool startAdvertising(uint32_t duration = 0)
const;
103 bool stopAdvertising()
const;
109 friend class NimBLEService;
110 friend class NimBLECharacteristic;
111# if MYNEWT_VAL(BLE_ROLE_BROADCASTER)
112# if MYNEWT_VAL(BLE_EXT_ADV)
113 friend class NimBLEExtAdvertising;
122 bool m_gattsStarted : 1;
123 bool m_svcChanged : 1;
124 bool m_deleteCallbacks : 1;
125# if !MYNEWT_VAL(BLE_EXT_ADV)
126 bool m_advertiseOnDisconnect : 1;
128 NimBLEServerCallbacks* m_pServerCallbacks;
129 std::vector<NimBLEService*> m_svcVec;
130 std::array<uint16_t, MYNEWT_VAL(BLE_MAX_CONNECTIONS)> m_connectedPeers;
132# if MYNEWT_VAL(BLE_ROLE_CENTRAL)
133 NimBLEClient* m_pClient{
nullptr};
136 static int handleGapEvent(
struct ble_gap_event* event,
void* arg);
137 static int handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_gatt_access_ctxt* ctxt,
void* arg);
138 void serviceChanged();
146class NimBLEServerCallbacks {
148 virtual ~NimBLEServerCallbacks() {};
157 virtual void onConnect(NimBLEServer* pServer,
NimBLEConnInfo& connInfo);
167 virtual void onDisconnect(NimBLEServer* pServer,
NimBLEConnInfo& connInfo,
int reason);
181 virtual uint32_t onPassKeyDisplay();
189 virtual void onConfirmPassKey(
NimBLEConnInfo& connInfo, uint32_t pin);
223 virtual void onPhyUpdate(
NimBLEConnInfo& connInfo, uint8_t txPhy, uint8_t rxPhy);
A BLE device address.
Definition NimBLEAddress.h:42
Perform and manage BLE advertising.
Definition NimBLEAdvertising.h:51
Connection information.
Definition NimBLEConnInfo.h:32
A model of a BLE Device from which all the BLE roles are created.
Definition NimBLEDevice.h:116
A model of a BLE UUID.
Definition NimBLEUUID.h:41