- AuthorSearch Results
Found in Replies
Andy Leviss posted on May 5, 2026 at 5:27 pm View this postIn reply to: BB60C-API for ARM
Andy LevissParticipantWe’ve only been begging for Mac support for BB for over two years,so I guess what’s more indefinite wait?
The BB is the only of your analyzers that the live audio RF coordination and management industry can reliably use to do the wideband scans we need to do our jobs, so having Mac versions for almost every other family except that, and vague “it’ll come, eventually, maybe” is feeling pretty like Lucy, Charlie Brown, and the football to those of us in this field.
We’ve even given up on hope for Spike at this point; we’ve got multiple folks who can or will write a client for us, we just need the damned API
(╯°□°)╯︵ ┻━┻
Found in Replies

Andrew posted on May 5, 2026 at 11:00 am View this postIn reply to: BB60C-API for ARM

AndrewModeratorHi scubajosh,
I apologize for the confusion, yes we use the aarch64 folder for the builds on the Nvidia Jetson. For APIs that have ARM Mac builds we use a folder called “macos_arm”. We have them for the SP and SM APIs, but not the BB API currently. I have confirmed we do have an open ticket to get this for the BB60 API. I don’t have a timeframe on this work right now, but I will be sure to update this thread when complete.
Found in Replies
- This reply was modified 1 day, 17 hours ago by
scubajosh.
scubajosh posted on May 4, 2026 at 7:00 pm View this postIn reply to: BB60C-API for ARM
scubajoshParticipantmacOS Apple Silicon (aarch64 / M-series) native library support for BB60C
Hi Signal Hound team,
We’re integrating the BB60C into a Python application on macOS Apple Silicon (M1/M2/M3/M4). The
lib/aarch64/libbb_api.so.5.0.10in your SDK zip is a Linux ELF shared object compiled for the SYSV ABI. macOS uses the Mach-O binary format —CDLL()(Python ctypes) anddlopen()cannot load an ELF.soon macOS regardless of CPU architecture. Even though both the Jetson and Apple Silicon are aarch64, the OS ABIs are incompatible.**What we need:** a macOS aarch64 build of
bb_apias a.dylib(Mach-O shared library).**What that requires on your end:**
1. **Build toolchain** — compile on macOS (Xcode clang or clang from Homebrew targeting
arm64-apple-macosx). The Jetson/Ubuntu g++ build cannot produce Mach-O output.2. **Dependencies to swap:**
–libusb-1.0→ use the macOS Homebrew build (brew install libusb), or link againstIOUSBLib.frameworkdirectly. The libusb project ships macOS ARM64 builds.
–libftd2xx→ FTDI ships a macOS ARM64 D2XX driver (.dylib) at ftdichip.com — the same download page you reference inREADME_aarch64.txthas a macOS section.3. **Link flags** — replace
-Wl,-rpathLinux syntax with macOS equivalents:
`
clang++ sources -o libbb_api.dylib -dynamiclib \
-install_name @rpath/libbb_api.dylib \
-arch arm64 \
-target arm64-apple-macosx11.0 \
-lusb-1.0 -lftd2xx \
-Wl,-rpath,@loader_path
`4. **USB device permissions** — on macOS the equivalent of
udevrules is anIOUSBLibentitlement or a signed driver kext/dext. For development/testing, running with elevated permissions or via a USB user-space claim (which libusb handles automatically on macOS) is sufficient without a kernel driver.5. **Deliverable** — a
lib/macos_arm64/libbb_api.dylib(orlibbb_api.N.N.N.dylibwith a symlink) in the SDK zip, alongside any requiredlibftd2xx.dylib. Thelibusb-1.0.dylibcan be expected as a Homebrew dependency rather than bundled.**The ARM64 limitation note in your README** (sweep/IQ only is fine — we only need IQ streaming and sweep modes.
**( 1 kHz min RBW will not work for security TSCM work I would need at least 300hz RBW)Found in Replies
sreeder posted on May 4, 2026 at 8:20 am View this postIn reply to: BB60C-API for ARM
sreederParticipantIt is great to have the API working on ARM; however, are there any updates this year/plan to have an ARM version of Spike? Having it run on something like a Pi 5 would be a game changer.
Found in Topics
- This topic was modified 5 days, 5 hours ago by
jhenderson.
jhenderson posted on May 1, 2026 at 6:25 am View this postTopic: Direct ADC (BB_DIRECT_RF) Mode ?
in forum BB Series DiscussionsHello,
I am targeting sample acquisition from my BB60C (or D) in the HF frequency ranges 0 – 20 MHz. I have the “typical” stream IQ mode working, but I wanted to see how the output compared to using the Direct RF flag that documentation hints at existing.
I’ve tried every combination of initializing things that I can think of, but I cannot avoid getting a SEGFAULT at the bbGetIQUnpacked/bbGetIQ call.
Something that’s missing from the documentation is a specific example of how that streaming type (BB_DIRECT_RF) is used.
I’m on Linux using api 5.0.9
Found in Topics
- This topic was modified 1 month, 1 week ago by
kaiser.
kaiser posted on March 30, 2026 at 12:21 pm View this postTopic: SM200C Streaming IQ – no Triggers
in forum SM Series DiscussionsI’m currently trying to implement streaming IQ with trigger inputs on an SM200C.
A few years back we had implemented this on some SM200B’s and it worked as expected (a 1PPS into the GPIO port of the signal hound showed up as expected).
Now we have a new application, and can’t seem to get the triggers to work.
If I sit there and query the GPIO via the API, I see it toggle from 0 to 1 and back and forth as expected. But when I do IQ streaming, the triggers buffer is always returned as zeros.
I’ve stepped through every function, and they all return smNoError, so I don’t see what’s going wrong here. Tried a second SM200C and have the same issue.
sm_api.dll from Aug 21, 2025.
private void SetupRFSamplerForIQStreaming()
{
AppLogger.Info(“Configuring Signal Hound for IQ Streaming”);
try
{
try { _SH.AbortMeasurements(); } catch { }
_SH.SetGpioDirections(true, true); //trying this to see if we get triggers..
// _SH.SetGPSTimebaseUpdate(); //Sets the Timebase to begin updating with GPS time if available_SH.SetIQCenterFreq(_RXCenterFreqInMHz * 1.0e6);
_SH.SetIQBandwidth(_RXBandwidthInMHz * 1.0e6);
_SH.SetRefLevel(-10);
_SH.SetIQDataType(SmDataType.smDataType32fc);
_SH.DisableGPIOSweep();
_SH.SetGPIOTriggerEdgeType(Rising: true);_SH.SetIQQueueSize((float)(2.62 * 16)); //maximum amount of buffer
_SH.SetIQSampleRate(1); //1 is no decimation, max speed, acts on the powers of 2. We want to go as fast as possible for best time precision_SH.ConfigureMode(SmMode.smModeIQStreaming);
var f = _SH.GetIQParameters();
RfSampleRateInHz = f[0];
}
catch { AppLogger.Error(“Failure to Configure Signal Hound For IQ Streaming”); }
}Found in Replies
- This reply was modified 3 months ago by
Roger.

Roger posted on February 4, 2026 at 4:35 pm View this post
RogerModeratorHi tschmitz,
The issue appears to be that the net_count variable is uninitialized. The smNetworkConfigGetDeviceList function uses its pararameter deviceCount to determine how large the serials array is, so it can return a maximum of that many devices (zero in this case).
In other words, the second line of code should be:
int net_serials[SM_MAX_DEVICES], net_count = SM_MAX_DEVICES;I know it is odd that the seemingly equivalent function for USB devices (SM200B/SM435B) does not have this requirement.
Let me know if this doesn’t fix it.
– Roger
Found in Topics
tschmitz posted on February 2, 2026 at 9:56 am View this postHello, I think I discovered a bug with device discovery.
When I run the following code with an SM200C connected (both USB-2.0 and 10GbE SFP+ connected), I get no devices found.
int serial_numbers[SM_MAX_DEVICES], count; int net_serials[SM_MAX_DEVICES], net_count; int all_serials[SM_MAX_DEVICES * 2] = {0}, all_count = 0; SmStatus status = smGetDeviceList(serial_numbers, &count); LOG_DBG("Fetched %d serial numbers from <code>smGetDeviceList</code>", count); if (status != smNoError) { throw std::runtime_error(smGetErrorString(status)); } status = smNetworkConfigGetDeviceList(net_serials, &net_count); LOG_DBG("Fetched %d serial numbers from <code>smNetworkConfigGetDeviceList</code>", net_count); if (status != smNoError) { throw std::runtime_error(smGetErrorString(status)); } for (size_t i = 0; i < count; i++) { all_serials[all_count] = serial_numbers[i]; all_count++; } for (size_t i = 0; i < net_count; i++) { all_serials[all_count] = net_serials[i]; all_count++; }I also found if I add a delay of roughly 1.5 seconds between the two API calls, it correctly finds the SM200C. Reversing the API calls also works, but I have a feeling that it breaks discovery for the SM200B/SM435B.
OS: Ubuntu 22.04
API Version: 2.3.8
C++ Standard: C++11
CPU: AMD Ryzen 9 9955HXFound in Replies

Andrew posted on January 21, 2026 at 8:50 am View this postIn reply to: SP145 GPS receiver PPS

AndrewModeratorIf using Spike there is unfortunately not a way to trigger off the internal PPS.
If using the API, then this would be possible by using the I/Q timestamps. When I/Q streaming via the API with GPS lock, the timestamps would give you indication of when the PPS trigger occurred and you take action at the appropriate time.
Found in Replies
Craig posted on December 18, 2025 at 1:45 pm View this postIn reply to: SCPI Limit lines on the SA44B
CraigParticipantI found the list. For archeologists after me, it is in the SDK download under:
\signal_hound_sdk\scpi\Spike
My mistake was looking in the API folder for the device.
Found in Topics
Craig posted on December 18, 2025 at 1:10 pm View this postTopic: SCPI Limit lines on the SA44B
in forum SA Series DiscussionsI see in the SCPI documentation that limit lines are supported but I can’t find anywhere in the API or code examples that even mention their usage.
Where can I find examples for setting and querying limit lines statuses?
Found in Replies
- This reply was modified 4 months, 4 weeks ago by
Andrew.

Andrew posted on December 8, 2025 at 3:00 pm View this postIn reply to: Spike and PCR4200

AndrewModeratorHi Jonathan,
Spike can only control one channel of the PCR4200 at a time. You can change which channel is controlled using the Utilities -> Diagnostics selection. Each channel will behave identically. Support for the PCR4200 in Spike is primarily to assist with troubleshooting in network configuration and to make single channel spectrum analysis measurements using the receiver.
The full power of the PCR4200 is exposed through the API. There you can access the multi channel streaming, phase coherent measurements, and simultaneous sweep + stream.
The API files can be downloaded from our SDK here here,
https://signalhound.com/software/signal-hound-software-development-kit-sdk/API documentation can be viewed here,
https://signalhound.com/sigdownloads/SDK/online_docs/pcr_api/index.htmlIf you would like to discuss your use case in more detail, please email me directly at aj@signalhound.com.
Regards
Found in Replies

Andrew posted on November 24, 2025 at 4:03 pm View this postIn reply to: Spike on macOS

AndrewModeratorWe do have minimal ARM Mac support for the SP145 in the form of compiled APIs. If you were writing your own software you could take advantage of them to use the instrument on Mac. You can find those libraries in our SDK. Porting Spike is a much larger project, and no effort has been made on this port yet. It has been requested a few times over the years, there is some interest. I can’t provide any timelines or estimates on this project.
Found in Topics
pedro.teixeira2 posted on October 10, 2025 at 6:08 am View this postTopic: Compatibility with electronic modules
in forum VNA Series DiscussionsHello, our company is currently considering acquiring a VNA400 unit.
We would like to use it with automatic calibration modules even if third party modules.
Do you have this integration planed in the near future even if it is only posssible by the api.
Alternativly will you produce your own calibration modules or even partner with other company for the process.
Best Regards, Pedro.Found in Replies
- This reply was modified 7 months ago by
Justin Crooks.

Justin Crooks posted on October 3, 2025 at 8:12 am View this post
Justin CrooksModeratorGarth,
Yes, if you wanted to do this programatically, you could use the sa_api and tg_api. Do 2 sweeps, one with your reference through, and one with your DUT. For each point within the sweep, tune the TG then do a small (100 kHz span or smaller) sweep around the signal and find the max value. Subtract the 2 sweeps for your insertion loss. We created a support ticket for this issue, but I don’t know where it is in the queue, so a “DIY” TG sweep might be a good solution in the short run.Found in Replies
- This reply was modified 7 months, 2 weeks ago by
Andrew.

Andrew posted on September 22, 2025 at 8:29 am View this postIn reply to: BB60C API

AndrewModeratorThe API does not have a equivalent command for reference level offset (RLO). The logic for RLO is done entirely in Spike. Fortunately it is simply offsetting the reference level you set through the API. For example, a RLO of 20dB (implying something like a 20dB attenuator in line) would mean setting the reference level in the API 20dB lower.
Found in Replies
jfer posted on September 19, 2025 at 6:51 am View this postIn reply to: Communicate with SM200C through API
jferParticipantJust a quick update on this, I was just able to get the sm_example_open_networked_device C++ example to work with my network configuration, so it’s only the Python API I am currently having trouble with
Found in Topics
lpr@rtx.dk posted on September 19, 2025 at 5:52 am View this postTopic: BB60C API
in forum BB Series DiscussionsHi
I am using the BB60C in a remote Python application.
Does anyone know the remote command/API command to set the external reference level offset?
The Spike SW does have an input field for the reference level offset!
I am running on latest SW from the web-page.
Thanks in advance
LPEFound in Topics
jfer posted on September 18, 2025 at 12:14 pm View this postTopic: Communicate with SM200C through API
in forum SM Series DiscussionsHello,
I have the SM200C using a Sonnet Solo10G SFP+ (Thunderbolt 3 Edition) going into an Intel NUC running Ubuntu 22. After going through the 10GbE Network Configuration Guide I was able to get Spike to connect to the device and even change the device network configuration through the Spike SM Network Configuration utility. However I have been unable to connect to the device through the Python API, including the networked_speed_test.py example. It just returns that no device is found. Any advice for this?
Thanks!
Found in Replies

Andrew posted on September 18, 2025 at 8:57 am View this postIn reply to: VSG60A External Trigger in MATLAB

AndrewModeratorPK,
The API would be the recommended way to automate with the VSG25. The VSG25 software and device does not support SCPI. SCPI automation is only supported on the VSG60 software.
The VSG25 API exposes most of the functionality of the user interface. It can be found in our SDK, linked below. See the user manual for programming examples.
https://signalhound.com/software/signal-hound-software-development-kit-sdk/
Let us know if you have follow up questions.
- This reply was modified 1 day, 17 hours ago by
- AuthorSearch Results