I'm using the Nordic UART Service to implement BLE communication between an iOS app (central) and a Raspberry Pi (peripheral). Whenever I send a large payload to the central, I break those payloads up and send a notify to send each one. However, whenever I do that, I am seeing some "Bluetooth: hci0: link tx timeout" messages in the syslogs.
The payload seems to be reaching the central OK, but I do notice some intermittent flakiness. I was wondering if anyone had any insight to what is causing these errors.
class TxCharacteristic(Characteristic):
"""GATT characteristic for transmitting data to connected BLE device
"""
def __init__(self, bus, index, service):
Characteristic.__init__(self, bus, index, UART_TX_CHARACTERISTIC_UUID,
['notify'], service)
self.notifying = False
def send_tx(self, s):
if not self.notifying:
return
s_bytes = json.dumps(s)
value = []
for c in s_bytes:
value.append(dbus.Byte(c.encode('utf-8')))
# If payload exceeds MTU, send it in pieces
if len(value) >= 512:
self.PropertiesChanged(constants.GATT_CHRC_IFACE, {'Value': value}, [])
value.clear()
if len(value) > 0:
self.PropertiesChanged(constants.GATT_CHRC_IFACE, {'Value': value}, [])
def StartNotify(self):
if self.notifying:
return
self.notifying = True
def StopNotify(self):
if not self.notifying:
return
self.notifying = False