mirror of
https://github.com/h2zero/esp-nimble-cpp.git
synced 2024-12-18 09:10:47 +01:00
Remove NimBLEServer::getPeerNameOnConnect
With the implementation of the NimBLEServer::getClient function this is now redundant.
This commit is contained in:
parent
ac3d3575cc
commit
c547733194
2 changed files with 12 additions and 157 deletions
|
@ -45,7 +45,6 @@ static NimBLEServerCallbacks defaultCallbacks;
|
||||||
*/
|
*/
|
||||||
NimBLEServer::NimBLEServer()
|
NimBLEServer::NimBLEServer()
|
||||||
: m_gattsStarted{false},
|
: m_gattsStarted{false},
|
||||||
m_getPeerNameOnConnect{false},
|
|
||||||
m_svcChanged{false},
|
m_svcChanged{false},
|
||||||
m_deleteCallbacks{false},
|
m_deleteCallbacks{false},
|
||||||
# if !CONFIG_BT_NIMBLE_EXT_ADV
|
# if !CONFIG_BT_NIMBLE_EXT_ADV
|
||||||
|
@ -257,15 +256,6 @@ void NimBLEServer::advertiseOnDisconnect(bool enable) {
|
||||||
} // advertiseOnDisconnect
|
} // advertiseOnDisconnect
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Set the server to automatically read the name from the connected peer before
|
|
||||||
* the onConnect callback is called and enables the override callback with name parameter.
|
|
||||||
* @param [in] enable Enable reading the connected peer name upon connection.
|
|
||||||
*/
|
|
||||||
void NimBLEServer::getPeerNameOnConnect(bool enable) {
|
|
||||||
m_getPeerNameOnConnect = enable;
|
|
||||||
} // getPeerNameOnConnect
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return the number of connected clients.
|
* @brief Return the number of connected clients.
|
||||||
* @return The number of connected clients.
|
* @return The number of connected clients.
|
||||||
|
@ -348,100 +338,6 @@ NimBLEConnInfo NimBLEServer::getPeerInfoByHandle(uint16_t connHandle) const {
|
||||||
return peerInfo;
|
return peerInfo;
|
||||||
} // getPeerIDInfo
|
} // getPeerIDInfo
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Callback that is called after reading from the peer name characteristic.
|
|
||||||
* @details This will check the task pointer in the task data struct to determine
|
|
||||||
* the action to take once the name has been read. If there is a task waiting then
|
|
||||||
* it will be resumed, if not, the the RC value is checked to determine which callback
|
|
||||||
* should be called.
|
|
||||||
*/
|
|
||||||
int NimBLEServer::peerNameCB(uint16_t connHandle, const ble_gatt_error* error, ble_gatt_attr* attr, void* arg) {
|
|
||||||
NimBLETaskData* pTaskData = (NimBLETaskData*)arg;
|
|
||||||
std::string* name = (std::string*)pTaskData->m_pBuf;
|
|
||||||
int rc = error->status;
|
|
||||||
|
|
||||||
if (rc == 0) {
|
|
||||||
if (attr) {
|
|
||||||
name->append(OS_MBUF_DATA(attr->om, char*), OS_MBUF_PKTLEN(attr->om));
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc == BLE_HS_EDONE) {
|
|
||||||
if (pTaskData->m_flags != -1) {
|
|
||||||
NimBLEServer* pServer = (NimBLEServer*)pTaskData->m_pInstance;
|
|
||||||
NimBLEConnInfo peerInfo{};
|
|
||||||
ble_gap_conn_find(connHandle, &peerInfo.m_desc);
|
|
||||||
|
|
||||||
// check the flag to indicate which callback should be called.
|
|
||||||
if (pTaskData->m_flags == NIMBLE_SERVER_GET_PEER_NAME_ON_CONNECT_CB) {
|
|
||||||
pServer->m_pServerCallbacks->onConnect(pServer, peerInfo, *name);
|
|
||||||
} else if (pTaskData->m_flags == NIMBLE_SERVER_GET_PEER_NAME_ON_AUTH_CB) {
|
|
||||||
pServer->m_pServerCallbacks->onAuthenticationComplete(peerInfo, *name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
NIMBLE_LOGE(LOG_TAG, "NimBLEServerPeerNameCB rc=%d; %s", rc, NimBLEUtils::returnCodeToString(rc));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pTaskData->m_flags == -1) {
|
|
||||||
NimBLEUtils::taskRelease(*pTaskData, rc);
|
|
||||||
} else {
|
|
||||||
// If the read was triggered for callback use then these were allocated.
|
|
||||||
delete name;
|
|
||||||
delete pTaskData;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Implementation of the function that sends the read command.
|
|
||||||
*/
|
|
||||||
std::string NimBLEServer::getPeerNameImpl(uint16_t connHandle, int cbType) const {
|
|
||||||
std::string* buf = new std::string{};
|
|
||||||
NimBLETaskData* pTaskData = new NimBLETaskData(const_cast<NimBLEServer*>(this), cbType, buf);
|
|
||||||
ble_uuid16_t uuid{{BLE_UUID_TYPE_16}, BLE_SVC_GAP_CHR_UUID16_DEVICE_NAME};
|
|
||||||
int rc = ble_gattc_read_by_uuid(connHandle, 1, 0xffff, &uuid.u, NimBLEServer::peerNameCB, pTaskData);
|
|
||||||
if (rc != 0) {
|
|
||||||
NIMBLE_LOGE(LOG_TAG, "ble_gattc_read_by_uuid rc=%d, %s", rc, NimBLEUtils::returnCodeToString(rc));
|
|
||||||
NimBLEConnInfo peerInfo{};
|
|
||||||
ble_gap_conn_find(connHandle, &peerInfo.m_desc);
|
|
||||||
if (cbType == NIMBLE_SERVER_GET_PEER_NAME_ON_CONNECT_CB) {
|
|
||||||
m_pServerCallbacks->onConnect(const_cast<NimBLEServer*>(this), peerInfo, *buf);
|
|
||||||
} else if (cbType == NIMBLE_SERVER_GET_PEER_NAME_ON_AUTH_CB) {
|
|
||||||
m_pServerCallbacks->onAuthenticationComplete(peerInfo, *buf);
|
|
||||||
}
|
|
||||||
delete buf;
|
|
||||||
delete pTaskData;
|
|
||||||
} else if (cbType == -1) {
|
|
||||||
NimBLEUtils::taskWait(*pTaskData, BLE_NPL_TIME_FOREVER);
|
|
||||||
rc = pTaskData->m_flags;
|
|
||||||
std::string name{*(std::string*)pTaskData->m_pBuf};
|
|
||||||
delete buf;
|
|
||||||
delete pTaskData;
|
|
||||||
|
|
||||||
if (rc != 0 && rc != BLE_HS_EDONE) {
|
|
||||||
NIMBLE_LOGE(LOG_TAG, "getPeerName rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc));
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
// TaskData and name buffer will be deleted in the callback.
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get the name of the connected peer.
|
|
||||||
* @param connInfo A reference to a NimBLEConnInfo instance to read the name from.
|
|
||||||
* @returns A string containing the name.
|
|
||||||
* @note This is a blocking call and should NOT be called from any callbacks!
|
|
||||||
*/
|
|
||||||
std::string NimBLEServer::getPeerName(const NimBLEConnInfo& connInfo) const {
|
|
||||||
std::string name = getPeerNameImpl(connInfo.getConnHandle());
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Gap event handler.
|
* @brief Gap event handler.
|
||||||
*/
|
*/
|
||||||
|
@ -473,11 +369,7 @@ int NimBLEServer::handleGapEvent(ble_gap_event* event, void* arg) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pServer->m_getPeerNameOnConnect) {
|
pServer->m_pServerCallbacks->onConnect(pServer, peerInfo);
|
||||||
pServer->getPeerNameImpl(event->connect.conn_handle, NIMBLE_SERVER_GET_PEER_NAME_ON_CONNECT_CB);
|
|
||||||
} else {
|
|
||||||
pServer->m_pServerCallbacks->onConnect(pServer, peerInfo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -632,12 +524,7 @@ int NimBLEServer::handleGapEvent(ble_gap_event* event, void* arg) {
|
||||||
return BLE_ATT_ERR_INVALID_HANDLE;
|
return BLE_ATT_ERR_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pServer->m_getPeerNameOnConnect) {
|
pServer->m_pServerCallbacks->onAuthenticationComplete(peerInfo);
|
||||||
pServer->getPeerNameImpl(event->enc_change.conn_handle, NIMBLE_SERVER_GET_PEER_NAME_ON_AUTH_CB);
|
|
||||||
} else {
|
|
||||||
pServer->m_pServerCallbacks->onAuthenticationComplete(peerInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
} // BLE_GAP_EVENT_ENC_CHANGE
|
} // BLE_GAP_EVENT_ENC_CHANGE
|
||||||
|
|
||||||
|
@ -1095,10 +982,6 @@ void NimBLEServerCallbacks::onConnect(NimBLEServer* pServer, NimBLEConnInfo& con
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onConnect(): Default");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onConnect(): Default");
|
||||||
} // onConnect
|
} // onConnect
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo, std::string& name) {
|
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onConnect(): Default");
|
|
||||||
} // onConnect
|
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onDisconnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo, int reason) {
|
void NimBLEServerCallbacks::onDisconnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo, int reason) {
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onDisconnect(): Default");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onDisconnect(): Default");
|
||||||
} // onDisconnect
|
} // onDisconnect
|
||||||
|
@ -1113,9 +996,9 @@ uint32_t NimBLEServerCallbacks::onPassKeyDisplay() {
|
||||||
} // onPassKeyDisplay
|
} // onPassKeyDisplay
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onConfirmPassKey(NimBLEConnInfo& connInfo, uint32_t pin) {
|
void NimBLEServerCallbacks::onConfirmPassKey(NimBLEConnInfo& connInfo, uint32_t pin) {
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onConfirmPIN: default: true");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onConfirmPasskey: default: true");
|
||||||
NimBLEDevice::injectConfirmPasskey(connInfo, true);
|
NimBLEDevice::injectConfirmPasskey(connInfo, true);
|
||||||
} // onConfirmPIN
|
} // onConfirmPasskey
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onIdentity(NimBLEConnInfo& connInfo) {
|
void NimBLEServerCallbacks::onIdentity(NimBLEConnInfo& connInfo) {
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onIdentity: default");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onIdentity: default");
|
||||||
|
@ -1125,10 +1008,6 @@ void NimBLEServerCallbacks::onAuthenticationComplete(NimBLEConnInfo& connInfo) {
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onAuthenticationComplete: default");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onAuthenticationComplete: default");
|
||||||
} // onAuthenticationComplete
|
} // onAuthenticationComplete
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onAuthenticationComplete(NimBLEConnInfo& connInfo, const std::string& name) {
|
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onAuthenticationComplete: default");
|
|
||||||
} // onAuthenticationComplete
|
|
||||||
|
|
||||||
void NimBLEServerCallbacks::onConnParamsUpdate(NimBLEConnInfo& connInfo) {
|
void NimBLEServerCallbacks::onConnParamsUpdate(NimBLEConnInfo& connInfo) {
|
||||||
NIMBLE_LOGD("NimBLEServerCallbacks", "onConnParamsUpdate: default");
|
NIMBLE_LOGD("NimBLEServerCallbacks", "onConnParamsUpdate: default");
|
||||||
} // onConnParamsUpdate
|
} // onConnParamsUpdate
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
# undef max
|
# undef max
|
||||||
/**************************/
|
/**************************/
|
||||||
|
|
||||||
# include <string>
|
|
||||||
# include <vector>
|
# include <vector>
|
||||||
# include <array>
|
# include <array>
|
||||||
|
|
||||||
|
@ -75,8 +74,6 @@ class NimBLEServer {
|
||||||
NimBLEConnInfo getPeerInfo(uint8_t index) const;
|
NimBLEConnInfo getPeerInfo(uint8_t index) const;
|
||||||
NimBLEConnInfo getPeerInfo(const NimBLEAddress& address) const;
|
NimBLEConnInfo getPeerInfo(const NimBLEAddress& address) const;
|
||||||
NimBLEConnInfo getPeerInfoByHandle(uint16_t connHandle) const;
|
NimBLEConnInfo getPeerInfoByHandle(uint16_t connHandle) const;
|
||||||
std::string getPeerName(const NimBLEConnInfo& connInfo) const;
|
|
||||||
void getPeerNameOnConnect(bool enable);
|
|
||||||
void advertiseOnDisconnect(bool enable);
|
void advertiseOnDisconnect(bool enable);
|
||||||
void setDataLen(uint16_t connHandle, uint16_t tx_octets) const;
|
void setDataLen(uint16_t connHandle, uint16_t tx_octets) const;
|
||||||
|
|
||||||
|
@ -114,7 +111,6 @@ class NimBLEServer {
|
||||||
~NimBLEServer();
|
~NimBLEServer();
|
||||||
|
|
||||||
bool m_gattsStarted : 1;
|
bool m_gattsStarted : 1;
|
||||||
bool m_getPeerNameOnConnect : 1;
|
|
||||||
bool m_svcChanged : 1;
|
bool m_svcChanged : 1;
|
||||||
bool m_deleteCallbacks : 1;
|
bool m_deleteCallbacks : 1;
|
||||||
# if !CONFIG_BT_NIMBLE_EXT_ADV
|
# if !CONFIG_BT_NIMBLE_EXT_ADV
|
||||||
|
@ -128,17 +124,15 @@ class NimBLEServer {
|
||||||
NimBLEClient* m_pClient{nullptr};
|
NimBLEClient* m_pClient{nullptr};
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
static int handleGapEvent(struct ble_gap_event* event, void* arg);
|
static int handleGapEvent(struct ble_gap_event* event, void* arg);
|
||||||
static int handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_gatt_access_ctxt* ctxt, void* arg);
|
static int handleGattEvent(uint16_t connHandle, uint16_t attrHandle, ble_gatt_access_ctxt* ctxt, void* arg);
|
||||||
static int peerNameCB(uint16_t connHandle, const ble_gatt_error* error, ble_gatt_attr* attr, void* arg);
|
void serviceChanged();
|
||||||
std::string getPeerNameImpl(uint16_t connHandle, int cb_type = -1) const;
|
void resetGATT();
|
||||||
void serviceChanged();
|
|
||||||
void resetGATT();
|
|
||||||
|
|
||||||
}; // NimBLEServer
|
}; // NimBLEServer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Callbacks associated with the operation of a %BLE server.
|
* @brief Callbacks associated with the operation of a BLE server.
|
||||||
*/
|
*/
|
||||||
class NimBLEServerCallbacks {
|
class NimBLEServerCallbacks {
|
||||||
public:
|
public:
|
||||||
|
@ -147,26 +141,16 @@ class NimBLEServerCallbacks {
|
||||||
/**
|
/**
|
||||||
* @brief Handle a client connection.
|
* @brief Handle a client connection.
|
||||||
* This is called when a client connects.
|
* This is called when a client connects.
|
||||||
* @param [in] pServer A pointer to the %BLE server that received the client connection.
|
* @param [in] pServer A pointer to the BLE server that received the client connection.
|
||||||
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information.
|
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information.
|
||||||
* about the peer connection parameters.
|
* about the peer connection parameters.
|
||||||
*/
|
*/
|
||||||
virtual void onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo);
|
virtual void onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Handle a client connection.
|
|
||||||
* This is called when a client connects.
|
|
||||||
* @param [in] pServer A pointer to the %BLE server that received the client connection.
|
|
||||||
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information.
|
|
||||||
* @param [in] name The name of the connected peer device.
|
|
||||||
* about the peer connection parameters.
|
|
||||||
*/
|
|
||||||
virtual void onConnect(NimBLEServer* pServer, NimBLEConnInfo& connInfo, std::string& name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handle a client disconnection.
|
* @brief Handle a client disconnection.
|
||||||
* This is called when a client discconnects.
|
* This is called when a client disconnects.
|
||||||
* @param [in] pServer A pointer to the %BLE server that received the client disconnection.
|
* @param [in] pServer A pointer to the BLE server that received the client disconnection.
|
||||||
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
|
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
|
||||||
* about the peer connection parameters.
|
* about the peer connection parameters.
|
||||||
* @param [in] reason The reason code for the disconnection.
|
* @param [in] reason The reason code for the disconnection.
|
||||||
|
@ -202,14 +186,6 @@ class NimBLEServerCallbacks {
|
||||||
*/
|
*/
|
||||||
virtual void onAuthenticationComplete(NimBLEConnInfo& connInfo);
|
virtual void onAuthenticationComplete(NimBLEConnInfo& connInfo);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Called when the pairing procedure is complete.
|
|
||||||
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
|
|
||||||
* @param [in] name The name of the connected peer device.
|
|
||||||
* about the peer connection parameters.
|
|
||||||
*/
|
|
||||||
virtual void onAuthenticationComplete(NimBLEConnInfo& connInfo, const std::string& name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Called when the peer identity address is resolved.
|
* @brief Called when the peer identity address is resolved.
|
||||||
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
|
* @param [in] connInfo A reference to a NimBLEConnInfo instance with information
|
||||||
|
|
Loading…
Reference in a new issue