# MIT license; Copyright (c) 2021 Jim Mussared # This is a WIP client for l2cap_file_server.py. See that file for more # information. import sys # ruff: noqa: E402 sys.path.append("") from micropython import const import uasyncio as asyncio import aioble import bluetooth import random import struct _FILE_SERVICE_UUID = bluetooth.UUID(0x1234) _CONTROL_CHARACTERISTIC_UUID = bluetooth.UUID(0x1235) _COMMAND_SEND = const(0) _COMMAND_RECV = const(1) # Not yet implemented. _COMMAND_LIST = const(2) _COMMAND_SIZE = const(3) _COMMAND_DONE = const(4) _STATUS_OK = const(0) _STATUS_NOT_IMPLEMENTED = const(1) _STATUS_NOT_FOUND = const(2) _L2CAP_PSN = const(22) _L2CAP_MTU = const(128) class FileClient: def __init__(self, device): self._device = device self._connection = None self._seq = 1 async def connect(self): try: print("Connecting to", self._device) self._connection = await self._device.connect() except asyncio.TimeoutError: print("Timeout during connection") return try: print("Discovering...") file_service = await self._connection.service(_FILE_SERVICE_UUID) self._control_characteristic = await file_service.characteristic( _CONTROL_CHARACTERISTIC_UUID ) except asyncio.TimeoutError: print("Timeout discovering services/characteristics") return print("Connecting channel") self._channel = await self._connection.l2cap_connect(_L2CAP_PSN, _L2CAP_MTU) async def _command(self, cmd, data): send_seq = self._seq await self._control_characteristic.write(struct.pack("