Changelog

2020-07-27

Firmware/Client update v1.3.0

This update brings the opportunity to calibrate the anlog 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 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 the PulseStreamer.debug.PulseStreamer_RPCLogger class.

  • PulseStreamer_RPCLogger class 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 backwards 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.createSequence and PulseStreamer.createOutputState that create hardware specific Sequence and OutputState objects.

  • New method PulseStreamer.getFPGAID.

  • New OutputState class for defining the state of Pulse Streamer outputs in some methods.

  • New OutputState.ZERO constant.

  • New named constant PulseStreamer.REPEAT_INFINITELY = -1 for infinite sequence repetition.

  • Sequence object now applies padding to the pattern data and previous previous levels on concatenation.

  • Renamed enum TriggerMode to TriggerRearm, 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.

  • Now the PulseStreamer client is placed into its own namespace PulseStreamer in order to prevent possible collisions in function names. You can use import PulseStreamer.* to shorten the class names.

  • Moved compatibility functions for FW v0.9 to PulseStreamer.compat sub-package.

  • Sequence.setDigital and Sequence.setAnalog allows for overwriting mapped pulse patterns even after concatenation or repetition.

  • PulseStreamer.stream() method now supports Sequence object and [{duration,chan_list,a0,a1}; {...}] cell array as input.

  • Functionality of PSSequenceBuilder and PSSequence classes is now combined and moved to Sequence class.

  • Renamed PSTriggerMode to TriggerRearm.

  • Renamed PSTriggerStart to TriggerStart.

  • Renamed PSSequence to Sequence.

  • Removed PSSerial enum.

  • Sequence.plot method plots the sequence data exactly as defined by user without resampling to common time.

  • Sequence is completely decoupled from PulseStreamer class. Use PulseStreamer.createSequence() method to create a Sequence object that does early channel number validation.

  • Helper classes like PulseStreamer_Dummy and PulseStreamer_RPCLogger located in a sub-package PulseStreamer.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 SequenceBuilder and Sequence classes is now combined into Sequence class.

  • Added Sequence:plot.vi which plots the pulse patterns according to user input with no resampling to common time.

  • PulseStreamer:stream.vi method is a polymorphic VI with wrappers to handle implementation VIs with dynamic inputs.

  • PulseStreamer:stream.vi supports Sequence object, old Pulse array, and RLEdata cluster as inputs.

  • Renamed Digital Pattern.lvclass to PulsePattern.lvclass.

  • Renamed Analog Pattern.lvclass to AnalogPattern.lvclass.

Python

  • PulseStreamer client is distributed as wheel package pulsestreamer.

  • PulseStreamer now uses standard tinyrpc package instead of previously used customized version tinyrpc3.py. Use pip install tinyrpc to install the package, if missing.

  • Some changes in parameter names. Please see Programming interface.

  • New concatenate, repeat and `plot methods are added to Sequence class.

  • PulseStreamer client is organized into a python module with cleaner layout.

  • PulseStreamer.stream method accepts Sequence object 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: PSSequenceBuilder and PSSequence

  • classes P and PH are modified and labeled as deprecated

  • added compatibility function convert_PPH_to_PSSequence that converts sequences created with P or PH objects into PSSequence

  • added examples that show how to migrate old code to version 1.0

  • code examples completely reworked to reflect 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: SequenceBuilder and Sequence

  • client code is now contained in a LabView library.

  • slightly modified and renamed classes for signal pattern creation

  • code examples completely reworked to reflect new way of building sequences

2018-10-10

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