Files
esp32-lua-api/lua/api/core/ble.lua
T
evan a09bcfaf06 feat(ble): replace blocking scan with advertisement observation
The one-shot scan kept only the top six devices by RSSI and dropped the
advertisement payload, so a distant beacon lost its slot to nearby phones
and its data was unreachable -- wrong on every axis for reading sensors
that broadcast in their adverts.

Replace it with a continuous observer: observe(filter)/observed()/
unobserve()/isObserving(). BleObservation carries the raw advertisement
bytes for Lua to parse, and BleFilter keeps only adverts matching a
service-data UUID or manufacturer id.
2026-08-06 23:03:05 -04:00

85 lines
2.2 KiB
Lua

---@meta
-- Generated from native/src/bindings/core/ble.cpp. Do not edit.
---@class BleObservation
---@field address string
---@field name string
---@field rssi integer
---@field payload string Raw advertisement bytes.
---@field lastSeenMs integer sys.getMillis() at last sighting.
---@class BleFilter
---@field services? string[] Service-data UUIDs to keep.
---@field manufacturers? integer[] Manufacturer ids to keep.
---@class BleLib
ble = {}
---Starts the BLE stack.
---@param name? string Local device name.
---@return true? ok
---@return string? error
function ble.init(name) end
---Stops the BLE stack and releases its memory.
function ble.deinit() end
---Whether the BLE stack is running.
---@return boolean
function ble.isInitialized() end
---Starts passively observing advertisements, coalesced per device.
---@param filter? BleFilter Keep only matching adverts; nil keeps all.
---@return true? ok
---@return string? error
function ble.observe(filter) end
---Stops observing and clears the snapshot.
function ble.unobserve() end
---Whether advertisement observation is running.
---@return boolean
function ble.isObserving() end
---The current snapshot of observed devices.
---@return BleObservation[] devices
function ble.observed() end
---Connects to a peripheral.
---@param address string
---@return true? ok
---@return string? error
function ble.connect(address) end
---Disconnects from the connected peripheral.
function ble.disconnect() end
---Whether a peripheral is connected.
---@return boolean
function ble.isConnected() end
---Reads a characteristic value.
---@param serviceUuid string
---@param characteristicUuid string
---@return string? value
---@return string? error
function ble.read(serviceUuid, characteristicUuid) end
---Writes a characteristic value.
---@param serviceUuid string
---@param characteristicUuid string
---@param value string
---@return true? ok
---@return string? error
function ble.write(serviceUuid, characteristicUuid, value) end
---Starts advertising.
---@param name? string Advertised device name.
---@return true? ok
---@return string? error
function ble.startAdvertising(name) end
---Stops advertising.
function ble.stopAdvertising() end