28 lines
719 B
Elixir
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
|