# Change log

# 4.4.0

# Python, MATLAB and LabVIEW

# Major Changes

  • Requires MokuOS 4.4 and MokuCLI 4.4. Clients older than 4.4 can't connect to a Moku running MokuOS 4.4
  • Instrument files now use the .mokuinst format instead of .bar. Download them with mokucli instrument download
  • Custom Instrument renamed to Moku Compile
  • platform_id renamed to num_slots in Multi-Instrument Mode
  • Added Real-Time Math (Multi-Instrument Mode only)

# All Instruments

  • Added client_name param to claim_ownership and instrument constructors (default: the computer's hostname); shown to other users who try to take ownership of the Moku
  • Sample rate names now use Sa/s, e.g. 39.1MSa/s instead of 39.06MHz (FIR Filter Builder, Digital Filter Box, Phasemeter) and 625MSa/s instead of 625Ms (Arbitrary Waveform Generator). Previous names are still accepted
  • Added strict param to start_streaming

# Multi-Instrument Mode

  • Renamed platform_id to num_slots in MultiInstrument / MokuMultiInstrument and platform. platform_id is still accepted
  • save_configuration now saves the settings of each instrument
  • load_configuration now deploys the instruments and returns them, one per slot
    • Added bitstreams param to provide the instrument files for Moku Compile and GenInst slots
  • Added preload_configuration (REST API)
  • Added open_drain param to set_dio (Moku:Go)
  • get_dio returns the open drain setting of each pin

# Real-Time Math

  • Added RealTimeMath (Python) and MokuRealTimeMath (MATLAB) support
  • Added set_node, set_output_limit, get_output_limit, enable_output, set_defaults, save_settings, load_settings and summary functions

# Moku Compile

  • Added MokuCompile and MokuCompilePlus (Moku:Pro and Moku:Delta)
  • Deprecated CustomInstrument and CustomInstrumentPlus, replaced by MokuCompile and MokuCompilePlus

# Gigabit Streamer and Gigabit Streamer+

  • Added set_incoming_packets function to set the endianness and flow control of incoming packets
  • Added endianness param to set_outgoing_packets (default: LittleEndian)
  • Gigabit Streamer+ supports six inputs (Moku:Delta)

# Phasemeter

  • Added acquisition_rate param to start_logging and start_streaming; deprecated acquisition_speed
  • Added averaging_time param to get_data
  • Deprecated set_acquisition_speed and get_acquisition_speed
  • Deprecated get_auto_acquired_frequency; use setpoint_frequency in get_data instead

# Digital Filter Box, FIR Filter Builder, PID Controller

  • input_gain2 in set_control_matrix is now optional, and only required when the instrument has two inputs

# Logic Analyzer Pattern Generator

  • Added drive param to set_pin_mode (PushPull or OpenDrain on Moku:Go)
  • get_analog_mode returns the high and low threshold voltages

# Laser Lock Box

  • Renamed digitalGain to digital_gain in set_digital_input_gain
  • set_monitor uses Demod for the demodulation signal source, matching the response. LocalOscillator is still accepted

# Lock-in Amplifier

  • slope values in set_filter are now 6dB, 12dB, 18dB and 24dB. Previous names (e.g. Slope6dB) are still accepted

# Bug fixes

  • PID Controller, Lock-in Amplifier and Laser Lock Box: set_by_frequency now sets the expected values when the proportional gain is off. The crossover frequencies are then the unity gain frequencies
  • Digital Filter Box, FIR Filter Builder, Laser Lock Box, Lock-in Amplifier, PID Controller: triggered start_streaming

# Python

  • Faster API calls
  • Requires Python 3.11 or later
  • Instrument constructor arguments after ip are keyword-only in MultiInstrument
  • slot defaults to 1; removed for_slot
  • Gigabit Streamer: mode is required in start_sending, and the other params are keyword-only
  • Arbitrary Waveform Generator: generate_waveform params are now ordered channel, sample_rate, frequency, amplitude, lut_data, and frequency and amplitude are required
  • Supports IPv6 link-local addresses
  • Supports the MOKU_DATA_PATH environment variable

# MATLAB

  • Constructors accept optional arguments as name/value pairs, e.g. MokuOscilloscope(ip, force_connect=true)
  • Added read_timeout option (seconds)
  • persist_state now defaults to false
  • set_instrument also accepts the single .mokuinst file for the slot
  • get_chunk works after stop_streaming; added wait_for_stream_to_file
  • Logic Analyzer: high and low in set_analog_mode are optional
  • Datalogger: added set_defaults
  • Logic Analyzer: added set_can_decoder and set_parallel_bus_decoder
  • Logic Analyzer: pins in set_trigger is deprecated and no longer required; use sources instead

# LabVIEW changes

  • Datalogger: added set_defaults; generate_waveform supports Square, Pulse, DC, Noise and Triangle waveforms
  • Laser Lock Box: added Demod option to source in set_monitor
  • Lock-in Amplifier: range options in set_polar_mode depend on the hardware
  • Frequency Response Analyzer: added defaults to set_sweep
  • Moku Compile: set_interpolation and get_interpolation have no effect
  • input_gain2 in set_control_matrix defaults to 0

# 4.3.0

# Python

  • Added GenInst support

# MATLAB

  • Added GenInst support
  • Custom Instrument and GenInst support both .bar file and unzipped .tar file bitstream formats

# LabVIEW changes

  • Added GenInst support
  • Added Moku:Delta support for all instruments

# 4.2.2

# Python and MATLAB

# Bug fixes

  • Trigger level parameters now default to None; uses hardware threshold voltage when source is External, otherwise 0 V
    • level in set_trigger (Digital Filter Box, FIR Filter Box, Laser Lock Box, Lock-in Amplifier, Oscilloscope, PID Controller)
    • trigger_level in burst_modulate (Arbitrary Waveform Generator)
    • threshold in start_sending (Gigabit Streamer)
    • threshold in set_event_detector (Time & Frequency Analyzer)
    • trigger_level in set_sweep_mode and set_burst_mode (Waveform Generator)
  • Laser Lock Box
    • signal and output in set_output now default to None

# LabVIEW changes

  • Supports MokuOS 4.2.1
  • Bug fixes
  • No new features added

# 4.2.1

# Python and MATLAB

# All Instruments

  • Added 6GHz to bandwidth of set_frontend for Moku:Delta
  • Moku:Delta supports 5-slot Multi-Instrument Mode

# Custom Instrument+

  • Added CustomInstrumentPlus support

# Multi-Instrument Mode

  • Add port parameter to MIM set_dio clients

# Lock-in Amplifier, PID Controller, Digital Filter Box , FIR Filter Box, Laser Lock Box

  • Added set_interpolation function to embedded oscilloscopes
  • Added get_interpolation function to embedded oscilloscopes

# Logic Analyzer Pattern Generator

  • Added set_usb_decoder function
  • Changed notation from one-indexed pins to zero-indexed bits (Python SPI and CAN decoders) [0, 15]

# Gigabit Streamer and Gigabit Streamer+

  • start_sending changes
    • Added mode param (default: Manual)
    • Changed duration default to 0
    • Added control_channel param (default: None)
    • Added threshold param (default: 0)
    • Removed trigger_source param, replaced by control_channel
    • Removed trigger_level param, replaced by threshold
  • Added reset_receive_status function
  • Added gated sending functionality
  • Show warning in Gigabit Streamer when invalid packets received
  • Rename reset_receive_counters to reset_receive_status

# Bug fixes

  • Setting gain_range to None in enable_output in Digital Filter Box and FIR Filter Box
  • Fix for values being given as integers in responses
  • Fix for setting and disabling blended clocks
  • Fix for configuration file upload limit
  • Arbitrary Waveform Generator
    • Enable Arbitrary Waveform Generator and Waveform Generator to set sampling rate up to 2.5GSa and 5GSa
    • Set sample_rate to Auto in Arbitrary Waveform Generator generate_waveform
  • PID Controller
    • Enable validation in enable_input
    • Section validation in set_by_gain_and_section
  • Lock-in Amplifier
    • Handle setting aux_output to none
    • Setting main_gain_range, aux_gain_range to None in set_gain
  • Laser Lock Box
    • Setting gain_range to None in set_output
    • Changed source default to ProbeA in set_trigger
    • Removed invalid channels from source in set_trigger
    • Removed output_range from dump_state

# LabVIEW changes

  • Supports MokuOS 4.2.1
  • Bug fixes
  • No new features added

# 4.1.2

# Python and MATLAB

# All Instruments

  • Improve error messages
  • For file responses, ensure location key returns tmp for Moku:Lab

# Gigabit Streamer and Gigabit Streamer+

  • Added reset_receive_counters function

# Logic Analyzer Pattern Generator

  • Bug fix to update state

# Laser Lock Box

  • Added External option to source param in set_trigger

# LabVIEW changes

  • Supports MokuOS 4.1.2
  • Bug fixes
  • No new features added

# 4.1.1

# Python and MATLAB

# All Instruments

  • Added GigabitStreamer support (Moku:Delta only)
  • Added GigabitStreamerPlus support (Moku:Delta only)
  • Deprecated CustomCompile, replaced by CustomInstrument
  • Added CustomInstrumentPlus support
  • Moku:Go and Moku:Lab support 3-slot Multi-Instrument Mode
  • Added force_deploy to claim_ownership (default: False)
  • Error code handling improvements
  • Added bandwidth param to set_frontend (default: None, settable on Pro directly, indirectly on Delta through MIM frontend)
    • e.g. configure Moku:Pro bandwidth to 600 MHz to increase the maximum frequency of the SA and PM to 600 MHz

# Custom Instrument

  • Added get_status function

# Time & Frequency Analyzer

  • Added type param to set_histogram (default: Interval, added G2 correlation)
  • Added set_interval_policy / get_interval_policy

# Spectrum Analyzer

  • Two input channels in Multi-Instrument Mode (expanded from previous slot limits)

# Neural Network

  • Added NeuralNetwork support to Moku:Go and Moku:Lab (3-slot only)

# LabVIEW changes

  • Supports MokuOS 4.1.1
  • Bug fixes
  • No new features added

# 4.0.3

# Python and MATLAB

# All Instruments

  • Add missing requirements, zeroconf and packaging, back to pyproject.toml
  • More logging for HTTP error messages <!-- ```python print(response.dict)

# REPLACE

# Log the full response details for debugging

logger.debug(f"HTTP error response: {response.dict}") ```python -->

  • Replace mokucli update for mokucli feature install in error message
  • Fix post_data for empty attempts
  • Added save_settings function
  • Added load_settings function

# Multi-Instrument Mode

  • Added save_configuration function
  • Added load_configuration function

# LabVIEW changes

  • Supports MokuOS 4.0.3
  • Bug fixes
  • No new features added

# 4.0.1

# Python and MATLAB

# Major Changes

  • MokuCLI is now required for all API connections
  • MokuOS refers to versions across all software platforms
  • Structure for instrument bitstreams is now global for all API
  • MokuCLI required min version bumped to 4.0.1
  • MATLAB moku_download(fw) removed, replaced by MokuCLI: mokucli download instrument <MokuOS_version>

# All Instruments

  • Added Moku:Delta support
  • Bumped proxy version to 2.0 for 4.0.1
  • Added debug logging capabilities for Python
  • describe now returns mokuOS instead of firmware
  • attenuation no longer a required parameter in MATLAB set_frontend, moved to kwargs
  • Deprecated firmware_version function; replaced by mokuos_version
  • Removed several deprecated helpers and adjusted lifecycle methods
# Streaming
  • Removed moku_cli_streaming_compat, replaced by from moku import version
  • Stopped trimming error output from mokucli stream
  • Removed _get_compatible_cli_version <!--

# MATLAB

  • checksums are no longer in the data/<hardware>/ folder, replaced by MANIFEST in the .bar files
  • Various MATLAB-specific function replacements to use new utilities -->

# External Reference Clock

  • Added set_blended_clock / get_blended_clock (Moku:Delta)

# Arbitrary Waveform Generator and Waveform Generator

  • Added set_frontend and manual_trigger

# Digital Filter Box, FIR Filter Box, Laser Lock Box, Lock-in Amplifier, PID Controller, Multi-Instrument Mode

  • Added attenuation and gain params to set_frontend

# Oscilloscope and Embedded Oscilloscope

  • Trigger type, level, edge, polarity enhancements

# Data Logger

  • Added sample_rate to start_logging

# Embedded Data Logger

  • Changed rate defaults for set_logging and set_streaming to None

# Phasemeter

  • Added acquisition_speed options

# Laser Lock Box

  • Added set_digital_input_gain, removed strict from get_frontend

# Time & Frequency Analyzer

  • Added holdoff param to set_event_detector

# Neural Network

  • Restored show_summary param to construct_model

# PID Controller

  • Removed range from set_frontend

# Multi-Instrument Mode

  • Added port argument to get_dio

# MCC

  • bitstream argument now required for CloudCompile

# LabVIEW changes

  • Supports MokuOS 4.0.1
  • Bug fixes
  • No new features added