5

Attempting to read characteristics from a GATT service, the list is incomplete compared to the list I get from an iOS device, or the manufacturer guide.

I am reading the characteristics as follows:

private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                                            int newState) {
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                mConnectionState = STATE_CONNECTED;
                mBluetoothGatt = gatt;
                if (shouldStartWriting && writeCharacteristicsQueue.peek() != null) {
                    mBluetoothGatt.writeCharacteristic(writeCharacteristicsQueue.poll());
                } else {
                    EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.CONNECTED));
                    Log.i(TAG, "Attempting to start service discovery:" +
                            gatt.discoverServices());
                }

            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                mConnectionState = STATE_DISCONNECTED;
                mBluetoothGatt = null;
                EventBus.getDefault().post(new BTGattDisconnectedEvent());
            }
        }

        @Override
        // New services discovered
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.DISCOVERED));

            if (status == BluetoothGatt.GATT_SUCCESS) {
                for (BluetoothGattService service : gatt.getServices()) {
                    LOGD(TAG, "Found Service " + service.getUuid().toString());
                    discoverCharacteristics(service);
                }
                gatt.readCharacteristic(readCharacteristicsQueue.poll());
            } else {
                Log.w(TAG, "onServicesDiscovered received: " + status);
            }
        }

    @Override
    // Result of a characteristic read operation
    public void onCharacteristicRead(BluetoothGatt gatt,
                                     BluetoothGattCharacteristic characteristic,
                                     int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            parseCharacteristic(characteristic);
            LOGD(TAG, String.format("%s | %s ", characteristic.getUuid(), characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, 0)));//(BluetoothGattCharacteristic.FORMAT_UINT16));

            if (readCharacteristicsQueue.peek() != null) {
                gatt.readCharacteristic(readCharacteristicsQueue.poll());
            } else {
                EventBus.getDefault().post(new BTGattStatusEvent(BTGattStatusEvent.Status.DONE_DISCOVERING));
            }
        }
    }

and

private void discoverCharacteristics(BluetoothGattService service) {
    for (BluetoothGattCharacteristic gattCharacteristic : service.getCharacteristics()) {
        LOGD(TAG, "Discovered UUID: " + gattCharacteristic.getUuid());
        readCharacteristicsQueue.add(gattCharacteristic);
    }

}

I also attempted to get this characteristic using getCharacteristic, but I received a null.

The characteristics found are:

Discovered UUID: 0000fff1-0000-1000-8000-00805f9b34fb
Discovered UUID: 0000fff2-0000-1000-8000-00805f9b34fb
Discovered UUID: 0000fff3-0000-1000-8000-00805f9b34fb
Discovered UUID: 0000fff4-0000-1000-8000-00805f9b34fb
Discovered UUID: 0000fff5-0000-1000-8000-00805f9b34fb

However, on iOS and according to the manufacturer, there should also be a 0000fff7.

Why isn't this characteristic being read?

UPDATE: Nothing happened here. Not one of Android's BLE scanning apps can discover it.

zed
  • 3,180
  • 3
  • 27
  • 38

0 Answers0