Устройство успешно подключается, и я могу обнаружить услуги и характеристики. Однако у меня возникли проблемы с получением уведомлений о событиях нажатия кнопок.
Вот что я сделал на данный момент:
- Подключился к устройству и обнаружил характеристику AE42.
- Настройте уведомления для характеристики AE42.
- Определено несколько шаблонов для обнаружения одиночных, двойных и длительных нажатий на основе данных, полученных из характеристики.
< /li>
Код: Выделить всё
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
guard let characteristics = service.characteristics else { return }
for characteristic in characteristics {
if characteristic.uuid.uuidString == "AE42" {
ae42Characteristic = characteristic
peripheral.setNotifyValue(true, for: characteristic)
print("Notifications enabled for AE42 characteristic")
}
}
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let error = error {
print("Error updating value for characteristic \(characteristic.uuid): \(error.localizedDescription)")
return
}
guard let value = characteristic.value else {
print("No value received for characteristic \(characteristic.uuid)")
return
}
print("Value received for characteristic: \(characteristic.uuid), value: \(value.hexEncodedString())")
if characteristic.uuid.uuidString == "AE42" {
processInputReport(value)
}
}
Код: Выделить всё
private func processInputReport(_ data: Data) {
inputBuffer.append(data)
// Check for button interactions like single click, double click, long press
if checkForSingleClick() {
handleClick()
inputBuffer.removeAll()
} else if checkForDoubleClick() {
handleDoubleClick()
inputBuffer.removeAll()
} else if checkForLongPress() {
handleLongPress()
inputBuffer.removeAll()
}
if inputBuffer.count > 20 {
inputBuffer.removeAll()
}
}
Устройство подключается успешно, но события нажатия кнопок либо не поступают последовательно, либо происходят по непредсказуемой схеме.
Проблема:
Устройство подключается успешно, но события нажатия кнопок либо не поступают последовательно, либо происходят по непредсказуемой схеме.
Проблема:
Устройство успешно подключается, но события нажатия кнопок либо не поступают последовательно, либо происходят по непредсказуемой схеме.
Проблема:
Устройство подключается успешно, но события нажатия кнопок либо не поступают последовательно, либо происходят по непредсказуемой схеме.
p>
Я подтвердил, что уведомления включены, и вижу некоторые данные, но они не всегда соответствуют ожидаемым шаблонам для одиночного, двойного или длительного нажатия.
Кроме того, я не уверен, правильно ли я обрабатываю характеристические данные или существует конкретная проблема, связанная с тем, как этот чип Bluetooth отправляет входные события.
Sspecs:
- Устройство: ATG-SJL (набор микросхем Bluetooth Jieli-Tech)
- Версия iOS: 16.x
xCode 15.4 - Библиотека/SDK: CoreBluetooth
- Репозиторий Jieli-Tech GitHub: iOS-JL_Bluetooth
- Проверил, что устройство подключено и характерные уведомления есть включено.
- Использовал сканер Bluetooth, чтобы убедиться, что UUID характеристик совпадают и что характеристика AE42 используется для событий нажатия кнопок.
- Реализовано сопоставление шаблонов. для разных типов нажатий кнопок (одиночное, двойное, длительное нажатие), но данные не всегда совпадают с моими ожиданиями.
Вопросы:
- Есть ли какие-то особые нюансы у устройств Jieli-Tech при обработке характерных уведомлений, которые мне не хватает?
- Есть ли лучший подход к обработке характеристических данных для обнаружения взаимодействия с кнопками?
- Удалось ли кому-нибудь успешно получать стабильные уведомления от Bluetooth-устройств Jieli-Tech на iOS?
ps: я нашел ветку, в которой кому-то удалось подключиться с помощью ESP -
https:/ /community.platformio.org/t/how-can-i-control-an-esp32-with-a-tiktok-bluetooth-controller/41927/5
Подробнее здесь: https://stackoverflow.com/questions/790 ... ch-atg-sjl