diff options
author | Sven Gothel <[email protected]> | 2022-05-22 03:54:46 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2022-05-22 03:54:46 +0200 |
commit | 82ccb78a8543bf712be591f93fd728ed65b440b4 (patch) | |
tree | dedd39b2204c880bfe3a9f503d3aaf261b4911dc | |
parent | 27446a9fe2cbb514209347a3ba77af467b01b92a (diff) |
Adding C++ module/groups to separate the C++ API levels for the user; Adding reference to perihperal-server mode to overview.v2.7.1
42 files changed, 435 insertions, 77 deletions
@@ -24,16 +24,14 @@ Below you can find a few notes about [*Direct-BT* Origins](#direct_bt_origins). ## Details You will find a [detailed overview of *Direct-BT*](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/namespacedirect__bt.html#details) (C++) -and the [same in the Java API](https://jausoft.com/projects/direct_bt/build/documentation/java/html/namespaceorg_1_1direct__bt.html#details). +and the [same in the Java API](https://jausoft.com/projects/direct_bt/build/documentation/java/html/namespaceorg_1_1direct__bt.html#details).<br/> +See details on the [C++ and Java API](#direct_bt_apidoc) including its different C++ API level modules. [AdapterStatusListener](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/classdirect__bt_1_1AdapterStatusListener.html) allows listening to adapter changes and device discovery and [BTGattCharListener](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/classdirect__bt_1_1BTGattCharListener.html) to GATT indications and notifications. -*Direct-BT* may be utilized via its [C++ API](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/index.html) -or via its [Java API](https://jausoft.com/projects/direct_bt/build/documentation/java/html/index.html). - *Direct-BT* is exposed via the following native libraries - *libdirect_bt.so* for the core C++ implementation. - *libjavadirect_bt.so* for the Java binding. @@ -198,15 +196,18 @@ See *Examples* below ... ### API Exposed API closely follows and references the [Bluetooth Specification](https://www.bluetooth.com/specifications/bluetooth-core-specification/). +<a name="direct_bt_apidoc"></a> + #### API Documentation Up to date API documentation can be found: -* [API Overview](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/namespacedirect__bt.html#details) (C++) -and the [same in the Java API](https://jausoft.com/projects/direct_bt/build/documentation/java/html/namespaceorg_1_1direct__bt.html#details). - -* [C++ API Doc](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/index.html). +* [C++ API Doc](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/namespacedirect__bt.html#details): + * [General User Level API](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/group__DBTUserAPI.html) + * [Central-Client User Level API](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/group__DBTUserClientAPI.html) + * [Peripheral-Server User Level API](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/group__DBTUserServerAPI.html) + * [System Level API](https://jausoft.com/projects/direct_bt/build/documentation/cpp/html/group__DBTSystemAPI.html) -* [Java API Doc](https://jausoft.com/projects/direct_bt/build/documentation/java/html/index.html). +* [Java API Doc](https://jausoft.com/projects/direct_bt/build/documentation/java/html/namespaceorg_1_1direct__bt.html#details) * [jaulib Standalone C++ API Doc](https://jausoft.com/projects/jaulib/build/documentation/cpp/html/index.html). diff --git a/api/direct_bt/ATTPDUTypes.hpp b/api/direct_bt/ATTPDUTypes.hpp index 64bcc680..12650f8d 100644 --- a/api/direct_bt/ATTPDUTypes.hpp +++ b/api/direct_bt/ATTPDUTypes.hpp @@ -63,10 +63,16 @@ * - Using *BlueZ Kernel Manager Control Channel* via MgmtMsg communication. * - *HCI Handling* via HCIHandler using HCIPacket implementing connect/disconnect w/ tracking, device discovery, etc * - *ATT PDU* AttPDUMsg via L2CAP for low level packet communication - * - *GATT Support* via BTGattHandler using AttPDUMsg over L2CAPComm, providing - * - BTGattService - * - BTGattChar - * - BTGattDesc + * - *GATT Support* via BTGattHandler using AttPDUMsg over L2CAPComm, ... + * - Central-Client Functionality, i.e. ::GATTRole::Client or BTAdapter in ::BTRole::Master: + * - BTGattService + * - BTGattChar + * - BTGattDesc + * - Peripheral-Server Functionality, i.e. ::GATTRole::Server or BTAdapter in ::BTRole::Slave: + * - DBGattServer + * - DBGattService + * - DBGattChar + * - DBGattDesc * - *SMP PDU* SMPPDUMsg via L2CAP for Security Manager Protocol (SMP) communication * - *SMP Support* via SMPHandler using SMPPDUMsg over L2CAPComm, providing (Not yet supported by Linux/BlueZ) * - LE Secure Connections @@ -87,7 +93,8 @@ * * ## Direct-BT User Hierarchy * - * From a user perspective the following hierarchy is provided + * From a user central-client perspective the following hierarchy is provided, + * i.e. ::GATTRole::Client or BTAdapter in ::BTRole::Master: * - BTManager has zero or more * - BTAdapter has zero or more * - BTDevice has zero or more @@ -95,6 +102,15 @@ * - BTGattChar has zero or more * - BTGattDesc * + * From a user peripheral-server perspective the following hierarchy is provided, + * i.e. ::GATTRole::Server or BTAdapter in ::BTRole::Slave: + * - BTManager has zero or more + * - BTAdapter has zero or one + * - DBGattServer has zero or more + * - DBGattService has zero or more + * - DBGattChar has zero or more + * - DBGattDesc + * * - - - - - - - - - - - - - - - * * ## Direct-BT Object Lifecycle @@ -108,23 +124,32 @@ * - BTGattChar ownership by BTGattService, with weak BTGattService back-reference * - BTGattDesc ownership by BTGattChar, with weak BTGattChar back-reference * + * User application instantiates for peripheral-server functionality: + * - DBGattServer ownership by user + * - DBGattService ownership by user + * - DBGattChar ownership by user + * - DBGattDesc + * * - - - - - - - - - - - - - - - * * ## Direct-BT Mapped Names C++ vs Java * * Mapped names from C++ implementation to Java implementation and to Java interface: * - * C++ <br> `direct_bt` | Java Implementation <br> `jau.direct_bt` | Java Interface <br> `org.direct_bt` | - * :----------------| :---------------------| :--------------------| - * BTManager | DBTManager | BTManager | - * BTAdapter | DBTAdapter | BTAdapter | - * BTDevice | DBTDevice | BTDevice | - * BTGattService | DBTGattService | BTGattService | - * BTGattChar | DBTGattChar | BTGattChar | - * BTGattDesc | DBTGattDesc | BTGattDesc | - * AdapterStatusListener | | AdapterStatusListener | - * BTGattCharListener | | BTGattCharListener | - * ChangedAdapterSetFunc() | | BTManager::ChangedAdapterSetListener | + * C++ <br> `direct_bt` | Java Implementation <br> `jau.direct_bt` | Java Interface <br> `org.direct_bt` | + * :-----------------------| :-----------------| :------------------------------------| + * BTManager | DBTManager | BTManager | + * BTAdapter | DBTAdapter | BTAdapter | + * BTDevice | DBTDevice | BTDevice | + * BTGattService | DBTGattService | BTGattService | + * BTGattChar | DBTGattChar | BTGattChar | + * BTGattDesc | DBTGattDesc | BTGattDesc | + * DBGattService | | DBGattService | + * DBGattChar | | DBGattChar | + * DBGattDesc | | DBGattDesc | + * AdapterStatusListener | | AdapterStatusListener | + * BTGattCharListener | | BTGattCharListener | + * ChangedAdapterSetFunc() | | BTManager::ChangedAdapterSetListener | * * - - - - - - - - - - - - - - - * @@ -170,6 +195,12 @@ */ namespace direct_bt { + /** @defgroup DBTSystemAPI Direct-BT System Level API + * System level Direct-BT API types and functionality, [see Direct-BT Overview](namespacedirect__bt.html#details). + * + * @{ + */ + class AttException : public jau::RuntimeException { protected: AttException(std::string const type, std::string const m, const char* file, int line) noexcept @@ -2056,6 +2087,8 @@ namespace direct_bt { }; + /**@}*/ + } // namespace direct_bt /** \example dbt_scanner10.cpp diff --git a/api/direct_bt/BTAdapter.hpp b/api/direct_bt/BTAdapter.hpp index 7a6fe835..84852b8f 100644 --- a/api/direct_bt/BTAdapter.hpp +++ b/api/direct_bt/BTAdapter.hpp @@ -49,6 +49,12 @@ namespace direct_bt { + /** @defgroup DBTUserAPI Direct-BT General User Level API + * General User level Direct-BT API types and functionality, [see Direct-BT Overview](namespacedirect__bt.html#details). + * + * @{ + */ + class BTAdapter; // forward class BTManager; // forward typedef std::shared_ptr<BTManager> BTManagerRef; @@ -311,6 +317,7 @@ namespace direct_bt { * @see @ref BTDeviceRoles * @see @ref BTGattHandlerRoles * @see [Bluetooth Specification](https://www.bluetooth.com/specifications/bluetooth-core-specification/) + * @see [Direct-BT Overview](namespacedirect__bt.html#details) */ class BTAdapter : public BTObject { @@ -1321,6 +1328,8 @@ namespace direct_bt { typedef std::shared_ptr<BTAdapter> BTAdapterRef; + /**@}*/ + } // namespace direct_bt #endif /* BT_ADAPTER_HPP_ */ diff --git a/api/direct_bt/BTAddress.hpp b/api/direct_bt/BTAddress.hpp index a99a7f88..6fa7b0b2 100644 --- a/api/direct_bt/BTAddress.hpp +++ b/api/direct_bt/BTAddress.hpp @@ -40,6 +40,11 @@ using jau::EUI48Sub; namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + /** * BT Core Spec v5.2: Vol 3, Part C Generic Access Profile (GAP): 15.1.1.1 Public Bluetooth address * <pre> @@ -320,16 +325,26 @@ namespace direct_bt { inline std::string to_string(const BDAddressAndType& a) noexcept { return a.toString(); } + /**@}*/ + } // namespace direct_bt // injecting specialization of std::hash to namespace std of our types above namespace std { + /** \addtogroup DBTUserAPI + * + * @{ + */ + template<> struct hash<direct_bt::BDAddressAndType> { std::size_t operator()(direct_bt::BDAddressAndType const& a) const noexcept { return a.hash_code(); } }; + + /**@}*/ + } #endif /* BT_ADDRESS_HPP_ */ diff --git a/api/direct_bt/BTDevice.hpp b/api/direct_bt/BTDevice.hpp index 56333965..eeb421fc 100644 --- a/api/direct_bt/BTDevice.hpp +++ b/api/direct_bt/BTDevice.hpp @@ -51,6 +51,11 @@ namespace direct_bt { // ************************************************* // ************************************************* + /** \addtogroup DBTUserAPI + * + * @{ + */ + class BTAdapter; // forward class AdapterStatusListener; // forward typedef std::shared_ptr<AdapterStatusListener> AdapterStatusListenerRef; // forward @@ -70,6 +75,7 @@ namespace direct_bt { * @see [BTAdapter roles](@ref BTAdapterRoles). * @see [BTGattHandler roles](@ref BTGattHandlerRoles). * @see [Bluetooth Specification](https://www.bluetooth.com/specifications/bluetooth-core-specification/) + * @see [Direct-BT Overview](namespacedirect__bt.html#details) */ class BTDevice : public BTObject { @@ -1212,6 +1218,8 @@ namespace direct_bt { typedef std::shared_ptr<BTDevice> BTDeviceRef; + /**@}*/ + } // namespace direct_bt #endif /* BT_DEVICE_HPP_ */ diff --git a/api/direct_bt/BTDeviceRegistry.hpp b/api/direct_bt/BTDeviceRegistry.hpp index 173ba8e7..34bc07f4 100644 --- a/api/direct_bt/BTDeviceRegistry.hpp +++ b/api/direct_bt/BTDeviceRegistry.hpp @@ -33,6 +33,11 @@ namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + /** * Application toolkit providing BT device registration of processed and awaited devices. * The latter on a pattern matching basis, i.e. EUI48Sub or name-sub. @@ -218,16 +223,24 @@ namespace direct_bt { } } + /**@}*/ + } // namespace direct_bt // injecting specialization of std::hash to namespace std of our types above namespace std { + /** \addtogroup DBTUserAPI + * + * @{ + */ template<> struct hash<direct_bt::BTDeviceRegistry::DeviceID> { std::size_t operator()(direct_bt::BTDeviceRegistry::DeviceID const& a) const noexcept { return a.hash_code(); } }; + + /**@}*/ } #endif /* DBT_DEV_ACCOUNTING_HPP_ */ diff --git a/api/direct_bt/BTGattChar.hpp b/api/direct_bt/BTGattChar.hpp index 43727dfb..f157889c 100644 --- a/api/direct_bt/BTGattChar.hpp +++ b/api/direct_bt/BTGattChar.hpp @@ -68,12 +68,22 @@ namespace direct_bt { class BTGattCharListener; // forward typedef std::shared_ptr<BTGattCharListener> BTGattCharListenerRef; + /** @defgroup DBTUserClientAPI Direct-BT Central-Client User Level API + * User level Direct-BT API types and functionality addressing the central-client ::GATTRole::Client perspective, + * [see Direct-BT Overview](namespacedirect__bt.html#details). + * + * @{ + */ + /** * Representing a Gatt Characteristic object from the ::GATTRole::Client perspective. * - * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition + * A list of shared BTGattChar instances is available from BTGattService + * via BTGattService::characteristicList. * - * handle -> CDAV value + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * + * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition * * BT Core Spec v5.2: Vol 3, Part G GATT: 4.6.1 Discover All Characteristics of a Service * @@ -493,6 +503,8 @@ namespace direct_bt { }; typedef std::shared_ptr<BTGattCharListener> BTGattCharListenerRef; + /**@}*/ + } // namespace direct_bt #endif /* BT_GATT_CHARACTERISTIC_HPP_ */ diff --git a/api/direct_bt/BTGattCmd.hpp b/api/direct_bt/BTGattCmd.hpp index 275968df..cd96963c 100644 --- a/api/direct_bt/BTGattCmd.hpp +++ b/api/direct_bt/BTGattCmd.hpp @@ -40,6 +40,11 @@ namespace direct_bt { + /** \addtogroup DBTUserClientAPI + * + * @{ + */ + /** * Class maps a GATT command and optionally its asynchronous response * to a synchronous atomic operation. @@ -282,6 +287,9 @@ namespace direct_bt { std::string toString() const noexcept; }; + + /**@}*/ + } #endif // BT_GATT_CMD_HPP_ diff --git a/api/direct_bt/BTGattDesc.hpp b/api/direct_bt/BTGattDesc.hpp index c1695445..17234479 100644 --- a/api/direct_bt/BTGattDesc.hpp +++ b/api/direct_bt/BTGattDesc.hpp @@ -56,9 +56,19 @@ namespace direct_bt { class BTGattChar; // forward typedef std::shared_ptr<BTGattChar> BTGattCharRef; + /** \addtogroup DBTUserClientAPI + * + * @{ + */ + /** * Representing a Gatt Characteristic Descriptor object from the ::GATTRole::Client perspective. * + * A list of shared BTGattDesc instances is available from BTGattChar + * via BTGattChar::descriptorList. + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.3 Characteristic Descriptor */ class BTGattDesc : public BTObject { @@ -185,6 +195,8 @@ namespace direct_bt { inline bool operator!=(const BTGattDesc& lhs, const BTGattDesc& rhs) noexcept { return !(lhs == rhs); } + /**@}*/ + } // namespace direct_bt #endif /* BT_GATT_DESCRIPTOR_HPP_ */ diff --git a/api/direct_bt/BTGattHandler.hpp b/api/direct_bt/BTGattHandler.hpp index 5f20d56c..751c6617 100644 --- a/api/direct_bt/BTGattHandler.hpp +++ b/api/direct_bt/BTGattHandler.hpp @@ -61,6 +61,11 @@ namespace direct_bt { class BTDevice; // forward typedef std::shared_ptr<BTDevice> BTDeviceRef; + /** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * GATT Singleton runtime environment properties * <p> @@ -1024,6 +1029,8 @@ namespace direct_bt { }; typedef std::shared_ptr<BTGattHandler> BTGattHandlerRef; + /**@}*/ + } // namespace direct_bt #endif /* BT_GATT_HANDLER_HPP_ */ diff --git a/api/direct_bt/BTGattService.hpp b/api/direct_bt/BTGattService.hpp index f4e6006b..f38b0328 100644 --- a/api/direct_bt/BTGattService.hpp +++ b/api/direct_bt/BTGattService.hpp @@ -62,9 +62,19 @@ namespace direct_bt { class BTDevice; // forward typedef std::shared_ptr<BTDevice> BTDeviceRef; + /** \addtogroup DBTUserClientAPI + * + * @{ + */ + /** * Representing a Gatt Service object from the ::GATTRole::Client perspective. * + * A list of shared BTGattService instances can be retrieved from BTDevice + * after successful connection and optional pairing via BTDevice::getGattServices(). + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.1 Service Definition * * Includes a complete [Primary] Service Declaration @@ -148,6 +158,8 @@ namespace direct_bt { inline bool operator!=(const BTGattService& lhs, const BTGattService& rhs) noexcept { return !(lhs == rhs); } + /**@}*/ + } // namespace direct_bt #endif /* BT_GATT_SERVICE_HPP_ */ diff --git a/api/direct_bt/BTIoctl.hpp b/api/direct_bt/BTIoctl.hpp index 27f9e196..80cce891 100644 --- a/api/direct_bt/BTIoctl.hpp +++ b/api/direct_bt/BTIoctl.hpp @@ -87,6 +87,11 @@ extern "C" { #include <netinet/in.h> // Already exported named by OS } /* extern "C" */ +/** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * Information from include/net/bluetooth/bluetooth.h */ @@ -196,4 +201,6 @@ enum { BT_CLOSED }; +/**@}*/ + #endif /* BT_IOCTL_HPP_ */ diff --git a/api/direct_bt/BTManager.hpp b/api/direct_bt/BTManager.hpp index 73cab26d..a58e6c41 100644 --- a/api/direct_bt/BTManager.hpp +++ b/api/direct_bt/BTManager.hpp @@ -50,6 +50,11 @@ namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + class BTManager; // forward /** @@ -156,6 +161,7 @@ namespace direct_bt { * @see ChangedAdapterSetCallback * @see BTManager::addChangedAdapterSetCallback() * @see BTManager::removeChangedAdapterSetCallback() + * @see [Direct-BT Overview](namespacedirect__bt.html#details) */ typedef bool (*ChangedAdapterSetFunc)(bool added, std::shared_ptr<BTAdapter>& adapter); @@ -182,18 +188,19 @@ namespace direct_bt { * @see ChangedAdapterSetFunc * @see BTManager::addChangedAdapterSetCallback() * @see BTManager::removeChangedAdapterSetCallback() + * @see [Direct-BT Overview](namespacedirect__bt.html#details) */ typedef jau::FunctionDef<bool, bool, std::shared_ptr<BTAdapter>&> ChangedAdapterSetCallback; typedef jau::cow_darray<ChangedAdapterSetCallback> ChangedAdapterSetCallbackList; /** - * A thread safe singleton handler of the Linux Kernel's BlueZ manager control channel. - * <p> + * A thread safe singleton handler of the BTAdapter manager, e.g. Linux Kernel's BlueZ manager control channel. + * * Implementation utilizes a lock free ringbuffer receiving data within its separate thread. - * </p> - * <p> + * * Controlling Environment variables, see {@link MgmtEnv}. - * </p> + * + * @see [Direct-BT Overview](namespacedirect__bt.html#details) */ class BTManager : public jau::JavaUplink { public: @@ -574,6 +581,8 @@ namespace direct_bt { }; typedef std::shared_ptr<BTManager> BTManagerRef; + /**@}*/ + } // namespace direct_bt #endif /* DBT_MANAGER_HPP_ */ diff --git a/api/direct_bt/BTSecurityRegistry.hpp b/api/direct_bt/BTSecurityRegistry.hpp index a6c89765..0069b4fa 100644 --- a/api/direct_bt/BTSecurityRegistry.hpp +++ b/api/direct_bt/BTSecurityRegistry.hpp @@ -33,12 +33,22 @@ namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + /** * Application toolkit providing BT security setup and its device association * on a pattern matching basis, i.e. EUI48Sub or name-sub. */ namespace BTSecurityRegistry { + /** \addtogroup DBTUserAPI + * + * @{ + */ + struct Entry { static constexpr int NO_PASSKEY = -1; @@ -229,8 +239,12 @@ namespace direct_bt { std::string allToString() noexcept; + /**@}*/ + } // namespace BTSecurityRegistry + /**@}*/ + } // namespace direct_bt #endif /* DBT_SEC_SETTINGS_HPP_ */ diff --git a/api/direct_bt/BTTypes0.hpp b/api/direct_bt/BTTypes0.hpp index a19ad2d4..4df7ba65 100644 --- a/api/direct_bt/BTTypes0.hpp +++ b/api/direct_bt/BTTypes0.hpp @@ -44,6 +44,11 @@ namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + class BTException : public jau::RuntimeException { public: BTException(std::string const m, const char* file, int line) noexcept @@ -1158,6 +1163,8 @@ namespace direct_bt { // ************************************************* // ************************************************* + /**@}*/ + } // namespace direct_bt #endif /* BT_TYPES0_HPP_ */ diff --git a/api/direct_bt/BTTypes1.hpp b/api/direct_bt/BTTypes1.hpp index 62db76ef..dd005682 100644 --- a/api/direct_bt/BTTypes1.hpp +++ b/api/direct_bt/BTTypes1.hpp @@ -41,6 +41,11 @@ namespace direct_bt { class BTAdapter; // forward class BTDevice; // forward + /** \addtogroup DBTUserAPI + * + * @{ + */ + class BTObject : public jau::JavaUplink { protected: @@ -292,6 +297,8 @@ namespace direct_bt { }; inline std::string to_string(const AdapterInfo& a) noexcept { return a.toString(); } + /**@}*/ + } // namespace direct_bt #endif /* BT_TYPES1_HPP_ */ diff --git a/api/direct_bt/DBGattServer.hpp b/api/direct_bt/DBGattServer.hpp index 32a3e347..d20f1ccd 100644 --- a/api/direct_bt/DBGattServer.hpp +++ b/api/direct_bt/DBGattServer.hpp @@ -69,11 +69,23 @@ namespace direct_bt { class BTDevice; // forward typedef std::shared_ptr<BTDevice> BTDeviceRef; + /** @defgroup DBTUserServerAPI Direct-BT Peripheral-Server User Level API + * User level Direct-BT API types and functionality addressing the peripheral-server ::GATTRole::Server perspective, + * , [see Direct-BT Overview](namespacedirect__bt.html#details). + * + * @{ + */ + class DBGattService; // fwd /** * Representing a Gatt Characteristic Descriptor object from the ::GATTRole::Server perspective. * + * A list of shared DBGattDesc instances are passed at DBGattChar construction + * and are retrievable via DBGattChar::getDescriptors(). + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.3 Characteristic Descriptor * * @since 2.4.0 @@ -230,6 +242,11 @@ namespace direct_bt { /** * Representing a Gatt Characteristic object from the ::GATTRole::Server perspective. * + * A list of shared DBGattChar instances are passed at DBGattService construction + * and are retrievable via DBGattService::getCharacteristics(). + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition * * handle -> CDAV value @@ -484,6 +501,11 @@ namespace direct_bt { /** * Representing a Gatt Service object from the ::GATTRole::Server perspective. * + * A list of shared DBGattService instances are passed at DBGattServer construction + * and are retrievable via DBGattServer::getServices(). + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.1 Service Definition * * Includes a complete [Primary] Service Declaration @@ -620,8 +642,12 @@ namespace direct_bt { * Representing a complete list of Gatt Service objects from the ::GATTRole::Server perspective, * i.e. the Gatt Server database. * - * One instance shall be attached to BTAdapter and hence BTGattHandler - * when operating in Gatt Server mode, i.e. ::GATTRole::Server. + * One instance shall be attached to BTAdapter when advertising via BTAdapter::startAdvertising(), + * changing its operating mode to Gatt Server mode, i.e. ::GATTRole::Server. + * + * The instance can also be retrieved via BTAdapter::getGATTServerData(). + * + * See [Direct-BT Overview](namespacedirect__bt.html#details). * * This class is not thread safe and only intended to be prepared * by the user at startup and processed by the Gatt Server facility. @@ -968,6 +994,8 @@ namespace direct_bt { std::string to_string(const DBGattServer::Mode m) noexcept; + /**@}*/ + } // namespace direct_bt #endif /* DB_GATT_SERVER_HPP_ */ diff --git a/api/direct_bt/DBTConst.hpp b/api/direct_bt/DBTConst.hpp index 0dbbe5f8..81454347 100644 --- a/api/direct_bt/DBTConst.hpp +++ b/api/direct_bt/DBTConst.hpp @@ -35,6 +35,11 @@ namespace direct_bt { using namespace jau::fractions_i64_literals; using namespace jau::int_literals; + /** \addtogroup DBTSystemAPI + * + * @{ + */ + #ifdef __linux__ /** @@ -82,6 +87,8 @@ namespace direct_bt { */ inline constexpr const jau::nsize_t MAX_BACKGROUND_DISCOVERY_RETRY = 3; + /**@}*/ + } // namespace direct_bt #endif /* DBT_CONST_HPP_ */ diff --git a/api/direct_bt/GattNumbers.hpp b/api/direct_bt/GattNumbers.hpp index 48f8e4a0..8bb073ef 100644 --- a/api/direct_bt/GattNumbers.hpp +++ b/api/direct_bt/GattNumbers.hpp @@ -49,6 +49,11 @@ */ namespace direct_bt { +/** \addtogroup DBTUserAPI + * + * @{ + */ + /** * Following UUID16 GATT profile attribute types are listed under: * BT Core Spec v5.2: Vol 3, Part G GATT: 3.4 Summary of GATT Profile Attribute Types @@ -414,26 +419,7 @@ class GattTemperatureMeasurement { std::string toString() const noexcept; }; - -/* Application error */ - -#define ATT_ECODE_IO 0x80 -#define ATT_ECODE_TIMEOUT 0x81 -#define ATT_ECODE_ABORTED 0x82 - -#define ATT_MAX_VALUE_LEN 512 -#define ATT_DEFAULT_L2CAP_MTU 48 -#define ATT_DEFAULT_LE_MTU 23 - -/* Flags for Execute Write Request Operation */ - -#define ATT_CANCEL_ALL_PREP_WRITES 0x00 -#define ATT_WRITE_ALL_PREP_WRITES 0x01 - -/* Find Information Response Formats */ - -#define ATT_FIND_INFO_RESP_FMT_16BIT 0x01 -#define ATT_FIND_INFO_RESP_FMT_128BIT 0x02 +/**@}*/ } // namespace direct_bt diff --git a/api/direct_bt/HCIComm.hpp b/api/direct_bt/HCIComm.hpp index 25138f24..b226c73f 100644 --- a/api/direct_bt/HCIComm.hpp +++ b/api/direct_bt/HCIComm.hpp @@ -46,6 +46,11 @@ */ namespace direct_bt { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * Read/Write HCI communication channel. */ @@ -169,6 +174,8 @@ namespace direct_bt { } }; + /**@}*/ + } // namespace direct_bt #endif /* HCI_COMM_HPP_ */ diff --git a/api/direct_bt/HCIHandler.hpp b/api/direct_bt/HCIHandler.hpp index c6a39ff1..637215d8 100644 --- a/api/direct_bt/HCIHandler.hpp +++ b/api/direct_bt/HCIHandler.hpp @@ -56,6 +56,11 @@ */ namespace direct_bt { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + class HCIHandler; // forward /** @@ -894,6 +899,8 @@ namespace direct_bt { void sendMgmtEvent(const MgmtEvent& event) noexcept; }; + /**@}*/ + } // namespace direct_bt #if 0 @@ -901,11 +908,19 @@ namespace direct_bt { // Would need to make direct_bt::HCIHandler::HCIConnection accessible namespace std { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + template<> struct hash<direct_bt::HCIHandler::HCIConnection> { std::size_t operator()(direct_bt::HCIHandler::HCIConnection const& a) const noexcept { return a.hash_code(); } }; + + /**@}*/ + } #endif diff --git a/api/direct_bt/HCIIoctl.hpp b/api/direct_bt/HCIIoctl.hpp index 1b4044f0..e3d285a7 100644 --- a/api/direct_bt/HCIIoctl.hpp +++ b/api/direct_bt/HCIIoctl.hpp @@ -85,6 +85,12 @@ extern "C" { #include <sys/socket.h> } /* extern "C" */ + +/** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * Missing information ??? */ @@ -2490,5 +2496,7 @@ struct hci_inquiry_req { }; #define IREQ_CACHE_FLUSH 0x0001 +/**@}*/ + #endif /* HCI_IOCTL_HPP_ */ diff --git a/api/direct_bt/HCITypes.hpp b/api/direct_bt/HCITypes.hpp index 3929b00a..b7f8779f 100644 --- a/api/direct_bt/HCITypes.hpp +++ b/api/direct_bt/HCITypes.hpp @@ -52,6 +52,11 @@ */ namespace direct_bt { + /** \addtogroup DBTUserAPI + * + * @{ + */ + class HCIException : public jau::RuntimeException { protected: HCIException(std::string const type, std::string const m, const char* file, int line) noexcept @@ -246,6 +251,13 @@ namespace direct_bt { return std::error_code( number(e), HCIStatusCodeCategory::get() ); } + /**@}*/ + + /** \addtogroup DBTSystemAPI + * + * @{ + */ + enum class HCIConstSizeT : jau::nsize_t { /** HCIPacketType::COMMAND header size including HCIPacketType */ COMMAND_HDR_SIZE = 1+3, @@ -1468,12 +1480,21 @@ namespace direct_bt { std::string toString() noexcept; }; + /**@}*/ + } // namespace direct_bt namespace std { + /** \addtogroup DBTUserAPI + * + * @{ + */ + template <> struct is_error_code_enum<direct_bt::HCIStatusCode> : true_type {}; + + /**@}*/ } #endif /* HCI_TYPES_HPP_ */ diff --git a/api/direct_bt/L2CAPComm.hpp b/api/direct_bt/L2CAPComm.hpp index 694eab2b..f47f32cd 100644 --- a/api/direct_bt/L2CAPComm.hpp +++ b/api/direct_bt/L2CAPComm.hpp @@ -51,6 +51,11 @@ namespace direct_bt { class BTDevice; // forward + /** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * L2CAP Singleton runtime environment properties * <p> @@ -322,6 +327,8 @@ namespace direct_bt { std::string toString() const noexcept override; }; + /**@}*/ + } // namespace direct_bt #endif /* L2CAP_COMM_HPP_ */ diff --git a/api/direct_bt/L2CAPIoctl.hpp b/api/direct_bt/L2CAPIoctl.hpp index 442dd5b7..a4dfa5d9 100644 --- a/api/direct_bt/L2CAPIoctl.hpp +++ b/api/direct_bt/L2CAPIoctl.hpp @@ -93,6 +93,11 @@ extern "C" { #include <sys/socket.h> } /* extern "C" */ +/** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * Information from include/net/bluetooth/l2cap.h * Mixed with own comments. @@ -546,4 +551,6 @@ struct l2cap_le_credits { __le16 credits; } __packed; +/**@}*/ + #endif /* L2CAP_IOCTL_HPP_ */ diff --git a/api/direct_bt/MgmtTypes.hpp b/api/direct_bt/MgmtTypes.hpp index 2c1a4d9b..35870c10 100644 --- a/api/direct_bt/MgmtTypes.hpp +++ b/api/direct_bt/MgmtTypes.hpp @@ -47,6 +47,11 @@ namespace direct_bt { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + class MgmtException : public jau::RuntimeException { protected: MgmtException(std::string const type, std::string const m, const char* file, int line) noexcept @@ -2812,6 +2817,8 @@ namespace direct_bt { typedef jau::cow_darray<MgmtAdapterEventCallback> MgmtAdapterEventCallbackList; + /**@}*/ + } // namespace direct_bt #endif /* MGMT_TYPES_HPP_ */ diff --git a/api/direct_bt/SMPHandler.hpp b/api/direct_bt/SMPHandler.hpp index 8f5c6cf9..610fd7c8 100644 --- a/api/direct_bt/SMPHandler.hpp +++ b/api/direct_bt/SMPHandler.hpp @@ -78,6 +78,11 @@ */ namespace direct_bt { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + /** * SMP Singleton runtime environment properties * <p> @@ -242,6 +247,8 @@ namespace direct_bt { int removeSMPSecurityReqCallback(const SMPSecurityReqCallback & l); }; + /**@}*/ + } // namespace direct_bt #endif /* SMP_HANDLER_HPP_ */ diff --git a/api/direct_bt/SMPKeyBin.hpp b/api/direct_bt/SMPKeyBin.hpp index 27f4b51f..ed679396 100644 --- a/api/direct_bt/SMPKeyBin.hpp +++ b/api/direct_bt/SMPKeyBin.hpp @@ -29,8 +29,6 @@ #include <string> #include <memory> #include <cstdint> -#include <fstream> -#include <iostream> #include "SMPTypes.hpp" #include "HCITypes.hpp" @@ -40,6 +38,11 @@ namespace direct_bt { class BTDevice; // forward class BTAdapter; // forward +/** \addtogroup DBTUserAPI + * + * @{ + */ + /** * Storage for SMP keys including required connection parameter per local adapter and remote device. * @@ -394,6 +397,8 @@ class SMPKeyBin { bool read(const std::string& fname); }; +/**@}*/ + } // namespace direct_bt #endif /* SMPKEYBIN_HPP_ */ diff --git a/api/direct_bt/SMPTypes.hpp b/api/direct_bt/SMPTypes.hpp index 76b7c9cc..bb0a3a54 100644 --- a/api/direct_bt/SMPTypes.hpp +++ b/api/direct_bt/SMPTypes.hpp @@ -49,6 +49,11 @@ */ namespace direct_bt { + /** \addtogroup DBTSystemAPI + * + * @{ + */ + class SMPException : public jau::RuntimeException { protected: SMPException(std::string const type, std::string const m, const char* file, int line) noexcept @@ -2006,6 +2011,8 @@ namespace direct_bt { } }; + /**@}*/ + } // namespace direct_bt #endif /* SMP_TYPES_HPP_ */ diff --git a/api/direct_bt/version.h b/api/direct_bt/version.h index 9989cf7d..61e7049c 100644 --- a/api/direct_bt/version.h +++ b/api/direct_bt/version.h @@ -26,8 +26,15 @@ #ifndef DIRECT_BT_VERSION_H_ #define DIRECT_BT_VERSION_H_ +/** \addtogroup DBTUserAPI + * + * @{ + */ + extern const char* DIRECT_BT_VERSION; extern const char* DIRECT_BT_VERSION_SHORT; extern const char* DIRECT_BT_VERSION_API; +/**@}*/ + #endif /* DIRECT_BT_VERSION_H_ */ diff --git a/java/org/direct_bt/AdapterSettings.java b/java/org/direct_bt/AdapterSettings.java index a14e0b0b..47deb10f 100644 --- a/java/org/direct_bt/AdapterSettings.java +++ b/java/org/direct_bt/AdapterSettings.java @@ -20,10 +20,16 @@ * - Using *BlueZ Kernel Manager Control Channel* via MgmtMsg communication. * - *HCI Handling* via HCIHandler using HCIPacket implementing connect/disconnect w/ tracking, device discovery, etc * - *ATT PDU* AttPDUMsg via L2CAP for low level packet communication - * - *GATT Support* via BTGattHandler using AttPDUMsg over L2CAPComm, providing - * - BTGattService - * - BTGattChar - * - BTGattDesc + * - *GATT Support* via BTGattHandler using AttPDUMsg over L2CAPComm, ... + * - Central-Client Functionality, i.e. GATT client role or BTAdapter in {@link BTRole#Master}: + * - BTGattService + * - BTGattChar + * - BTGattDesc + * - Peripheral-Server Functionality, i.e. GATT server role or BTAdapter in {@link BTRole#Slave}: + * - DBGattServer + * - DBGattService + * - DBGattChar + * - DBGattDesc * - *SMP PDU* SMPPDUMsg via L2CAP for Security Manager Protocol (SMP) communication * - *SMP Support* via SMPHandler using SMPPDUMsg over L2CAPComm, providing (Not yet supported by Linux/BlueZ) * - LE Secure Connections @@ -44,7 +50,8 @@ * * ## Direct-BT User Hierarchy * - * From a user perspective the following hierarchy is provided + * From a user central-client perspective the following hierarchy is provided, + * i.e. GATT client role or BTAdapter in {@link BTRole#Master}: * - BTManager has zero or more * - BTAdapter has zero or more * - BTDevice has zero or more @@ -52,6 +59,15 @@ * - BTGattChar has zero or more * - BTGattDesc * + * From a user peripheral-server perspective the following hierarchy is provided, + * i.e. GATT server role or BTAdapter in {@link BTRole#Slave}: + * - BTManager has zero or more + * - BTAdapter has zero or one + * - DBGattServer has zero or more + * - DBGattService has zero or more + * - DBGattChar has zero or more + * - DBGattDesc + * * - - - - - - - - - - - - - - - * * ## Direct-BT Object Lifecycle @@ -65,6 +81,12 @@ * - BTGattChar ownership by BTGattService, with weak BTGattService back-reference * - BTGattDesc ownership by BTGattChar, with weak BTGattChar back-reference * + * User application instantiates for peripheral-server functionality: + * - DBGattServer ownership by user + * - DBGattService ownership by user + * - DBGattChar ownership by user + * - DBGattDesc + * * - - - - - - - - - - - - - - - * * ## Direct-BT Mapped Names C++ vs Java @@ -72,16 +94,19 @@ * Mapped names from C++ implementation to Java implementation and to Java interface: * * C++ <br> `direct_bt` | Java Implementation <br> `jau.direct_bt` | Java Interface <br> `org.direct_bt` | - * :----------------| :---------------------| :--------------------| - * BTManager | DBTManager | BTManager | - * BTAdapter | DBTAdapter | BTAdapter | - * BTDevice | DBTDevice | BTDevice | - * BTGattService | DBTGattService | BTGattService | - * BTGattChar | DBTGattChar | BTGattChar | - * BTGattDesc | DBTGattDesc | BTGattDesc | - * AdapterStatusListener | | AdapterStatusListener | - * BTGattCharListener | | BTGattCharListener | - * ChangedAdapterSetFunc() | | BTManager::ChangedAdapterSetListener | + * :-----------------------| :-----------------| :------------------------------------| + * BTManager | DBTManager | BTManager | + * BTAdapter | DBTAdapter | BTAdapter | + * BTDevice | DBTDevice | BTDevice | + * BTGattService | DBTGattService | BTGattService | + * BTGattChar | DBTGattChar | BTGattChar | + * BTGattDesc | DBTGattDesc | BTGattDesc | + * DBGattService | | DBGattService | + * DBGattChar | | DBGattChar | + * DBGattDesc | | DBGattDesc | + * AdapterStatusListener | | AdapterStatusListener | + * BTGattCharListener | | BTGattCharListener | + * ChangedAdapterSetFunc() | | BTManager::ChangedAdapterSetListener | * * - - - - - - - - - - - - - - - * diff --git a/java/org/direct_bt/BTAdapter.java b/java/org/direct_bt/BTAdapter.java index 1a0c9732..ee5f3efa 100644 --- a/java/org/direct_bt/BTAdapter.java +++ b/java/org/direct_bt/BTAdapter.java @@ -42,6 +42,7 @@ import java.util.List; * @see BTDevice * @see [BTDevice roles](@ref BTDeviceRoles). * @see [Bluetooth Specification](https://www.bluetooth.com/specifications/bluetooth-core-specification/) + * @see [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details) */ public interface BTAdapter extends BTObject { diff --git a/java/org/direct_bt/BTDevice.java b/java/org/direct_bt/BTDevice.java index 57187d6b..253bdd3b 100644 --- a/java/org/direct_bt/BTDevice.java +++ b/java/org/direct_bt/BTDevice.java @@ -42,6 +42,7 @@ import java.util.Map; * @see BTAdapter * @see [BTAdapter roles](@ref BTAdapterRoles). * @see [Bluetooth Specification](https://www.bluetooth.com/specifications/bluetooth-core-specification/) + * @see [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details) */ public interface BTDevice extends BTObject { diff --git a/java/org/direct_bt/BTGattChar.java b/java/org/direct_bt/BTGattChar.java index bb185da7..11063873 100644 --- a/java/org/direct_bt/BTGattChar.java +++ b/java/org/direct_bt/BTGattChar.java @@ -30,9 +30,12 @@ import java.util.List; /** * Representing a Gatt Characteristic object from the GATT client perspective. * - * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition + * A list of shared BTGattChar instances is available from BTGattService + * via BTGattService::getChars(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). * - * handle -> CDAV value + * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition * * BT Core Spec v5.2: Vol 3, Part G GATT: 4.6.1 Discover All Characteristics of a Service * diff --git a/java/org/direct_bt/BTGattDesc.java b/java/org/direct_bt/BTGattDesc.java index aaba037b..618be333 100644 --- a/java/org/direct_bt/BTGattDesc.java +++ b/java/org/direct_bt/BTGattDesc.java @@ -28,6 +28,11 @@ package org.direct_bt; /** * Representing a Gatt Characteristic Descriptor object from the GATT client perspective. * + * A list of shared BTGattDesc instances is available from BTGattChar + * via BTGattChar::getDescriptors(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.3 Characteristic Descriptor * * See {@link DBGattDesc.UUID16} for selected standard GATT descriptor numbers in UUID16 format diff --git a/java/org/direct_bt/BTGattService.java b/java/org/direct_bt/BTGattService.java index 592ca9fc..6bc48fd0 100644 --- a/java/org/direct_bt/BTGattService.java +++ b/java/org/direct_bt/BTGattService.java @@ -31,6 +31,11 @@ import java.util.List; /** * Representing a Gatt Service object from the GATT client perspective. * + * A list of shared BTGattService instances can be retrieved from BTDevice + * after successful connection and optional pairing via BTDevice::getGattServices(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.1 Service Definition * * Includes a complete [Primary] Service Declaration diff --git a/java/org/direct_bt/BTManager.java b/java/org/direct_bt/BTManager.java index c3de67bc..e30f7764 100644 --- a/java/org/direct_bt/BTManager.java +++ b/java/org/direct_bt/BTManager.java @@ -27,6 +27,11 @@ package org.direct_bt; import java.util.List; +/** + * A thread safe singleton handler of the BTAdapter manager, e.g. Linux Kernel's BlueZ manager control channel. + * + * @see [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details) + */ public interface BTManager { /** @@ -43,6 +48,7 @@ public interface BTManager * @since 2.0.0 * @see BTManager#addChangedAdapterSetListener(ChangedAdapterSetListener) * @see BTManager#removeChangedAdapterSetListener(ChangedAdapterSetListener) + * @see [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details) */ public static interface ChangedAdapterSetListener { /** diff --git a/java/org/direct_bt/DBGattChar.java b/java/org/direct_bt/DBGattChar.java index 0872ba5e..7638d011 100644 --- a/java/org/direct_bt/DBGattChar.java +++ b/java/org/direct_bt/DBGattChar.java @@ -30,9 +30,12 @@ import java.util.List; /** * Representing a Gatt Characteristic object from the GATT server perspective. * - * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition + * A list of shared DBGattChar instances are passed at DBGattService construction + * and are retrievable via DBGattService::getChars(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). * - * handle -> CDAV value + * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3 Characteristic Definition * * BT Core Spec v5.2: Vol 3, Part G GATT: 4.6.1 Discover All Characteristics of a Service * diff --git a/java/org/direct_bt/DBGattDesc.java b/java/org/direct_bt/DBGattDesc.java index 4a7495ab..81303da6 100644 --- a/java/org/direct_bt/DBGattDesc.java +++ b/java/org/direct_bt/DBGattDesc.java @@ -28,6 +28,11 @@ package org.direct_bt; /** * Representing a Gatt Characteristic Descriptor object from the GATT server perspective. * + * A list of shared DBGattChar instances are passed at DBGattChar construction + * and are retrievable via DBGattChar::getDescriptors(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.3.3 Characteristic Descriptor * * @since 2.4.0 diff --git a/java/org/direct_bt/DBGattServer.java b/java/org/direct_bt/DBGattServer.java index e4001198..59fcb8da 100644 --- a/java/org/direct_bt/DBGattServer.java +++ b/java/org/direct_bt/DBGattServer.java @@ -32,8 +32,12 @@ import java.util.List; * Representing a complete list of Gatt Service objects from the GATT server perspective, * i.e. the Gatt Server database. * - * One instance shall be attached to BTAdapter - * when operating in Gatt Server mode. + * One instance shall be attached to BTAdapter when advertising via BTAdapter::startAdvertising(), + * changing its operating mode to Gatt Server mode. + * + * The instance can also be retrieved via BTAdapter::getGATTServerData(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). * * @since 2.4.0 */ diff --git a/java/org/direct_bt/DBGattService.java b/java/org/direct_bt/DBGattService.java index bb8aed32..d7054485 100644 --- a/java/org/direct_bt/DBGattService.java +++ b/java/org/direct_bt/DBGattService.java @@ -30,6 +30,11 @@ import java.util.List; /** * Representing a Gatt Service object from the ::GATTRole::Server perspective. * + * A list of shared DBGattService instances are passed at DBGattServer construction + * and are retrievable via DBGattServer::getServices(). + * + * See [Direct-BT Overview](namespaceorg_1_1direct__bt.html#details). + * * BT Core Spec v5.2: Vol 3, Part G GATT: 3.1 Service Definition * * Includes a complete [Primary] Service Declaration diff --git a/src/direct_bt/SMPKeyBin.cpp b/src/direct_bt/SMPKeyBin.cpp index 0c98937f..e3274307 100644 --- a/src/direct_bt/SMPKeyBin.cpp +++ b/src/direct_bt/SMPKeyBin.cpp @@ -27,6 +27,8 @@ #include <memory> #include <cstdint> #include <cstdio> +#include <fstream> +#include <iostream> #include <jau/file_util.hpp> |