MicroPython:Библиотеки/ubluetooth/Класс BLE/BLE.irq()
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
BLE.irq()[1]
- BLE.irq(handler) – регистрирует функцию обратного вызова для событий из BLE-стека. Функция обратного вызова handler принимает два аргумента: event (здесь может быть один из кодов ниже) и data (это специфичный для события кортеж данных).
В обработчике событий хранятся варианты действий для всех возможных событий.
def bt_irq(event, data):
if event == _IRQ_CENTRAL_CONNECT:
# Центральный узел подключился
# к этому периферийному устройству.
conn_handle, addr_type, addr = data
elif event == _IRQ_CENTRAL_DISCONNECT:
# Центральный узел отключился
# от этого периферийного устройства.
conn_handle, addr_type, addr = data
elif event == _IRQ_GATTS_WRITE:
# Клиент выполнил запись
# в эту характеристику или дескриптор.
conn_handle, attr_handle = data
elif event == _IRQ_GATTS_READ_REQUEST:
# Клиент выполнил операцию чтения.
# Примечание: это аппаратное прерывание.
# Верните «None», чтобы отклонить операцию чтения.
# Примечание: это событие не поддерживается на ESP32.
conn_handle, attr_handle = data
elif event == _IRQ_SCAN_RESULT:
# Один результат сканирования.
addr_type, addr, adv_type, rssi, adv_data = data
elif event == _IRQ_SCAN_DONE:
# Сканирование закончилось
# или было установлено вручную.
pass
elif event == _IRQ_PERIPHERAL_CONNECT:
# Успешный вызов gap_connect().
conn_handle, addr_type, addr = data
elif event == _IRQ_PERIPHERAL_DISCONNECT:
# Подключенное периферийное устройство было отключено.
conn_handle, addr_type, addr = data
elif event == _IRQ_GATTC_SERVICE_RESULT:
# Вызывается каждый раз,
# когда gattc_discover_services() находит новый сервис.
conn_handle, start_handle, end_handle, uuid = data
elif event == _IRQ_GATTC_SERVICE_DONE:
# Вызывается каждый раз при обнаружении сервиса.
# Примечание: при успешном вызове статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, status = data
elif event == _IRQ_GATTC_CHARACTERISTIC_RESULT:
# Вызывается каждый раз, когда gattc_discover_services()
# находит новую характеристику.
conn_handle, def_handle, value_handle, properties, uuid = data
elif event == _IRQ_GATTC_CHARACTERISTIC_DONE:
# Вызывается каждый раз при обнаружении сервиса.
# Примечание: при успешном вызове статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, status = data
elif event == _IRQ_GATTC_DESCRIPTOR_RESULT:
# Вызывается каждый раз,
# когда gattc_discover_descriptors()
# находит новый дескриптор.
conn_handle, dsc_handle, uuid = data
elif event == _IRQ_GATTC_DESCRIPTOR_DONE:
# Вызывается каждый раз при обнаружении сервиса.
# Примечание: при успешном вызове статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, status = data
elif event == _IRQ_GATTC_READ_RESULT:
# Была выполнена функция gattc_read().
conn_handle, value_handle, char_data = data
elif event == _IRQ_GATTC_READ_DONE:
# Была выполнена функция gattc_read().
# Примечание: в btstack «value_handle» будет «0»,
# но в NimBLE оно будет присутствовать.
# Примечание: при успешном вызове статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, value_handle, status = data
elif event == _IRQ_GATTC_WRITE_DONE:
# Была выполнена функция gattc_write().
# Примечание: в btstack «value_handle» будет «0»,
# но в NimBLE оно будет присутствовать.
# Примечание: при успешном вызове статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, value_handle, status = data
elif event == _IRQ_GATTC_NOTIFY:
# Сервер отправил запрос на уведомление.
conn_handle, value_handle, notify_data = data
elif event == _IRQ_GATTC_INDICATE:
# Сервер отправил запрос на индикацию.
conn_handle, value_handle, notify_data = data
elif event == _IRQ_GATTS_INDICATE_DONE:
# Клиент подтвердил индикацию.
# Примечание: при успешном подтверждении
# статус будет «0»,
# в противном случае будет значение,
# зависящее от используемой реализации.
conn_handle, value_handle, status = data
А вот коды этих событий:
from micropython import const
_IRQ_CENTRAL_CONNECT = const(1)
_IRQ_CENTRAL_DISCONNECT = const(2)
_IRQ_GATTS_WRITE = const(3)
_IRQ_GATTS_READ_REQUEST = const(4)
_IRQ_SCAN_RESULT = const(5)
_IRQ_SCAN_DONE = const(6)
_IRQ_PERIPHERAL_CONNECT = const(7)
_IRQ_PERIPHERAL_DISCONNECT = const(8)
_IRQ_GATTC_SERVICE_RESULT = const(9)
_IRQ_GATTC_SERVICE_DONE = const(10)
_IRQ_GATTC_CHARACTERISTIC_RESULT = const(11)
_IRQ_GATTC_CHARACTERISTIC_DONE = const(12)
_IRQ_GATTC_DESCRIPTOR_RESULT = const(13)
_IRQ_GATTC_DESCRIPTOR_DONE = const(14)
_IRQ_GATTC_READ_RESULT = const(15)
_IRQ_GATTC_READ_DONE = const(16)
_IRQ_GATTC_WRITE_DONE = const(17)
_IRQ_GATTC_NOTIFY = const(18)
_IRQ_GATTC_INDICATE = const(19)
_IRQ_GATTS_INDICATE_DONE = const(20)
В целях сделать прошивку максимально компактной эти константы не включены в модуль ubluetooth. Поэтому если вам нужны какие-то константы из списка выше, просто добавьте их в свою программу.
<syntaxhighlight lang="python">