summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2019-10-22 12:31:40 +1100
committerJim Mussared <jim.mussared@gmail.com>2019-10-22 13:54:09 +1100
commit3e1af5b36fc181231b6c7b7603b21490fb9b22e6 (patch)
treece723e2b30e14728cc49e6e99c70f6839b32467c
parent56fc3edf989e1216b1a00d8ab75ebefff33a67e8 (diff)
examples/bluetooth: Use UUIDs directly to add services to adv payload.
-rw-r--r--examples/bluetooth/ble_advertising.py15
-rw-r--r--examples/bluetooth/ble_temperature.py2
-rw-r--r--examples/bluetooth/ble_uart_peripheral.py1
3 files changed, 15 insertions, 3 deletions
diff --git a/examples/bluetooth/ble_advertising.py b/examples/bluetooth/ble_advertising.py
index f52598a62..b57d5e031 100644
--- a/examples/bluetooth/ble_advertising.py
+++ b/examples/bluetooth/ble_advertising.py
@@ -11,8 +11,14 @@ import struct
_ADV_TYPE_FLAGS = const(0x01)
_ADV_TYPE_NAME = const(0x09)
_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)
+
# 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):
payload = bytearray()
@@ -28,8 +34,13 @@ def advertising_payload(limited_disc=False, br_edr=False, name=None, services=No
if services:
for uuid in services:
- # TODO: Support bluetooth.UUID class.
- _append(_ADV_TYPE_UUID16_COMPLETE, struct.pack('<h', uuid))
+ b = bytes(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
_append(_ADV_TYPE_APPEARANCE, struct.pack('<h', appearance))
diff --git a/examples/bluetooth/ble_temperature.py b/examples/bluetooth/ble_temperature.py
index 379138e74..d901e2af1 100644
--- a/examples/bluetooth/ble_temperature.py
+++ b/examples/bluetooth/ble_temperature.py
@@ -29,7 +29,7 @@ class BLETemperature:
self._ble.irq(handler=self._irq)
((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
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()
def _irq(self, event, data):
diff --git a/examples/bluetooth/ble_uart_peripheral.py b/examples/bluetooth/ble_uart_peripheral.py
index 32015b69f..3508a15e7 100644
--- a/examples/bluetooth/ble_uart_peripheral.py
+++ b/examples/bluetooth/ble_uart_peripheral.py
@@ -27,6 +27,7 @@ class BLEUART:
self._connections = set()
self._rx_buffer = bytearray()
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._advertise()