examples/bluetooth: Use UUIDs directly to add services to adv payload.
This commit is contained in:
parent
56fc3edf98
commit
3e1af5b36f
|
@ -11,8 +11,14 @@ import struct
|
||||||
_ADV_TYPE_FLAGS = const(0x01)
|
_ADV_TYPE_FLAGS = const(0x01)
|
||||||
_ADV_TYPE_NAME = const(0x09)
|
_ADV_TYPE_NAME = const(0x09)
|
||||||
_ADV_TYPE_UUID16_COMPLETE = const(0x3)
|
_ADV_TYPE_UUID16_COMPLETE = const(0x3)
|
||||||
|
_ADV_TYPE_UUID32_COMPLETE = const(0x5)
|
||||||
|
_ADV_TYPE_UUID128_COMPLETE = const(0x7)
|
||||||
|
_ADV_TYPE_UUID16_MORE = const(0x2)
|
||||||
|
_ADV_TYPE_UUID32_MORE = const(0x4)
|
||||||
|
_ADV_TYPE_UUID128_MORE = const(0x6)
|
||||||
_ADV_TYPE_APPEARANCE = const(0x19)
|
_ADV_TYPE_APPEARANCE = const(0x19)
|
||||||
|
|
||||||
|
|
||||||
# Generate a payload to be passed to gap_advertise(adv_data=...).
|
# Generate a payload to be passed to gap_advertise(adv_data=...).
|
||||||
def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0):
|
def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0):
|
||||||
payload = bytearray()
|
payload = bytearray()
|
||||||
|
@ -28,8 +34,13 @@ def advertising_payload(limited_disc=False, br_edr=False, name=None, services=No
|
||||||
|
|
||||||
if services:
|
if services:
|
||||||
for uuid in services:
|
for uuid in services:
|
||||||
# TODO: Support bluetooth.UUID class.
|
b = bytes(uuid)
|
||||||
_append(_ADV_TYPE_UUID16_COMPLETE, struct.pack('<h', uuid))
|
if len(b) == 2:
|
||||||
|
_append(_ADV_TYPE_UUID16_COMPLETE, b)
|
||||||
|
elif len(b) == 4:
|
||||||
|
_append(_ADV_TYPE_UUID32_COMPLETE, b)
|
||||||
|
elif len(b) == 16:
|
||||||
|
_append(_ADV_TYPE_UUID128_COMPLETE, b)
|
||||||
|
|
||||||
# See org.bluetooth.characteristic.gap.appearance.xml
|
# See org.bluetooth.characteristic.gap.appearance.xml
|
||||||
_append(_ADV_TYPE_APPEARANCE, struct.pack('<h', appearance))
|
_append(_ADV_TYPE_APPEARANCE, struct.pack('<h', appearance))
|
||||||
|
|
|
@ -29,7 +29,7 @@ class BLETemperature:
|
||||||
self._ble.irq(handler=self._irq)
|
self._ble.irq(handler=self._irq)
|
||||||
((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
|
((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
|
||||||
self._connections = set()
|
self._connections = set()
|
||||||
self._payload = advertising_payload(name=name, services=[0x181A], appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER)
|
self._payload = advertising_payload(name=name, services=[_ENV_SENSE_UUID], appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER)
|
||||||
self._advertise()
|
self._advertise()
|
||||||
|
|
||||||
def _irq(self, event, data):
|
def _irq(self, event, data):
|
||||||
|
|
|
@ -27,6 +27,7 @@ class BLEUART:
|
||||||
self._connections = set()
|
self._connections = set()
|
||||||
self._rx_buffer = bytearray()
|
self._rx_buffer = bytearray()
|
||||||
self._handler = None
|
self._handler = None
|
||||||
|
# Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
|
||||||
self._payload = advertising_payload(name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
|
self._payload = advertising_payload(name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
|
||||||
self._advertise()
|
self._advertise()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue