summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2020-08-24 22:02:00 +0200
committerSven Gothel <[email protected]>2020-08-24 22:02:00 +0200
commitf80a628ef4279b9bf237981fc7aa2e9dbbae2915 (patch)
tree7e9650fb606a5d2b9286ab088b0f686770dc5b90
parentab8676ae3fd865c89ab04c12861da388dbaebb46 (diff)
Adopt to exploding DEBUG value, implement 'hci.event,manager.event,adapter.event,gatt.data' for 'direct_bt.debug'
Explosion of 'hci.event,manager.event,adapter.event,gatt.data' will lead to - 'direct_bt.debug.hci.event' - 'direct_bt.debug.manager.event' - 'direct_bt.debug.adapter.event' - 'direct_bt.debug.gatt.data' and is being used in their respective modules using COND_PRINT(debug_state, ...).
-rw-r--r--api/direct_bt/DBTAdapter.hpp10
-rw-r--r--api/direct_bt/DBTManager.hpp8
-rw-r--r--api/direct_bt/GATTHandler.hpp8
-rw-r--r--api/direct_bt/HCIHandler.hpp7
-rw-r--r--src/direct_bt/DBTAdapter.cpp44
-rw-r--r--src/direct_bt/DBTManager.cpp78
-rw-r--r--src/direct_bt/GATTHandler.cpp63
-rw-r--r--src/direct_bt/HCIHandler.cpp30
8 files changed, 140 insertions, 108 deletions
diff --git a/api/direct_bt/DBTAdapter.hpp b/api/direct_bt/DBTAdapter.hpp
index d17362ee..f3c1fbe2 100644
--- a/api/direct_bt/DBTAdapter.hpp
+++ b/api/direct_bt/DBTAdapter.hpp
@@ -148,6 +148,15 @@ namespace direct_bt {
// *************************************************
// *************************************************
+ /**
+ * DBTAdapter represents one Bluetooth Controller.
+ * <p>
+ * Controlling Environment variables:
+ * <pre>
+ * - 'direct_bt.debug.adapter.event': Debug messages about events, see debug_events
+ * </pre>
+ * </p>
+ */
class DBTAdapter : public DBTObject
{
private:
@@ -156,6 +165,7 @@ namespace direct_bt {
static std::shared_ptr<DBTDevice> findDevice(std::vector<std::shared_ptr<DBTDevice>> & devices, EUI48 const & mac, const BDAddressType macType);
std::shared_ptr<DBTDevice> findDevice(std::vector<std::shared_ptr<DBTDevice>> & devices, DBTDevice const & device);
+ const bool debug_event;
DBTManager& mgmt;
std::shared_ptr<AdapterInfo> adapterInfo;
NameAndShortName localName;
diff --git a/api/direct_bt/DBTManager.hpp b/api/direct_bt/DBTManager.hpp
index cd6aa3b7..f5e75d7a 100644
--- a/api/direct_bt/DBTManager.hpp
+++ b/api/direct_bt/DBTManager.hpp
@@ -50,6 +50,12 @@ namespace direct_bt {
* <p>
* Implementation utilizes a lock free ringbuffer receiving data within its separate thread.
* </p>
+ * <p>
+ * Controlling Environment variables:
+ * <pre>
+ * - 'direct_bt.debug.manager.event': Debug messages about events, see debug_event
+ * </pre>
+ * </p>
*/
class DBTManager : public JavaUplink {
public:
@@ -78,6 +84,8 @@ namespace direct_bt {
};
std::vector<std::shared_ptr<WhitelistElem>> whitelist;
+ const bool debug_global; // only to trigger DBTEnv initialization first
+ const bool debug_event;
const BTMode btMode;
POctets rbuffer;
HCIComm comm;
diff --git a/api/direct_bt/GATTHandler.hpp b/api/direct_bt/GATTHandler.hpp
index 3f671fe8..25546f62 100644
--- a/api/direct_bt/GATTHandler.hpp
+++ b/api/direct_bt/GATTHandler.hpp
@@ -61,6 +61,12 @@ namespace direct_bt {
* <p>
* Implementation utilizes a lock free ringbuffer receiving data within its separate thread.
* </p>
+ * <p>
+ * Controlling Environment variables:
+ * <pre>
+ * - 'direct_bt.debug.gatt.data': Debug messages about detailed GATT data, see debug_data
+ * </pre>
+ * </p>
*/
class GATTHandler {
public:
@@ -84,6 +90,8 @@ namespace direct_bt {
static inline int number(const Defaults d) { return static_cast<int>(d); }
private:
+ const bool debug_data;
+
/** GATTHandle's device weak back-reference */
std::weak_ptr<DBTDevice> wbr_device;
diff --git a/api/direct_bt/HCIHandler.hpp b/api/direct_bt/HCIHandler.hpp
index 412c1345..f30f1fbb 100644
--- a/api/direct_bt/HCIHandler.hpp
+++ b/api/direct_bt/HCIHandler.hpp
@@ -95,6 +95,12 @@ namespace direct_bt {
* <p>
* Implementation utilizes a lock free ringbuffer receiving data within its separate thread.
* </p>
+ * <p>
+ * Controlling Environment variables:
+ * <pre>
+ * - 'direct_bt.debug.hci.event': Debug messages about events, see debug_event
+ * </pre>
+ * </p>
*/
class HCIHandler {
public:
@@ -118,6 +124,7 @@ namespace direct_bt {
private:
static MgmtEvent::Opcode translate(HCIEventType evt, HCIMetaEventType met);
+ const bool debug_event;
const BTMode btMode;
const uint16_t dev_id;
POctets rbuffer;
diff --git a/src/direct_bt/DBTAdapter.cpp b/src/direct_bt/DBTAdapter.cpp
index c9d478df..1157ee2d 100644
--- a/src/direct_bt/DBTAdapter.cpp
+++ b/src/direct_bt/DBTAdapter.cpp
@@ -32,7 +32,6 @@
#include <algorithm>
-// #define VERBOSE_ON 1
#include <dbt_debug.hpp>
#include "BasicAlgos.hpp"
@@ -49,12 +48,6 @@ extern "C" {
#include <poll.h>
}
-// #define EVENT_PRINT_ON 1
-#ifdef EVENT_PRINT_ON
- #define EVENT_PRINT(...) PLAIN_PRINT(__VA_ARGS__)
-#else
- #define EVENT_PRINT(...)
-#endif
using namespace direct_bt;
@@ -198,19 +191,22 @@ bool DBTAdapter::validateDevInfo() {
}
DBTAdapter::DBTAdapter()
-: mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(nullptr != mgmt.getDefaultAdapterInfo() ? 0 : -1)
+: debug_event(DBTEnv::getBooleanProperty("direct_bt.debug.adapter.event", false)),
+ mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(nullptr != mgmt.getDefaultAdapterInfo() ? 0 : -1)
{
valid = validateDevInfo();
}
DBTAdapter::DBTAdapter(EUI48 &mac)
-: mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(mgmt.findAdapterInfoIdx(mac))
+: debug_event(DBTEnv::getBooleanProperty("direct_bt.debug.adapter.event", false)),
+ mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(mgmt.findAdapterInfoIdx(mac))
{
valid = validateDevInfo();
}
DBTAdapter::DBTAdapter(const int dev_id)
-: mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(dev_id)
+: debug_event(DBTEnv::getBooleanProperty("direct_bt.debug.adapter.event", false)),
+ mgmt(DBTManager::get(BTMode::LE)), btMode(mgmt.getBTMode()), dev_id(dev_id)
{
valid = validateDevInfo();
}
@@ -639,7 +635,7 @@ bool DBTAdapter::mgmtEvDeviceDiscoveringMgmt(std::shared_ptr<MgmtEvent> e) {
currentMetaScanType = ScanType::NONE;
}
}
- EVENT_PRINT("DBTAdapter::EventCB:DeviceDiscovering(dev_id %d, keepDiscoveringAlive %d, currentScanType[native %s, meta %s]): %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceDiscovering(dev_id %d, keepDiscoveringAlive %d, currentScanType[native %s, meta %s]): %s",
dev_id, keepDiscoveringAlive.load(),
getScanTypeString(currentNativeScanType).c_str(), getScanTypeString(currentMetaScanType).c_str(),
e->toString().c_str());
@@ -664,11 +660,11 @@ bool DBTAdapter::mgmtEvDeviceDiscoveringMgmt(std::shared_ptr<MgmtEvent> e) {
}
bool DBTAdapter::mgmtEvNewSettingsMgmt(std::shared_ptr<MgmtEvent> e) {
- EVENT_PRINT("DBTAdapter::EventCB:NewSettings: %s", e->toString().c_str());
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:NewSettings: %s", e->toString().c_str());
const MgmtEvtNewSettings &event = *static_cast<const MgmtEvtNewSettings *>(e.get());
AdapterSetting old_setting = adapterInfo->getCurrentSetting();
AdapterSetting changes = adapterInfo->setCurrentSetting(event.getSettings());
- EVENT_PRINT("DBTAdapter::EventCB:NewSettings: %s -> %s, changes %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:NewSettings: %s -> %s, changes %s",
getAdapterSettingsString(old_setting).c_str(),
getAdapterSettingsString(adapterInfo->getCurrentSetting()).c_str(),
getAdapterSettingsString(changes).c_str() );
@@ -689,7 +685,7 @@ bool DBTAdapter::mgmtEvNewSettingsMgmt(std::shared_ptr<MgmtEvent> e) {
}
bool DBTAdapter::mgmtEvLocalNameChangedMgmt(std::shared_ptr<MgmtEvent> e) {
- EVENT_PRINT("DBTAdapter::EventCB:LocalNameChanged: %s", e->toString().c_str());
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:LocalNameChanged: %s", e->toString().c_str());
const MgmtEvtLocalNameChanged &event = *static_cast<const MgmtEvtLocalNameChanged *>(e.get());
std::string old_name = localName.getName();
std::string old_shortName = localName.getShortName();
@@ -701,7 +697,7 @@ bool DBTAdapter::mgmtEvLocalNameChangedMgmt(std::shared_ptr<MgmtEvent> e) {
if( shortNameChanged ) {
localName.setShortName(event.getShortName());
}
- EVENT_PRINT("DBTAdapter::EventCB:LocalNameChanged: Local name: %d: '%s' -> '%s'; short_name: %d: '%s' -> '%s'",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:LocalNameChanged: Local name: %d: '%s' -> '%s'; short_name: %d: '%s' -> '%s'",
nameChanged, old_name.c_str(), localName.getName().c_str(),
shortNameChanged, old_shortName.c_str(), localName.getShortName().c_str());
(void)nameChanged;
@@ -772,7 +768,7 @@ bool DBTAdapter::mgmtEvDeviceConnectedHCI(std::shared_ptr<MgmtEvent> e) {
ad_report.toString().c_str(),
device->toString().c_str());
} else {
- EVENT_PRINT("DBTAdapter::EventHCI:DeviceConnected(dev_id %d, new_connect %d, updated %s): %s, handle %s -> %s,\n %s,\n -> %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventHCI:DeviceConnected(dev_id %d, new_connect %d, updated %s): %s, handle %s -> %s,\n %s,\n -> %s",
dev_id, new_connect, getEIRDataMaskString(updateMask).c_str(), event.toString().c_str(),
uint16HexString(device->getConnectionHandle()).c_str(), uint16HexString(event.getHCIHandle()).c_str(),
ad_report.toString().c_str(),
@@ -803,12 +799,12 @@ bool DBTAdapter::mgmtEvDeviceConnectedHCI(std::shared_ptr<MgmtEvent> e) {
}
bool DBTAdapter::mgmtEvConnectFailedHCI(std::shared_ptr<MgmtEvent> e) {
- EVENT_PRINT("DBTAdapter::EventHCI:ConnectFailed: %s", e->toString().c_str());
+ COND_PRINT(debug_event, "DBTAdapter::EventHCI:ConnectFailed: %s", e->toString().c_str());
const MgmtEvtDeviceConnectFailed &event = *static_cast<const MgmtEvtDeviceConnectFailed *>(e.get());
std::shared_ptr<DBTDevice> device = findConnectedDevice(event.getAddress(), event.getAddressType());
if( nullptr != device ) {
const uint16_t handle = device->getConnectionHandle();
- EVENT_PRINT("DBTAdapter::EventHCI:ConnectFailed(dev_id %d): %s, handle %s -> zero,\n -> %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventHCI:ConnectFailed(dev_id %d): %s, handle %s -> zero,\n -> %s",
dev_id, event.toString().c_str(), uint16HexString(handle).c_str(),
device->toString().c_str());
@@ -845,7 +841,7 @@ bool DBTAdapter::mgmtEvDeviceDisconnectedHCI(std::shared_ptr<MgmtEvent> e) {
dev_id, event.toString().c_str(), device->toString().c_str());
return true;
}
- EVENT_PRINT("DBTAdapter::EventHCI:DeviceDisconnected(dev_id %d): %s, handle %s -> zero,\n -> %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventHCI:DeviceDisconnected(dev_id %d): %s, handle %s -> zero,\n -> %s",
dev_id, event.toString().c_str(), uint16HexString(event.getHCIHandle()).c_str(),
device->toString().c_str());
@@ -874,14 +870,14 @@ bool DBTAdapter::mgmtEvDeviceDisconnectedHCI(std::shared_ptr<MgmtEvent> e) {
}
bool DBTAdapter::mgmtEvDeviceDisconnectedMgmt(std::shared_ptr<MgmtEvent> e) {
- EVENT_PRINT("DBTAdapter::EventCB:DeviceDisconnected: %s", e->toString().c_str());
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceDisconnected: %s", e->toString().c_str());
const MgmtEvtDeviceDisconnected &event = *static_cast<const MgmtEvtDeviceDisconnected *>(e.get());
(void)event;
return true;
}
bool DBTAdapter::mgmtEvDeviceFoundHCI(std::shared_ptr<MgmtEvent> e) {
- EVENT_PRINT("DBTAdapter::EventCB:DeviceFound(dev_id %d): %s", dev_id, e->toString().c_str());
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceFound(dev_id %d): %s", dev_id, e->toString().c_str());
const MgmtEvtDeviceFound &deviceFoundEvent = *static_cast<const MgmtEvtDeviceFound *>(e.get());
std::shared_ptr<EInfoReport> eir = deviceFoundEvent.getEIR();
@@ -908,7 +904,7 @@ bool DBTAdapter::mgmtEvDeviceFoundHCI(std::shared_ptr<MgmtEvent> e) {
// drop existing device
//
EIRDataType updateMask = dev->update(*eir);
- EVENT_PRINT("DBTAdapter::EventCB:DeviceFound: Drop already discovered %s, %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceFound: Drop already discovered %s, %s",
dev->getAddressString().c_str(), eir->toString().c_str());
if( EIRDataType::NONE != updateMask ) {
sendDeviceUpdated("DiscoveredDeviceFound", dev, eir->getTimestamp(), updateMask);
@@ -927,7 +923,7 @@ bool DBTAdapter::mgmtEvDeviceFoundHCI(std::shared_ptr<MgmtEvent> e) {
EIRDataType updateMask = dev->update(*eir);
addDiscoveredDevice(dev); // re-add to discovered devices!
dev->ts_last_discovery = eir->getTimestamp();
- EVENT_PRINT("DBTAdapter::EventCB:DeviceFound: Use already shared %s, %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceFound: Use already shared %s, %s",
dev->getAddressString().c_str(), eir->toString().c_str());
int i=0;
@@ -955,7 +951,7 @@ bool DBTAdapter::mgmtEvDeviceFoundHCI(std::shared_ptr<MgmtEvent> e) {
dev = std::shared_ptr<DBTDevice>(new DBTDevice(*this, *eir));
addDiscoveredDevice(dev);
addSharedDevice(dev);
- EVENT_PRINT("DBTAdapter::EventCB:DeviceFound: Use new %s, %s",
+ COND_PRINT(debug_event, "DBTAdapter::EventCB:DeviceFound: Use new %s, %s",
dev->getAddressString().c_str(), eir->toString().c_str());
int i=0;
diff --git a/src/direct_bt/DBTManager.cpp b/src/direct_bt/DBTManager.cpp
index 19bfae6e..e7e83022 100644
--- a/src/direct_bt/DBTManager.cpp
+++ b/src/direct_bt/DBTManager.cpp
@@ -33,7 +33,6 @@
#include <algorithm>
// #define PERF_PRINT_ON 1
-// #define VERBOSE_ON 1
#include <dbt_debug.hpp>
#include "BTIoctl.hpp"
@@ -83,9 +82,16 @@ void DBTManager::mgmtReaderThreadImpl() {
std::shared_ptr<MgmtEvent> event( MgmtEvent::getSpecialized(rbuffer.get_ptr(), len) );
const MgmtEvent::Opcode opc = event->getOpcode();
if( MgmtEvent::Opcode::CMD_COMPLETE == opc || MgmtEvent::Opcode::CMD_STATUS == opc ) {
+ COND_PRINT(debug_event, "DBTManager-IO RECV (CMD) %s", event->toString().c_str());
+ if( mgmtEventRing.isFull() ) {
+ const int dropCount = mgmtEventRing.capacity()/4;
+ mgmtEventRing.drop(dropCount);
+ WARN_PRINT("DBTManager-IO RECV Drop (%d oldest elements of %d capacity, ring full)", dropCount, mgmtEventRing.capacity());
+ }
mgmtEventRing.putBlocking( event );
} else {
// issue a callback
+ COND_PRINT(debug_event, "DBTManager-IO RECV (CB) %s", event->toString().c_str());
sendMgmtEvent(event);
}
} else if( ETIMEDOUT != errno && !mgmtReaderShallStop ) { // expected exits
@@ -115,7 +121,7 @@ void DBTManager::sendMgmtEvent(std::shared_ptr<MgmtEvent> event) {
invokeCount++;
}
}
- // DBG_PRINT("DBTManager::sendMgmtEvent: Event %s -> %d/%zd callbacks", event->toString().c_str(), invokeCount, mgmtEventCallbackList.size());
+ COND_PRINT(debug_event, "DBTManager::sendMgmtEvent: Event %s -> %d/%zd callbacks", event->toString().c_str(), invokeCount, mgmtEventCallbackList.size());
(void)invokeCount;
}
@@ -150,6 +156,7 @@ std::shared_ptr<MgmtEvent> DBTManager::sendWithReply(MgmtCommand &req) {
const std::lock_guard<std::recursive_mutex> lock(mtx_sendReply); // RAII-style acquire and relinquish via destructor
{
const std::lock_guard<std::recursive_mutex> lock(comm.mutex()); // RAII-style acquire and relinquish via destructor
+ COND_PRINT(debug_event, "DBTManager-IO SENT %s", req.toString().c_str());
TROOctets & pdu = req.getPDU();
if ( comm.write( pdu.get_ptr(), pdu.getSize() ) < 0 ) {
ERR_PRINT("DBTManager::sendWithReply: HCIComm write error, req %s", req.toString().c_str());
@@ -172,6 +179,7 @@ std::shared_ptr<MgmtEvent> DBTManager::sendWithReply(MgmtCommand &req) {
retry, res->toString().c_str(), req.toString().c_str());
retry--;
} else {
+ COND_PRINT(debug_event, "DBTManager::sendWithReply: res %s; req %s", res->toString().c_str(), req.toString().c_str());
return res;
}
}
@@ -234,8 +242,10 @@ void DBTManager::shutdownAdapter(const uint16_t dev_id) {
}
DBTManager::DBTManager(const BTMode btMode)
-:btMode(btMode), rbuffer(ClientMaxMTU), comm(HCI_DEV_NONE, HCI_CHANNEL_CONTROL, Defaults::MGMT_READER_THREAD_POLL_TIMEOUT),
- mgmtEventRing(MGMTEVT_RING_CAPACITY), mgmtReaderRunning(false), mgmtReaderShallStop(false)
+: debug_global(DBTEnv::get().DEBUG),
+ debug_event(DBTEnv::getBooleanProperty("direct_bt.debug.manager.event", false)),
+ btMode(btMode), rbuffer(ClientMaxMTU), comm(HCI_DEV_NONE, HCI_CHANNEL_CONTROL, Defaults::MGMT_READER_THREAD_POLL_TIMEOUT),
+ mgmtEventRing(MGMTEVT_RING_CAPACITY), mgmtReaderRunning(false), mgmtReaderShallStop(false)
{
INFO_PRINT("DBTManager.ctor: pid %d", DBTManager::pidSelf);
if( !comm.isOpen() ) {
@@ -355,22 +365,22 @@ next1:
}
if( ok ) {
-#ifdef VERBOSE_ON
- addMgmtEventCallback(-1, MgmtEvent::Opcode::CLASS_OF_DEV_CHANGED, bindMemberFunc(this, &DBTManager::mgmtEvClassOfDeviceChangedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DISCOVERING, bindMemberFunc(this, &DBTManager::mgmtEvDeviceDiscoveringCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_FOUND, bindMemberFunc(this, &DBTManager::mgmtEvDeviceFoundCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_DISCONNECTED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceDisconnectedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_CONNECTED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceConnectedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::CONNECT_FAILED, bindMemberFunc(this, &DBTManager::mgmtEvConnectFailedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_BLOCKED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceBlockedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_UNBLOCKED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceUnblockedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_UNPAIRED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceUnpairedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::NEW_CONN_PARAM, bindMemberFunc(this, &DBTManager::mgmtEvNewConnectionParamCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_WHITELIST_ADDED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceWhitelistAddedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_WHITELIST_REMOVED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceWhilelistRemovedCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::PIN_CODE_REQUEST, bindMemberFunc(this, &DBTManager::mgmtEvPinCodeRequestCB));
- addMgmtEventCallback(-1, MgmtEvent::Opcode::USER_PASSKEY_REQUEST, bindMemberFunc(this, &DBTManager::mgmtEvUserPasskeyRequestCB));
-#endif
+ if( debug_event ) {
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::CLASS_OF_DEV_CHANGED, bindMemberFunc(this, &DBTManager::mgmtEvClassOfDeviceChangedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DISCOVERING, bindMemberFunc(this, &DBTManager::mgmtEvDeviceDiscoveringCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_FOUND, bindMemberFunc(this, &DBTManager::mgmtEvDeviceFoundCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_DISCONNECTED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceDisconnectedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_CONNECTED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceConnectedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::CONNECT_FAILED, bindMemberFunc(this, &DBTManager::mgmtEvConnectFailedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_BLOCKED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceBlockedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_UNBLOCKED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceUnblockedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_UNPAIRED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceUnpairedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::NEW_CONN_PARAM, bindMemberFunc(this, &DBTManager::mgmtEvNewConnectionParamCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_WHITELIST_ADDED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceWhitelistAddedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::DEVICE_WHITELIST_REMOVED, bindMemberFunc(this, &DBTManager::mgmtEvDeviceWhilelistRemovedCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::PIN_CODE_REQUEST, bindMemberFunc(this, &DBTManager::mgmtEvPinCodeRequestCB));
+ addMgmtEventCallback(-1, MgmtEvent::Opcode::USER_PASSKEY_REQUEST, bindMemberFunc(this, &DBTManager::mgmtEvUserPasskeyRequestCB));
+ }
PERF_TS_TD("DBTManager::open.ok");
return;
}
@@ -699,84 +709,84 @@ void DBTManager::clearAllMgmtEventCallbacks() {
}
bool DBTManager::mgmtEvClassOfDeviceChangedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:ClassOfDeviceChanged: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:ClassOfDeviceChanged: %s", e->toString().c_str());
(void)e;
return true;
}
bool DBTManager::mgmtEvDeviceDiscoveringCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceDiscovering: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceDiscovering: %s", e->toString().c_str());
const MgmtEvtDiscovering &event = *static_cast<const MgmtEvtDiscovering *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceFoundCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceFound: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceFound: %s", e->toString().c_str());
const MgmtEvtDeviceFound &event = *static_cast<const MgmtEvtDeviceFound *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceDisconnectedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceDisconnected: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceDisconnected: %s", e->toString().c_str());
const MgmtEvtDeviceDisconnected &event = *static_cast<const MgmtEvtDeviceDisconnected *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceConnectedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceConnected: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceConnected: %s", e->toString().c_str());
const MgmtEvtDeviceConnected &event = *static_cast<const MgmtEvtDeviceConnected *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvConnectFailedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:ConnectFailed: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:ConnectFailed: %s", e->toString().c_str());
const MgmtEvtDeviceConnectFailed &event = *static_cast<const MgmtEvtDeviceConnectFailed *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceBlockedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceBlocked: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceBlocked: %s", e->toString().c_str());
const MgmtEvtDeviceBlocked &event = *static_cast<const MgmtEvtDeviceBlocked *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceUnblockedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceUnblocked: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceUnblocked: %s", e->toString().c_str());
const MgmtEvtDeviceUnblocked &event = *static_cast<const MgmtEvtDeviceUnblocked *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceUnpairedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceUnpaired: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceUnpaired: %s", e->toString().c_str());
const MgmtEvtDeviceUnpaired &event = *static_cast<const MgmtEvtDeviceUnpaired *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvNewConnectionParamCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:NewConnectionParam: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:NewConnectionParam: %s", e->toString().c_str());
const MgmtEvtNewConnectionParam &event = *static_cast<const MgmtEvtNewConnectionParam *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceWhitelistAddedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceWhitelistAdded: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceWhitelistAdded: %s", e->toString().c_str());
const MgmtEvtDeviceWhitelistAdded &event = *static_cast<const MgmtEvtDeviceWhitelistAdded *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvDeviceWhilelistRemovedCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:DeviceWhitelistRemoved: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:DeviceWhitelistRemoved: %s", e->toString().c_str());
const MgmtEvtDeviceWhitelistRemoved &event = *static_cast<const MgmtEvtDeviceWhitelistRemoved *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvPinCodeRequestCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:PinCodeRequest: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:PinCodeRequest: %s", e->toString().c_str());
const MgmtEvtPinCodeRequest &event = *static_cast<const MgmtEvtPinCodeRequest *>(e.get());
(void)event;
return true;
}
bool DBTManager::mgmtEvUserPasskeyRequestCB(std::shared_ptr<MgmtEvent> e) {
- DBG_PRINT("DBTManager::EventCB:UserPasskeyRequest: %s", e->toString().c_str());
+ PLAIN_PRINT("DBTManager::EventCB:UserPasskeyRequest: %s", e->toString().c_str());
const MgmtEvtUserPasskeyRequest &event = *static_cast<const MgmtEvtUserPasskeyRequest *>(e.get());
(void)event;
return true;
diff --git a/src/direct_bt/GATTHandler.cpp b/src/direct_bt/GATTHandler.cpp
index bfd24530..83d54a56 100644
--- a/src/direct_bt/GATTHandler.cpp
+++ b/src/direct_bt/GATTHandler.cpp
@@ -41,7 +41,6 @@ extern "C" {
// #define PERF_PRINT_ON 1
// #define PERF2_PRINT_ON 1
-// #define VERBOSE_ON 1
#include <dbt_debug.hpp>
// PERF2_PRINT_ON for read/write single values
@@ -53,13 +52,6 @@ extern "C" {
#define PERF2_TS_TD(m)
#endif
-// #define GATT_PRINT_ON 1
-#ifdef GATT_PRINT_ON
- #define GATT_PRINT(...) PLAIN_PRINT(__VA_ARGS__)
-#else
- #define GATT_PRINT(...)
-#endif
-
#include "BasicAlgos.hpp"
#include "L2CAPIoctl.hpp"
@@ -197,7 +189,7 @@ void GATTHandler::l2capReaderThreadImpl() {
if( AttPDUMsg::Opcode::ATT_HANDLE_VALUE_NTF == opc ) {
const AttHandleValueRcv * a = static_cast<const AttHandleValueRcv*>(attPDU);
- GATT_PRINT("GATTHandler: NTF: %s, listener %zd", a->toString().c_str(), characteristicListenerList.size());
+ COND_PRINT(debug_data, "GATTHandler: NTF: %s, listener %zd", a->toString().c_str(), characteristicListenerList.size());
GATTCharacteristicRef decl = findCharacterisicsByValueHandle(a->getHandle());
const std::shared_ptr<TROOctets> data(new POctets(a->getValue()));
const uint64_t timestamp = a->ts_creation;
@@ -217,7 +209,7 @@ void GATTHandler::l2capReaderThreadImpl() {
attPDU = nullptr;
} else if( AttPDUMsg::Opcode::ATT_HANDLE_VALUE_IND == opc ) {
const AttHandleValueRcv * a = static_cast<const AttHandleValueRcv*>(attPDU);
- GATT_PRINT("GATTHandler: IND: %s, sendIndicationConfirmation %d, listener %zd", a->toString().c_str(), sendIndicationConfirmation, characteristicListenerList.size());
+ COND_PRINT(debug_data, "GATTHandler: IND: %s, sendIndicationConfirmation %d, listener %zd", a->toString().c_str(), sendIndicationConfirmation, characteristicListenerList.size());
bool cfmSent = false;
if( sendIndicationConfirmation ) {
AttHandleValueCfm cfm;
@@ -265,7 +257,8 @@ void GATTHandler::l2capReaderThreadImpl() {
}
GATTHandler::GATTHandler(const std::shared_ptr<DBTDevice> &device, const int replyTimeoutMS)
-: wbr_device(device), deviceString(device->getAddressString()), rbuffer(number(Defaults::MAX_ATT_MTU)),
+: debug_data(DBTEnv::getBooleanProperty("direct_bt.debug.gatt.data", false)),
+ wbr_device(device), deviceString(device->getAddressString()), rbuffer(number(Defaults::MAX_ATT_MTU)),
l2cap(device, L2CAP_PSM_UNDEF, L2CAP_CID_ATT), replyTimeoutMS(replyTimeoutMS),
isConnected(false), hasIOError(false),
attPDURing(number(Defaults::ATTPDU_RING_CAPACITY)),
@@ -511,11 +504,11 @@ bool GATTHandler::discoverPrimaryServices(std::vector<GATTServiceRef> & result)
result.clear();
while(!done) {
const AttReadByNTypeReq req(true /* group */, startHandle, 0xffff, groupType);
- GATT_PRINT("GATT PRIM SRV discover send: %s", req.toString().c_str());
+ COND_PRINT(debug_data, "GATT PRIM SRV discover send: %s", req.toString().c_str());
std::shared_ptr<const AttPDUMsg> pdu = sendWithReply(req, replyTimeoutMS);
if( nullptr != pdu ) {
- GATT_PRINT("GATT PRIM SRV discover recv: %s", pdu->toString().c_str());
+ COND_PRINT(debug_data, "GATT PRIM SRV discover recv: %s", pdu->toString().c_str());
if( pdu->getOpcode() == AttPDUMsg::ATT_READ_BY_GROUP_TYPE_RSP ) {
const AttReadByGroupTypeRsp * p = static_cast<const AttReadByGroupTypeRsp*>(pdu.get());
const int count = p->getElementCount();
@@ -528,7 +521,7 @@ bool GATTHandler::discoverPrimaryServices(std::vector<GATTServiceRef> & result)
p->pdu.get_uint16(ePDUOffset + 2), // end-handle
p->pdu.get_uuid( ePDUOffset + 2 + 2, uuid_t::toTypeSize(esz-2-2) ) // uuid
) ) );
- GATT_PRINT("GATT PRIM SRV discovered[%d/%d]: %s", i, count, result.at(result.size()-1)->toString().c_str());
+ COND_PRINT(debug_data, "GATT PRIM SRV discovered[%d/%d]: %s", i, count, result.at(result.size()-1)->toString().c_str());
}
startHandle = p->getElementEndHandle(count-1);
if( startHandle < 0xffff ) {
@@ -564,7 +557,7 @@ bool GATTHandler::discoverCharacteristics(GATTServiceRef & service) {
*/
const uuid16_t characteristicTypeReq = uuid16_t(GattAttributeType::CHARACTERISTIC);
const std::lock_guard<std::recursive_mutex> lock(mtx_command); // RAII-style acquire and relinquish via destructor
- GATT_PRINT("GATT discoverCharacteristics Service: %s", service->toString().c_str());
+ COND_PRINT(debug_data, "GATT discoverCharacteristics Service: %s", service->toString().c_str());
PERF_TS_T0();
@@ -573,11 +566,11 @@ bool GATTHandler::discoverCharacteristics(GATTServiceRef & service) {
service->characteristicList.clear();
while(!done) {
const AttReadByNTypeReq req(false /* group */, handle, service->endHandle, characteristicTypeReq);
- GATT_PRINT("GATT C discover send: %s", req.toString().c_str());
+ COND_PRINT(debug_data, "GATT C discover send: %s", req.toString().c_str());
std::shared_ptr<const AttPDUMsg> pdu = sendWithReply(req, replyTimeoutMS);
if( nullptr != pdu ) {
- GATT_PRINT("GATT C discover recv: %s", pdu->toString().c_str());
+ COND_PRINT(debug_data, "GATT C discover recv: %s", pdu->toString().c_str());
if( pdu->getOpcode() == AttPDUMsg::ATT_READ_BY_TYPE_RSP ) {
const AttReadByTypeRsp * p = static_cast<const AttReadByTypeRsp*>(pdu.get());
const int e_count = p->getElementCount();
@@ -594,7 +587,7 @@ bool GATTHandler::discoverCharacteristics(GATTServiceRef & service) {
static_cast<GATTCharacteristic::PropertyBitVal>(p->pdu.get_uint8(ePDUOffset + 2)), // Characteristics Property
p->pdu.get_uint16(ePDUOffset + 2 + 1), // Characteristics Value Handle
p->pdu.get_uuid(ePDUOffset + 2 + 1 + 2, uuid_t::toTypeSize(esz-2-1-2) ) ) ) ); // Characteristics Value Type UUID
- GATT_PRINT("GATT C discovered[%d/%d]: %s", e_iter, e_count, service->characteristicList.at(service->characteristicList.size()-1)->toString().c_str());
+ COND_PRINT(debug_data, "GATT C discovered[%d/%d]: %s", e_iter, e_count, service->characteristicList.at(service->characteristicList.size()-1)->toString().c_str());
}
handle = p->getElementHandle(e_count-1); // Last Characteristic Handle
if( handle < service->endHandle ) {
@@ -627,7 +620,7 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
* BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.1 Characteristic Declaration Attribute Value
* </p>
*/
- GATT_PRINT("GATT discoverDescriptors Service: %s", service->toString().c_str());
+ COND_PRINT(debug_data, "GATT discoverDescriptors Service: %s", service->toString().c_str());
const std::lock_guard<std::recursive_mutex> lock(mtx_command); // RAII-style acquire and relinquish via destructor
PERF_TS_T0();
@@ -636,7 +629,7 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
for(int charIter=0; !done && charIter < charCount; charIter++ ) {
GATTCharacteristicRef charDecl = service->characteristicList[charIter];
charDecl->clearDescriptors();
- GATT_PRINT("GATT discoverDescriptors Characteristic[%d/%d]: %s", charIter, charCount, charDecl->toString().c_str());
+ COND_PRINT(debug_data, "GATT discoverDescriptors Characteristic[%d/%d]: %s", charIter, charCount, charDecl->toString().c_str());
uint16_t cd_handle_iter = charDecl->value_handle + 1; // Start @ Characteristic Value Handle + 1
uint16_t cd_handle_end;
@@ -648,7 +641,7 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
while( !done && cd_handle_iter <= cd_handle_end ) {
const AttFindInfoReq req(cd_handle_iter, cd_handle_end);
- GATT_PRINT("GATT CD discover send: %s", req.toString().c_str());
+ COND_PRINT(debug_data, "GATT CD discover send: %s", req.toString().c_str());
std::shared_ptr<const AttPDUMsg> pdu = sendWithReply(req, replyTimeoutMS);
if( nullptr == pdu ) {
@@ -656,7 +649,7 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
done = true;
break;
}
- GATT_PRINT("GATT CD discover recv: %s", pdu->toString().c_str());
+ COND_PRINT(debug_data, "GATT CD discover recv: %s", pdu->toString().c_str());
if( pdu->getOpcode() == AttPDUMsg::ATT_FIND_INFORMATION_RSP ) {
const AttFindInfoRsp * p = static_cast<const AttFindInfoRsp*>(pdu.get());
@@ -688,7 +681,7 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
charDecl->clientCharacteristicsConfigIndex = charDecl->descriptorList.size();
}
charDecl->descriptorList.push_back(cd);
- GATT_PRINT("GATT CD discovered[%d/%d]: %s", e_iter, e_count, cd->toString().c_str());
+ COND_PRINT(debug_data, "GATT CD discovered[%d/%d]: %s", e_iter, e_count, cd->toString().c_str());
}
cd_handle_iter = p->getElementHandle(e_count-1); // Last Descriptor Handle
if( cd_handle_iter < cd_handle_end ) {
@@ -710,12 +703,12 @@ bool GATTHandler::discoverDescriptors(GATTServiceRef & service) {
}
bool GATTHandler::readDescriptorValue(GATTDescriptor & desc, int expectedLength) {
- GATT_PRINT("GATTHandler::readDescriptorValue expLen %d, desc %s", expectedLength, desc.toString().c_str());
+ COND_PRINT(debug_data, "GATTHandler::readDescriptorValue expLen %d, desc %s", expectedLength, desc.toString().c_str());
return readValue(desc.handle, desc.value, expectedLength);
}
bool GATTHandler::readCharacteristicValue(const GATTCharacteristic & decl, POctets & res, int expectedLength) {
- GATT_PRINT("GATTHandler::readCharacteristicValue expLen %d, decl %s", expectedLength, decl.toString().c_str());
+ COND_PRINT(debug_data, "GATTHandler::readCharacteristicValue expLen %d, decl %s", expectedLength, decl.toString().c_str());
return readValue(decl.value_handle, res, expectedLength);
}
@@ -728,7 +721,7 @@ bool GATTHandler::readValue(const uint16_t handle, POctets & res, int expectedLe
bool done=false;
int offset=0;
- GATT_PRINT("GATTHandler::readValue expLen %d, handle %s", expectedLength, uint16HexString(handle).c_str());
+ COND_PRINT(debug_data, "GATTHandler::readValue expLen %d, handle %s", expectedLength, uint16HexString(handle).c_str());
while(!done) {
if( 0 < expectedLength && expectedLength <= offset ) {
@@ -741,16 +734,16 @@ bool GATTHandler::readValue(const uint16_t handle, POctets & res, int expectedLe
if( 0 == offset ) {
const AttReadReq req (handle);
- GATT_PRINT("GATT RV send: %s", req.toString().c_str());
+ COND_PRINT(debug_data, "GATT RV send: %s", req.toString().c_str());
pdu = sendWithReply(req, replyTimeoutMS);
} else {
const AttReadBlobReq req (handle, offset);
- GATT_PRINT("GATT RV send: %s", req.toString().c_str());
+ COND_PRINT(debug_data, "GATT RV send: %s", req.toString().c_str());
pdu = sendWithReply(req, replyTimeoutMS);
}
if( nullptr != pdu ) {
- GATT_PRINT("GATT RV recv: %s", pdu->toString().c_str());
+ COND_PRINT(debug_data, "GATT RV recv: %s", pdu->toString().c_str());
if( pdu->getOpcode() == AttPDUMsg::ATT_READ_RSP ) {
const AttReadRsp * p = static_cast<const AttReadRsp*>(pdu.get());
const TOctetSlice & v = p->getValue();
@@ -806,18 +799,18 @@ bool GATTHandler::writeDescriptorValue(const GATTDescriptor & cd) {
/* BT Core Spec v5.2: Vol 3, Part G GATT: 4.9.3 Write Characteristic Value */
/* BT Core Spec v5.2: Vol 3, Part G GATT: 4.11 Characteristic Value Indication */
/* BT Core Spec v5.2: Vol 3, Part G GATT: 4.12.3 Write Characteristic Descriptor */
- GATT_PRINT("GATTHandler::writeDesccriptorValue desc %s", cd.toString().c_str());
+ COND_PRINT(debug_data, "GATTHandler::writeDesccriptorValue desc %s", cd.toString().c_str());
return writeValue(cd.handle, cd.value, true);
}
bool GATTHandler::writeCharacteristicValue(const GATTCharacteristic & c, const TROOctets & value) {
/* BT Core Spec v5.2: Vol 3, Part G GATT: 4.9.3 Write Characteristic Value */
- GATT_PRINT("GATTHandler::writeCharacteristicValue desc %s, value %s", c.toString().c_str(), value.toString().c_str());
+ COND_PRINT(debug_data, "GATTHandler::writeCharacteristicValue desc %s, value %s", c.toString().c_str(), value.toString().c_str());
return writeValue(c.value_handle, value, true);
}
bool GATTHandler::writeCharacteristicValueNoResp(const GATTCharacteristic & c, const TROOctets & value) {
- GATT_PRINT("GATT writeCharacteristicValueNoResp decl %s, value %s", c.toString().c_str(), value.toString().c_str());
+ COND_PRINT(debug_data, "GATT writeCharacteristicValueNoResp decl %s, value %s", c.toString().c_str(), value.toString().c_str());
return writeValue(c.value_handle, value, false);
}
@@ -837,7 +830,7 @@ bool GATTHandler::writeValue(const uint16_t handle, const TROOctets & value, con
PERF2_TS_T0();
AttWriteReq req(handle, value);
- GATT_PRINT("GATT WV send(resp %d): %s", expResponse, req.toString().c_str());
+ COND_PRINT(debug_data, "GATT WV send(resp %d): %s", expResponse, req.toString().c_str());
if( !expResponse ) {
send( req );
@@ -847,7 +840,7 @@ bool GATTHandler::writeValue(const uint16_t handle, const TROOctets & value, con
bool res = false;
std::shared_ptr<const AttPDUMsg> pdu = sendWithReply(req, replyTimeoutMS);
if( nullptr != pdu ) {
- GATT_PRINT("GATT WV recv: %s", pdu->toString().c_str());
+ COND_PRINT(debug_data, "GATT WV recv: %s", pdu->toString().c_str());
if( pdu->getOpcode() == AttPDUMsg::ATT_WRITE_RSP ) {
// OK
res = true;
@@ -870,7 +863,7 @@ bool GATTHandler::configNotificationIndication(GATTDescriptor & cccd, const bool
}
/* BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.3.3 Client Characteristic Configuration */
const uint16_t ccc_value = enableNotification | ( enableIndication << 1 );
- GATT_PRINT("GATTHandler::configNotificationIndication decl %s, enableNotification %d, enableIndication %d",
+ COND_PRINT(debug_data, "GATTHandler::configNotificationIndication decl %s, enableNotification %d, enableIndication %d",
cccd.toString().c_str(), enableNotification, enableIndication);
cccd.value.resize(2, 2);
cccd.value.put_uint16(0, ccc_value);
diff --git a/src/direct_bt/HCIHandler.cpp b/src/direct_bt/HCIHandler.cpp
index 48b7d08c..30e85408 100644
--- a/src/direct_bt/HCIHandler.cpp
+++ b/src/direct_bt/HCIHandler.cpp
@@ -33,7 +33,6 @@
#include <algorithm>
// #define PERF_PRINT_ON 1
-// #define VERBOSE_ON 1
#include <dbt_debug.hpp>
#include "DBTEnv.hpp"
@@ -265,17 +264,17 @@ void HCIHandler::hciReaderThreadImpl() {
const HCIMetaEventType mec = event->getMetaEventType();
if( HCIMetaEventType::INVALID != mec && !filter_test_metaev(mec) ) {
// DROP
- DBG_PRINT("HCIHandler-IO RECV Drop (meta filter) %s", event->toString().c_str());
+ COND_PRINT(debug_event, "HCIHandler-IO RECV Drop (meta filter) %s", event->toString().c_str());
continue; // next packet
}
if( event->isEvent(HCIEventType::CMD_STATUS) || event->isEvent(HCIEventType::CMD_COMPLETE) )
{
- DBG_PRINT("HCIHandler-IO RECV (CMD) %s", event->toString().c_str());
+ COND_PRINT(debug_event, "HCIHandler-IO RECV (CMD) %s", event->toString().c_str());
if( hciEventRing.isFull() ) {
- const int dropCount = hciEventRing.capacity()/2;
+ const int dropCount = hciEventRing.capacity()/4;
hciEventRing.drop(dropCount);
- INFO_PRINT("HCIHandler-IO RECV Drop (%d oldest elements of %d capacity, ring full)", dropCount, hciEventRing.capacity());
+ WARN_PRINT("HCIHandler-IO RECV Drop (%d oldest elements of %d capacity, ring full)", dropCount, hciEventRing.capacity());
}
hciEventRing.putBlocking( event );
} else if( event->isMetaEvent(HCIMetaEventType::LE_ADVERTISING_REPORT) ) {
@@ -283,7 +282,7 @@ void HCIHandler::hciReaderThreadImpl() {
std::vector<std::shared_ptr<EInfoReport>> eirlist = EInfoReport::read_ad_reports(event->getParam(), event->getParamSize());
int i=0;
for_each_idx(eirlist, [&](std::shared_ptr<EInfoReport> &eir) {
- // DBG_PRINT("HCIHandler-IO RECV (AD EIR) %s", eir->toString().c_str());
+ // COND_PRINT(debug_event, "HCIHandler-IO RECV (AD EIR) %s", eir->toString().c_str());
std::shared_ptr<MgmtEvent> mevent( new MgmtEvtDeviceFound(dev_id, eir) );
sendMgmtEvent( mevent );
i++;
@@ -292,10 +291,10 @@ void HCIHandler::hciReaderThreadImpl() {
// issue a callback for the translated event
std::shared_ptr<MgmtEvent> mevent = translate(event);
if( nullptr != mevent ) {
- DBG_PRINT("HCIHandler-IO RECV (CB) %s", event->toString().c_str());
+ COND_PRINT(debug_event, "HCIHandler-IO RECV (CB) %s", event->toString().c_str());
sendMgmtEvent( mevent );
} else {
- DBG_PRINT("HCIHandler-IO RECV Drop (no translation) %s", event->toString().c_str());
+ COND_PRINT(debug_event, "HCIHandler-IO RECV Drop (no translation) %s", event->toString().c_str());
}
}
} else if( ETIMEDOUT != errno && !hciReaderShallStop ) { // expected exits
@@ -323,14 +322,14 @@ void HCIHandler::sendMgmtEvent(std::shared_ptr<MgmtEvent> event) {
invokeCount++;
}
}
- // DBG_PRINT("HCIHandler::sendMgmtEvent: Event %s -> %d/%zd callbacks", event->toString().c_str(), invokeCount, mgmtEventCallbackList.size());
+ COND_PRINT(debug_event, "HCIHandler::sendMgmtEvent: Event %s -> %d/%zd callbacks", event->toString().c_str(), invokeCount, mgmtEventCallbackList.size());
(void)invokeCount;
}
bool HCIHandler::sendCommand(HCICommand &req) {
const std::lock_guard<std::recursive_mutex> lock(comm.mutex()); // RAII-style acquire and relinquish via destructor
- DBG_PRINT("HCIHandler-IO SENT %s", req.toString().c_str());
+ COND_PRINT(debug_event, "HCIHandler-IO SENT %s", req.toString().c_str());
TROOctets & pdu = req.getPDU();
if ( comm.write( pdu.get_ptr(), pdu.getSize() ) < 0 ) {
@@ -413,11 +412,12 @@ exit:
HCIHandler::HCIHandler(const BTMode btMode, const uint16_t dev_id,
const int cmdStatusReplyTimeoutMS,
const int cmdCompleteReplyTimeoutMS)
-:btMode(btMode), dev_id(dev_id), rbuffer(HCI_MAX_MTU),
- comm(dev_id, HCI_CHANNEL_RAW, Defaults::HCI_READER_THREAD_POLL_TIMEOUT),
- cmdStatusReplyTimeoutMS(cmdStatusReplyTimeoutMS),
- cmdCompleteReplyTimeoutMS(cmdCompleteReplyTimeoutMS),
- hciEventRing(HCI_EVT_RING_CAPACITY), hciReaderRunning(false), hciReaderShallStop(false)
+: debug_event(DBTEnv::getBooleanProperty("direct_bt.debug.hci.event", false)),
+ btMode(btMode), dev_id(dev_id), rbuffer(HCI_MAX_MTU),
+ comm(dev_id, HCI_CHANNEL_RAW, Defaults::HCI_READER_THREAD_POLL_TIMEOUT),
+ cmdStatusReplyTimeoutMS(cmdStatusReplyTimeoutMS),
+ cmdCompleteReplyTimeoutMS(cmdCompleteReplyTimeoutMS),
+ hciEventRing(HCI_EVT_RING_CAPACITY), hciReaderRunning(false), hciReaderShallStop(false)
{
INFO_PRINT("HCIHandler.ctor: pid %d", HCIHandler::pidSelf);
if( !comm.isOpen() ) {