Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,4 @@ config NIMBLE_CPP_DEBUG_ASSERT_ENABLED
Enabling this option will add debug asserts to the NimBLE CPP library.
This will use approximately 1kB of flash memory.

config NIMBLE_CPP_FREERTOS_TASK_BLOCK_BIT
int "FreeRTOS task block bit."
default 31
help
Configure the bit to set in the task notification value when a task is blocked waiting for an event.
This should be set to a bit that is not used by other notifications in the system.

endmenu
22 changes: 11 additions & 11 deletions src/NimBLEClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,9 @@ int NimBLEClient::startConnectionAttempt(const ble_addr_t* peerAddr) {
*/
bool NimBLEClient::connect(const NimBLEAddress& address, bool deleteAttributes, bool asyncConnect, bool exchangeMTU) {
NIMBLE_LOGD(LOG_TAG, ">> connect(%s)", address.toString().c_str());
NimBLETaskData taskData(this);
const ble_addr_t* peerAddr = address.getBase();
int rc = 0;
NimBLEUtils::TaskData taskData(this);
const ble_addr_t* peerAddr = address.getBase();
int rc = 0;

if (!NimBLEDevice::m_synced) {
NIMBLE_LOGE(LOG_TAG, "Host not synced with controller.");
Expand Down Expand Up @@ -347,7 +347,7 @@ bool NimBLEClient::secureConnection(bool async) const {
return true;
}

NimBLETaskData taskData(const_cast<NimBLEClient*>(this), BLE_HS_ENOTCONN);
NimBLEUtils::TaskData taskData(const_cast<NimBLEClient*>(this), BLE_HS_ENOTCONN);
m_pTaskData = &taskData;
int retryCount = 1;
do {
Expand Down Expand Up @@ -769,8 +769,8 @@ bool NimBLEClient::retrieveServices(const NimBLEUUID* uuidFilter) {
return false;
}

int rc = 0;
NimBLETaskData taskData(this);
int rc = 0;
NimBLEUtils::TaskData taskData(this);

if (uuidFilter == nullptr) {
rc = ble_gattc_disc_all_svcs(m_connHandle, NimBLEClient::serviceDiscoveredCB, &taskData);
Expand Down Expand Up @@ -809,8 +809,8 @@ int NimBLEClient::serviceDiscoveredCB(uint16_t connHandle,
error->status,
(error->status == 0) ? service->start_handle : -1);

NimBLETaskData* pTaskData = (NimBLETaskData*)arg;
NimBLEClient* pClient = (NimBLEClient*)pTaskData->m_pInstance;
NimBLEUtils::TaskData* pTaskData = (NimBLEUtils::TaskData*)arg;
NimBLEClient* pClient = (NimBLEClient*)pTaskData->m_pInstance;

if (error->status == BLE_HS_ENOTCONN) {
NIMBLE_LOGE(LOG_TAG, "<< Service Discovered; Disconnected");
Expand Down Expand Up @@ -1010,9 +1010,9 @@ void NimBLEClient::setConnectRetries(uint8_t numRetries) {
* @param [in] arg A pointer to the client instance that registered for this callback.
*/
int NimBLEClient::handleGapEvent(struct ble_gap_event* event, void* arg) {
NimBLEClient* pClient = (NimBLEClient*)arg;
int rc = 0;
NimBLETaskData* pTaskData = pClient->m_pTaskData; // save a copy in case client is deleted
NimBLEClient* pClient = (NimBLEClient*)arg;
int rc = 0;
NimBLEUtils::TaskData* pTaskData = pClient->m_pTaskData; // save a copy in case client is deleted

NIMBLE_LOGD(LOG_TAG, ">> handleGapEvent %s", NimBLEUtils::gapEventToString(event->type));

Expand Down
4 changes: 2 additions & 2 deletions src/NimBLEClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
# endif

# include "NimBLEAddress.h"
# include "NimBLEUtils.h"

# include <stdint.h>
# include <vector>
Expand All @@ -41,7 +42,6 @@ class NimBLEAdvertisedDevice;
class NimBLEAttValue;
class NimBLEClientCallbacks;
class NimBLEConnInfo;
struct NimBLETaskData;

/**
* @brief A model of a BLE client.
Expand Down Expand Up @@ -155,7 +155,7 @@ class NimBLEClient {
NimBLEAddress m_peerAddress;
mutable int m_lastErr;
int32_t m_connectTimeout;
mutable NimBLETaskData* m_pTaskData;
mutable NimBLEUtils::TaskData* m_pTaskData;
std::vector<NimBLERemoteService*> m_svcVec;
NimBLEClientCallbacks* m_pClientCallbacks;
uint16_t m_connHandle;
Expand Down
2 changes: 2 additions & 0 deletions src/NimBLEDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1071,6 +1071,8 @@ bool NimBLEDevice::deinit(bool clearAll) {
deleteClient(clt);
}
# endif

NimBLEUtils::deleteTaskSems();
Comment thread
h2zero marked this conversation as resolved.
}

return rc == 0;
Expand Down
2 changes: 1 addition & 1 deletion src/NimBLEL2CAPChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ int NimBLEL2CAPChannel::writeFragment(std::vector<uint8_t>::const_iterator begin

if (stalled) {
NIMBLE_LOGD(LOG_TAG, "L2CAP Channel waiting for unstall...");
NimBLETaskData taskData;
NimBLEUtils::TaskData taskData;
m_pTaskData = &taskData;
NimBLEUtils::taskWait(taskData, BLE_NPL_TIME_FOREVER);
m_pTaskData = nullptr;
Expand Down
5 changes: 3 additions & 2 deletions src/NimBLEL2CAPChannel.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@
# undef max
/**************************/

# include "NimBLEUtils.h"

# include <vector>
# include <atomic>

class NimBLEClient;
class NimBLEL2CAPChannelCallbacks;
struct NimBLETaskData;

/**
* @brief Encapsulates a L2CAP channel.
Expand Down Expand Up @@ -94,7 +95,7 @@ class NimBLEL2CAPChannel {

// Runtime handling
std::atomic<bool> stalled{false};
NimBLETaskData* m_pTaskData{nullptr};
NimBLEUtils::TaskData* m_pTaskData{nullptr};

// Allocate / deallocate NimBLE memory pool
bool setupMemPool();
Expand Down
8 changes: 4 additions & 4 deletions src/NimBLERemoteCharacteristic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(
uint16_t connHandle, const ble_gatt_error* error, uint16_t chrHandle, const ble_gatt_dsc* dsc, void* arg) {
int rc = error->status;
auto filter = (NimBLEDescriptorFilter*)arg;
auto pTaskData = (NimBLETaskData*)filter->taskData;
auto pTaskData = (NimBLEUtils::TaskData*)filter->taskData;
const auto pChr = (NimBLERemoteCharacteristic*)pTaskData->m_pInstance;
const auto uuid = filter->uuid; // UUID to filter for
NIMBLE_LOGD(LOG_TAG, "Descriptor Discovery >> status: %d handle: %d", rc, (rc == 0) ? dsc->handle : -1);
Expand Down Expand Up @@ -116,7 +116,7 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi
return true;
}

NimBLETaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
NimBLEDescriptorFilter defaultFilter{nullptr, nullptr, &taskData};
if (pFilter == nullptr) {
pFilter = &defaultFilter;
Expand All @@ -134,7 +134,7 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi

auto prevDscCount = m_vDescriptors.size();
NimBLEUtils::taskWait(taskData, BLE_NPL_TIME_FOREVER);
rc = ((NimBLETaskData*)pFilter->taskData)->m_flags;
rc = ((NimBLEUtils::TaskData*)pFilter->taskData)->m_flags;
if (rc != BLE_HS_EDONE) {
NIMBLE_LOGE(LOG_TAG, "<< retrieveDescriptors(): failed: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
return false;
Expand All @@ -156,7 +156,7 @@ bool NimBLERemoteCharacteristic::retrieveDescriptors(NimBLEDescriptorFilter* pFi
NimBLERemoteDescriptor* NimBLERemoteCharacteristic::getDescriptor(const NimBLEUUID& uuid) const {
NIMBLE_LOGD(LOG_TAG, ">> getDescriptor: uuid: %s", uuid.toString().c_str());
NimBLEUUID uuidTmp{uuid};
NimBLETaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteCharacteristic*>(this));
NimBLEDescriptorFilter filter{nullptr, &uuidTmp, &taskData};

for (const auto& dsc : m_vDescriptors) {
Expand Down
8 changes: 4 additions & 4 deletions src/NimBLERemoteService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const char* u
*/
NimBLERemoteCharacteristic* NimBLERemoteService::getCharacteristic(const NimBLEUUID& uuid) const {
NIMBLE_LOGD(LOG_TAG, ">> getCharacteristic: uuid: %s", uuid.toString().c_str());
NimBLERemoteCharacteristic* pChar = nullptr;
NimBLERemoteCharacteristic* pChar = nullptr;

for (const auto& it : m_vChars) {
if (it->getUUID() == uuid) {
Expand Down Expand Up @@ -136,7 +136,7 @@ int NimBLERemoteService::characteristicDiscCB(uint16_t conn_handle,
"Characteristic Discovery >> status: %d handle: %d",
error->status,
(error->status == 0) ? chr->def_handle : -1);
auto pTaskData = (NimBLETaskData*)arg;
auto pTaskData = (NimBLEUtils::TaskData*)arg;
const auto pSvc = (NimBLERemoteService*)pTaskData->m_pInstance;

if (error->status == BLE_HS_ENOTCONN) {
Expand Down Expand Up @@ -178,8 +178,8 @@ int NimBLERemoteService::characteristicDiscCB(uint16_t conn_handle,
*/
bool NimBLERemoteService::retrieveCharacteristics(const NimBLEUUID* uuidFilter, NimBLERemoteCharacteristic** ppChar) const {
NIMBLE_LOGD(LOG_TAG, ">> retrieveCharacteristics()");
int rc = 0;
NimBLETaskData taskData(const_cast<NimBLERemoteService*>(this));
int rc = 0;
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteService*>(this));

if (uuidFilter == nullptr) {
rc = ble_gattc_disc_all_chrs(m_pClient->getConnHandle(),
Expand Down
24 changes: 12 additions & 12 deletions src/NimBLERemoteValueAttribute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ static const char* LOG_TAG = "NimBLERemoteValueAttribute";
bool NimBLERemoteValueAttribute::writeValue(const uint8_t* data, size_t length, bool response) const {
NIMBLE_LOGD(LOG_TAG, ">> writeValue()");

const NimBLEClient* pClient = getClient();
int retryCount = 1;
int rc = 0;
uint16_t mtu = pClient->getMTU() - 3;
NimBLETaskData taskData(const_cast<NimBLERemoteValueAttribute*>(this));
const NimBLEClient* pClient = getClient();
int retryCount = 1;
int rc = 0;
uint16_t mtu = pClient->getMTU() - 3;
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteValueAttribute*>(this));

// Check if the data length is longer than we can write in one connection event.
// If so we must do a long write which requires a response.
Expand Down Expand Up @@ -98,7 +98,7 @@ bool NimBLERemoteValueAttribute::writeValue(const uint8_t* data, size_t length,
* @return success == 0 or error code.
*/
int NimBLERemoteValueAttribute::onWriteCB(uint16_t conn_handle, const ble_gatt_error* error, ble_gatt_attr* attr, void* arg) {
auto pTaskData = static_cast<NimBLETaskData*>(arg);
auto pTaskData = static_cast<NimBLEUtils::TaskData*>(arg);
const auto pAtt = static_cast<NimBLERemoteValueAttribute*>(pTaskData->m_pInstance);

if (error->status == BLE_HS_ENOTCONN) {
Expand All @@ -124,11 +124,11 @@ int NimBLERemoteValueAttribute::onWriteCB(uint16_t conn_handle, const ble_gatt_e
NimBLEAttValue NimBLERemoteValueAttribute::readValue(time_t* timestamp) {
NIMBLE_LOGD(LOG_TAG, ">> readValue()");

NimBLEAttValue value{};
const NimBLEClient* pClient = getClient();
int rc = 0;
int retryCount = 1;
NimBLETaskData taskData(const_cast<NimBLERemoteValueAttribute*>(this), 0, &value);
NimBLEAttValue value{};
const NimBLEClient* pClient = getClient();
int rc = 0;
int retryCount = 1;
NimBLEUtils::TaskData taskData(const_cast<NimBLERemoteValueAttribute*>(this), 0, &value);

do {
rc = ble_gattc_read_long(pClient->getConnHandle(), getHandle(), 0, NimBLERemoteValueAttribute::onReadCB, &taskData);
Expand Down Expand Up @@ -183,7 +183,7 @@ NimBLEAttValue NimBLERemoteValueAttribute::readValue(time_t* timestamp) {
* @return success == 0 or error code.
*/
int NimBLERemoteValueAttribute::onReadCB(uint16_t conn_handle, const ble_gatt_error* error, ble_gatt_attr* attr, void* arg) {
auto pTaskData = static_cast<NimBLETaskData*>(arg);
auto pTaskData = static_cast<NimBLEUtils::TaskData*>(arg);
const auto pAtt = static_cast<NimBLERemoteValueAttribute*>(pTaskData->m_pInstance);

if (error->status == BLE_HS_ENOTCONN) {
Expand Down
2 changes: 1 addition & 1 deletion src/NimBLEScan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -689,7 +689,7 @@ NimBLEScanResults NimBLEScan::getResults(uint32_t duration, bool is_continue) {
return m_scanResults;
}

NimBLETaskData taskData;
NimBLEUtils::TaskData taskData;
m_pTaskData = &taskData;

if (start(duration, is_continue)) {
Expand Down
17 changes: 11 additions & 6 deletions src/NimBLEScan.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,16 @@ class NimBLEScan {
snprintf(&out[0],
out.size(),
"Scan stats:\n"
" Devices seen : %" PRIu32 "\n"
" Duplicate advs : %" PRIu32 "\n"
" Scan responses : %" PRIu32 "\n"
" SR timing (ms) : min=%" PRIu32 ", max=%" PRIu32 ", avg=%" PRIu64 "\n"
" Orphaned SR : %" PRIu32 "\n"
" Devices seen : %" PRIu32
"\n"
" Duplicate advs : %" PRIu32
"\n"
" Scan responses : %" PRIu32
"\n"
" SR timing (ms) : min=%" PRIu32 ", max=%" PRIu32 ", avg=%" PRIu64
"\n"
" Orphaned SR : %" PRIu32
"\n"
" Missed SR : %" PRIu32 "\n",
devCount,
dupCount,
Expand Down Expand Up @@ -187,7 +192,7 @@ class NimBLEScan {
NimBLEScanCallbacks* m_pScanCallbacks;
ble_gap_disc_params m_scanParams;
NimBLEScanResults m_scanResults;
NimBLETaskData* m_pTaskData;
NimBLEUtils::TaskData* m_pTaskData;
ble_npl_callout m_srTimer{};
ble_npl_time_t m_srTimeoutTicks{};
uint8_t m_maxResults;
Expand Down
Loading