Files
aprs.ts/src/deviceid.ts

1089 lines
38 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Address } from "./frame";
export type DeviceID = {
tocall: string;
vendor?: string;
model?: string;
class?: string;
os?: string;
contact?: string;
features?: string[];
};
export const getDeviceID = (callsign: string | Address): DeviceID | null => {
if (typeof callsign !== "string") {
callsign = callsign.call;
}
const base = callsign.split("-")[0].toUpperCase();
return knownDeviceIDs.get(base);
};
export default getDeviceID;
type Match = { value: DeviceID | null; prio: number } | null;
class Node {
children: Map<string, Node> = new Map();
value: DeviceID | null = null;
isEnd: boolean = false;
prio: number = 0;
}
class Trie {
private root: Node = new Node();
constructor(initial: DeviceID[] = []) {
for (const device of initial) {
this.insert(device);
}
}
insert(device: DeviceID): void {
let node = this.root;
let prio = 4;
if (device.tocall.includes("*")) prio = 1;
else if (device.tocall.includes("?")) prio = 2;
else if (device.tocall.includes("n")) prio = 3;
for (const char of device.tocall) {
if (!node.children.has(char)) {
node.children.set(char, new Node());
}
node = node.children.get(char)!;
}
node.isEnd = true;
node.value = device;
node.prio = prio;
}
get(callsign: string): DeviceID | null {
const result = this.search(this.root, callsign, 0);
return result ? result.value : null;
}
private search(node: Node, callsign: string, index: number): Match {
let best: Match = null;
if (node.children.has("*")) {
const star = node.children.get("*")!;
best = { value: star.value, prio: star.prio };
}
if (index === callsign.length) {
if (node.isEnd) {
if (!best || node.prio > best.prio) {
best = { value: node.value, prio: node.prio };
}
}
return best;
}
const char = callsign[index];
for (const [key, leaf] of node.children) {
let curr: Match = null;
if (key === char) {
curr = this.search(leaf, callsign, index + 1);
} else if (key === "?") {
curr = this.search(leaf, callsign, index + 1);
} else if (key === "n" && /\d/.test(char)) {
curr = this.search(leaf, callsign, index + 1);
}
// Update best if this branch returns a better match
if (curr && (!best || curr.prio > best.prio)) {
best = curr;
}
}
return best;
}
}
// Update from https://github.com/aprsorg/aprs-deviceid/blob/main/tocalls.yaml
const knownDeviceIDs = new Trie([
{ tocall: "AP1WWX", vendor: "TAPR", model: "T-238+", class: "wx" },
{ tocall: "AP4R??", vendor: "Open Source", model: "APRS4R", class: "software" },
{ tocall: "APAEP1", vendor: "Paraguay Space Agency (AEP)", model: "EIRUAPRSDIGIS&FV1", class: "satellite" },
{ tocall: "APAF??", model: "AFilter" },
{ tocall: "APAG??", model: "AGate" },
{ tocall: "APAGW", vendor: "SV2AGW", model: "AGWtracker", class: "software", os: "Windows" },
{ tocall: "APAGW?", vendor: "SV2AGW", model: "AGWtracker", class: "software", os: "Windows" },
{ tocall: "APAH??", model: "AHub" },
{
tocall: "APAIOR",
vendor: "J. Angelo Racoma DU2XXR/N2RAC",
model: "APRSPH net bot based on Ioreth",
class: "service",
os: "Linux",
contact: "info@aprsph.net",
features: ["messaging"]
},
{ tocall: "APALH*", vendor: "Retevis" },
{ tocall: "APALH1", vendor: "Retevis", model: "Ailunce H1", class: "ht" },
{ tocall: "APALHA", vendor: "Retevis", model: "Ailunce HA2", class: "ht" },
{ tocall: "APAM??", vendor: "Altus Metrum", model: "AltOS", class: "tracker" },
{
tocall: "APANC?",
vendor: "John Rokicki, KC1VMZ",
model: "APRS Net Central",
class: "service",
contact: "kc1vmz@gmail.com",
features: ["messaging"]
},
{ tocall: "APAND?", vendor: "Open Source", model: "APRSdroid", os: "Android", class: "app" },
{ tocall: "APAR??", vendor: "Øyvind, LA7ECA", model: "Arctic Tracker", class: "tracker", os: "embedded" },
{ tocall: "APAT16", vendor: "AnyTone", model: "AT-D168UV", class: "ht" },
{ tocall: "APAT51", vendor: "AnyTone", model: "AT-D578", class: "rig" },
{ tocall: "APAT81", vendor: "AnyTone", model: "AT-D878", class: "ht" },
{ tocall: "APAT89", vendor: "AnyTone", model: "AT-D890UV", class: "ht" },
{ tocall: "APAT??", vendor: "AnyTone" },
{
tocall: "APATAR",
vendor: "TA7W/OH2UDS Baris Dinc, TA6AD Emre Keles",
model: "ATA-R APRS Digipeater",
class: "digi"
},
{ tocall: "APAVT5", vendor: "SainSonic", model: "AP510", class: "tracker" },
{ tocall: "APAW??", vendor: "SV2AGW", model: "AGWPE", class: "software", os: "Windows" },
{ tocall: "APAX??", model: "AFilterX" },
{
tocall: "APB2MF",
vendor: "Mike, DL2MF",
model: "MF2APRS Radiosonde tracking tool",
class: "software",
os: "Windows"
},
{ tocall: "APBK??", vendor: "PY5BK", model: "Bravo Tracker", class: "tracker" },
{ tocall: "APBL??", vendor: "BigRedBee", model: "BeeLine GPS", class: "tracker" },
{ tocall: "APBM??", vendor: "R3ABM", model: "BrandMeister DMR" },
{ tocall: "APBPQ?", vendor: "John Wiseman, G8BPQ", model: "BPQ32", class: "software", os: "Windows" },
{ tocall: "APBSD?", vendor: "hambsd.org", model: "HamBSD" },
{ tocall: "APBT*", vendor: "BTECH", contact: "support@baofengtech.com" },
{ tocall: "APBT62", vendor: "BTECH", model: "DMR 6x2", class: "ht", contact: "support@baofengtech.com" },
{ tocall: "APBT72", vendor: "BTECH", model: "DA 7X2", class: "ht", contact: "support@baofengtech.com" },
{ tocall: "APBTUV", vendor: "BTECH", model: "UV-PRO", class: "ht", contact: "support@baofengtech.com" },
{ tocall: "APC???", vendor: "Rob Wittner, KZ5RW", model: "APRS/CE", class: "app" },
{ tocall: "APCDS0", vendor: "ZS6LMG", model: "cell tracker", class: "tracker" },
{ tocall: "APCLEY", vendor: "ZS6EY", model: "EYTraker", class: "tracker" },
{ tocall: "APCLEZ", vendor: "ZS6EY", model: "Telit EZ10 GSM application", class: "tracker" },
{ tocall: "APCLUB", model: "Brazil APRS network" },
{ tocall: "APCLWX", vendor: "ZS6EY", model: "EYWeather", class: "wx" },
{ tocall: "APCN??", vendor: "DG5OAW", model: "carNET" },
{ tocall: "APCSMS", vendor: "USNA", model: "Cosmos" },
{ tocall: "APCSS", vendor: "AMSAT", model: "CubeSatSim CubeSat Simulator" },
{ tocall: "APCTLK", vendor: "Open Source", model: "Codec2Talkie", class: "app" },
{ tocall: "APCWP8", vendor: "GM7HHB", model: "WinphoneAPRS", class: "app" },
{
tocall: "APD5T?",
vendor: "Geoffrey, F4FXL",
model: "Open Source DStarGateway",
class: "dstar",
contact: "f4fxl@dstargateway.digital"
},
{
tocall: "APDAGW",
vendor: "Diego Guevara, HJ3DAG",
model: "NodeJS APRS WX",
class: "wx",
contact: "hj3dag@gmail.com"
},
{ tocall: "APDF??", model: "Automatic DF units" },
{ tocall: "APDG??", vendor: "Jonathan, G4KLX", model: "ircDDB Gateway", class: "dstar" },
{ tocall: "APDI??", vendor: "Bela, HA5DI", model: "DIXPRS", class: "software" },
{ tocall: "APDNO?", vendor: "DO3SWW", model: "APRSduino", class: "tracker", os: "embedded" },
{
tocall: "APDP25",
vendor: "vk44.net",
model: "Project 25 (P25)",
class: "tracker",
os: "embedded",
contact: "support@vk44.net"
},
{ tocall: "APDPRS", vendor: "unknown", model: "D-Star APDPRS", class: "dstar" },
{ tocall: "APDR??", vendor: "Open Source", model: "APRSdroid", os: "Android", class: "app" },
{ tocall: "APDS??", vendor: "SP9UOB", model: "dsDIGI", os: "embedded" },
{ tocall: "APDST?", vendor: "SP9UOB", model: "dsTracker", os: "embedded" },
{ tocall: "APDT??", vendor: "unknown", model: "APRStouch Tone (DTMF)" },
{ tocall: "APDU??", vendor: "JA7UDE", model: "U2APRS", class: "app", os: "Android" },
{ tocall: "APDV??", vendor: "OE6PLD", model: "SSTV with APRS", class: "software" },
{ tocall: "APDW??", vendor: "WB2OSZ", model: "DireWolf" },
{ tocall: "APDnnn", vendor: "Open Source", model: "aprsd", class: "software", os: "Linux/Unix" },
{ tocall: "APE2A?", vendor: "NoseyNick, VA3NNW", model: "Email-2-APRS gateway", class: "software", os: "Linux/Unix" },
{ tocall: "APE???", model: "Telemetry devices" },
{ tocall: "APECAN", vendor: "KT5TK/DL7AD", model: "Pecan Pico APRS Balloon Tracker", class: "tracker" },
{ tocall: "APELK?", vendor: "WB8ELK", model: "Balloon tracker", class: "tracker" },
{
tocall: "APEML?",
vendor: "Leszek, SP9MLI",
model: "SP9MLI for WX, Telemetry",
class: "software",
contact: "sp9mli@gmail.com"
},
{
tocall: "APEP??",
vendor: "Patrick EGLOFF, TK5EP",
model: "LoRa WX station",
class: "wx",
os: "embedded",
contact: "pegloff@gmail.com"
},
{
tocall: "APERRB",
vendor: "KG5JNC",
model: "APRS Backend for Errbot",
class: "service",
contact: "me@kg5jnc.com",
features: ["messaging"]
},
{ tocall: "APERS?", vendor: "Jason, KG7YKZ", model: "Runner tracking", class: "tracker" },
{ tocall: "APERXQ", vendor: "PE1RXQ", model: "PE1RXQ APRS Tracker", class: "tracker" },
{ tocall: "APESP1", vendor: "LY3PH", model: "APRS-ESP", os: "embedded" },
{ tocall: "APESPG", vendor: "OH2TH", model: "ESP SmartBeacon APRS-IS Client", os: "embedded" },
{ tocall: "APESPW", vendor: "OH2TH", model: "ESP Weather Station APRS-IS Client", os: "embedded" },
{
tocall: "APETBT",
vendor: "PD7R",
model: "TBTracker Balloon Telemetry Tracker",
class: "tracker",
os: "embedded",
contact: "roel@kroes.com"
},
{ tocall: "APFG??", vendor: "KP4DJT", model: "Flood Gage", class: "software" },
{ tocall: "APFI??", vendor: "aprs.fi", class: "app" },
{ tocall: "APFII?", model: "iPhone/iPad app", vendor: "aprs.fi", os: "ios", class: "app" },
{
tocall: "APFMN?",
vendor: "Thomas Beiderwieden, DL3EL",
model: "FM-Funknetz HS Dashboard",
class: "service",
contact: "dl3el@darc.de"
},
{
tocall: "APFMO?",
vendor: "BG5ESN",
model: "FMO (NFM Over Internet)",
class: "gadget",
os: "embedded",
contact: "xifengzui@yeah.net"
},
{
tocall: "APFSYC",
vendor: "David McKenzie, K1FSY",
model: "FSY Packet Console",
class: "software",
contact: "k1fsy@vhfwiki.com"
},
{ tocall: "APGBLN", vendor: "NW5W", model: "GoBalloon", class: "tracker" },
{ tocall: "APGDT?", vendor: "VK4FAST", model: "Graphic Data Terminal" },
{
tocall: "APGKEY",
vendor: "Mohammad Zaki, 9W2KEY",
model: "9W2KEY iGate",
class: "igate",
contact: "mzakiab@gmail.com"
},
{ tocall: "APGO??", vendor: "AA3NJ", model: "APRS-Go", class: "app" },
{ tocall: "APHAX?", vendor: "PY2UEP", model: "SM2APRS SondeMonitor", class: "software", os: "Windows" },
{ tocall: "APHBL?", vendor: "KF7EEL", model: "HBLink D-APRS Gateway", class: "software" },
{ tocall: "APHH?", vendor: "Steven D. Bragg, KA9MVA", model: "HamHud", class: "tracker" },
{ tocall: "APHK??", vendor: "LA1BR", model: "Digipeater/tracker" },
{
tocall: "APHMEY",
vendor: "Tapio Heiskanen, OH2TH",
model: "APRS-IS Client for Athom Homey",
contact: "oh2th@iki.fi"
},
{ tocall: "APHPIA", vendor: "HP3ICC", model: "Arduino APRS" },
{ tocall: "APHPIB", vendor: "HP3ICC", model: "Python APRS Beacon" },
{ tocall: "APHPIW", vendor: "HP3ICC", model: "Python APRS WX" },
{ tocall: "APHRM?", vendor: "Giovanni, IW1CGW", model: "Meteo", class: "wx", contact: "iw1cgw@libero.it" },
{ tocall: "APHRT?", vendor: "Giovanni, IW1CGW", model: "Telemetry", contact: "iw1cgw@libero.it" },
{ tocall: "APHT??", vendor: "IU0AAC", model: "HMTracker", class: "tracker" },
{ tocall: "APHW??", vendor: "HamWAN" },
{ tocall: "API282", vendor: "Icom", model: "IC-2820", class: "dstar" },
{ tocall: "API31", vendor: "Icom", model: "IC-31", class: "dstar" },
{ tocall: "API410", vendor: "Icom", model: "IC-4100", class: "dstar" },
{ tocall: "API51", vendor: "Icom", model: "IC-51", class: "dstar" },
{ tocall: "API510", vendor: "Icom", model: "IC-5100", class: "dstar" },
{ tocall: "API710", vendor: "Icom", model: "IC-7100", class: "dstar" },
{ tocall: "API80", vendor: "Icom", model: "IC-80", class: "dstar" },
{ tocall: "API880", vendor: "Icom", model: "IC-880", class: "dstar" },
{ tocall: "API910", vendor: "Icom", model: "IC-9100", class: "dstar" },
{ tocall: "API92", vendor: "Icom", model: "IC-92", class: "dstar" },
{ tocall: "API970", vendor: "Icom", model: "IC-9700", class: "dstar" },
{ tocall: "API???", vendor: "Icom", model: "unknown", class: "dstar" },
{ tocall: "APIC??", vendor: "HA9MCQ", model: "PICiGATE" },
{ tocall: "APIE??", vendor: "W7KMV", model: "PiAPRS" },
{ tocall: "APIN??", vendor: "AB0WV", model: "PinPoint" },
{
tocall: "APIZCI",
vendor: "TA7W/OH2UDS Baris Dinc, TA6AD Emre Keles",
model: "hymTR IZCI Tracker",
class: "tracker",
os: "embedded"
},
{ tocall: "APJ8??", vendor: "KN4CRD", model: "JS8Call", class: "software" },
{ tocall: "APJA??", vendor: "K4HG & AE5PL", model: "JavAPRS" },
{ tocall: "APJE??", vendor: "Gregg Wonderly, W5GGW", model: "JeAPRS" },
{ tocall: "APJI??", vendor: "Peter Loveall, AE5PL", model: "jAPRSIgate", class: "software" },
{ tocall: "APJID2", vendor: "Peter Loveall, AE5PL", model: "D-Star APJID2", class: "dstar" },
{ tocall: "APJS??", vendor: "Peter Loveall, AE5PL", model: "javAPRSSrvr" },
{ tocall: "APJY??", vendor: "KA2DDO", model: "YAAC", class: "software" },
{ tocall: "APK003", vendor: "Kenwood", model: "TH-D72", class: "ht" },
{ tocall: "APK004", vendor: "Kenwood", model: "TH-D74", class: "ht" },
{ tocall: "APK005", vendor: "Kenwood", model: "TH-D75", class: "ht" },
{ tocall: "APK0??", vendor: "Kenwood", model: "TH-D7", class: "ht" },
{ tocall: "APK1??", vendor: "Kenwood", model: "TM-D700", class: "rig" },
{
tocall: "APKDXn",
vendor: "KelateDX, 9M2D",
model: "LAHKHUANO APRS",
class: "tracker",
os: "embedded",
contact: "mzakiab@gmail.com"
},
{
tocall: "APKEYn",
vendor: "9W2KEY",
model: "ATMega328P APRS",
class: "tracker",
os: "embedded",
contact: "mzakiab@gmail.com"
},
{
tocall: "APKHTW",
vendor: "Kip, W3SN",
model: "Tempest Weather Bridge",
class: "wx",
os: "embedded",
contact: "w3sn@moxracing.33mail.com"
},
{ tocall: "APKRAM", vendor: "kramstuff.com", model: "Ham Tracker", class: "app", os: "ios" },
{ tocall: "APLC??", vendor: "DL3DCW", model: "APRScube" },
{
tocall: "APLDAG",
vendor: "Inigo, EA2CQ",
model: "DAGA LoRa/APRS SOTA spotting",
class: "service",
contact: "ea2cq@irratia.org",
features: ["messaging"]
},
{
tocall: "APLDG?",
vendor: "Eddie, 9W2LWK",
model: "LoRAIGate",
class: "igate",
os: "embedded",
contact: "9w2lwk@gmail.com"
},
{
tocall: "APLDH?",
vendor: "Eddie, 9W2LWK",
model: "LoraTracker",
class: "tracker",
os: "embedded",
contact: "9w2lwk@gmail.com"
},
{ tocall: "APLDI?", vendor: "David, OK2DDS", model: "LoRa IGate/Digipeater", class: "digi" },
{ tocall: "APLDM?", vendor: "David, OK2DDS", model: "LoRa Meteostation", class: "wx" },
{
tocall: "APLER?",
vendor: "Ercan, TA3OER",
model: "TROY LoRa Tracker/iGate",
os: "embedded",
contact: "ta3oer@gmail.com"
},
{
tocall: "APLETK",
vendor: "DL5TKL",
model: "T-Echo",
class: "tracker",
os: "embedded",
contact: "cfr34k-git@tkolb.de"
},
{
tocall: "APLFG?",
vendor: "Gabor, HG3FUG",
model: "LoRa WX station",
class: "wx",
os: "embedded",
contact: "hg3fug@fazi.hu"
},
{
tocall: "APLFL?",
vendor: "Damian, SQ2CPA",
model: "LoRa/APRS Balloon",
class: "tracker",
os: "embedded",
contact: "sq2cpa@gmail.com"
},
{ tocall: "APLFM?", vendor: "DO1MA", model: "FemtoAPRS", class: "tracker", os: "embedded" },
{ tocall: "APLG??", vendor: "OE5BPA", model: "LoRa Gateway/Digipeater", class: "digi" },
{
tocall: "APLHB9",
vendor: "SWISS-ARTG",
model: "LoRa iGate RPI",
class: "igate",
os: "Linux/Unix",
contact: "hb9pae@gmail.com"
},
{
tocall: "APLHI?",
vendor: "Giovanni, IW1CGW",
model: "LoRa IGate/Digipeater/Telemetry",
class: "digi",
contact: "iw1cgw@libero.it"
},
{
tocall: "APLHM?",
vendor: "Giovanni, IW1CGW",
model: "LoRa Meteostation",
class: "wx",
contact: "iw1cgw@libero.it"
},
{ tocall: "APLIF?", vendor: "TA5Y", model: "TIF LORA APRS I-GATE", class: "igate" },
{ tocall: "APLIG?", vendor: "TA2MUN/TA9OHC", model: "LightAPRS Tracker", class: "tracker" },
{ tocall: "APLLO?", vendor: "HB4LO", model: "HAB BOT", class: "tracker", contact: "david.perrin@hb9hiz.ch" },
{ tocall: "APLM??", vendor: "WA0TQG", class: "software" },
{ tocall: "APLO??", vendor: "SQ9MDD", model: "LoRa KISS TNC/Tracker", class: "tracker" },
{
tocall: "APLP0?",
vendor: "SQ9P",
model: "fajne digi",
class: "digi",
os: "embedded",
contact: "sq9p.peter@gmail.com"
},
{
tocall: "APLP1?",
vendor: "SQ9P",
model: "LORA/FSK/AFSK fajny tracker",
class: "tracker",
os: "embedded",
contact: "sq9p.peter@gmail.com"
},
{ tocall: "APLPS?", vendor: "Jose, XE3JAC", model: "ESP-32 LoRa", os: "embedded", contact: "xe3jac@gmail.com" },
{ tocall: "APLRF?", vendor: "Damian, SQ2CPA", model: "LoRa APRS", os: "embedded", contact: "sq2cpa@gmail.com" },
{
tocall: "APLRG?",
vendor: "Ricardo, CA2RXU",
model: "ESP32 LoRa iGate",
class: "igate",
os: "embedded",
contact: "richonguzman@gmail.com"
},
{
tocall: "APLRM?",
vendor: "Railab Srl, IU2TZK",
model: "Railab LoRa board",
class: "tracker",
os: "embedded",
contact: "support@railab.com"
},
{
tocall: "APLRS?",
vendor: "Railab Srl, IU2TZK",
model: "Railab LoRa board",
class: "igate",
os: "embedded",
contact: "support@railab.com"
},
{
tocall: "APLRT?",
vendor: "Ricardo, CA2RXU",
model: "ESP32 LoRa Tracker",
class: "tracker",
os: "embedded",
contact: "richonguzman@gmail.com"
},
{ tocall: "APLS??", vendor: "SARIMESH", model: "SARIMESH", class: "software" },
{ tocall: "APLT??", vendor: "OE5BPA", model: "LoRa Tracker", class: "tracker" },
{
tocall: "APLU0?",
vendor: "SP9UP",
model: "ESP32/SX12xx LoRa iGate / Digi",
class: "digi",
os: "embedded",
contact: "wajdzik.m@gmail.com"
},
{
tocall: "APLU1?",
vendor: "SP9UP",
model: "ESP32/SX12xx LoRa Tracker",
class: "tracker",
os: "embedded",
contact: "wajdzik.m@gmail.com"
},
{ tocall: "APLZA?", vendor: "Huang Xuewu, BD5HTY", model: "LoRa", os: "embedded", contact: "bd5hty@gmail.com" },
{ tocall: "APLZX?", vendor: "N1AF", model: "LoRa-APRS", os: "embedded", contact: "lora-aprs@n1af.org" },
{ tocall: "APMAIL", vendor: "Mike, NA7Q", model: "APRS Mailbox", class: "service", contact: "mike.ph4@gmail.com" },
{
tocall: "APMBL3",
vendor: "Mobilinkd LLC",
model: "TNC3",
class: "digi",
os: "embedded",
contact: "support@mobilinkd.com"
},
{
tocall: "APMBL4",
vendor: "Mobilinkd LLC",
model: "TNC4",
class: "digi",
os: "embedded",
contact: "support@mobilinkd.com"
},
{ tocall: "APMBL?", vendor: "Mobilinkd LLC", contact: "support@mobilinkd.com" },
{
tocall: "APMBLN",
vendor: "Mobilinkd LLC",
model: "NucleoTNC",
class: "digi",
os: "embedded",
contact: "support@mobilinkd.com"
},
{ tocall: "APMG??", vendor: "Alex, AB0TJ", model: "PiCrumbs and MiniGate", class: "software" },
{ tocall: "APMI01", vendor: "Microsat", os: "embedded", model: "WX3in1" },
{ tocall: "APMI02", vendor: "Microsat", os: "embedded", model: "WXEth" },
{ tocall: "APMI03", vendor: "Microsat", os: "embedded", model: "PLXDigi" },
{ tocall: "APMI04", vendor: "Microsat", os: "embedded", model: "WX3in1 Mini" },
{ tocall: "APMI05", vendor: "Microsat", os: "embedded", model: "PLXTracker" },
{ tocall: "APMI06", vendor: "Microsat", os: "embedded", model: "WX3in1 Plus 2.0" },
{ tocall: "APMI??", vendor: "Microsat", os: "embedded" },
{ tocall: "APMON?", vendor: "Amon Schumann, DL9AS", model: "APRS Balloon Tracker", class: "tracker", os: "embedded" },
{
tocall: "APMPAD",
vendor: "DF1JSL",
model: "Multi-Purpose APRS Daemon",
class: "service",
contact: "joerg.schultze.lutter@gmail.com",
features: ["messaging"]
},
{ tocall: "APMQ??", vendor: "WB2OSZ", model: "Ham Radio of Things" },
{ tocall: "APMT??", vendor: "LZ1PPL", model: "Micro APRS Tracker", class: "tracker" },
{
tocall: "APN0A?",
vendor: "Jeremy Cooper, KE6JJJ",
model: "N0ARY Full Service Packet BBS",
class: "daemon",
os: "Linux/Unix",
contact: "jeremy.gthb@baymoo.org"
},
{ tocall: "APN102", vendor: "Gregg Wonderly, W5GGW", model: "APRSNow", class: "app", os: "ipad" },
{ tocall: "APN2??", vendor: "VE4KLM", model: "NOSaprs for JNOS 2.0" },
{ tocall: "APN3??", vendor: "Kantronics", model: "KPC-3" },
{ tocall: "APN9??", vendor: "Kantronics", model: "KPC-9612" },
{
tocall: "APNCM",
vendor: "Keith Kaiser, WA0TJT",
model: "Net Control Manager",
class: "software",
os: "browser",
contact: "wa0tjt@gmail.com"
},
{ tocall: "APND??", vendor: "PE1MEW", model: "DIGI_NED" },
{
tocall: "APNEO?",
vendor: "chevybowtie",
model: "nesdr-aprs-igate",
class: "daemon",
os: "Linux",
contact: "GitHub - chevybowtie"
},
{ tocall: "APNIC4", vendor: "SQ5EKU", model: "BidaTrak", class: "tracker", os: "embedded" },
{ tocall: "APNIFC", vendor: "Mike, NA7Q", model: "National Interagency Fire Center Alerts", class: "service" },
{
tocall: "APNJS?",
vendor: "Julien Sansonnens, HB9HRD",
model: "Web messaging service",
class: "service",
contact: "julien.owls@gmail.com",
features: ["messaging"]
},
{ tocall: "APNK01", vendor: "Kenwood", model: "TM-D700", class: "rig", features: ["messaging"] },
{ tocall: "APNK80", vendor: "Kantronics", model: "KAM" },
{ tocall: "APNKMP", vendor: "Kantronics", model: "KAM+" },
{ tocall: "APNKMX", vendor: "Kantronics", model: "KAM-XL" },
{ tocall: "APNL??", vendor: "OE5DXL, OE5HPM", model: "dxlAPRS", class: "daemon", os: "Linux/Unix" },
{ tocall: "APNM??", vendor: "MFJ", model: "TNC" },
{ tocall: "APNP??", vendor: "PacComm", model: "TNC" },
{ tocall: "APNT??", vendor: "SV2AGW", model: "TNT TNC as a digipeater", class: "digi" },
{ tocall: "APNU??", vendor: "IW3FQG", model: "UIdigi", class: "digi" },
{ tocall: "APNV0?", vendor: "SQ8L", model: "VP-Digi", os: "embedded", class: "digi" },
{ tocall: "APNV1?", vendor: "SQ8L", model: "VP-Node", os: "embedded" },
{ tocall: "APNV2?", vendor: "SQ8L", model: "VP-Tracker", class: "tracker" },
{ tocall: "APNV??", vendor: "SQ8L" },
{ tocall: "APNW??", vendor: "SQ3FYK", model: "WX3in1", os: "embedded" },
{ tocall: "APNX??", vendor: "K6DBG", model: "TNC-X" },
{ tocall: "APOA??", vendor: "OpenAPRS", model: "app", class: "app", os: "ios" },
{ tocall: "APOCSG", vendor: "N0AGI", model: "POCSAG" },
{
tocall: "APODOT",
vendor: "Mike, NA7Q",
model: "Oregon Department of Transportion Traffic Alerts",
class: "service"
},
{ tocall: "APOG7?", vendor: "OpenGD77", model: "OpenGD77", os: "embedded", contact: "Roger VK3KYY/G4KYF" },
{ tocall: "APOLU?", vendor: "AMSAT-LU", model: "Oscar", class: "satellite" },
{ tocall: "APONE?", vendor: "aprs.one" },
{ tocall: "APONEA", vendor: "aprs.one", model: "Mobile app tracker", class: "app" },
{ tocall: "APONET", vendor: "aprs.one", model: "Hardware tracker", class: "tracker" },
{ tocall: "APOPEN", vendor: "David Platt, AE6EO", model: "OpenTNC", os: "embedded", contact: "dplatt@radagast.org" },
{ tocall: "APOPYT", vendor: "Mike, NA7Q", model: "NA7Q Messenger", class: "software", contact: "mike.ph4@gmail.com" },
{
tocall: "APOSAT",
vendor: "Mike, NA7Q",
model: "Open Source Satellite Gateway",
class: "service",
contact: "mike.ph4@gmail.com"
},
{
tocall: "APOSB",
vendor: "SharkRF",
model: "openSPOT3",
class: "gadget",
os: "embedded",
contact: "info@sharkrf.com"
},
{
tocall: "APOSB4",
vendor: "SharkRF",
model: "openSPOT4",
class: "gadget",
os: "embedded",
contact: "info@sharkrf.com"
},
{ tocall: "APOSB?", vendor: "SharkRF", contact: "info@sharkrf.com" },
{ tocall: "APOSBM", vendor: "SharkRF", model: "M1KE", class: "gadget", os: "embedded", contact: "info@sharkrf.com" },
{
tocall: "APOSMS",
vendor: "Mike, NA7Q",
model: "Open Source SMS Gateway",
class: "service",
contact: "mike.ph4@gmail.com",
features: ["messaging"]
},
{
tocall: "APOSW?",
vendor: "SharkRF",
model: "openSPOT2",
class: "gadget",
os: "embedded",
contact: "info@sharkrf.com"
},
{ tocall: "APOT??", vendor: "Argent Data Systems", model: "OpenTracker", class: "tracker" },
{ tocall: "APOVU?", vendor: "K J Somaiya Institute", model: "BeliefSat" },
{ tocall: "APOZ??", vendor: "OZ1EKD, OZ7HVO", model: "KissOZ", class: "tracker" },
{ tocall: "APP6??", model: "APRSlib" },
{
tocall: "APPCO?",
vendor: "RadCommSoft, LLC",
model: "PicoAPRSTracker",
class: "tracker",
os: "embedded",
contact: "ab4mw@radcommsoft.com"
},
{ tocall: "APPIC?", vendor: "DB1NTO", model: "PicoAPRS", class: "tracker" },
{ tocall: "APPM??", vendor: "DL1MX", model: "rtl-sdr Python iGate", class: "software" },
{
tocall: "APPRIS",
vendor: "DF1JSL",
model: "Apprise APRS plugin",
class: "service",
contact: "joerg.schultze.lutter@gmail.com",
features: ["messaging"]
},
{
tocall: "APPRJ?",
vendor: "Custom Digital Services, LLC",
model: "Traveler's ptFlex and ptSolar trackers",
class: "tracker",
os: "embedded",
contact: "zack@custom-ds.com"
},
{
tocall: "APPRO?",
vendor: "KO6IKR",
model: "PyTNC Pro",
class: "software",
os: "Windows",
contact: "KO6IKR@gmail.com"
},
{
tocall: "APPS??",
vendor: "Øyvind, LA7ECA (for the Norwegian Radio Relay League)",
model: "Polaric Server",
class: "software",
os: "Linux"
},
{ tocall: "APPT??", vendor: "JF6LZE", model: "KetaiTracker", class: "tracker" },
{
tocall: "APQTH?",
vendor: "Weston Bustraan, W8WJB",
model: "QTH.app",
class: "software",
os: "macOS",
features: ["messaging"]
},
{
tocall: "APQUIZ",
vendor: "John Rokicki, KC1VMZ",
model: "QUIZME APRS Quizmaster",
class: "service",
contact: "kc1vmz@gmail.com",
features: ["messaging"]
},
{ tocall: "APR2MF", vendor: "Mike, DL2MF", model: "MF2wxAPRS Tinkerforge gateway", class: "wx", os: "Windows" },
{ tocall: "APR8??", vendor: "Bob Bruninga, WB4APR", model: "APRSdos", class: "software" },
{ tocall: "APRARX", vendor: "Open Source", model: "radiosonde_auto_rx", class: "software", os: "Linux/Unix" },
{
tocall: "APREST",
vendor: "cwop.rest",
model: "HTTP - TCP CWOP Packet Submission",
class: "service",
contact: "leo@herzog.tech"
},
{ tocall: "APRFG?", vendor: "RF.Guru", contact: "info@rf.guru" },
{ tocall: "APRFGB", vendor: "RF.Guru", model: "APRS LoRa Pager", os: "embedded", contact: "info@rf.guru" },
{
tocall: "APRFGD",
vendor: "RF.Guru",
model: "APRS Digipeater",
class: "digi",
os: "embedded",
contact: "info@rf.guru"
},
{ tocall: "APRFGH", vendor: "RF.Guru", model: "Hotspot", class: "rig", os: "embedded", contact: "info@rf.guru" },
{
tocall: "APRFGI",
vendor: "RF.Guru",
model: "LoRa APRS iGate",
class: "igate",
os: "embedded",
contact: "info@rf.guru"
},
{
tocall: "APRFGL",
vendor: "RF.Guru",
model: "Lora APRS Digipeater",
class: "digi",
os: "embedded",
contact: "info@rf.guru"
},
{ tocall: "APRFGM", vendor: "RF.Guru", model: "Mobile Radio", class: "rig", os: "embedded", contact: "info@rf.guru" },
{
tocall: "APRFGP",
vendor: "RF.Guru",
model: "Portable Radio",
class: "ht",
os: "embedded",
contact: "info@rf.guru"
},
{ tocall: "APRFGR", vendor: "RF.Guru", model: "Repeater", class: "rig", os: "embedded", contact: "info@rf.guru" },
{
tocall: "APRFGT",
vendor: "RF.Guru",
model: "LoRa APRS Tracker",
class: "tracker",
os: "embedded",
contact: "info@rf.guru"
},
{
tocall: "APRFGW",
vendor: "RF.Guru",
model: "LoRa APRS Weather Station",
class: "wx",
os: "embedded",
contact: "info@rf.guru"
},
{
tocall: "APRFTH",
vendor: "Xian Stannard 2E1IPS & Chung Poon M7UNG",
model: "Treasure Hunt Service",
class: "service",
contact: "maintainers@rftrsr.net",
features: ["messaging"]
},
{ tocall: "APRG??", vendor: "OH2GVE", model: "aprsg", class: "software", os: "Linux/Unix" },
{ tocall: "APRHH?", vendor: "Steven D. Bragg, KA9MVA", model: "HamHud", class: "tracker" },
{
tocall: "APRKEY",
vendor: "Mohammad Zaki, 9W2KEY",
model: "MYANET APRS Bot",
class: "service",
os: "Linux",
contact: "mzakiab@gmail.com"
},
{
tocall: "APRM20",
vendor: "Open Source",
model: "M20 radiosonde",
class: "tracker",
os: "embedded",
contact: "pawel.sq2ips@gmail.com"
},
{
tocall: "APRNFW",
vendor: "Franek SP5FRA",
model: "RS41-NFW",
class: "tracker",
os: "embedded",
contact: "franeklada18@gmail.com"
},
{ tocall: "APRNOW", vendor: "Gregg Wonderly, W5GGW", model: "APRSNow", class: "app", os: "ipad" },
{
tocall: "APRPI?",
vendor: "TA2KVC",
model: "Raspberry Pi APRS / Pico W APRS",
class: "tracker",
contact: "volkancevik@live.com"
},
{
tocall: "APRPJH",
vendor: "Piju, 9M2PJU",
model: "9M2PJU APRS Heat Bot",
class: "service",
contact: "9m2pju@hamradio.my"
},
{
tocall: "APRPJM",
vendor: "Piju, 9M2PJU",
model: "APRSMY Net Bot",
class: "service",
contact: "9m2pju@hamradio.my"
},
{
tocall: "APRPJU",
vendor: "Piju, 9M2PJU",
model: "9M2PJU APRS Bot",
class: "daemon",
contact: "9m2pju@hamradio.my",
features: ["messaging"]
},
{
tocall: "APRPJW",
vendor: "Piju, 9M2PJU",
model: "9M2PJU APRS WX Bot",
class: "service",
contact: "9m2pju@hamradio.my"
},
{
tocall: "APRPR?",
vendor: "Robert DM4RW, Peter DL6MAA",
model: "Teensy RPR TNC",
class: "tracker",
os: "embedded",
contact: "dm4rw@skywaves.de"
},
{ tocall: "APRRDZ", model: "rdzTTGOsonde", vendor: "DL9RDZ", class: "tracker" },
{
tocall: "APRRES",
vendor: "xssfox",
model: "APRS-RepeaterRescue",
class: "network",
os: "embedded",
contact: "repeater-rescue@michaela.lgbt",
features: ["messaging"]
},
{
tocall: "APRRF?",
vendor: "RRF - Réseau des Répéteurs Francophones",
model: "Tracker for RRF",
class: "tracker",
os: "embedded",
contact: "f1evm@f1evm.fr",
features: ["messaging"]
},
{ tocall: "APRT??", vendor: "Motorola", model: "MotoTRBO" },
{ tocall: "APRS", vendor: "Unknown", model: "Unknown" },
{ tocall: "APRX??", vendor: "Kenneth W. Finnegan, W6KWF", model: "Aprx", class: "igate", os: "Linux/Unix" },
{ tocall: "APS???", vendor: "Brent Hildebrand, KH2Z", model: "APRS+SA", class: "software" },
{ tocall: "APSAR", vendor: "ZL4FOX", model: "SARTrack", class: "software", os: "Windows" },
{ tocall: "APSC??", vendor: "OH2MQK, OH7LZB", model: "aprsc", class: "software" },
{ tocall: "APSDA?", vendor: "APSD Developers", model: "APSD", class: "software", contact: "contact@apsd.app" },
{
tocall: "APSDR?",
vendor: "Marcus Roskosch, DL8MRE",
model: "sdr-control",
class: "app",
contact: "aprs@ham-radio-apps.com"
},
{ tocall: "APSF??", vendor: "F5OPV, SFCP_LABS", model: "embedded APRS devices", os: "embedded" },
{ tocall: "APSFLG", vendor: "F5OPV, SFCP_LABS", model: "LoRa/APRS Gateway", class: "digi", os: "embedded" },
{ tocall: "APSFRP", vendor: "F5OPV, SFCP_LABS", model: "VHF/UHF Repeater", os: "embedded" },
{ tocall: "APSFTL", vendor: "F5OPV, SFCP_LABS", model: "LoRa/APRS Telemetry Reporter", os: "embedded" },
{ tocall: "APSFWX", vendor: "F5OPV, SFCP_LABS", model: "embedded Weather Station", class: "wx", os: "embedded" },
{
tocall: "APSIGK",
vendor: "Henri Bergius, DF4HB",
model: "Signal K APRS Plugin",
class: "service",
contact: "henri.bergius@iki.fi"
},
{ tocall: "APSK63", vendor: "Chris Moulding, G4HYG", model: "APRS Messenger", class: "software", os: "Windows" },
{ tocall: "APSMS?", vendor: "Paul Dufresne", model: "SMS gateway", class: "software" },
{
tocall: "APSN01",
vendor: "CSN Technologies Inc.",
model: "iGateMini",
contact: "info@igatemini.com",
os: "embedded",
features: ["messaging"]
},
{ tocall: "APSN??", vendor: "CSN Technologies Inc." },
{ tocall: "APSRF?", vendor: "SoftRF", model: "Ham Edition", class: "tracker", os: "embedded" },
{ tocall: "APSTAR", vendor: "AllStar Link LLC", model: "Asterisk/app_rpt", class: "daemon", os: "Linux/Unix" },
{ tocall: "APSTM?", vendor: "W7QO", model: "Balloon tracker", class: "tracker" },
{ tocall: "APSTPO", vendor: "N0AGI", model: "Satellite Tracking and Operations", class: "software" },
{
tocall: "APSVX?",
vendor: "Tobias Blomberg, SM0SVX",
model: "SvxLink",
class: "daemon",
os: "Linux/Unix",
contact: "aprs-deviceid@cyberspejs.net"
},
{ tocall: "APT2??", vendor: "Byonics", model: "TinyTrak2", class: "tracker" },
{ tocall: "APT3??", vendor: "Byonics", model: "TinyTrak3", class: "tracker" },
{ tocall: "APT4??", vendor: "Byonics", model: "TinyTrak4", class: "tracker" },
{ tocall: "APTB??", vendor: "BG5HHP", model: "TinyAPRS" },
{ tocall: "APTCHE", vendor: "PU3IKE", model: "TcheTracker, Tcheduino", class: "tracker" },
{ tocall: "APTCMA", vendor: "Cleber, PU1CMA", model: "CAPI Tracker", class: "tracker" },
{
tocall: "APTEMP",
vendor: "KL7AF",
model: "APRS-Tempest Weather Gateway",
class: "wx",
os: "Linux/Unix",
contact: "kl7af@foghaven.net"
},
{
tocall: "APTGIK",
vendor: "Juliet Delta, 9M4GIK",
model: "APRS Melaka",
os: "embedded",
contact: "9m2ikr@gmail.com"
},
{
tocall: "APTHUR",
model: "APRSThursday weekly event mapbot daemon",
contact: "harihend1973@gmail.com",
vendor: "YD0BCX",
class: "service",
os: "Linux/Unix",
features: ["messaging"]
},
{ tocall: "APTKJ?", vendor: "W9JAJ", model: "ATTiny APRS Tracker", os: "embedded" },
{
tocall: "APTKVB",
vendor: "IT9KVB",
model: "Python APRS QTH and Weather-Station",
class: "daemon",
contact: "it9kvb@gmail.com"
},
{ tocall: "APTLVC", vendor: "TA5LVC", model: "TR80 APRS Tracker", class: "tracker" },
{ tocall: "APTNG?", vendor: "Filip YU1TTN", model: "Tango Tracker", class: "tracker" },
{ tocall: "APTPN?", vendor: "KN4ORB", model: "TARPN Packet Node Tracker", class: "tracker" },
{ tocall: "APTR??", vendor: "Motorola", model: "MotoTRBO" },
{ tocall: "APTSLA", vendor: "HA2NON", model: "tesla-aprs", class: "daemon", contact: "nonoo@nonoo.hu" },
{ tocall: "APTT*", vendor: "Byonics", model: "TinyTrak", class: "tracker" },
{
tocall: "APTUR?",
vendor: "aprs.ai, TA7HBK",
model: "Türkiye'nin APRS Uygulaması",
class: "app",
contact: "73@aprs.ai",
features: ["messaging"]
},
{ tocall: "APTW??", vendor: "Byonics", model: "WXTrak", class: "wx" },
{ tocall: "APU1??", vendor: "Roger Barker, G4IDE", model: "UI-View16", class: "software", os: "Windows" },
{ tocall: "APU2*", vendor: "Roger Barker, G4IDE", model: "UI-View32", class: "software", os: "Windows" },
{ tocall: "APUDR?", vendor: "NW Digital Radio", model: "UDR" },
{ tocall: "APVE??", vendor: "unknown", model: "EchoLink" },
{ tocall: "APVM??", vendor: "Digital Radio China Club", model: "DRCC-DVM", class: "igate" },
{ tocall: "APVR??", vendor: "unknown", model: "IRLP" },
{
tocall: "APW2W?",
vendor: "Joachim Sonnabend, DG3FBL",
model: "WiresX2Web Software",
class: "software",
os: "Windows",
contact: "mail@dg3fbl.de"
},
{
tocall: "APW9??",
vendor: "Mile Strk, 9A9Y",
model: "WX Katarina",
class: "wx",
os: "embedded",
features: ["messaging"]
},
{ tocall: "APWA??", vendor: "KJ4ERJ", model: "APRSISCE", class: "software", os: "Android" },
{
tocall: "APWEE?",
vendor: "Tom Keffer and Matthew Wall",
model: "WeeWX Weather Software",
class: "software",
os: "Linux/Unix"
},
{
tocall: "APWHE?",
vendor: "KF6UFO",
model: "WX-Helios",
class: "wx",
os: "Linux",
contact: "https://github.com/kf6ufo/kf6ufo-wx-helios"
},
{
tocall: "APWM??",
vendor: "KJ4ERJ",
model: "APRSISCE",
class: "software",
os: "Windows Mobile",
features: ["messaging", "item-in-msg"]
},
{
tocall: "APWW??",
vendor: "KJ4ERJ",
model: "APRSIS32",
class: "software",
os: "Windows",
features: ["messaging", "item-in-msg"]
},
{
tocall: "APWXS?",
vendor: "Colin Cogle, W1DNS",
model: "aprs-weather-submit",
class: "daemon",
contact: "https://github.com/rhymeswithmogul/aprs-weather-submit/"
},
{ tocall: "APWnnn", vendor: "Sproul Brothers", model: "WinAPRS", class: "software", os: "Windows" },
{ tocall: "APX???", vendor: "Open Source", model: "Xastir", class: "software", os: "Linux/Unix" },
{ tocall: "APXR??", vendor: "G8PZT", model: "Xrouter" },
{ tocall: "APY01D", vendor: "Yaesu", model: "FT1D", class: "ht" },
{ tocall: "APY02D", vendor: "Yaesu", model: "FT2D", class: "ht" },
{ tocall: "APY05D", vendor: "Yaesu", model: "FT5D", class: "ht" },
{ tocall: "APY200", vendor: "Yaesu", model: "FTM-200D", class: "rig" },
{ tocall: "APY300", vendor: "Yaesu", model: "FTM-300D", class: "rig" },
{ tocall: "APY400", vendor: "Yaesu", model: "FTM-400", class: "rig" },
{ tocall: "APY500", vendor: "Yaesu", model: "FTM-500D", class: "rig" },
{ tocall: "APY510", vendor: "Yaesu", model: "FTM-510D", class: "rig" },
{ tocall: "APYS??", vendor: "W2GMD", model: "Python APRS", class: "software" },
{ tocall: "APZ*", vendor: "Unknown", model: "Experimental" },
{ tocall: "APZ18", vendor: "IW3FQG", model: "UIdigi", class: "digi" },
{ tocall: "APZ186", vendor: "IW3FQG", model: "UIdigi", class: "digi" },
{ tocall: "APZ19", vendor: "IW3FQG", model: "UIdigi", class: "digi" },
{ tocall: "APZ247", model: "UPRS", vendor: "NR0Q" },
{ tocall: "APZG??", vendor: "OH2GVE", model: "aprsg", class: "software", os: "Linux/Unix" },
{ tocall: "APZMAJ", vendor: "M1MAJ", model: "DeLorme inReach Tracker" },
{ tocall: "APZMDR", vendor: "Open Source", model: "HaMDR", class: "tracker", os: "embedded" },
{ tocall: "APZTKP", vendor: "Nick Hanks, N0LP", model: "TrackPoint", class: "tracker", os: "embedded" },
{ tocall: "APZWKR", vendor: "GM1WKR", model: "NetSked", class: "software" },
{ tocall: "APnnnD", vendor: "Painter Engineering", model: "uSmartDigi D-Gate", class: "dstar" },
{ tocall: "APnnnU", vendor: "Painter Engineering", model: "uSmartDigi Digipeater", class: "digi" },
{ tocall: "PSKAPR", vendor: "Open Source", model: "PSKmail", class: "software" }
]);