From 30436c84b2c35982c41c33a7adfb0307884f5ee9 Mon Sep 17 00:00:00 2001 From: Bruno Randolf Date: Sat, 5 Jan 2019 18:34:13 +0000 Subject: Add setting of discoverable mode This is necessary for the advertisements to be in "LE General Discoverable Mode" which makes them visible (especially to other Linux boxes). Signed-off-by: Bruno Randolf --- src/Mgmt.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/Mgmt.cpp') diff --git a/src/Mgmt.cpp b/src/Mgmt.cpp index e61653e..2b80748 100644 --- a/src/Mgmt.cpp +++ b/src/Mgmt.cpp @@ -90,6 +90,35 @@ bool Mgmt::setName(std::string name, std::string shortName) return true; } +// Sets discoverable mode +// 0x00 disables discoverable +// 0x01 enables general discoverable +// 0x02 enables limited discoverable +// Timeout is the time in seconds. For 0x02, the timeout value is required. +bool Mgmt::setDiscoverable(uint8_t disc, uint16_t timeout) +{ + struct SRequest : HciAdapter::HciHeader + { + uint8_t disc; + uint16_t timeout; + } __attribute__((packed)); + + SRequest request; + request.code = Mgmt::ESetDiscoverableCommand; + request.controllerId = controllerIndex; + request.dataSize = sizeof(SRequest) - sizeof(HciAdapter::HciHeader); + request.disc = disc; + request.timeout = timeout; + + if (!HciAdapter::getInstance().sendCommand(request)) + { + Logger::warn(SSTR << " + Failed to set discoverable"); + return false; + } + + return true; +} + // Set a setting state to 'newState' // // Many settings are set the same way, this is just a convenience routine to handle them all @@ -202,4 +231,4 @@ std::string Mgmt::truncateShortName(const std::string &name) return name.substr(0, kMaxAdvertisingShortNameLength); } -}; // namespace ggk \ No newline at end of file +}; // namespace ggk -- cgit v1.2.3