mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-11-22 13:10:55 +01:00
Fix attributes not found with 16/32bit UUIDs.
* Some peripherals will advertise 16/32bit UUIDs but when queried for their handles they do not convert the UUID to 128 bit locally and will return attribute not found. This patch will query the peripheral a second time with a 128bit converted UUID.
This commit is contained in:
parent
27fc792952
commit
39a3a63f80
3 changed files with 36 additions and 1 deletions
|
@ -454,6 +454,16 @@ NimBLERemoteService* NimBLEClient::getService(const NimBLEUUID &uuid) {
|
||||||
if(m_servicesVector.size() > prev_size) {
|
if(m_servicesVector.size() > prev_size) {
|
||||||
return m_servicesVector.back();
|
return m_servicesVector.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the request was successful but 16/32 bit service not found
|
||||||
|
// try again with the 128 bit uuid.
|
||||||
|
if(uuid.bitSize() == BLE_UUID_TYPE_16 ||
|
||||||
|
uuid.bitSize() == BLE_UUID_TYPE_32)
|
||||||
|
{
|
||||||
|
NimBLEUUID uuid128(uuid);
|
||||||
|
uuid128.to128();
|
||||||
|
return getService(uuid128);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NIMBLE_LOGD(LOG_TAG, "<< getService: not found");
|
NIMBLE_LOGD(LOG_TAG, "<< getService: not found");
|
||||||
|
|
|
@ -244,7 +244,7 @@ NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUU
|
||||||
|
|
||||||
for(auto &it: m_descriptorVector) {
|
for(auto &it: m_descriptorVector) {
|
||||||
if(it->getUUID() == uuid) {
|
if(it->getUUID() == uuid) {
|
||||||
NIMBLE_LOGD(LOG_TAG, "<< getDescriptor: found");
|
NIMBLE_LOGD(LOG_TAG, "<< getDescriptor: found the descriptor with uuid: %s", uuid.toString().c_str());
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,7 +254,18 @@ NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUU
|
||||||
if(m_descriptorVector.size() > prev_size) {
|
if(m_descriptorVector.size() > prev_size) {
|
||||||
return m_descriptorVector.back();
|
return m_descriptorVector.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the request was successful but 16/32 bit descriptor not found
|
||||||
|
// try again with the 128 bit uuid.
|
||||||
|
if(uuid.bitSize() == BLE_UUID_TYPE_16 ||
|
||||||
|
uuid.bitSize() == BLE_UUID_TYPE_32)
|
||||||
|
{
|
||||||
|
NimBLEUUID uuid128(uuid);
|
||||||
|
uuid128.to128();
|
||||||
|
return getDescriptor(uuid128);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NIMBLE_LOGD(LOG_TAG, "<< getDescriptor: Not found");
|
NIMBLE_LOGD(LOG_TAG, "<< getDescriptor: Not found");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} // getDescriptor
|
} // getDescriptor
|
||||||
|
|
|
@ -94,8 +94,11 @@ NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const char* u
|
||||||
* @return A pointer to the characteristic object, or nullptr if not found.
|
* @return A pointer to the characteristic object, or nullptr if not found.
|
||||||
*/
|
*/
|
||||||
NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEUUID &uuid) {
|
NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEUUID &uuid) {
|
||||||
|
NIMBLE_LOGD(LOG_TAG, ">> getCharacteristic: uuid: %s", uuid.toString().c_str());
|
||||||
|
|
||||||
for(auto &it: m_characteristicVector) {
|
for(auto &it: m_characteristicVector) {
|
||||||
if(it->getUUID() == uuid) {
|
if(it->getUUID() == uuid) {
|
||||||
|
NIMBLE_LOGD(LOG_TAG, "<< getCharacteristic: found the characteristic with uuid: %s", uuid.toString().c_str());
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -105,8 +108,19 @@ NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEU
|
||||||
if(m_characteristicVector.size() > prev_size) {
|
if(m_characteristicVector.size() > prev_size) {
|
||||||
return m_characteristicVector.back();
|
return m_characteristicVector.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the request was successful but 16/32 bit characteristic not found
|
||||||
|
// try again with the 128 bit uuid.
|
||||||
|
if(uuid.bitSize() == BLE_UUID_TYPE_16 ||
|
||||||
|
uuid.bitSize() == BLE_UUID_TYPE_32)
|
||||||
|
{
|
||||||
|
NimBLEUUID uuid128(uuid);
|
||||||
|
uuid128.to128();
|
||||||
|
return getCharacteristic(uuid128);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NIMBLE_LOGD(LOG_TAG, "<< getCharacteristic: not found");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} // getCharacteristic
|
} // getCharacteristic
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue