aioble — Asynchroniczne BLE#

aioble to wysokopoziomowa, przyjazna dla asyncio nakładka na moduł bluetooth. Udostępnia czyste korutyny do skanowania, łączenia, rozgłaszania, usług GATT oraz kanałów L2CAP.

Wszystkie operacje zdalne (połączenie, rozłączenie, odczyt/zapis klienta, indykacja serwera, odbiór/wysyłka l2cap, parowanie) są oczekiwalne (awaitable) i obsługują limity czasu.

Obsługiwane role:

  • Broadcaster (rozgłaszający) — generuje ładunki rozgłaszania i odpowiedzi na skanowanie dla typowych pól, automatycznie dzieli ładunek pomiędzy rozgłaszanie a odpowiedź na skanowanie, rozgłasza bez ograniczeń lub przez określony czas.

  • Peripheral (urządzenie peryferyjne) — oczekuje na połączenie od urządzenia centralnego, oczekuje na wymianę MTU.

  • Observer (skaner) — skanowanie pasywne i aktywne, łączenie ładunków rozgłaszania i odpowiedzi na skanowanie dla tego samego urządzenia, parsowanie typowych pól z ładunków rozgłaszania.

  • Central (urządzenie centralne) — łączy się z urządzeniem peryferyjnym, inicjuje wymianę MTU.

  • Klient GATT — wykrywa usługi / charakterystyki / deskryptory (opcjonalnie po UUID); odczytuje / zapisuje / zapisuje-z-odpowiedzią charakterystyki i deskryptory; subskrybuje powiadomienia i indykacje (poprzez CCCD); oczekuje na powiadomienia i indykacje.

  • Serwer GATT — rejestruje usługi / charakterystyki / deskryptory; oczekuje na zapisy w charakterystykach i deskryptorach; przechwytuje żądania odczytu; wysyła powiadomienia i indykacje (oraz oczekuje na odpowiedź).

  • L2CAP — akceptuje i nawiązuje połączeniowe kanały L2CAP, zarządza kontrolą przepływu kanału.

  • Bezpieczeństwo — zarządzanie kluczami/sekretami w oparciu o JSON, inicjowanie parowania, odpytywanie o stan szyfrowania / uwierzytelnienia.

Przykłady#

Skanuje pobliskie urządzenia BLE i wypisuje każde z nich w miarę ich wykrywania:

import aioble
import asyncio

async def find_devices():
    async with aioble.scan(duration_ms=5000, active=True) as scanner:
        async for result in scanner:
            print(result.device.addr_hex(), result.rssi, result.name())

asyncio.run(find_devices())

Łączy się z urządzeniem peryferyjnym rozgłaszającym usługę Heart Rate jako central i subskrybuje jego powiadomienia o pomiarach:

import aioble
import asyncio
import bluetooth

_HR_SERVICE = bluetooth.UUID(0x180D)
_HR_MEASUREMENT = bluetooth.UUID(0x2A37)

async def connect_and_read():
    device = None
    async with aioble.scan(duration_ms=5000, active=True) as scanner:
        async for result in scanner:
            if _HR_SERVICE in result.services():
                device = result.device
                break
    if device is None:
        return

    async with await device.connect() as conn:
        service = await conn.service(_HR_SERVICE)
        char = await service.characteristic(_HR_MEASUREMENT)
        await char.subscribe(notify=True)
        while True:
            data = await char.notified()
            print("notify:", data)

asyncio.run(connect_and_read())

Działa jako peripheral: rejestruje usługę GATT, rozgłasza ją i przesyła powiadomienia do każdego, kto się połączy:

import aioble
import asyncio
import bluetooth
import struct

_ENV_SERVICE = bluetooth.UUID(0x181A)
_TEMP_CHAR = bluetooth.UUID(0x2A6E)

def encode_temperature(deg_c):
    # Bluetooth Temperature (0x2A6E) is sint16 little-endian, 0.01 degC units.
    return struct.pack("<h", round(deg_c * 100))

service = aioble.Service(_ENV_SERVICE)
temp_char = aioble.Characteristic(service, _TEMP_CHAR, read=True, notify=True)
aioble.register_services(service)

async def peripheral_task():
    while True:
        connection = await aioble.advertise(
            interval_us=250000,
            name="openmv-sensor",
            services=[_ENV_SERVICE],
            appearance=0x0300,
        )
        print("connected:", connection.device.addr_hex())
        async with connection:
            while connection.is_connected():
                temp_char.write(encode_temperature(23.68), send_update=True)
                await asyncio.sleep(1)

asyncio.run(peripheral_task())

Funkcje na poziomie modułu#

aioble.config(*args, **kwargs) Any#

Przekazuje do bluetooth.BLE.config(), upewniając się najpierw, że radio BLE jest aktywne.

args

Opcjonalna pojedyncza nazwa parametru do odpytania.

kwargs

Argumenty nazwane służące do ustawiania wartości konfiguracyjnych.

aioble.stop() None#

Dezaktywuje radio BLE leżące u podstaw modułu i uruchamia wszelkie zarejestrowane procedury zamykania podmodułów. Po wywołaniu tej funkcji wszystkie skanery, rozgłaszania, połączenia i kanały L2CAP zostają zlikwidowane.

aioble.scan(duration_ms: int, interval_us: int | None = None, window_us: int | None = None, active: bool = False) scan#

Zwraca asynchroniczny menedżer kontekstu / asynchroniczny iterator scan, który dla każdego unikalnego wykrytego urządzenia (lub dla każdej nowej porcji danych rozgłaszania ze znanego urządzenia) udostępnia instancje ScanResult.

duration_ms

Jak długo skanować, w milisekundach. Przekaż 0, aby skanować bez ograniczeń, aż menedżer kontekstu zostanie zakończony.

interval_us

Interwał skanowania w mikrosekundach. Domyślnie 1 280 000.

window_us

Okno skanowania w mikrosekundach (musi być mniejsze lub równe interval_us). Domyślnie 11 250.

active

Jeśli True, wykonuje skanowanie aktywne (żąda danych odpowiedzi na skanowanie). Domyślnie False.

aioble.advertise(interval_us: int, adv_data: bytes | None = None, resp_data: bytes | None = None, connectable: bool = True, limited_disc: bool = False, br_edr: bool = False, name: str | None = None, services: list | None = None, appearance: int = 0, manufacturer: tuple | None = None, timeout_ms: int | None = None) DeviceConnection#

Korutyna asynchroniczna, która rozpoczyna rozgłaszanie i oczekuje na przychodzące połączenie od urządzenia centralnego. Zwraca DeviceConnection reprezentujące połączone urządzenie centralne lub zgłasza asyncio.TimeoutError po upływie limitu czasu.

interval_us

Interwał rozgłaszania, w mikrosekundach.

adv_data

Surowy ładunek rozgłaszania. Jeśli nie zostanie ustawiony, adv_data jest budowany z pozostałych argumentów nazwanych.

resp_data

Surowy ładunek odpowiedzi na skanowanie. Automatycznie wypełniany nadmiarem z adv_data, jeśli to konieczne.

connectable

Jeśli True, jest to rozgłaszanie umożliwiające połączenie.

limited_disc

Użyj flagi ograniczonej wykrywalności zamiast ogólnej.

br_edr

Ustaw flagę obsługi BR/EDR.

name

Opcjonalna pełna nazwa lokalna do osadzenia.

services

Obiekt iterowalny zawierający bluetooth.UUID do rozgłaszania.

appearance

16-bitowa wartość wyglądu (appearance) (zobacz przypisane numery Bluetooth).

manufacturer

Krotka (company_id, data_bytes) do rozgłaszania jako dane specyficzne dla producenta.

timeout_ms

Zatrzymaj rozgłaszanie po upływie tylu milisekund bez połączenia. None oznacza rozgłaszanie aż do nawiązania połączenia.

aioble.register_services(*services: Service) None#

Rejestruje jeden lub więcej obiektów Service (oraz ich charakterystyki i deskryptory) na serwerze GATT. Musi zostać wywołana raz przed uruchomieniem advertise. Kolejne wywołania zastępują poprzednią rejestrację.

services

Jedna lub więcej instancji Service.

Stałe na poziomie modułu#

aioble.ADDR_PUBLIC#

Publiczny typ adresu urządzenia BLE (0).

aioble.ADDR_RANDOM#

Losowy typ adresu urządzenia BLE (1).

Wyjątki#

exception aioble.GattError#

Zgłaszany, gdy zdalna operacja GATT (odczyt / zapis / indykacja) kończy się statusem niezerowym. Kod statusu jest dostępny w atrybucie _status.

exception aioble.DeviceDisconnectedError#

Zgłaszany wewnątrz operacji asynchronicznej (np. odczyt, zapis, powiadomienie), gdy połączenie leżące u jej podstaw zostanie przerwane w trakcie oczekiwania.

exception aioble.L2CAPDisconnectedError#

Zgłaszany, gdy operacja wysyłki/odbioru/opróżnienia kanału L2CAP jest próbowana na rozłączonym kanale (lub zostaje przez niego przerwana).

exception aioble.L2CAPConnectionError#

Zgłaszany przez DeviceConnection.l2cap_connect, gdy nawiązanie kanału się nie powiedzie. Kod statusu Bluetooth jest pierwszym argumentem.

Klasy#

class aioble.Device(addr_type: int, addr: bytes | str)#

Reprezentuje zdalne urządzenie BLE według adresu. Dwie instancje Device są uznawane za równe, jeśli zgadzają się zarówno addr_type, jak i addr. Używane jako uchwyt do inicjowania połączeń.

addr_type

Albo ADDR_PUBLIC, albo ADDR_RANDOM.

addr

Sześciobajtowy adres jako bytes lub ciąg szesnastkowy rozdzielony dwukropkami (np. "aa:bb:cc:dd:ee:ff").

addr_type#

Typ adresu, z którym utworzono urządzenie.

addr#

Surowy sześciobajtowy adres urządzenia.

addr_hex() str#

Zwraca adres sformatowany jako ciąg szesnastkowy rozdzielony dwukropkami.

connect(timeout_ms: int = 10000, scan_duration_ms: int | None = None, min_conn_interval_us: int | None = None, max_conn_interval_us: int | None = None) Awaitable[DeviceConnection]#

Asynchroniczna. Inicjuje połączenie GAP z tym urządzeniem i zwraca powstałe DeviceConnection. Anuluje wszelkie trwające skanowanie.

timeout_ms

Jak długo czekać na zakończenie połączenia.

scan_duration_ms

Początkowy czas skanowania przed połączeniem (zależny od kontrolera).

min_conn_interval_us / max_conn_interval_us

Opcjonalne granice interwału połączenia, w mikrosekundach.

class aioble.DeviceConnection#

Aktywne połączenie GAP z urządzeniem Device. Zwracane przez Device.connect() lub advertise. Obsługuje użycie jako menedżer kontekstu async with automatycznie rozłączający się przy wyjściu.

Nie należy tworzyć bezpośrednio.

device#

Leżące u podstaw urządzenie Device.

encrypted#

True, gdy łącze jest zaszyfrowane (np. po sparowaniu).

authenticated#

True, jeśli łącze zostało uwierzytelnione (parowanie zabezpieczone przed atakiem MITM).

bonded#

True, jeśli parowanie wytworzyło klucze powiązania (bonding).

key_size#

Wynegocjowany rozmiar klucza szyfrowania w bajtach lub False, jeśli nie jest zaszyfrowane.

mtu#

Wynegocjowane ATT MTU po exchange_mtu lub None, dopóki nie zostanie ustawione.

is_connected() bool#

Zwraca informację, czy połączenie jest nadal aktywne.

disconnect(timeout_ms: int = 2000) Awaitable[None]#

Asynchroniczna. Rozłącza i czeka na przerwanie (IRQ) rozłączenia.

timeout_ms

Maksymalny czas oczekiwania na rozłączenie.

disconnected(timeout_ms: int | None = None, disconnect: bool = False) Awaitable[None]#

Asynchroniczna. Oczekuje na zakończenie połączenia przez którąkolwiek ze stron. Jeśli disconnect ma wartość True, najpierw aktywnie rozłącza.

timeout_ms

Maksymalny czas oczekiwania. None oznacza oczekiwanie w nieskończoność.

disconnect

Jeśli True, inicjuje rozłączenie.

timeout(timeout_ms: int | None) DeviceTimeout#

Zwraca menedżer kontekstu, który anuluje swoje ciało, jeśli upłynie limit czasu (zgłaszając asyncio.TimeoutError) lub urządzenie się rozłączy (zgłaszając DeviceDisconnectedError).

timeout_ms

Limit czasu w milisekundach lub None dla braku limitu czasu.

exchange_mtu(mtu: int | None = None, timeout_ms: int = 1000) Awaitable[int]#

Asynchroniczna. Inicjuje wymianę ATT MTU i zwraca wynegocjowane MTU.

mtu

Opcjonalne preferowane MTU do ustawienia na leżącym u podstaw interfejsie BLE przed wymianą.

timeout_ms

Limit czasu dla wymiany.

service(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientService | None]#

Asynchroniczna. Wykrywa pojedynczą zdalną usługę pasującą do uuid lub None, jeśli nie zostanie znaleziona.

services(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover#

Zwraca asynchroniczny iterator zdalnych obiektów ClientService. Używaj z async for i wykonaj pętlę do końca.

uuid

Opcjonalny filtr UUID. None zwraca każdą usługę.

timeout_ms

Limit czasu na wykrycie.

pair(bond: bool = True, le_secure: bool = True, mitm: bool = False, io: int = 3, timeout_ms: int = 20000) Awaitable[None]#

Asynchroniczna. Inicjuje parowanie na tym połączeniu. Po zakończeniu aktualizuje atrybuty encrypted / authenticated / bonded / key_size.

bond

Utrwala klucze parowania.

le_secure

Użyj LE Secure Connections.

mitm

Wymagaj ochrony przed atakiem typu man-in-the-middle.

io

Stała zdolności IO (np. 3 dla braku wejścia/wyjścia).

timeout_ms

Limit czasu parowania.

l2cap_accept(psm: int, mtu: int, timeout_ms: int | None = None) Awaitable[L2CAPChannel]#

Asynchroniczna. Nasłuchuje na podanym PSM i zwraca L2CAPChannel, gdy zdalna strona go otworzy.

psm

Multiplekser protokołu/usługi (PSM), na którym należy nasłuchiwać.

mtu

Maksymalny rozmiar odbioru, w bajtach.

timeout_ms

Maksymalny czas oczekiwania na połączenie zdalnej strony.

l2cap_connect(psm: int, mtu: int, timeout_ms: int = 1000) Awaitable[L2CAPChannel]#

Asynchroniczna. Otwiera kanał L2CAP do zdalnej strony na podanym PSM.

psm

Multiplekser protokołu/usługi (PSM), z którym należy się połączyć.

mtu

Maksymalny rozmiar odbioru, w bajtach.

timeout_ms

Limit czasu połączenia.

class aioble.ScanResult#

Pojedyncze urządzenie wykryte podczas scan. Ta sama instancja jest ponownie udostępniana w miarę napływania nowych danych rozgłaszania.

Nie należy tworzyć bezpośrednio.

device#

Leżące u podstaw urządzenie Device.

rssi#

Ostatnio zgłoszone RSSI, w dBm.

adv_data#

Surowy ładunek rozgłaszania (bytes lub None).

resp_data#

Surowy ładunek odpowiedzi na skanowanie (bytes lub None), jeśli włączone jest skanowanie aktywne.

connectable#

True, jeśli najnowsze rozgłaszanie umożliwiało połączenie.

name() str | None#

Dekoduje pełną (lub skróconą) rozgłaszaną nazwę lokalną z ładunku lub None, jeśli nie jest obecna.

services() Iterator[bluetooth.UUID]#

Generator udostępniający każdy bluetooth.UUID rozgłaszany w polach listy usług 16/32/128-bitowych.

manufacturer(filter: int | None = None) Iterator[tuple[int, bytes]]#

Generator udostępniający krotki (company_id, data) z pól rozgłaszania specyficznych dla producenta.

filter

Jeśli podany, udostępnia tylko wpisy, których ID producenta pasuje.

class aioble.Service(uuid: bluetooth.UUID)#

Lokalna usługa GATT. Zbuduj usługę z jedną lub więcej instancjami Characteristic, a następnie przekaż ją do register_services.

uuid

UUID usługi.

uuid#

UUID usługi.

characteristics#

Lista obiektów Characteristic powiązanych z tą usługą.

class aioble.Characteristic(service: Service, uuid: bluetooth.UUID, read: bool = False, write: bool = False, write_no_response: bool = False, notify: bool = False, indicate: bool = False, initial: bytes | None = None, capture: bool = False)#

Lokalna charakterystyka GATT. Utworzenie jej automatycznie dołącza ją do service.

service

Usługa Service, do której należy.

uuid

UUID charakterystyki.

read, write, write_no_response, notify, indicate

Wartości logiczne wybierające obsługiwane operacje GATT.

initial

Opcjonalna wartość początkowa (bytes).

capture

Jeśli True, zapisane wartości są kolejkowane (do 10 w głąb), aby szybkie, następujące po sobie zapisy nie zostały utracone. Każde wywołanie written zwraca wtedy krotkę (connection, data).

uuid#

UUID charakterystyki.

flags#

Maska bitowa flag właściwości GATT zbudowana na podstawie konstruktora.

descriptors#

Lista obiektów Descriptor powiązanych z tą charakterystyką.

read() bytes#

Odczytuje bieżącą wartość z lokalnej bazy danych GATT.

write(data: bytes, send_update: bool = False) None#

Aktualizuje wartość w lokalnej bazie danych GATT.

data

Nowe bajty wartości.

send_update

Jeśli True, dodatkowo powiadamia/indykuje każde subskrybowane połączenie.

notify(connection: DeviceConnection, data: bytes | None = None) None#

Wysyła powiadomienie GATT (Notify) do connection.

connection

Docelowe połączenie klienta.

data

Ładunek do wysłania. Jeśli None, wysyłana jest bieżąca wartość lokalna.

indicate(connection: DeviceConnection, data: bytes | None = None, timeout_ms: int = 1000) Awaitable[None]#

Asynchroniczna. Wysyła indykację GATT (Indicate) do connection i czeka na potwierdzenie klienta. Zgłasza GattError przy statusie niezerowym.

connection

Docelowe połączenie klienta.

data

Ładunek do indykacji lub None, aby wysłać wartość lokalną.

timeout_ms

Maksymalny czas oczekiwania na potwierdzenie.

written(timeout_ms: int | None = None) Awaitable[DeviceConnection | tuple[DeviceConnection, bytes]]#

Asynchroniczna. Oczekuje na zdalny zapis. Zwraca zapisujące DeviceConnection lub (connection, data), jeśli charakterystyka została utworzona z capture=True.

timeout_ms

Maksymalny czas oczekiwania. None oznacza oczekiwanie w nieskończoność.

on_read(connection: DeviceConnection) int#

Punkt przesłonięcia (override hook) wywoływany synchronicznie po otrzymaniu zdalnego odczytu. Zwróć 0, aby zezwolić na odczyt, lub niezerowy kod błędu ATT, aby go odrzucić. Domyślna implementacja zwraca 0.

class aioble.BufferedCharacteristic(service: Service, uuid: bluetooth.UUID, max_len: int = 20, append: bool = False, **kwargs)#

Charakterystyka Characteristic, której bufor GATT można skonfigurować. Przydatna do odbierania wartości większych niż domyślny rozmiar atrybutu lub do kolejkowania następujących po sobie zapisów.

max_len

Rozmiar bufora, w bajtach.

append

Jeśli True, kolejne zapisy są dopisywane do bufora zamiast nadpisywania.

Pozostałe argumenty są przekazywane do Characteristic.

class aioble.Descriptor(characteristic: Characteristic, uuid: bluetooth.UUID, read: bool = False, write: bool = False, initial: bytes | None = None)#

Lokalny deskryptor GATT. Utworzenie go automatycznie dołącza go do characteristic. Dziedziczy read, write oraz written z Characteristic.

characteristic

Charakterystyka Characteristic, do której należy.

uuid

UUID deskryptora.

read, write

Wartości logiczne wybierające obsługiwane operacje GATT.

initial

Opcjonalna wartość początkowa (bytes).

class aioble.ClientService#

Zdalna usługa GATT wykryta na urządzeniu równorzędnym (peer). Zwracana przez DeviceConnection.service() lub iterowana z DeviceConnection.services().

Nie należy tworzyć bezpośrednio.

connection#

Połączenie DeviceConnection, do którego należy.

uuid#

UUID zdalnej usługi.

characteristic(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientCharacteristic | None]#

Asynchroniczna. Wykrywa pojedynczą charakterystykę po UUID lub None, jeśli nie zostanie znaleziona.

characteristics(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover#

Zwraca asynchroniczny iterator obiektów ClientCharacteristic. Używaj z async for i wykonaj pętlę do końca.

uuid

Opcjonalny filtr UUID.

timeout_ms

Limit czasu na wykrycie.

class aioble.ClientCharacteristic#

Zdalna charakterystyka GATT wykryta na urządzeniu równorzędnym (peer). Zwracana przez ClientService.characteristic() lub iterowana z ClientService.characteristics().

Nie należy tworzyć bezpośrednio.

service#

Usługa ClientService, do której należy.

uuid#

UUID charakterystyki.

properties#

Maska bitowa obsługiwanych operacji GATT zgłoszonych przez urządzenie równorzędne.

read(timeout_ms: int = 1000) Awaitable[bytes]#

Asynchroniczna. Wykonuje odczyt GATT (Read) i zwraca wartość. Zgłasza GattError przy statusie niezerowym.

timeout_ms

Limit czasu odczytu.

write(data: bytes, response: bool | None = None, timeout_ms: int = 1000) Awaitable[None]#

Asynchroniczna. Wykonuje zapis GATT (Write).

data

Wartość do zapisania.

response

True, aby wymagać odpowiedzi na zapis (i zgłosić GattError w razie niepowodzenia). False dla zapisu bez odpowiedzi. None (domyślnie) automatycznie wybiera na podstawie tego, co rozgłasza urządzenie równorzędne.

timeout_ms

Limit czasu zapisu (istotny tylko, jeśli response ma wartość True).

notified(timeout_ms: int | None = None) Awaitable[bytes]#

Asynchroniczna. Oczekuje na następne powiadomienie dla tej charakterystyki i zwraca jego ładunek. Zwraca natychmiast, jeśli powiadomienie jest już zakolejkowane.

timeout_ms

Maksymalny czas oczekiwania. None oznacza oczekiwanie w nieskończoność.

indicated(timeout_ms: int | None = None) Awaitable[bytes]#

Asynchroniczna. Oczekuje na następną indykację dla tej charakterystyki i zwraca jej ładunek.

timeout_ms

Maksymalny czas oczekiwania.

subscribe(notify: bool = True, indicate: bool = False) Awaitable[None]#

Asynchroniczna. Zapisuje Client Characteristic Configuration Descriptor (CCCD), aby zasubskrybować (lub anulować subskrypcję) powiadomień i/lub indykacji.

notify

Włącz powiadomienia.

indicate

Włącz indykacje.

descriptor(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientDescriptor | None]#

Asynchroniczna. Wykrywa pojedynczy deskryptor po UUID lub None, jeśli nie zostanie znaleziony.

descriptors(timeout_ms: int = 2000) ClientDiscover#

Zwraca asynchroniczny iterator obiektów ClientDescriptor. Używaj z async for i wykonaj pętlę do końca.

class aioble.ClientDescriptor#

Zdalny deskryptor GATT wykryty na urządzeniu równorzędnym (peer). Dziedziczy read oraz write z ClientCharacteristic.

Nie należy tworzyć bezpośrednio.

characteristic#

Charakterystyka ClientCharacteristic, do której należy.

uuid#

UUID deskryptora.

class aioble.L2CAPChannel#

Aktywny połączeniowy kanał L2CAP. Zwracany przez DeviceConnection.l2cap_accept() lub DeviceConnection.l2cap_connect(). Obsługuje użycie jako menedżer kontekstu async with automatycznie rozłączający się przy wyjściu.

Nie należy tworzyć bezpośrednio.

our_mtu#

Maksymalny rozmiar, w bajtach, jaki urządzenie równorzędne może wysłać do nas w pojedynczym SDU.

peer_mtu#

Maksymalny rozmiar, w bajtach, jaki możemy wysłać do urządzenia równorzędnego w pojedynczym SDU.

available() bool#

Zwraca synchronicznie True, jeśli zbuforowane dane odbiorcze są gotowe (tzn. recvinto nie zablokuje wykonania).

recvinto(buf: bytearray, timeout_ms: int | None = None) Awaitable[int]#

Asynchroniczna. Odbiera do buf, zwracając liczbę odczytanych bajtów. Oczekuje na nowe dane, jeśli kanał jest pusty.

buf

Wstępnie przydzielony bufor do wypełnienia.

timeout_ms

Maksymalny czas oczekiwania. None oznacza oczekiwanie w nieskończoność.

send(buf: bytes, timeout_ms: int | None = None, chunk_size: int | None = None) Awaitable[None]#

Asynchroniczna. Wysyła buf na kanale, fragmentując większe ładunki na fragmenty o rozmiarze MTU. Oczekuje na kredyty kontroli przepływu w razie potrzeby.

buf

Obiekt typu bytes-like do wysłania.

timeout_ms

Maksymalny czas oczekiwania na fragment.

chunk_size

Opcjonalne przesłonięcie rozmiaru fragmentu na wywołanie. Ograniczone do min(our_mtu * 2, peer_mtu).

flush(timeout_ms: int | None = None) Awaitable[None]#

Asynchroniczna. Oczekuje, aż wszelkie zatrzymane send zostaną opróżnione przez kontroler.

timeout_ms

Maksymalny czas oczekiwania.

disconnect(timeout_ms: int = 1000) Awaitable[None]#

Asynchroniczna. Rozłącza kanał i czeka na przerwanie (IRQ) rozłączenia.

timeout_ms

Maksymalny czas oczekiwania.

disconnected(timeout_ms: int = 1000) Awaitable[None]#

Asynchroniczna. Oczekuje, aż kanał zostanie rozłączony przez którąkolwiek ze stron.

timeout_ms

Maksymalny czas oczekiwania.