Как исправить «отсутствие ответа от характеристики записи в файле Bluetooth»? - PullRequest
0 голосов
/ 24 апреля 2019

Я изучаю файл Bluetooth на Android и столкнулся с проблемой невозможности получить ответ от характеристики записи.Аппаратное обеспечение, которое я использую, - это HM-10, у которого есть сервис и характеристики, к которым я могу написать - кое-что, что, я уверен, касается кода, который я написал.

Я следил за статьей на Android-разработчике для настройки bluetooth gatt.Обратный вызов содержит onDescriptorRead / Write, onCharacteristicRead / Write, onServicesDiscovered, onCharacteristicChanged, в том числе широковещательный приемник для обновления информации от службы к действию.Я также попытался подключить HM-10 к своему компьютеру и использую RealTerm для отправки данных из моего телефонного приложения.Я подтверждаю, что данные, которые я отправляю, проходят.Но при отправке данных с компьютера через HM-10 я не получаю информацию из моего телефонного приложения.(onCharacteristicChanged или onCharacteristicRead) Перед выполнением отправки я изменяю настройку уведомления для признака на включенный.

Дескриптор - CCCD (0x2902). Характеристика является пользовательской, которая согласно документации обрабатывает READ, WRITE, NOTIFY.Честно говоря, я не знаю, как это проверить в коде.

Команда для отправки на характеристику.

if (characteristic.equals("0000ffe1-0000-1000-8000-00805f9b34fb")) {
  characteristic.setValue("AT+CSQ?");
}
bluetoothGatt.writeCharacteristic(characteristic);

Обратный вызов для записи

@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.w(TAG, "successfully wrote characteristic");

broadcastWrite(ACTION_WRITE_AVAILABLE, characteristic);
}
}

Обратный вызов для характеристики чтения

@Override
// Result of a characteristic read operation
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);

}
}

обратный вызов для измененного признака

@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
Log.w(TAG, "successfully received new characteristic change");
BroadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}

Команда включения уведомления для признака

descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
 bluetoothGatt.writeDescriptor(descriptor);

Я ожидаю, что модуль Bluetooth настроен для обработки изменений признака.На самом деле происходит большая черная дыра без ответов.

1 Ответ

0 голосов
/ 24 апреля 2019

После дальнейших исследований использование setCharacteristicNotification в сочетании с изменением параметра уведомления в дескрипторе CCCD успешно решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...