hamlib 0.4.3 → 0.4.4

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 CHANGED
@@ -40,7 +40,7 @@ For faster installation or offline environments, you can manually install precom
40
40
  ## Quick Start
41
41
 
42
42
  ```javascript
43
- const { HamLib, Rotator } = require('hamlib');
43
+ const { HamLib, Rotator, PASSBAND } = require('hamlib');
44
44
 
45
45
  async function main() {
46
46
  // Create rig instance (model 1035 = FT-991A)
@@ -50,7 +50,7 @@ async function main() {
50
50
 
51
51
  // Basic operations
52
52
  await rig.setFrequency(144390000); // 144.39 MHz
53
- await rig.setMode('FM');
53
+ await rig.setMode('FM', 'nochange');
54
54
 
55
55
  const freq = await rig.getFrequency();
56
56
  const mode = await rig.getMode();
@@ -116,6 +116,9 @@ const freq = await rig.getFrequency();
116
116
 
117
117
  // Mode
118
118
  await rig.setMode('USB');
119
+ await rig.setMode('USB', 'nochange');
120
+ await rig.setMode('USB', PASSBAND.NOCHANGE);
121
+ await rig.setMode('USB', rig.getPassbandNormal('USB'));
119
122
  const mode = await rig.getMode();
120
123
 
121
124
  // VFO
@@ -360,7 +363,7 @@ async function repeaterOperation() {
360
363
 
361
364
  // Set up for 2m repeater
362
365
  await rig.setFrequency(145500000); // 145.500 MHz
363
- await rig.setMode('FM');
366
+ await rig.setMode('FM', 'nochange');
364
367
  await rig.setRepeaterShift('MINUS'); // Negative offset
365
368
  await rig.setRepeaterOffset(600000); // 600 kHz offset
366
369
  await rig.setTuningStep(12500); // 12.5 kHz steps
package/index.d.ts CHANGED
@@ -147,6 +147,13 @@ type VFO =
147
147
  */
148
148
  type RadioMode = 'USB' | 'LSB' | 'FM' | 'PKTFM' | 'AM' | 'CW' | 'RTTY' | 'DIG' | string;
149
149
 
150
+ type PassbandSelector = 'narrow' | 'wide' | 'normal' | 'nochange' | number;
151
+
152
+ interface PassbandConstants {
153
+ NORMAL: 0;
154
+ NOCHANGE: -1;
155
+ }
156
+
150
157
  /**
151
158
  * Frequency range information
152
159
  */
@@ -604,14 +611,16 @@ declare class HamLib extends EventEmitter {
604
611
  /**
605
612
  * Set radio mode
606
613
  * @param mode Radio mode (such as 'USB', 'LSB', 'FM', 'PKTFM')
607
- * @param bandwidth Optional bandwidth setting ('narrow', 'wide', or default)
614
+ * @param bandwidth Optional bandwidth selector ('narrow', 'wide', 'normal', 'nochange') or width in Hz
608
615
  * @param vfo Optional VFO to set mode on ('VFOA' or 'VFOB'). If not specified, uses current VFO
609
616
  * @example
610
617
  * await rig.setMode('USB');
611
618
  * await rig.setMode('FM', 'narrow');
619
+ * await rig.setMode('USB', 'nochange');
620
+ * await rig.setMode('USB', PASSBAND.NOCHANGE);
612
621
  * await rig.setMode('USB', 'wide', 'VFOA');
613
622
  */
614
- setMode(mode: RadioMode, bandwidth?: 'narrow' | 'wide', vfo?: VFO): Promise<number>;
623
+ setMode(mode: RadioMode, bandwidth?: PassbandSelector, vfo?: VFO): Promise<number>;
615
624
 
616
625
  /**
617
626
  * Set PTT (Push-to-Talk) status
@@ -1711,8 +1720,11 @@ interface VfoInfo {
1711
1720
  declare const nodeHamlib: {
1712
1721
  HamLib: typeof HamLib;
1713
1722
  Rotator: typeof Rotator;
1723
+ PASSBAND: PassbandConstants;
1714
1724
  };
1715
1725
 
1726
+ declare const PASSBAND: PassbandConstants;
1727
+
1716
1728
  // Export types for use elsewhere
1717
1729
  export { ConnectionInfo, ModeInfo, SupportedRigInfo, SupportedRotatorInfo, AntennaInfo, RotatorConnectionInfo,
1718
1730
  RotatorPosition, RotatorStatus, RotatorDirection, RotatorResetType, RotatorCaps, VFO, RadioMode, MemoryChannelData,
@@ -1722,7 +1734,7 @@ export { ConnectionInfo, ModeInfo, SupportedRigInfo, SupportedRotatorInfo, Anten
1722
1734
  HamlibConfigFieldType, HamlibConfigFieldDescriptor, HamlibPortType, HamlibPortCaps,
1723
1735
  SpectrumScopeInfo, SpectrumModeInfo, SpectrumAverageModeInfo, SpectrumLine,
1724
1736
  SpectrumCapabilities, SpectrumSupportSummary, SpectrumConfig, SpectrumDisplayState,
1725
- ClockInfo, VfoInfo, HamLib, Rotator };
1737
+ ClockInfo, VfoInfo, PassbandSelector, PassbandConstants, HamLib, Rotator, PASSBAND };
1726
1738
 
1727
1739
  // Support both CommonJS and ES module exports
1728
1740
  // @ts-ignore
package/lib/index.js CHANGED
@@ -4,6 +4,11 @@ const nodeGypBuild = require('node-gyp-build');
4
4
  // Ensure loader resolves from package root (contains prebuilds/ and build/)
5
5
  const nativeModule = nodeGypBuild(path.join(__dirname, '..'));
6
6
 
7
+ const PASSBAND = Object.freeze({
8
+ NORMAL: 0,
9
+ NOCHANGE: -1,
10
+ });
11
+
7
12
  /**
8
13
  * HamLib class for controlling amateur radio devices
9
14
  *
@@ -110,7 +115,7 @@ class HamLib extends EventEmitter {
110
115
  /**
111
116
  * Set radio mode
112
117
  * @param {string} mode - Radio mode ('USB', 'LSB', 'FM', 'PKTFM', etc.)
113
- * @param {string} [bandwidth] - Optional bandwidth ('narrow', 'wide')
118
+ * @param {string|number} [bandwidth] - Optional bandwidth selector ('narrow', 'wide', 'normal', 'nochange') or width in Hz
114
119
  * @param {string} [vfo] - Optional VFO ('VFOA' or 'VFOB')
115
120
  */
116
121
  async setMode(mode, bandwidth, vfo) {
@@ -1549,7 +1554,8 @@ class Rotator extends EventEmitter {
1549
1554
  }
1550
1555
 
1551
1556
  // Export for CommonJS
1552
- module.exports = { HamLib, Rotator };
1557
+ module.exports = { HamLib, Rotator, PASSBAND };
1553
1558
  module.exports.HamLib = HamLib;
1554
1559
  module.exports.Rotator = Rotator;
1555
- module.exports.default = { HamLib, Rotator };
1560
+ module.exports.PASSBAND = PASSBAND;
1561
+ module.exports.default = { HamLib, Rotator, PASSBAND };
package/lib/index.mjs CHANGED
@@ -7,8 +7,8 @@ const __dirname = path.dirname(__filename);
7
7
  const require = createRequire(import.meta.url);
8
8
 
9
9
  // Import the CommonJS module
10
- const { HamLib, Rotator } = require('./index.js');
10
+ const { HamLib, Rotator, PASSBAND } = require('./index.js');
11
11
 
12
12
  // Export for ES modules
13
- export { HamLib, Rotator };
14
- export default { HamLib, Rotator };
13
+ export { HamLib, Rotator, PASSBAND };
14
+ export default { HamLib, Rotator, PASSBAND };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hamlib",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "Node.js bindings for Hamlib rig control with official spectrum streaming support",
5
5
  "main": "index.js",
6
6
  "module": "lib/index.mjs",
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/src/hamlib.cpp CHANGED
@@ -2567,16 +2567,28 @@ Napi::Value NodeHamLib::SetMode(const Napi::CallbackInfo & info) {
2567
2567
  int vfo = SHIM_RIG_VFO_CURR;
2568
2568
 
2569
2569
  // Parse parameters: setMode(mode) or setMode(mode, bandwidth) or setMode(mode, bandwidth, vfo)
2570
- if (info.Length() >= 2 && info[1].IsString()) {
2571
- std::string bandstr = info[1].As<Napi::String>().Utf8Value();
2572
- if (bandstr == "narrow") {
2573
- bandwidth = shim_rig_passband_narrow(my_rig, mode);
2574
- } else if (bandstr == "wide") {
2575
- bandwidth = shim_rig_passband_wide(my_rig, mode);
2570
+ if (info.Length() >= 2) {
2571
+ if (info[1].IsNumber()) {
2572
+ bandwidth = info[1].As<Napi::Number>().Int32Value();
2573
+ } else if (info[1].IsString()) {
2574
+ std::string bandstr = info[1].As<Napi::String>().Utf8Value();
2575
+ if (bandstr == "narrow") {
2576
+ bandwidth = shim_rig_passband_narrow(my_rig, mode);
2577
+ } else if (bandstr == "wide") {
2578
+ bandwidth = shim_rig_passband_wide(my_rig, mode);
2579
+ } else if (bandstr == "normal") {
2580
+ bandwidth = SHIM_RIG_PASSBAND_NORMAL;
2581
+ } else if (bandstr == "nochange") {
2582
+ bandwidth = SHIM_RIG_PASSBAND_NOCHANGE;
2583
+ } else {
2584
+ // If second parameter is not a known passband selector, treat it as VFO
2585
+ vfo = parseVfoParameter(info, 1, SHIM_RIG_VFO_CURR);
2586
+ RETURN_NULL_IF_INVALID_VFO(vfo);
2587
+ }
2576
2588
  } else {
2577
- // If second parameter is not "narrow" or "wide", might be VFO
2578
- vfo = parseVfoParameter(info, 1, SHIM_RIG_VFO_CURR);
2579
- RETURN_NULL_IF_INVALID_VFO(vfo);
2589
+ Napi::TypeError::New(env, "Bandwidth must be a string selector or numeric passband width")
2590
+ .ThrowAsJavaScriptException();
2591
+ return env.Null();
2580
2592
  }
2581
2593
  }
2582
2594
 
@@ -70,6 +70,7 @@ typedef void* hamlib_shim_handle_t;
70
70
 
71
71
  /* Passband constants */
72
72
  #define SHIM_RIG_PASSBAND_NORMAL 0
73
+ #define SHIM_RIG_PASSBAND_NOCHANGE (-1)
73
74
 
74
75
  /* Port types (must match hamlib rig_port_e enum) */
75
76
  #define SHIM_RIG_PORT_NONE 0