aprs.me/lib/parser/telemetry_helpers.ex
2025-06-23 10:53:34 -05:00

59 lines
1.1 KiB
Elixir

defmodule Parser.TelemetryHelpers do
@moduledoc """
Telemetry helpers for APRS.
"""
@spec parse_telemetry_sequence(String.t()) :: integer() | nil
def parse_telemetry_sequence(seq) do
case Integer.parse(seq) do
{num, _} -> num
:error -> nil
end
end
def parse_analog_values(values) do
Enum.map(values, &parse_analog_value/1)
end
defp parse_analog_value("") do
nil
end
defp parse_analog_value(value) do
case Float.parse(value) do
{float_val, _} -> float_val
:error -> nil
end
end
def parse_digital_values(values) do
Enum.flat_map(values, &parse_digital_value/1)
end
defp parse_digital_value("1"), do: [true]
defp parse_digital_value(value) when is_binary(value) do
value
|> String.graphemes()
|> Enum.map(fn
"1" -> true
"0" -> false
_ -> nil
end)
end
defp parse_digital_value(_), do: [nil]
def parse_coefficient(coeff) do
case Float.parse(coeff) do
{float_val, _} ->
float_val
:error ->
case Integer.parse(coeff) do
{int_val, _} -> int_val
:error -> coeff
end
end
end
end