PulseView

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.

Status

  • 13/11/14 - Lots of outside contributions coming in right now.
  • 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.

Source

Main Repository

Browse Source

git://sigrok.org/pulseview.git

Personal Pre-Release Git Repository

Browse Source

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

WARNING: Branches may be rebased from time to time.

Build Instructions

Ubuntu

Prerequisites

  • 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

Bootstrap

 $  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 .

Build

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

Test

 $ ./pulseview

TODO

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

  • Toolbars
    • Removed the menu bar, replace it with a menu button.
    • Remove docking functionality from toolbars.
  • Add missing config bindings
  • Add crop button
  • Add v-scale control (think about trigger level user interraction).
  • New drawing algorithms
  • Fast/cached drawing in analog signal
  • Add seeking between annotations of the same class - in an advanced tooltip, or word-style mini-toolbar
  • Add annotation class show/hiding, also add in the above mentioned advanced tooltop or minit-toolbar
  • Don't destroy structure when adding decode traces
  • Cursors snap to edges.
  • Let the user hold down ctrl or shift while selecting a region with the main mouse button. Then zoom in on that section.
  • Resolution independence and high-dpi

Stalled

Here are some tasks that are stuck for various reasons:

  • 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.
  • 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.

Work Plans

Just so I do things in the right order…

Flags/Cursors

  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. Replace std::pair<pv::view::Cursor, pv::view::Cursor> with a pv::view::Cursors class (derrived from std::pair?)
  6. 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).
  7. Add seek buttons to jump between cursors. View should centre on cursors.
  8. 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?)
  9. Add drag handling for dragging the v-line in the viewport.

Posterity Shots

Sketches

Nothing was found.

Sightings

pulseview.txt · Last modified: 2016/07/22 17:50 (external edit)