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

28 lines
719 B
Elixir

defmodule Parser.KISSHelpers do
@moduledoc """
KISS/TNC2 conversion helpers for APRS.
"""
@spec kiss_to_tnc2(binary()) :: binary() | map()
def kiss_to_tnc2(<<0xC0, 0x00, rest::binary>>) do
tnc2 =
rest
|> String.trim_trailing(<<0xC0>>)
|> String.replace(<<0xDB, 0xDC>>, <<0xC0>>)
|> String.replace(<<0xDB, 0xDD>>, <<0xDB>>)
tnc2
end
def kiss_to_tnc2(_), do: %{error_code: :packet_invalid, error_message: "Unknown error"}
@spec tnc2_to_kiss(binary()) :: binary()
def tnc2_to_kiss(tnc2) do
escaped =
tnc2
|> String.replace(<<0xDB>>, <<0xDB, 0xDD>>)
|> String.replace(<<0xC0>>, <<0xDB, 0xDC>>)
<<0xC0, 0x00>> <> escaped <> <<0xC0>>
end
end