diff options
author | Sven Gothel <[email protected]> | 2020-02-09 08:50:22 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2020-02-09 08:50:22 +0100 |
commit | 4f99bad3abcabb2c37ef6543ec5ed8467914cd53 (patch) | |
tree | 5848e3fdaa3ebc2acc6f6ca0abae517b0b6253a2 /java/tinyb | |
parent | 0c76e289ad011f1c616176a896da02e9b255275e (diff) |
Java Refactory: Expose intefaces via org.tinyb.* and D-Bus implementation via tinyb.dbus.*
Allows alternative interface implementations and delegated wrapper implementations for debug and tracing.
Original D-Bus implementation can be retrieved via:
'BluetoothManager org.tinyb.BluetoothFactory.getDBusBluetoothManager()'
A HCI native implementation will follow up w/o use of D-Bus.
Otherwise the Java API is unchanged and this tinyb can replace previous implementation.
Due to the major API change (despite interface is unchanged but BluetoothManager instantiation)
the jar file has been renamed from 'tinyb.jar' to 'tinyb2.jar'.
Same goes with the version number, which will be set to 'v2.0.0'.
The native library and class definition is kept unchanged using the original names so far.
Diffstat (limited to 'java/tinyb')
20 files changed, 815 insertions, 1561 deletions
diff --git a/java/tinyb/BluetoothAdapter.java b/java/tinyb/BluetoothAdapter.java deleted file mode 100644 index 8094ff23..00000000 --- a/java/tinyb/BluetoothAdapter.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -import java.util.*; -import java.time.Duration; - -/** - * Provides access to Bluetooth adapters. Follows the BlueZ adapter API - * available at: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/adapter-api.txt - */ -public class BluetoothAdapter extends BluetoothObject -{ - public native BluetoothType getBluetoothType(); - public native BluetoothAdapter clone(); - - static BluetoothType class_type() { return BluetoothType.ADAPTER; } - - /** Find a BluetoothDevice. If parameters name and address are not null, - * the returned object will have to match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter name optionally specify the name of the object you are - * waiting for - * @parameter address optionally specify the MAC address of the device you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the name and address or null if not found before - * timeout expires. - */ - public BluetoothDevice find(String name, String address, Duration duration) { - BluetoothManager manager = BluetoothManager.getBluetoothManager(); - return (BluetoothDevice) manager.find(BluetoothType.DEVICE, name, address, this, duration); - } - - /** Find a BluetoothDevice. If parameters name and address are not null, - * the returned object will have to match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter name optionally specify the name of the object you are - * waiting for - * @parameter address optionally specify the MAC address of the device you are - * waiting for - * @return An object matching the name and address. - */ - public BluetoothDevice find(String name, String address) { - return find(name, address, Duration.ZERO); - } - - /* D-Bus method calls: */ - /** Turns on device discovery if it is disabled. - * @return TRUE if discovery was successfully enabled - */ - public native boolean startDiscovery() throws BluetoothException; - - /** Turns off device discovery if it is enabled. - * @return TRUE if discovery was successfully disabled - */ - public native boolean stopDiscovery() throws BluetoothException; - - /** Returns a list of BluetoothDevices visible from this adapter. - * @return A list of BluetoothDevices visible on this adapter, - * NULL if an error occurred - */ - public native List<BluetoothDevice> getDevices(); - - /** - * Remove all the known devices - * - * @return The number of devices removed from internal list - * @throws BluetoothException - */ - public native int removeDevices() throws BluetoothException; - - /* D-Bus property accessors: */ - /** Returns the hardware address of this adapter. - * @return The hardware address of this adapter. - */ - public native String getAddress(); - - /** Returns the system name of this adapter. - * @return The system name of this adapter. - */ - public native String getName(); - - /** Returns the friendly name of this adapter. - * @return The friendly name of this adapter, or NULL if not set. - */ - public native String getAlias(); - - /** Sets the friendly name of this adapter. - */ - public native void setAlias(String value); - - /** Returns the Bluetooth class of the adapter. - * @return The Bluetooth class of the adapter. - */ - public native long getBluetoothClass(); - - /** Returns the power state the adapter. - * @return The power state of the adapter. - */ - public native boolean getPowered(); - - /** - * Enables notifications for the powered property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the powered - * property. - */ - public native void enablePoweredNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the powered property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disablePoweredNotifications(); - - /** Sets the power state the adapter. - */ - public native void setPowered(boolean value); - - /** Returns the discoverable state the adapter. - * @return The discoverable state of the adapter. - */ - public native boolean getDiscoverable(); - - /** - * Enables notifications for the discoverable property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the discoverable - * property. - */ - public native void enableDiscoverableNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the discoverable property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableDiscoverableNotifications(); - - /** Sets the discoverable state the adapter. - */ - public native void setDiscoverable(boolean value); - - /** Returns the discoverable timeout the adapter. - * @return The discoverable timeout of the adapter. - */ - public native long getDiscoverableTimeout(); - - /** Sets the discoverable timeout the adapter. A value of 0 disables - * the timeout. - */ - public native void setDiscoverableTimout(long value); - - /** - * This method connects to device without need of - * performing General Discovery. Connection mechanism is - * similar to Connect method from Device1 interface with - * exception that this method returns success when physical - * connection is established. After this method returns, - * services discovery will continue and any supported - * profile will be connected. There is no need for calling - * Connect on Device1 after this call. If connection was - * successful this method returns object path to created - * device object. - * - * @param address The Bluetooth device address of the remote - * device. This parameter is mandatory. - * @param addressType The Bluetooth device Address Type. This is - * address type that should be used for initial - * connection. If this parameter is not present - * BR/EDR device is created. - * Possible values: - * <ul> - * <li>{@code public} - Public address</li> - * <li>{@code random} - Random address</li> - * </ul> - */ - public native BluetoothDevice connectDevice(String address, String addressType); - - /** Returns the pairable state the adapter. - * @return The pairable state of the adapter. - */ - public native boolean getPairable(); - - /** - * Enables notifications for the pairable property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the pairable - * property. - */ - public native void enablePairableNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the pairable property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disablePairableNotifications(); - - /** Sets the discoverable state the adapter. - */ - public native void setPairable(boolean value); - - /** Returns the timeout in seconds after which pairable state turns off - * automatically, 0 means never. - * @return The pairable timeout of the adapter. - */ - public native long getPairableTimeout(); - - /** Sets the timeout after which pairable state turns off automatically, 0 means never. - */ - public native void setPairableTimeout(long value); - - /** Returns the discovering state the adapter. It can be modified through - * start_discovery/stop_discovery functions. - * @return The discovering state of the adapter. - */ - public native boolean getDiscovering(); - - /** - * Enables notifications for the discovering property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the discovering - * property. - */ - public native void enableDiscoveringNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the discovering property and unregisters the discovering - * object passed through the corresponding enable method. - */ - public native void disableDiscoveringNotifications(); - - /** Returns the UUIDs of the adapter. - * @return Array containing the UUIDs of the adapter, ends with NULL. - */ - public native String[] getUUIDs(); - - /** Returns the local ID of the adapter. - * @return The local ID of the adapter. - */ - public native String getModalias(); - - /** This method sets the device discovery filter for the caller. When this method is called - * with no filter parameter, filter is removed. - * <p> - * When a remote device is found that advertises any UUID from UUIDs, it will be reported if: - * <ul><li>Pathloss and RSSI are both empty.</li> - * <li>only Pathloss param is set, device advertise TX pwer, and computed pathloss is less than Pathloss param.</li> - * <li>only RSSI param is set, and received RSSI is higher than RSSI param.</li> - * </ul> - * <p> - * If one or more discovery filters have been set, the RSSI delta-threshold, - * that is imposed by StartDiscovery by default, will not be applied. - * <p> - * If "auto" transport is requested, scan will use LE, BREDR, or both, depending on what's - * currently enabled on the controller. - * - * @param uuids a list of device UUIDs - * @param rssi a rssi value - * @param pathloss a pathloss value - */ - public void setDiscoveryFilter(List<UUID> uuids, int rssi, int pathloss, TransportType transportType) { - List<String> uuidsFmt = new ArrayList<>(uuids.size()); - for (UUID uuid : uuids) { - uuidsFmt.add(uuid.toString()); - } - setDiscoveryFilter(uuidsFmt, rssi, pathloss, transportType.ordinal()); - } - - /** This method sets RSSI device discovery filter for the caller. When this method is called - * with 0, filter is removed. - * @param rssi a rssi value - */ - public void setRssiDiscoveryFilter(int rssi) { - setDiscoveryFilter(Collections.EMPTY_LIST, rssi, 0, TransportType.AUTO); - } - - /** Returns the interface name of the adapter. - * @return The interface name of the adapter. - */ - public String getInterfaceName() { - String[] path = getObjectPath().split("/"); - return path[path.length-1]; - } - - private native void delete(); - - private native void setDiscoveryFilter(List<String> uuids, int rssi, int pathloss, int transportType); - - private BluetoothAdapter(long instance) - { - super(instance); - } -} diff --git a/java/tinyb/BluetoothCallback.java b/java/tinyb/BluetoothCallback.java deleted file mode 100644 index 0cbe0ed0..00000000 --- a/java/tinyb/BluetoothCallback.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -public abstract class BluetoothCallback implements Runnable -{ - protected BluetoothObject bObj; - - /* - * public void run() is missing because it will be implemented - * in children classes - */ -} diff --git a/java/tinyb/BluetoothDevice.java b/java/tinyb/BluetoothDevice.java deleted file mode 100644 index da077117..00000000 --- a/java/tinyb/BluetoothDevice.java +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -import java.util.*; -import java.time.Duration; - -/** - * Provides access to Bluetooth devices. Follows the BlueZ adapter API - * available at: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/device-api.txt - */ -public class BluetoothDevice extends BluetoothObject -{ - public native BluetoothType getBluetoothType(); - public native BluetoothDevice clone(); - - static BluetoothType class_type() { return BluetoothType.DEVICE; } - - /** Find a BluetoothGattService. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattService you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattService find(String UUID, Duration duration) { - BluetoothManager manager = BluetoothManager.getBluetoothManager(); - return (BluetoothGattService) manager.find(BluetoothType.GATT_SERVICE, - null, UUID, this, duration); - } - - /** Find a BluetoothGattService. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattService you are - * waiting for - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattService find(String UUID) { - return find(UUID, Duration.ZERO); - } - - /* D-Bus method calls: */ - /** The connection to this device is removed, removing all connected - * profiles. - * @return TRUE if the device disconnected - */ - public native boolean disconnect() throws BluetoothException; - - /** An asynchronous connection to this device is initiated, - * connecting each profile flagged as auto-connectable. - */ - public native void connectAsyncStart() throws BluetoothException; - - /** Completion of the initiated asynchronous connection. - * @return TRUE if the device connected - */ - public native boolean connectAsyncFinish() throws BluetoothException; - - /** A connection to this device is established, connecting each profile - * flagged as auto-connectable. - * @return TRUE if the device connected - */ - public native boolean connect() throws BluetoothException; - - /** Connects a specific profile available on the device, given by UUID - * @param arg_UUID The UUID of the profile to be connected - * @return TRUE if the profile connected successfully - */ - public native boolean connectProfile(String arg_UUID) throws BluetoothException; - - /** Disconnects a specific profile available on the device, given by UUID - * @param arg_UUID The UUID of the profile to be disconnected - * @return TRUE if the profile disconnected successfully - */ - public native boolean disconnectProfile(String arg_UUID) throws BluetoothException; - - /** A connection to this device is established, and the device is then - * paired. - * @return TRUE if the device connected and paired - */ - public native boolean pair() throws BluetoothException; - - /** Remove this device from the system (like an unpair). - * @return TRUE if the device has been removed - * @throws BluetoothException - */ - public native boolean remove() throws BluetoothException; - - /** Cancels an initiated pairing operation - * @return TRUE if the paring is cancelled successfully - */ - public native boolean cancelPairing() throws BluetoothException; - - /** Returns a list of BluetoothGattServices available on this device. - * @return A list of BluetoothGattServices available on this device, - * NULL if an error occurred - */ - public native List<BluetoothGattService> getServices(); - - /* D-Bus property accessors: */ - /** Returns the hardware address of this device. - * @return The hardware address of this device. - */ - public native String getAddress(); - - /** Returns the remote friendly name of this device. - * @return The remote friendly name of this device, or NULL if not set. - */ - public native String getName(); - - /** Returns an alternative friendly name of this device. - * @return The alternative friendly name of this device, or NULL if not set. - */ - public native String getAlias(); - - /** Sets an alternative friendly name of this device. - */ - public native void setAlias(String value); - - /** Returns the Bluetooth class of the device. - * @return The Bluetooth class of the device. - */ - public native int getBluetoothClass(); - - /** Returns the appearance of the device, as found by GAP service. - * @return The appearance of the device, as found by GAP service. - */ - public native short getAppearance(); - - /** Returns the proposed icon name of the device. - * @return The proposed icon name, or NULL if not set. - */ - public native String getIcon(); - - /** Returns the paired state the device. - * @return The paired state of the device. - */ - public native boolean getPaired(); - - /** - * Enables notifications for the paired property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the paired - * property. - */ - public native void enablePairedNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the paired property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disablePairedNotifications(); - - /** Returns the trusted state the device. - * @return The trusted state of the device. - */ - public native boolean getTrusted(); - - /** - * Enables notifications for the trusted property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the trusted - * property. - */ - public native void enableTrustedNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the trusted property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableTrustedNotifications(); - - /** Sets the trusted state the device. - */ - public native void setTrusted(boolean value); - - /** Returns the blocked state the device. - * @return The blocked state of the device. - */ - public native boolean getBlocked(); - - /** - * Enables notifications for the blocked property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the blocked - * property. - */ - public native void enableBlockedNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the blocked property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableBlockedNotifications(); - - /** Sets the blocked state the device. - */ - public native void setBlocked(boolean value); - - /** Returns if device uses only pre-Bluetooth 2.1 pairing mechanism. - * @return True if device uses only pre-Bluetooth 2.1 pairing mechanism. - */ - public native boolean getLegacyPairing(); - - /** Returns the Received Signal Strength Indicator of the device. - * @return The Received Signal Strength Indicator of the device. - */ - public native short getRSSI(); - - /** - * Enables notifications for the RSSI property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Short> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the RSSI - * property. - */ - public native void enableRSSINotifications(BluetoothNotification<Short> callback); - /** - * Disables notifications of the RSSI property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableRSSINotifications(); - - /** Returns the connected state of the device. - * @return The connected state of the device. - */ - public native boolean getConnected(); - - /** - * Enables notifications for the connected property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the connected - * property. - */ - public native void enableConnectedNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the connected property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableConnectedNotifications(); - - /** Returns the UUIDs of the device. - * @return Array containing the UUIDs of the device, ends with NULL. - */ - public native String[] getUUIDs(); - - /** Returns the local ID of the adapter. - * @return The local ID of the adapter. - */ - public native String getModalias(); - - /** Returns the adapter on which this device was discovered or - * connected. - * @return The adapter. - */ - public native BluetoothAdapter getAdapter(); - - /** Returns a map containing manufacturer specific advertisement data. - * An entry has a uint16_t key and an array of bytes. - * @return manufacturer specific advertisement data. - */ - public native Map<Short, byte[]> getManufacturerData(); - - /** - * Enables notifications for the manufacturer data property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Map<Short, byte[]> > object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the manufacturer data - * property. - */ - public native void enableManufacturerDataNotifications(BluetoothNotification<Map<Short, byte[]> > callback); - /** - * Disables notifications of the manufacturer data property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableManufacturerDataNotifications(); - - - /** Returns a map containing service advertisement data. - * An entry has a UUID string key and an array of bytes. - * @return service advertisement data. - */ - public native Map<String, byte[]> getServiceData(); - - /** - * Enables notifications for the service data property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Map<String, byte[]> > object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the service data - * property. - */ - public native void enableServiceDataNotifications(BluetoothNotification<Map<String, byte[]> > callback); - /** - * Disables notifications of the service data property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableServiceDataNotifications(); - - - /** Returns the transmission power level (0 means unknown). - * @return the transmission power level (0 means unknown). - */ - public native short getTxPower (); - - /** Returns true if service discovery has ended. - * @return true if the service discovery has ended. - */ - public native boolean getServicesResolved (); - - /** - * Enables notifications for the services resolved property and calls run function of the - * BluetoothNotification object. - * @param callback A BluetoothNotification<Boolean> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the services resolved - * property. - */ - public native void enableServicesResolvedNotifications(BluetoothNotification<Boolean> callback); - /** - * Disables notifications of the services resolved property and unregisters the callback - * object passed through the corresponding enable method. - */ - public native void disableServicesResolvedNotifications(); - - private native void delete(); - - private BluetoothDevice(long instance) - { - super(instance); - } - -} diff --git a/java/tinyb/BluetoothException.java b/java/tinyb/BluetoothException.java deleted file mode 100644 index d14b4903..00000000 --- a/java/tinyb/BluetoothException.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Author: Petre Eftime <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -public class BluetoothException extends RuntimeException { - BluetoothException(String msg) { - super(msg); - } -} diff --git a/java/tinyb/BluetoothGattCharacteristic.java b/java/tinyb/BluetoothGattCharacteristic.java deleted file mode 100644 index 9e20fffc..00000000 --- a/java/tinyb/BluetoothGattCharacteristic.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -import java.util.*; -import java.time.Duration; - -/** - * Provides access to Bluetooth GATT characteristic. Follows the BlueZ adapter API - * available at: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt - */ -public class BluetoothGattCharacteristic extends BluetoothObject -{ - public native BluetoothType getBluetoothType(); - public native BluetoothGattCharacteristic clone(); - - static BluetoothType class_type() { return BluetoothType.GATT_CHARACTERISTIC; } - - /** Find a BluetoothGattDescriptor. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattDescriptor you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattDescriptor find(String UUID, Duration duration) { - BluetoothManager manager = BluetoothManager.getBluetoothManager(); - return (BluetoothGattDescriptor) manager.find(BluetoothType.GATT_DESCRIPTOR, - null, UUID, this, duration); - } - - /** Find a BluetoothGattDescriptor. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattDescriptor you are - * waiting for - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattDescriptor find(String UUID) { - return find(UUID, Duration.ZERO); - } - - /* D-Bus method calls: */ - /** Reads the value of this characteristic. - * @return A std::vector<unsgined char> containing the value of this characteristic. - */ - public native byte[] readValue() throws BluetoothException; - - /** - * Enables notifications for the value and calls run function of the BluetoothNotification - * object. It enables notifications for this characteristic at BLE level. - * @param callback A BluetoothNotification<byte[]> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the value - * property. - */ - public native void enableValueNotifications(BluetoothNotification<byte[]> callback); - /** - * Disables notifications of the value and unregisters the callback object - * passed through the corresponding enable method. It disables notications - * at BLE level for this characteristic. - */ - public native void disableValueNotifications(); - - /** Writes the value of this characteristic. - * @param[in] arg_value The data as vector<uchar> - * to be written packed in a GBytes struct - * @return TRUE if value was written succesfully - */ - public native boolean writeValue(byte[] argValue) throws BluetoothException; - - - /* D-Bus property accessors: */ - /** Get the UUID of this characteristic. - * @return The 128 byte UUID of this characteristic, NULL if an error occurred - */ - public native String getUUID(); - - /** Returns the service to which this characteristic belongs to. - * @return The service. - */ - public native BluetoothGattService getService(); - - /** Returns the cached value of this characteristic, if any. - * @return The cached value of this characteristic. - */ - public native byte[] getValue(); - - /** Returns true if notification for changes of this characteristic are - * activated. - * @return True if notificatios are activated. - */ - public native boolean getNotifying(); - - /** Returns the flags this characterstic has. - * @return A list of flags for this characteristic. - */ - public native String[] getFlags(); - - /** Returns a list of BluetoothGattDescriptors this characteristic exposes. - * @return A list of BluetoothGattDescriptors exposed by this characteristic - * NULL if an error occurred - */ - public native List<BluetoothGattDescriptor> getDescriptors(); - - private native void init(BluetoothGattCharacteristic obj); - - private native void delete(); - - private BluetoothGattCharacteristic(long instance) - { - super(instance); - } -} diff --git a/java/tinyb/BluetoothGattService.java b/java/tinyb/BluetoothGattService.java deleted file mode 100644 index 49b18739..00000000 --- a/java/tinyb/BluetoothGattService.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -import java.util.*; -import java.time.Duration; - -/** - * Provides access to Bluetooth GATT characteristic. Follows the BlueZ adapter API - * available at: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt - */ -public class BluetoothGattService extends BluetoothObject -{ - public native BluetoothType getBluetoothType(); - public native BluetoothAdapter clone(); - - static BluetoothType class_type() { return BluetoothType.GATT_SERVICE; } - - /** Find a BluetoothGattCharacteristic. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattCharacteristic you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattCharacteristic find(String UUID, Duration duration) { - BluetoothManager manager = BluetoothManager.getBluetoothManager(); - return (BluetoothGattCharacteristic) manager.find(BluetoothType.GATT_CHARACTERISTIC, - null, UUID, this, duration); - } - - /** Find a BluetoothGattCharacteristic. If parameter UUID is not null, - * the returned object will have to match it. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter UUID optionally specify the UUID of the BluetoothGattDescriptor you are - * waiting for - * @return An object matching the UUID or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothGattCharacteristic find(String UUID) { - return find(UUID, Duration.ZERO); - } - - /* D-Bus property accessors: */ - - /** Get the UUID of this service - * @return The 128 byte UUID of this service, NULL if an error occurred - */ - public native String getUUID(); - - /** Returns the device to which this service belongs to. - * @return The device. - */ - public native BluetoothDevice getDevice(); - - /** Returns true if this service is a primary service, false if secondary. - * @return true if this service is a primary service, false if secondary. - */ - public native boolean getPrimary(); - - /** Returns a list of BluetoothGattCharacteristics this service exposes. - * @return A list of BluetoothGattCharacteristics exposed by this service - */ - public native List<BluetoothGattCharacteristic> getCharacteristics(); - - private native void delete(); - - private BluetoothGattService(long instance) - { - super(instance); - } -} diff --git a/java/tinyb/BluetoothManager.java b/java/tinyb/BluetoothManager.java deleted file mode 100644 index 489ac3eb..00000000 --- a/java/tinyb/BluetoothManager.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -import java.util.*; -import java.time.Duration; - -public class BluetoothManager -{ - private long nativeInstance; - private static BluetoothManager inst; - - /** - * The thread to watch for nearby devices - */ - private Thread nearbyThread = null; - - static { - try { - System.loadLibrary("tinyb"); - System.loadLibrary("javatinyb"); - } catch (UnsatisfiedLinkError e) { - System.err.println("Native code library failed to load.\n" + e); - } - } - - private native static String getNativeAPIVersion(); - - public native BluetoothType getBluetoothType(); - - private native BluetoothObject find(int type, String name, String identifier, BluetoothObject parent, long milliseconds); - - /** Find a BluetoothObject of a type matching type. If parameters name, - * identifier and parent are not null, the returned object will have to - * match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter type specify the type of the object you are - * waiting for, NONE means anything. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the name, identifier, parent or null if not found before - * timeout expires or event is canceled. - */ - public BluetoothObject find(BluetoothType type, String name, String identifier, BluetoothObject parent, Duration timeout) { - return find(type.ordinal(), name, identifier, parent, timeout.toNanos() / 1000000); - } - - - /** Find a BluetoothObject of a type matching type. If parameters name, - * identifier and parent are not null, the returned object will have to - * match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter type specify the type of the object you are - * waiting for, NONE means anything. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @return An object matching the name, identifier and parent. - */ - public BluetoothObject find(BluetoothType type, String name, String identifier, BluetoothObject parent) { - return find(type, name, identifier, parent, Duration.ZERO); - } - - /** Find a BluetoothObject of type T. If parameters name, identifier and - * parent are not null, the returned object will have to match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @parameter timeout the function will return after timeout time, a - * value of zero means wait forever. If object is not found during this time null will be returned. - * @return An object matching the name, identifier, parent or null if not found before - * timeout expires or event is canceled. - */ - public <T extends BluetoothObject> T find(String name, String identifier, BluetoothObject parent, Duration timeout) { - return (T) find(T.class_type().ordinal(), name, identifier, parent, timeout.toNanos() / 1000000); - } - - /** Find a BluetoothObject of type T. If parameters name, identifier and - * parent are not null, the returned object will have to match them. - * It will first check for existing objects. It will not turn on discovery - * or connect to devices. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @return An object matching the name, identifier and parent. - */ - public <T extends BluetoothObject> T find(String name, String identifier, BluetoothObject parent) { - return (T) find(name, identifier, parent, Duration.ZERO); - } - - /** Return a BluetoothObject of a type matching type. If parameters name, - * identifier and parent are not null, the returned object will have to - * match them. Only objects which are already in the system will be returned. - * @parameter type specify the type of the object you are - * waiting for, NONE means anything. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @return An object matching the name, identifier, parent or null if not found. - */ - public BluetoothObject getObject(BluetoothType type, String name, - String identifier, BluetoothObject parent) { - return getObject(type.ordinal(), name, identifier, parent); - } - private native BluetoothObject getObject(int type, String name, - String identifier, BluetoothObject parent); - - /** Return a List of BluetoothObject of a type matching type. If parameters name, - * identifier and parent are not null, the returned object will have to - * match them. Only objects which are already in the system will be returned. - * @parameter type specify the type of the object you are - * waiting for, NONE means anything. - * @parameter name optionally specify the name of the object you are - * waiting for (for Adapter or Device) - * @parameter identifier optionally specify the identifier of the object you are - * waiting for (UUID for GattService, GattCharacteristic or GattDescriptor, address - * for Adapter or Device) - * @parameter parent optionally specify the parent of the object you are - * waiting for - * @return A vector of object matching the name, identifier, parent. - */ - public List<BluetoothObject> getObjects(BluetoothType type, String name, - String identifier, BluetoothObject parent) { - return getObjects(type.ordinal(), name, identifier, parent); - } - private native List<BluetoothObject> getObjects(int type, String name, - String identifier, BluetoothObject parent); - - /** Returns a list of BluetoothAdapters available in the system - * @return A list of BluetoothAdapters available in the system - */ - public native List<BluetoothAdapter> getAdapters(); - - /** Returns a list of discovered BluetoothDevices - * @return A list of discovered BluetoothDevices - */ - public native List<BluetoothDevice> getDevices(); - - /** Returns a list of available BluetoothGattServices - * @return A list of available BluetoothGattServices - */ - public native List<BluetoothGattService> getServices(); - - /** Sets a default adapter to use for discovery. - * @return TRUE if the device was set - */ - public native boolean setDefaultAdapter(BluetoothAdapter adapter); - - /** Gets the default adapter to use for discovery. - * <p> - * System default is the last detected adapter at initialisation. - * </p> - * @return the used default adapter - */ - public native BluetoothAdapter getDefaultAdapter(); - - /** Turns on device discovery on the default adapter if it is disabled. - * @return TRUE if discovery was successfully enabled - */ - public native boolean startDiscovery() throws BluetoothException; - - /** Turns off device discovery on the default adapter if it is enabled. - * @return TRUE if discovery was successfully disabled - */ - public native boolean stopDiscovery() throws BluetoothException; - - /** Returns if the discovers is running or not. - * @return TRUE if discovery is running - */ - public native boolean getDiscovering() throws BluetoothException; - - /** - * When called, each new device found will fire an event to the passed - * listener<p> - * - * This method will create a new thread to handle the discovery process - * which is a simple polling of the current list (getDevices) - * <p> - * - * The thread is stopped when the nearbyStopDiscovery is called<p> - * - * @param listener - * @param pollingRate The polling rate is miliseconds (1000 = 1s) - * @param onlyManufacturerFilled If true, then only if the manufacturer data is filled, the event will be fired - */ - public void startNearbyDiscovery(final BluetoothDeviceDiscoveryListener listener, final int pollingRate, final boolean onlyManufacturerFilled) { - //--- If alreay started, does nothing - if ((nearbyThread != null) && nearbyThread.isAlive()) return; - - //--- Remove all devices to have a clean start - getAdapters().get(0).removeDevices(); - - //--- Start the bluez discovery - startDiscovery(); - - //--- Thread to poll the devices list - nearbyThread = new Thread() { - public void run() { - //--- The key is the address - HashMap<String, BluetoothDevice> discovered = new HashMap<String, BluetoothDevice>(); - try { - while (Thread.interrupted() == false) { - List<BluetoothDevice> list = getDevices(); - for (BluetoothDevice d:list) { - if (!discovered.containsKey(d.getAddress())) { - if (onlyManufacturerFilled) { - if (!d.getManufacturerData().isEmpty()) { - discovered.put(d.getAddress(), d); - if (listener != null) listener.bluetoothDeviceDiscovered(d); - } - - } else { - discovered.put(d.getAddress(), d); - if (listener != null) listener.bluetoothDeviceDiscovered(d); - } - } - } - //--- Polling rate of 1 second - sleep(pollingRate); - } - - } catch (InterruptedException ex) { - //--- Stopped by user or jvm - } - stopDiscovery(); - - } - }; - nearbyThread.start(); - - } - - /** - * Stop the nearby thread - */ - public void stopNearbyDiscovery() { - if ((nearbyThread != null) && nearbyThread.isAlive()) nearbyThread.interrupt(); - - } - - /** - * Interface to implement to receive the device discovery event - */ - public interface BluetoothDeviceDiscoveryListener { - - public void bluetoothDeviceDiscovered(BluetoothDevice device); - } - - private native void init() throws BluetoothException; - private native void delete(); - private BluetoothManager() - { - init(); - } - - /** Returns an instance of BluetoothManager, to be used instead of constructor. - * @return An initialized BluetoothManager instance. - */ - public static synchronized BluetoothManager getBluetoothManager() throws RuntimeException, BluetoothException - { - if (inst == null) - { - String nativeAPIVersion = getNativeAPIVersion(); - String APIVersion = BluetoothManager.class.getPackage().getSpecificationVersion(); - if ( null != APIVersion && APIVersion.equals(nativeAPIVersion) == false) { - String[] nativeAPIVersionCode = nativeAPIVersion.split("\\D"); - String[] APIVersionCode = APIVersion.split("\\D"); - if (APIVersionCode[0].equals(nativeAPIVersionCode[0]) == false) { - if (Integer.valueOf(APIVersionCode[0]) < Integer.valueOf(nativeAPIVersionCode[0])) - throw new RuntimeException("Java library is out of date. Please update the Java library."); - else throw new RuntimeException("Native library is out of date. Please update the native library."); - } - else if (APIVersionCode[0].equals("0") == true) { - if (Integer.valueOf(APIVersionCode[1]) < Integer.valueOf(nativeAPIVersionCode[1])) - throw new RuntimeException("Java library is out of date. Please update the Java library."); - else throw new RuntimeException("Native library is out of date. Please update the native library."); - } - else if (Integer.valueOf(APIVersionCode[1]) < Integer.valueOf(nativeAPIVersionCode[1])) - System.err.println("Java library is out of date. Please update the Java library."); - else System.err.println("Native library is out of date. Please update the native library."); - } - inst = new BluetoothManager(); - inst.init(); - } - return inst; - } - - protected void finalize() - { - delete(); - } -} diff --git a/java/tinyb/BluetoothNotification.java b/java/tinyb/BluetoothNotification.java deleted file mode 100644 index 79fe800c..00000000 --- a/java/tinyb/BluetoothNotification.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: Petre Eftime <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -/* - * This interface is used by notifications. - * Implement a class inheriting BluetoothNotification and pass an object of that type - * to the enable*Notifications function. When a notification of that type is received, - * the run function of the class will be called. - */ -public interface BluetoothNotification<T> { - public void run(T value); -} diff --git a/java/tinyb/BluetoothType.java b/java/tinyb/BluetoothType.java deleted file mode 100644 index ac2fb02e..00000000 --- a/java/tinyb/BluetoothType.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -public enum BluetoothType -{ - NONE, ADAPTER, DEVICE, - GATT_SERVICE, GATT_CHARACTERISTIC, - GATT_DESCRIPTOR; - - private long nativeInstance; -} diff --git a/java/tinyb/ObjectArgCallback.java b/java/tinyb/ObjectArgCallback.java deleted file mode 100644 index 898c9cbc..00000000 --- a/java/tinyb/ObjectArgCallback.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -public class ObjectArgCallback extends BluetoothCallback -{ - private Object callbackArg; - - public ObjectArgCallback(BluetoothObject bObj, Object callbackArg) - { - this.bObj = bObj; - this.callbackArg = callbackArg; - } - - public void run() - { - } -} diff --git a/java/tinyb/ObjectArrayArgCallback.java b/java/tinyb/ObjectArrayArgCallback.java deleted file mode 100644 index b0d83410..00000000 --- a/java/tinyb/ObjectArrayArgCallback.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Author: Andrei Vasiliu <[email protected]> - * Copyright (c) 2016 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package tinyb; - -public class ObjectArrayArgCallback extends BluetoothCallback -{ - private Object[] callbackArg; - - public ObjectArrayArgCallback(BluetoothObject bObj, Object[] callbackArg) - { - this.bObj = bObj; - this.callbackArg = callbackArg; - } - - public void run() - { - } -} diff --git a/java/tinyb/TransportType.java b/java/tinyb/TransportType.java deleted file mode 100644 index ab71a1cb..00000000 --- a/java/tinyb/TransportType.java +++ /dev/null @@ -1,19 +0,0 @@ -package tinyb; - -/** - * TransportType determines type of bluetooth scan. - */ -public enum TransportType { - /** - * interleaved scan - */ - AUTO, - /** - * BR/EDR inquiry - */ - BREDR, - /** - * LE scan only - */ - LE -} diff --git a/java/tinyb/dbus/DBusAdapter.java b/java/tinyb/dbus/DBusAdapter.java new file mode 100644 index 00000000..695677fe --- /dev/null +++ b/java/tinyb/dbus/DBusAdapter.java @@ -0,0 +1,189 @@ +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * + * Author: Andrei Vasiliu <[email protected]> + * Copyright (c) 2016 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package tinyb.dbus; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.tinyb.BluetoothAdapter; +import org.tinyb.BluetoothDevice; +import org.tinyb.BluetoothException; +import org.tinyb.BluetoothManager; +import org.tinyb.BluetoothNotification; +import org.tinyb.BluetoothType; +import org.tinyb.TransportType; + +public class DBusAdapter extends DBusObject implements BluetoothAdapter +{ + @Override + public native BluetoothType getBluetoothType(); + + @Override + public native BluetoothAdapter clone(); + + static BluetoothType class_type() { return BluetoothType.ADAPTER; } + + @Override + public BluetoothDevice find(final String name, final String address, final long timeoutMS) { + final BluetoothManager manager = DBusManager.getBluetoothManager(); + return (BluetoothDevice) manager.find(BluetoothType.DEVICE, name, address, this, timeoutMS); + } + + @Override + public BluetoothDevice find(final String name, final String address) { + return find(name, address, 0); + } + + /* D-Bus method calls: */ + + @Override + public native boolean startDiscovery() throws BluetoothException; + + @Override + public native boolean stopDiscovery() throws BluetoothException; + + @Override + public native List<BluetoothDevice> getDevices(); + + @Override + public native int removeDevices() throws BluetoothException; + + /* D-Bus property accessors: */ + + @Override + public native String getAddress(); + + @Override + public native String getName(); + + @Override + public native String getAlias(); + + @Override + public native void setAlias(String value); + + @Override + public native long getBluetoothClass(); + + @Override + public native boolean getPowered(); + + @Override + public native void enablePoweredNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disablePoweredNotifications(); + + @Override + public native void setPowered(boolean value); + + @Override + public native boolean getDiscoverable(); + + @Override + public native void enableDiscoverableNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableDiscoverableNotifications(); + + @Override + public native void setDiscoverable(boolean value); + + @Override + public native long getDiscoverableTimeout(); + + @Override + public native void setDiscoverableTimout(long value); + + @Override + public native BluetoothDevice connectDevice(String address, String addressType); + + @Override + public native boolean getPairable(); + + @Override + public native void enablePairableNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disablePairableNotifications(); + + @Override + public native void setPairable(boolean value); + + @Override + public native long getPairableTimeout(); + + @Override + public native void setPairableTimeout(long value); + + @Override + public native boolean getDiscovering(); + + @Override + public native void enableDiscoveringNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableDiscoveringNotifications(); + + @Override + public native String[] getUUIDs(); + + @Override + public native String getModalias(); + + @Override + public void setDiscoveryFilter(final List<UUID> uuids, final int rssi, final int pathloss, final TransportType transportType) { + final List<String> uuidsFmt = new ArrayList<>(uuids.size()); + for (final UUID uuid : uuids) { + uuidsFmt.add(uuid.toString()); + } + setDiscoveryFilter(uuidsFmt, rssi, pathloss, transportType.ordinal()); + } + + public void setRssiDiscoveryFilter(final int rssi) { + setDiscoveryFilter(Collections.EMPTY_LIST, rssi, 0, TransportType.AUTO); + } + + @Override + public String getInterfaceName() { + final String[] path = getObjectPath().split("/"); + return path[path.length-1]; + } + + private native void delete(); + + private native void setDiscoveryFilter(List<String> uuids, int rssi, int pathloss, int transportType); + + private DBusAdapter(final long instance) + { + super(instance); + } +} diff --git a/java/tinyb/dbus/DBusDevice.java b/java/tinyb/dbus/DBusDevice.java new file mode 100644 index 00000000..bb1919b9 --- /dev/null +++ b/java/tinyb/dbus/DBusDevice.java @@ -0,0 +1,216 @@ +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * + * Author: Andrei Vasiliu <[email protected]> + * Copyright (c) 2016 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package tinyb.dbus; + +import java.util.List; +import java.util.Map; + +import org.tinyb.BluetoothDevice; +import org.tinyb.BluetoothException; +import org.tinyb.BluetoothGattService; +import org.tinyb.BluetoothManager; +import org.tinyb.BluetoothNotification; +import org.tinyb.BluetoothType; + +public class DBusDevice extends DBusObject implements BluetoothDevice +{ + @Override + public native BluetoothType getBluetoothType(); + @Override + public native DBusDevice clone(); + + static BluetoothType class_type() { return BluetoothType.DEVICE; } + + @Override + public BluetoothGattService find(final String UUID, final long timeoutMS) { + final BluetoothManager manager = DBusManager.getBluetoothManager(); + return (BluetoothGattService) manager.find(BluetoothType.GATT_SERVICE, + null, UUID, this, timeoutMS); + } + + @Override + public BluetoothGattService find(final String UUID) { + return find(UUID, 0); + } + + /* D-Bus method calls: */ + + @Override + public native boolean disconnect() throws BluetoothException; + + public native void connectAsyncStart() throws BluetoothException; + + public native boolean connectAsyncFinish() throws BluetoothException; + + @Override + public native boolean connect() throws BluetoothException; + + @Override + public native boolean connectProfile(String arg_UUID) throws BluetoothException; + + @Override + public native boolean disconnectProfile(String arg_UUID) throws BluetoothException; + + @Override + public native boolean pair() throws BluetoothException; + + @Override + public native boolean remove() throws BluetoothException; + + @Override + public native boolean cancelPairing() throws BluetoothException; + + @Override + public native List<BluetoothGattService> getServices(); + + /* D-Bus property accessors: */ + + @Override + public native String getAddress(); + + @Override + public native String getName(); + + @Override + public native String getAlias(); + + @Override + public native void setAlias(String value); + + @Override + public native int getBluetoothClass(); + + @Override + public native short getAppearance(); + + @Override + public native String getIcon(); + + @Override + public native boolean getPaired(); + + @Override + public native void enablePairedNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disablePairedNotifications(); + + @Override + public native boolean getTrusted(); + + @Override + public native void enableTrustedNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableTrustedNotifications(); + + @Override + public native void setTrusted(boolean value); + + @Override + public native boolean getBlocked(); + + @Override + public native void enableBlockedNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableBlockedNotifications(); + + @Override + public native void setBlocked(boolean value); + + @Override + public native boolean getLegacyPairing(); + + @Override + public native short getRSSI(); + + @Override + public native void enableRSSINotifications(BluetoothNotification<Short> callback); + + @Override + public native void disableRSSINotifications(); + + @Override + public native boolean getConnected(); + + @Override + public native void enableConnectedNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableConnectedNotifications(); + + @Override + public native String[] getUUIDs(); + + @Override + public native String getModalias(); + + @Override + public native DBusAdapter getAdapter(); + + @Override + public native Map<Short, byte[]> getManufacturerData(); + + @Override + public native void enableManufacturerDataNotifications(BluetoothNotification<Map<Short, byte[]> > callback); + + @Override + public native void disableManufacturerDataNotifications(); + + + @Override + public native Map<String, byte[]> getServiceData(); + + @Override + public native void enableServiceDataNotifications(BluetoothNotification<Map<String, byte[]> > callback); + + @Override + public native void disableServiceDataNotifications(); + + @Override + public native short getTxPower (); + + @Override + public native boolean getServicesResolved (); + + @Override + public native void enableServicesResolvedNotifications(BluetoothNotification<Boolean> callback); + + @Override + public native void disableServicesResolvedNotifications(); + + private native void delete(); + + private DBusDevice(final long instance) + { + super(instance); + } + +} diff --git a/java/tinyb/BluetoothEvent.java b/java/tinyb/dbus/DBusEvent.java index b2141131..fe6d4c40 100644 --- a/java/tinyb/BluetoothEvent.java +++ b/java/tinyb/dbus/DBusEvent.java @@ -22,30 +22,38 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package tinyb; +package tinyb.dbus; -import java.util.*; +import org.tinyb.BluetoothCallback; +import org.tinyb.BluetoothEvent; +import org.tinyb.BluetoothType; -public class BluetoothEvent +public class DBusEvent implements BluetoothEvent { private long nativeInstance; + @Override public native BluetoothType getType(); + @Override public native String getName(); + @Override public native String getIdentifier(); + @Override public native boolean executeCallback(); + @Override public native boolean hasCallback(); private native void init(BluetoothType type, String name, String identifier, - BluetoothObject parent, BluetoothCallback cb, Object data); + DBusObject parent, BluetoothCallback cb, Object data); private native void delete(); - public BluetoothEvent(BluetoothType type, String name, String identifier, - BluetoothObject parent, BluetoothCallback cb, Object data) + public DBusEvent(final BluetoothType type, final String name, final String identifier, + final DBusObject parent, final BluetoothCallback cb, final Object data) { init(type, name, identifier, parent, cb, data); } + @Override protected void finalize() { delete(); diff --git a/java/tinyb/dbus/DBusGattCharacteristic.java b/java/tinyb/dbus/DBusGattCharacteristic.java new file mode 100644 index 00000000..3ca5ab93 --- /dev/null +++ b/java/tinyb/dbus/DBusGattCharacteristic.java @@ -0,0 +1,104 @@ +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * + * Author: Andrei Vasiliu <[email protected]> + * Copyright (c) 2016 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package tinyb.dbus; + +import java.util.List; + +import org.tinyb.BluetoothException; +import org.tinyb.BluetoothGattCharacteristic; +import org.tinyb.BluetoothGattDescriptor; +import org.tinyb.BluetoothGattService; +import org.tinyb.BluetoothManager; +import org.tinyb.BluetoothNotification; +import org.tinyb.BluetoothType; + +public class DBusGattCharacteristic extends DBusObject implements BluetoothGattCharacteristic +{ + @Override + public native BluetoothType getBluetoothType(); + @Override + public native DBusGattCharacteristic clone(); + + static BluetoothType class_type() { return BluetoothType.GATT_CHARACTERISTIC; } + + @Override + public BluetoothGattDescriptor find(final String UUID, final long timeoutMS) { + final BluetoothManager manager = DBusManager.getBluetoothManager(); + return (BluetoothGattDescriptor) manager.find(BluetoothType.GATT_DESCRIPTOR, + null, UUID, this, timeoutMS); + } + + @Override + public BluetoothGattDescriptor find(final String UUID) { + return find(UUID, 0); + } + + /* D-Bus method calls: */ + + @Override + public native byte[] readValue() throws BluetoothException; + + @Override + public native void enableValueNotifications(BluetoothNotification<byte[]> callback); + + @Override + public native void disableValueNotifications(); + + @Override + public native boolean writeValue(byte[] argValue) throws BluetoothException; + + /* D-Bus property accessors: */ + + @Override + public native String getUUID(); + + @Override + public native BluetoothGattService getService(); + + @Override + public native byte[] getValue(); + + @Override + public native boolean getNotifying(); + + @Override + public native String[] getFlags(); + + @Override + public native List<BluetoothGattDescriptor> getDescriptors(); + + private native void init(DBusGattCharacteristic obj); + + private native void delete(); + + private DBusGattCharacteristic(final long instance) + { + super(instance); + } +} diff --git a/java/tinyb/BluetoothGattDescriptor.java b/java/tinyb/dbus/DBusGattDescriptor.java index d5911d23..5c59ea8c 100644 --- a/java/tinyb/BluetoothGattDescriptor.java +++ b/java/tinyb/dbus/DBusGattDescriptor.java @@ -1,4 +1,8 @@ -/* +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * * Author: Andrei Vasiliu <[email protected]> * Copyright (c) 2016 Intel Corporation. * @@ -22,67 +26,50 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package tinyb; +package tinyb.dbus; -import java.util.*; +import org.tinyb.BluetoothException; +import org.tinyb.BluetoothGattDescriptor; +import org.tinyb.BluetoothNotification; +import org.tinyb.BluetoothType; -/** - * Provides access to Bluetooth GATT descriptor. Follows the BlueZ adapter API - * available at: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt - */ -public class BluetoothGattDescriptor extends BluetoothObject +public class DBusGattDescriptor extends DBusObject implements BluetoothGattDescriptor { + @Override public native BluetoothType getBluetoothType(); - public native BluetoothAdapter clone(); + @Override + public native BluetoothGattDescriptor clone(); static BluetoothType class_type() { return BluetoothType.GATT_DESCRIPTOR; } /* D-Bus method calls: */ - /** Reads the value of this descriptor - * @return A vector<uchar> containing data from this descriptor - */ + + @Override public native byte[] readValue(); - /** Writes the value of this descriptor. - * @param[in] arg_value The data as vector<uchar> - * to be written packed in a GBytes struct - * @return TRUE if value was written succesfully - */ + @Override public native boolean writeValue(byte[] argValue) throws BluetoothException; - /** - * Enables notifications for the value and calls run function of the BluetoothNotification - * object. - * @param callback A BluetoothNotification<byte[]> object. Its run function will be called - * when a notification is issued. The run function will deliver the new value of the value - * property. - */ + @Override public native void enableValueNotifications(BluetoothNotification<byte[]> callback); - /** - * Disables notifications of the value and unregisters the callback object - * passed through the corresponding enable method. - */ + + @Override public native void disableValueNotifications(); /* D-Bus property accessors: */ - /** Get the UUID of this descriptor. - * @return The 128 byte UUID of this descriptor, NULL if an error occurred - */ + + @Override public native String getUUID(); - /** Returns the characteristic to which this descriptor belongs to. - * @return The characteristic. - */ - public native BluetoothGattCharacteristic getCharacteristic(); + @Override + public native DBusGattCharacteristic getCharacteristic(); - /** Returns the cached value of this descriptor, if any. - * @return The cached value of this descriptor. - */ + @Override public native byte[] getValue(); private native void delete(); - private BluetoothGattDescriptor(long instance) + private DBusGattDescriptor(final long instance) { super(instance); } diff --git a/java/tinyb/dbus/DBusGattService.java b/java/tinyb/dbus/DBusGattService.java new file mode 100644 index 00000000..092662a8 --- /dev/null +++ b/java/tinyb/dbus/DBusGattService.java @@ -0,0 +1,80 @@ +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * + * Author: Andrei Vasiliu <[email protected]> + * Copyright (c) 2016 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package tinyb.dbus; + +import java.util.List; + +import org.tinyb.BluetoothGattCharacteristic; +import org.tinyb.BluetoothGattService; +import org.tinyb.BluetoothManager; +import org.tinyb.BluetoothType; + +public class DBusGattService extends DBusObject implements BluetoothGattService +{ + @Override + public native BluetoothType getBluetoothType(); + + @Override + public native BluetoothGattService clone(); + + static BluetoothType class_type() { return BluetoothType.GATT_SERVICE; } + + @Override + public BluetoothGattCharacteristic find(final String UUID, final long timeoutMS) { + final BluetoothManager manager = DBusManager.getBluetoothManager(); + return (DBusGattCharacteristic) manager.find(BluetoothType.GATT_CHARACTERISTIC, + null, UUID, this, timeoutMS); + } + + @Override + public BluetoothGattCharacteristic find(final String UUID) { + return find(UUID, 0); + } + + /* D-Bus property accessors: */ + + @Override + public native String getUUID(); + + @Override + public native DBusDevice getDevice(); + + @Override + public native boolean getPrimary(); + + @Override + public native List<BluetoothGattCharacteristic> getCharacteristics(); + + private native void delete(); + + private DBusGattService(final long instance) + { + super(instance); + } +} diff --git a/java/tinyb/dbus/DBusManager.java b/java/tinyb/dbus/DBusManager.java new file mode 100644 index 00000000..e3e86ab6 --- /dev/null +++ b/java/tinyb/dbus/DBusManager.java @@ -0,0 +1,165 @@ +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * + * Author: Andrei Vasiliu <[email protected]> + * Copyright (c) 2016 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package tinyb.dbus; + +import java.util.List; + +import org.tinyb.BluetoothAdapter; +import org.tinyb.BluetoothDevice; +import org.tinyb.BluetoothException; +import org.tinyb.BluetoothGattService; +import org.tinyb.BluetoothObject; +import org.tinyb.BluetoothManager; +import org.tinyb.BluetoothType; + +public class DBusManager implements BluetoothManager +{ + private long nativeInstance; + private static DBusManager inst; + + static { + try { + System.loadLibrary("tinyb"); + System.loadLibrary("javatinyb"); + } catch (final UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load.\n" + e); + } + } + + private native static String getNativeAPIVersion(); + + public native BluetoothType getBluetoothType(); + + private native DBusObject find(int type, String name, String identifier, BluetoothObject parent, long milliseconds); + + @Override + public DBusObject find(final BluetoothType type, final String name, final String identifier, final BluetoothObject parent, final long timeoutMS) { + return find(type.ordinal(), name, identifier, parent, timeoutMS); + } + + @Override + public DBusObject find(final BluetoothType type, final String name, final String identifier, final BluetoothObject parent) { + return find(type, name, identifier, parent, 0); + } + + @SuppressWarnings("unchecked") + @Override + public <T extends BluetoothObject> T find(final String name, final String identifier, final BluetoothObject parent, final long timeoutMS) { + return (T) find(DBusObject.class_type().ordinal(), name, identifier, parent, timeoutMS); + } + + @SuppressWarnings("unchecked") + @Override + public <T extends BluetoothObject> T find(final String name, final String identifier, final BluetoothObject parent) { + return (T) find(name, identifier, parent, 0); + } + + @Override + public BluetoothObject getObject(final BluetoothType type, final String name, + final String identifier, final BluetoothObject parent) { + return getObject(type.ordinal(), name, identifier, parent); + } + private native BluetoothObject getObject(int type, String name, String identifier, BluetoothObject parent); + + @Override + public List<BluetoothObject> getObjects(final BluetoothType type, final String name, + final String identifier, final BluetoothObject parent) { + return getObjects(type.ordinal(), name, identifier, parent); + } + private native List<BluetoothObject> getObjects(int type, String name, String identifier, BluetoothObject parent); + + @Override + public native List<BluetoothAdapter> getAdapters(); + + @Override + public native List<BluetoothDevice> getDevices(); + + @Override + public native List<BluetoothGattService> getServices(); + + @Override + public native boolean setDefaultAdapter(BluetoothAdapter adapter); + + @Override + public native BluetoothAdapter getDefaultAdapter(); + + @Override + public native boolean startDiscovery() throws BluetoothException; + + @Override + public native boolean stopDiscovery() throws BluetoothException; + + @Override + public native boolean getDiscovering() throws BluetoothException; + + private native void init() throws BluetoothException; + private native void delete(); + private DBusManager() + { + init(); + } + + /** Returns an instance of BluetoothManager, to be used instead of constructor. + * @return An initialized BluetoothManager instance. + */ + public static synchronized BluetoothManager getBluetoothManager() throws RuntimeException, BluetoothException + { + if (inst == null) + { + final String nativeAPIVersion = getNativeAPIVersion(); + final String APIVersion = DBusManager.class.getPackage().getSpecificationVersion(); + if ( null != APIVersion && APIVersion.equals(nativeAPIVersion) == false) { + final String[] nativeAPIVersionCode = nativeAPIVersion.split("\\D"); + final String[] APIVersionCode = APIVersion.split("\\D"); + if (APIVersionCode[0].equals(nativeAPIVersionCode[0]) == false) { + if (Integer.valueOf(APIVersionCode[0]) < Integer.valueOf(nativeAPIVersionCode[0])) + throw new RuntimeException("Java library is out of date. Please update the Java library."); + else throw new RuntimeException("Native library is out of date. Please update the native library."); + } + else if (APIVersionCode[0].equals("0") == true) { + if (Integer.valueOf(APIVersionCode[1]) < Integer.valueOf(nativeAPIVersionCode[1])) + throw new RuntimeException("Java library is out of date. Please update the Java library."); + else throw new RuntimeException("Native library is out of date. Please update the native library."); + } + else if (Integer.valueOf(APIVersionCode[1]) < Integer.valueOf(nativeAPIVersionCode[1])) + System.err.println("Java library is out of date. Please update the Java library."); + else System.err.println("Native library is out of date. Please update the native library."); + } + inst = new DBusManager(); + inst.init(); + } + return inst; + } + + @Override + protected void finalize() + { + delete(); + } +} diff --git a/java/tinyb/BluetoothObject.java b/java/tinyb/dbus/DBusObject.java index 2afb8c3c..a9095d1a 100644 --- a/java/tinyb/BluetoothObject.java +++ b/java/tinyb/dbus/DBusObject.java @@ -1,4 +1,8 @@ -/* +/** + * Author: Sven Gothel <[email protected]> + * Copyright (c) 2020 Gothel Software e.K. + * Copyright (c) 2020 ZAFENA AB + * * Author: Andrei Vasiliu <[email protected]> * Copyright (c) 2016 Intel Corporation. * @@ -22,11 +26,12 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package tinyb; +package tinyb.dbus; -import java.util.*; +import org.tinyb.BluetoothObject; +import org.tinyb.BluetoothType; -public abstract class BluetoothObject implements Cloneable,AutoCloseable +public class DBusObject implements BluetoothObject { protected long nativeInstance; private boolean isValid; @@ -34,55 +39,50 @@ public abstract class BluetoothObject implements Cloneable,AutoCloseable static { try { System.loadLibrary("javatinyb"); - } catch (UnsatisfiedLinkError e) { + } catch (final UnsatisfiedLinkError e) { System.err.println("Native code library failed to load.\n" + e); } } static BluetoothType class_type() { return BluetoothType.NONE; } - /** Returns the BluetoothType of this object - * @return The BluetoothType of this object - */ + @Override public native BluetoothType getBluetoothType(); - /** Returns a clone of the BluetoothObject - * @return A clone of the BluetoothObject - */ + @Override public native BluetoothObject clone(); private native void delete(); - private native boolean operatorEqual(BluetoothObject obj); + private native boolean operatorEqual(DBusObject obj); - protected BluetoothObject(long instance) + protected DBusObject(final long instance) { nativeInstance = instance; isValid = true; } + @Override protected void finalize() { close(); } - public boolean equals(Object obj) + @Override + public boolean equals(final Object obj) { - if (obj == null || !(obj instanceof BluetoothObject)) + if (obj == null || !(obj instanceof DBusObject)) return false; - return operatorEqual((BluetoothObject)obj); + return operatorEqual((DBusObject)obj); } protected native String getObjectPath(); + @Override public int hashCode() { - String objectPath = getObjectPath(); + final String objectPath = getObjectPath(); return objectPath.hashCode(); } - /** - * Release the native memory associated with this object - * The object should not be used following a call to close - */ @Override public synchronized void close() { if (!isValid) |