diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2019-10-15 17:45:21 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-10-18 13:36:51 +1100 |
commit | 25a228af7e5809fe3a582f665c13a2d38eb5ed40 (patch) | |
tree | d6d81589b78df5989e7a123b4b339f6eca834c12 /examples/bluetooth/ble_advertising.py | |
parent | ebf8332104c1c6fbd01b521a713e49d040c62920 (diff) | |
download | micropython-25a228af7e5809fe3a582f665c13a2d38eb5ed40.tar.gz micropython-25a228af7e5809fe3a582f665c13a2d38eb5ed40.zip |
examples/bluetooth: Add basic BLE peripheral examples.
Consisting of:
- ble_advertising.py -- helper to generate advertising payload.
- ble_temperature.py -- simple temperature device.
- ble_uart_periperhal.py -- BLE UART wrapper.
- ble_uart_repl.py -- dupterm-compatible uart.
Diffstat (limited to 'examples/bluetooth/ble_advertising.py')
-rw-r--r-- | examples/bluetooth/ble_advertising.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/examples/bluetooth/ble_advertising.py b/examples/bluetooth/ble_advertising.py new file mode 100644 index 0000000000..f52598a62a --- /dev/null +++ b/examples/bluetooth/ble_advertising.py @@ -0,0 +1,37 @@ +# Helpers for generating BLE advertising payloads. + +from micropython import const +import struct + +# Advertising payloads are repeated packets of the following form: +# 1 byte data length (N + 1) +# 1 byte type (see constants below) +# N bytes type-specific data + +_ADV_TYPE_FLAGS = const(0x01) +_ADV_TYPE_NAME = const(0x09) +_ADV_TYPE_UUID16_COMPLETE = const(0x3) +_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() + + def _append(adv_type, value): + nonlocal payload + payload += struct.pack('BB', len(value) + 1, adv_type) + value + + _append(_ADV_TYPE_FLAGS, struct.pack('B', (0x01 if limited_disc else 0x02) + (0x00 if br_edr else 0x04))) + + if name: + _append(_ADV_TYPE_NAME, name) + + if services: + for uuid in services: + # TODO: Support bluetooth.UUID class. + _append(_ADV_TYPE_UUID16_COMPLETE, struct.pack('<h', uuid)) + + # See org.bluetooth.characteristic.gap.appearance.xml + _append(_ADV_TYPE_APPEARANCE, struct.pack('<h', appearance)) + + return payload |