# `XMAVLink.Utils`
[🔗](https://github.com/fancydrones/xmavlink/blob/main/lib/mavlink/utils.ex#L1)

MAVLink support functions used during code generation and runtime
Parts of this module are ported from corresponding implementations
in mavutils.py

# `eight_bit_checksum`

# `pack_array`

```elixir
@spec pack_array(list(), integer(), (any() -&gt; binary())) :: binary()
```

Helper function for messages to pack array fields

# `pack_double`

# `pack_float`

# `pack_string`

```elixir
@spec pack_string(binary(), non_neg_integer()) :: binary()
```

Helper function for messages to pack string fields

# `parse_ip_address`

Parse an ip address string into a tuple

# `parse_ip_address`

# `parse_positive_integer`

# `resolve_address`

Resolve an address string to an IP address tuple.

Accepts both IP addresses (e.g., "192.168.1.1") and DNS hostnames
(e.g., "service.namespace.svc.cluster.local").

Uses Erlang's `:inet.getaddr/2` for resolution, which handles both
IP addresses and DNS lookups.

Returns `{:ok, ip_tuple}` on success or `{:error, reason}` on failure.

## Examples

    iex> resolve_address("127.0.0.1")
    {:ok, {127, 0, 0, 1}}

    iex> resolve_address("localhost")
    {:ok, {127, 0, 0, 1}}

# `unpack_array`

```elixir
@spec unpack_array(binary(), (binary() -&gt; {any(), list()})) :: list()
```

Helper function for decode() to unpack array fields

# `unpack_array`

# `unpack_double`

# `unpack_float`

# `wire_order`

```elixir
@spec wire_order([%{type: String.t(), is_extension: boolean()}]) :: [[%{}]]
```

Sort parsed message fields into wire order according
to https://mavlink.io/en/guide/serialization.html
List extension fields separately so that we can
not include them for MAVLink 1 messages

# `x25_crc`

```elixir
@spec x25_crc([] | binary()) :: pos_integer()
```

Calculate an x25 checksum of a list or binary based on
pymavlink mavcrc.x25crc

# `x25_crc`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
