| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # MicroPython aioble module
- # MIT license; Copyright (c) 2021 Jim Mussared
- import bluetooth
- log_level = 1
- def log_error(*args):
- if log_level > 0:
- print("[aioble] E:", *args)
- def log_warn(*args):
- if log_level > 1:
- print("[aioble] W:", *args)
- def log_info(*args):
- if log_level > 2:
- print("[aioble] I:", *args)
- class GattError(Exception):
- def __init__(self, status):
- self._status = status
- def ensure_active():
- if not ble.active():
- try:
- from .security import load_secrets
- load_secrets()
- except:
- pass
- ble.active(True)
- def config(*args, **kwargs):
- ensure_active()
- return ble.config(*args, **kwargs)
- # Because different functionality is enabled by which files are available the
- # different modules can register their IRQ handlers and shutdown handlers
- # dynamically.
- _irq_handlers = []
- _shutdown_handlers = []
- def register_irq_handler(irq, shutdown):
- if irq:
- _irq_handlers.append(irq)
- if shutdown:
- _shutdown_handlers.append(shutdown)
- def stop():
- ble.active(False)
- for handler in _shutdown_handlers:
- handler()
- # Dispatch IRQs to the registered sub-modules.
- def ble_irq(event, data):
- log_info(event, data)
- for handler in _irq_handlers:
- result = handler(event, data)
- if result is not None:
- return result
- # TODO: Allow this to be injected.
- ble = bluetooth.BLE()
- ble.irq(ble_irq)
- __version__ = '0.4.0'
|