18#ifndef NIMBLE_CPP_SERVER_H_
19#define NIMBLE_CPP_SERVER_H_
22#if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_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
48# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
49# if CONFIG_BT_NIMBLE_EXT_ADV
55# if CONFIG_BT_NIMBLE_ROLE_CENTRAL
66 bool disconnect(uint16_t connHandle, uint8_t reason = BLE_ERR_REM_USER_CONN_TERM)
const;
69 void updateConnParams(uint16_t connHandle, uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout)
const;
77 uint16_t
getPeerMTU(uint16_t connHandle)
const;
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 CONFIG_BT_NIMBLE_ROLE_CENTRAL
93# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
94# if CONFIG_BT_NIMBLE_EXT_ADV
96 bool startAdvertising(uint8_t instanceId,
int duration = 0,
int maxEvents = 0)
const;
100# if !CONFIG_BT_NIMBLE_EXT_ADV || defined(_DOXYGEN_)
111# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
112# if CONFIG_BT_NIMBLE_EXT_ADV
122 bool m_gattsStarted : 1;
123 bool m_svcChanged : 1;
124 bool m_deleteCallbacks : 1;
125# if !CONFIG_BT_NIMBLE_EXT_ADV
126 bool m_advertiseOnDisconnect : 1;
129 std::vector<NimBLEService*> m_svcVec;
130 std::array<uint16_t, CONFIG_BT_NIMBLE_MAX_CONNECTIONS> m_connectedPeers;
132# if CONFIG_BT_NIMBLE_ROLE_CENTRAL
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();
A BLE device address.
Definition NimBLEAddress.h:42
Perform and manage BLE advertising.
Definition NimBLEAdvertising.h:51
The model of a BLE Characteristic.
Definition NimBLECharacteristic.h:41
A model of a BLE client.
Definition NimBLEClient.h:49
Connection information.
Definition NimBLEConnInfo.h:32
A model of a BLE Device from which all the BLE roles are created.
Definition NimBLEDevice.h:122
Extended advertising class.
Definition NimBLEExtAdvertising.h:110
Callbacks associated with the operation of a BLE server.
Definition NimBLEServer.h:146
virtual void onConnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo)
Handle a client connection. This is called when a client connects.
Definition NimBLEServer.cpp:997
virtual uint32_t onPassKeyDisplay()
Called when a client requests a passkey for pairing (display).
Definition NimBLEServer.cpp:1009
virtual void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason)
Handle a client disconnection. This is called when a client disconnects.
Definition NimBLEServer.cpp:1001
virtual void onConfirmPassKey(NimBLEConnInfo &connInfo, uint32_t pin)
Called when using numeric comparision for pairing.
Definition NimBLEServer.cpp:1014
virtual void onPhyUpdate(NimBLEConnInfo &connInfo, uint8_t txPhy, uint8_t rxPhy)
Called when the PHY update procedure is complete.
Definition NimBLEServer.cpp:1031
virtual void onAuthenticationComplete(NimBLEConnInfo &connInfo)
Called when the pairing procedure is complete.
Definition NimBLEServer.cpp:1023
virtual void onConnParamsUpdate(NimBLEConnInfo &connInfo)
Called when connection parameters are updated following a request to update via NimBLEServer::updateC...
Definition NimBLEServer.cpp:1027
virtual void onMTUChange(uint16_t MTU, NimBLEConnInfo &connInfo)
Called when the connection MTU changes.
Definition NimBLEServer.cpp:1005
virtual void onIdentity(NimBLEConnInfo &connInfo)
Called when the peer identity address is resolved.
Definition NimBLEServer.cpp:1019
The model of a BLE server.
Definition NimBLEServer.h:62
void removeService(NimBLEService *service, bool deleteSvc=false)
Remove a service from the server.
Definition NimBLEServer.cpp:715
NimBLEConnInfo getPeerInfoByHandle(uint16_t connHandle) const
Get the connection information of a connected peer by connection handle.
Definition NimBLEServer.cpp:336
NimBLEService * getServiceByHandle(uint16_t handle) const
Get a BLE Service by its handle.
Definition NimBLEServer.cpp:136
NimBLEConnInfo getPeerInfo(uint8_t index) const
Get the connection information of a connected peer by vector index.
Definition NimBLEServer.cpp:298
std::vector< uint16_t > getPeerDevices() const
Get a vector of the connected client handles.
Definition NimBLEServer.cpp:282
bool stopAdvertising() const
Stop advertising.
Definition NimBLEServer.cpp:887
NimBLEService * getServiceByUUID(const char *uuid, uint16_t instanceId=0) const
Get a BLE Service by its UUID.
Definition NimBLEServer.cpp:107
NimBLEClient * getClient(uint16_t connHandle)
Create a client instance from the connection handle.
Definition NimBLEServer.cpp:956
uint16_t getPeerMTU(uint16_t connHandle) const
Get the MTU value of a client connection.
Definition NimBLEServer.cpp:897
uint8_t getConnectedCount() const
Return the number of connected clients.
Definition NimBLEServer.cpp:267
void setCallbacks(NimBLEServerCallbacks *pCallbacks, bool deleteCallbacks=true)
Set the server callbacks.
Definition NimBLEServer.cpp:687
void updateConnParams(uint16_t connHandle, uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout) const
Request an Update the connection parameters:
Definition NimBLEServer.cpp:910
void addService(NimBLEService *service)
Adds a service which was either already created but removed from availability, or created and later a...
Definition NimBLEServer.cpp:752
bool getPhy(uint16_t connHandle, uint8_t *txPhy, uint8_t *rxPhy)
Get the PHY used for a peer connection.
Definition NimBLEServer.cpp:837
NimBLEExtAdvertising * getAdvertising() const
Retrieve the advertising object that can be used to advertise the existence of the server.
Definition NimBLEServer.cpp:151
void deleteClient()
Delete the NimBLEClient instance that was created with getClient()
Definition NimBLEServer.cpp:988
NimBLEService * createService(const char *uuid)
Create a BLE Service.
Definition NimBLEServer.cpp:84
bool startAdvertising(uint8_t instanceId, int duration=0, int maxEvents=0) const
Start advertising.
Definition NimBLEServer.cpp:856
bool updatePhy(uint16_t connHandle, uint8_t txPhysMask, uint8_t rxPhysMask, uint16_t phyOptions)
Request an update to the PHY used for a peer connection.
Definition NimBLEServer.cpp:821
bool disconnect(uint16_t connHandle, uint8_t reason=BLE_ERR_REM_USER_CONN_TERM) const
Disconnect the specified client with optional reason.
Definition NimBLEServer.cpp:233
void start()
Start the GATT server.
Definition NimBLEServer.cpp:181
void advertiseOnDisconnect(bool enable)
Set the server to automatically start advertising when a client disconnects.
Definition NimBLEServer.cpp:258
void setDataLen(uint16_t connHandle, uint16_t tx_octets) const
Request an update of the data packet length.
Definition NimBLEServer.cpp:934
The model of a BLE service.
Definition NimBLEService.h:34
A model of a BLE UUID.
Definition NimBLEUUID.h:41