Direct-BT v3.3.0-1-gc2d430c
Direct-BT - Direct Bluetooth Programming.
|
BTDevice represents one remote Bluetooth device. More...
Public Member Functions | |
boolean | addCharListener (final BTGattCharListener listener) |
Add the given BTGattCharListener to the listener list if not already present. More... | |
boolean | addCharListener (final BTGattCharListener listener, final BTGattChar associatedCharacteristic) |
Please use BTGattChar#addCharListener(BTGattCharListener) for clarity. More... | |
boolean | addStatusListener (final AdapterStatusListener listener) |
Add the given AdapterStatusListener to the list if not already present, listening only for events matching this device. More... | |
HCIStatusCode | connectDefault () throws BTException |
jau.direct_bt : Establish a default HCI connection to this device, using certain default parameter. More... | |
HCIStatusCode | connectLE (final short le_scan_interval, final short le_scan_window, final short conn_interval_min, final short conn_interval_max, final short conn_latency, final short supervision_timeout) |
Establish a HCI BDADDR_LE_PUBLIC or BDADDR_LE_RANDOM connection to this device. More... | |
HCIStatusCode | disconnect () throws BTException |
jau.direct_bt : Disconnect the LE or BREDR peer's GATT and HCI connection. More... | |
boolean | equals (final Object obj) |
If both types are of BTDevice , it compares their BDAddressAndType , see getAddressAndType() . More... | |
BTGattChar | findGattChar (String char_uuid) |
Find a BTGattChar by its char_uuid only. More... | |
BTGattChar | findGattChar (String service_uuid, String char_uuid) |
Find a BTGattChar by its service_uuid and char_uuid. More... | |
BTGattService | findGattService (String service_uuid) |
Find a BTGattService by its service_uuid. More... | |
BTAdapter | getAdapter () |
Returns the adapter on which this device was discovered or connected. More... | |
BDAddressAndType | getAddressAndType () |
Returns the devices' unique EUI48 address and BDAddressType type tuple, might be its initially reported (resolvable) random address until pairing, i.e. More... | |
SMPKeyMask | getAvailableSMPKeys (final boolean responder) |
Returns the available SMPKeyMask.KeyType SMPKeyMask for the responder (LL slave) or initiator (LL master). More... | |
boolean | getConnected () |
Returns the connected state of the device. More... | |
HCIStatusCode | getConnectedLE_PHY (LE_PHYs[] resRx, LE_PHYs[] resTx) |
Request and return LE_PHYs bit for the given connection. More... | |
short | getConnectionHandle () |
Return the HCI connection handle to the LE or BREDR peer, zero if not connected. More... | |
SMPIOCapability | getConnIOCapability () |
Return the SMPIOCapability value, determined when the connection is established. More... | |
BTSecurityLevel | getConnSecurityLevel () |
Return the BTSecurityLevel , determined when the connection is established. More... | |
long | getCreationTimestamp () |
Returns the timestamp in monotonic milliseconds when this device instance has been created, either via its initial discovery or its initial direct connection. More... | |
EInfoReport | getEIR () |
Return the merged advertised EInfoReport for this remote device. More... | |
EInfoReport | getEIRInd () |
Return the latest advertised EInfoReport AD_IND variant for this remote device. More... | |
EInfoReport | getEIRScanRsp () |
Return the latest advertised EInfoReport AD_SCAN_RSP for this remote device. More... | |
List< BTGattService > | getGattServices () |
Returns a complete list of shared BTGattService available on this device, initially retrieved via GATT discovery. More... | |
SMPIdentityResolvingKey | getIdentityResolvingKey (final boolean responder) |
Returns a copy of the Identity Resolving Key (IRK), valid after connection and SMP pairing has been completed. More... | |
long | getLastDiscoveryTimestamp () |
Returns the timestamp in monotonic milliseconds when this device instance has discovered or connected directly the last time. More... | |
long | getLastUpdateTimestamp () |
Returns the timestamp in monotonic milliseconds when this device instance underlying data has been updated the last time. More... | |
SMPLinkKey | getLinkKey (final boolean responder) |
Returns a copy of the Link Key (LK), valid after connection and SMP pairing has been completed. More... | |
SMPLongTermKey | getLongTermKey (final boolean responder) |
Returns a copy of the long term key (LTK), valid after connection and SMP pairing has been completed. More... | |
String | getName () |
Returns the remote device name. More... | |
PairingMode | getPairingMode () |
Returns the current PairingMode used by the device. More... | |
SMPPairingState | getPairingState () |
Returns the current SMPPairingState . More... | |
int | getResponderSMPPassKey () |
Returns the responder SMP passkey, ranging from [0..999999]. More... | |
String | getResponderSMPPassKeyString () |
Returns getResponderSMPPassKey() as a canonical string, e.g. More... | |
BTRole | getRole () |
Return the fixed BTRole of this remote BTDevice . More... | |
short | getRSSI () |
Returns Received Signal Strength Indicator (RSSI) in dBm with ±6 dB accuracy of device as recognized at discovery and connect. More... | |
LE_PHYs | getRxPhys () |
Return the Rx LE_PHYs as notified via LE_PHY_UPDATE_COMPLETE or retrieved via getConnectedLE_PHY(LE_PHYs[], LE_PHYs[]) . More... | |
SMPSignatureResolvingKey | getSignatureResolvingKey (final boolean responder) |
Returns a copy of the Signature Resolving Key (CSRK), valid after connection and SMP pairing has been completed. More... | |
LE_PHYs | getTxPhys () |
Return the Tx LE_PHYs as notified via LE_PHY_UPDATE_COMPLETE or retrieved via getConnectedLE_PHY(LE_PHYs[], LE_PHYs[]) . More... | |
short | getTxPower () |
Return Tx Power Level in dBm with ±6 dB accuracy of device as recognized at discovery and connect. More... | |
BDAddressAndType | getVisibleAddressAndType () |
Returns the devices' visible BDAddressAndType, i.e. More... | |
boolean | isConnSecurityAutoEnabled () |
Returns true if automatic security negotiation has been enabled via setConnSecurityAuto(SMPIOCapability) , otherwise false. More... | |
boolean | isPrePaired () |
Returns true if this device has completed SMP pairing or keys are set via uploadKeys() More... | |
boolean | isValid () |
Returns whether the device is valid, i.e. More... | |
boolean | pingGATT () |
Issues a GATT ping to the device, validating whether it is still reachable. More... | |
boolean | remove () throws BTException |
Remove this device from the system (like an unpair). More... | |
int | removeAllAssociatedCharListener (final BTGattChar associatedCharacteristic) |
Remove all BTGattCharListener from the list, which are associated to the given BTGattChar . More... | |
int | removeAllCharListener () |
Remove all BTGattCharListener from the list. More... | |
boolean | removeCharListener (final BTGattCharListener l) |
Remove the given BTGattCharListener from the listener list. More... | |
boolean | removeStatusListener (final AdapterStatusListener l) |
Remove the given AdapterStatusListener from the list. More... | |
boolean | sendIndication (final short char_value_handle, final byte[] value) |
Send an indication event consisting out of the given value representing the given characteristic value handle to the connected BTRole::Master. More... | |
boolean | sendNotification (final short char_value_handle, final byte[] value) |
Send a notification event consisting out of the given value representing the given characteristic value handle to the connected BTRole::Master. More... | |
HCIStatusCode | setConnectedLE_PHY (final LE_PHYs Tx, final LE_PHYs Rx) |
Sets preference of used LE_PHYs for the given connection. More... | |
boolean | setConnSecurity (final BTSecurityLevel sec_level, final SMPIOCapability io_cap) |
Sets the given BTSecurityLevel and SMPIOCapability used to connect to this device on the upcoming connection. More... | |
boolean | setConnSecurityAuto (final SMPIOCapability iocap_auto) |
Set automatic security negotiation of BTSecurityLevel and SMPIOCapability pairing mode. More... | |
void | setIdentityResolvingKey (final SMPIdentityResolvingKey irk) |
Sets the Identity Resolving Key (IRK) of this device for pre-paired encryption. More... | |
void | setLinkKey (final SMPLinkKey lk) |
Sets the Link Key (LK) of this device for pre-paired encryption. More... | |
void | setLongTermKey (final SMPLongTermKey ltk) |
Sets the Long Term Key (LTK) of this device for pre-paired encryption. More... | |
HCIStatusCode | setPairingNumericComparison (final boolean equal) |
Method sets the numeric comparison result, see PairingMode#NUMERIC_COMPARE_ini . More... | |
HCIStatusCode | setPairingPasskey (final int passkey) |
Method sets the given passkey entry, see PairingMode#PASSKEY_ENTRY_ini . More... | |
HCIStatusCode | setPairingPasskeyNegative () |
Method replies with a negative passkey response, i.e. More... | |
void | setSignatureResolvingKey (final SMPSignatureResolvingKey csrk) |
Sets the Signature Resolving Key (CSRK) of this device for pre-paired encryption. More... | |
boolean | setSMPKeyBin (final SMPKeyBin bin) |
Copy all keys from the given SMPKeyBin into this BTDevice. More... | |
String | toString () |
HCIStatusCode | unpair () |
Unpair this device from the adapter while staying connected. More... | |
HCIStatusCode | uploadKeys () |
Upload all set keys to the adapter for pre-pairing. More... | |
HCIStatusCode | uploadKeys (final SMPKeyBin bin, final BTSecurityLevel req_min_level) |
Convenient combination of setSMPKeyBin() and uploadKeys() after validating given SMPKeyBin file and SMPKeyBin::getSecLevel() > req_min_level. More... | |
HCIStatusCode | uploadKeys (final String smp_key_bin_path, final BTSecurityLevel req_min_level, final boolean verbose_) |
Convenient combination of SMPKeyBin::read(), setSMPKeyBin() and uploadKeys() after validating given SMPKeyBin file and SMPKeyBin::getSecLevel() > req_min_level. More... | |
Public Member Functions inherited from org.direct_bt.BTObject | |
void | close () |
Release the native memory associated with this object The object should not be used following a call to close. More... | |
boolean | equals (Object obj) |
int | hashCode () |
BTDevice represents one remote Bluetooth device.
Invariable remote BTDevice roles (see getRole()
)
BTRole::Master
: The remote device has discovered us and maybe is connected to us. The remote device acts as a GATT client.BTRole::Slave
: The remote device has advertised and maybe we are connected to it. The remote device acts as a GATT server.Note the local BTAdapter
's opposite role.
Definition at line 46 of file BTDevice.java.
boolean org.direct_bt.BTDevice.addStatusListener | ( | final AdapterStatusListener | listener | ) |
Add the given AdapterStatusListener
to the list if not already present, listening only for events matching this device.
The AdapterStatusListener is released at remove() or this device's destruction.
The newly added AdapterStatusListener
will receive an initial adapterSettingsChanged
event, passing an empty oldMask and changedMask
, as well as current newMask
.
This allows the receiver to be aware of this adapter's current settings.
listener | A AdapterStatusListener instance |
deviceMatch | Optional BTDevice to be matched before calling any AdapterStatusListener device* methods. Pass null for no filtering. |
BTDevice#addStatusListener(AdapterStatusListener, BTDevice)
removeStatusListener(AdapterStatusListener)
removeAllStatusListener()
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.removeStatusListener | ( | final AdapterStatusListener | l | ) |
Remove the given AdapterStatusListener
from the list.
listener | A AdapterStatusListener instance |
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.disconnect | ( | ) | throws BTException |
jau.direct_bt
: Disconnect the LE or BREDR peer's GATT and HCI connection.
BT Core Spec v5.2: Vol 4, Part E HCI: 7.1.6 Disconnect command
The actual disconnect event will be delivered asynchronous and the connection event can be caught via AdapterStatusListener::deviceDisconnected(..). If unacceptable, HCIStatusCode#UNACCEPTABLE_CONNECTION_PARAM
is being returned.
The device will be removed from the managing adapter's connected devices when AdapterStatusListener#deviceDisconnected(BTDevice, HCIStatusCode, long)
has been received.
An open GATT connection will also be closed.
The connection to this device is removed, removing all connected profiles.
An application using one thread per device and rapid connect, should either use disconnect()
or remove()
, but never issue remove() after disconnect(). Doing so would eventually delete the device being already in use by another thread due to discovery post disconnect!
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. jau.direct_bt
does not throw a BTException on error, only a 'general' exception in case of fatality like NPE etc (FIXME: Remove throws) Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.isPrePaired | ( | ) |
Returns true if this device has completed SMP pairing or keys are set via uploadKeys()
Implemented in jau.direct_bt.DBTDevice.
int org.direct_bt.BTDevice.getResponderSMPPassKey | ( | ) |
Returns the responder SMP passkey, ranging from [0..999999].
Authentication (MITM) PASSKEY (produced by this responder adapter, acting as peripheral GATT server) and shall be displayed for the initiating remote device, see PairingMode#PASSKEY_ENTRY_ini
Implemented in jau.direct_bt.DBTDevice.
String org.direct_bt.BTDevice.getResponderSMPPassKeyString | ( | ) |
Returns getResponderSMPPassKey()
as a canonical string, e.g.
'012345'.
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.connectDefault | ( | ) | throws BTException |
jau.direct_bt
: Establish a default HCI connection to this device, using certain default parameter.
BT Core Spec v5.2: Vol 4, Part E HCI: 7.8.12 LE Create Connection command
BT Core Spec v5.2: Vol 4, Part E HCI: 7.1.5 Create Connection command
Depending on this device's addressType, either a BREDR (BDADDR_BREDR) or LE (BDADDR_LE_PUBLIC, BDADDR_LE_RANDOM) connection is attempted.
If unacceptable, HCIStatusCode#UNACCEPTABLE_CONNECTION_PARAM
is being returned.
The actual new connection handle will be delivered asynchronous and the connection event can be caught via AdapterStatusListener#deviceConnected(BTDevice, long)
, or if failed via AdapterStatusListener#deviceDisconnected(BTDevice, HCIStatusCode, long)
.
The device is tracked by the managing adapter.
flagged as auto-connectable.
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. jau.direct_bt
. @implNote jau.direct_bt
does not throw a BTException on error, only a 'general' exception in case of fatality like NPE etc (FIXME: Remove throws) Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.connectLE | ( | final short | le_scan_interval, |
final short | le_scan_window, | ||
final short | conn_interval_min, | ||
final short | conn_interval_max, | ||
final short | conn_latency, | ||
final short | supervision_timeout | ||
) |
Establish a HCI BDADDR_LE_PUBLIC or BDADDR_LE_RANDOM connection to this device.
BT Core Spec v5.2: Vol 4, Part E HCI: 7.8.12 LE Create Connection command
If this device's getAddressType()
is not BDADDR_LE_PUBLIC or BDADDR_LE_RANDOM, HCIStatusCode#UNACCEPTABLE_CONNECTION_PARAM
is being returned.
The actual new connection handle will be delivered asynchronous and the connection event can be caught via AdapterStatusListener#deviceConnected(BTDevice, long)
, or if failed via AdapterStatusListener#deviceDisconnected(BTDevice, HCIStatusCode, long)
.
The device is tracked by the managing adapter.
Default parameter are used if -1
has been passed for any of the arguments.
Default parameter values are chosen for using public address resolution and usual connection latency, interval etc.
Set window to the same value as the interval, enables continuous scanning.
le_scan_interval | in units of 0.625ms, default value 24 for 15ms; Value range [4 .. 0x4000] for [2.5ms .. 10.24s] |
le_scan_window | in units of 0.625ms, default value 24 for 15ms; Value range [4 .. 0x4000] for [2.5ms .. 10.24s]. Shall be <= le_scan_interval |
conn_interval_min | in units of 1.25ms, default value 8 for 10ms; Value range [6 .. 3200] for [7.5ms .. 4000ms] |
conn_interval_max | in units of 1.25ms, default value 12 for 15ms; Value range [6 .. 3200] for [7.5ms .. 4000ms] |
conn_latency | slave latency in units of connection events, default value 0; Value range [0 .. 0x01F3]. |
supervision_timeout | in units of 10ms, default value >= 10 x conn_interval_max, we use 500 ms minimum; Value range [0xA-0x0C80] for [100ms - 32s]. |
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. Implemented in jau.direct_bt.DBTDevice.
SMPKeyMask org.direct_bt.BTDevice.getAvailableSMPKeys | ( | final boolean | responder | ) |
Returns the available SMPKeyMask.KeyType
SMPKeyMask
for the responder (LL slave) or initiator (LL master).
responder | if true, queries the responder (LL slave) key, otherwise the initiator (LL master) key. |
SMPKeyMask.KeyType
SMPKeyMask
result Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.setSMPKeyBin | ( | final SMPKeyBin | bin | ) |
Copy all keys from the given SMPKeyBin into this BTDevice.
Issue uploadKeys() to upload all SMP keys to the adapter before connecting to enable pre-pairing.
If this instance isValid() and initiator or responder LTK available, i.e. hasLTKInit() or hasLTKResp(), the following procedure will be applied to the given BTDevice:
BTSecurityLevel::ENC_ONLY is set to avoid a new SMP PairingMode negotiation, which is undesired as this instances' stored LTK shall be used for PairingMode::PRE_PAIRED.
bin |
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.uploadKeys | ( | ) |
Upload all set keys to the adapter for pre-pairing.
Must be called before connecting to this device, otherwise HCIStatusCode#CONNECTION_ALREADY_EXISTS
will be returned.
HCIStatusCode#SUCCESS
if successful, otherwise the appropriate error code. Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.uploadKeys | ( | final SMPKeyBin | bin, |
final BTSecurityLevel | req_min_level | ||
) |
Convenient combination of setSMPKeyBin() and uploadKeys() after validating given SMPKeyBin file and SMPKeyBin::getSecLevel() > req_min_level.
bin | the SMPKeyBin file |
req_min_level | SMPKeyBin::getSecLevel() shall be greater or equal to this required minimum |
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.uploadKeys | ( | final String | smp_key_bin_path, |
final BTSecurityLevel | req_min_level, | ||
final boolean | verbose_ | ||
) |
Convenient combination of SMPKeyBin::read(), setSMPKeyBin() and uploadKeys() after validating given SMPKeyBin file and SMPKeyBin::getSecLevel() > req_min_level.
smp_key_bin_path | director for the SMPKeyBin file, derived by this BTDevice |
req_min_level | SMPKeyBin::getSecLevel() shall be greater or equal to this required minimum |
Implemented in jau.direct_bt.DBTDevice.
SMPLongTermKey org.direct_bt.BTDevice.getLongTermKey | ( | final boolean | responder | ) |
Returns a copy of the long term key (LTK), valid after connection and SMP pairing has been completed.
responder | true will return the responder's LTK info (remote device, LL slave), otherwise the initiator's (the LL master). |
SMPLongTermKey#enc_size
will be zero if invalid. Implemented in jau.direct_bt.DBTDevice.
void org.direct_bt.BTDevice.setLongTermKey | ( | final SMPLongTermKey | ltk | ) |
Sets the Long Term Key (LTK) of this device for pre-paired encryption.
Issue uploadKeys()
to upload all SMP keys to the adapter before connecting to enable pre-pairing.
ltk | the pre-paired encryption LTK |
Implemented in jau.direct_bt.DBTDevice.
SMPIdentityResolvingKey org.direct_bt.BTDevice.getIdentityResolvingKey | ( | final boolean | responder | ) |
Returns a copy of the Identity Resolving Key (IRK), valid after connection and SMP pairing has been completed.
responder | true will return the responder's IRK info (remote device, LL slave), otherwise the initiator's (the LL master). |
Implemented in jau.direct_bt.DBTDevice.
void org.direct_bt.BTDevice.setIdentityResolvingKey | ( | final SMPIdentityResolvingKey | irk | ) |
Sets the Identity Resolving Key (IRK) of this device for pre-paired encryption.
Issue uploadKeys()
to upload all SMP keys to the adapter before connecting to enable pre-pairing.
irk | the Identity Resolving Key (IRK) |
Implemented in jau.direct_bt.DBTDevice.
SMPSignatureResolvingKey org.direct_bt.BTDevice.getSignatureResolvingKey | ( | final boolean | responder | ) |
Returns a copy of the Signature Resolving Key (CSRK), valid after connection and SMP pairing has been completed.
responder | true will return the responder's CSRK info (remote device, LL slave), otherwise the initiator's (the LL master). |
Implemented in jau.direct_bt.DBTDevice.
void org.direct_bt.BTDevice.setSignatureResolvingKey | ( | final SMPSignatureResolvingKey | csrk | ) |
Sets the Signature Resolving Key (CSRK) of this device for pre-paired encryption.
Issue uploadKeys()
to upload all SMP keys to the adapter before connecting to enable pre-pairing.
csrk | the Signature Resolving Key (CSRK) |
Implemented in jau.direct_bt.DBTDevice.
SMPLinkKey org.direct_bt.BTDevice.getLinkKey | ( | final boolean | responder | ) |
Returns a copy of the Link Key (LK), valid after connection and SMP pairing has been completed.
responder | true will return the responder's LTK info (remote device, LL slave), otherwise the initiator's (the LL master). |
Implemented in jau.direct_bt.DBTDevice.
void org.direct_bt.BTDevice.setLinkKey | ( | final SMPLinkKey | lk | ) |
Sets the Link Key (LK) of this device for pre-paired encryption.
Issue uploadKeys()
to upload all SMP keys to the adapter before connecting to enable pre-pairing.
lk | the pre-paired encryption LK |
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.unpair | ( | ) |
Unpair this device from the adapter while staying connected.
All keys will be cleared within the adapter and host implementation.
Should rarely being used by user.
Internally being used to re-start pairing if GATT connection fails in PairingMode#PRE_PAIRED
mode.
Unpair is performed by directly for a consistent and stable security workflow:
BTRole#Slave
BTDevice
is discovered, see AdapterStatusListener#deviceFound(BTDevice, long)
.BTRole#Slave
BTDevice
is disconnected, see AdapterStatusListener#deviceDisconnected(BTDevice, HCIStatusCode, short, long)
.BTRole#Master
BTDevice
gets connected, see AdapterStatusListener#deviceConnected(BTDevice, short, long)
.HCIStatusCode#SUCCESS
or an appropriate error status. Implemented in jau.direct_bt.DBTDevice.
BTSecurityLevel org.direct_bt.BTDevice.getConnSecurityLevel | ( | ) |
Return the BTSecurityLevel
, determined when the connection is established.
Implemented in jau.direct_bt.DBTDevice.
SMPIOCapability org.direct_bt.BTDevice.getConnIOCapability | ( | ) |
Return the SMPIOCapability
value, determined when the connection is established.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.setConnSecurity | ( | final BTSecurityLevel | sec_level, |
final SMPIOCapability | io_cap | ||
) |
Sets the given BTSecurityLevel
and SMPIOCapability
used to connect to this device on the upcoming connection.
Implementation using following pseudo-code, validating the user settings:
if( BTSecurityLevel::UNSET < sec_level && SMPIOCapability::UNSET != io_cap ) { USING: sec_level, io_cap } else if( BTSecurityLevel::UNSET < sec_level ) { if( BTSecurityLevel::ENC_ONLY >= sec_level ) { USING: sec_level, SMPIOCapability::NO_INPUT_NO_OUTPUT } else { USING: sec_level, SMPIOCapability::UNSET } } else if( SMPIOCapability::UNSET != io_cap ) { USING BTSecurityLevel::UNSET, io_cap } else { USING BTSecurityLevel::UNSET, SMPIOCapability::UNSET }
<p<blockquote>
Method returns false if this device has already being connected, or connectLE
or connectDefault()
has been issued already.
Method either changes both parameter for the upcoming connection or none at all.
sec_level | BTSecurityLevel to be applied. |
io_cap | SMPIOCapability to be applied. |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.setConnSecurityAuto | ( | final SMPIOCapability | iocap_auto | ) |
Set automatic security negotiation of BTSecurityLevel
and SMPIOCapability
pairing mode.
Disabled by default and if set to SMPIOCapability#UNSET
Implementation iterates through below setup from highest security to lowest, while performing a full connection attempt for each.
BTSecurityLevel::ENC_AUTH_FIPS, iocap_auto* BTSecurityLevel::ENC_AUTH, iocap_auto* BTSecurityLevel::ENC_ONLY, SMPIOCapability::NO_INPUT_NO_OUTPUT BTSecurityLevel::NONE, SMPIOCapability::NO_INPUT_NO_OUTPUT (*): user SMPIOCapability choice of for authentication IO, skipped if ::SMPIOCapability::NO_INPUT_NO_OUTPUT
<p<blockquote>
Implementation may perform multiple connection and disconnect actions until successful pairing or failure.
Intermediate deviceConnected(..)
and deviceDisconnected(..)
callbacks are not delivered while negotiating. This avoids any interference by the user application.
auth_io_cap | user SMPIOCapability choice for negotiation |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.isConnSecurityAutoEnabled | ( | ) |
Returns true if automatic security negotiation has been enabled via setConnSecurityAuto(SMPIOCapability)
, otherwise false.
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.setPairingPasskey | ( | final int | passkey | ) |
Method sets the given passkey entry, see PairingMode#PASSKEY_ENTRY_ini
.
Call this method if the device shall be securely paired with PairingMode#PASSKEY_ENTRY_ini
, i.e. when notified via devicePairingState
in state SMPPairingState#PASSKEY_EXPECTED
.
passkey | used for PairingMode#PASSKEY_ENTRY_ini method. Will be encrypted before sending to counter-party. |
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.setPairingPasskeyNegative | ( | ) |
Method replies with a negative passkey response, i.e.
rejection, see PairingMode#PASSKEY_ENTRY_ini
.
You may call this method if the device shall be securely paired with PairingMode#PASSKEY_ENTRY_ini
, i.e. when notified via devicePairingState
in state SMPPairingState#PASSKEY_EXPECTED
.
Current experience exposed a roughly 3s immediate disconnect handshake with certain devices and/or Kernel BlueZ code.
Hence using setPairingPasskey(int)
with passkey = 0
is recommended, especially when utilizing automatic security negotiation via setConnSecurityAuto()
!
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.setPairingNumericComparison | ( | final boolean | equal | ) |
Method sets the numeric comparison result, see PairingMode#NUMERIC_COMPARE_ini
.
Call this method if the device shall be securely paired with PairingMode#NUMERIC_COMPARE_ini
, i.e. when notified via devicePairingState
in state SMPPairingState#NUMERIC_COMPARE_EXPECTED
.
equal | used for PairingMode#NUMERIC_COMPARE_ini method. Will be encrypted before sending to counter-party. |
HCIStatusCode#SUCCESS
if the command has been accepted, otherwise HCIStatusCode
may disclose reason for rejection. Implemented in jau.direct_bt.DBTDevice.
PairingMode org.direct_bt.BTDevice.getPairingMode | ( | ) |
Returns the current PairingMode
used by the device.
If the device is not paired, the current mode is PairingMode#NONE
.
If the Pairing Feature Exchange is completed, i.e. SMPPairingState#FEATURE_EXCHANGE_COMPLETED
as notified by devicePairingState
the current mode reflects the currently used PairingMode
.
In case the Pairing Feature Exchange is in progress, the current mode is PairingMode#NEGOTIATING
.
Implemented in jau.direct_bt.DBTDevice.
SMPPairingState org.direct_bt.BTDevice.getPairingState | ( | ) |
Returns the current SMPPairingState
.
If the device is not paired, the current state is SMPPairingState#NONE
.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.remove | ( | ) | throws BTException |
Remove this device from the system (like an unpair).
Direct-BT: Disconnects this device via disconnect(..) if getConnected()==true and explicitly removes its shared references from the Adapter: connected-devices, discovered-devices and shared-devices.
This method shall be issued to ensure no device reference will be leaked in a long lived adapter, as only its reference within connected-devices and discovered-devices are removed at disconnect.
After calling this method, this instance is destroyed and shall not be used anymore!
This method is automatically called @ destructor.
This method is an atomic operation.
An application using one thread per device and rapid connect, should either use disconnect() or remove(), but never issue remove() after disconnect() if the device is in use.
BTException |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.isValid | ( | ) |
Returns whether the device is valid, i.e.
reference is valid but not necessarily connected
.
remove()
'ed Implemented in jau.direct_bt.DBTDevice.
List< BTGattService > org.direct_bt.BTDevice.getGattServices | ( | ) |
Returns a complete list of shared BTGattService available on this device, initially retrieved via GATT discovery.
In case of transmission error, zero services or no GATT GenericAccess, method will return zero services indicating an error. In this case, user can assume that the connection is or will be disconnected.
Method is only functional on a remote BTDevice in BTRole#Slave
, a GATT server, i.e. the local BTAdapter acting as a BTRole#Master
GATT client.
The HCI connectLE(..) or connectBREDR(..) must be performed first, see connectDefault()
.
If this method has been called for the first time:
Implemented in jau.direct_bt.DBTDevice.
BTGattService org.direct_bt.BTDevice.findGattService | ( | String | service_uuid | ) |
Find a BTGattService
by its service_uuid.
It will check objects of this connected device.
It will not turn on discovery or connect to this remote device.
@parameter service_uuid the UUID of the desired BTGattService
Implemented in jau.direct_bt.DBTDevice.
BTGattChar org.direct_bt.BTDevice.findGattChar | ( | String | service_uuid, |
String | char_uuid | ||
) |
Find a BTGattChar
by its service_uuid and char_uuid.
It will check objects of this connected device.
It will not turn on discovery or connect to this remote device.
@parameter service_uuid the UUID of the intermediate BTGattService
@parameter char_uuid the UUID of the desired BTGattChar
, within the intermediate BTGattService
.
Implemented in jau.direct_bt.DBTDevice.
BTGattChar org.direct_bt.BTDevice.findGattChar | ( | String | char_uuid | ) |
Find a BTGattChar
by its char_uuid only.
It will check objects of this connected device.
It will not turn on discovery or connect to this remote device.
This variation is less efficient than findGattChar() by service_uuid and char_uuid, since it has to traverse through all services.
@parameter char_uuid the UUID of the desired BTGattChar
, within the intermediate BTGattService
.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.sendNotification | ( | final short | char_value_handle, |
final byte[] | value | ||
) |
Send a notification event consisting out of the given value
representing the given characteristic value handle to the connected BTRole::Master.
This command is only valid if this BTGattHandler is in role GATTRole::Server.
Implementation is not receiving any reply after sending out the indication and returns immediately.
char_value_handle | valid characteristic value handle, must be sourced from referenced DBGattServer |
value | the octets to be send |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.sendIndication | ( | final short | char_value_handle, |
final byte[] | value | ||
) |
Send an indication event consisting out of the given value
representing the given characteristic value handle to the connected BTRole::Master.
This command is only valid if this BTGattHandler is in role GATTRole::Server.
Implementation awaits the indication reply after sending out the indication.
char_value_handle | valid characteristic value handle, must be sourced from referenced DBGattServer |
value | the octets to be send |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.pingGATT | ( | ) |
Issues a GATT ping to the device, validating whether it is still reachable.
This method could be periodically utilized to shorten the underlying OS disconnect period after turning the device off, which lies within 7-13s.
In case the device is no more reachable, disconnect will be initiated due to the occurring IO error.
GATT services must have been initialized via getServices()
, otherwise false
is being returned.
true
if successful or not implemented, otherwise false in case no GATT services exists or is not connected.. Implemented in jau.direct_bt.DBTDevice.
long org.direct_bt.BTDevice.getCreationTimestamp | ( | ) |
Returns the timestamp in monotonic milliseconds when this device instance has been created, either via its initial discovery or its initial direct connection.
Implemented in jau.direct_bt.DBTDevice.
long org.direct_bt.BTDevice.getLastDiscoveryTimestamp | ( | ) |
Returns the timestamp in monotonic milliseconds when this device instance has discovered or connected directly the last time.
Implemented in jau.direct_bt.DBTDevice.
long org.direct_bt.BTDevice.getLastUpdateTimestamp | ( | ) |
Returns the timestamp in monotonic milliseconds when this device instance underlying data has been updated the last time.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.equals | ( | final Object | obj | ) |
If both types are of BTDevice
, it compares their BDAddressAndType
, see getAddressAndType()
.
Implements org.direct_bt.BTObject.
Implemented in jau.direct_bt.DBTDevice.
BDAddressAndType org.direct_bt.BTDevice.getAddressAndType | ( | ) |
Returns the devices' unique EUI48
address and BDAddressType
type tuple, might be its initially reported (resolvable) random address until pairing, i.e.
BDAddressType#BDADDR_LE_RANDOM
instead of BDAddressType#BDADDR_LE_PUBLIC
.
After pairing or if the remote device uses a (static) public address, it is considered unique and BDAddressType#BDADDR_LE_PUBLIC
.
Implemented in jau.direct_bt.DBTDevice.
BDAddressAndType org.direct_bt.BTDevice.getVisibleAddressAndType | ( | ) |
Returns the devices' visible BDAddressAndType, i.e.
BDAddressType#BDADDR_LE_RANDOM
or BDAddressType#BDADDR_LE_PUBLIC
.
The devices' address as initially reported by the system might be a (resolvable) random address, i.e. BDAddressType#BDADDR_LE_RANDOM
instead of BDAddressType#BDADDR_LE_PUBLIC
.
Implemented in jau.direct_bt.DBTDevice.
String org.direct_bt.BTDevice.getName | ( | ) |
Returns the remote device name.
The name has been set by the advertised EInfoReport
if available, otherwise by the GATT GenericAccess data post connection.
Implemented in jau.direct_bt.DBTDevice.
short org.direct_bt.BTDevice.getRSSI | ( | ) |
Returns Received Signal Strength Indicator (RSSI) in dBm with ±6 dB accuracy of device as recognized at discovery and connect.
BT Core Spec v5.2: Vol 4, Part E HCI: 7.5.4 Read RSSI command
Any positive RSSI value indicates how many dB the RSSI is above the upper limit, any negative value indicates how many dB the RSSI is below the lower limit. The value zero indicates that the RSSI is inside the Golden Receive Power Range.
LE range [-127..20] with 0 inside the Golden Receive Power Range and 127 as "not available" value (core spec).
pathloss = Tx Power Level – RSSI
Implemented in jau.direct_bt.DBTDevice.
EInfoReport org.direct_bt.BTDevice.getEIR | ( | ) |
Return the merged advertised EInfoReport
for this remote device.
The EInfoReport is updated by new scan-reports (update) and when disconnected (empty).
Implemented in jau.direct_bt.DBTDevice.
EInfoReport org.direct_bt.BTDevice.getEIRInd | ( | ) |
Return the latest advertised EInfoReport AD_IND variant for this remote device.
The EInfoReport is replaced by new scan-reports only.
Implemented in jau.direct_bt.DBTDevice.
EInfoReport org.direct_bt.BTDevice.getEIRScanRsp | ( | ) |
Return the latest advertised EInfoReport AD_SCAN_RSP for this remote device.
The EInfoReport is replaced by new scan-reports only.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.getConnected | ( | ) |
Returns the connected state of the device.
Implemented in jau.direct_bt.DBTDevice.
short org.direct_bt.BTDevice.getConnectionHandle | ( | ) |
Return the HCI connection handle to the LE or BREDR peer, zero if not connected.
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.getConnectedLE_PHY | ( | LE_PHYs[] | resRx, |
LE_PHYs[] | resTx | ||
) |
Request and return LE_PHYs bit for the given connection.
BT Core Spec v5.2: Vol 4, Part E, 7.8.47 LE Read PHY command
resRx | array for one resulting receiver LE_PHYs bit |
resTx | array for one resulting transmitter LE_PHYs bit |
Implemented in jau.direct_bt.DBTDevice.
LE_PHYs org.direct_bt.BTDevice.getTxPhys | ( | ) |
Return the Tx LE_PHYs as notified via LE_PHY_UPDATE_COMPLETE or retrieved via getConnectedLE_PHY(LE_PHYs[], LE_PHYs[])
.
Implemented in jau.direct_bt.DBTDevice.
LE_PHYs org.direct_bt.BTDevice.getRxPhys | ( | ) |
Return the Rx LE_PHYs as notified via LE_PHY_UPDATE_COMPLETE or retrieved via getConnectedLE_PHY(LE_PHYs[], LE_PHYs[])
.
Implemented in jau.direct_bt.DBTDevice.
HCIStatusCode org.direct_bt.BTDevice.setConnectedLE_PHY | ( | final LE_PHYs | Tx, |
final LE_PHYs | Rx | ||
) |
Sets preference of used LE_PHYs for the given connection.
BT Core Spec v5.2: Vol 4, Part E, 7.8.49 LE Set PHY command
Tx | transmitter LE_PHYs bit mask of preference if not set to zero LE_PHYs#mask (ignored). |
Rx | receiver LE_PHYs bit mask of preference if not set to zero LE_PHYs#mask (ignored). |
Implemented in jau.direct_bt.DBTDevice.
BTAdapter org.direct_bt.BTDevice.getAdapter | ( | ) |
Returns the adapter on which this device was discovered or connected.
Implemented in jau.direct_bt.DBTDevice.
BTRole org.direct_bt.BTDevice.getRole | ( | ) |
Return the fixed BTRole
of this remote BTDevice
.
Implemented in jau.direct_bt.DBTDevice.
short org.direct_bt.BTDevice.getTxPower | ( | ) |
Return Tx Power Level in dBm with ±6 dB accuracy of device as recognized at discovery and connect.
Core Specification Supplement, Part A, Section 1.5.
Range [-127..20] with 127 as "not available" value (core spec).
pathloss = Tx Power Level – RSSI
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.addCharListener | ( | final BTGattCharListener | listener | ) |
Add the given BTGattCharListener
to the listener list if not already present.
To enable the actual BLE notification and/or indication, one needs to call BTGattChar#configNotificationIndication(boolean, boolean, boolean[])
or BTGattChar#enableNotificationOrIndication(boolean[])
.
listener | A BTGattCharListener instance, listening to all BTGattChar events of this device |
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.addCharListener | ( | final BTGattCharListener | listener, |
final BTGattChar | associatedCharacteristic | ||
) |
Please use BTGattChar#addCharListener(BTGattCharListener)
for clarity.
Implemented in jau.direct_bt.DBTDevice.
boolean org.direct_bt.BTDevice.removeCharListener | ( | final BTGattCharListener | l | ) |
Remove the given BTGattCharListener
from the listener list.
If the BTDevice
's BTGattHandler is null, i.e. not connected, false
is being returned.
listener | A BTGattCharListener instance |
Implemented in jau.direct_bt.DBTDevice.
int org.direct_bt.BTDevice.removeAllAssociatedCharListener | ( | final BTGattChar | associatedCharacteristic | ) |
Remove all BTGattCharListener
from the list, which are associated to the given BTGattChar
.
Implementation tests all listener's BTGattCharListener#getAssociatedChar()
to match with the given associated characteristic.
associatedCharacteristic | the match criteria to remove any BTGattCharListener from the list |
Implemented in jau.direct_bt.DBTDevice.
int org.direct_bt.BTDevice.removeAllCharListener | ( | ) |
Remove all BTGattCharListener
from the list.
Implemented in jau.direct_bt.DBTDevice.
String org.direct_bt.BTDevice.toString | ( | ) |
Implemented in jau.direct_bt.DBTDevice.