hamlib 0.1.4 → 0.1.5
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 +103 -0
- package/index.d.ts +125 -1
- package/lib/index.js +97 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/hamlib.node +0 -0
- package/prebuilds/linux-arm64/hamlib.node +0 -0
- package/prebuilds/linux-x64/hamlib.node +0 -0
- package/src/hamlib.cpp +266 -0
- package/src/hamlib.h +9 -0
package/Readme.md
CHANGED
|
@@ -284,6 +284,109 @@ rig.setAntenna(2); // Select antenna 2
|
|
|
284
284
|
const antenna = rig.getAntenna();
|
|
285
285
|
```
|
|
286
286
|
|
|
287
|
+
### ⚙️ Serial Port Configuration
|
|
288
|
+
|
|
289
|
+
#### `getSupportedSerialConfigs()`
|
|
290
|
+
Get available serial configuration options
|
|
291
|
+
```javascript
|
|
292
|
+
const configs = rig.getSupportedSerialConfigs();
|
|
293
|
+
console.log('Data bits:', configs.serial.data_bits); // ['5', '6', '7', '8']
|
|
294
|
+
console.log('Stop bits:', configs.serial.stop_bits); // ['1', '2']
|
|
295
|
+
console.log('Parity:', configs.serial.serial_parity); // ['None', 'Even', 'Odd']
|
|
296
|
+
console.log('Handshake:', configs.serial.serial_handshake); // ['None', 'Hardware', 'Software']
|
|
297
|
+
console.log('PTT types:', configs.ptt_type); // ['RIG', 'DTR', 'RTS', 'PARALLEL', ...]
|
|
298
|
+
console.log('DCD types:', configs.dcd_type); // ['RIG', 'DSR', 'CTS', 'CD', ...]
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
#### `setSerialConfig(param, value)` / `getSerialConfig(param)`
|
|
302
|
+
Configure serial port parameters
|
|
303
|
+
```javascript
|
|
304
|
+
// Basic serial configuration (most common)
|
|
305
|
+
rig.setSerialConfig('data_bits', '8'); // 8 data bits
|
|
306
|
+
rig.setSerialConfig('stop_bits', '1'); // 1 stop bit
|
|
307
|
+
rig.setSerialConfig('serial_parity', 'None'); // No parity
|
|
308
|
+
rig.setSerialConfig('serial_handshake', 'None'); // No flow control
|
|
309
|
+
|
|
310
|
+
// Hardware flow control (if supported)
|
|
311
|
+
rig.setSerialConfig('serial_handshake', 'Hardware');
|
|
312
|
+
|
|
313
|
+
// Control line states
|
|
314
|
+
rig.setSerialConfig('rts_state', 'ON'); // Set RTS high
|
|
315
|
+
rig.setSerialConfig('dtr_state', 'OFF'); // Set DTR low
|
|
316
|
+
|
|
317
|
+
// Get current configuration
|
|
318
|
+
const dataBits = rig.getSerialConfig('data_bits');
|
|
319
|
+
const parity = rig.getSerialConfig('serial_parity');
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
#### `setPttType(type)` / `getPttType()`
|
|
323
|
+
Configure PTT (Push-to-Talk) method
|
|
324
|
+
```javascript
|
|
325
|
+
// Use CAT command for PTT (recommended)
|
|
326
|
+
rig.setPttType('RIG');
|
|
327
|
+
|
|
328
|
+
// Use DTR line for PTT (legacy interfaces)
|
|
329
|
+
rig.setPttType('DTR');
|
|
330
|
+
|
|
331
|
+
// Use RTS line for PTT (alternative)
|
|
332
|
+
rig.setPttType('RTS');
|
|
333
|
+
|
|
334
|
+
// Disable PTT control
|
|
335
|
+
rig.setPttType('NONE');
|
|
336
|
+
|
|
337
|
+
// Get current PTT type
|
|
338
|
+
const pttType = rig.getPttType();
|
|
339
|
+
console.log('PTT method:', pttType);
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
#### `setDcdType(type)` / `getDcdType()`
|
|
343
|
+
Configure DCD (Data Carrier Detect) method
|
|
344
|
+
```javascript
|
|
345
|
+
// Use CAT command for DCD (software squelch)
|
|
346
|
+
rig.setDcdType('RIG');
|
|
347
|
+
|
|
348
|
+
// Use DSR line for DCD (hardware squelch)
|
|
349
|
+
rig.setDcdType('DSR');
|
|
350
|
+
|
|
351
|
+
// Use CTS line for DCD (alternative)
|
|
352
|
+
rig.setDcdType('CTS');
|
|
353
|
+
|
|
354
|
+
// Get current DCD type
|
|
355
|
+
const dcdType = rig.getDcdType();
|
|
356
|
+
console.log('DCD method:', dcdType);
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
#### Common Serial Configurations
|
|
360
|
+
|
|
361
|
+
**Yaesu Radios:**
|
|
362
|
+
```javascript
|
|
363
|
+
rig.setSerialConfig('data_bits', '8');
|
|
364
|
+
rig.setSerialConfig('stop_bits', '1');
|
|
365
|
+
rig.setSerialConfig('serial_parity', 'None');
|
|
366
|
+
rig.setSerialConfig('serial_handshake', 'None');
|
|
367
|
+
rig.setPttType('RIG'); // Use CAT command
|
|
368
|
+
// Baud rate: 4800/9600 (set in constructor)
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Kenwood Radios:**
|
|
372
|
+
```javascript
|
|
373
|
+
rig.setSerialConfig('data_bits', '8');
|
|
374
|
+
rig.setSerialConfig('stop_bits', '2'); // Note: 2 stop bits
|
|
375
|
+
rig.setSerialConfig('serial_parity', 'None');
|
|
376
|
+
rig.setSerialConfig('serial_handshake', 'None');
|
|
377
|
+
rig.setPttType('RIG');
|
|
378
|
+
// Baud rate: 9600
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Legacy Interface (DTR/RTS PTT):**
|
|
382
|
+
```javascript
|
|
383
|
+
rig.setSerialConfig('data_bits', '8');
|
|
384
|
+
rig.setSerialConfig('stop_bits', '1');
|
|
385
|
+
rig.setSerialConfig('serial_parity', 'None');
|
|
386
|
+
rig.setPttType('DTR'); // Use DTR for PTT
|
|
387
|
+
rig.setDcdType('DSR'); // Use DSR for squelch
|
|
388
|
+
```
|
|
389
|
+
|
|
287
390
|
## 🎯 Complete Example
|
|
288
391
|
|
|
289
392
|
```javascript
|
package/index.d.ts
CHANGED
|
@@ -142,6 +142,47 @@ type VfoOperationType = 'CPY' | 'XCHG' | 'FROM_VFO' | 'TO_VFO' | 'MCL' | 'UP' |
|
|
|
142
142
|
'DOWN' | 'BAND_UP' | 'BAND_DOWN' | 'LEFT' | 'RIGHT' |
|
|
143
143
|
'TUNE' | 'TOGGLE';
|
|
144
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Serial configuration parameter names
|
|
147
|
+
*/
|
|
148
|
+
type SerialConfigParam = 'data_bits' | 'stop_bits' | 'serial_parity' | 'serial_handshake' |
|
|
149
|
+
'rts_state' | 'dtr_state';
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* PTT (Push-to-Talk) types
|
|
153
|
+
*/
|
|
154
|
+
type PttType = 'RIG' | 'DTR' | 'RTS' | 'PARALLEL' | 'CM108' | 'GPIO' | 'GPION' | 'NONE';
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* DCD (Data Carrier Detect) types
|
|
158
|
+
*/
|
|
159
|
+
type DcdType = 'RIG' | 'DSR' | 'CTS' | 'CD' | 'PARALLEL' | 'CM108' | 'GPIO' | 'GPION' | 'NONE';
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Serial configuration options interface
|
|
163
|
+
*/
|
|
164
|
+
interface SerialConfigOptions {
|
|
165
|
+
/** Serial port basic parameters */
|
|
166
|
+
serial: {
|
|
167
|
+
/** Data bits options */
|
|
168
|
+
data_bits: string[];
|
|
169
|
+
/** Stop bits options */
|
|
170
|
+
stop_bits: string[];
|
|
171
|
+
/** Parity options */
|
|
172
|
+
serial_parity: string[];
|
|
173
|
+
/** Handshake options */
|
|
174
|
+
serial_handshake: string[];
|
|
175
|
+
/** RTS state options */
|
|
176
|
+
rts_state: string[];
|
|
177
|
+
/** DTR state options */
|
|
178
|
+
dtr_state: string[];
|
|
179
|
+
};
|
|
180
|
+
/** PTT type options */
|
|
181
|
+
ptt_type: string[];
|
|
182
|
+
/** DCD type options */
|
|
183
|
+
dcd_type: string[];
|
|
184
|
+
}
|
|
185
|
+
|
|
145
186
|
/**
|
|
146
187
|
* HamLib class - for controlling amateur radio devices
|
|
147
188
|
*/
|
|
@@ -444,6 +485,89 @@ declare class HamLib {
|
|
|
444
485
|
* @returns Current antenna number
|
|
445
486
|
*/
|
|
446
487
|
getAntenna(): number;
|
|
488
|
+
|
|
489
|
+
// Serial Port Configuration
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Set serial port configuration parameter
|
|
493
|
+
* @param paramName Parameter name ('data_bits', 'stop_bits', 'serial_parity', 'serial_handshake', 'rts_state', 'dtr_state')
|
|
494
|
+
* @param paramValue Parameter value
|
|
495
|
+
* @example
|
|
496
|
+
* // Set data bits to 8
|
|
497
|
+
* hamlib.setSerialConfig('data_bits', '8');
|
|
498
|
+
*
|
|
499
|
+
* // Set parity to even
|
|
500
|
+
* hamlib.setSerialConfig('serial_parity', 'Even');
|
|
501
|
+
*
|
|
502
|
+
* // Set handshake to hardware
|
|
503
|
+
* hamlib.setSerialConfig('serial_handshake', 'Hardware');
|
|
504
|
+
*/
|
|
505
|
+
setSerialConfig(paramName: SerialConfigParam, paramValue: string): void;
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Get serial port configuration parameter
|
|
509
|
+
* @param paramName Parameter name to retrieve
|
|
510
|
+
* @returns Parameter value
|
|
511
|
+
* @example
|
|
512
|
+
* // Get current data bits setting
|
|
513
|
+
* const dataBits = hamlib.getSerialConfig('data_bits');
|
|
514
|
+
*
|
|
515
|
+
* // Get current parity setting
|
|
516
|
+
* const parity = hamlib.getSerialConfig('serial_parity');
|
|
517
|
+
*/
|
|
518
|
+
getSerialConfig(paramName: SerialConfigParam): string;
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Set PTT (Push-to-Talk) type
|
|
522
|
+
* @param pttType PTT type ('RIG', 'DTR', 'RTS', 'PARALLEL', 'CM108', 'GPIO', 'GPION', 'NONE')
|
|
523
|
+
* @example
|
|
524
|
+
* // Use DTR line for PTT
|
|
525
|
+
* hamlib.setPttType('DTR');
|
|
526
|
+
*
|
|
527
|
+
* // Use RTS line for PTT
|
|
528
|
+
* hamlib.setPttType('RTS');
|
|
529
|
+
*
|
|
530
|
+
* // Use CAT command for PTT
|
|
531
|
+
* hamlib.setPttType('RIG');
|
|
532
|
+
*/
|
|
533
|
+
setPttType(pttType: PttType): void;
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Get current PTT type
|
|
537
|
+
* @returns Current PTT type
|
|
538
|
+
*/
|
|
539
|
+
getPttType(): string;
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Set DCD (Data Carrier Detect) type
|
|
543
|
+
* @param dcdType DCD type ('RIG', 'DSR', 'CTS', 'CD', 'PARALLEL', 'CM108', 'GPIO', 'GPION', 'NONE')
|
|
544
|
+
* @example
|
|
545
|
+
* // Use DSR line for DCD
|
|
546
|
+
* hamlib.setDcdType('DSR');
|
|
547
|
+
*
|
|
548
|
+
* // Use CTS line for DCD
|
|
549
|
+
* hamlib.setDcdType('CTS');
|
|
550
|
+
*
|
|
551
|
+
* // Use CAT command for DCD
|
|
552
|
+
* hamlib.setDcdType('RIG');
|
|
553
|
+
*/
|
|
554
|
+
setDcdType(dcdType: DcdType): void;
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Get current DCD type
|
|
558
|
+
* @returns Current DCD type
|
|
559
|
+
*/
|
|
560
|
+
getDcdType(): string;
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Get supported serial configuration options
|
|
564
|
+
* @returns Object containing all supported configuration parameters and their possible values
|
|
565
|
+
* @example
|
|
566
|
+
* const configs = hamlib.getSupportedSerialConfigs();
|
|
567
|
+
* console.log('Supported data bits:', configs.serial.data_bits);
|
|
568
|
+
* console.log('Supported PTT types:', configs.ptt_type);
|
|
569
|
+
*/
|
|
570
|
+
getSupportedSerialConfigs(): SerialConfigOptions;
|
|
447
571
|
}
|
|
448
572
|
|
|
449
573
|
/**
|
|
@@ -456,7 +580,7 @@ declare const nodeHamlib: {
|
|
|
456
580
|
// Export types for use elsewhere
|
|
457
581
|
export { ConnectionInfo, ModeInfo, SupportedRigInfo, VFO, RadioMode, MemoryChannelData,
|
|
458
582
|
MemoryChannelInfo, SplitModeInfo, SplitStatusInfo, LevelType, FunctionType,
|
|
459
|
-
ScanType, VfoOperationType, HamLib };
|
|
583
|
+
ScanType, VfoOperationType, SerialConfigParam, PttType, DcdType, SerialConfigOptions, HamLib };
|
|
460
584
|
|
|
461
585
|
// Support both CommonJS and ES module exports
|
|
462
586
|
export = nodeHamlib;
|
package/lib/index.js
CHANGED
|
@@ -367,6 +367,103 @@ class HamLib {
|
|
|
367
367
|
getAntenna() {
|
|
368
368
|
return this._nativeInstance.getAntenna();
|
|
369
369
|
}
|
|
370
|
+
|
|
371
|
+
// Serial Port Configuration
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Set serial port configuration parameter
|
|
375
|
+
* @param {string} paramName - Parameter name ('data_bits', 'stop_bits', 'serial_parity', 'serial_handshake', 'rts_state', 'dtr_state')
|
|
376
|
+
* @param {string} paramValue - Parameter value
|
|
377
|
+
* @example
|
|
378
|
+
* // Set data bits to 8
|
|
379
|
+
* hamlib.setSerialConfig('data_bits', '8');
|
|
380
|
+
*
|
|
381
|
+
* // Set parity to even
|
|
382
|
+
* hamlib.setSerialConfig('serial_parity', 'Even');
|
|
383
|
+
*
|
|
384
|
+
* // Set handshake to hardware
|
|
385
|
+
* hamlib.setSerialConfig('serial_handshake', 'Hardware');
|
|
386
|
+
*/
|
|
387
|
+
setSerialConfig(paramName, paramValue) {
|
|
388
|
+
return this._nativeInstance.setSerialConfig(paramName, paramValue);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Get serial port configuration parameter
|
|
393
|
+
* @param {string} paramName - Parameter name to retrieve
|
|
394
|
+
* @returns {string} Parameter value
|
|
395
|
+
* @example
|
|
396
|
+
* // Get current data bits setting
|
|
397
|
+
* const dataBits = hamlib.getSerialConfig('data_bits');
|
|
398
|
+
*
|
|
399
|
+
* // Get current parity setting
|
|
400
|
+
* const parity = hamlib.getSerialConfig('serial_parity');
|
|
401
|
+
*/
|
|
402
|
+
getSerialConfig(paramName) {
|
|
403
|
+
return this._nativeInstance.getSerialConfig(paramName);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Set PTT (Push-to-Talk) type
|
|
408
|
+
* @param {string} pttType - PTT type ('RIG', 'DTR', 'RTS', 'PARALLEL', 'CM108', 'GPIO', 'GPION', 'NONE')
|
|
409
|
+
* @example
|
|
410
|
+
* // Use DTR line for PTT
|
|
411
|
+
* hamlib.setPttType('DTR');
|
|
412
|
+
*
|
|
413
|
+
* // Use RTS line for PTT
|
|
414
|
+
* hamlib.setPttType('RTS');
|
|
415
|
+
*
|
|
416
|
+
* // Use CAT command for PTT
|
|
417
|
+
* hamlib.setPttType('RIG');
|
|
418
|
+
*/
|
|
419
|
+
setPttType(pttType) {
|
|
420
|
+
return this._nativeInstance.setPttType(pttType);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Get current PTT type
|
|
425
|
+
* @returns {string} Current PTT type
|
|
426
|
+
*/
|
|
427
|
+
getPttType() {
|
|
428
|
+
return this._nativeInstance.getPttType();
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Set DCD (Data Carrier Detect) type
|
|
433
|
+
* @param {string} dcdType - DCD type ('RIG', 'DSR', 'CTS', 'CD', 'PARALLEL', 'CM108', 'GPIO', 'GPION', 'NONE')
|
|
434
|
+
* @example
|
|
435
|
+
* // Use DSR line for DCD
|
|
436
|
+
* hamlib.setDcdType('DSR');
|
|
437
|
+
*
|
|
438
|
+
* // Use CTS line for DCD
|
|
439
|
+
* hamlib.setDcdType('CTS');
|
|
440
|
+
*
|
|
441
|
+
* // Use CAT command for DCD
|
|
442
|
+
* hamlib.setDcdType('RIG');
|
|
443
|
+
*/
|
|
444
|
+
setDcdType(dcdType) {
|
|
445
|
+
return this._nativeInstance.setDcdType(dcdType);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Get current DCD type
|
|
450
|
+
* @returns {string} Current DCD type
|
|
451
|
+
*/
|
|
452
|
+
getDcdType() {
|
|
453
|
+
return this._nativeInstance.getDcdType();
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Get supported serial configuration options
|
|
458
|
+
* @returns {Object} Object containing all supported configuration parameters and their possible values
|
|
459
|
+
* @example
|
|
460
|
+
* const configs = hamlib.getSupportedSerialConfigs();
|
|
461
|
+
* console.log('Supported data bits:', configs.serial.data_bits);
|
|
462
|
+
* console.log('Supported PTT types:', configs.ptt_type);
|
|
463
|
+
*/
|
|
464
|
+
getSupportedSerialConfigs() {
|
|
465
|
+
return this._nativeInstance.getSupportedSerialConfigs();
|
|
466
|
+
}
|
|
370
467
|
}
|
|
371
468
|
|
|
372
469
|
// Export for CommonJS
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/src/hamlib.cpp
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
#include <string>
|
|
3
3
|
#include <vector>
|
|
4
4
|
|
|
5
|
+
// Cross-platform compatibility for hamlib token types
|
|
6
|
+
// Linux versions use token_t, some others use hamlib_token_t
|
|
7
|
+
#ifndef HAMLIB_TOKEN_T
|
|
8
|
+
#ifdef __linux__
|
|
9
|
+
#define HAMLIB_TOKEN_T token_t
|
|
10
|
+
#else
|
|
11
|
+
#define HAMLIB_TOKEN_T hamlib_token_t
|
|
12
|
+
#endif
|
|
13
|
+
#endif
|
|
14
|
+
|
|
5
15
|
// Structure to hold rig information for the callback
|
|
6
16
|
struct RigListData {
|
|
7
17
|
std::vector<Napi::Object> rigList;
|
|
@@ -1485,6 +1495,15 @@ Napi::Function NodeHamLib::GetClass(Napi::Env env) {
|
|
|
1485
1495
|
// Antenna Selection
|
|
1486
1496
|
NodeHamLib::InstanceMethod("setAntenna", & NodeHamLib::SetAntenna),
|
|
1487
1497
|
NodeHamLib::InstanceMethod("getAntenna", & NodeHamLib::GetAntenna),
|
|
1498
|
+
|
|
1499
|
+
// Serial Port Configuration
|
|
1500
|
+
NodeHamLib::InstanceMethod("setSerialConfig", & NodeHamLib::SetSerialConfig),
|
|
1501
|
+
NodeHamLib::InstanceMethod("getSerialConfig", & NodeHamLib::GetSerialConfig),
|
|
1502
|
+
NodeHamLib::InstanceMethod("setPttType", & NodeHamLib::SetPttType),
|
|
1503
|
+
NodeHamLib::InstanceMethod("getPttType", & NodeHamLib::GetPttType),
|
|
1504
|
+
NodeHamLib::InstanceMethod("setDcdType", & NodeHamLib::SetDcdType),
|
|
1505
|
+
NodeHamLib::InstanceMethod("getDcdType", & NodeHamLib::GetDcdType),
|
|
1506
|
+
NodeHamLib::InstanceMethod("getSupportedSerialConfigs", & NodeHamLib::GetSupportedSerialConfigs),
|
|
1488
1507
|
|
|
1489
1508
|
NodeHamLib::InstanceMethod("close", & NodeHamLib::Close),
|
|
1490
1509
|
NodeHamLib::InstanceMethod("destroy", & NodeHamLib::Destroy),
|
|
@@ -1601,3 +1620,250 @@ Napi::Value NodeHamLib::GetSupportedRigs(const Napi::CallbackInfo& info) {
|
|
|
1601
1620
|
return rigArray;
|
|
1602
1621
|
}
|
|
1603
1622
|
|
|
1623
|
+
// Serial Port Configuration Methods
|
|
1624
|
+
|
|
1625
|
+
// Set serial configuration parameter (data_bits, stop_bits, parity, handshake, etc.)
|
|
1626
|
+
Napi::Value NodeHamLib::SetSerialConfig(const Napi::CallbackInfo& info) {
|
|
1627
|
+
Napi::Env env = info.Env();
|
|
1628
|
+
|
|
1629
|
+
if (!rig_is_open) {
|
|
1630
|
+
Napi::TypeError::New(env, "Rig is not open!").ThrowAsJavaScriptException();
|
|
1631
|
+
return env.Null();
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
if (info.Length() < 2 || !info[0].IsString() || !info[1].IsString()) {
|
|
1635
|
+
Napi::TypeError::New(env, "Expected parameter name and value as strings").ThrowAsJavaScriptException();
|
|
1636
|
+
return env.Null();
|
|
1637
|
+
}
|
|
1638
|
+
|
|
1639
|
+
std::string paramName = info[0].As<Napi::String>().Utf8Value();
|
|
1640
|
+
std::string paramValue = info[1].As<Napi::String>().Utf8Value();
|
|
1641
|
+
|
|
1642
|
+
// Get configuration token from parameter name
|
|
1643
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, paramName.c_str());
|
|
1644
|
+
if (token == RIG_CONF_END) {
|
|
1645
|
+
Napi::Error::New(env, "Unknown configuration parameter").ThrowAsJavaScriptException();
|
|
1646
|
+
return env.Null();
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
// Use rig_set_conf to set configuration parameter
|
|
1650
|
+
int retcode = rig_set_conf(my_rig, token, paramValue.c_str());
|
|
1651
|
+
if (retcode != RIG_OK) {
|
|
1652
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1653
|
+
return env.Null();
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
return Napi::Number::New(env, retcode);
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1659
|
+
// Get serial configuration parameter
|
|
1660
|
+
Napi::Value NodeHamLib::GetSerialConfig(const Napi::CallbackInfo& info) {
|
|
1661
|
+
Napi::Env env = info.Env();
|
|
1662
|
+
|
|
1663
|
+
if (!rig_is_open) {
|
|
1664
|
+
Napi::TypeError::New(env, "Rig is not open!").ThrowAsJavaScriptException();
|
|
1665
|
+
return env.Null();
|
|
1666
|
+
}
|
|
1667
|
+
|
|
1668
|
+
if (info.Length() < 1 || !info[0].IsString()) {
|
|
1669
|
+
Napi::TypeError::New(env, "Expected parameter name as string").ThrowAsJavaScriptException();
|
|
1670
|
+
return env.Null();
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
std::string paramName = info[0].As<Napi::String>().Utf8Value();
|
|
1674
|
+
char value[256];
|
|
1675
|
+
|
|
1676
|
+
// Get configuration token from parameter name
|
|
1677
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, paramName.c_str());
|
|
1678
|
+
if (token == RIG_CONF_END) {
|
|
1679
|
+
Napi::Error::New(env, "Unknown configuration parameter").ThrowAsJavaScriptException();
|
|
1680
|
+
return env.Null();
|
|
1681
|
+
}
|
|
1682
|
+
|
|
1683
|
+
// Use rig_get_conf to get configuration parameter
|
|
1684
|
+
int retcode = rig_get_conf(my_rig, token, value);
|
|
1685
|
+
if (retcode != RIG_OK) {
|
|
1686
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1687
|
+
return env.Null();
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
return Napi::String::New(env, value);
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
// Set PTT type
|
|
1694
|
+
Napi::Value NodeHamLib::SetPttType(const Napi::CallbackInfo& info) {
|
|
1695
|
+
Napi::Env env = info.Env();
|
|
1696
|
+
|
|
1697
|
+
if (info.Length() < 1 || !info[0].IsString()) {
|
|
1698
|
+
Napi::TypeError::New(env, "Expected PTT type as string").ThrowAsJavaScriptException();
|
|
1699
|
+
return env.Null();
|
|
1700
|
+
}
|
|
1701
|
+
|
|
1702
|
+
std::string pttTypeStr = info[0].As<Napi::String>().Utf8Value();
|
|
1703
|
+
|
|
1704
|
+
// Get configuration token for ptt_type
|
|
1705
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, "ptt_type");
|
|
1706
|
+
if (token == RIG_CONF_END) {
|
|
1707
|
+
Napi::Error::New(env, "PTT type configuration not supported").ThrowAsJavaScriptException();
|
|
1708
|
+
return env.Null();
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1711
|
+
// Set PTT type through configuration
|
|
1712
|
+
int retcode = rig_set_conf(my_rig, token, pttTypeStr.c_str());
|
|
1713
|
+
if (retcode != RIG_OK) {
|
|
1714
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1715
|
+
return env.Null();
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
return Napi::Number::New(env, retcode);
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
// Get PTT type
|
|
1722
|
+
Napi::Value NodeHamLib::GetPttType(const Napi::CallbackInfo& info) {
|
|
1723
|
+
Napi::Env env = info.Env();
|
|
1724
|
+
|
|
1725
|
+
char value[256];
|
|
1726
|
+
|
|
1727
|
+
// Get configuration token for ptt_type
|
|
1728
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, "ptt_type");
|
|
1729
|
+
if (token == RIG_CONF_END) {
|
|
1730
|
+
Napi::Error::New(env, "PTT type configuration not supported").ThrowAsJavaScriptException();
|
|
1731
|
+
return env.Null();
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
// Get PTT type through configuration
|
|
1735
|
+
int retcode = rig_get_conf(my_rig, token, value);
|
|
1736
|
+
if (retcode != RIG_OK) {
|
|
1737
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1738
|
+
return env.Null();
|
|
1739
|
+
}
|
|
1740
|
+
|
|
1741
|
+
return Napi::String::New(env, value);
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1744
|
+
// Set DCD type
|
|
1745
|
+
Napi::Value NodeHamLib::SetDcdType(const Napi::CallbackInfo& info) {
|
|
1746
|
+
Napi::Env env = info.Env();
|
|
1747
|
+
|
|
1748
|
+
if (info.Length() < 1 || !info[0].IsString()) {
|
|
1749
|
+
Napi::TypeError::New(env, "Expected DCD type as string").ThrowAsJavaScriptException();
|
|
1750
|
+
return env.Null();
|
|
1751
|
+
}
|
|
1752
|
+
|
|
1753
|
+
std::string dcdTypeStr = info[0].As<Napi::String>().Utf8Value();
|
|
1754
|
+
|
|
1755
|
+
// Get configuration token for dcd_type
|
|
1756
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, "dcd_type");
|
|
1757
|
+
if (token == RIG_CONF_END) {
|
|
1758
|
+
Napi::Error::New(env, "DCD type configuration not supported").ThrowAsJavaScriptException();
|
|
1759
|
+
return env.Null();
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
// Set DCD type through configuration
|
|
1763
|
+
int retcode = rig_set_conf(my_rig, token, dcdTypeStr.c_str());
|
|
1764
|
+
if (retcode != RIG_OK) {
|
|
1765
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1766
|
+
return env.Null();
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
return Napi::Number::New(env, retcode);
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
// Get DCD type
|
|
1773
|
+
Napi::Value NodeHamLib::GetDcdType(const Napi::CallbackInfo& info) {
|
|
1774
|
+
Napi::Env env = info.Env();
|
|
1775
|
+
|
|
1776
|
+
char value[256];
|
|
1777
|
+
|
|
1778
|
+
// Get configuration token for dcd_type
|
|
1779
|
+
HAMLIB_TOKEN_T token = rig_token_lookup(my_rig, "dcd_type");
|
|
1780
|
+
if (token == RIG_CONF_END) {
|
|
1781
|
+
Napi::Error::New(env, "DCD type configuration not supported").ThrowAsJavaScriptException();
|
|
1782
|
+
return env.Null();
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1785
|
+
// Get DCD type through configuration
|
|
1786
|
+
int retcode = rig_get_conf(my_rig, token, value);
|
|
1787
|
+
if (retcode != RIG_OK) {
|
|
1788
|
+
Napi::Error::New(env, rigerror(retcode)).ThrowAsJavaScriptException();
|
|
1789
|
+
return env.Null();
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
return Napi::String::New(env, value);
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
// Get supported serial configuration options
|
|
1796
|
+
Napi::Value NodeHamLib::GetSupportedSerialConfigs(const Napi::CallbackInfo& info) {
|
|
1797
|
+
Napi::Env env = info.Env();
|
|
1798
|
+
|
|
1799
|
+
// Return object with supported configuration parameters and their possible values
|
|
1800
|
+
Napi::Object configs = Napi::Object::New(env);
|
|
1801
|
+
|
|
1802
|
+
// Serial basic parameters
|
|
1803
|
+
Napi::Object serialParams = Napi::Object::New(env);
|
|
1804
|
+
|
|
1805
|
+
// Data bits options
|
|
1806
|
+
Napi::Array dataBitsOptions = Napi::Array::New(env, 4);
|
|
1807
|
+
dataBitsOptions[0u] = Napi::String::New(env, "5");
|
|
1808
|
+
dataBitsOptions[1u] = Napi::String::New(env, "6");
|
|
1809
|
+
dataBitsOptions[2u] = Napi::String::New(env, "7");
|
|
1810
|
+
dataBitsOptions[3u] = Napi::String::New(env, "8");
|
|
1811
|
+
serialParams.Set("data_bits", dataBitsOptions);
|
|
1812
|
+
|
|
1813
|
+
// Stop bits options
|
|
1814
|
+
Napi::Array stopBitsOptions = Napi::Array::New(env, 2);
|
|
1815
|
+
stopBitsOptions[0u] = Napi::String::New(env, "1");
|
|
1816
|
+
stopBitsOptions[1u] = Napi::String::New(env, "2");
|
|
1817
|
+
serialParams.Set("stop_bits", stopBitsOptions);
|
|
1818
|
+
|
|
1819
|
+
// Parity options
|
|
1820
|
+
Napi::Array parityOptions = Napi::Array::New(env, 3);
|
|
1821
|
+
parityOptions[0u] = Napi::String::New(env, "None");
|
|
1822
|
+
parityOptions[1u] = Napi::String::New(env, "Even");
|
|
1823
|
+
parityOptions[2u] = Napi::String::New(env, "Odd");
|
|
1824
|
+
serialParams.Set("serial_parity", parityOptions);
|
|
1825
|
+
|
|
1826
|
+
// Handshake options
|
|
1827
|
+
Napi::Array handshakeOptions = Napi::Array::New(env, 3);
|
|
1828
|
+
handshakeOptions[0u] = Napi::String::New(env, "None");
|
|
1829
|
+
handshakeOptions[1u] = Napi::String::New(env, "Hardware");
|
|
1830
|
+
handshakeOptions[2u] = Napi::String::New(env, "Software");
|
|
1831
|
+
serialParams.Set("serial_handshake", handshakeOptions);
|
|
1832
|
+
|
|
1833
|
+
// Control line state options
|
|
1834
|
+
Napi::Array stateOptions = Napi::Array::New(env, 2);
|
|
1835
|
+
stateOptions[0u] = Napi::String::New(env, "ON");
|
|
1836
|
+
stateOptions[1u] = Napi::String::New(env, "OFF");
|
|
1837
|
+
serialParams.Set("rts_state", stateOptions);
|
|
1838
|
+
serialParams.Set("dtr_state", stateOptions);
|
|
1839
|
+
|
|
1840
|
+
configs.Set("serial", serialParams);
|
|
1841
|
+
|
|
1842
|
+
// PTT type options
|
|
1843
|
+
Napi::Array pttTypeOptions = Napi::Array::New(env, 8);
|
|
1844
|
+
pttTypeOptions[0u] = Napi::String::New(env, "RIG");
|
|
1845
|
+
pttTypeOptions[1u] = Napi::String::New(env, "DTR");
|
|
1846
|
+
pttTypeOptions[2u] = Napi::String::New(env, "RTS");
|
|
1847
|
+
pttTypeOptions[3u] = Napi::String::New(env, "PARALLEL");
|
|
1848
|
+
pttTypeOptions[4u] = Napi::String::New(env, "CM108");
|
|
1849
|
+
pttTypeOptions[5u] = Napi::String::New(env, "GPIO");
|
|
1850
|
+
pttTypeOptions[6u] = Napi::String::New(env, "GPION");
|
|
1851
|
+
pttTypeOptions[7u] = Napi::String::New(env, "NONE");
|
|
1852
|
+
configs.Set("ptt_type", pttTypeOptions);
|
|
1853
|
+
|
|
1854
|
+
// DCD type options
|
|
1855
|
+
Napi::Array dcdTypeOptions = Napi::Array::New(env, 9);
|
|
1856
|
+
dcdTypeOptions[0u] = Napi::String::New(env, "RIG");
|
|
1857
|
+
dcdTypeOptions[1u] = Napi::String::New(env, "DSR");
|
|
1858
|
+
dcdTypeOptions[2u] = Napi::String::New(env, "CTS");
|
|
1859
|
+
dcdTypeOptions[3u] = Napi::String::New(env, "CD");
|
|
1860
|
+
dcdTypeOptions[4u] = Napi::String::New(env, "PARALLEL");
|
|
1861
|
+
dcdTypeOptions[5u] = Napi::String::New(env, "CM108");
|
|
1862
|
+
dcdTypeOptions[6u] = Napi::String::New(env, "GPIO");
|
|
1863
|
+
dcdTypeOptions[7u] = Napi::String::New(env, "GPION");
|
|
1864
|
+
dcdTypeOptions[8u] = Napi::String::New(env, "NONE");
|
|
1865
|
+
configs.Set("dcd_type", dcdTypeOptions);
|
|
1866
|
+
|
|
1867
|
+
return configs;
|
|
1868
|
+
}
|
|
1869
|
+
|
package/src/hamlib.h
CHANGED
|
@@ -66,6 +66,15 @@ class NodeHamLib : public Napi::ObjectWrap<NodeHamLib> {
|
|
|
66
66
|
Napi::Value SetAntenna(const Napi::CallbackInfo&);
|
|
67
67
|
Napi::Value GetAntenna(const Napi::CallbackInfo&);
|
|
68
68
|
|
|
69
|
+
// Serial Port Configuration
|
|
70
|
+
Napi::Value SetSerialConfig(const Napi::CallbackInfo&);
|
|
71
|
+
Napi::Value GetSerialConfig(const Napi::CallbackInfo&);
|
|
72
|
+
Napi::Value SetPttType(const Napi::CallbackInfo&);
|
|
73
|
+
Napi::Value GetPttType(const Napi::CallbackInfo&);
|
|
74
|
+
Napi::Value SetDcdType(const Napi::CallbackInfo&);
|
|
75
|
+
Napi::Value GetDcdType(const Napi::CallbackInfo&);
|
|
76
|
+
Napi::Value GetSupportedSerialConfigs(const Napi::CallbackInfo&);
|
|
77
|
+
|
|
69
78
|
// Static method to get supported rig models
|
|
70
79
|
static Napi::Value GetSupportedRigs(const Napi::CallbackInfo&);
|
|
71
80
|
|