icom-wlan-node 0.5.1 → 0.6.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.
@@ -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
- setMode(ctrAddr: number, rigAddr: number, mode: number): Buffer;
4
- setFrequency(ctrAddr: number, rigAddr: number, hz: number): Buffer;
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 Buffer.from([
9
- 0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1c, 0x00, on ? 0x01 : 0x00, 0xfd
10
- ]);
11
- },
12
- setMode(ctrAddr, rigAddr, mode) {
13
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x06, mode & 0xff, 0x01, 0xfd]);
14
- },
15
- setFrequency(ctrAddr, rigAddr, hz) {
16
- // 05: BCD format, little-endian nibbles per Java logic
17
- const bcd = (n) => (((n / 10) | 0) << 4) + (n % 10);
18
- const d0 = bcd(Math.floor(hz % 100));
19
- const d1 = bcd(Math.floor((hz % 10000) / 100));
20
- const d2 = bcd(Math.floor((hz % 1000000) / 10000));
21
- const d3 = bcd(Math.floor((hz % 100000000) / 1000000));
22
- const d4 = bcd(Math.floor(hz / 100000000)); // Fixed: was /1000000000
23
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x05, d0, d1, d2, d3, d4, 0xfd]);
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
- // FE FE [rigAddr] [ctrAddr] 0x03 FD
27
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x03, 0xfd]);
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
- // FE FE [rig] [ctr] 0x04 FD
31
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x04, 0xfd]);
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
- // FE FE [rig] [ctr] 0x1C 0x03 FD
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
- // FE FE [rig] [ctr] 0x1A 0x00 0x48 FD (not recommended by Java, but available)
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
- // FE FE [rig] [ctr] 0x02 FD
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
- // FE FE [rig] [ctr] 0x26 0x00 [mode] 0x01 0x01 FD
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
- // FE FE [rig] [ctr] 0x15 0x12 FD
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
- // FE FE [rig] [ctr] 0x15 0x13 FD
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
- // FE FE [rig] [ctr] 0x15 0x02 FD
59
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x02, 0xfd]);
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
- getConnectorWLanLevel(ctrAddr, rigAddr) {
62
- // FE FE [rig] [ctr] 0x1A 0x05 0x01 0x17 FD
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
- setConnectorWLanLevel(ctrAddr, rigAddr, level) {
66
- // FE FE [rig] [ctr] 0x1A 0x05 0x01 0x17 [level_hi] [level_lo] FD
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
- setConnectorDataMode(ctrAddr, rigAddr, mode) {
70
- // FE FE [rig] [ctr] 0x1A 0x05 0x01 0x19 [mode] FD
71
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x1a, 0x05, 0x01, 0x19, mode & 0xff, 0xfd]);
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
- // FE FE [rig] [ctr] 0x15 0x01 FD
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
- // FE FE [rig] [ctr] 0x15 0x05 FD
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
- // FE FE [rig] [ctr] 0x15 0x07 FD
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
- // FE FE [rig] [ctr] 0x15 0x11 FD
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
- // FE FE [rig] [ctr] 0x15 0x14 FD
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
- // FE FE [rig] [ctr] 0x15 0x15 FD
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
- // FE FE [rig] [ctr] 0x15 0x16 FD
99
- return Buffer.from([0xfe, 0xfe, rigAddr & 0xff, ctrAddr & 0xff, 0x15, 0x16, 0xfd]);
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
- // FE FE [rig] [ctr] 0x14 [subcmd] FD
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
- // FE FE [rig] [ctr] 0x14 [subcmd] [bcd_hi] [bcd_lo] FD
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
- // FE FE [rig] [ctr] 0x1A 0x00 FD
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
- // FE FE [rig] [ctr] 0x1A 0x01 [00|01] FD
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
- // FE FE [rig] [ctr] 0x1A 0x02 0x00 FD
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
  };