NimBLE-Arduino 2.5.0
Loading...
Searching...
No Matches
NimBLEServer.h
1/*
2 * Copyright 2020-2026 Ryan Powell <ryan@nable-embedded.io> and
3 * esp-nimble-cpp, NimBLE-Arduino contributors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef NIMBLE_CPP_SERVER_H_
19#define NIMBLE_CPP_SERVER_H_
20
21#include "nimconfig.h"
22#if CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL
23
24# ifdef USING_NIMBLE_ARDUINO_HEADERS
25# include "nimble/nimble/host/include/host/ble_gap.h"
26# else
27# include "host/ble_gap.h"
28# endif
29
30/**** FIX COMPILATION ****/
31# undef min
32# undef max
33/**************************/
34
35# include <vector>
36# include <array>
37
38# define NIMBLE_ATT_REMOVE_HIDE 1
39# define NIMBLE_ATT_REMOVE_DELETE 2
40
41class NimBLEService;
43class NimBLEUUID;
44class NimBLEConnInfo;
45class NimBLEAddress;
46class NimBLEService;
48# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
49# if CONFIG_BT_NIMBLE_EXT_ADV
51# else
53# endif
54# endif
55# if CONFIG_BT_NIMBLE_ROLE_CENTRAL
56class NimBLEClient;
57# endif
58
63 public:
64 bool start();
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);
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;
79 NimBLEConnInfo getPeerInfo(uint8_t index) const;
80 NimBLEConnInfo getPeerInfo(const NimBLEAddress& address) const;
81 NimBLEConnInfo getPeerInfoByHandle(uint16_t connHandle) 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
88# if CONFIG_BT_NIMBLE_ROLE_CENTRAL
89 NimBLEClient* getClient(uint16_t connHandle);
90 NimBLEClient* getClient(const NimBLEConnInfo& connInfo);
91 void deleteClient();
92# endif
93
94# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
95# if CONFIG_BT_NIMBLE_EXT_ADV
97 bool startAdvertising(uint8_t instanceId, int duration = 0, int maxEvents = 0) const;
98 bool stopAdvertising(uint8_t instanceId) const;
99# endif
100
101# if !CONFIG_BT_NIMBLE_EXT_ADV || defined(_DOXYGEN_)
103 bool startAdvertising(uint32_t duration = 0) const;
104 bool stopAdvertising() const;
105# endif
106# endif
107
108 private:
109 friend class NimBLEDevice;
110 friend class NimBLEService;
111 friend class NimBLECharacteristic;
112# if CONFIG_BT_NIMBLE_ROLE_BROADCASTER
113# if CONFIG_BT_NIMBLE_EXT_ADV
114 friend class NimBLEExtAdvertising;
115# else
116 friend class NimBLEAdvertising;
117# endif
118# endif
119
120 NimBLEServer();
122
123 bool m_gattsStarted : 1;
124 bool m_svcChanged : 1;
125 bool m_deleteCallbacks : 1;
126# if !CONFIG_BT_NIMBLE_EXT_ADV && CONFIG_BT_NIMBLE_ROLE_BROADCASTER
127 bool m_advertiseOnDisconnect : 1;
128# endif
129 NimBLEServerCallbacks* m_pServerCallbacks;
130 std::vector<NimBLEService*> m_svcVec;
131 std::array<uint16_t, CONFIG_BT_NIMBLE_MAX_CONNECTIONS> m_connectedPeers;
132
133# if CONFIG_BT_NIMBLE_ROLE_CENTRAL
134 NimBLEClient* m_pClient{nullptr};
135# endif
136
137 static int handleGapEvent(struct ble_gap_event* event, void* arg);
138 static int handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_gatt_access_ctxt* ctxt, void* arg);
139 static void gattRegisterCallback(struct ble_gatt_register_ctxt* ctxt, void* arg);
140 void setServiceChanged();
141 bool resetGATT();
142
143}; // NimBLEServer
144
149 public:
150 virtual ~NimBLEServerCallbacks() {};
151
159 virtual void onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo);
160
169 virtual void onDisconnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo, int reason);
170
177 virtual void onMTUChange(uint16_t MTU, NimBLEConnInfo& connInfo);
178
183 virtual uint32_t onPassKeyDisplay();
184
192 virtual void onPassKeyEntry(NimBLEConnInfo& connInfo);
193
200 virtual void onConfirmPassKey(NimBLEConnInfo& connInfo, uint32_t pin);
201
207 virtual void onAuthenticationComplete(NimBLEConnInfo& connInfo);
208
213 virtual void onIdentity(NimBLEConnInfo& connInfo);
214
221 virtual void onConnParamsUpdate(NimBLEConnInfo& connInfo);
222
234 virtual void onPhyUpdate(NimBLEConnInfo& connInfo, uint8_t txPhy, uint8_t rxPhy);
235}; // NimBLEServerCallbacks
236
237#endif // CONFIG_BT_ENABLED && CONFIG_BT_NIMBLE_ROLE_PERIPHERAL
238#endif // NIMBLE_CPP_SERVER_H_
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:33
A model of a BLE Device from which all the BLE roles are created.
Definition NimBLEDevice.h:126
Extended advertising class.
Definition NimBLEExtAdvertising.h:110
Callbacks associated with the operation of a BLE server.
Definition NimBLEServer.h:148
virtual void onConnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo)
Handle a client connection. This is called when a client connects.
Definition NimBLEServer.cpp:1132
virtual uint32_t onPassKeyDisplay()
Called when a client requests a passkey for pairing (display).
Definition NimBLEServer.cpp:1144
virtual void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason)
Handle a client disconnection. This is called when a client disconnects.
Definition NimBLEServer.cpp:1136
virtual void onConfirmPassKey(NimBLEConnInfo &connInfo, uint32_t pin)
Called when using numeric comparision for pairing.
Definition NimBLEServer.cpp:1154
virtual void onPhyUpdate(NimBLEConnInfo &connInfo, uint8_t txPhy, uint8_t rxPhy)
Called when the PHY update procedure is complete.
Definition NimBLEServer.cpp:1171
virtual void onAuthenticationComplete(NimBLEConnInfo &connInfo)
Called when the pairing procedure is complete.
Definition NimBLEServer.cpp:1163
virtual void onConnParamsUpdate(NimBLEConnInfo &connInfo)
Called when connection parameters are updated following a request to update via NimBLEServer::updateC...
Definition NimBLEServer.cpp:1167
virtual void onMTUChange(uint16_t MTU, NimBLEConnInfo &connInfo)
Called when the connection MTU changes.
Definition NimBLEServer.cpp:1140
virtual void onPassKeyEntry(NimBLEConnInfo &connInfo)
Called when using passkey entry pairing and the peer requires the passkey to be entered.
Definition NimBLEServer.cpp:1149
virtual void onIdentity(NimBLEConnInfo &connInfo)
Called when the peer identity address is resolved.
Definition NimBLEServer.cpp:1159
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:819
NimBLEConnInfo getPeerInfoByHandle(uint16_t connHandle) const
Get the connection information of a connected peer by connection handle.
Definition NimBLEServer.cpp:427
NimBLEService * getServiceByHandle(uint16_t handle) const
Get a BLE Service by its handle.
Definition NimBLEServer.cpp:140
NimBLEConnInfo getPeerInfo(uint8_t index) const
Get the connection information of a connected peer by vector index.
Definition NimBLEServer.cpp:389
std::vector< uint16_t > getPeerDevices() const
Get a vector of the connected client handles.
Definition NimBLEServer.cpp:373
bool stopAdvertising() const
Stop advertising.
Definition NimBLEServer.cpp:1021
NimBLEService * getServiceByUUID(const char *uuid, uint16_t instanceId=0) const
Get a BLE Service by its UUID.
Definition NimBLEServer.cpp:111
NimBLEClient * getClient(uint16_t connHandle)
Create a client instance from the connection handle.
Definition NimBLEServer.cpp:1090
void sendServiceChangedIndication() const
Send a service changed indication to all clients.
Definition NimBLEServer.cpp:184
uint16_t getPeerMTU(uint16_t connHandle) const
Get the MTU value of a client connection.
Definition NimBLEServer.cpp:1031
uint8_t getConnectedCount() const
Return the number of connected clients.
Definition NimBLEServer.cpp:358
void setCallbacks(NimBLEServerCallbacks *pCallbacks, bool deleteCallbacks=true)
Set the server callbacks.
Definition NimBLEServer.cpp:791
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:1044
void addService(NimBLEService *service)
Adds a service which was either already created but removed from availability, or created and later a...
Definition NimBLEServer.cpp:856
bool getPhy(uint16_t connHandle, uint8_t *txPhy, uint8_t *rxPhy)
Get the PHY used for a peer connection.
Definition NimBLEServer.cpp:971
NimBLEExtAdvertising * getAdvertising() const
Retrieve the advertising object that can be used to advertise the existence of the server.
Definition NimBLEServer.cpp:155
bool start()
Start the GATT server.
Definition NimBLEServer.cpp:264
void deleteClient()
Delete the NimBLEClient instance that was created with getClient()
Definition NimBLEServer.cpp:1123
NimBLEService * createService(const char *uuid)
Create a BLE Service.
Definition NimBLEServer.cpp:89
bool startAdvertising(uint8_t instanceId, int duration=0, int maxEvents=0) const
Start advertising.
Definition NimBLEServer.cpp:990
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:955
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:321
void advertiseOnDisconnect(bool enable)
Set the server to automatically start advertising when a client disconnects.
Definition NimBLEServer.cpp:349
void setDataLen(uint16_t connHandle, uint16_t tx_octets) const
Request an update of the data packet length.
Definition NimBLEServer.cpp:1068
The model of a BLE service.
Definition NimBLEService.h:34
A model of a BLE UUID.
Definition NimBLEUUID.h:41