Changelog
2025-11-25
MATLAB v2.1.1.0
Fixed Matlab Toolbox version compatibility range.
Fixed Matlab strings to work with R2014b.
ClockSource enumeration is now consistently named with documentation.
Pulse Streamer state is not reset when establishing a connection to the device.
More informative messages on connection errors.
2025-11-24
Firmware update v2.1.0
This update introduces continuous streaming and sequence breakpoints. It also improves upload performance and reduces TriggerToData jitter. There is no longer a second permanent fallback IP address. Link-local address autoconfiguration is used only when DHCP mode is configured and no DHCP server is available. If possible, the old fallback IP (169.254.8.2/16) is set up as auto-IP.
API: added methods
upload(),start(),isReadyForData(),getStreamingState().Increased upload performance.
Fixed bug where
getAnalogCalibration()returned an incorrect value for dc_offset_a1 of analog channel 1.Fixed off-by-one error in repetition counting when the sequence duration is <= 8 ns.
Reduced TriggerToData jitter (±4 ns -> ±0.5 ns) at the cost of increased TriggerToData delay (typ. ~65ns -> ~92ns).
Pressing the reset button for longer than 7 s reboots the device with default network settings (DHCP).
Device discovery works during the firmware update process.
Python v2.1.0
Support for firmware v2.1.0.
Added methods
setBreakpoints(),getBreakpoints(),deleteBreakpoints()to theSequenceclass.Added transformation methods
split()andsplitChunks()to theSequenceclass.The class constructor
PulseStreamer.PulseStreamer()now accepts the serial number to establish a connection to the device, as alternative to the IP address. The parameter ip/ip_hostname ofPulseStreamer.PulseStreamer()is renamed to ip_or_serial.Dropped support for Python version 2.7.
Fixed bug where digital channel values became floats when concatenating to an empty sequence.
Fixed range-check bug when setting channels.
MATLAB v2.1.0.0
Support for firmware v2.1.0.
Added methods
setBreakpoints(),getBreakpoints(),deleteBreakpoints()to theSequenceclass.Added transformation methods
split()andsplitChunks()to theSequenceclass.The class constructor
PulseStreamer.PulseStreamer()now accepts the serial number to establish a connection to the device, as alternative to the IP address. The parameter ip/ip_hostname ofPulseStreamer.PulseStreamer()is renamed to ip_or_serial.
User interface v2.1.0
Supports firmware update to version v2.x.
Detects Pulse Streamer 8/2 during the update process to version v2.x.
Supports setting a new network configuration directly, without mandatory pre-testing.
Logging and interaction with the GUI are handled in the Pulse Streamer Application’s own window.
2024-10-16
Firmware update v2.0.0 Beta2
With the release 2.0 of the Pulse Streamer 8/2 firmware, we will introduce the feature of continuous streaming. With the preliminary release 2.0.0 Beta2, you can use the new feature while the complete firmware release is finished. The API will not change for the official release, and the feature is fully backwards compatible with the former firmware versions.
API has been supplemented by the methods:
upload(),start(),isReadyForData()
Python v2.0.0 dev7 & MATLAB v2.0.0.2
Support for firmware v2.0.0 Beta2.
New
splitmethod is added toSequenceclass.Drop support for obsolete Python version 2.7.
2024-04-30
User interface v1.7.2
Additional information in a Tooltip for the current Pulse Streamer in MainWindow.
Avoid duplicated devices with fallback IP detected via network scan.
Debug mode for User Interface selectable in the start menu to enable logging.
Fixed thread-safe logging.
Fixed correct handling and reporting issues that arise while establishing a connection with the Pulse Streamer device.
MATLAB client v1.7.1
Fixed inconsistency between ClockSource enumeration naming and documentation. The change is backward-compatible.
2023-06-01
Firmware update v1.7.2
This firmware brings updates of third-party components such as Linux kernel etc.
Increased upload performance.
User interface v1.7.0
Fixed a rare bug that made Pulse Streamer Application fail when discovering devices.
Fixed a rare bug that made Pulse Streamer Application fail when establishing a connection.
Python v1.7.0 & MATLAB v1.7.0 & LabVIEW v1.7.0
Support firmware v1.7.x.
2023-04-03
User interface v1.6.4
Added optional logging support.
In case of failure, Pulse Streamer Application sends an error message to Swabian Instruments.
Fixed bug in loading arbitrary data from CSV-file.
2023-03-08
Python Client update v1.6.2
Fixed a bug that connection fails due to the post-release segment of Python package v1.6.1.post1.
2023-02-27
User interface v1.6.3
Fixed a bug that Pulse Streamer Application fails to connect without an internet connection.
2023-02-16
User interface v1.6.2
Pulse Streamer Application shows proper messages in the case of an error and will controllably shut down.
Package and .NET Framework update.
Python Client v1.6.1
Fixed a bug in the sequence creation process that, under some conditions, resulted in missing pulses of a sequence with pulses with a maximum duration value of a 32 Bit word.
Updated package dependency of package protobuf.
Changed import of module matplotlib to optional.
2022-10-05
MATLAB Client update v1.6.2
Fixed a bug that, under some conditions, resulted in fixed pulse duration of ~4.2 s when the requested pulse duration was longer than ~2.1 s.
2022-05-02
Firmware update v1.6.3
Support hardware revision v3.3.
2022-02-28
User interface v1.6.1
Pulse Streamer Application handles an incorrect setting of sequence parameters with warning.
2021-12-20
Firmware update v1.6.2
This update overcomes the recommended maximum limit of the retrigger frequency and brings automatic check and repair of sd-card partitions during bootup.
No limitation of the trigger frequency except a fix retrigger dead-time (<50 ns).
solved: Very rare boot failure due to sd-card partition damages automatically handled by fsck-tools during bootup.
solved: A sporadic case of missing firmware/hardware version information in Pulse Streamer discovery server information.
solved: Incorrect handling of empty sequences and n_runs=0 in v1.6.0 (internal release only).
Clients
Python v1.6.0
Increased performance of sequence generation.
solved: zoom-in/panning within the sequence plot window.
MATLAB v1.6.1 & LabVIEW v1.6.1
Support firmware v1.6.2
2021-08-31
Firmware update v1.5.2
solved: Server-side JSON-RPC request-id handling.
This release resolves the packet dependency (tinyrpc<=1.1.0) of the Python client.
2021-08-23
Client update v1.5.2
Python
Fix packet version dependency: tinyrpc <=1.1.0 for Pulse Streamer 8/2 firmware <=1.5.1.
2021-07-28
User interface v1.5.3
solved: Correct firmware v1.0.x identification via Pulse Streamer Application.
2021-05-20
User interface v1.5.2
solved: Firmware v0.9 detection via Pulse Streamer Application.
solved: Detection of non-licensed devices via Pulse Streamer Application.
2021-03-12
Firmware update v1.5.1
solved: extraordinarily long pulse on analog channels of few devices during bootup with hardware version 3.1 and firmware version v1.5.0.
User interface v1.5.1
solved: Pulse Streamer Application crashes when trying to update the firmware without an internet connection available.
Firmware update can also be performed on a manually downloaded local updater file.
Pulse Streamer Application brings the opportunity to reconnect to different devices without restarting the application.
2021-02-12
Firmware/Client update v1.5.0
This update brings an improved Pulse Streamer Application (GUI).
API has been supplemented by the methods:
reboot(),setNetworkConfiguration(),getNetworkConfiguration(),applyNetworkConfiguration().solved: rare error in case of a sequence with one sequence step, RLE-value <= 8ns and n_runs=INFINITE.
MATLAB and LabVIEW clients are now available from online repositories via MATLAB Addon Explorer and JKI VI Package Manager, respectively.
User interface
Pulse Streamer Application makes use of the full API extensions since version v1.0.2.
Pulse Streamer Application makes use of the device discovery functionality.
Pulse Streamer Application provides functionality for network configuration.
Pulse Streamer Application performs firmware update process.
2020-11-12
Firmware/Client update v1.4.0
This update brings some functionality as output port enabling after power-cycling or automatic hardware version detection for the new hardware version v3.1 of the Pulse Streamer 8/2.
API has been supplemented by the methods:
getHardwareVersion(),setSquareWave125MHz().New trigger input stage leads to a typical TriggerToData of 65 ns (hardware version 3.1) respectively 60 ns (hardware version <= 2.3).
2020-08-17
Bug-fix in LabVIEW client
Internal sequence data for binary protocol uses little-endian encoding compared to big-endian of the JSON-RPC. This resulted in incorrect signal generation with binary protocol enabled firmware versions.
In order to fix the problem, you have to update the LabVIEW client to the latest version.
2020-07-27
Firmware/Client update v1.3.0
This update brings the opportunity to calibrate the analog outputs to increase its accuracy. Devices shipped with firmware version v1.3.0 or later come with calibrated outputs. Devices which has been shipped with a previous firmware version can manually be calibrated by the user with a dedicated method.
API has been supplemented by the methods:
setAnalogCalibration(),getAnalogCalibration().solved: sequences with sequence steps longer than ~0.5 µs and a number of sequence steps near to the maximum limit could raise std::bad_alloc().
2020-01-20
Firmware/Client update v1.2.0
This update brings new device discovery functionality that greatly simplifies finding and connecting to the Pulse Streamer. Moreover, new getter methods are added to form a more complete set of functions that allows you to set and query the device state. Existing functionality has also received an upgrade in performance. Now sequence upload happens 2x faster thanks to a new binary communication protocol that works along the JSON-RPC.
new network device discovery functionality,
findPulseStreamers().sequence upload performance increased by factor two (requires both firmware and client interface update).
API has been supplemented by the methods:
setHostname(),getHostname(),getTriggerStart(),getTriggerRearm(),getClock().recommended maximum external retrigger frequency increased to 1 kHz.
minimum trigger pulse width reduced to <2ns.
TriggerToData increased to 64.5/65.5 ns (mean value, rms jitter 2.3 ns).
unified version numbers for the Pulse Streamer 8/2 firmware and the client interfaces that now share the first two numerals.
2019-08-07
Firmware update v1.0.3
solved: at rare intervals occurring server crashes.
solved: channel analog0 shows increased jitter (observed only on very few devices).
solved: extremely rarely missed internal trigger (sequence-dependent).
2019-05-10
Client update v1.1.2
MATLAB
Bug-fix in * New methodsthe
PulseStreamer.debug.PulseStreamer_RPCLoggerclass.PulseStreamer_RPCLoggerclass now stores log-file snapshots on RPC errors.
2019-04-23
Clients update v1.1.1
Python: corrected overflow error for sequence durations above 4 seconds on some systems.
Python client is now available at www.pypi.org. You can now install it with
pip install pulsestreamer.MATLAB: minor code cleanup.
2019-03-01
Client API update v1.1.0
This update brings homogenized API for PulseStreamer clients in all supported languages. From now on, the signatures of all currently present functions and methods are frozen and will remain stable over the future minor updates and releases. In the future, we plan to add any new functionality in a backward-compatible way with no user code modifications required.
The API was slightly redesigned and homogenized in all supported languages.
The use of high-level clients is now a recommended way of programming and streaming the pulse sequences with the Pulse Streamer.
New methods
PulseStreamer.createSequenceandPulseStreamer.createOutputStatethat create hardware specificSequenceandOutputStateobjects.New method
PulseStreamer.getFPGAID.New
OutputStateclass for defining the state of Pulse Streamer outputs in some methods.New
OutputState.ZEROconstant.New named constant
PulseStreamer.REPEAT_INFINITELY = -1for infinite sequence repetition.Sequenceobject now applies padding to the pattern data and previous levels on concatenation.Renamed enum
TriggerModetoTriggerRearm, also renamed enumeration values.Renamed enumeration values in enums
TriggerStart.Modified signature of the
PulseStreamer.getSerial()method, which now has no input parameter and always returns hardware serial number.
MATLAB
The client code is now distributed as a packaged MATLAB Toolbox.
The PulseStreamer client is placed into its own namespace
PulseStreamerin order to prevent possible collisions in function names. You can useimport PulseStreamer.*to shorten the class names.Moved compatibility functions for FW v0.9 to
PulseStreamer.compatsub-package.Sequence.setDigitalandSequence.setAnalogallows for overwriting mapped pulse patterns even after concatenation or repetition.PulseStreamer.stream()method now supportsSequenceobject and[{duration,chan_list,a0,a1}; {...}]cell array as input.Functionality of
PSSequenceBuilderandPSSequenceclasses is now combined and moved toSequenceclass.Renamed
PSTriggerModetoTriggerRearm.Renamed
PSTriggerStarttoTriggerStart.Renamed
PSSequencetoSequence.Removed
PSSerialenum.Sequence.plotmethod plots the sequence data exactly as defined by the user without resampling to common time.Sequenceis completely decoupled fromPulseStreamerclass. UsePulseStreamer.createSequence()method to create aSequenceobject that does early channel number validation.Helper classes like
PulseStreamer_DummyandPulseStreamer_RPCLoggerlocated in a sub-packagePulseStreamer.debug.Solved problem with multiple timers created on repeated script runs with long sequences. Only one timer can exist for a given device.
LabVIEW
Pulse Streamer client code for LabVIEW is now distributed as a VIPM package.
Functionality of
SequenceBuilderandSequenceclasses is now combined intoSequenceclass.Added
Sequence:plot.vi, which plots the pulse patterns according to user input with no resampling to common time.PulseStreamer:stream.vimethod is a polymorphic VI with wrappers to handle implementation VIs with dynamic inputs.PulseStreamer:stream.visupportsSequenceobject, oldPulsearray, andRLEdatacluster as inputs.Renamed
Digital Pattern.lvclasstoPulsePattern.lvclass.Renamed
Analog Pattern.lvclasstoAnalogPattern.lvclass.
Python
PulseStreamer client is distributed as wheel package
pulsestreamer.PulseStreamer now uses standard
tinyrpcpackage instead of previously used customized versiontinyrpc3.py. Usepip install tinyrpcto install the package, if missing.Some changes in parameter names. Please see Programming interface.
New
concatenate,repeatand`plotmethods are added toSequenceclass.PulseStreamer client is organized into a python module with a cleaner layout.
PulseStreamer.streammethod acceptsSequenceobject as input parameter directly.
2018-12-17
Firmware update v1.0.2
solved: occasionally missed external trigger.
2018-11-09
Firmware update v1.0.1
API has been supplemented by method rearm() and forceFinal().
second permanent IP 169.254.8.2 added.
network configuration file on user partition -> static IP can be configured via RPCs.
login password changed.
Clients
Python
adapted to new API.
class Sequence added as handy sequence-builder.
channel_map {‘ch0’:0, ‘ch1’:1…} no longer supported - use channel_list e.g. [0,1,3,7].
MATLAB
adapted to new API.
large changes in the way sequences are created and manipulated.
new classes for sequence creation:
PSSequenceBuilderandPSSequence.classes
PandPHare modified and labeled as deprecated.added compatibility function
convert_PPH_to_PSSequencethat converts sequences created withPorPHobjects intoPSSequence.added examples that show how to migrate old code to version 1.0.
code examples completely reworked to reflect the new way of building sequences.
LabVIEW
adapted to new API
large changes in the way sequences are created and manipulated.
new classes for sequence creation:
SequenceBuilderandSequence.client code is now contained in a LabVIEW library.
slightly modified and renamed classes for signal pattern creation.
code examples completely reworked to reflect the new way of building sequences.
2018-10-10
Support for firmware update v1.0.
underflows do not occur any more -> getUnderflow() returns 0 always.
API changes (see API-migration-doc for details).
substantial changes in the embedded Linux-operation system.
no network configuration file - only DHCP and fallback IP available.
Clients
Python, MATLAB and LabVIEW adapted to new API.
2018-01-05
user interface
Added a GUI to determine the IP address of the Pulse Streamer and to create simple pulses (beta release).
clients
Improved Python client.
2017-05-07
clients
Added LabVIEW client.
Improved MATLAB client.
Improved Python client.
documentation
Added ‘Getting Started’ section.
2016-04-08
MATLAB client
Added links to the MATLAB client examples.
2016-03-17
static sequence beta 0.9
enums in RPCs.
API name changes.
rising and falling edges on external trigger.
2016-03-07
Provide network configuration.
added section on network configuration.
2016-03-03
static sequence alpha
initial, final, underflow states.
software start.
external trigger.
rerun sequence.
separate underflow flags for digital and analog.
optional values in jRPC.
2016-02-02
static sequence alpha.