80 lines
2.4 KiB
Elixir
80 lines
2.4 KiB
Elixir
defmodule Aprs.DeviceIdentification do
|
|
@moduledoc """
|
|
Handles APRS device identification based on the APRS device identification database.
|
|
"""
|
|
|
|
@doc """
|
|
Identifies the manufacturer and model of an APRS device based on its symbol pattern.
|
|
Returns a tuple of {manufacturer, model} or "Unknown" if the device cannot be identified.
|
|
"""
|
|
@spec identify_device(String.t()) :: String.t()
|
|
def identify_device(symbols) do
|
|
case symbols do
|
|
# Original MIC-E devices
|
|
" " <> <<0, 0>> -> "Original MIC-E"
|
|
# Kenwood devices
|
|
">" <> <<0>> <> "^" -> "Kenwood TH-D74"
|
|
">" <> <<0, 0>> -> "Kenwood TH-D74A"
|
|
"]" <> <<0>> <> "=" -> "Kenwood DM-710"
|
|
"]" <> <<0, 0>> -> "Kenwood DM-700"
|
|
# Yaesu devices
|
|
"`_" <> " " -> "Yaesu VX-8"
|
|
"`_" <> "\"" -> "Yaesu FTM-350"
|
|
"`_" <> "#" -> "Yaesu VX-8G"
|
|
"`_" <> "$" -> "Yaesu FT1D"
|
|
"`_" <> "%" -> "Yaesu FTM-400DR"
|
|
"`_" <> ")" -> "Yaesu FTM-100D"
|
|
"`_" <> "(" -> "Yaesu FT2D"
|
|
# Other devices
|
|
"` X" -> "AP510"
|
|
"`" <> <<0, 0>> -> "Mic-Emsg"
|
|
"'|3" -> "Byonics TinyTrack3"
|
|
"'|4" -> "Byonics TinyTrack4"
|
|
"':4" -> "SCS GmbH & Co. P4dragon DR-7400 modems"
|
|
"':8" -> "SCS GmbH & Co. P4dragon DR-7800 modems"
|
|
"'" <> <<0, 0>> -> "McTrackr"
|
|
<<0>> <> "\"" <> <<0>> -> "Hamhud"
|
|
<<0>> <> "/" <> <<0>> -> "Argent"
|
|
<<0>> <> "^" <> <<0>> -> "HinzTec anyfrog"
|
|
<<0>> <> "*" <> <<0>> -> "APOZxx www.KissOZ.dk Tracker. OZ1EKD and OZ7HVO"
|
|
<<0>> <> "~" <> <<0>> -> "Other"
|
|
# Unknown devices
|
|
_ -> "Unknown"
|
|
end
|
|
end
|
|
|
|
@doc """
|
|
Returns a list of all known device manufacturers.
|
|
"""
|
|
@spec known_manufacturers() :: [String.t()]
|
|
def known_manufacturers do
|
|
[
|
|
"Original MIC-E",
|
|
"Kenwood",
|
|
"Yaesu",
|
|
"AP510",
|
|
"Byonics",
|
|
"SCS GmbH & Co.",
|
|
"McTrackr",
|
|
"Hamhud",
|
|
"Argent",
|
|
"HinzTec",
|
|
"APOZxx",
|
|
"Other"
|
|
]
|
|
end
|
|
|
|
@doc """
|
|
Returns a list of all known device models for a given manufacturer.
|
|
"""
|
|
@spec known_models(String.t()) :: [String.t()]
|
|
def known_models(manufacturer) do
|
|
case manufacturer do
|
|
"Kenwood" -> ["TH-D74", "TH-D74A", "DM-710", "DM-700"]
|
|
"Yaesu" -> ["VX-8", "FTM-350", "VX-8G", "FT1D", "FTM-400DR", "FTM-100D", "FT2D"]
|
|
"Byonics" -> ["TinyTrack3", "TinyTrack4"]
|
|
"SCS GmbH & Co." -> ["P4dragon DR-7400 modems", "P4dragon DR-7800 modems"]
|
|
_ -> []
|
|
end
|
|
end
|
|
end
|