diff options
author | Damien George <damien.p.george@gmail.com> | 2020-02-27 15:36:53 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2020-02-28 10:33:03 +1100 |
commit | 69661f3343bedf86e514337cff63d96cc42f8859 (patch) | |
tree | af5dfb380ffdb75dda84828f63cf9d840d992f0f /examples/bluetooth | |
parent | 3f39d18c2b884d32f0443e2e8114ff9d7a14d718 (diff) | |
download | micropython-69661f3343bedf86e514337cff63d96cc42f8859.tar.gz micropython-69661f3343bedf86e514337cff63d96cc42f8859.zip |
all: Reformat C and Python source code with tools/codeformat.py.
This is run with uncrustify 0.70.1, and black 19.10b0.
Diffstat (limited to 'examples/bluetooth')
-rw-r--r-- | examples/bluetooth/ble_advertising.py | 25 | ||||
-rw-r--r-- | examples/bluetooth/ble_temperature.py | 26 | ||||
-rw-r--r-- | examples/bluetooth/ble_temperature_central.py | 68 | ||||
-rw-r--r-- | examples/bluetooth/ble_uart_peripheral.py | 37 | ||||
-rw-r--r-- | examples/bluetooth/ble_uart_repl.py | 8 |
5 files changed, 104 insertions, 60 deletions
diff --git a/examples/bluetooth/ble_advertising.py b/examples/bluetooth/ble_advertising.py index 3a06beb740..3fb1281f63 100644 --- a/examples/bluetooth/ble_advertising.py +++ b/examples/bluetooth/ble_advertising.py @@ -26,9 +26,12 @@ def advertising_payload(limited_disc=False, br_edr=False, name=None, services=No def _append(adv_type, value): nonlocal payload - payload += struct.pack('BB', len(value) + 1, adv_type) + value + 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))) + _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) @@ -44,7 +47,7 @@ def advertising_payload(limited_disc=False, br_edr=False, name=None, services=No _append(_ADV_TYPE_UUID128_COMPLETE, b) # See org.bluetooth.characteristic.gap.appearance.xml - _append(_ADV_TYPE_APPEARANCE, struct.pack('<h', appearance)) + _append(_ADV_TYPE_APPEARANCE, struct.pack("<h", appearance)) return payload @@ -54,32 +57,36 @@ def decode_field(payload, adv_type): result = [] while i + 1 < len(payload): if payload[i + 1] == adv_type: - result.append(payload[i + 2:i + payload[i] + 1]) + result.append(payload[i + 2 : i + payload[i] + 1]) i += 1 + payload[i] return result def decode_name(payload): n = decode_field(payload, _ADV_TYPE_NAME) - return str(n[0], 'utf-8') if n else '' + return str(n[0], "utf-8") if n else "" def decode_services(payload): services = [] for u in decode_field(payload, _ADV_TYPE_UUID16_COMPLETE): - services.append(bluetooth.UUID(struct.unpack('<h', u)[0])) + services.append(bluetooth.UUID(struct.unpack("<h", u)[0])) for u in decode_field(payload, _ADV_TYPE_UUID32_COMPLETE): - services.append(bluetooth.UUID(struct.unpack('<d', u)[0])) + services.append(bluetooth.UUID(struct.unpack("<d", u)[0])) for u in decode_field(payload, _ADV_TYPE_UUID128_COMPLETE): services.append(bluetooth.UUID(u)) return services def demo(): - payload = advertising_payload(name='micropython', services=[bluetooth.UUID(0x181A), bluetooth.UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E')]) + payload = advertising_payload( + name="micropython", + services=[bluetooth.UUID(0x181A), bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")], + ) print(payload) print(decode_name(payload)) print(decode_services(payload)) -if __name__ == '__main__': + +if __name__ == "__main__": demo() diff --git a/examples/bluetooth/ble_temperature.py b/examples/bluetooth/ble_temperature.py index d901e2af1c..01d2f7441f 100644 --- a/examples/bluetooth/ble_temperature.py +++ b/examples/bluetooth/ble_temperature.py @@ -10,26 +10,36 @@ import time from ble_advertising import advertising_payload from micropython import const -_IRQ_CENTRAL_CONNECT = const(1 << 0) -_IRQ_CENTRAL_DISCONNECT = const(1 << 1) + +_IRQ_CENTRAL_CONNECT = const(1 << 0) +_IRQ_CENTRAL_DISCONNECT = const(1 << 1) # org.bluetooth.service.environmental_sensing _ENV_SENSE_UUID = bluetooth.UUID(0x181A) # org.bluetooth.characteristic.temperature -_TEMP_CHAR = (bluetooth.UUID(0x2A6E), bluetooth.FLAG_READ|bluetooth.FLAG_NOTIFY,) -_ENV_SENSE_SERVICE = (_ENV_SENSE_UUID, (_TEMP_CHAR,),) +_TEMP_CHAR = ( + bluetooth.UUID(0x2A6E), + bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY, +) +_ENV_SENSE_SERVICE = ( + _ENV_SENSE_UUID, + (_TEMP_CHAR,), +) # org.bluetooth.characteristic.gap.appearance.xml _ADV_APPEARANCE_GENERIC_THERMOMETER = const(768) + class BLETemperature: - def __init__(self, ble, name='mpy-temp'): + def __init__(self, ble, name="mpy-temp"): self._ble = ble self._ble.active(True) 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=[_ENV_SENSE_UUID], 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): @@ -46,7 +56,7 @@ class BLETemperature: def set_temperature(self, temp_deg_c, notify=False): # Data is sint16 in degrees Celsius with a resolution of 0.01 degrees Celsius. # Write the local value, ready for a central to read. - self._ble.gatts_write(self._handle, struct.pack('<h', int(temp_deg_c * 100))) + self._ble.gatts_write(self._handle, struct.pack("<h", int(temp_deg_c * 100))) if notify: for conn_handle in self._connections: # Notify connected centrals to issue a read. @@ -72,5 +82,5 @@ def demo(): time.sleep_ms(1000) -if __name__ == '__main__': +if __name__ == "__main__": demo() diff --git a/examples/bluetooth/ble_temperature_central.py b/examples/bluetooth/ble_temperature_central.py index 5c23a06453..14ea694a9e 100644 --- a/examples/bluetooth/ble_temperature_central.py +++ b/examples/bluetooth/ble_temperature_central.py @@ -9,33 +9,41 @@ import micropython from ble_advertising import decode_services, decode_name from micropython import const -_IRQ_CENTRAL_CONNECT = const(1 << 0) -_IRQ_CENTRAL_DISCONNECT = const(1 << 1) -_IRQ_GATTS_WRITE = const(1 << 2) -_IRQ_GATTS_READ_REQUEST = const(1 << 3) -_IRQ_SCAN_RESULT = const(1 << 4) -_IRQ_SCAN_COMPLETE = const(1 << 5) -_IRQ_PERIPHERAL_CONNECT = const(1 << 6) -_IRQ_PERIPHERAL_DISCONNECT = const(1 << 7) -_IRQ_GATTC_SERVICE_RESULT = const(1 << 8) -_IRQ_GATTC_CHARACTERISTIC_RESULT = const(1 << 9) -_IRQ_GATTC_DESCRIPTOR_RESULT = const(1 << 10) -_IRQ_GATTC_READ_RESULT = const(1 << 11) -_IRQ_GATTC_WRITE_STATUS = const(1 << 12) -_IRQ_GATTC_NOTIFY = const(1 << 13) -_IRQ_GATTC_INDICATE = const(1 << 14) -_IRQ_ALL = const(0xffff) + +_IRQ_CENTRAL_CONNECT = const(1 << 0) +_IRQ_CENTRAL_DISCONNECT = const(1 << 1) +_IRQ_GATTS_WRITE = const(1 << 2) +_IRQ_GATTS_READ_REQUEST = const(1 << 3) +_IRQ_SCAN_RESULT = const(1 << 4) +_IRQ_SCAN_COMPLETE = const(1 << 5) +_IRQ_PERIPHERAL_CONNECT = const(1 << 6) +_IRQ_PERIPHERAL_DISCONNECT = const(1 << 7) +_IRQ_GATTC_SERVICE_RESULT = const(1 << 8) +_IRQ_GATTC_CHARACTERISTIC_RESULT = const(1 << 9) +_IRQ_GATTC_DESCRIPTOR_RESULT = const(1 << 10) +_IRQ_GATTC_READ_RESULT = const(1 << 11) +_IRQ_GATTC_WRITE_STATUS = const(1 << 12) +_IRQ_GATTC_NOTIFY = const(1 << 13) +_IRQ_GATTC_INDICATE = const(1 << 14) +_IRQ_ALL = const(0xFFFF) # org.bluetooth.service.environmental_sensing _ENV_SENSE_UUID = bluetooth.UUID(0x181A) # org.bluetooth.characteristic.temperature _TEMP_UUID = bluetooth.UUID(0x2A6E) -_TEMP_CHAR = (_TEMP_UUID, bluetooth.FLAG_READ|bluetooth.FLAG_NOTIFY,) -_ENV_SENSE_SERVICE = (_ENV_SENSE_UUID, (_TEMP_CHAR,),) +_TEMP_CHAR = ( + _TEMP_UUID, + bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY, +) +_ENV_SENSE_SERVICE = ( + _ENV_SENSE_UUID, + (_TEMP_CHAR,), +) # org.bluetooth.characteristic.gap.appearance.xml _ADV_APPEARANCE_GENERIC_THERMOMETER = const(768) + class BLETemperatureCentral: def __init__(self, ble): self._ble = ble @@ -72,8 +80,10 @@ class BLETemperatureCentral: if connectable and _ENV_SENSE_UUID in decode_services(adv_data): # Found a potential device, remember it and stop scanning. self._addr_type = addr_type - self._addr = bytes(addr) # Note: addr buffer is owned by caller so need to copy it. - self._name = decode_name(adv_data) or '?' + self._addr = bytes( + addr + ) # Note: addr buffer is owned by caller so need to copy it. + self._name = decode_name(adv_data) or "?" self._ble.gap_scan(None) elif event == _IRQ_SCAN_COMPLETE: @@ -104,7 +114,9 @@ class BLETemperatureCentral: # Connected device returned a service. conn_handle, start_handle, end_handle, uuid = data if conn_handle == self._conn_handle and uuid == _ENV_SENSE_UUID: - self._ble.gattc_discover_characteristics(self._conn_handle, start_handle, end_handle) + self._ble.gattc_discover_characteristics( + self._conn_handle, start_handle, end_handle + ) elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT: # Connected device returned a characteristic. @@ -132,7 +144,6 @@ class BLETemperatureCentral: if self._notify_callback: self._notify_callback(self._value) - # Returns true if we've successfully connected and discovered characteristics. def is_connected(self): return self._conn_handle is not None and self._value_handle is not None @@ -174,7 +185,7 @@ class BLETemperatureCentral: def _update_value(self, data): # Data is sint16 in degrees Celsius with a resolution of 0.01 degrees Celsius. - self._value = struct.unpack('<h', data)[0] / 100 + self._value = struct.unpack("<h", data)[0] / 100 return self._value def value(self): @@ -189,12 +200,12 @@ def demo(): def on_scan(addr_type, addr, name): if addr_type is not None: - print('Found sensor:', addr_type, addr, name) + print("Found sensor:", addr_type, addr, name) central.connect() else: nonlocal not_found not_found = True - print('No sensor found.') + print("No sensor found.") central.scan(callback=on_scan) @@ -204,7 +215,7 @@ def demo(): if not_found: return - print('Connected') + print("Connected") # Explicitly issue reads, using "print" as the callback. while central.is_connected(): @@ -216,7 +227,8 @@ def demo(): # print(central.value()) # time.sleep_ms(2000) - print('Disconnected') + print("Disconnected") + -if __name__ == '__main__': +if __name__ == "__main__": demo() diff --git a/examples/bluetooth/ble_uart_peripheral.py b/examples/bluetooth/ble_uart_peripheral.py index 14f7102725..c013d96ec9 100644 --- a/examples/bluetooth/ble_uart_peripheral.py +++ b/examples/bluetooth/ble_uart_peripheral.py @@ -4,24 +4,37 @@ import bluetooth from ble_advertising import advertising_payload from micropython import const -_IRQ_CENTRAL_CONNECT = const(1 << 0) -_IRQ_CENTRAL_DISCONNECT = const(1 << 1) -_IRQ_GATTS_WRITE = const(1 << 2) -_UART_UUID = bluetooth.UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E') -_UART_TX = (bluetooth.UUID('6E400003-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_NOTIFY,) -_UART_RX = (bluetooth.UUID('6E400002-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_WRITE,) -_UART_SERVICE = (_UART_UUID, (_UART_TX, _UART_RX,),) +_IRQ_CENTRAL_CONNECT = const(1 << 0) +_IRQ_CENTRAL_DISCONNECT = const(1 << 1) +_IRQ_GATTS_WRITE = const(1 << 2) + +_UART_UUID = bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E") +_UART_TX = ( + bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E"), + bluetooth.FLAG_NOTIFY, +) +_UART_RX = ( + bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"), + bluetooth.FLAG_WRITE, +) +_UART_SERVICE = ( + _UART_UUID, + (_UART_TX, _UART_RX,), +) # org.bluetooth.characteristic.gap.appearance.xml _ADV_APPEARANCE_GENERIC_COMPUTER = const(128) + class BLEUART: - def __init__(self, ble, name='mpy-uart', rxbuf=100): + def __init__(self, ble, name="mpy-uart", rxbuf=100): self._ble = ble self._ble.active(True) self._ble.irq(handler=self._irq) - ((self._tx_handle, self._rx_handle,),) = self._ble.gatts_register_services((_UART_SERVICE,)) + ((self._tx_handle, self._rx_handle,),) = self._ble.gatts_register_services( + (_UART_SERVICE,) + ) # Increase the size of the rx buffer and enable append mode. self._ble.gatts_set_buffer(self._rx_handle, rxbuf, True) self._connections = set() @@ -82,7 +95,7 @@ def demo(): uart = BLEUART(ble) def on_rx(): - print('rx: ', uart.read().decode().strip()) + print("rx: ", uart.read().decode().strip()) uart.irq(handler=on_rx) nums = [4, 8, 15, 16, 23, 42] @@ -90,7 +103,7 @@ def demo(): try: while True: - uart.write(str(nums[i]) + '\n') + uart.write(str(nums[i]) + "\n") i = (i + 1) % len(nums) time.sleep_ms(1000) except KeyboardInterrupt: @@ -99,5 +112,5 @@ def demo(): uart.close() -if __name__ == '__main__': +if __name__ == "__main__": demo() diff --git a/examples/bluetooth/ble_uart_repl.py b/examples/bluetooth/ble_uart_repl.py index 430a571a69..9e8a38ff4b 100644 --- a/examples/bluetooth/ble_uart_repl.py +++ b/examples/bluetooth/ble_uart_repl.py @@ -15,7 +15,7 @@ _MP_STREAM_POLL = const(3) _MP_STREAM_POLL_RD = const(0x0001) # TODO: Remove this when STM32 gets machine.Timer. -if hasattr(machine, 'Timer'): +if hasattr(machine, "Timer"): _timer = machine.Timer(-1) else: _timer = None @@ -24,11 +24,13 @@ else: def schedule_in(handler, delay_ms): def _wrap(_arg): handler() + if _timer: _timer.init(mode=machine.Timer.ONE_SHOT, period=delay_ms, callback=_wrap) else: micropython.schedule(_wrap, None) + # Simple buffering stream to support the dupterm requirements. class BLEUARTStream(io.IOBase): def __init__(self, uart): @@ -38,7 +40,7 @@ class BLEUARTStream(io.IOBase): def _on_rx(self): # Needed for ESP32. - if hasattr(os, 'dupterm_notify'): + if hasattr(os, "dupterm_notify"): os.dupterm_notify(None) def read(self, sz=None): @@ -74,7 +76,7 @@ class BLEUARTStream(io.IOBase): def start(): ble = bluetooth.BLE() - uart = BLEUART(ble, name='mpy-repl') + uart = BLEUART(ble, name="mpy-repl") stream = BLEUARTStream(uart) os.dupterm(stream) |