18#ifndef NIMBLE_CPP_CLIENT_H_
19#define NIMBLE_CPP_CLIENT_H_
21#include "syscfg/syscfg.h"
22#if CONFIG_BT_NIMBLE_ENABLED && MYNEWT_VAL(BLE_ROLE_CENTRAL)
24# if defined(CONFIG_NIMBLE_CPP_IDF)
25# include "host/ble_gap.h"
27# include "nimble/nimble/host/include/host/ble_gap.h"
30# include "NimBLEAddress.h"
38class NimBLERemoteService;
39class NimBLERemoteCharacteristic;
40class NimBLEAdvertisedDevice;
42class NimBLEClientCallbacks;
51# if MYNEWT_VAL(BLE_ROLE_OBSERVER)
52 bool connect(
const NimBLEAdvertisedDevice* device,
53 bool deleteAttributes =
true,
54 bool asyncConnect =
false,
55 bool exchangeMTU =
true);
57 bool connect(
const NimBLEAddress& address,
bool deleteAttributes =
true,
bool asyncConnect =
false,
bool exchangeMTU =
true);
58 bool connect(
bool deleteAttributes =
true,
bool asyncConnect =
false,
bool exchangeMTU =
true);
59 bool disconnect(uint8_t reason = BLE_ERR_REM_USER_CONN_TERM);
60 bool cancelConnect()
const;
61 void setSelfDelete(
bool deleteOnDisconnect,
bool deleteOnConnectFail);
65 bool isConnected()
const;
66 void setClientCallbacks(NimBLEClientCallbacks* pClientCallbacks,
bool deleteCallbacks =
true);
67 std::string toString()
const;
68 uint16_t getConnHandle()
const;
69 uint16_t getMTU()
const;
71 bool secureConnection(
bool async =
false)
const;
72 void setConnectTimeout(uint32_t timeout);
73 bool setDataLen(uint16_t txOctets);
74 bool discoverAttributes();
76 int getLastError()
const;
77 bool updateConnParams(uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout);
78 void setConnectionParams(uint16_t minInterval,
82 uint16_t scanInterval = 16,
83 uint16_t scanWindow = 16);
84 const std::vector<NimBLERemoteService*>& getServices(
bool refresh =
false);
85 std::vector<NimBLERemoteService*>::iterator begin();
86 std::vector<NimBLERemoteService*>::iterator end();
87 NimBLERemoteCharacteristic* getCharacteristic(uint16_t handle);
88 NimBLERemoteService* getService(
const char* uuid);
89 NimBLERemoteService* getService(
const NimBLEUUID& uuid);
90 void deleteServices();
96 bool response =
false);
98# if MYNEWT_VAL(BLE_EXT_ADV)
99 void setConnectPhy(uint8_t phyMask);
101 bool updatePhy(uint8_t txPhysMask, uint8_t rxPhysMask, uint16_t phyOptions = 0);
102 bool getPhy(uint8_t* txPhy, uint8_t* rxPhy);
105 uint8_t deleteCallbacks : 1;
106 uint8_t deleteOnDisconnect : 1;
107 uint8_t deleteOnConnectFail : 1;
108 uint8_t asyncConnect : 1;
109 uint8_t exchangeMTU : 1;
112 Config getConfig()
const;
113 void setConfig(Config config);
118 NimBLEClient(
const NimBLEClient&) =
delete;
119 NimBLEClient& operator=(
const NimBLEClient&) =
delete;
121 bool retrieveServices(
const NimBLEUUID* uuidFilter =
nullptr);
122 static int handleGapEvent(
struct ble_gap_event* event,
void* arg);
123 static int exchangeMTUCb(uint16_t conn_handle,
const ble_gatt_error* error, uint16_t mtu,
void* arg);
124 static int serviceDiscoveredCB(uint16_t connHandle,
125 const struct ble_gatt_error* error,
126 const struct ble_gatt_svc* service,
130 mutable int m_lastErr;
131 int32_t m_connectTimeout;
133 std::vector<NimBLERemoteService*> m_svcVec;
134 NimBLEClientCallbacks* m_pClientCallbacks;
135 uint16_t m_connHandle;
136 uint8_t m_terminateFailCount;
137 mutable uint8_t m_asyncSecureAttempt;
140# if MYNEWT_VAL(BLE_EXT_ADV)
143 ble_gap_conn_params m_connParams;
146 friend class NimBLEServer;
152class NimBLEClientCallbacks {
154 virtual ~NimBLEClientCallbacks() {};
160 virtual void onConnect(NimBLEClient* pClient);
167 virtual void onConnectFail(NimBLEClient* pClient,
int reason);
174 virtual void onDisconnect(NimBLEClient* pClient,
int reason);
182 virtual bool onConnParamsUpdateRequest(NimBLEClient* pClient,
const ble_gap_upd_params* params);
202 virtual void onConfirmPasskey(
NimBLEConnInfo& connInfo, uint32_t pin);
216 virtual void onMTUChange(NimBLEClient* pClient, uint16_t MTU);
229 virtual void onPhyUpdate(NimBLEClient* pClient, uint8_t txPhy, uint8_t rxPhy);
A BLE device address.
Definition NimBLEAddress.h:42
A specialized container class to hold BLE attribute values.
Definition NimBLEAttValue.h:72
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
A structure to hold data for a task that is waiting for a response.
Definition NimBLEUtils.h:45