Aprs (aprs v2.0.0)

View Source

Main APRS packet parsing library.

parse/1 accepts a TNC2-format packet (SRC>DST,PATH:information) and returns {:ok, map} or {:error, reason}.

Units

Every packet format reports the same units, so a caller does not have to know how a packet happened to encode a value:

  • speed - knots, float
  • altitude - feet, float
  • course - degrees, integer; 360 is due north, 0 (or absent) is unknown
  • posresolution - metres, float

Summary

Types

coordinate()

@type coordinate() :: float() | nil

packet()

@type packet() :: %{
  :id => String.t(),
  :sender => String.t(),
  :path => String.t(),
  :destination => String.t(),
  :information_field => String.t(),
  :data_type => atom(),
  :base_callsign => String.t(),
  :ssid => String.t() | nil,
  :data_extended => map() | nil,
  :received_at => DateTime.t(),
  optional(atom()) => term()
}

parse_result()

@type parse_result() :: {:ok, packet()} | {:error, atom() | String.t()}

position_ambiguity()

@type position_ambiguity() :: 0..4

position_data()

@type position_data() :: %{
  :latitude => coordinate(),
  :longitude => coordinate(),
  optional(:timestamp) => String.t() | integer() | nil,
  optional(:symbol_table_id) => String.t() | nil,
  optional(:symbol_code) => String.t() | nil,
  optional(:comment) => String.t(),
  optional(:altitude) => float() | nil,
  optional(:phg) => String.t() | nil,
  optional(:aprs_messaging?) => boolean(),
  optional(:compressed?) => boolean(),
  optional(:position_ambiguity) => position_ambiguity(),
  optional(:dao) => map() | nil,
  optional(:course) => integer() | nil,
  optional(:speed) => float() | nil,
  optional(:has_position) => boolean(),
  optional(:data_type) => atom()
}

Functions

parse(message)

@spec parse(term()) :: parse_result()

parse_callsign(callsign)

@spec parse_callsign(String.t()) ::
  {:ok, [String.t()]} | {:error, String.t() | atom()}

parse_data(arg1, destination, data)

@spec parse_data(atom(), String.t(), String.t()) :: map() | nil

parse_datatype(data)

@spec parse_datatype(String.t()) :: atom()

Determine the data type of an information field.

parse_datatype_safe(data)

@spec parse_datatype_safe(String.t()) :: {:ok, atom()}

parse_position_with_message_without_timestamp(position_data)

@spec parse_position_with_message_without_timestamp(String.t()) :: map()

parse_position_with_timestamp(aprs_messaging?, arg2, data_type)

@spec parse_position_with_timestamp(boolean(), binary(), atom()) :: map()

parse_position_without_timestamp(position_data)

@spec parse_position_without_timestamp(String.t()) :: map()

split_packet(message)

@spec split_packet(String.t()) :: {:ok, [String.t()]} | {:error, :invalid_packet}

split_path(path)

@spec split_path(String.t()) :: {:ok, [String.t()]}

version()

@spec version() :: String.t()

Returns the current version of the APRS library as a static string.