Skip to content

No enum constant extended_properties #10

@Minification

Description

@Minification

I'm trying to make a BLE central using the BluetoothManager API with the TinyB-Transport.
The peripheral in question runs on an Android smartphone.

If the central (using your Bluetooth Manager TinyB) has been connected to the peripheral (smartphone), and I try to connect the central to another smartphone (here using the BLE Scanner App), then I get the following Exception from the BluetoothManager:

org.sputnikdev.bluetooth.manager.BluetoothInteractionException: Error occurred while interacting (getResolvedServices) with native object: /88:78:73:E6:4E:42/C8:69:CD:15:D2:30 : No enum constant org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBCharacteristic.AccessTypeMapping.extended_properties
	at org.sputnikdev.bluetooth.manager.impl.AbstractBluetoothObjectGovernor.interact(AbstractBluetoothObjectGovernor.java:267)
	at org.sputnikdev.bluetooth.manager.impl.AbstractBluetoothObjectGovernor.interact(AbstractBluetoothObjectGovernor.java:248)
	at org.sputnikdev.bluetooth.manager.impl.DeviceGovernorImpl.getResolvedServices(DeviceGovernorImpl.java:452)
	at org.sputnikdev.bluetooth.manager.impl.DeviceGovernorImpl$ServicesResolvedNotification.notify(DeviceGovernorImpl.java:813)
	at org.sputnikdev.bluetooth.manager.impl.DeviceGovernorImpl$ServicesResolvedNotification.notify(DeviceGovernorImpl.java:807)
	at org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBDevice.lambda$null$6(TinyBDevice.java:203)
	at org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBFactory.lambda$notifySafely$0(TinyBFactory.java:237)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: No enum constant org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBCharacteristic.AccessTypeMapping.extended_properties
	at java.lang.Enum.valueOf(Enum.java:238)
	at org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBCharacteristic$AccessTypeMapping.valueOf(TinyBCharacteristic.java:46)
	at org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBCharacteristic.lambda$getFlags$0(TinyBCharacteristic.java:115)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at org.sputnikdev.bluetooth.manager.transport.tinyb.TinyBCharacteristic.getFlags(TinyBCharacteristic.java:117)
	at org.sputnikdev.bluetooth.manager.impl.DeviceGovernorImpl.convert(DeviceGovernorImpl.java:712)
	at org.sputnikdev.bluetooth.manager.impl.DeviceGovernorImpl.lambda$getResolvedServices$2(DeviceGovernorImpl.java:457)
	at org.sputnikdev.bluetooth.manager.impl.AbstractBluetoothObjectGovernor.interact(AbstractBluetoothObjectGovernor.java:256)
	... 11 more

My code for the central (using Bluetooth Manager TinyB) is the following:

bluetoothManager = new BluetoothManagerBuilder()
            .withTinyBTransport(true)
            .withRediscover(false)
            .withDiscovering(true)
            .build();
        bluetoothManager.addDeviceDiscoveryListener(new DeviceDiscoveryListener() {
            @Override
            public void discovered(final DiscoveredDevice discoveredDevice) {
                logger.debug("Discovered a device...");
                logger.info(discoveredDevice.getDisplayName());
                logger.info(discoveredDevice.getName());
                logger.info(String.valueOf(discoveredDevice.getURL()));
                logger.info(discoveredDevice.getAlias());
                bluetoothManager.getDeviceGovernor(discoveredDevice.getURL(), true)
                    .addBluetoothSmartDeviceListener(new BluetoothSmartDeviceListener() {
                        @Override
                        public void servicesResolved(final List<GattService> gattServices) {
                            logger.debug("Services resolved");
                            for (GattService gattService : gattServices) {
                                logger.debug("Discovered service: {}", gattService.getURL().toString());
                                List<GattCharacteristic> characteristics = gattService.getCharacteristics();
                                for (GattCharacteristic characteristic : characteristics) {
                                    if (!UUID.fromString(characteristic.getURL().getCharacteristicUUID()).equals(
                                        UUIDProperty.MESSAGE_CHAR_UUID_SEND.getUuidValue())) {
                                        return;
                                    }
                                    logger.debug("Attached valuelistener");
                                    bluetoothManager.getCharacteristicGovernor(characteristic.getURL(), true).addValueListener(
                                        new ValueListener() {
                                            @Override
                                            public void changed(final byte[] value) {
                                                logger.debug("Value is {}", new String(value));
                                            }
                                        });
                                    logger.debug("Discovered characteristic {}", characteristic.getURL().toString());
                                }
                            }
                        }
                    });
            }
        });
        bluetoothManager.start(true);

The peripheral (on Android) has the following services/characteristics:

BluetoothGattService bluetoothGattService = new BluetoothGattService(
                UUIDProperty.SERVICE.getUuidValue(),
                BluetoothGattService.SERVICE_TYPE_PRIMARY);
        BluetoothGattCharacteristic sendCharacteristic = new BluetoothGattCharacteristic(
                UUIDProperty.MESSAGE_CHAR_UUID_RECEIVE.getUuidValue(),
                BluetoothGattCharacteristic.PROPERTY_WRITE,
                BluetoothGattCharacteristic.PERMISSION_WRITE);
        BluetoothGattCharacteristic receiveCharacteristic = new BluetoothGattCharacteristic(
                UUIDProperty.MESSAGE_CHAR_UUID_SEND.getUuidValue(),
                BluetoothGattCharacteristic.PROPERTY_NOTIFY,
                BluetoothGattCharacteristic.PERMISSION_READ);
        BluetoothGattDescriptor userConfigurationCharacteristic = new BluetoothGattDescriptor(
                UUIDProperty.CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR.getUuidValue(),
                BluetoothGattDescriptor.PERMISSION_READ | BluetoothGattDescriptor.PERMISSION_WRITE
                );

As one can see, there should not be anything that has extended properties (I think? Please correct me if I'm wrong).

My TinyB natives version is 0.5.0 (or at least I cloned and installed from the repo (https://github.com/intel-iot-devkit/tinyb) at most a month ago).

Note that I might be using the library slightly wrong since I find the governers and URLs still a bit hard to grasp.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions