@packet-net/pdn-aprs 0.0.1

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.
Files changed (120) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +661 -0
  3. package/README.md +192 -0
  4. package/THIRD-PARTY-NOTICES.md +5 -0
  5. package/dist/builder.d.ts +232 -0
  6. package/dist/builder.d.ts.map +1 -0
  7. package/dist/builder.js +508 -0
  8. package/dist/builder.js.map +1 -0
  9. package/dist/bytes.d.ts +19 -0
  10. package/dist/bytes.d.ts.map +1 -0
  11. package/dist/bytes.js +120 -0
  12. package/dist/bytes.js.map +1 -0
  13. package/dist/codes.d.ts +13 -0
  14. package/dist/codes.d.ts.map +1 -0
  15. package/dist/codes.js +112 -0
  16. package/dist/codes.js.map +1 -0
  17. package/dist/decode/context.d.ts +33 -0
  18. package/dist/decode/context.d.ts.map +1 -0
  19. package/dist/decode/context.js +65 -0
  20. package/dist/decode/context.js.map +1 -0
  21. package/dist/decode/index.d.ts +10 -0
  22. package/dist/decode/index.d.ts.map +1 -0
  23. package/dist/decode/index.js +121 -0
  24. package/dist/decode/index.js.map +1 -0
  25. package/dist/decode/message.d.ts +5 -0
  26. package/dist/decode/message.d.ts.map +1 -0
  27. package/dist/decode/message.js +190 -0
  28. package/dist/decode/message.js.map +1 -0
  29. package/dist/decode/other.d.ts +25 -0
  30. package/dist/decode/other.d.ts.map +1 -0
  31. package/dist/decode/other.js +326 -0
  32. package/dist/decode/other.js.map +1 -0
  33. package/dist/decode/positioned.d.ts +132 -0
  34. package/dist/decode/positioned.d.ts.map +1 -0
  35. package/dist/decode/positioned.js +1063 -0
  36. package/dist/decode/positioned.js.map +1 -0
  37. package/dist/decode/reports.d.ts +13 -0
  38. package/dist/decode/reports.d.ts.map +1 -0
  39. package/dist/decode/reports.js +375 -0
  40. package/dist/decode/reports.js.map +1 -0
  41. package/dist/decoder.d.ts +23 -0
  42. package/dist/decoder.d.ts.map +1 -0
  43. package/dist/decoder.js +75 -0
  44. package/dist/decoder.js.map +1 -0
  45. package/dist/deviceid-data.d.ts +33 -0
  46. package/dist/deviceid-data.d.ts.map +1 -0
  47. package/dist/deviceid-data.js +2941 -0
  48. package/dist/deviceid-data.js.map +1 -0
  49. package/dist/deviceid.d.ts +12 -0
  50. package/dist/deviceid.d.ts.map +1 -0
  51. package/dist/deviceid.js +86 -0
  52. package/dist/deviceid.js.map +1 -0
  53. package/dist/diagnostics.d.ts +48 -0
  54. package/dist/diagnostics.d.ts.map +1 -0
  55. package/dist/diagnostics.js +65 -0
  56. package/dist/diagnostics.js.map +1 -0
  57. package/dist/encode/common.d.ts +19 -0
  58. package/dist/encode/common.d.ts.map +1 -0
  59. package/dist/encode/common.js +84 -0
  60. package/dist/encode/common.js.map +1 -0
  61. package/dist/encode/index.d.ts +35 -0
  62. package/dist/encode/index.d.ts.map +1 -0
  63. package/dist/encode/index.js +248 -0
  64. package/dist/encode/index.js.map +1 -0
  65. package/dist/encode/other.d.ts +21 -0
  66. package/dist/encode/other.d.ts.map +1 -0
  67. package/dist/encode/other.js +253 -0
  68. package/dist/encode/other.js.map +1 -0
  69. package/dist/encode/position.d.ts +31 -0
  70. package/dist/encode/position.d.ts.map +1 -0
  71. package/dist/encode/position.js +729 -0
  72. package/dist/encode/position.js.map +1 -0
  73. package/dist/header.d.ts +42 -0
  74. package/dist/header.d.ts.map +1 -0
  75. package/dist/header.js +206 -0
  76. package/dist/header.js.map +1 -0
  77. package/dist/index.d.ts +13 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +14 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/neutral.d.ts +22 -0
  82. package/dist/neutral.d.ts.map +1 -0
  83. package/dist/neutral.js +593 -0
  84. package/dist/neutral.js.map +1 -0
  85. package/dist/symbols-data.d.ts +832 -0
  86. package/dist/symbols-data.d.ts.map +1 -0
  87. package/dist/symbols-data.js +173 -0
  88. package/dist/symbols-data.js.map +1 -0
  89. package/dist/symbols.d.ts +35 -0
  90. package/dist/symbols.d.ts.map +1 -0
  91. package/dist/symbols.js +71 -0
  92. package/dist/symbols.js.map +1 -0
  93. package/dist/types.d.ts +458 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +4 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +68 -0
  98. package/src/builder.ts +617 -0
  99. package/src/bytes.ts +118 -0
  100. package/src/codes.ts +218 -0
  101. package/src/decode/context.ts +63 -0
  102. package/src/decode/index.ts +135 -0
  103. package/src/decode/message.ts +194 -0
  104. package/src/decode/other.ts +307 -0
  105. package/src/decode/positioned.ts +1161 -0
  106. package/src/decode/reports.ts +378 -0
  107. package/src/decoder.ts +76 -0
  108. package/src/deviceid-data.ts +2954 -0
  109. package/src/deviceid.ts +83 -0
  110. package/src/diagnostics.ts +86 -0
  111. package/src/encode/common.ts +87 -0
  112. package/src/encode/index.ts +280 -0
  113. package/src/encode/other.ts +247 -0
  114. package/src/encode/position.ts +656 -0
  115. package/src/header.ts +221 -0
  116. package/src/index.ts +57 -0
  117. package/src/neutral.ts +595 -0
  118. package/src/symbols-data.ts +181 -0
  119. package/src/symbols.ts +85 -0
  120. package/src/types.ts +571 -0
@@ -0,0 +1,25 @@
1
+ import type { AgreloDf, Capabilities, MaidenheadBeacon, NmeaSentence, Query, RawWeather, RawWeatherFormat, StatusReport, TelemetryReport, TestData, UserDefined } from '../types.js';
2
+ import type { DecodeContext } from './context.js';
3
+ /** `>`: a status report. */
4
+ export declare function decodeStatus(ctx: DecodeContext, s: string): StatusReport;
5
+ /** `T`: a telemetry report. */
6
+ export declare function decodeTelemetry(ctx: DecodeContext, s: string): TelemetryReport;
7
+ /** `?`: a general query. */
8
+ export declare function decodeQuery(ctx: DecodeContext, s: string): Query;
9
+ /** `<`: station capabilities. */
10
+ export declare function decodeCapabilities(ctx: DecodeContext, s: string): Capabilities;
11
+ /** Verifies an NMEA sentence's checksum; `undefined` when it has none. */
12
+ export declare function nmeaChecksumOk(sentence: string): boolean | undefined;
13
+ /** `$`: raw NMEA, or Ultimeter raw weather (`$ULTW`). */
14
+ export declare function decodeDollar(ctx: DecodeContext, s: string): NmeaSentence | RawWeather;
15
+ /** Raw weather station data, kept as text. */
16
+ export declare function decodeRawWeather(ctx: DecodeContext, data: string, format: RawWeatherFormat): RawWeather;
17
+ /** `{`: user-defined data, kept as bytes. */
18
+ export declare function decodeUserDefined(ctx: DecodeContext, s: string): UserDefined;
19
+ /** `,`: invalid or test data. */
20
+ export declare function decodeTest(ctx: DecodeContext, s: string): TestData;
21
+ /** `%`: an Agrelo DFJr / MicroFinder report. */
22
+ export declare function decodeAgrelo(ctx: DecodeContext, s: string): AgreloDf;
23
+ /** `[`: a Maidenhead locator beacon. */
24
+ export declare function decodeMaidenhead(ctx: DecodeContext, s: string): MaidenheadBeacon;
25
+ //# sourceMappingURL=other.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../src/decode/other.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EAER,YAAY,EAEZ,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAYlD,4BAA4B;AAC5B,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAoCxE;AAID,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,CA0D9E;AAED,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,CAWhE;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAe9E;AAiCD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAMpE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAsDrF;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAIvG;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAU5E;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,CAGlE;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,CAIpE;AAED,wCAAwC;AACxC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAWhF"}
@@ -0,0 +1,326 @@
1
+ // Status reports, telemetry reports, queries, capabilities, NMEA, raw weather, user-defined and
2
+ // test data, Agrelo DF, Maidenhead beacons.
3
+ import { isSymbolTable, timestampValid } from './positioned.js';
4
+ const LOCATOR6 = /^[A-Ra-r]{2}[0-9]{2}[A-Xa-x]{2}/;
5
+ const LOCATOR4 = /^[A-Ra-r]{2}[0-9]{2}/;
6
+ function printableCode(c) {
7
+ if (c === undefined)
8
+ return false;
9
+ const v = c.charCodeAt(0);
10
+ return v >= 0x21 && v <= 0x7e;
11
+ }
12
+ /** `>`: a status report. */
13
+ export function decodeStatus(ctx, s) {
14
+ let body = s.slice(1);
15
+ const out = { type: 'status' };
16
+ const ts = /^([0-9]{2})([0-9]{2})([0-9]{2})z/.exec(body);
17
+ if (ts) {
18
+ const timestamp = { kind: 'dhm-zulu', day: Number(ts[1]), hour: Number(ts[2]), minute: Number(ts[3]) };
19
+ if (!timestampValid(timestamp))
20
+ ctx.tolerate('invalid-timestamp');
21
+ out.timestamp = timestamp;
22
+ body = body.slice(7);
23
+ }
24
+ else {
25
+ let locatorLength = 0;
26
+ if (LOCATOR6.test(body)) {
27
+ if (isSymbolTable(body[6]) && printableCode(body[7]))
28
+ locatorLength = 6;
29
+ }
30
+ else if (LOCATOR4.test(body) && isSymbolTable(body[4]) && printableCode(body[5])) {
31
+ locatorLength = 4;
32
+ }
33
+ if (locatorLength > 0) {
34
+ out.locator = body.slice(0, locatorLength).toUpperCase();
35
+ out.symbol = { table: body[locatorLength], code: body[locatorLength + 1] };
36
+ body = body.slice(locatorLength + 2);
37
+ if (body.length > 0) {
38
+ if (body[0] === ' ')
39
+ body = body.slice(1);
40
+ else
41
+ ctx.tolerate('missing-space-after-locator');
42
+ }
43
+ }
44
+ }
45
+ const beam = /\^([0-9A-Z])([0-9:;<=>?@A-K])$/.exec(body);
46
+ if (beam) {
47
+ out.beam = { headingCode: beam[1], powerCode: beam[2] };
48
+ body = body.slice(0, beam.index);
49
+ }
50
+ if (body.length > 0) {
51
+ const text = ctx.text(body);
52
+ if (text.length > 0)
53
+ out.text = text;
54
+ }
55
+ return out;
56
+ }
57
+ const TELEMETRY_VALUE_RE = /^-?(?:[0-9]+\.?[0-9]*|\.[0-9]+)$/;
58
+ /** `T`: a telemetry report. */
59
+ export function decodeTelemetry(ctx, s) {
60
+ if (!s.startsWith('T#'))
61
+ ctx.fail('invalid-telemetry');
62
+ let j;
63
+ let sequence;
64
+ if (s.startsWith('MIC', 2)) {
65
+ sequence = 'MIC';
66
+ j = 5;
67
+ if (s[j] === ',')
68
+ j++;
69
+ }
70
+ else {
71
+ const m = /^([A-Za-z0-9]+),/.exec(s.slice(2));
72
+ if (!m)
73
+ ctx.fail('invalid-telemetry');
74
+ sequence = m[1];
75
+ j = 2 + m[0].length;
76
+ }
77
+ const analog = [];
78
+ const analogText = [];
79
+ let ended = false;
80
+ while (analog.length < 5) {
81
+ const comma = s.indexOf(',', j);
82
+ const end = comma < 0 ? s.length : comma;
83
+ const v = s.slice(j, end);
84
+ if (v.length === 0) {
85
+ analog.push(null);
86
+ analogText.push(null);
87
+ }
88
+ else if (TELEMETRY_VALUE_RE.test(v)) {
89
+ analog.push(Number(v));
90
+ analogText.push(v);
91
+ }
92
+ else {
93
+ ctx.fail('invalid-telemetry');
94
+ }
95
+ if (comma < 0) {
96
+ ended = true;
97
+ j = s.length;
98
+ break;
99
+ }
100
+ j = comma + 1;
101
+ }
102
+ const out = {
103
+ type: 'telemetry',
104
+ sequence,
105
+ analog,
106
+ analogText,
107
+ };
108
+ if (analog.length < 5 || ended) {
109
+ ctx.tolerate('invalid-telemetry');
110
+ return out;
111
+ }
112
+ const bits = s.slice(j, j + 8);
113
+ if (!/^[01]{8}$/.test(bits)) {
114
+ ctx.tolerate('invalid-telemetry');
115
+ const rest = s.slice(j);
116
+ if (rest.length > 0)
117
+ out.comment = ctx.text(rest);
118
+ return out;
119
+ }
120
+ out.bits = bits;
121
+ const comment = s.slice(j + 8);
122
+ if (comment.length > 0)
123
+ out.comment = ctx.text(comment);
124
+ return out;
125
+ }
126
+ /** `?`: a general query. */
127
+ export function decodeQuery(ctx, s) {
128
+ const m = /^\?([A-Z]+)\?(.*)$/s.exec(s);
129
+ if (!m)
130
+ ctx.fail('invalid-general-query');
131
+ const out = { type: 'query', queryType: m[1] };
132
+ const rest = m[2];
133
+ if (rest.length > 0) {
134
+ const f = /^ ?(-?[0-9]+(?:\.[0-9]*)?),(-?[0-9]+(?:\.[0-9]*)?),([0-9]{4})$/.exec(rest);
135
+ if (!f)
136
+ ctx.fail('invalid-general-query');
137
+ out.footprint = { latitude: Number(f[1]), longitude: Number(f[2]), radiusMiles: Number(f[3]) };
138
+ }
139
+ return out;
140
+ }
141
+ /** `<`: station capabilities. */
142
+ export function decodeCapabilities(ctx, s) {
143
+ const text = ctx.text(s.slice(1));
144
+ const capabilities = [];
145
+ let freeText = false;
146
+ for (const raw of text.split(',')) {
147
+ const item = raw.trim();
148
+ if (item.length === 0)
149
+ continue; // empty items are skipped
150
+ const eq = item.indexOf('=');
151
+ const token = eq < 0 ? item : item.slice(0, eq);
152
+ if (/\s/.test(token) || token.length === 0)
153
+ freeText = true;
154
+ capabilities.push(eq < 0 ? [item] : [token, item.slice(eq + 1)]);
155
+ }
156
+ if (capabilities.length === 0)
157
+ ctx.fail('invalid-capabilities');
158
+ if (freeText)
159
+ ctx.tolerate('free-text-capabilities');
160
+ return { type: 'capabilities', capabilities };
161
+ }
162
+ function nmeaDegrees(value, hemisphere, width) {
163
+ if (value === undefined || hemisphere === undefined)
164
+ return undefined;
165
+ if (!/^[0-9]+(?:\.[0-9]*)?$/.test(value))
166
+ return undefined;
167
+ const dot = value.indexOf('.');
168
+ const intPart = dot < 0 ? value : value.slice(0, dot);
169
+ if (intPart.length < 3)
170
+ return undefined;
171
+ const degrees = Number(intPart.slice(0, intPart.length - 2));
172
+ const minutes = Number(value.slice(intPart.length - 2));
173
+ if (minutes >= 60)
174
+ return undefined;
175
+ const v = degrees + minutes / 60;
176
+ if (v > width)
177
+ return undefined;
178
+ if (hemisphere === 'S' || hemisphere === 'W')
179
+ return v === 0 ? 0 : -v;
180
+ if (hemisphere === 'N' || hemisphere === 'E')
181
+ return v;
182
+ return undefined;
183
+ }
184
+ function nmeaTime(value) {
185
+ if (value === undefined)
186
+ return undefined;
187
+ const m = /^([0-9]{2})([0-9]{2})([0-9]{2})(?:\.([0-9]*))?$/.exec(value);
188
+ if (!m)
189
+ return undefined;
190
+ let t = `${m[1]}:${m[2]}:${m[3]}`;
191
+ const fraction = (m[4] ?? '').replace(/0+$/, '');
192
+ if (fraction.length > 0)
193
+ t += `.${fraction}`;
194
+ return t;
195
+ }
196
+ function nmeaNumber(value) {
197
+ if (value === undefined || !/^-?(?:[0-9]+\.?[0-9]*|\.[0-9]+)$/.test(value))
198
+ return undefined;
199
+ return Number(value);
200
+ }
201
+ /** Verifies an NMEA sentence's checksum; `undefined` when it has none. */
202
+ export function nmeaChecksumOk(sentence) {
203
+ const m = /\*([0-9A-Fa-f]{2})$/.exec(sentence);
204
+ if (!m)
205
+ return undefined;
206
+ let x = 0;
207
+ for (let k = 0; k < m.index; k++)
208
+ x ^= sentence.charCodeAt(k);
209
+ return x === parseInt(m[1], 16);
210
+ }
211
+ /** `$`: raw NMEA, or Ultimeter raw weather (`$ULTW`). */
212
+ export function decodeDollar(ctx, s) {
213
+ if (s.startsWith('$ULTW'))
214
+ return decodeRawWeather(ctx, s.slice(5), 'ultimeter-packet');
215
+ ctx.info('obsolete-format');
216
+ const sentence = s.slice(1);
217
+ if (!/^[A-Z]{5},[\x20-\x7e]*$/.test(sentence))
218
+ ctx.fail('invalid-nmea');
219
+ const checksum = nmeaChecksumOk(sentence);
220
+ if (checksum === false)
221
+ ctx.fail('nmea-checksum-mismatch');
222
+ const body = checksum === undefined ? sentence : sentence.slice(0, sentence.length - 3);
223
+ const f = body.split(',');
224
+ const out = { type: 'nmea', sentence };
225
+ if (checksum !== undefined)
226
+ out.hasChecksum = true;
227
+ const set = (key, value) => {
228
+ if (value !== undefined)
229
+ out[key] = value;
230
+ };
231
+ switch (f[0].slice(2)) {
232
+ case 'GGA': {
233
+ set('latitude', nmeaDegrees(f[2], f[3], 90));
234
+ set('longitude', nmeaDegrees(f[4], f[5], 180));
235
+ if (f[6] !== undefined && /^[0-9]$/.test(f[6]))
236
+ out.fix = f[6] === '0' ? 'invalid' : 'valid';
237
+ set('altitudeM', nmeaNumber(f[9]));
238
+ set('time', nmeaTime(f[1]));
239
+ break;
240
+ }
241
+ case 'GLL': {
242
+ set('latitude', nmeaDegrees(f[1], f[2], 90));
243
+ set('longitude', nmeaDegrees(f[3], f[4], 180));
244
+ set('time', nmeaTime(f[5]));
245
+ if (f[6] === 'A')
246
+ out.fix = 'valid';
247
+ else if (f[6] === 'V')
248
+ out.fix = 'invalid';
249
+ break;
250
+ }
251
+ case 'RMC': {
252
+ set('time', nmeaTime(f[1]));
253
+ if (f[2] === 'A')
254
+ out.fix = 'valid';
255
+ else if (f[2] === 'V')
256
+ out.fix = 'invalid';
257
+ set('latitude', nmeaDegrees(f[3], f[4], 90));
258
+ set('longitude', nmeaDegrees(f[5], f[6], 180));
259
+ set('speedKnots', nmeaNumber(f[7]));
260
+ set('courseDegrees', nmeaNumber(f[8]));
261
+ break;
262
+ }
263
+ case 'VTG': {
264
+ set('courseDegrees', nmeaNumber(f[1]));
265
+ set('speedKnots', nmeaNumber(f[5]));
266
+ break;
267
+ }
268
+ case 'WPL': {
269
+ set('latitude', nmeaDegrees(f[1], f[2], 90));
270
+ set('longitude', nmeaDegrees(f[3], f[4], 180));
271
+ if (f[5] !== undefined && f[5].length > 0)
272
+ out.waypoint = f[5];
273
+ break;
274
+ }
275
+ }
276
+ return out;
277
+ }
278
+ /** Raw weather station data, kept as text. */
279
+ export function decodeRawWeather(ctx, data, format) {
280
+ ctx.info('obsolete-format');
281
+ if (!/^[\x20-\x7e]*$/.test(data))
282
+ ctx.fail('invalid-weather');
283
+ return data.length > 0 ? { type: 'raw-weather', format, data } : { type: 'raw-weather', format };
284
+ }
285
+ /** `{`: user-defined data, kept as bytes. */
286
+ export function decodeUserDefined(ctx, s) {
287
+ if (s.length < 3)
288
+ ctx.fail('invalid-user-defined');
289
+ const data = s.slice(3);
290
+ const out = {
291
+ type: 'user-defined',
292
+ userId: s[1],
293
+ packetType: s[2],
294
+ };
295
+ if (data.length > 0)
296
+ out.data = data;
297
+ return out;
298
+ }
299
+ /** `,`: invalid or test data. */
300
+ export function decodeTest(ctx, s) {
301
+ const data = ctx.text(s.slice(1));
302
+ return data.length > 0 ? { type: 'test', data } : { type: 'test' };
303
+ }
304
+ /** `%`: an Agrelo DFJr / MicroFinder report. */
305
+ export function decodeAgrelo(ctx, s) {
306
+ const m = /^%([0-9]{3})\/([0-9])/.exec(s);
307
+ if (!m)
308
+ ctx.fail('invalid-agrelo-df');
309
+ return { type: 'agrelo-df', bearingDegrees: Number(m[1]), quality: Number(m[2]) };
310
+ }
311
+ /** `[`: a Maidenhead locator beacon. */
312
+ export function decodeMaidenhead(ctx, s) {
313
+ ctx.info('obsolete-format');
314
+ const m = /^\[([A-Ra-r]{2}[0-9]{2}(?:[A-Xa-x]{2})?)\]/.exec(s);
315
+ if (!m)
316
+ ctx.fail('invalid-locator');
317
+ const out = {
318
+ type: 'maidenhead-beacon',
319
+ locator: m[1].toUpperCase(),
320
+ };
321
+ const rest = s.slice(m[0].length);
322
+ if (rest.length > 0)
323
+ out.comment = ctx.text(rest);
324
+ return out;
325
+ }
326
+ //# sourceMappingURL=other.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other.js","sourceRoot":"","sources":["../../src/decode/other.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import type { AprsSymbol, AprsTimestamp, AreaColor, AreaObject, AreaShape, CommentTelemetry, CompressionType, Dao, DfBearing, Dfs, Phg, Storm, VoiceFrequency, Weather } from '../types.js';
2
+ import type { DecodeContext } from './context.js';
3
+ export declare function isDigit(c: string | undefined): boolean;
4
+ export declare function isBase91(c: string | undefined): boolean;
5
+ export declare function base91Value(s: string): number;
6
+ /** Whether `c` can be an uncompressed symbol table identifier: `/`, `\`, `0`-`9`, `A`-`Z`. */
7
+ export declare function isSymbolTable(c: string | undefined): boolean;
8
+ export declare const KNOTS_TO_MPH = 1.150779448;
9
+ export declare const METRES_PER_FOOT = 0.3048;
10
+ /** A 7-byte timestamp shaped `ddhhmmz`, `ddhhmm/` or `hhmmssh` at `i`, without checking ranges. */
11
+ export declare function timestampAt(s: string, i: number): AprsTimestamp | undefined;
12
+ /** Whether a timestamp's fields are in range. */
13
+ export declare function timestampValid(t: AprsTimestamp): boolean;
14
+ /** A decoded position, before any `!DAO!` is applied. */
15
+ export interface RawPosition {
16
+ latDegrees: number;
17
+ latMinutes: number;
18
+ latSouth: boolean;
19
+ lonDegrees: number;
20
+ lonMinutes: number;
21
+ lonWest: boolean;
22
+ /** For a compressed position, the decoded degrees. */
23
+ latitude: number;
24
+ longitude: number;
25
+ ambiguity: number;
26
+ symbol: AprsSymbol;
27
+ compressed: boolean;
28
+ /** Compressed: the cs bytes were blank (a space). */
29
+ csBlank: boolean;
30
+ compression?: CompressionType;
31
+ /** Compressed cs: course/speed. */
32
+ csCourse?: number;
33
+ csCourseRaw?: number;
34
+ csSpeedKnots?: number;
35
+ csRangeMiles?: number;
36
+ csAltitudeFeet?: number;
37
+ /** Bytes consumed. */
38
+ length: number;
39
+ }
40
+ /** Parses an uncompressed position (`ddmm.hhN/dddmm.hhW$`) at `i`; 19 bytes. */
41
+ export declare function parseUncompressed(ctx: DecodeContext, s: string, i: number): RawPosition;
42
+ /** Decodes a compression type byte's value (0-63). */
43
+ export declare function compressionTypeOf(t: number): CompressionType;
44
+ /** Parses a compressed position (`/YYYYXXXX$csT`) at `i`; 13 bytes. */
45
+ export declare function parseCompressed(ctx: DecodeContext, s: string, i: number): RawPosition;
46
+ /** Parses a position at `i`, uncompressed or compressed by its first byte. */
47
+ export declare function parsePosition(ctx: DecodeContext, s: string, i: number): RawPosition;
48
+ /** Whether a position decodes at `i`, without reporting anything. */
49
+ export declare function positionDecodesAt(ctx: DecodeContext, s: string, i: number): boolean;
50
+ interface DaoFound {
51
+ start: number;
52
+ dao: Dao;
53
+ latAdd: number;
54
+ lonAdd: number;
55
+ }
56
+ declare const AREA_SHAPES: readonly AreaShape[];
57
+ declare const AREA_COLORS: readonly AreaColor[];
58
+ export { AREA_SHAPES, AREA_COLORS };
59
+ declare const MICROWAVE_BASE: Record<string, number>;
60
+ export { MICROWAVE_BASE };
61
+ /** Mutable positioned fields, as they are built up. */
62
+ export interface Fields {
63
+ latitude: number;
64
+ longitude: number;
65
+ ambiguity?: number;
66
+ symbol: AprsSymbol;
67
+ compressed?: boolean;
68
+ compression?: CompressionType;
69
+ courseDegrees?: number;
70
+ speedKnots?: number;
71
+ altitudeFeet?: number;
72
+ phg?: Phg;
73
+ rangeMiles?: number;
74
+ dfs?: Dfs;
75
+ area?: AreaObject;
76
+ dfBearing?: DfBearing;
77
+ storm?: Storm;
78
+ dao?: Dao;
79
+ telemetry?: CommentTelemetry;
80
+ frequency?: VoiceFrequency;
81
+ weather?: Weather;
82
+ signpost?: string;
83
+ comment?: string;
84
+ }
85
+ /** What the comment lifting found. */
86
+ interface Lifted {
87
+ telemetry?: CommentTelemetry;
88
+ dao?: DaoFound;
89
+ altitudeFeet?: number;
90
+ signpost?: string;
91
+ corridorWidthMiles?: number;
92
+ phg?: Phg;
93
+ rangeMiles?: number;
94
+ dfs?: Dfs;
95
+ frequency?: VoiceFrequency;
96
+ /** The comment text left (binary). */
97
+ rest: string;
98
+ }
99
+ type MutableWeather = {
100
+ -readonly [K in keyof Weather]: Weather[K];
101
+ };
102
+ /** The wind a weather report starts with, from an extension or the compressed cs bytes. */
103
+ export interface WindStart {
104
+ /** Some wind source was present (even if unknown). */
105
+ present: boolean;
106
+ direction?: number;
107
+ speedMph?: number;
108
+ }
109
+ export interface WeatherParse {
110
+ weather: MutableWeather;
111
+ /** The index after the fields. */
112
+ end: number;
113
+ /** Wind came from c/s fields. */
114
+ windFromFields: boolean;
115
+ }
116
+ /** Parses a positionless weather report's fields and tail from `j`. */
117
+ export declare function parsePositionlessWeather(ctx: DecodeContext, s: string, j: number): {
118
+ weather: Weather;
119
+ comment?: string;
120
+ };
121
+ /** What follows a position, decoded into the fields. */
122
+ export declare function decodeAfterPosition(ctx: DecodeContext, s: string, i: number, pos: RawPosition): Fields;
123
+ /** Applies a `!DAO!` to the fields. */
124
+ export declare function applyDao(ctx: DecodeContext, f: Fields, pos: RawPosition, dao: DaoFound | undefined): void;
125
+ /** Lifts the elements out of Mic-E status text after its type code, altitude and locator. */
126
+ export declare function liftMicEComment(ctx: DecodeContext, text: string, symbol: AprsSymbol): {
127
+ lifted: Lifted;
128
+ };
129
+ /** Applies lifted comment elements to fields (Mic-E). */
130
+ export declare function applyLiftedTo(ctx: DecodeContext, f: Fields, lifted: Lifted): void;
131
+ export type { DaoFound, Lifted };
132
+ //# sourceMappingURL=positioned.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positioned.d.ts","sourceRoot":"","sources":["../../src/decode/positioned.ts"],"names":[],"mappings":"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"}