Welcome to pydwf !

Warning

Important Notice

Following Digilent’s decision in October 2023 to require creation of a login account to download the Waveforms software and the accompanying library that is needed to use their measurement devices, I decided to suspend my work on pydwf indefinitely. There will be no support for new features, no bug fixes, and no more user support from me either via Digilent’s user forum or via other channels.

The primary reason for this is that I consider it unethical to sell a hardware device that requires accompanying software downloads if those software downloads require a mandatory login account, given that account creation (1) requires mandatory acceptance of Terms and Conditions that were not part of the original hardware sale; and (2) requires the user to register personally identifiable data.

I realize that these kinds of unsavory practices are pervasive in the brave new world of modern technology, but my motivation to add value for such devices in my free time is precisely zero.

So for the time being (and probably forever, since I don’t expect Digilent to reverse course), version 1.1.19 will be the last pydwf release. It is essentially identical to version 1.1.18, with this notice prominently added.

Digilent used to be a pretty cool engineering-first company, providing very nice FPGA development boards and their excellent-value Analog Discovery devices. Unfortunately, their original customer oriented reputation is rapidly deteriorating by adopting customer-unfriendly practices, probably as a result of their acquisition by National Instruments back in 2013. It is all very unfortunate.

Winding down pydwf

  • I have taken the Github repository private on 18 October 2023 to prevent uncoordinated forks.

  • I am considering what to do with the existing pydwf packages on PyPI and the documentation on ReadTheDocs. For now they will remain, but at some point in the future I may remove them.

Given all this, if you are considering using pydwf for new projects: I’d advice against it.

If you have a dependency on pydwf, this may be a good time to consider ways to cut that dependency.

I apologise for the inconvenience.

This is the documentation of pydwf, a Python package to control the Digilent Waveforms lineup of electronic test and measurement devices made by Digilent.

It wraps all functions of libdwf, the low-level C library provided by Digilent, in an easy-to-use, class-based Python API. Like the C library, the pydwf package supports Windows, Linux (Intel and ARM), and macOS.

The DWF library can be downloaded and installed from Digilent’s website.

The current release of pydwf is version 1.1.19. It is based on version 3.20.1 of libdwf, but it should also work with other versions.

The pydwf package comes with documentation and a number of ready-to-run examples that demonstrate how pydwf can be used to perform common and not-so-common tasks.

A command-line tool is provided that can be used, among other things, to list the available Digilent Waveforms devices and their configurations.

This section contains information about the project. Readers who want to learn how to use pydwf are referred to the API documentation.

Supported devices

The following devices can be controlled using pydwf:

The pydwf package has been extensively tested with the Analog Discovery 2, Digital Discovery, and ADP3450 devices. It should also work with the other devices listed, but these haven’t been tested. If you have such a device and encounter problems, please report an issue on the GitHub issue tracker.

Dependencies

The pydwf package requires Python 3.6 or higher.

In order for pydwf to work, recent versions of the Digilent Adept and Digilent Waveforms packages must be installed. These provide the C libraries that pydwf uses to interact with devices. Generally speaking, if the Waveforms GUI application provided by Digilent works on your system, you’re good to go.

pydwf depends on the numpy package to handle the considerable amount of data transferred between the PC and Digilent Waveforms devices when performing high-speed signal generation or capture operations.

Some of the examples depend on the matplotlib package, but pydwf itself will work without it.

Project hosting

The project repository and issue tracker are hosted on GitHub:

https://github.com/sidneycadot/pydwf/

Installation using pip

The installable package is hosted on PyPI:

https://pypi.org/project/pydwf/

This allows installation using the standard pip (or pip3) tool:

pip install pydwf

After installing pydwf, the following command will show the version of pydwf and the underlying DWF library:

python -m pydwf version

The following command will list all Digilent Waveforms devices connected to the system and, for each of them, list the supported configurations:

python -m pydwf list -c

Documentation

The project documentation is hosted on Read The Docs. The latest version can be reached via the following link:

https://pydwf.readthedocs.io/en/latest/

If desired, the documentation can also be installed locally after installing the package by executing the following command:

python -m pydwf extract-html-docs

This will create a local directory called pydwf-docs-html containing the project documentation in HTML format.

Alternatively, a PDF version of the manual can be extracted as well:

python -m pydwf extract-pdf-manual

Examples

The Python examples can be installed locally after installing the pydwf package by executing the following command:

python -m pydwf extract-examples

This will create a local directory called pydwf-examples containing the Python examples that demonstrate many of the capabilities of the Digilent Waveforms devices and pydwf.

These examples are intended as a useful starting point for your own Python scripts. See the examples overview for more information.

Acknowledgements

Many thanks to Digilent for making the awesome Waveforms devices, and to provide not only the very capable Waveforms GUI software, but also the cross-platform SDK on which pydwf is based. Great work!

My company Jigsaw B.V. supported the effort to make pydwf. If you need any kind of high-tech software (with or without Digilent Waveforms devices), and you’re somewhat in the vicinity of Delft, The Netherlands, give us a call.

Thanks to my longtime friend Pepijn for proof-reading the documentation and providing his perspective on several issues that came up while implementing pydwf. The package is a lot better because of your help.

Lastly, thanks to Petra for your patience with having all kinds of electronics equipment in the living room while developing this package (and before, and after, …). You may not share my enthusiasm for this particular hobby, but I am very fortunate that you are at least enthusiastic about my enthusiasm, if that makes sense.

— SC