Dala.Hardware.Bluetooth (dala v0.0.8)

Copy Markdown View Source

Bluetooth Low Energy (BLE) support.

Provides BLE central (client) and peripheral (server) functionality. Requires :bluetooth permission (request via Dala.Permissions.request/2).

Events

Bluetooth events arrive as:

handle_info({:bluetooth, :state_changed, state}, socket)
handle_info({:bluetooth, :device_found, %{id: id, name: name, rssi: rssi}}, socket)
handle_info({:bluetooth, :device_connected, %{id: id, name: name}}, socket)
handle_info({:bluetooth, :device_disconnected, %{id: id}}, socket)
handle_info({:bluetooth, :characteristic_read, %{device: id, service: uuid, characteristic: uuid, value: data}}, socket)
handle_info({:bluetooth, :characteristic_written, %{device: id, service: uuid, characteristic: uuid}}, socket)
handle_info({:bluetooth, :notification_received, %{device: id, service: uuid, characteristic: uuid, value: data}}, socket)

States

  • :unknown - State not determined
  • :resetting - Resetting
  • :unsupported - BLE not supported
  • :unauthorized - Permission denied
  • :powered_off - Bluetooth is off
  • :powered_on - Bluetooth is on and ready

iOS: CBCentralManager / CBPeripheralManager. Android: BluetoothAdapter / BluetoothLeScanner.

Summary

Functions

Connect to a BLE device.

Disconnect from a BLE device.

Discover services for a connected device.

Start scanning for BLE devices.

Check current Bluetooth state.

Stop scanning for devices.

Subscribe to notifications for a characteristic.

Unsubscribe from notifications for a characteristic.

Types

device_id()

@type device_id() :: String.t()

state()

@type state() ::
  :unknown
  | :resetting
  | :unsupported
  | :unauthorized
  | :powered_off
  | :powered_on

uuid()

@type uuid() :: String.t()

Functions

connect(socket, device_id)

@spec connect(Dala.Ui.Socket.t(), device_id()) :: Dala.Ui.Socket.t()

Connect to a BLE device.

Device ID is obtained from :device_found event.

disconnect(socket, device_id)

@spec disconnect(Dala.Ui.Socket.t(), device_id()) :: Dala.Ui.Socket.t()

Disconnect from a BLE device.

discover_services(socket, device_id)

@spec discover_services(Dala.Ui.Socket.t(), device_id()) :: Dala.Ui.Socket.t()

Discover services for a connected device.

read_characteristic(socket, device_id, service_uuid, characteristic_uuid)

@spec read_characteristic(Dala.Ui.Socket.t(), device_id(), uuid(), uuid()) ::
  Dala.Ui.Socket.t()

Read a characteristic value.

Results arrive as :bluetooth, :characteristic_read message.

start_scan(socket, opts \\ [])

@spec start_scan(
  Dala.Ui.Socket.t(),
  keyword()
) :: Dala.Ui.Socket.t()

Start scanning for BLE devices.

Options:

  • services: [uuid] - filter by service UUIDs (optional)
  • timeout_ms: integer - scan duration (default: 10000)

Found devices arrive as :bluetooth, :device_found messages.

state()

@spec state() :: state()

Check current Bluetooth state.

stop_scan(socket)

@spec stop_scan(Dala.Ui.Socket.t()) :: Dala.Ui.Socket.t()

Stop scanning for devices.

subscribe(socket, device_id, service_uuid, characteristic_uuid)

@spec subscribe(Dala.Ui.Socket.t(), device_id(), uuid(), uuid()) :: Dala.Ui.Socket.t()

Subscribe to notifications for a characteristic.

Notifications arrive as :bluetooth, :notification_received messages.

unsubscribe(socket, device_id, service_uuid, characteristic_uuid)

@spec unsubscribe(Dala.Ui.Socket.t(), device_id(), uuid(), uuid()) ::
  Dala.Ui.Socket.t()

Unsubscribe from notifications for a characteristic.

write_characteristic(socket, device_id, service_uuid, characteristic_uuid, value)

@spec write_characteristic(Dala.Ui.Socket.t(), device_id(), uuid(), uuid(), binary()) ::
  Dala.Ui.Socket.t()

Write a characteristic value.

Value should be a binary (for bytes) or integer/list for simple values.