ngx-kel-agent 0.4.5 → 0.5.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/README.md +0 -26
- package/esm2020/lib/agent-message.service.mjs +18 -0
- package/esm2020/lib/agent.service.mjs +93 -170
- package/esm2020/lib/hamlib-messages.mjs +2 -0
- package/esm2020/lib/hamlib.service.mjs +48 -0
- package/esm2020/lib/wsjtx-messages.mjs +2 -0
- package/esm2020/lib/wsjtx.service.mjs +196 -0
- package/esm2020/public-api.mjs +8 -2
- package/fesm2015/ngx-kel-agent.mjs +326 -160
- package/fesm2015/ngx-kel-agent.mjs.map +1 -1
- package/fesm2020/ngx-kel-agent.mjs +326 -155
- package/fesm2020/ngx-kel-agent.mjs.map +1 -1
- package/lib/agent-message.service.d.ts +9 -0
- package/lib/agent.service.d.ts +114 -27
- package/lib/hamlib-messages.d.ts +10 -0
- package/lib/hamlib.service.d.ts +16 -0
- package/lib/{messages.d.ts → wsjtx-messages.d.ts} +152 -16
- package/lib/wsjtx.service.d.ts +51 -0
- package/package.json +4 -4
- package/public-api.d.ts +5 -1
- package/esm2020/lib/messages.mjs +0 -2
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./agent-message.service";
|
|
6
|
+
export class WsjtxService {
|
|
7
|
+
constructor(messages) {
|
|
8
|
+
this.messages = messages;
|
|
9
|
+
/** Whether we're getting any messages from WSJT-X. */
|
|
10
|
+
this.connected$ = new BehaviorSubject(false);
|
|
11
|
+
/** Subject for listening to WSJT-X "Heartbeat" messages. */
|
|
12
|
+
this.heartbeat$ = new ReplaySubject(1);
|
|
13
|
+
/** Subject for listening to WSJT-X "Status" messages. */
|
|
14
|
+
this.status$ = new ReplaySubject(1);
|
|
15
|
+
/** Subject for listening to WSJT-X "Decode" messages. */
|
|
16
|
+
this.decode$ = new Subject();
|
|
17
|
+
/** Subject for listening to WSJT-X "Clear" messages. */
|
|
18
|
+
this.clear$ = new Subject();
|
|
19
|
+
/** Subject for listening to WSJT-X "QsoLogged" messages. */
|
|
20
|
+
this.qsoLogged$ = new Subject();
|
|
21
|
+
/** Subject for listening to WSJT-X "Close" messages. */
|
|
22
|
+
this.close$ = new Subject();
|
|
23
|
+
/** Subject for listening to WSJT-X "WsprDecode" messages. */
|
|
24
|
+
this.wsprDecode$ = new Subject();
|
|
25
|
+
/** Subject for listening to WSJT-X "LoggedAdif" messages. */
|
|
26
|
+
this.loggedAdif$ = new Subject();
|
|
27
|
+
this.wsjtxId = 'WSJT-X';
|
|
28
|
+
this.setupBehaviors();
|
|
29
|
+
}
|
|
30
|
+
setupBehaviors() {
|
|
31
|
+
this.messages.rxMessage$.subscribe((msg) => this.handleMessage(msg));
|
|
32
|
+
// if we haven't heard from WSJT-X in 15 seconds, consider it "down"
|
|
33
|
+
this.connected$
|
|
34
|
+
.pipe(debounceTime(15000))
|
|
35
|
+
.subscribe(() => this.connected$.next(false));
|
|
36
|
+
// When WSJT-X announces it's closing, set it to "down" immediately
|
|
37
|
+
this.close$.subscribe(() => {
|
|
38
|
+
this.connected$.next(false);
|
|
39
|
+
});
|
|
40
|
+
// When WSJT-X goes down, clear its persistent message subjects
|
|
41
|
+
this.connected$.subscribe((isUp) => {
|
|
42
|
+
if (!isUp) {
|
|
43
|
+
this.heartbeat$.next(null);
|
|
44
|
+
this.status$.next(null);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
handleMessage(msg) {
|
|
49
|
+
if (!msg.wsjtx) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.connected$.next(true);
|
|
53
|
+
this.wsjtxId = msg.wsjtx.payload.id;
|
|
54
|
+
switch (msg.wsjtx.type) {
|
|
55
|
+
case 'HeartbeatMessage':
|
|
56
|
+
this.heartbeat$.next(msg.wsjtx.payload);
|
|
57
|
+
return;
|
|
58
|
+
case 'StatusMessage':
|
|
59
|
+
this.status$.next(msg.wsjtx.payload);
|
|
60
|
+
return;
|
|
61
|
+
case 'DecodeMessage':
|
|
62
|
+
this.decode$.next(msg.wsjtx.payload);
|
|
63
|
+
return;
|
|
64
|
+
case 'ClearMessage':
|
|
65
|
+
this.clear$.next(msg.wsjtx.payload);
|
|
66
|
+
return;
|
|
67
|
+
case 'QsoLoggedMessage':
|
|
68
|
+
this.qsoLogged$.next(msg.wsjtx.payload);
|
|
69
|
+
return;
|
|
70
|
+
case 'CloseMessage':
|
|
71
|
+
this.close$.next(msg.wsjtx.payload);
|
|
72
|
+
return;
|
|
73
|
+
case 'WSPRDecodeMessage':
|
|
74
|
+
this.wsprDecode$.next(msg.wsjtx.payload);
|
|
75
|
+
return;
|
|
76
|
+
case 'LoggedAdifMessage':
|
|
77
|
+
this.loggedAdif$.next(msg.wsjtx.payload);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Send a command to WSJT-X to clear the Band Activity window. */
|
|
82
|
+
clearBandActivity() {
|
|
83
|
+
const wsMsg = {
|
|
84
|
+
wsjtx: {
|
|
85
|
+
type: 'ClearMessage',
|
|
86
|
+
payload: { id: this.wsjtxId, window: 0 },
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
this.messages.txMessage$.next(wsMsg);
|
|
90
|
+
}
|
|
91
|
+
/** Send a command to WSJT-X to clear the Rx Frequency window. */
|
|
92
|
+
clearRxFreqWindow() {
|
|
93
|
+
const wsMsg = {
|
|
94
|
+
wsjtx: {
|
|
95
|
+
type: 'ClearMessage',
|
|
96
|
+
payload: { id: this.wsjtxId, window: 1 },
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
this.messages.txMessage$.next(wsMsg);
|
|
100
|
+
}
|
|
101
|
+
/** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */
|
|
102
|
+
clearAll() {
|
|
103
|
+
const wsMsg = {
|
|
104
|
+
wsjtx: {
|
|
105
|
+
type: 'ClearMessage',
|
|
106
|
+
payload: { id: this.wsjtxId, window: 2 },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
this.messages.txMessage$.next(wsMsg);
|
|
110
|
+
}
|
|
111
|
+
/** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear
|
|
112
|
+
* previous WSJT-X decodes. */
|
|
113
|
+
replay() {
|
|
114
|
+
const wsMsg = {
|
|
115
|
+
wsjtx: {
|
|
116
|
+
type: 'ReplayMessage',
|
|
117
|
+
payload: { id: this.wsjtxId },
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
this.messages.txMessage$.next(wsMsg);
|
|
121
|
+
}
|
|
122
|
+
/** Send a command to WSJT-X to halt any transmissions immediately. */
|
|
123
|
+
haltTxNow() {
|
|
124
|
+
const wsMsg = {
|
|
125
|
+
wsjtx: {
|
|
126
|
+
type: 'HaltTxMessage',
|
|
127
|
+
payload: { id: this.wsjtxId, autoTxOnly: false },
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
this.messages.txMessage$.next(wsMsg);
|
|
131
|
+
}
|
|
132
|
+
/** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */
|
|
133
|
+
haltTxAfterCurrent() {
|
|
134
|
+
const wsMsg = {
|
|
135
|
+
wsjtx: {
|
|
136
|
+
type: 'HaltTxMessage',
|
|
137
|
+
payload: { id: this.wsjtxId, autoTxOnly: true },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
this.messages.txMessage$.next(wsMsg);
|
|
141
|
+
}
|
|
142
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
143
|
+
reply(decode) {
|
|
144
|
+
const wsMsg = {
|
|
145
|
+
wsjtx: {
|
|
146
|
+
type: 'ReplyMessage',
|
|
147
|
+
payload: {
|
|
148
|
+
id: decode.id,
|
|
149
|
+
time: decode.time,
|
|
150
|
+
snr: decode.snr,
|
|
151
|
+
deltaTime: decode.deltaTime,
|
|
152
|
+
deltaFrequency: decode.deltaFrequency,
|
|
153
|
+
mode: decode.mode,
|
|
154
|
+
message: decode.message,
|
|
155
|
+
lowConfidence: decode.lowConfidence,
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
this.messages.txMessage$.next(wsMsg);
|
|
160
|
+
}
|
|
161
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
162
|
+
highlightCallsign(highlightMsg) {
|
|
163
|
+
highlightMsg.id = this.wsjtxId;
|
|
164
|
+
const wsMsg = {
|
|
165
|
+
wsjtx: {
|
|
166
|
+
type: 'HighlightCallsignMessage',
|
|
167
|
+
payload: highlightMsg,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
this.messages.txMessage$.next(wsMsg);
|
|
171
|
+
}
|
|
172
|
+
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
173
|
+
* Activity/Rx Frequency windows. */
|
|
174
|
+
static formatDecode(msg) {
|
|
175
|
+
const secondsSinceMidnight = Math.floor(msg.time / 1000);
|
|
176
|
+
const hours = Math.floor(secondsSinceMidnight / 3600);
|
|
177
|
+
const secondsSinceHour = secondsSinceMidnight - hours * 3600;
|
|
178
|
+
const minutes = Math.floor(secondsSinceHour / 60);
|
|
179
|
+
const seconds = secondsSinceHour - minutes * 60;
|
|
180
|
+
const timeStr = `${hours.toString().padStart(2, '0')}${minutes
|
|
181
|
+
.toString()
|
|
182
|
+
.padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;
|
|
183
|
+
return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime
|
|
184
|
+
.toFixed(1)
|
|
185
|
+
.padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${msg.message}`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
WsjtxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, deps: [{ token: i1.AgentMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
189
|
+
WsjtxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, providedIn: 'root' });
|
|
190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, decorators: [{
|
|
191
|
+
type: Injectable,
|
|
192
|
+
args: [{
|
|
193
|
+
providedIn: 'root',
|
|
194
|
+
}]
|
|
195
|
+
}], ctorParameters: function () { return [{ type: i1.AgentMessageService }]; } });
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NqdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi93c2p0eC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBZS9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTTlDLE1BQU0sT0FBTyxZQUFZO0lBc0J2QixZQUFvQixRQUE2QjtRQUE3QixhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQXJCakQsc0RBQXNEO1FBQ3RDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqRSw0REFBNEQ7UUFDNUMsZUFBVSxHQUFHLElBQUksYUFBYSxDQUF3QixDQUFDLENBQUMsQ0FBQztRQUN6RSx5REFBeUQ7UUFDekMsWUFBTyxHQUFHLElBQUksYUFBYSxDQUFxQixDQUFDLENBQUMsQ0FBQztRQUNuRSx5REFBeUQ7UUFDekMsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDckQsd0RBQXdEO1FBQ3hDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ25ELDREQUE0RDtRQUM1QyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7UUFDM0Qsd0RBQXdEO1FBQ3hDLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ25ELDZEQUE2RDtRQUM3QyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQzdELDZEQUE2RDtRQUM3QyxnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBRXJELFlBQU8sR0FBVyxRQUFRLENBQUM7UUFHakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFD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QUFTO2FBQ2pFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDVixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQ3pELEdBQUcsQ0FBQyxPQUNOLEVBQUUsQ0FBQztJQUNMLENBQUM7O3lHQW5NVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBXc2p0eENsZWFyLFxuICBXc2p0eENsb3NlLFxuICBXc2p0eERlY29kZSxcbiAgV3NqdHhIYWx0VHgsXG4gIFdzanR4SGVhcnRiZWF0LFxuICBXc2p0eEhpZ2hsaWdodENhbGxzaWduLFxuICBXc2p0eExvZ2dlZEFkaWYsXG4gIFdzanR4UXNvTG9nZ2VkLFxuICBXc2p0eFJlcGxheSxcbiAgV3NqdHhSZXBseSxcbiAgV3NqdHhTdGF0dXMsXG4gIFdzanR4V3NwckRlY29kZSxcbn0gZnJvbSAnLi93c2p0eC1tZXNzYWdlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZ2VudE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV3NqdHhTZXJ2aWNlIHtcbiAgLyoqIFdoZXRoZXIgd2UncmUgZ2V0dGluZyBhbnkgbWVzc2FnZXMgZnJvbSBXU0pULVguICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiSGVhcnRiZWF0XCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBoZWFydGJlYXQkID0gbmV3IFJlcGxheVN1YmplY3Q8V3NqdHhIZWFydGJlYXQgfCBudWxsPigxKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJTdGF0dXNcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSBuZXcgUmVwbGF5U3ViamVjdDxXc2p0eFN0YXR1cyB8IG51bGw+KDEpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkRlY29kZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVjb2RlJCA9IG5ldyBTdWJqZWN0PFdzanR4RGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsZWFyXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxXc2p0eENsZWFyPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIlFzb0xvZ2dlZFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcXNvTG9nZ2VkJCA9IG5ldyBTdWJqZWN0PFdzanR4UXNvTG9nZ2VkPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsb3NlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbG9zZSQgPSBuZXcgU3ViamVjdDxXc2p0eENsb3NlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIldzcHJEZWNvZGVcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzcHJEZWNvZGUkID0gbmV3IFN1YmplY3Q8V3NqdHhXc3ByRGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkxvZ2dlZEFkaWZcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEFkaWYkID0gbmV3IFN1YmplY3Q8V3NqdHhMb2dnZWRBZGlmPigpO1xuXG4gIHByaXZhdGUgd3NqdHhJZDogc3RyaW5nID0gJ1dTSlQtWCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXNzYWdlczogQWdlbnRNZXNzYWdlU2VydmljZSkge1xuICAgIHRoaXMuc2V0dXBCZWhhdmlvcnMoKTtcbiAgfVxuXG4gIHNldHVwQmVoYXZpb3JzKCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZXMucnhNZXNzYWdlJC5zdWJzY3JpYmUoKG1zZykgPT4gdGhpcy5oYW5kbGVNZXNzYWdlKG1zZykpO1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgaGVhcmQgZnJvbSBXU0pULVggaW4gMTUgc2Vjb25kcywgY29uc2lkZXIgaXQgXCJkb3duXCJcbiAgICB0aGlzLmNvbm5lY3RlZCRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKSk7XG4gICAgLy8gV2hlbiBXU0pULVggYW5ub3VuY2VzIGl0J3MgY2xvc2luZywgc2V0IGl0IHRvIFwiZG93blwiIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5jbG9zZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICB9KTtcbiAgICAvLyBXaGVuIFdTSlQtWCBnb2VzIGRvd24sIGNsZWFyIGl0cyBwZXJzaXN0ZW50IG1lc3NhZ2Ugc3ViamVjdHNcbiAgICB0aGlzLmNvbm5lY3RlZCQuc3Vic2NyaWJlKChpc1VwKSA9PiB7XG4gICAgICBpZiAoIWlzVXApIHtcbiAgICAgICAgdGhpcy5oZWFydGJlYXQkLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc3RhdHVzJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNZXNzYWdlKG1zZzogYW55KTogdm9pZCB7XG4gICAgaWYgKCFtc2cud3NqdHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy53c2p0eElkID0gbXNnLndzanR4LnBheWxvYWQuaWQ7XG4gICAgc3dpdGNoIChtc2cud3NqdHgudHlwZSkge1xuICAgICAgY2FzZSAnSGVhcnRiZWF0TWVzc2FnZSc6XG4gICAgICAgIHRoaXMuaGVhcnRiZWF0JC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4SGVhcnRiZWF0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnU3RhdHVzTWVzc2FnZSc6XG4gICAgICAgIHRoaXMuc3RhdHVzJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4U3RhdHVzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgIHRoaXMuZGVjb2RlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4RGVjb2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnQ2xlYXJNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5jbGVhciQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eENsZWFyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnUXNvTG9nZ2VkTWVzc2FnZSc6XG4gICAgICAgIHRoaXMucXNvTG9nZ2VkJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4UXNvTG9nZ2VkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnQ2xvc2VNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5jbG9zZSQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eENsb3NlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnV1NQUkRlY29kZU1lc3NhZ2UnOlxuICAgICAgICB0aGlzLndzcHJEZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhXc3ByRGVjb2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnTG9nZ2VkQWRpZk1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmxvZ2dlZEFkaWYkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhMb2dnZWRBZGlmKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgd2luZG93LiAqL1xuICBwdWJsaWMgY2xlYXJCYW5kQWN0aXZpdHkoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBSeCBGcmVxdWVuY3kgd2luZG93LiAqL1xuICBwdWJsaWMgY2xlYXJSeEZyZXFXaW5kb3coKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDEgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGNsZWFyIHRoZSBCYW5kIEFjdGl2aXR5IGFuZCBSeCBGcmVxdWVuY3kgd2luZG93cy4gKi9cbiAgcHVibGljIGNsZWFyQWxsKCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0NsZWFyTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eENsZWFyPnsgaWQ6IHRoaXMud3NqdHhJZCwgd2luZG93OiAyIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBsYXkgbWVzc2FnZXMuIFVzZWZ1bCBmb3IgYSBmcmVzaCBjbGllbnQgdGhhdCB3YW50cyB0byBoZWFyXG4gICAqIHByZXZpb3VzIFdTSlQtWCBkZWNvZGVzLiAqL1xuICBwdWJsaWMgcmVwbGF5KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ1JlcGxheU1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhSZXBsYXk+eyBpZDogdGhpcy53c2p0eElkIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBoYWx0IGFueSB0cmFuc21pc3Npb25zIGltbWVkaWF0ZWx5LiAqL1xuICBwdWJsaWMgaGFsdFR4Tm93KCkge1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0hhbHRUeE1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhIYWx0VHg+eyBpZDogdGhpcy53c2p0eElkLCBhdXRvVHhPbmx5OiBmYWxzZSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc3RvcCBhdXRvLXRyYW5zbWl0dGluZyBhZnRlciBmaW5pc2hpbmcgdGhlIGN1cnJlbnQgcm91bmQuICovXG4gIHB1YmxpYyBoYWx0VHhBZnRlckN1cnJlbnQoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57IGlkOiB0aGlzLndzanR4SWQsIGF1dG9UeE9ubHk6IHRydWUgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHJlcGx5IHRvIHRoZSBnaXZlbiBkZWNvZGUuIFRoZSBtZXNzYWdlIG11c3QgaW5jbHVkZSBDUSBvciBRUlouICovXG4gIHB1YmxpYyByZXBseShkZWNvZGU6IFdzanR4RGVjb2RlKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnUmVwbHlNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4UmVwbHk+e1xuICAgICAgICAgIGlkOiBkZWNvZGUuaWQsXG4gICAgICAgICAgdGltZTogZGVjb2RlLnRpbWUsXG4gICAgICAgICAgc25yOiBkZWNvZGUuc25yLFxuICAgICAgICAgIGRlbHRhVGltZTogZGVjb2RlLmRlbHRhVGltZSxcbiAgICAgICAgICBkZWx0YUZyZXF1ZW5jeTogZGVjb2RlLmRlbHRhRnJlcXVlbmN5LFxuICAgICAgICAgIG1vZGU6IGRlY29kZS5tb2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGRlY29kZS5tZXNzYWdlLFxuICAgICAgICAgIGxvd0NvbmZpZGVuY2U6IGRlY29kZS5sb3dDb25maWRlbmNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbHkgdG8gdGhlIGdpdmVuIGRlY29kZS4gVGhlIG1lc3NhZ2UgbXVzdCBpbmNsdWRlIENRIG9yIFFSWi4gKi9cbiAgcHVibGljIGhpZ2hsaWdodENhbGxzaWduKGhpZ2hsaWdodE1zZzogV3NqdHhIaWdobGlnaHRDYWxsc2lnbikge1xuICAgIGhpZ2hsaWdodE1zZy5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIaWdobGlnaHRDYWxsc2lnbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiBoaWdobGlnaHRNc2csXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIEdpdmVuIGEgZGVjb2RlIG1lc3NhZ2UsIGZvcm1hdCBhIHN0cmluZyB0aGUgc2FtZSB3YXkgYXMgZGlzcGxheWVkIGluIHRoZSBXU0pULVggQmFuZFxuICAgKiBBY3Rpdml0eS9SeCBGcmVxdWVuY3kgd2luZG93cy4gKi9cbiAgcHVibGljIHN0YXRpYyBmb3JtYXREZWNvZGUobXNnOiBXc2p0eERlY29kZSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2Vjb25kc1NpbmNlTWlkbmlnaHQgPSBNYXRoLmZsb29yKG1zZy50aW1lIC8gMTAwMCk7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZU1pZG5pZ2h0IC8gMzYwMCk7XG4gICAgY29uc3Qgc2Vjb25kc1NpbmNlSG91ciA9IHNlY29uZHNTaW5jZU1pZG5pZ2h0IC0gaG91cnMgKiAzNjAwO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZUhvdXIgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHNlY29uZHNTaW5jZUhvdXIgLSBtaW51dGVzICogNjA7XG4gICAgY29uc3QgdGltZVN0ciA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0ke21pbnV0ZXNcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAucGFkU3RhcnQoMiwgJzAnKX0ke3NlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG5cbiAgICByZXR1cm4gYCR7dGltZVN0cn0gJHttc2cuc25yLnRvU3RyaW5nKCkucGFkU3RhcnQoMyl9ICR7bXNnLmRlbHRhVGltZVxuICAgICAgLnRvRml4ZWQoMSlcbiAgICAgIC5wYWRTdGFydCg0KX0gJHttc2cuZGVsdGFGcmVxdWVuY3kudG9TdHJpbmcoKS5wYWRTdGFydCg0KX0gfiAgJHtcbiAgICAgIG1zZy5tZXNzYWdlXG4gICAgfWA7XG4gIH1cbn1cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -2,5 +2,11 @@
|
|
|
2
2
|
* Public API Surface of ngx-kel-agent
|
|
3
3
|
*/
|
|
4
4
|
export * from './lib/agent.service';
|
|
5
|
-
export * from './lib/
|
|
6
|
-
|
|
5
|
+
export * from './lib/agent-message.service';
|
|
6
|
+
export * from './lib/hamlib-messages';
|
|
7
|
+
export * from './lib/hamlib.service';
|
|
8
|
+
export * from './lib/wsjtx-messages';
|
|
9
|
+
export * from './lib/wsjtx.service';
|
|
10
|
+
// export * from './lib/ngx-kel-agent.component';
|
|
11
|
+
// export * from './lib/ngx-kel-agent.module';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxpREFBaUQ7QUFDakQsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gta2VsLWFnZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWdlbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGFtbGliLW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hhbWxpYi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5tb2R1bGUnO1xuIl19
|