diff options
author | Sven Gothel <[email protected]> | 2023-10-20 03:40:23 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-10-20 03:40:23 +0200 |
commit | 252ae3889fc14432e032731fef3d4a24d17d32b1 (patch) | |
tree | 3f2eaf00e998651266e55142808b4f7c0de71db8 /api | |
parent | e233b445aab99c9ac5eb167aa3c756fedbdeaa27 (diff) |
MgmtPinCodeReplyCmd: Use given pin_code size and add std::string variant, zero pin-code array first; Support PinCode throughout BTManager/BTDevice.
Diffstat (limited to 'api')
-rw-r--r-- | api/direct_bt/BTDevice.hpp | 3 | ||||
-rw-r--r-- | api/direct_bt/BTManager.hpp | 2 | ||||
-rw-r--r-- | api/direct_bt/MgmtTypes.hpp | 17 |
3 files changed, 20 insertions, 2 deletions
diff --git a/api/direct_bt/BTDevice.hpp b/api/direct_bt/BTDevice.hpp index e4528c4c..a30634b7 100644 --- a/api/direct_bt/BTDevice.hpp +++ b/api/direct_bt/BTDevice.hpp @@ -899,6 +899,9 @@ namespace direct_bt { */ bool isConnSecurityAutoEnabled() const noexcept; + HCIStatusCode setPairingPINCode(const std::string& pinCode) noexcept; + HCIStatusCode setPairingPINCodeNegative() noexcept; + /** * Method sets the given passkey entry, see ::PairingMode::PASSKEY_ENTRY_ini. * <p> diff --git a/api/direct_bt/BTManager.hpp b/api/direct_bt/BTManager.hpp index e683f821..44003784 100644 --- a/api/direct_bt/BTManager.hpp +++ b/api/direct_bt/BTManager.hpp @@ -502,6 +502,8 @@ namespace direct_bt { HCIStatusCode uploadLinkKey(const uint16_t dev_id, const MgmtLinkKeyInfo &key) noexcept; HCIStatusCode uploadLinkKey(const uint16_t dev_id, const BDAddressAndType & addressAndType, const SMPLinkKey& lk) noexcept; + MgmtStatus userPINCodeReply(const uint16_t dev_id, const BDAddressAndType & addressAndType, const std::string& pinCode) noexcept; + MgmtStatus userPINCodeNegativeReply(const uint16_t dev_id, const BDAddressAndType & addressAndType) noexcept; MgmtStatus userPasskeyReply(const uint16_t dev_id, const BDAddressAndType & addressAndType, const uint32_t passkey) noexcept; MgmtStatus userPasskeyNegativeReply(const uint16_t dev_id, const BDAddressAndType & addressAndType) noexcept; MgmtStatus userConfirmReply(const uint16_t dev_id, const BDAddressAndType & addressAndType, const bool positive) noexcept; diff --git a/api/direct_bt/MgmtTypes.hpp b/api/direct_bt/MgmtTypes.hpp index 579cec1e..444e3035 100644 --- a/api/direct_bt/MgmtTypes.hpp +++ b/api/direct_bt/MgmtTypes.hpp @@ -852,13 +852,26 @@ namespace direct_bt { public: MgmtPinCodeReplyCmd(const uint16_t dev_id, const BDAddressAndType& addressAndType, - const uint8_t pin_len, const jau::TROOctets &pin_code) + const jau::TROOctets& pin_code) : MgmtCommand(Opcode::PIN_CODE_REPLY, dev_id, 6+1+1+16) { + const uint8_t pin_len = static_cast<uint8_t>( std::min<jau::nsize_t>(16, pin_code.size()) ); pdu.put_eui48_nc(MGMT_HEADER_SIZE, addressAndType.address); pdu.put_uint8_nc(MGMT_HEADER_SIZE+6, direct_bt::number(addressAndType.type)); pdu.put_uint8_nc(MGMT_HEADER_SIZE+7, pin_len); - pdu.put_octets_nc(MGMT_HEADER_SIZE+8, pin_code); + pdu.bzero_nc(MGMT_HEADER_SIZE+8, 16); + pdu.put_octets_nc(MGMT_HEADER_SIZE+8, pin_code, 0, pin_len); + } + MgmtPinCodeReplyCmd(const uint16_t dev_id, const BDAddressAndType& addressAndType, + const std::string& pin_code) + : MgmtCommand(Opcode::PIN_CODE_REPLY, dev_id, 6+1+1+16) + { + const uint8_t pin_len = static_cast<uint8_t>( std::min<size_t>(16, pin_code.size()) ); + pdu.put_eui48_nc(MGMT_HEADER_SIZE, addressAndType.address); + pdu.put_uint8_nc(MGMT_HEADER_SIZE+6, direct_bt::number(addressAndType.type)); + pdu.put_uint8_nc(MGMT_HEADER_SIZE+7, pin_len); + pdu.bzero_nc(MGMT_HEADER_SIZE+8, 16); + pdu.put_string_nc(MGMT_HEADER_SIZE+8, pin_code, pin_len, false /* EOS */); } const EUI48& getAddress() const noexcept { return *reinterpret_cast<const EUI48 *>( pdu.get_ptr_nc(MGMT_HEADER_SIZE + 0) ); } // mgmt_addr_info BDAddressType getAddressType() const noexcept { return static_cast<BDAddressType>(pdu.get_uint8_nc(MGMT_HEADER_SIZE+6)); } // mgmt_addr_info |