See the main project page at sigrok.org.

PulseView (formally codenamed sigrok-qt2) is a new GUI for sigrok, that I've been working on for a while now. I want to provide something decisively better than sigrok's current two GUIs sigrok-gtk, and sigrok-qt, both of which are unmaintained, and which in my opinion are better abandoned. My goal is to take the simplest approach to getting a functional GUI ready. I will optimize the implementation and apply polish later, but for now I want to close the circle to make a functional GUI as soon as I can.


  • 25/04/13 - I've been blogging about PulseView.
  • 24/04/13 - We're very close to having a release-worthy application now. Almost all bugs have been closed. In addition to bug fixing, thorough testing/dogfooding is needed.
  • 25/03/13 - Analog support is better and has an O(log N) renderer, but still no means to scale the signal. Y-scaling can be supported by adding a context bar, which will also be the place to put triggering controls etc. in the future, but I'm undecided whether this should be undertaken as part of v0.1. The manual connection dialog works, which means the OLS can be used. Many drivers show problems that have never been seen before because of the different usage pattern of PulseView to sigrok-cli.
  • 12/12/13 - Decoding support has been temporarily halted because there is no easy way to enumerate PD arguments. I'm trying to keep a v0.1 release in view - the remaining bugs/features for the release are tracked here. Analog support is rather incomplete. At the moment it is not fit to release so there's a lot of work to do here. I'm starting by reintegrating my work on supporting analog from USBee AX.
  • 31/12/12 - Binding for HWCAP is now present. I now plan to integrate decoders.
  • 20/12/12 - Basic analog support has been merged. The next priority is a data driver property GUI needed for device paramters, and later for decoder parameters.
  • 17/12/12 - Initial analog proof-of-concept published.
  • 09/09/12 - PulseView has been publised at sigrok.org
  • 06/09/12 - Published a new patch set including scroll bars, many fixes for the O(log N) renderer, and removed OpenGL from pv::view::Viewport
  • 03/09/12 - The initial release repository has now been published at github. This consists of the original development branch orphaned off as an independant project containing only pulseview. This should be cloned at sigrok.org within the next few days.
  • 07/08/12 - I've submitted the branch ready to be merged into the sigrok mainline. There has been a large number of sigrok api changes lately. Bert Vermeulen has volunteered to rebase my branch, and patch up the incompatibilities. He says he can try and look at it this week. I'm quite busy with other things at the moment so progress will not be fast, however once the code is merged it will be much easier for others to work on it.


Main Repository

Browse Source


Personal Pre-Release Git Repository

Browse Source

git://github.com/jhol/pulseview.git : public

WARNING: This branch may be rebased from time to time.

Build Instructions



  • You will also need to install boost and cmake with the following command:
 $ sudo apt-get install cmake libqt4-dev libboost-dev libboost-test-dev libboost-thread-dev libboost-system-dev


 $  cmake . 
  • Use PKG_CONFIG_PATH=<prefix-of-libsigrok-installation>/lib/pkgconfig/ if libsigrok and libsigrokdecode are installed to a non-standard prefix.
  • To change the install prefix: cmake -DCMAKE_INSTALL_PREFIX=<prefix-dir> .
  • To make a non-stripped debug build: cmake -DCMAKE_BUILD_TYPE=Debug .
  • To enable unit tests: cmake -DENABLE_TESTS=y .
  • To disable -Werror: cmake -DDISABLE_WERROR=y .
  • To build with clang: CXX=clang++ cmake .


 $ make
  • make VERBOSE=1 to show compiler arguments.


 $ ./pulseview


See the main project TODO list at http://sigrok.org/wiki/TODO#pulseview

  • Release v0.2. The remaining bugs and features are tracked here
  • Implement probe groups


Here are some tasks that are stuck for various reasons:

  • Support for save. I have patches that remove sr_data_store from libsigrok, and replace with data feed callbacks, but I can't merge them because sigrok-cli hasn't been ported to this new scheme.
  • Triggering: I can't design a UI for functionality that is rather undefined. It might be possible to go ahead with a simple GUI e.g. rising edge, but nothing more - and even trying to implement something simple might be a waste of time if triggering massively changes.
  • Support Multiple Analog Channels: Currently there is no way to demultiplex multiple analog streams. Should be discussed at 29c3. This task is possible to complete simply by tracking the order that analog packets are emitted. Chained packets have been discussed at 29c3
  • Full Support for Import
    • There is no way to get the file extension for an input format, which is a problem for populating the file dialog filter.
    • Parameters should be exposed as GVariants.

Available Tasks

These tasks would be easy for someone to pick up:

  • Help close bugs for the v0.1 release.

General TODO

Work Plans

Just so I do things in the right order…

Signal Management leading towards Signal Decoding

  1. Pull in signal label colour picker context menu entry. (In the long run I want a Tango popup palette in the context menu http://stackoverflow.com/questions/12987802/popup-colour-menu-in-qt. But this will take a chunk of work. It's not critical, so it should be deferred for later.)
  2. Move pv::Signal, and pv::LogicSignal into pv::view namespace.
  3. Add code to (multi) select signals.
  4. Add context menu entries to hide signals.
  5. Add a menu to show/hide signals.
  6. Add menu of decoders.
  7. Add a decoder config dialog. Need a parameters dialog - same problem as for device config.
  8. Add decoder config bindings - these need to be enumerated from libsigrokdecode
  9. Add a pv::view::Decode signal.
  10. Add initial decode manager
  11. Draw decode blobs
  12. Make decode manager threaded
  13. Add selection of annotations


  1. Add existing flag patches
  2. Draw flag labels with a text as with cursors.
  3. Expose the lists of time markers as a list in pv::view::View.
  4. Draw all cursor labels by taking the list, sorting in time, filtering ones that are out of view, then iterate through the list.
  5. Track the flag/cursor which is being mouse hovered over, exclude from being drawn, but draw at the end so it pops up over other flags.
  6. Replace std::pair<pv::view::Cursor, pv::view::Cursor> with a pv::view::Cursors class (derrived from std::pair?)
  7. Add pv::view::Cursors functionality to display time delta. (In future we may want to have a drag handler here so we can drag cursors together).
  8. Add seek buttons to jump between cursors. View should centre on cursors.
  9. Add “Add Flag button”, this should create a marker and set the “_grabbed_marker”, so the marker is being dragged from the moment of creation. (How to make Ruler have drag focus?)
  10. Add drag handling for dragging the v-line in the viewport.

Posterity Shots

12/04/2012 - Hello World from Android

Nice work marcus_c!

01/01/2014 - An MSO Demo signal and some Parallel protocol decoding

05/10/2013 - Pretty Colours with Popups

05/09/2013 - Better Decode Visuals

03/09/2013 - First Decode

17/03/2013 - megal0manic Sampling an AVR ISP on a Seagate Dockstar

17/03/2013 - First Attempt at O(log N) analog

14/03/2013 - More Analog Sampling from an NE555

31/12/2012 - Decode Dialog

24/12/2012 - First Analog Sampling from an AX

22/12/2012 - First Property Binding

17/12/2012 - First Analog Support

01/11/2012 - Basic Cursors

06/10/2012 - Scroll Bars

09/07/2012 - Toolbar

30/06/2012 - First Sampling

24/06/2012 - First Time Index Ruler Implementation

23/06/2012 - First Signal Labels

11/06/2012 - First Traces with OpenGL


pulseview.txt · Last modified: 2014/04/12 11:39 by admin