25a228af7e
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.
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
# 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
|