@packet-net/pdn-aprs 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -1
- package/README.md +9 -5
- package/dist/builder.d.ts +33 -8
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +64 -10
- package/dist/builder.js.map +1 -1
- package/dist/bytes.d.ts.map +1 -1
- package/dist/bytes.js +2 -1
- package/dist/bytes.js.map +1 -1
- package/dist/codes.js +8 -8
- package/dist/codes.js.map +1 -1
- package/dist/decode/index.d.ts.map +1 -1
- package/dist/decode/index.js +8 -5
- package/dist/decode/index.js.map +1 -1
- package/dist/decode/message.d.ts +2 -0
- package/dist/decode/message.d.ts.map +1 -1
- package/dist/decode/message.js +59 -33
- package/dist/decode/message.js.map +1 -1
- package/dist/decode/other.d.ts +20 -2
- package/dist/decode/other.d.ts.map +1 -1
- package/dist/decode/other.js +110 -48
- package/dist/decode/other.js.map +1 -1
- package/dist/decode/positioned.d.ts +26 -2
- package/dist/decode/positioned.d.ts.map +1 -1
- package/dist/decode/positioned.js +145 -79
- package/dist/decode/positioned.js.map +1 -1
- package/dist/decode/reports.d.ts.map +1 -1
- package/dist/decode/reports.js +47 -5
- package/dist/decode/reports.js.map +1 -1
- package/dist/decoder.d.ts.map +1 -1
- package/dist/decoder.js +2 -4
- package/dist/decoder.js.map +1 -1
- package/dist/deviceid.d.ts +8 -2
- package/dist/deviceid.d.ts.map +1 -1
- package/dist/deviceid.js +28 -6
- package/dist/deviceid.js.map +1 -1
- package/dist/encode/common.d.ts +13 -2
- package/dist/encode/common.d.ts.map +1 -1
- package/dist/encode/common.js +36 -4
- package/dist/encode/common.js.map +1 -1
- package/dist/encode/index.d.ts.map +1 -1
- package/dist/encode/index.js +59 -22
- package/dist/encode/index.js.map +1 -1
- package/dist/encode/other.d.ts.map +1 -1
- package/dist/encode/other.js +45 -17
- package/dist/encode/other.js.map +1 -1
- package/dist/encode/position.d.ts +9 -3
- package/dist/encode/position.d.ts.map +1 -1
- package/dist/encode/position.js +258 -124
- package/dist/encode/position.js.map +1 -1
- package/dist/header.d.ts +5 -2
- package/dist/header.d.ts.map +1 -1
- package/dist/header.js +8 -3
- package/dist/header.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/neutral.d.ts.map +1 -1
- package/dist/neutral.js +22 -3
- package/dist/neutral.js.map +1 -1
- package/dist/types.d.ts +19 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/builder.ts +77 -14
- package/src/bytes.ts +2 -1
- package/src/codes.ts +8 -8
- package/src/decode/index.ts +7 -4
- package/src/decode/message.ts +54 -37
- package/src/decode/other.ts +116 -44
- package/src/decode/positioned.ts +159 -90
- package/src/decode/reports.ts +47 -4
- package/src/decoder.ts +2 -5
- package/src/deviceid.ts +29 -5
- package/src/encode/common.ts +34 -4
- package/src/encode/index.ts +57 -20
- package/src/encode/other.ts +39 -13
- package/src/encode/position.ts +261 -119
- package/src/header.ts +9 -2
- package/src/index.ts +1 -0
- package/src/neutral.ts +24 -3
- package/src/types.ts +20 -5
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@packet-net/pdn-aprs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "APRS encoder and decoder for TypeScript: every data type, strict and lenient decoding, an encoder that refuses what the spec does not allow, named symbols, device identification, and a fluent packet builder. Zero dependencies; browsers and Node.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
package/src/builder.ts
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
// `build()` encodes the packet, so anything the spec does not allow is refused there, with an
|
|
14
14
|
// `AprsEncodeError` that says why.
|
|
15
15
|
|
|
16
|
+
import { nearest, refuse } from './encode/common.js';
|
|
17
|
+
import { ALTITUDE_GIVEN_IN_FEET } from './encode/position.js';
|
|
16
18
|
import { encodeInformation, encodeAx25, encodeTnc2, encodeTnc2Bytes, wrapKiss, type PacketToEncode } from './encode/index.js';
|
|
17
19
|
import { symbolOf } from './symbols.js';
|
|
18
20
|
import type {
|
|
@@ -74,6 +76,36 @@ function built(header: Header, data: AprsData): BuiltPacket {
|
|
|
74
76
|
});
|
|
75
77
|
}
|
|
76
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Weather as a program may have it: the units APRS sends (Fahrenheit, inches), or Celsius and
|
|
81
|
+
* millimetres, which the builder converts (vectors rulings, B2). Give each value in one unit.
|
|
82
|
+
*/
|
|
83
|
+
export interface WeatherInput extends Weather {
|
|
84
|
+
readonly temperatureC?: number;
|
|
85
|
+
readonly rain1hMm?: number;
|
|
86
|
+
readonly rain24hMm?: number;
|
|
87
|
+
readonly rainMidnightMm?: number;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const MM_PER_INCH = 25.4;
|
|
91
|
+
|
|
92
|
+
/** Weather in the units APRS sends; a value in two units is refused. */
|
|
93
|
+
function weatherOf(input: WeatherInput): Weather {
|
|
94
|
+
const { temperatureC, rain1hMm, rain24hMm, rainMidnightMm, ...rest } = input;
|
|
95
|
+
const w: Mutable<Weather> = { ...rest };
|
|
96
|
+
const convert = (metric: number | undefined, key: 'temperatureF' | 'rain1hIn' | 'rain24hIn' | 'rainMidnightIn', f: (v: number) => number): void => {
|
|
97
|
+
if (metric === undefined) return;
|
|
98
|
+
if (w[key] !== undefined) refuse(`weather ${key} is given in two units`);
|
|
99
|
+
w[key] = f(metric);
|
|
100
|
+
};
|
|
101
|
+
// Converted here and rounded once, when the report is written.
|
|
102
|
+
convert(temperatureC, 'temperatureF', (c) => (c * 9) / 5 + 32);
|
|
103
|
+
convert(rain1hMm, 'rain1hIn', (mm) => mm / MM_PER_INCH);
|
|
104
|
+
convert(rain24hMm, 'rain24hIn', (mm) => mm / MM_PER_INCH);
|
|
105
|
+
convert(rainMidnightMm, 'rainMidnightIn', (mm) => mm / MM_PER_INCH);
|
|
106
|
+
return w;
|
|
107
|
+
}
|
|
108
|
+
|
|
77
109
|
function asSymbol(symbol: AprsSymbol | string): AprsSymbol {
|
|
78
110
|
return typeof symbol === 'string' ? symbolOf(symbol) : symbol;
|
|
79
111
|
}
|
|
@@ -122,7 +154,7 @@ export class PacketBuilder {
|
|
|
122
154
|
}
|
|
123
155
|
|
|
124
156
|
/** A weather report at a position (the weather station symbol, unless you pick another `_`). */
|
|
125
|
-
weather(latitude: number, longitude: number, weather:
|
|
157
|
+
weather(latitude: number, longitude: number, weather: WeatherInput): PositionBuilder {
|
|
126
158
|
return new PositionBuilder(this.header, latitude, longitude).symbol('/_').weather(weather);
|
|
127
159
|
}
|
|
128
160
|
|
|
@@ -166,10 +198,13 @@ export class PacketBuilder {
|
|
|
166
198
|
return new StatusBuilder(this.header, text);
|
|
167
199
|
}
|
|
168
200
|
|
|
169
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* A telemetry report: sequence, five analog values and eight bits (`'01101001'`, B1 first). A
|
|
203
|
+
* sequence given as a number is 0-999, written in three digits; a larger one is refused when
|
|
204
|
+
* the packet is built, not wrapped (vectors rulings, B6).
|
|
205
|
+
*/
|
|
170
206
|
telemetry(sequence: number | string, analog: readonly (number | null)[], bits: string): TelemetryBuilder {
|
|
171
|
-
|
|
172
|
-
return new TelemetryBuilder(this.header, seq, analog, bits);
|
|
207
|
+
return new TelemetryBuilder(this.header, sequence, analog, bits);
|
|
173
208
|
}
|
|
174
209
|
|
|
175
210
|
/** Telemetry channel names (`PARM.`), sent to the station whose telemetry they describe. */
|
|
@@ -195,7 +230,7 @@ export class PacketBuilder {
|
|
|
195
230
|
}
|
|
196
231
|
|
|
197
232
|
/** A positionless weather report (not recommended: a weather report with a position is better). */
|
|
198
|
-
weatherReport(weather:
|
|
233
|
+
weatherReport(weather: WeatherInput, at: Date = new Date()): DataBuilder {
|
|
199
234
|
const timestamp: AprsTimestamp = {
|
|
200
235
|
kind: 'mdhm',
|
|
201
236
|
month: at.getUTCMonth() + 1,
|
|
@@ -203,7 +238,7 @@ export class PacketBuilder {
|
|
|
203
238
|
hour: at.getUTCHours(),
|
|
204
239
|
minute: at.getUTCMinutes(),
|
|
205
240
|
};
|
|
206
|
-
return new DataBuilder(this.header, { type: 'weather', timestamp, weather });
|
|
241
|
+
return new DataBuilder(this.header, { type: 'weather', timestamp, weather: weatherOf(weather) });
|
|
207
242
|
}
|
|
208
243
|
|
|
209
244
|
/** Any data, built by hand. */
|
|
@@ -250,7 +285,11 @@ abstract class PositionedBuilder<Self> {
|
|
|
250
285
|
return this.self();
|
|
251
286
|
}
|
|
252
287
|
|
|
253
|
-
/**
|
|
288
|
+
/**
|
|
289
|
+
* Course over the ground, degrees: 360 is north and 0 is unknown, as APRS has it (vectors
|
|
290
|
+
* rulings, B1). A course of 0 is written `000` in an uncompressed report, left out of a Mic-E
|
|
291
|
+
* report, and refused in a compressed one, whose bytes have no unknown course.
|
|
292
|
+
*/
|
|
254
293
|
course(degrees: number): Self {
|
|
255
294
|
this.fields.courseDegrees = degrees;
|
|
256
295
|
return this.self();
|
|
@@ -262,18 +301,32 @@ abstract class PositionedBuilder<Self> {
|
|
|
262
301
|
return this.self();
|
|
263
302
|
}
|
|
264
303
|
|
|
265
|
-
/**
|
|
304
|
+
/** Speed, km/h (sent in knots, 1.852 km/h each, rounded once to the knot). */
|
|
305
|
+
speedKmh(kmh: number): Self {
|
|
306
|
+
this.fields.speedKnots = kmh / 1.852;
|
|
307
|
+
return this.self();
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** Altitude, feet, sent as a `/A=` in whole feet (rounded to the nearest, halves away from zero). */
|
|
266
311
|
altitude(feet: number): Self {
|
|
267
312
|
this.fields.altitudeFeet = feet;
|
|
313
|
+
this.altitudeUnit = 'feet';
|
|
268
314
|
return this.self();
|
|
269
315
|
}
|
|
270
316
|
|
|
271
|
-
/**
|
|
317
|
+
/**
|
|
318
|
+
* Altitude, metres: converted to feet (0.3048 m each) and rounded once for a `/A=`; a Mic-E
|
|
319
|
+
* report sends it in its own altitude bytes, whose unit is the metre, rounded to the metre.
|
|
320
|
+
*/
|
|
272
321
|
altitudeMetres(metres: number): Self {
|
|
273
|
-
this.fields.altitudeFeet =
|
|
322
|
+
this.fields.altitudeFeet = metres / 0.3048;
|
|
323
|
+
this.altitudeUnit = 'metres';
|
|
274
324
|
return this.self();
|
|
275
325
|
}
|
|
276
326
|
|
|
327
|
+
/** The unit the altitude was given in. */
|
|
328
|
+
protected altitudeUnit: 'feet' | 'metres' | undefined;
|
|
329
|
+
|
|
277
330
|
/** Free text. */
|
|
278
331
|
comment(text: string): Self {
|
|
279
332
|
this.fields.comment = text;
|
|
@@ -324,8 +377,8 @@ abstract class ReportBuilder<Self> extends PositionedBuilder<Self> {
|
|
|
324
377
|
}
|
|
325
378
|
|
|
326
379
|
/** Weather data (needs a weather station symbol, `_`). */
|
|
327
|
-
weather(weather:
|
|
328
|
-
this.fields.weather = weather;
|
|
380
|
+
weather(weather: WeatherInput): Self {
|
|
381
|
+
this.fields.weather = weatherOf(weather);
|
|
329
382
|
return this.self();
|
|
330
383
|
}
|
|
331
384
|
|
|
@@ -487,6 +540,11 @@ export class MicEBuilder extends PositionedBuilder<MicEBuilder> {
|
|
|
487
540
|
|
|
488
541
|
build(): BuiltPacket {
|
|
489
542
|
const data: Mutable<Extract<AprsData, { type: 'mic-e' }>> = { type: 'mic-e', micEMessage: this.messageValue, ...this.fields };
|
|
543
|
+
// A course of 0 (after rounding) is unknown, which Mic-E writes as 0: no course (B1).
|
|
544
|
+
if (data.courseDegrees !== undefined && Number.isFinite(data.courseDegrees) && nearest(data.courseDegrees) === 0) delete data.courseDegrees;
|
|
545
|
+
// Metres go in the Mic-E altitude bytes, to the metre; feet in a /A= (B2).
|
|
546
|
+
if (data.altitudeFeet !== undefined && this.altitudeUnit === 'metres') data.altitudeFeet = nearest(data.altitudeFeet * 0.3048) / 0.3048;
|
|
547
|
+
if (data.altitudeFeet !== undefined && this.altitudeUnit === 'feet') ALTITUDE_GIVEN_IN_FEET.add(data);
|
|
490
548
|
if (this.typeCodeValue !== undefined) data.typeCode = this.typeCodeValue;
|
|
491
549
|
if (this.locatorValue !== undefined) data.locator = this.locatorValue;
|
|
492
550
|
if (this.oldValue) data.oldData = true;
|
|
@@ -589,7 +647,7 @@ export class TelemetryBuilder {
|
|
|
589
647
|
|
|
590
648
|
constructor(
|
|
591
649
|
private readonly header: Header,
|
|
592
|
-
private readonly sequence: string,
|
|
650
|
+
private readonly sequence: number | string,
|
|
593
651
|
private readonly analog: readonly (number | null)[],
|
|
594
652
|
private readonly bits: string,
|
|
595
653
|
) {}
|
|
@@ -601,9 +659,14 @@ export class TelemetryBuilder {
|
|
|
601
659
|
}
|
|
602
660
|
|
|
603
661
|
build(): BuiltPacket {
|
|
662
|
+
let sequence = this.sequence;
|
|
663
|
+
if (typeof sequence === 'number') {
|
|
664
|
+
if (!Number.isInteger(sequence) || sequence < 0 || sequence > 999) refuse(`telemetry sequence ${sequence} is not 0-999`);
|
|
665
|
+
sequence = String(sequence).padStart(3, '0');
|
|
666
|
+
}
|
|
604
667
|
const data: Mutable<Extract<AprsData, { type: 'telemetry' }>> = {
|
|
605
668
|
type: 'telemetry',
|
|
606
|
-
sequence
|
|
669
|
+
sequence,
|
|
607
670
|
analog: [...this.analog],
|
|
608
671
|
bits: this.bits,
|
|
609
672
|
};
|
package/src/bytes.ts
CHANGED
|
@@ -7,7 +7,8 @@ export function bytesToBinary(bytes: Uint8Array, start = 0, end = bytes.length):
|
|
|
7
7
|
let s = '';
|
|
8
8
|
const CHUNK = 8192;
|
|
9
9
|
for (let i = start; i < end; i += CHUNK) {
|
|
10
|
-
|
|
10
|
+
// apply takes the typed array directly; copying it into an Array first doubled the cost.
|
|
11
|
+
s += String.fromCharCode.apply(null, bytes.subarray(i, Math.min(end, i + CHUNK)) as unknown as number[]);
|
|
11
12
|
}
|
|
12
13
|
return s;
|
|
13
14
|
}
|
package/src/codes.ts
CHANGED
|
@@ -119,7 +119,7 @@ export const DIAGNOSTIC_MEANINGS: Readonly<Record<DiagnosticCode, string>> = {
|
|
|
119
119
|
'truncated': "The information field is shorter than its format requires.",
|
|
120
120
|
'not-aprs': "The first byte is not a data type identifier (APRS12c ch. 20).",
|
|
121
121
|
'reserved-data-type': "A reserved data type identifier with no defined format (APRS12c ch. 5).",
|
|
122
|
-
'obsolete-format': "A format the spec marks obsolete or not recommended, e.g. raw NMEA or
|
|
122
|
+
'obsolete-format': "A format the spec marks obsolete or not recommended, e.g. raw NMEA, raw weather, or the Rev 0 Mic-E data type identifiers 0x1C and 0x1D.",
|
|
123
123
|
'out-of-range-value': "A value in a well-formed field is out of range and was dropped.",
|
|
124
124
|
'invalid-timestamp': "A timestamp is malformed or out of range (APRS12c ch. 6, UAP 5.8).",
|
|
125
125
|
'invalid-position': "The position is missing or starts with something that cannot begin one.",
|
|
@@ -140,7 +140,7 @@ export const DIAGNOSTIC_MEANINGS: Readonly<Record<DiagnosticCode, string>> = {
|
|
|
140
140
|
'invalid-weather': "Positionless or raw weather data that could not be decoded.",
|
|
141
141
|
'invalid-mic-e-destination': "The destination address is not a valid Mic-E encoding (APRS12c ch. 10).",
|
|
142
142
|
'invalid-mic-e-information': "The Mic-E information field is malformed (APRS12c ch. 10).",
|
|
143
|
-
'kenwood-ff-padding': "Kenwood TM-D710 0xFF padding was removed (UAP 5.10).",
|
|
143
|
+
'kenwood-ff-padding': "Kenwood TM-D710 0xFF padding was removed from Mic-E status text, after the destination and the nine fixed bytes decoded (UAP 5.10).",
|
|
144
144
|
'mic-e-missing-device-type': "A Mic-E report without a device type prefix (UAP 5.4).",
|
|
145
145
|
'invalid-message': "A message is malformed (APRS12c ch. 14).",
|
|
146
146
|
'unpadded-addressee': "The addressee is not padded to 9 characters.",
|
|
@@ -150,13 +150,13 @@ export const DIAGNOSTIC_MEANINGS: Readonly<Record<DiagnosticCode, string>> = {
|
|
|
150
150
|
'invalid-telemetry': "A telemetry report is malformed (APRS12c ch. 13).",
|
|
151
151
|
'invalid-status': "A status report is malformed (APRS12c ch. 16).",
|
|
152
152
|
'invalid-locator': "A Maidenhead locator is malformed.",
|
|
153
|
-
'invalid-nmea': "
|
|
153
|
+
'invalid-nmea': "The text after $ is not an NMEA 0183 sentence: not printable ASCII, no valid address field, or a reserved character in a field.",
|
|
154
154
|
'nmea-checksum-mismatch': "An NMEA sentence's checksum does not match, so the sentence is corrupt and is not decoded.",
|
|
155
|
-
'invalid-third-party': "A third-party header is malformed (APRS12c ch. 17).",
|
|
156
|
-
'invalid-general-query': "A general query is malformed (APRS12c ch. 15).",
|
|
155
|
+
'invalid-third-party': "A third-party header is malformed, or (strict) its inner header has a defect a lenient decoder tolerates (APRS12c ch. 17).",
|
|
156
|
+
'invalid-general-query': "A general query is malformed, or its footprint is out of range (APRS12c ch. 15).",
|
|
157
157
|
'invalid-capabilities': "A station capabilities report is malformed (APRS12c ch. 15).",
|
|
158
158
|
'invalid-user-defined': "A user-defined packet is shorter than its 3-byte header (APRS12c ch. 19).",
|
|
159
|
-
'invalid-agrelo-df': "An Agrelo DF report is
|
|
159
|
+
'invalid-agrelo-df': "An Agrelo DF report is not exactly %, a bearing of 000 to 360, / and a quality digit.",
|
|
160
160
|
'missing-space-after-locator': "A grid-locator status report lacks the mandatory space before its text (UAP 5.17).",
|
|
161
161
|
'compression-type-reserved-bits': "A compressed position's type byte sets its unused high bits (APRS12c ch. 9).",
|
|
162
162
|
'malformed-timestamp': "A timestamped position report whose timestamp is missing or not timestamp-shaped (UAP 5.8).",
|
|
@@ -165,10 +165,10 @@ export const DIAGNOSTIC_MEANINGS: Readonly<Record<DiagnosticCode, string>> = {
|
|
|
165
165
|
'wind-fields-instead-of-extension': "Wind sent as c/s fields in a position weather report instead of the DDD/SSS extension, or after a compressed position whose cs bytes carry no wind.",
|
|
166
166
|
'wind-extension-after-compressed': "An uncompressed wind extension after a compressed weather position (UAP 5.33).",
|
|
167
167
|
'mic-e-altitude-not-first': "A Mic-E altitude after other status text instead of first (APRS12c ch. 10).",
|
|
168
|
-
'brace-in-message-text': "Message text contains a { that does not start a valid message ID (APRS12c ch. 14).",
|
|
168
|
+
'brace-in-message-text': "Message, bulletin or telemetry metadata text contains a { that does not start a valid message ID, including the reply-ack form on a bulletin or metadata (APRS12c ch. 14).",
|
|
169
169
|
'invalid-addressee-characters': "A message addressee contains a space or : (APRS12c ch. 14).",
|
|
170
170
|
'letter-group-bulletin': "A bulletin addressee has a group name after a letter, e.g. BLNCNET; group bulletins use a digit (APRS12c ch. 14).",
|
|
171
|
-
'free-text-capabilities': "A < station capabilities packet holds free text rather than TOKEN / TOKEN=VALUE items (APRS12c ch. 15).",
|
|
171
|
+
'free-text-capabilities': "A < station capabilities packet holds free text rather than TOKEN / TOKEN=VALUE items: a token that is empty or holds a space or a control character, or a value that holds a control character (APRS12c ch. 15).",
|
|
172
172
|
};
|
|
173
173
|
|
|
174
174
|
/** Every tolerable code. */
|
package/src/decode/index.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { binaryToBytes, bytesToBinary } from '../bytes.js';
|
|
4
4
|
import type { Diagnostic, ParseOptions } from '../diagnostics.js';
|
|
5
|
-
import {
|
|
5
|
+
import { identifyDevice } from '../deviceid.js';
|
|
6
|
+
import { parseHeaderText } from '../header.js';
|
|
6
7
|
import type { AprsData, AprsPacket, ThirdParty } from '../types.js';
|
|
7
8
|
import { DecodeContext, Rejected } from './context.js';
|
|
8
9
|
import { decodeMessage } from './message.js';
|
|
@@ -114,7 +115,7 @@ function decodeThirdParty(ctx: DecodeContext, s: string, options: ParseOptions):
|
|
|
114
115
|
const headerDiags: Diagnostic[] = [];
|
|
115
116
|
let header: ReturnType<typeof parseHeaderText>;
|
|
116
117
|
try {
|
|
117
|
-
header = parseHeaderText(body.slice(0, colon), options, headerDiags);
|
|
118
|
+
header = parseHeaderText(body.slice(0, colon), options, headerDiags, true);
|
|
118
119
|
} catch {
|
|
119
120
|
return ctx.fail('invalid-third-party');
|
|
120
121
|
}
|
|
@@ -128,8 +129,10 @@ function decodeThirdParty(ctx: DecodeContext, s: string, options: ParseOptions):
|
|
|
128
129
|
data: inner.data,
|
|
129
130
|
diagnostics: [...headerDiags, ...inner.diagnostics],
|
|
130
131
|
};
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
// The inner packet has its device too, from its own destination (vectors rulings, A2).
|
|
133
|
+
const device = identifyDevice(inner.data, header.destination);
|
|
134
|
+
if (device) packet.device = device;
|
|
135
|
+
// A q-construct is read only in the outer header: the third-party path is kept as sent.
|
|
133
136
|
return { type: 'third-party', packet };
|
|
134
137
|
}
|
|
135
138
|
|
package/src/decode/message.ts
CHANGED
|
@@ -5,30 +5,37 @@ import type { AprsData } from '../types.js';
|
|
|
5
5
|
import type { DecodeContext } from './context.js';
|
|
6
6
|
|
|
7
7
|
/** Known directed query types (APRS12c ch. 15), longest first. */
|
|
8
|
-
const DIRECTED_QUERY_TYPES = ['APRSD', 'APRSH', 'APRSM', 'APRSO', 'APRSP', 'APRSS', 'APRST', 'PING?'];
|
|
8
|
+
export const DIRECTED_QUERY_TYPES: readonly string[] = ['APRSD', 'APRSH', 'APRSM', 'APRSO', 'APRSP', 'APRSS', 'APRST', 'PING?'];
|
|
9
9
|
|
|
10
10
|
const MESSAGE_ID_RE = /^([A-Za-z0-9]{1,5})(?:\}([A-Za-z0-9]{0,5}))?$/;
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const PLAIN_ID_RE = /^([A-Za-z0-9]{1,5})$/;
|
|
12
|
+
// ack or rej, the ID, an optional reply-ack, and an optional message ID of its own.
|
|
13
|
+
const ACK_RE = /^(ack|rej)([A-Za-z0-9]{1,5})(?:\}([A-Za-z0-9]{0,5}))?(\{[A-Za-z0-9]{1,5})?$/;
|
|
14
|
+
// A number: an optional -, digits with an optional point, and for a coefficient an exponent.
|
|
15
|
+
const COEFFICIENT_RE = /^-?(?:[0-9]+\.?[0-9]*|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;
|
|
16
|
+
const METADATA_PREFIXES = ['PARM.', 'UNIT.', 'EQNS.', 'BITS.'];
|
|
13
17
|
|
|
14
18
|
interface SplitText {
|
|
15
19
|
text: string;
|
|
16
20
|
messageId?: string;
|
|
17
21
|
replyAck?: string;
|
|
22
|
+
/** A `{` that does not start a message ID (`brace-in-message-text`). */
|
|
23
|
+
strayBrace: boolean;
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
/**
|
|
21
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Splits `text{id}ack` into its parts. Bulletins and telemetry metadata are not acknowledged, so
|
|
28
|
+
* for them (`replyAcks` false) the reply-ack form is not an ID and stays in the text (vectors
|
|
29
|
+
* interpretations.md, "Reply-acks are for messages").
|
|
30
|
+
*/
|
|
31
|
+
function splitMessageId(text: string, replyAcks: boolean): SplitText {
|
|
22
32
|
const brace = text.lastIndexOf('{');
|
|
23
|
-
if (brace < 0) return { text };
|
|
24
|
-
const m = MESSAGE_ID_RE.exec(text.slice(brace + 1));
|
|
25
|
-
if (!m) {
|
|
26
|
-
|
|
27
|
-
return { text };
|
|
28
|
-
}
|
|
29
|
-
const out: SplitText = { text: text.slice(0, brace), messageId: m[1]! };
|
|
33
|
+
if (brace < 0) return { text, strayBrace: false };
|
|
34
|
+
const m = (replyAcks ? MESSAGE_ID_RE : PLAIN_ID_RE).exec(text.slice(brace + 1));
|
|
35
|
+
if (!m) return { text, strayBrace: true };
|
|
36
|
+
const out: SplitText = { text: text.slice(0, brace), messageId: m[1]!, strayBrace: false };
|
|
30
37
|
if (m[2] !== undefined) out.replyAck = m[2];
|
|
31
|
-
if (out.text.includes('{'))
|
|
38
|
+
if (out.text.includes('{')) out.strayBrace = true;
|
|
32
39
|
return out;
|
|
33
40
|
}
|
|
34
41
|
|
|
@@ -38,11 +45,12 @@ function parseList(body: string): string[] {
|
|
|
38
45
|
|
|
39
46
|
/** `:`: a message, or one of the things sent in message form. */
|
|
40
47
|
export function decodeMessage(ctx: DecodeContext, s: string): AprsData {
|
|
41
|
-
|
|
48
|
+
// When the tenth byte is :, the addressee is the nine bytes before it, whatever they hold.
|
|
42
49
|
let colon = -1;
|
|
43
50
|
if (s.length > 10 && s[10] === ':') {
|
|
44
51
|
colon = 10;
|
|
45
52
|
} else {
|
|
53
|
+
if (s[1] === ':') ctx.fail('invalid-message');
|
|
46
54
|
for (let k = 2; k <= 9 && k < s.length; k++) {
|
|
47
55
|
if (s[k] === ':') {
|
|
48
56
|
colon = k;
|
|
@@ -75,12 +83,14 @@ export function decodeMessage(ctx: DecodeContext, s: string): AprsData {
|
|
|
75
83
|
// Bulletins and announcements.
|
|
76
84
|
if (/^BLN[0-9]/.test(addressee) || /^BLN[A-Z]$/.test(addressee) || /^BLN[A-Z]./.test(addressee)) {
|
|
77
85
|
if (/^BLN[A-Z]./.test(addressee)) ctx.tolerate('letter-group-bulletin');
|
|
78
|
-
const split = splitMessageId(
|
|
86
|
+
const split = splitMessageId(body, false);
|
|
87
|
+
if (split.strayBrace) ctx.tolerate('brace-in-message-text');
|
|
79
88
|
const text = ctx.text(split.text);
|
|
80
89
|
return withId({ type: 'bulletin' as const, addressee, text }, split.messageId);
|
|
81
90
|
}
|
|
82
91
|
if (/^NWS[-_]/.test(addressee)) {
|
|
83
|
-
const split = splitMessageId(
|
|
92
|
+
const split = splitMessageId(body, false);
|
|
93
|
+
if (split.strayBrace) ctx.tolerate('brace-in-message-text');
|
|
84
94
|
const text = ctx.text(split.text);
|
|
85
95
|
return withId({ type: 'nws-bulletin' as const, addressee, text }, split.messageId);
|
|
86
96
|
}
|
|
@@ -91,13 +101,15 @@ export function decodeMessage(ctx: DecodeContext, s: string): AprsData {
|
|
|
91
101
|
if (query) return query;
|
|
92
102
|
}
|
|
93
103
|
|
|
94
|
-
const split = splitMessageId(ctx, body);
|
|
95
|
-
|
|
96
104
|
// Telemetry metadata: its structure is checked before the text's encoding.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
if (METADATA_PREFIXES.includes(body.slice(0, 5))) {
|
|
106
|
+
const meta = telemetryMetadata(ctx, addressee, body);
|
|
107
|
+
if (meta) return meta;
|
|
108
|
+
}
|
|
100
109
|
|
|
110
|
+
const split = splitMessageId(body, true);
|
|
111
|
+
if (split.strayBrace) ctx.tolerate('brace-in-message-text');
|
|
112
|
+
const text = ctx.text(split.text);
|
|
101
113
|
const message: { type: 'message'; addressee: string; text: string; messageId?: string; replyAck?: string } = {
|
|
102
114
|
type: 'message',
|
|
103
115
|
addressee,
|
|
@@ -134,33 +146,34 @@ function directedQuery(ctx: DecodeContext, addressee: string, body: string): Apr
|
|
|
134
146
|
queryType = m[1]!;
|
|
135
147
|
rest = q.slice(queryType.length);
|
|
136
148
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const target = rest.trim();
|
|
149
|
+
// One space between the type and the target is a separator, and spaces after the target are
|
|
150
|
+
// padding (APRSH pads its target to 9 characters).
|
|
151
|
+
if (rest.startsWith(' ')) rest = rest.slice(1);
|
|
152
|
+
const target = rest.replace(/ +$/, '');
|
|
142
153
|
if (target.length === 0) return { type: 'directed-query', addressee, queryType };
|
|
143
154
|
if (/^[A-Za-z0-9-]{1,9}$/.test(target)) return { type: 'directed-query', addressee, queryType, target };
|
|
144
155
|
ctx.info('invalid-query');
|
|
145
156
|
return undefined;
|
|
146
157
|
}
|
|
147
158
|
|
|
148
|
-
/** Telemetry metadata sent as a message; `
|
|
149
|
-
function telemetryMetadata(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
binary
|
|
153
|
-
messageId
|
|
154
|
-
): AprsData | undefined {
|
|
159
|
+
/** Telemetry metadata sent as a message; `body` is the text's bytes, decoded once it is valid. */
|
|
160
|
+
function telemetryMetadata(ctx: DecodeContext, addressee: string, body: string): AprsData | undefined {
|
|
161
|
+
// Metadata takes a message ID, but not the reply-ack form.
|
|
162
|
+
const split = splitMessageId(body, false);
|
|
163
|
+
const binary = split.text;
|
|
164
|
+
const messageId = split.messageId;
|
|
155
165
|
const kind = binary.slice(0, 5);
|
|
156
|
-
if (kind !== 'PARM.' && kind !== 'UNIT.' && kind !== 'EQNS.' && kind !== 'BITS.') return undefined;
|
|
157
166
|
const rawBody = binary.slice(5);
|
|
158
167
|
const invalid = (): undefined => {
|
|
159
168
|
ctx.info('invalid-telemetry-metadata');
|
|
160
169
|
return undefined;
|
|
161
170
|
};
|
|
171
|
+
const braces = (): void => {
|
|
172
|
+
if (split.strayBrace) ctx.tolerate('brace-in-message-text');
|
|
173
|
+
};
|
|
162
174
|
if (kind === 'PARM.' || kind === 'UNIT.') {
|
|
163
175
|
if (parseList(rawBody).length > 13) return invalid();
|
|
176
|
+
braces();
|
|
164
177
|
const list = parseList(ctx.text(rawBody));
|
|
165
178
|
return kind === 'PARM.'
|
|
166
179
|
? withId({ type: 'telemetry-names' as const, addressee, names: list }, messageId)
|
|
@@ -169,14 +182,17 @@ function telemetryMetadata(
|
|
|
169
182
|
if (kind === 'EQNS.') {
|
|
170
183
|
const list = parseList(rawBody);
|
|
171
184
|
// Trailing empty entries (commas and spaces) are the list stopping.
|
|
172
|
-
while (list.length > 0 && list[list.length - 1]
|
|
185
|
+
while (list.length > 0 && /^ *$/.test(list[list.length - 1]!)) list.pop();
|
|
173
186
|
if (list.length === 0 || list.length > 15) return invalid();
|
|
174
187
|
const texts: string[] = [];
|
|
175
188
|
for (const item of list) {
|
|
176
|
-
|
|
177
|
-
|
|
189
|
+
// Spaces (U+0020 only) around a coefficient are padding (vectors interpretations.md,
|
|
190
|
+
// "Numbers in telemetry").
|
|
191
|
+
const t = item.replace(/^ +| +$/g, '');
|
|
192
|
+
if (!COEFFICIENT_RE.test(t) || !Number.isFinite(Number(t))) return invalid();
|
|
178
193
|
texts.push(t);
|
|
179
194
|
}
|
|
195
|
+
braces();
|
|
180
196
|
return withId(
|
|
181
197
|
{ type: 'telemetry-coefficients' as const, addressee, coefficients: texts.map(Number), coefficientsText: texts },
|
|
182
198
|
messageId,
|
|
@@ -184,6 +200,7 @@ function telemetryMetadata(
|
|
|
184
200
|
}
|
|
185
201
|
const m = /^([01]{8})(?:,(.*))?$/s.exec(rawBody);
|
|
186
202
|
if (!m) return invalid();
|
|
203
|
+
braces();
|
|
187
204
|
const bits: { type: 'telemetry-bits'; addressee: string; bits: string; project?: string } = {
|
|
188
205
|
type: 'telemetry-bits',
|
|
189
206
|
addressee,
|