Skip to content

Commit ca0565b

Browse files
committed
Update
1 parent 013eccd commit ca0565b

File tree

6 files changed

+53
-61
lines changed

6 files changed

+53
-61
lines changed

src/NimBLEClient.cpp

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -692,20 +692,17 @@ bool NimBLEClient::discoverAttributes() {
692692
* * Here we ask the server for its set of services and wait until we have received them all.
693693
* @return true on success otherwise false if an error occurred
694694
*/
695-
bool NimBLEClient::retrieveServices(const NimBLEUUID* uuidFilter, NimBLERemoteService **out) {
695+
bool NimBLEClient::retrieveServices(const NimBLEUUID* uuid, NimBLERemoteService **out) {
696+
NIMBLE_LOGD(LOG_TAG, ">> retrieveServices()");
697+
NimBLETaskData taskData(this);
696698
if (!isConnected()) {
697699
NIMBLE_LOGE(LOG_TAG, "Disconnected, could not retrieve services -aborting");
698700
return false;
699701
}
700702

701-
int rc = 0;
702-
NimBLETaskData taskData(this);
703-
704-
if (uuidFilter == nullptr) {
705-
rc = ble_gattc_disc_all_svcs(m_connHandle, NimBLEClient::serviceDiscCB, &taskData);
706-
} else {
707-
rc = ble_gattc_disc_svc_by_uuid(m_connHandle, uuidFilter->getBase(), NimBLEClient::serviceDiscCB, &taskData);
708-
}
703+
int rc = (uuid == nullptr)
704+
? ble_gattc_disc_all_svcs(m_connHandle, svcDiscCB, &taskData)
705+
: ble_gattc_disc_svc_by_uuid(m_connHandle, uuid->getBase(), svcDiscCB, &taskData);
709706

710707
if (rc != 0) {
711708
NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_all_svcs: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
@@ -731,10 +728,10 @@ bool NimBLEClient::retrieveServices(const NimBLEUUID* uuidFilter, NimBLERemoteSe
731728
* @details When a service is found or there is none left or there was an error
732729
* the API will call this and report findings.
733730
*/
734-
int NimBLEClient::serviceDiscCB(uint16_t connHandle,
735-
const struct ble_gatt_error* error,
736-
const struct ble_gatt_svc* service,
737-
void* arg) {
731+
int NimBLEClient::svcDiscCB(uint16_t connHandle,
732+
const struct ble_gatt_error* error,
733+
const struct ble_gatt_svc* service,
734+
void* arg) {
738735
const int rc = error->status;
739736
auto pTaskData = (NimBLETaskData*)arg;
740737
auto pClient = (NimBLEClient*)pTaskData->m_pInstance;
@@ -751,7 +748,7 @@ int NimBLEClient::serviceDiscCB(uint16_t connHandle,
751748
}
752749

753750
NimBLEUtils::taskRelease(*pTaskData, error->status);
754-
NIMBLE_LOGD(LOG_TAG, "<< Service Discovered%s", (rc == BLE_HS_ENOTCONN) ? "; Disconnected" : "");
751+
NIMBLE_LOGD(LOG_TAG, "<< Service Discovered%s", (rc == BLE_HS_ENOTCONN) ? "; Not connected" : "");
755752
return error->status;
756753
} // serviceDiscCB
757754

src/NimBLEClient.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,13 @@ class NimBLEClient {
116116
NimBLEClient(const NimBLEClient&) = delete;
117117
NimBLEClient& operator=(const NimBLEClient&) = delete;
118118

119-
bool retrieveServices(const NimBLEUUID* uuidFilter = nullptr, NimBLERemoteService **out = nullptr);
120-
static int handleGapEvent(struct ble_gap_event* event, void* arg);
119+
bool retrieveServices(const NimBLEUUID* uuid = nullptr, NimBLERemoteService **out = nullptr);
121120
static int exchangeMTUCB(uint16_t connHandle, const ble_gatt_error* error, uint16_t mtu, void* arg);
122-
static int serviceDiscCB(uint16_t connHandle,
123-
const struct ble_gatt_error* error,
124-
const struct ble_gatt_svc* service,
125-
void* arg);
121+
static int handleGapEvent(struct ble_gap_event* event, void* arg);
122+
static int svcDiscCB(uint16_t connHandle,
123+
const struct ble_gatt_error* error,
124+
const struct ble_gatt_svc* service,
125+
void* arg);
126126

127127
NimBLEAddress m_peerAddress;
128128
mutable int m_lastErr;

src/NimBLERemoteCharacteristic.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ NimBLERemoteCharacteristic::~NimBLERemoteCharacteristic() {
6363
/**
6464
* @brief Callback used by the API when a descriptor is discovered or search complete.
6565
*/
66-
int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t connHandle,
67-
const ble_gatt_error* error,
68-
uint16_t chrHandle,
69-
const ble_gatt_dsc* dsc,
70-
void* arg) {
66+
int NimBLERemoteCharacteristic::dscDiscCB(uint16_t connHandle,
67+
const ble_gatt_error* error,
68+
uint16_t chrHandle,
69+
const ble_gatt_dsc* dsc,
70+
void* arg) {
7171
int rc = error->status;
7272
auto filter = (desc_filter_t*)arg;
7373
auto pTaskData = (NimBLETaskData*)filter->taskData;
@@ -94,24 +94,23 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t connHandle,
9494
/**
9595
* @brief Populate the descriptors (if any) for this characteristic.
9696
* @param [in] filter Structure containing pointers to descriptor, UUID, and task data.
97+
* @param out Pointer to hold result.
9798
* @return True if successfully retrieved, success = BLE_HS_EDONE.
9899
*/
99-
bool NimBLERemoteCharacteristic::retrieveDescriptors(const NimBLEUUID* uuidFilter, NimBLERemoteDescriptor** out) const {
100+
bool NimBLERemoteCharacteristic::retrieveDescriptors(const NimBLEUUID* uuid, NimBLERemoteDescriptor** out) const {
100101
NIMBLE_LOGD(LOG_TAG, ">> retrieveDescriptors() for characteristic: %s", getUUID().toString().c_str());
101-
102102
NimBLETaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
103-
desc_filter_t filter = {uuidFilter, &taskData};
104-
const uint16_t handle = getHandle();
105-
const uint16_t svcHandle = getRemoteService()->getEndHandle();
106-
const uint16_t cltHandle = getClient()->getConnHandle();
107-
103+
desc_filter_t filter = {uuid, &taskData};
104+
const uint16_t endHandle = getRemoteService()->getEndHandle();
105+
const uint16_t connHandle = getClient()->getConnHandle();
106+
const uint16_t starthandle = getHandle();
108107
// If this is the last handle then there are no more descriptors
109-
if (handle == svcHandle) {
108+
if (starthandle == endHandle) {
110109
NIMBLE_LOGD(LOG_TAG, "<< retrieveDescriptors(): found %d descriptors.", m_vDescriptors.size());
111110
return true;
112111
}
113112

114-
int rc = ble_gattc_disc_all_dscs(cltHandle, handle, svcHandle, descriptorDiscCB, &filter);
113+
int rc = ble_gattc_disc_all_dscs(connHandle, starthandle, endHandle, dscDiscCB, &filter);
115114
if (rc != 0) {
116115
NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_all_dscs: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
117116
return false;

src/NimBLERemoteCharacteristic.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class NimBLERemoteCharacteristic : public NimBLERemoteValueAttribute {
6868
bool retrieveDescriptors(const NimBLEUUID* uuidFilter = nullptr,
6969
NimBLERemoteDescriptor** out = nullptr) const;
7070

71-
static int descriptorDiscCB(
71+
static int dscDiscCB(
7272
uint16_t connHandle, const ble_gatt_error* error, uint16_t chrHandle, const ble_gatt_dsc* dsc, void* arg);
7373

7474
const NimBLERemoteService* m_pRemoteService{nullptr};

src/NimBLERemoteService.cpp

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ const std::vector<NimBLERemoteCharacteristic*>& NimBLERemoteService::getCharacte
108108
* @brief Callback for Characteristic discovery.
109109
* @return success == 0 or error code.
110110
*/
111-
int NimBLERemoteService::characteristicDiscCB(uint16_t connHandle,
112-
const ble_gatt_error* error,
113-
const ble_gatt_chr* chr,
114-
void* arg) {
111+
int NimBLERemoteService::chrDiscCB(uint16_t connHandle,
112+
const ble_gatt_error* error,
113+
const ble_gatt_chr* chr,
114+
void* arg) {
115115
const int rc = error->status;
116116
auto pTaskData = (NimBLETaskData*)arg;
117117
const auto pSvc = (NimBLERemoteService*)pTaskData->m_pInstance;
@@ -137,26 +137,22 @@ int NimBLERemoteService::characteristicDiscCB(uint16_t connHandle,
137137
* This function will not return until we have all the characteristics.
138138
* @return True if successfully retrieved, success = BLE_HS_EDONE.
139139
*/
140-
bool NimBLERemoteService::retrieveCharacteristics(const NimBLEUUID* uuidFilter, NimBLERemoteCharacteristic** out) const {
141-
NIMBLE_LOGD(LOG_TAG, ">> retrieveCharacteristics()");
140+
bool NimBLERemoteService::retrieveCharacteristics(const NimBLEUUID* uuid, NimBLERemoteCharacteristic** out) const {
141+
NIMBLE_LOGD(LOG_TAG, ">> retrieveCharacteristics() for service: %s", getUUID().toString().c_str());
142142
NimBLETaskData taskData(const_cast<NimBLERemoteService*>(this));
143-
int rc = 0;
144-
145-
if (uuidFilter == nullptr) {
146-
rc = ble_gattc_disc_all_chrs(m_pClient->getConnHandle(),
147-
getHandle(),
148-
getEndHandle(),
149-
NimBLERemoteService::characteristicDiscCB,
150-
&taskData);
151-
} else {
152-
rc = ble_gattc_disc_chrs_by_uuid(m_pClient->getConnHandle(),
153-
getHandle(),
154-
getEndHandle(),
155-
uuidFilter->getBase(),
156-
NimBLERemoteService::characteristicDiscCB,
157-
&taskData);
143+
const uint16_t hdlConn = m_pClient->getConnHandle();
144+
const uint16_t hdlEnd = getEndHandle();
145+
const uint16_t hdlStart = getHandle();
146+
// If this is the last handle then there are no more characteristics
147+
if (hdlStart == hdlEnd) {
148+
NIMBLE_LOGD(LOG_TAG, "<< retrieveCharacteristics(): found %d characteristics.", m_vChars.size());
149+
return true;
158150
}
159151

152+
int rc = (uuid == nullptr)
153+
? ble_gattc_disc_all_chrs(hdlConn, hdlStart, hdlEnd, chrDiscCB, &taskData)
154+
: ble_gattc_disc_chrs_by_uuid(hdlConn, hdlStart, hdlEnd, uuid->getBase(), chrDiscCB, &taskData);
155+
160156
if (rc != 0) {
161157
NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_chrs rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
162158
return false;

src/NimBLERemoteService.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ class NimBLERemoteService : public NimBLEAttribute {
5353

5454
NimBLERemoteService(NimBLEClient* pClient, const struct ble_gatt_svc* service);
5555
~NimBLERemoteService();
56-
bool retrieveCharacteristics(const NimBLEUUID* uuidFilter = nullptr,
56+
bool retrieveCharacteristics(const NimBLEUUID* uuid = nullptr,
5757
NimBLERemoteCharacteristic** out = nullptr) const;
58-
static int characteristicDiscCB(uint16_t connHandle,
59-
const struct ble_gatt_error* error,
60-
const struct ble_gatt_chr* chr,
61-
void* arg);
58+
static int chrDiscCB(uint16_t connHandle,
59+
const struct ble_gatt_error* error,
60+
const struct ble_gatt_chr* chr,
61+
void* arg);
6262

6363
mutable std::vector<NimBLERemoteCharacteristic*> m_vChars{};
6464
NimBLEClient* m_pClient{nullptr};

0 commit comments

Comments
 (0)