hamaprs

package module
v0.0.0-...-4f4b9fb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2017 License: MIT Imports: 9 Imported by: 0

README

wercker status

hamAPRS

HamAPRS is a Go library to parse and decode APRS packet, mainly based on libfap but provides additional features

  • Recognize the APRS devices

Usage

You may have to set CGO_LDFLAGS and CGO_CFLAGS environment according to your path:

export CGO_CFLAGS=-I/opt/local/include
export CGO_LDFLAGS=-L/opt/local/lib

Create the parser and then parse your packet.

parser := NewParser()
packet, _ = parser.parsePacket("KK6NXK-7>T2U1P4,WIDE1-1,WIDE2-1,qAR,VK7ZRO-2:`K1qm y>/'\"4/}|!$&<'V|!w4&!|3", false)

Get the model transceiver used to send a packet.

packet, _ := parser.ParsePacket("KK6NXK-7>S3SWY6,WIDE1-1,qAS,JH6ETS-10:`;\\ll} >/`\"3{}CM now GIGA No...5_$", false)
d := packet.Device()
fmt.Prinln(d.Model)

Returns FT1D

Thanks

APRS identification data
Scott Kidder aprs-dashboard

Documentation

Index

Constants

View Source
const InvalidCoordinate float64 = 360

InvalidCoordinate is a marker for an unset position

Variables

View Source
var ToCallsJSONData = []byte(`{"micelegacy":{">^":{"features":["messaging"],"class":"ht","model":"TH-D74","vendor":"Kenwood","suffix":"^","prefix":">"},">":{"class":"ht","features":["messaging"],"prefix":">","model":"TH-D7A","vendor":"Kenwood"},">=":{"vendor":"Kenwood","model":"TH-D72","prefix":">","suffix":"=","class":"ht","features":["messaging"]},"]":{"features":["messaging"],"class":"rig","model":"TM-D700","vendor":"Kenwood","prefix":"]"},"]=":{"model":"TM-D710","vendor":"Kenwood","suffix":"=","prefix":"]","class":"rig","features":["messaging"]}},"mice":{"_#":{"vendor":"Yaesu","model":"VX-8G","class":"ht"},"_(":{"class":"ht","vendor":"Yaesu","model":"FT2D"},"_\"":{"model":"FTM-350","vendor":"Yaesu","class":"rig"},"|4":{"class":"tracker","model":"TinyTrak4","vendor":"Byonics"},"*v":{"model":"Tracker","vendor":"KissOZ","class":"tracker"},"_$":{"class":"ht","model":"FT1D","vendor":"Yaesu"},"_ ":{"model":"VX-8","vendor":"Yaesu","class":"ht"},"|3":{"class":"tracker","model":"TinyTrak3","vendor":"Byonics"},"^v":{"vendor":"HinzTec","model":"anyfrog"},"_)":{"class":"rig","vendor":"Yaesu","model":"FTM-100D"},"_%":{"model":"FTM-400DR","vendor":"Yaesu","class":"rig"}},"tocalls":{"APNW??":{"model":"WX3in1","os":"embedded","vendor":"SQ3FYK"},"APJI??":{"class":"software","model":"jAPRSIgate","vendor":"Peter Loveall, AE5PL"},"APU1??":{"os":"Windows","model":"UI-View16","vendor":"Roger Barker, G4IDE","class":"software"},"APAVT5":{"class":"tracker","vendor":"SainSonic","model":"AP510"},"APOA??":{"class":"app","vendor":"OpenAPRS","os":"ios","model":"app"},"APAG??":{"model":"AGate"},"APAX??":{"model":"AFilterX"},"APNKMP":{"model":"KAM+","vendor":"Kantronics"},"APIN??":{"model":"PinPoint","vendor":"AB0WV"},"APMI05":{"model":"PLXTracker","os":"embedded","vendor":"Microsat"},"APDF??":{"model":"Automatic DF units"},"APCLWX":{"model":"EYWeather","vendor":"ZS6EY","class":"wx"},"APHT??":{"vendor":"IU0AAC","model":"HMTracker","class":"tracker"},"APAM??":{"model":"AltOS","vendor":"Altus Metrum","class":"tracker"},"APZMAJ":{"vendor":"M1MAJ","model":"DeLorme inReach Tracker"},"AP1WWX":{"vendor":"TAPR","model":"T-238+","class":"wx"},"APCLEY":{"class":"tracker","model":"EYTraker","vendor":"ZS6EY"},"APYS??":{"class":"software","model":"Python APRS","vendor":"W2GMD"},"APDnnn":{"class":"software","os":"Linux/Unix","model":"aprsd","vendor":"Open Source"},"APDT??":{"model":"APRStouch Tone (DTMF)","vendor":"unknown"},"PSKAPR":{"vendor":"Open Source","model":"PSKmail","class":"software"},"APMI01":{"model":"WX3in1","os":"embedded","vendor":"Microsat"},"APOZ??":{"class":"tracker","model":"KissOZ","vendor":"OZ1EKD, OZ7HVO"},"APPT??":{"model":"KetaiTracker","vendor":"JF6LZE","class":"tracker"},"APMT??":{"vendor":"LZ1PPL","model":"Micro APRS Tracker","class":"tracker"},"APAW??":{"class":"software","os":"Windows","model":"AGWPE","vendor":"SV2AGW"},"APCL??":{"model":"maprs","vendor":"maprs.org","class":"app"},"APK0??":{"vendor":"Kenwood","model":"TH-D7","class":"ht"},"APDU??":{"os":"Android","model":"U2APRS","vendor":"JA7UDE","class":"app"},"APGO??":{"class":"app","vendor":"AA3NJ","model":"APRS-Go"},"APK1??":{"vendor":"Kenwood","model":"TM-D700","class":"rig"},"APRNOW":{"class":"app","vendor":"Gregg Wonderly, W5GGW","os":"ipad","model":"APRSNow"},"APMI02":{"os":"embedded","model":"WXEth","vendor":"Microsat"},"APY01D":{"class":"ht","model":"FT1D","vendor":"Yaesu"},"APAGW":{"os":"Windows","model":"AGWtracker","vendor":"SV2AGW","class":"software"},"APC???":{"class":"app","model":"APRS/CE","vendor":"Rob Wittner, KZ5RW"},"APZMDR":{"class":"tracker","vendor":"Open Source","os":"embedded","model":"HaMDR"},"APBPQ?":{"vendor":"John Wiseman, G8BPQ","os":"Windows","model":"BPQ32","class":"software"},"APZG??":{"class":"software","vendor":"OH2GVE","os":"Linux/Unix","model":"aprsg"},"APDS??":{"model":"dsDIGI","os":"embedded","vendor":"SP9UOB"},"APVE??":{"model":"EchoLink","vendor":"unknown"},"APK004":{"vendor":"Kenwood","model":"TH-D74","class":"ht"},"APECAN":{"model":"Pecan Pico APRS Balloon Tracker","vendor":"KT5TK/DL7AD","class":"tracker"},"APSTM?":{"model":"Balloon tracker","vendor":"W7QO","class":"tracker"},"APWW??":{"features":["messaging","item-in-msg"],"class":"software","vendor":"KJ4ERJ","os":"Windows","model":"APRSIS32"},"APN3??":{"vendor":"Kantronics","model":"KPC-3"},"APN9??":{"vendor":"Kantronics","model":"KPC-9612"},"APHK??":{"model":"Digipeater/tracker","vendor":"LA1BR"},"APIC??":{"vendor":"HA9MCQ","model":"PICiGATE"},"APXR??":{"model":"Xrouter","vendor":"G8PZT"},"APSAR":{"class":"software","model":"SARTrack","os":"Windows","vendor":"ZL4FOX"},"APS???":{"class":"software","model":"APRS+SA","vendor":"Brent Hildebrand, KH2Z"},"APSTPO":{"class":"software","vendor":"N0AGI","model":"Satellite Tracking and Operations"},"APZTKP":{"class":"tracker","vendor":"Nick Hanks, N0LP","os":"embedded","model":"TrackPoint"},"APR8??":{"class":"software","model":"APRSdos","vendor":"Bob Bruninga, WB4APR"},"APDG??":{"class":"dstar","model":"ircDDB Gateway","vendor":"Jonathan, G4KLX"},"APOT??":{"class":"tracker","model":"OpenTracker","vendor":"Argent Data Systems"},"APTR??":{"vendor":"Motorola","model":"MotoTRBO"},"APFI??":{"vendor":"aprs.fi","class":"app"},"APMI03":{"os":"embedded","model":"PLXDigi","vendor":"Microsat"},"APRX??":{"os":"Linux/Unix","vendor":"Kenneth W. Finnegan, W6KWF","model":"Aprx","class":"software"},"APK003":{"vendor":"Kenwood","model":"TH-D72","class":"ht"},"APWA??":{"class":"software","os":"Android","model":"APRSISCE","vendor":"KJ4ERJ"},"APBL??":{"model":"BeeLine GPS","vendor":"BigRedBee","class":"tracker"},"APB2MF":{"class":"software","vendor":"Mike, DL2MF","os":"Windows","model":"MF2APRS Radiosonde tracking tool"},"APAGW?":{"class":"software","os":"Windows","vendor":"SV2AGW","model":"AGWtracker"},"APY02D":{"class":"ht","vendor":"Yaesu","model":"FT2D"},"APFG??":{"class":"software","vendor":"KP4DJT","model":"Flood Gage"},"APWM??":{"class":"software","features":["messaging","item-in-msg"],"os":"Windows Mobile","model":"APRSISCE","vendor":"KJ4ERJ"},"APX???":{"class":"software","vendor":"Open Source","os":"Linux/Unix","model":"Xastir"},"APTW??":{"class":"wx","vendor":"Byonics","model":"WXTrak"},"APNT??":{"vendor":"SV2AGW","model":"TNT TNC as a digipeater","class":"digi"},"APZ19":{"class":"digi","vendor":"IW3FQG","model":"UIdigi"},"APNM??":{"model":"TNC","vendor":"MFJ"},"APERXQ":{"model":"PE1RXQ APRS Tracker","vendor":"PE1RXQ","class":"tracker"},"APNK01":{"class":"rig","features":["messaging"],"model":"TM-D700","vendor":"Kenwood"},"APZ247":{"vendor":"NR0Q","model":"UPRS"},"APRS":{"model":"Unknown","vendor":"Unknown"},"APN102":{"class":"app","model":"APRSNow","os":"ipad","vendor":"Gregg Wonderly, W5GGW"},"APMG??":{"class":"software","vendor":"Alex, AB0TJ","os":"Netduino","model":"MiniGate"},"APAF??":{"model":"AFilter"},"APRG??":{"class":"software","os":"Linux/Unix","vendor":"OH2GVE","model":"aprsg"},"APMI??":{"os":"embedded","vendor":"Microsat"},"APZ18":{"model":"UIdigi","vendor":"IW3FQG","class":"digi"},"AP4R??":{"class":"software","vendor":"Open Source","model":"APRS4R"},"APJID2":{"model":"D-Star APJID2","vendor":"Peter Loveall, AE5PL","class":"dstar"},"APVR??":{"model":"IRLP","vendor":"unknown"},"APAND?":{"class":"app","os":"Android","model":"APRSdroid","vendor":"Open Source"},"APJS??":{"model":"javAPRSSrvr","vendor":"Peter Loveall, AE5PL"},"APnnnU":{"model":"uSmartDigi Digipeater","vendor":"Painter Engineering","class":"digi"},"APSMS?":{"class":"software","model":"SMS gateway","vendor":"Paul Defrusne"},"APT2??":{"class":"tracker","model":"TinyTrak2","vendor":"Byonics"},"APCLEZ":{"class":"tracker","model":"Telit EZ10 GSM application","vendor":"ZS6EY"},"APFII?":{"class":"app","vendor":"aprs.fi","os":"ios"},"APDI??":{"model":"DIXPRS","vendor":"Bela, HA5DI","class":"software"},"APT4??":{"vendor":"Byonics","model":"TinyTrak4","class":"tracker"},"APRRT?":{"model":"RTrak","vendor":"RPC Electronics","class":"tracker"},"APW???":{"model":"WinAPRS","os":"Windows","vendor":"Sproul Brothers","class":"software"},"APZWKR":{"vendor":"GM1WKR","model":"NetSked","class":"software"},"APND??":{"model":"DIGI_NED","vendor":"PE1MEW"},"APNP??":{"model":"TNC","vendor":"PacComm"},"API???":{"vendor":"Icom","model":"unknown","class":"dstar"},"APAH??":{"model":"AHub"},"APHH?":{"vendor":"Steven D. Bragg, KA9MVA","model":"HamHud","class":"tracker"},"APDPRS":{"class":"dstar","vendor":"unknown","model":"D-Star APDPRS"},"APUDR?":{"vendor":"NW Digital Radio","model":"UDR"},"APY400":{"class":"ht","vendor":"Yaesu","model":"FTM-400"},"APNK80":{"model":"KAM","vendor":"Kantronics"},"APNU??":{"class":"digi","model":"UIdigi","vendor":"IW3FQG"},"APSK63":{"vendor":"Chris Moulding, G4HYG","os":"Windows","model":"APRS Messenger","class":"software"},"APJA??":{"vendor":"K4HG & AE5PL","model":"JavAPRS"},"APIE??":{"model":"PiAPRS","vendor":"W7KMV"},"APDST?":{"os":"embedded","model":"dsTracker","vendor":"SP9UOB"},"APCWP8":{"vendor":"GM7HHB","model":"WinphoneAPRS","class":"app"},"APDW??":{"vendor":"WB2OSZ","model":"DireWolf"},"APOLU?":{"class":"satellite","model":"Oscar","vendor":"AMSAT-LU"},"APT3??":{"class":"tracker","model":"TinyTrak3","vendor":"Byonics"},"APLM??":{"vendor":"WA0TQG","class":"software"},"APRHH?":{"model":"HamHud","vendor":"Steven D. Bragg, KA9MVA","class":"tracker"},"APDNO?":{"os":"embedded","vendor":"DO3SWW","model":"APRSduino","class":"tracker"},"APKRAM":{"class":"app","os":"ios","vendor":"kramstuff.com","model":"Ham Tracker"},"APNX??":{"vendor":"K6DBG","model":"TNC-X"},"APnnnD":{"class":"dstar","model":"uSmartDigi D-Gate","vendor":"Painter Engineering"},"APJY??":{"vendor":"KA2DDO","model":"YAAC","class":"software"},"APE???":{"model":"Telemetry devices"},"APHAX?":{"model":"SM2APRS SondeMonitor","os":"Windows","vendor":"PY2UEP","class":"software"},"APR2MF":{"class":"wx","os":"Windows","model":"MF2wxAPRS Tinkerforge gateway","vendor":"Mike, DL2MF"},"APU2*":{"vendor":"Roger Barker, G4IDE","os":"Windows","model":"UI-View32","class":"software"},"APDR??":{"class":"app","model":"APRSdroid","os":"Android","vendor":"Open Source"},"APJE??":{"vendor":"Gregg Wonderly, W5GGW","model":"JeAPRS"},"APTT*":{"class":"tracker","model":"TinyTrak","vendor":"Byonics"},"APMI04":{"model":"WX3in1 Mini","vendor":"Microsat","os":"embedded"},"APZ186":{"class":"digi","model":"UIdigi","vendor":"IW3FQG"},"APSC??":{"class":"software","vendor":"OH2MQK, OH7LZB","model":"aprsc"}},"classes":{"rig":{"description":"Mobile or desktop radio","shown":"Rig"},"app":{"shown":"Mobile app","description":"Mobile phone or tablet app"},"tracker":{"description":"Tracker device","shown":"Tracker"},"satellite":{"shown":"Satellite","description":"Satellite-based station"},"dstar":{"description":"D-Star radio","shown":"D-Star"},"software":{"shown":"Software","description":"Desktop software"},"digi":{"description":"Digipeater firmware","shown":"Digipeater"},"wx":{"shown":"Weather station","description":"Dedicated weather station"},"ht":{"shown":"HT","description":"Hand-held radio"}}}`)

ToCallsJSONData raw JSON source https://raw.githubusercontent.com/hessu/aprs-deviceid/master/generated/tocalls.pretty.json

Functions

func ShortCallsign

func ShortCallsign(c string) string

ShortCallsign returns a short version of the callsign as KK6NXK for KK6NXK-7

Types

type Device

type Device struct {
	Model  string `json:"model"`
	Vendor string `json:"vendor"`
	Class  string `json:"class"`
	Prefix string `json:"prefix"`
	Suffix string `json:"suffix"`
}

Device stores the model information for a radio device

func (*Device) MiceLegacyMatch

func (d *Device) MiceLegacyMatch(p *Packet) bool

MiceLegacyMatch test for a matching device using Prefix & Suffix againt msg.Comment

type MiceJSON

type MiceJSON struct {
	Mice map[string]Device `json:"mice"`
}

MiceJSON struct to handle the tocalls file

type MiceLegacyJSON

type MiceLegacyJSON struct {
	Mice map[string]Device `json:"micelegacy"`
}

MiceLegacyJSON struct handle the tocalls Mice Legacy

type Packet

type Packet struct {
	PacketType
	Timestamp           int
	SourceCallsign      string
	DestinationCallsign string
	Path                []string
	Status              string
	Symbol              string
	Latitude            float64
	Longitude           float64
	Altitude            float64
	Speed               float64
	Course              uint8
	Weather             *WeatherReport
	Telemetry           *Telemetry
	RawPacket           string
	MicE                string
	Message             string
	Comment             string
}

Packet describes an APRS packet

func (*Packet) Device

func (p *Packet) Device() *Device

Device return the Device describing the transceiver used to send this packet

func (*Packet) IncludePosition

func (p *Packet) IncludePosition() bool

IncludePosition return true if the packet contains a Position

type PacketType

type PacketType int

PacketType defines the packets type from libfap

const (
	LocationPacketType PacketType = iota
	ObjectPacketType
	ItemPacketType
	MicePacketType
	NMEAPacketType
	WXPacketType
	MessagePacketType
	CapabilitiesPacketType
	StatusPacketType
	TelemetryPacketType
	TelemetryMessagePacketType
	DXSpotPacketType
	ExperimentalPacketType
	InvalidPacketType
)

type Parser

type Parser struct{}

Parser is an APRS Parser

func NewParser

func NewParser() *Parser

NewParser returns a new APRS Parser

func (*Parser) FillPacket

func (p *Parser) FillPacket(raw string, isAX25 bool, packet *Packet) (*Packet, error)

FillPacket fille an existing packet with the decoded raw APRS message

func (*Parser) ParsePacket

func (p *Parser) ParsePacket(raw string, isAX25 bool) (*Packet, error)

ParsePacket parse raw packet string and return a new Packet if an error occurs it will return a packet with fill RawMessage only

type Telemetry

type Telemetry struct {
	Val1, Val2, Val3, Val4, Val5 float64
}

Telemetry describes the telemetry related part of an APRS packet

type ToCallsJSON

type ToCallsJSON struct {
	Tocalls map[string]Device `json:"tocalls"`
}

ToCallsJSON struct to handle the tocalls file

type Trie

type Trie struct {
	// contains filtered or unexported fields
}

A Trie struct to handle the tocalls lookups

func (*Trie) Add

func (t *Trie) Add(c string, d Device)

Add a string c to the trie root

type TrieNode

type TrieNode struct {
	Device *Device
	// contains filtered or unexported fields
}

A TrieNode struct to store the tocalls data

func (*TrieNode) String

func (n *TrieNode) String() string

String display a Node, mainly for debug purpose

type WeatherReport

type WeatherReport struct {
	Temperature       float64
	InsideTemperature float64
	Humidity          uint8
	InsideHumidity    uint8
	WindGust          float64
	WindDirection     uint8
	WindSpeed         float64
	Pressure          float64
}

WeatherReport describes the weather related part of an APRS packet

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL