Я пытаюсь разработать демо-версию bel-коммуникации.
Сервер BLE работает на Linux-плате с модулем BT, сервер разработан с использованием Python-dbus, а часть характеристик показана ниже. >
class DapUsrInfoCharacteristic(bluetooth_gatt.Characteristic):
bonded = False
def __init__(self, bus, index, service):
bluetooth_gatt.Characteristic.__init__(
self, bus, index,
bluetooth_constants.DAP_CHR_UUID,
['read', 'write', 'notify'],
service)
# ['encrypt-authenticated-read', 'encrypt-authenticated-write',
# 'notify'],
# service)
def ReadValue(self, options):
# Replace this with the actual value to be read
show_log(LOG_LEVEL.INFO, "Reading value from client")
return dbus.ByteArray([0x01])
def WriteValue(self, value, options):
# self.do_notify(value)
self.callback(CallbackType.BLE_RECVD_MSG, value)
# self.parse_msg_from_client(value)
def StartNotify(self):
show_log(LOG_LEVEL.INFO, "starting notifications")
self.notifying = True
def StopNotify(self):
show_log(LOG_LEVEL.INFO, "stopping notifications")
self.notifying = False
def register_callback(self, callback):
self.callback = callback
def do_notify(self, value):
self.StartNotify()
if not self.notifying:
show_log(LOG_LEVEL.INFO, "Not notifying")
return
show_log(LOG_LEVEL.INFO, f"Sending message to client: {value}")
self.PropertiesChanged(bluetooth_constants.GATT_CHARACTERISTIC_INTERFACE, {'Value': value}, [])
show_log(LOG_LEVEL.INFO, f"Message sent to client: {value}")
def parse_msg_from_client(self, value):
msg_type = int(value[0])
if msg_type == BLE_MSG_TYPE.BONDED.value:
self.bonded = bool(value[1])
show_log(LOG_LEVEL.INFO, f"Bond status: {self.bonded}")
self.callback(CallbackType.BLE_BONDED, None)
else:
show_log(LOG_LEVEL.INFO, f"Unknown message type: {value}")
Клиент BLE — это телефон Android, я могу читать и записывать значение характеристики на сервере BLE. Однако это не работает, когда я хочу подписаться на уведомление для этой характеристики. Код наиболее связанной части Android показан ниже:
Я пытаюсь разработать демо-версию bel-коммуникации. Сервер BLE работает на Linux-плате с модулем BT, сервер разработан с использованием Python-dbus, а часть характеристик показана ниже. > [code]class DapUsrInfoCharacteristic(bluetooth_gatt.Characteristic): bonded = False def __init__(self, bus, index, service): bluetooth_gatt.Characteristic.__init__( self, bus, index, bluetooth_constants.DAP_CHR_UUID, ['read', 'write', 'notify'], service) # ['encrypt-authenticated-read', 'encrypt-authenticated-write', # 'notify'], # service)
def ReadValue(self, options): # Replace this with the actual value to be read show_log(LOG_LEVEL.INFO, "Reading value from client") return dbus.ByteArray([0x01])
def do_notify(self, value): self.StartNotify() if not self.notifying: show_log(LOG_LEVEL.INFO, "Not notifying") return show_log(LOG_LEVEL.INFO, f"Sending message to client: {value}")
self.PropertiesChanged(bluetooth_constants.GATT_CHARACTERISTIC_INTERFACE, {'Value': value}, []) show_log(LOG_LEVEL.INFO, f"Message sent to client: {value}")
def parse_msg_from_client(self, value): msg_type = int(value[0]) if msg_type == BLE_MSG_TYPE.BONDED.value: self.bonded = bool(value[1]) show_log(LOG_LEVEL.INFO, f"Bond status: {self.bonded}") self.callback(CallbackType.BLE_BONDED, None) else: show_log(LOG_LEVEL.INFO, f"Unknown message type: {value}") [/code] Клиент BLE — это телефон Android, я могу читать и записывать значение характеристики на сервере BLE. Однако это не работает, когда я хочу подписаться на уведомление для этой характеристики. Код наиболее связанной части Android показан ниже: [code]/* Gatt call back */ private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { ...