PulseView
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
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
$ 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
Test
TODO
See the main project TODO list at http://sigrok.org/wiki/TODO#pulseview
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
Add existing flag patches
Draw flag labels with a text as with cursors.
Expose the lists of time markers as a list in pv::view::View.
Draw all cursor labels by taking the list, sorting in time, filtering ones that are out of view, then iterate through the list.
Replace std::pair<pv::view::Cursor, pv::view::Cursor> with a pv::view::Cursors class (derrived from std::pair?)
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).
Add seek buttons to jump between cursors. View should centre on cursors.
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?)
Add drag handling for dragging the v-line in the viewport.
Posterity Shots
Sketches
Sightings