Drone.Adapters.Crazyflie.LinkURI (ex_drone v0.3.0)

View Source

Parses Crazyflie link URIs.

Supported forms:

radio://0/80/2M/E7E7E7E7E7
radio://0/80/2M
mock://default
mock://ready

Optional query parameters: safelink=0|1, timeout=<ms>.

Examples

{:ok, uri} = Drone.Adapters.Crazyflie.LinkURI.parse("radio://0/80/2M")
:radio = uri.scheme
80 = uri.channel
:rate_2m = uri.datarate

Summary

Types

t()

Parsed link URI used by Crazyflie transports.

Functions

Parses a URI string into a structured map.

Types

t()

@type t() :: %{
  scheme: :radio | :mock,
  radio_index: non_neg_integer() | nil,
  channel: 0..125 | nil,
  datarate: :rate_250k | :rate_1m | :rate_2m | nil,
  address: binary() | nil,
  mock_profile: atom() | nil,
  safelink: boolean(),
  timeout_ms: pos_integer()
}

Parsed link URI used by Crazyflie transports.

FieldTypeMeaning
:scheme:radio | :mockTransport family
:radio_indexnon_neg_integer() | nilCrazyradio device index (radio://)
:channel0..125 | nilRF channel (radio://)
:datarate:rate_250k | :rate_1m | :rate_2m | nilRadio data rate
:addressbinary() | nil5-byte radio address (default E7E7E7E7E7)
:mock_profileatom() | nilMock profile (:ready, :low_battery, …)
:safelinkboolean()SafeLink framing (default false; enable with ?safelink=1)
:timeout_mspos_integer()USB/IO timeout in milliseconds (default 1000)

Examples

%{
  scheme: :radio,
  radio_index: 0,
  channel: 80,
  datarate: :rate_2m,
  address: <<0xE7, 0xE7, 0xE7, 0xE7, 0xE7>>,
  mock_profile: nil,
  safelink: false,
  timeout_ms: 1000
}

%{
  scheme: :mock,
  mock_profile: :ready,
  radio_index: nil,
  channel: nil,
  datarate: nil,
  address: nil,
  safelink: false,
  timeout_ms: 500
}

Functions

parse(uri)

@spec parse(String.t()) :: {:ok, t()} | {:error, term()}

Parses a URI string into a structured map.

Parameters

  • uri (String.t()) — for example "radio://0/80/2M" or "mock://ready?timeout=500"

Returns

  • {:ok, t()} — parsed URI
  • {:error, term()} — common reasons:
    • :unsupported_scheme, :invalid_uri
    • :missing_radio_index, :invalid_radio_index
    • :missing_channel, :invalid_channel
    • :invalid_datarate, :invalid_address, :invalid_address_length
    • :invalid_safelink, :invalid_timeout

Examples

{:ok, %{scheme: :mock, mock_profile: :ready}} =
  Drone.Adapters.Crazyflie.LinkURI.parse("mock://ready")

{:ok, %{channel: 80, safelink: false, timeout_ms: 2000}} =
  Drone.Adapters.Crazyflie.LinkURI.parse(
    "radio://0/80/2M?safelink=0&timeout=2000"
  )

{:error, :unsupported_scheme} =
  Drone.Adapters.Crazyflie.LinkURI.parse("usb://0")