icom-wlan-node 0.5.0 → 0.6.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 +73 -24
- package/dist/index.d.ts +4 -1
- package/dist/index.js +15 -1
- package/dist/rig/IcomCivFrame.d.ts +13 -0
- package/dist/rig/IcomCivFrame.js +72 -0
- package/dist/rig/IcomCivSpec.d.ts +54 -0
- package/dist/rig/IcomCivSpec.js +57 -0
- package/dist/rig/IcomControl.d.ts +85 -8
- package/dist/rig/IcomControl.js +374 -114
- package/dist/rig/IcomProfiles.d.ts +61 -0
- package/dist/rig/IcomProfiles.js +255 -0
- package/dist/rig/IcomRigCommands.d.ts +13 -15
- package/dist/rig/IcomRigCommands.js +66 -86
- package/dist/scope/IcomScopeCommands.d.ts +7 -0
- package/dist/scope/IcomScopeCommands.js +41 -22
- package/dist/types.d.ts +57 -8
- package/dist/utils/errors.d.ts +13 -0
- package/dist/utils/errors.js +17 -1
- package/package.json +2 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IcomModelId } from '../types';
|
|
2
|
+
export interface CalibrationPoint {
|
|
3
|
+
raw: number;
|
|
4
|
+
value: number;
|
|
5
|
+
}
|
|
6
|
+
export interface IcomExtParam {
|
|
7
|
+
command: number;
|
|
8
|
+
subcmd: number;
|
|
9
|
+
subext: number[];
|
|
10
|
+
dataBytes: number;
|
|
11
|
+
dataType: 'level' | 'bool' | 'int';
|
|
12
|
+
}
|
|
13
|
+
export interface IcomProfile {
|
|
14
|
+
modelId: IcomModelId;
|
|
15
|
+
profileName: string;
|
|
16
|
+
defaultCivAddress: number;
|
|
17
|
+
aliases: string[];
|
|
18
|
+
supportsX25X26: boolean;
|
|
19
|
+
supportsX1C03TxFreq: boolean;
|
|
20
|
+
modeWithFilter: boolean;
|
|
21
|
+
dataModeSupported: boolean;
|
|
22
|
+
defaultFilter: 1 | 2 | 3;
|
|
23
|
+
frequencyBcdBytes(freqHz: number): number;
|
|
24
|
+
scopeLineLength?: number;
|
|
25
|
+
scopeSingleFrameDataLength?: number;
|
|
26
|
+
scopeEdgeSlots: number[];
|
|
27
|
+
scopeRanges: Array<{
|
|
28
|
+
rangeId: number;
|
|
29
|
+
lowHz: number;
|
|
30
|
+
highHz: number;
|
|
31
|
+
}>;
|
|
32
|
+
calibrations: {
|
|
33
|
+
sMeterModel: string;
|
|
34
|
+
swr: CalibrationPoint[];
|
|
35
|
+
alc: CalibrationPoint[];
|
|
36
|
+
rfPowerWatts: CalibrationPoint[];
|
|
37
|
+
compDb: CalibrationPoint[];
|
|
38
|
+
voltage: CalibrationPoint[];
|
|
39
|
+
current: CalibrationPoint[];
|
|
40
|
+
};
|
|
41
|
+
extParams: {
|
|
42
|
+
usbAfLevel?: IcomExtParam;
|
|
43
|
+
afIfWlan?: IcomExtParam;
|
|
44
|
+
};
|
|
45
|
+
vendorExtensions: {
|
|
46
|
+
connectorWlanLevel?: IcomExtParam;
|
|
47
|
+
connectorDataMode?: {
|
|
48
|
+
command: number;
|
|
49
|
+
subcmd: number;
|
|
50
|
+
subext: number[];
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export declare const ICOM_PROFILES: Record<IcomModelId, IcomProfile>;
|
|
55
|
+
export declare function interpolateCalibration(raw: number, points: CalibrationPoint[]): number;
|
|
56
|
+
export declare function getProfileByModel(model?: IcomModelId | 'auto'): IcomProfile;
|
|
57
|
+
export declare function resolveIcomProfile(options: {
|
|
58
|
+
requestedModel?: IcomModelId | 'auto';
|
|
59
|
+
rigName?: string;
|
|
60
|
+
civAddress?: number;
|
|
61
|
+
}): IcomProfile;
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ICOM_PROFILES = void 0;
|
|
4
|
+
exports.interpolateCalibration = interpolateCalibration;
|
|
5
|
+
exports.getProfileByModel = getProfileByModel;
|
|
6
|
+
exports.resolveIcomProfile = resolveIcomProfile;
|
|
7
|
+
const HF_SCOPE_RANGES_13 = [
|
|
8
|
+
{ rangeId: 1, lowHz: 30000, highHz: 1600000 },
|
|
9
|
+
{ rangeId: 2, lowHz: 1600000, highHz: 2000000 },
|
|
10
|
+
{ rangeId: 3, lowHz: 2000000, highHz: 6000000 },
|
|
11
|
+
{ rangeId: 4, lowHz: 6000000, highHz: 8000000 },
|
|
12
|
+
{ rangeId: 5, lowHz: 8000000, highHz: 11000000 },
|
|
13
|
+
{ rangeId: 6, lowHz: 11000000, highHz: 15000000 },
|
|
14
|
+
{ rangeId: 7, lowHz: 15000000, highHz: 20000000 },
|
|
15
|
+
{ rangeId: 8, lowHz: 20000000, highHz: 22000000 },
|
|
16
|
+
{ rangeId: 9, lowHz: 22000000, highHz: 26000000 },
|
|
17
|
+
{ rangeId: 10, lowHz: 26000000, highHz: 30000000 },
|
|
18
|
+
{ rangeId: 11, lowHz: 30000000, highHz: 45000000 },
|
|
19
|
+
{ rangeId: 12, lowHz: 45000000, highHz: 60000000 },
|
|
20
|
+
{ rangeId: 13, lowHz: 60000000, highHz: 74800000 },
|
|
21
|
+
];
|
|
22
|
+
const HF_VHF_UHF_SCOPE_RANGES_17 = [
|
|
23
|
+
...HF_SCOPE_RANGES_13,
|
|
24
|
+
{ rangeId: 14, lowHz: 74800000, highHz: 108000000 },
|
|
25
|
+
{ rangeId: 15, lowHz: 108000000, highHz: 137000000 },
|
|
26
|
+
{ rangeId: 16, lowHz: 137000000, highHz: 200000000 },
|
|
27
|
+
{ rangeId: 17, lowHz: 400000000, highHz: 470000000 },
|
|
28
|
+
];
|
|
29
|
+
const IC9700_SCOPE_RANGES = [
|
|
30
|
+
{ rangeId: 1, lowHz: 144000000, highHz: 148000000 },
|
|
31
|
+
{ rangeId: 2, lowHz: 430000000, highHz: 450000000 },
|
|
32
|
+
{ rangeId: 3, lowHz: 1240000000, highHz: 1300000000 },
|
|
33
|
+
];
|
|
34
|
+
const IC7610_SCOPE_RANGES = HF_SCOPE_RANGES_13.slice(0, 12);
|
|
35
|
+
const DEFAULT_SWR = [
|
|
36
|
+
{ raw: 0, value: 1.0 },
|
|
37
|
+
{ raw: 48, value: 1.5 },
|
|
38
|
+
{ raw: 80, value: 2.0 },
|
|
39
|
+
{ raw: 120, value: 3.0 },
|
|
40
|
+
{ raw: 240, value: 6.0 },
|
|
41
|
+
];
|
|
42
|
+
const DEFAULT_ALC = [
|
|
43
|
+
{ raw: 0, value: 0 },
|
|
44
|
+
{ raw: 120, value: 100 },
|
|
45
|
+
];
|
|
46
|
+
const IC7300_RF_POWER = [
|
|
47
|
+
{ raw: 0, value: 0 },
|
|
48
|
+
{ raw: 21, value: 5 },
|
|
49
|
+
{ raw: 43, value: 10 },
|
|
50
|
+
{ raw: 65, value: 15 },
|
|
51
|
+
{ raw: 83, value: 20 },
|
|
52
|
+
{ raw: 95, value: 25 },
|
|
53
|
+
{ raw: 105, value: 30 },
|
|
54
|
+
{ raw: 114, value: 35 },
|
|
55
|
+
{ raw: 124, value: 40 },
|
|
56
|
+
{ raw: 143, value: 50 },
|
|
57
|
+
{ raw: 183, value: 75 },
|
|
58
|
+
{ raw: 213, value: 100 },
|
|
59
|
+
{ raw: 255, value: 120 },
|
|
60
|
+
];
|
|
61
|
+
const IC705_RF_POWER = IC7300_RF_POWER.map((p) => ({ raw: p.raw, value: p.value / 10 }));
|
|
62
|
+
const DEFAULT_COMP = [
|
|
63
|
+
{ raw: 0, value: 0 },
|
|
64
|
+
{ raw: 130, value: 15 },
|
|
65
|
+
{ raw: 241, value: 30 },
|
|
66
|
+
];
|
|
67
|
+
const IC705_COMP = [
|
|
68
|
+
{ raw: 0, value: 0 },
|
|
69
|
+
{ raw: 11, value: 0 },
|
|
70
|
+
{ raw: 34, value: 3 },
|
|
71
|
+
{ raw: 58, value: 6 },
|
|
72
|
+
{ raw: 81, value: 9 },
|
|
73
|
+
{ raw: 104, value: 12 },
|
|
74
|
+
{ raw: 128, value: 15 },
|
|
75
|
+
{ raw: 151, value: 18 },
|
|
76
|
+
{ raw: 174, value: 21 },
|
|
77
|
+
{ raw: 197, value: 24 },
|
|
78
|
+
{ raw: 221, value: 27 },
|
|
79
|
+
{ raw: 244, value: 30 },
|
|
80
|
+
];
|
|
81
|
+
const DEFAULT_VOLTAGE = [
|
|
82
|
+
{ raw: 0, value: 0 },
|
|
83
|
+
{ raw: 13, value: 10 },
|
|
84
|
+
{ raw: 241, value: 16 },
|
|
85
|
+
];
|
|
86
|
+
const IC705_VOLTAGE = [
|
|
87
|
+
{ raw: 0, value: 0 },
|
|
88
|
+
{ raw: 241, value: 16 },
|
|
89
|
+
];
|
|
90
|
+
const DEFAULT_CURRENT = [
|
|
91
|
+
{ raw: 0, value: 0 },
|
|
92
|
+
{ raw: 97, value: 10 },
|
|
93
|
+
{ raw: 146, value: 15 },
|
|
94
|
+
{ raw: 241, value: 25 },
|
|
95
|
+
];
|
|
96
|
+
const IC705_CURRENT = [
|
|
97
|
+
{ raw: 0, value: 0 },
|
|
98
|
+
{ raw: 241, value: 4 },
|
|
99
|
+
];
|
|
100
|
+
function baseProfile(overrides) {
|
|
101
|
+
return {
|
|
102
|
+
supportsX25X26: true,
|
|
103
|
+
supportsX1C03TxFreq: true,
|
|
104
|
+
modeWithFilter: true,
|
|
105
|
+
dataModeSupported: true,
|
|
106
|
+
defaultFilter: 1,
|
|
107
|
+
frequencyBcdBytes: () => 5,
|
|
108
|
+
scopeLineLength: 475,
|
|
109
|
+
scopeSingleFrameDataLength: 50,
|
|
110
|
+
scopeEdgeSlots: [1, 2, 3, 4],
|
|
111
|
+
scopeRanges: HF_SCOPE_RANGES_13,
|
|
112
|
+
calibrations: {
|
|
113
|
+
sMeterModel: 'IC-705',
|
|
114
|
+
swr: DEFAULT_SWR,
|
|
115
|
+
alc: DEFAULT_ALC,
|
|
116
|
+
rfPowerWatts: IC7300_RF_POWER,
|
|
117
|
+
compDb: DEFAULT_COMP,
|
|
118
|
+
voltage: DEFAULT_VOLTAGE,
|
|
119
|
+
current: DEFAULT_CURRENT,
|
|
120
|
+
},
|
|
121
|
+
extParams: {},
|
|
122
|
+
vendorExtensions: {},
|
|
123
|
+
...overrides,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const ic705Ext = {
|
|
127
|
+
usbAfLevel: { command: 0x1a, subcmd: 0x05, subext: [0x01, 0x13], dataBytes: 2, dataType: 'level' },
|
|
128
|
+
afIfWlan: { command: 0x1a, subcmd: 0x05, subext: [0x01, 0x14], dataBytes: 1, dataType: 'bool' },
|
|
129
|
+
};
|
|
130
|
+
const ic705Vendor = {
|
|
131
|
+
connectorWlanLevel: { command: 0x1a, subcmd: 0x05, subext: [0x01, 0x17], dataBytes: 2, dataType: 'level' },
|
|
132
|
+
connectorDataMode: { command: 0x1a, subcmd: 0x05, subext: [0x01, 0x19] },
|
|
133
|
+
};
|
|
134
|
+
exports.ICOM_PROFILES = {
|
|
135
|
+
'generic-modern-icom': baseProfile({
|
|
136
|
+
modelId: 'generic-modern-icom',
|
|
137
|
+
profileName: 'Generic modern ICOM CI-V',
|
|
138
|
+
defaultCivAddress: 0xa4,
|
|
139
|
+
aliases: ['generic', 'icom'],
|
|
140
|
+
scopeRanges: HF_VHF_UHF_SCOPE_RANGES_17,
|
|
141
|
+
}),
|
|
142
|
+
'IC-705': baseProfile({
|
|
143
|
+
modelId: 'IC-705',
|
|
144
|
+
profileName: 'Icom IC-705',
|
|
145
|
+
defaultCivAddress: 0xa4,
|
|
146
|
+
aliases: ['IC-705', 'IC705'],
|
|
147
|
+
scopeRanges: HF_VHF_UHF_SCOPE_RANGES_17,
|
|
148
|
+
calibrations: {
|
|
149
|
+
sMeterModel: 'IC-705',
|
|
150
|
+
swr: DEFAULT_SWR,
|
|
151
|
+
alc: DEFAULT_ALC,
|
|
152
|
+
rfPowerWatts: IC705_RF_POWER,
|
|
153
|
+
compDb: IC705_COMP,
|
|
154
|
+
voltage: IC705_VOLTAGE,
|
|
155
|
+
current: IC705_CURRENT,
|
|
156
|
+
},
|
|
157
|
+
extParams: ic705Ext,
|
|
158
|
+
vendorExtensions: ic705Vendor,
|
|
159
|
+
}),
|
|
160
|
+
'IC-905': baseProfile({
|
|
161
|
+
modelId: 'IC-905',
|
|
162
|
+
profileName: 'Icom IC-905',
|
|
163
|
+
defaultCivAddress: 0xac,
|
|
164
|
+
aliases: ['IC-905', 'IC905'],
|
|
165
|
+
frequencyBcdBytes: (freqHz) => freqHz > 5.85e9 ? 6 : 5,
|
|
166
|
+
scopeRanges: HF_VHF_UHF_SCOPE_RANGES_17,
|
|
167
|
+
calibrations: {
|
|
168
|
+
sMeterModel: 'IC-705',
|
|
169
|
+
swr: DEFAULT_SWR,
|
|
170
|
+
alc: DEFAULT_ALC,
|
|
171
|
+
rfPowerWatts: IC705_RF_POWER,
|
|
172
|
+
compDb: DEFAULT_COMP,
|
|
173
|
+
voltage: DEFAULT_VOLTAGE,
|
|
174
|
+
current: DEFAULT_CURRENT,
|
|
175
|
+
},
|
|
176
|
+
extParams: ic705Ext,
|
|
177
|
+
vendorExtensions: ic705Vendor,
|
|
178
|
+
}),
|
|
179
|
+
'IC-7300': baseProfile({
|
|
180
|
+
modelId: 'IC-7300',
|
|
181
|
+
profileName: 'Icom IC-7300',
|
|
182
|
+
defaultCivAddress: 0x94,
|
|
183
|
+
aliases: ['IC-7300', 'IC7300'],
|
|
184
|
+
scopeRanges: HF_SCOPE_RANGES_13,
|
|
185
|
+
extParams: {
|
|
186
|
+
usbAfLevel: { command: 0x1a, subcmd: 0x05, subext: [0x00, 0x60], dataBytes: 2, dataType: 'level' },
|
|
187
|
+
},
|
|
188
|
+
}),
|
|
189
|
+
'IC-9700': baseProfile({
|
|
190
|
+
modelId: 'IC-9700',
|
|
191
|
+
profileName: 'Icom IC-9700',
|
|
192
|
+
defaultCivAddress: 0xa2,
|
|
193
|
+
aliases: ['IC-9700', 'IC9700'],
|
|
194
|
+
scopeRanges: IC9700_SCOPE_RANGES,
|
|
195
|
+
extParams: {
|
|
196
|
+
usbAfLevel: { command: 0x1a, subcmd: 0x05, subext: [0x01, 0x06], dataBytes: 2, dataType: 'level' },
|
|
197
|
+
},
|
|
198
|
+
}),
|
|
199
|
+
'IC-7610': baseProfile({
|
|
200
|
+
modelId: 'IC-7610',
|
|
201
|
+
profileName: 'Icom IC-7610',
|
|
202
|
+
defaultCivAddress: 0x98,
|
|
203
|
+
aliases: ['IC-7610', 'IC7610'],
|
|
204
|
+
scopeLineLength: 689,
|
|
205
|
+
scopeRanges: IC7610_SCOPE_RANGES,
|
|
206
|
+
extParams: {
|
|
207
|
+
usbAfLevel: { command: 0x1a, subcmd: 0x05, subext: [0x00, 0x82], dataBytes: 2, dataType: 'level' },
|
|
208
|
+
},
|
|
209
|
+
}),
|
|
210
|
+
'IC-7760': baseProfile({
|
|
211
|
+
modelId: 'IC-7760',
|
|
212
|
+
profileName: 'Icom IC-7760',
|
|
213
|
+
defaultCivAddress: 0xb2,
|
|
214
|
+
aliases: ['IC-7760', 'IC7760'],
|
|
215
|
+
scopeRanges: HF_SCOPE_RANGES_13,
|
|
216
|
+
}),
|
|
217
|
+
};
|
|
218
|
+
function interpolateCalibration(raw, points) {
|
|
219
|
+
if (points.length === 0)
|
|
220
|
+
return raw;
|
|
221
|
+
const sorted = [...points].sort((a, b) => a.raw - b.raw);
|
|
222
|
+
if (raw <= sorted[0].raw)
|
|
223
|
+
return sorted[0].value;
|
|
224
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
225
|
+
const left = sorted[i - 1];
|
|
226
|
+
const right = sorted[i];
|
|
227
|
+
if (raw <= right.raw) {
|
|
228
|
+
const ratio = (raw - left.raw) / (right.raw - left.raw);
|
|
229
|
+
return left.value + (right.value - left.value) * ratio;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return sorted[sorted.length - 1].value;
|
|
233
|
+
}
|
|
234
|
+
function getProfileByModel(model) {
|
|
235
|
+
if (model && model !== 'auto')
|
|
236
|
+
return exports.ICOM_PROFILES[model] ?? exports.ICOM_PROFILES['generic-modern-icom'];
|
|
237
|
+
return exports.ICOM_PROFILES['generic-modern-icom'];
|
|
238
|
+
}
|
|
239
|
+
function resolveIcomProfile(options) {
|
|
240
|
+
if (options.requestedModel && options.requestedModel !== 'auto') {
|
|
241
|
+
return getProfileByModel(options.requestedModel);
|
|
242
|
+
}
|
|
243
|
+
const normalizedName = options.rigName?.replace(/\s+/g, '').toUpperCase();
|
|
244
|
+
if (normalizedName) {
|
|
245
|
+
const byName = Object.values(exports.ICOM_PROFILES).find((profile) => profile.aliases.some((alias) => normalizedName.includes(alias.replace(/\s+/g, '').toUpperCase())));
|
|
246
|
+
if (byName)
|
|
247
|
+
return byName;
|
|
248
|
+
}
|
|
249
|
+
if (options.civAddress !== undefined) {
|
|
250
|
+
const byAddress = Object.values(exports.ICOM_PROFILES).find((profile) => profile.defaultCivAddress === (options.civAddress & 0xff));
|
|
251
|
+
if (byAddress)
|
|
252
|
+
return byAddress;
|
|
253
|
+
}
|
|
254
|
+
return exports.ICOM_PROFILES['generic-modern-icom'];
|
|
255
|
+
}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
export declare const IcomRigCommands: {
|
|
2
2
|
setPTT(ctrAddr: number, rigAddr: number, on: boolean): Buffer;
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
readPTT(ctrAddr: number, rigAddr: number): Buffer;
|
|
4
|
+
setMode(ctrAddr: number, rigAddr: number, mode: number, filter?: 1 | 2 | 3): Buffer;
|
|
5
|
+
setSelectedMode(ctrAddr: number, rigAddr: number, mode: number, dataMode?: boolean, filter?: 1 | 2 | 3, vfoNumber?: 0 | 1): Buffer;
|
|
6
|
+
setFrequency(ctrAddr: number, rigAddr: number, hz: number, bcdBytes?: number): Buffer;
|
|
7
|
+
setSelectedFrequency(ctrAddr: number, rigAddr: number, hz: number, bcdBytes?: number, vfoNumber?: 0 | 1): Buffer;
|
|
5
8
|
readOperatingFrequency(ctrAddr: number, rigAddr: number): Buffer;
|
|
9
|
+
readSelectedFrequency(ctrAddr: number, rigAddr: number, vfoNumber?: 0 | 1): Buffer;
|
|
6
10
|
readOperatingMode(ctrAddr: number, rigAddr: number): Buffer;
|
|
11
|
+
readSelectedMode(ctrAddr: number, rigAddr: number, vfoNumber?: 0 | 1): Buffer;
|
|
7
12
|
readTransmitFrequency(ctrAddr: number, rigAddr: number): Buffer;
|
|
8
13
|
readTransceiverState(ctrAddr: number, rigAddr: number): Buffer;
|
|
9
14
|
readBandEdges(ctrAddr: number, rigAddr: number): Buffer;
|
|
10
|
-
setOperationDataMode(ctrAddr: number, rigAddr: number, mode: number): Buffer;
|
|
15
|
+
setOperationDataMode(ctrAddr: number, rigAddr: number, mode: number, filter?: 1 | 2 | 3): Buffer;
|
|
11
16
|
getSWRState(ctrAddr: number, rigAddr: number): Buffer;
|
|
12
17
|
getALCState(ctrAddr: number, rigAddr: number): Buffer;
|
|
13
18
|
getLevelMeter(ctrAddr: number, rigAddr: number): Buffer;
|
|
14
|
-
getConnectorWLanLevel(ctrAddr: number, rigAddr: number): Buffer;
|
|
15
|
-
setConnectorWLanLevel(ctrAddr: number, rigAddr: number, level: number): Buffer;
|
|
16
|
-
setConnectorDataMode(ctrAddr: number, rigAddr: number, mode: number): Buffer;
|
|
19
|
+
getConnectorWLanLevel(ctrAddr: number, rigAddr: number, subext?: number[]): Buffer;
|
|
20
|
+
setConnectorWLanLevel(ctrAddr: number, rigAddr: number, level: number, subext?: number[]): Buffer;
|
|
21
|
+
setConnectorDataMode(ctrAddr: number, rigAddr: number, mode: number, subext?: number[]): Buffer;
|
|
22
|
+
getUsbAfLevel(ctrAddr: number, rigAddr: number, subext?: number[]): Buffer;
|
|
23
|
+
setUsbAfLevel(ctrAddr: number, rigAddr: number, level: number, subext?: number[]): Buffer;
|
|
17
24
|
getSquelchStatus(ctrAddr: number, rigAddr: number): Buffer;
|
|
18
25
|
getAudioSquelch(ctrAddr: number, rigAddr: number): Buffer;
|
|
19
26
|
getOvfStatus(ctrAddr: number, rigAddr: number): Buffer;
|
|
@@ -21,16 +28,7 @@ export declare const IcomRigCommands: {
|
|
|
21
28
|
getCompLevel(ctrAddr: number, rigAddr: number): Buffer;
|
|
22
29
|
getVoltage(ctrAddr: number, rigAddr: number): Buffer;
|
|
23
30
|
getCurrent(ctrAddr: number, rigAddr: number): Buffer;
|
|
24
|
-
/**
|
|
25
|
-
* Build a 0x14 level read query.
|
|
26
|
-
* Send this to request the current value; the radio responds with the same
|
|
27
|
-
* command byte + subcmd + 2-byte BCD data.
|
|
28
|
-
*/
|
|
29
31
|
get0x14Level(ctrAddr: number, rigAddr: number, subcmd: number): Buffer;
|
|
30
|
-
/**
|
|
31
|
-
* Build a 0x14 level write command.
|
|
32
|
-
* @param rawValue - Integer 0-255 (use intToTwoByteBcd to encode)
|
|
33
|
-
*/
|
|
34
32
|
set0x14Level(ctrAddr: number, rigAddr: number, subcmd: number, bcdHi: number, bcdLo: number): Buffer;
|
|
35
33
|
getTunerStatus(ctrAddr: number, rigAddr: number): Buffer;
|
|
36
34
|
setTunerEnabled(ctrAddr: number, rigAddr: number, on: boolean): Buffer;
|
|
@@ -1,136 +1,116 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Helpers to build CI-V frames for common operations (PTT, mode, frequency)
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.IcomRigCommands = void 0;
|
|
4
|
+
const IcomCivFrame_1 = require("./IcomCivFrame");
|
|
5
|
+
const IcomCivSpec_1 = require("./IcomCivSpec");
|
|
6
|
+
// Helpers to build standard CI-V frames for common rig operations.
|
|
5
7
|
exports.IcomRigCommands = {
|
|
6
|
-
// FE FE [rigAddr] [ctrAddr] 1C 00 [01|00] FD
|
|
7
8
|
setPTT(ctrAddr, rigAddr, on) {
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_PTT, payload: [on ? 0x01 : 0x00] });
|
|
10
|
+
},
|
|
11
|
+
readPTT(ctrAddr, rigAddr) {
|
|
12
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_PTT });
|
|
13
|
+
},
|
|
14
|
+
setMode(ctrAddr, rigAddr, mode, filter = IcomCivSpec_1.ICOM_MODE_FILTER_DEFAULT) {
|
|
15
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_SET_MODE, subcmd: mode & 0xff, payload: [filter & 0xff] });
|
|
16
|
+
},
|
|
17
|
+
setSelectedMode(ctrAddr, rigAddr, mode, dataMode = false, filter = IcomCivSpec_1.ICOM_MODE_FILTER_DEFAULT, vfoNumber = 0) {
|
|
18
|
+
return (0, IcomCivFrame_1.buildCivFrame)({
|
|
19
|
+
rigAddr,
|
|
20
|
+
ctrlAddr: ctrAddr,
|
|
21
|
+
cmd: IcomCivSpec_1.CIV.C_SEND_SEL_MODE,
|
|
22
|
+
subcmd: vfoNumber,
|
|
23
|
+
payload: [mode & 0xff, dataMode ? 0x01 : 0x00, filter & 0xff],
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
setFrequency(ctrAddr, rigAddr, hz, bcdBytes = 5) {
|
|
27
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_SET_FREQ, payload: (0, IcomCivFrame_1.encodeFrequencyBcdLE)(hz, bcdBytes) });
|
|
28
|
+
},
|
|
29
|
+
setSelectedFrequency(ctrAddr, rigAddr, hz, bcdBytes = 5, vfoNumber = 0) {
|
|
30
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_SEND_SEL_FREQ, subcmd: vfoNumber, payload: (0, IcomCivFrame_1.encodeFrequencyBcdLE)(hz, bcdBytes) });
|
|
24
31
|
},
|
|
25
32
|
readOperatingFrequency(ctrAddr, rigAddr) {
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_FREQ });
|
|
34
|
+
},
|
|
35
|
+
readSelectedFrequency(ctrAddr, rigAddr, vfoNumber = 0) {
|
|
36
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_SEND_SEL_FREQ, subcmd: vfoNumber });
|
|
28
37
|
},
|
|
29
38
|
readOperatingMode(ctrAddr, rigAddr) {
|
|
30
|
-
|
|
31
|
-
|
|
39
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_MODE });
|
|
40
|
+
},
|
|
41
|
+
readSelectedMode(ctrAddr, rigAddr, vfoNumber = 0) {
|
|
42
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_SEND_SEL_MODE, subcmd: vfoNumber });
|
|
32
43
|
},
|
|
33
44
|
readTransmitFrequency(ctrAddr, rigAddr) {
|
|
34
|
-
|
|
35
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1c, 0x03, 0xfd]);
|
|
45
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_RD_TX_FREQ });
|
|
36
46
|
},
|
|
37
47
|
readTransceiverState(ctrAddr, rigAddr) {
|
|
38
|
-
|
|
39
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x00, 0x48, 0xfd]);
|
|
48
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: [0x00, 0x48] });
|
|
40
49
|
},
|
|
41
50
|
readBandEdges(ctrAddr, rigAddr) {
|
|
42
|
-
|
|
43
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x02, 0xfd]);
|
|
51
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_BAND });
|
|
44
52
|
},
|
|
45
|
-
setOperationDataMode(ctrAddr, rigAddr, mode) {
|
|
46
|
-
|
|
47
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x26, 0x00, mode & 0xff, 0x01, 0x01, 0xfd]);
|
|
53
|
+
setOperationDataMode(ctrAddr, rigAddr, mode, filter = IcomCivSpec_1.ICOM_MODE_FILTER_DEFAULT) {
|
|
54
|
+
return exports.IcomRigCommands.setSelectedMode(ctrAddr, rigAddr, mode, true, filter, 0);
|
|
48
55
|
},
|
|
49
56
|
getSWRState(ctrAddr, rigAddr) {
|
|
50
|
-
|
|
51
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x12, 0xfd]);
|
|
57
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_SWR });
|
|
52
58
|
},
|
|
53
59
|
getALCState(ctrAddr, rigAddr) {
|
|
54
|
-
|
|
55
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x13, 0xfd]);
|
|
60
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_ALC });
|
|
56
61
|
},
|
|
57
62
|
getLevelMeter(ctrAddr, rigAddr) {
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_SML });
|
|
64
|
+
},
|
|
65
|
+
getConnectorWLanLevel(ctrAddr, rigAddr, subext = [0x01, 0x17]) {
|
|
66
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: IcomCivSpec_1.CIV.S_MEM_PARM, payload: subext });
|
|
60
67
|
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x05, 0x01, 0x17, 0xfd]);
|
|
68
|
+
setConnectorWLanLevel(ctrAddr, rigAddr, level, subext = [0x01, 0x17]) {
|
|
69
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: IcomCivSpec_1.CIV.S_MEM_PARM, payload: [...subext, ...(0, IcomCivFrame_1.encodeBcdBE)(level, 2)] });
|
|
64
70
|
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x05, 0x01, 0x17, (level >> 8) & 0xff, level & 0xff, 0xfd]);
|
|
71
|
+
setConnectorDataMode(ctrAddr, rigAddr, mode, subext = [0x01, 0x19]) {
|
|
72
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: IcomCivSpec_1.CIV.S_MEM_PARM, payload: [...subext, mode & 0xff] });
|
|
68
73
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
74
|
+
getUsbAfLevel(ctrAddr, rigAddr, subext = [0x01, 0x13]) {
|
|
75
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: IcomCivSpec_1.CIV.S_MEM_PARM, payload: subext });
|
|
76
|
+
},
|
|
77
|
+
setUsbAfLevel(ctrAddr, rigAddr, level, subext = [0x01, 0x13]) {
|
|
78
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_MEM, subcmd: IcomCivSpec_1.CIV.S_MEM_PARM, payload: [...subext, ...(0, IcomCivFrame_1.encodeBcdBE)(level, 2)] });
|
|
72
79
|
},
|
|
73
80
|
getSquelchStatus(ctrAddr, rigAddr) {
|
|
74
|
-
|
|
75
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x01, 0xfd]);
|
|
81
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_SQL });
|
|
76
82
|
},
|
|
77
83
|
getAudioSquelch(ctrAddr, rigAddr) {
|
|
78
|
-
|
|
79
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x05, 0xfd]);
|
|
84
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_CSQL });
|
|
80
85
|
},
|
|
81
86
|
getOvfStatus(ctrAddr, rigAddr) {
|
|
82
|
-
|
|
83
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x07, 0xfd]);
|
|
87
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_OVF });
|
|
84
88
|
},
|
|
85
89
|
getPowerLevel(ctrAddr, rigAddr) {
|
|
86
|
-
|
|
87
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x11, 0xfd]);
|
|
90
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_RFML });
|
|
88
91
|
},
|
|
89
92
|
getCompLevel(ctrAddr, rigAddr) {
|
|
90
|
-
|
|
91
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x14, 0xfd]);
|
|
93
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_CMP });
|
|
92
94
|
},
|
|
93
95
|
getVoltage(ctrAddr, rigAddr) {
|
|
94
|
-
|
|
95
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x15, 0xfd]);
|
|
96
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_VD });
|
|
96
97
|
},
|
|
97
98
|
getCurrent(ctrAddr, rigAddr) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
},
|
|
101
|
-
// =====================
|
|
102
|
-
// 0x14 Level Commands (read/write)
|
|
103
|
-
// =====================
|
|
104
|
-
/**
|
|
105
|
-
* Build a 0x14 level read query.
|
|
106
|
-
* Send this to request the current value; the radio responds with the same
|
|
107
|
-
* command byte + subcmd + 2-byte BCD data.
|
|
108
|
-
*/
|
|
99
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_RD_SQSM, subcmd: IcomCivSpec_1.CIV.S_ID });
|
|
100
|
+
},
|
|
109
101
|
get0x14Level(ctrAddr, rigAddr, subcmd) {
|
|
110
|
-
|
|
111
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x14, subcmd & 0xff, 0xfd]);
|
|
102
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_LVL, subcmd });
|
|
112
103
|
},
|
|
113
|
-
/**
|
|
114
|
-
* Build a 0x14 level write command.
|
|
115
|
-
* @param rawValue - Integer 0-255 (use intToTwoByteBcd to encode)
|
|
116
|
-
*/
|
|
117
104
|
set0x14Level(ctrAddr, rigAddr, subcmd, bcdHi, bcdLo) {
|
|
118
|
-
|
|
119
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x14, subcmd & 0xff, bcdHi & 0xff, bcdLo & 0xff, 0xfd]);
|
|
105
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_LVL, subcmd, payload: [bcdHi, bcdLo] });
|
|
120
106
|
},
|
|
121
|
-
// =====================
|
|
122
|
-
// Antenna Tuner (ATU)
|
|
123
|
-
// =====================
|
|
124
107
|
getTunerStatus(ctrAddr, rigAddr) {
|
|
125
|
-
|
|
126
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x00, 0xfd]);
|
|
108
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_ANT_TUN });
|
|
127
109
|
},
|
|
128
110
|
setTunerEnabled(ctrAddr, rigAddr, on) {
|
|
129
|
-
|
|
130
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x01, on ? 0x01 : 0x00, 0xfd]);
|
|
111
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_ANT_TUN, payload: [on ? 0x01 : 0x00] });
|
|
131
112
|
},
|
|
132
113
|
startManualTune(ctrAddr, rigAddr) {
|
|
133
|
-
|
|
134
|
-
return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x02, 0x00, 0xfd]);
|
|
114
|
+
return (0, IcomCivFrame_1.buildCivFrame)({ rigAddr, ctrlAddr: ctrAddr, cmd: IcomCivSpec_1.CIV.C_CTL_PTT, subcmd: IcomCivSpec_1.CIV.S_ANT_TUN, payload: [0x02] });
|
|
135
115
|
}
|
|
136
116
|
};
|
|
@@ -3,5 +3,12 @@ export declare const IcomScopeCommands: {
|
|
|
3
3
|
setScopeDisplay(ctrAddr: number, rigAddr: number, enabled: boolean): Buffer;
|
|
4
4
|
readScopeSpan(ctrAddr: number, rigAddr: number, receiver?: 0 | 1): Buffer;
|
|
5
5
|
setScopeSpan(ctrAddr: number, rigAddr: number, spanHz: number, receiver?: 0 | 1): Buffer;
|
|
6
|
+
readScopeMode(ctrAddr: number, rigAddr: number, receiver?: 0 | 1): Buffer;
|
|
7
|
+
setScopeMode(ctrAddr: number, rigAddr: number, mode: 0 | 1 | 2 | 3, receiver?: 0 | 1): Buffer;
|
|
8
|
+
readScopeEdge(ctrAddr: number, rigAddr: number, receiver?: 0 | 1): Buffer;
|
|
9
|
+
setScopeEdge(ctrAddr: number, rigAddr: number, edgeSlot: number, receiver?: 0 | 1): Buffer;
|
|
10
|
+
readScopeFixedEdge(ctrAddr: number, rigAddr: number, rangeId: number, edgeSlot: number): Buffer;
|
|
11
|
+
setScopeFixedEdge(ctrAddr: number, rigAddr: number, rangeId: number, edgeSlot: number, lowHz: number, highHz: number): Buffer;
|
|
6
12
|
encodeScopeSpanHz(spanHz: number): Buffer;
|
|
13
|
+
encodeScopeFreqHz(freqHz: number): Buffer;
|
|
7
14
|
};
|