Difference between revisions of "TODO"

From sigrok
Jump to navigation Jump to search
m
 
(273 intermediate revisions by 12 users not shown)
Line 1: Line 1:
This is a random list of TODO items for the code and/or ideas for improvements.
== libsigrok ==


== General ==
=== Hardware support ===


* Possibly remove the dependency on glib and gthread (various reasons), at least in libsigrok, probably also in sigrok-cli.
* Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver: fx2lafw, zeroplus-logic-cube, others(?)
** A new linked list implementation must be found, or written, that duplicates the important parts of glib's GSList (singly-linked list).
* Chronovu LA8/LA16 driver: support multiple devices properly (currently only one is supported).
** However, glib solves a number of portability issues for us, so it'll probably stay.
* sigrok uses uint64_t as an internal datatype to represent a sample, limiting the number of probes on supported hardware to 64. But high-end logic analyzers can have hundreds of probes. A solution would be to switch to either a roll-our-own byte array type, or use [http://gmplib.org/ GMP]. In any case, the overhead of switching over shouldn't be too bad: the filter code and frontend datafeed callback functions will need to use it, but hardware drivers should have enough with a couple of lightweight wrappers.


== sigrok 0.1 release-critical issues ==
=== Input modules ===


sigrok 0.1 comprises only sigrok-cli, i.e. GUI and protocol decoders are '''not''' part of the release.
* Add OLS input module support.
* Add gnuplot input module support ([[User:Uwe Hermann|Uwe Hermann]]).


* Ensure that segfaults are rare / non-existing in CLI.
=== Miscellaneous ===
* Windows port
** At least a working sigrok-cli with the demo driver is required.
** Implement anykey.c replacement.
* Update sigrok-cli man page.
** Document --continuous option.
** Document --input-file option.
** Add examples of basic usage with -o samplerate.
* <s>Make sure all output modules handle unknown DF types gracefully (problem in event handlers)</s>
* Temporarily remove non-functional options from CLI (PDs, load session).
* sigrok-cli: pack list of drivers, modules etc into one option which displays all of those. Update manpage accordingly.
* libsigrok, libsigrokdecode: Proper shared libs setup and version numbers to be able to handle API/ABI compatibility issues sanely later.
* Ensure that "make distcheck" works fine, and that you can build sigrok using that generated tarball (i.e. no missing files etc).


== libsigrok ==
* Check all public API calls to see whether they need an sr_context parameter.
 
* sr_errno:
* Fix/workaround libusb 1.0 [[Windows]] port issues:
** Most functions should return SR_OK or SR_ERR_* (same for SRD_OK etc).
** Device renumeration not yet supported (needed for FX2 based LAs)
** Most backend functions return status as an integer, which is SR_OK if all went well, or SR_ERR_* if an error occurred.
** File descriptor / socket based polling not supported in Windows. Workaround (short-term): Use a thread in sigrok.
** However, there is no way to pass any information back as to what went wrong &mdash; and this is important for user-friendliness.
* Session loading from file.
* sigrok_errno:
** Most backend functions return status as an integer, which is SIGROK_OK if all went well, or SIGROK_ERR_* and similar if an error occurred.
** However there is no way to pass any information back as to what went wrong &mdash; and this is important for user-friendliness.
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, "unsupported device") is better.
** Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, "unsupported device") is better.
** Both the cmdline and GUI interfaces need this, really, so it should be a backend library thing.
* Support specifying the firmware directory at runtime.
* <s>configure: Add --enable-hw-foo options to enable/disable support for every device at compile-time. This is useful for different platforms where not all libs are fully supported/available yet (libusb, libftdi, etc), for example.</s>
* Make sure all optional components are really optional in the build system:
** <s>Link against libftdi/libusb/etc only if one of the enabled drivers needs those.</s>
** Only require Python if the users wants protocol decoders, the rest should also build/compile/run fine without Python installed.
** ...
* Add output for latex package [http://www.ctan.org/tex-archive/graphics/pgf/contrib/tikz-timing tikz-timing]


== libsigrokdecode ==
== libsigrokdecode ==
==== Major features ====
* Add high-precision timer to runtc
* Add annotation mime types
* Add annotation metadata (type/value/unit) to allow clients to format the value as the user desires (ASCII/dec/hex/bin/whatever)


* <s>Keep this independent of libsigrok and any logic analyzer hardware. It should work purely on streams / buffers of bytes to be usable by other projects.</s>
==== Other ====
 
* Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs.
== Hardware drivers ==
* Test/implement multiple inputs support.
 
* Python exception handling in libsrd: add full traceback support with srd_dbg().
* <s>Bus/driver-independent device instance struct, to replace usb_device_instance and serial_device_instance. Once this is done, device instance-specific information can be cleanly separated and tacked on to the generic device instance:</s>
** <s>Vendor/model/version scheme in hardware drivers.</s>
** Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver.
 
{{fontcolor|green|Bert is working on this.}}
 
==== Demo driver ====
 
<s>It would be good if sigrok would ship with a built-in driver that always works, regardless of hardware connected. This driver would be configurable to provide a clock on a virtual pin, with configurable frequency. It could support multiple of these, at different frequencies.
 
In addition to giving anyone something to do with sigrok to try it out, this may also have some use cases outside of this: perhaps as a reference clock, next to a live capture.
 
Since this driver only needs to change to 0/1 at a configurable interval, and the interval is exactly the same as the count of the samples in the datafeed it outputs, the signal it generates would thus be 100% perfect, making it an interesting reference.</s>
 
==== Open-source firmware for the FX2 devices ====
 
The Cypress FX2-based devices, such as the Saleae Logic and the USBee SX, use only a minimal vendor-provided firmware. The only thing it really does is set the sample rate and turn on the chip's auto-mode. Nevertheless, the vendors provide the firmware as a binary blob, with no source.
 
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:
 
* [http://sdcc.sourceforge.net/ SDCC], the Small Devices C Compiler, is a compiler specifically suited to small MCUs, and has support for the 8051 core in the FX2.
* [http://allmybrain.com/2008/12/05/an-open-source-library-for-writing-firmware-on-the-cypress-fx2-with-sdcc/ fx2lib] is an open-source library for writing firmware on the FX2. It has a number of interesting functions, including implementing custom USB vendor commands.
* [http://gnuradio.org/ GNU Radio]'s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.
 
[[User:Uwe Hermann|Uwe Hermann]] is working on an open-source FX2 firmware for use with various logic analyzers.


== sigrok-cli ==
== sigrok-cli ==


* Implement full support for all possible trigger types to be specified via the command-line.
== fx2lafw ==
 
== sigrok-gui ==
 
* ...
 
== Decoders ==


* Find/evaluate alternatives to '''psyco''' for performance improvements on non-x86 architectures.
* Analog sampling: 1-channel, 2-channel, voltage meter
* Trigger pin
* Clock input
* Clock output
* Frequency/pulse counter
* Signal generator
* Fix power consumption during enumeration.
** Non-LP FX2's consume more than 100mA during enumeration. This is outside of the USB specification
** Official workaround is to enumerate first as full-speed, then as high-speed. This is overkill for sigrok.
** Investigate putting the CPU to sleep (except for processing interrupts) until enumerated.


== Windows installer ==
== PulseView ==


* Add support for downloading/installing the Python Windows installer.
* Deduplicate property setting functionality between SamplingBar and DeviceOptions - make SamplingBar a properties container
* ...
* Analog interpolation (cosine? sinc? some kind of interpolation filter?)
* Signal overview
* Transition coding


== Code quality and build ==
== sigrok-meter ==


* <s>Consistently use uint64_t for large data types such as samplerate, number of samples, etc.</s>
* Make the list of measurements look nicer without using too much additional space.
* Add graphs.
** [http://www.pyqtgraph.org/ PyQtGraph] looks like a nice graphing library.
*** Works with PyQt and PySide.
*** Pure python, easy to install.
*** Few dependencies: '''scipy''' is not required any more in the upcoming version 0.9.9, '''numpy''' is already a dependency of the python bindings.
*** From looking at the examples, it seems more than fast enough for our requirements.
** Pass all samples (not only the most recent one) to the GUI thread and store them there.
*** The packet payload object is currently not thread save.

Latest revision as of 13:11, 19 July 2020

libsigrok

Hardware support

  • Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver: fx2lafw, zeroplus-logic-cube, others(?)
  • Chronovu LA8/LA16 driver: support multiple devices properly (currently only one is supported).

Input modules

  • Add OLS input module support.
  • Add gnuplot input module support (Uwe Hermann).

Miscellaneous

  • Check all public API calls to see whether they need an sr_context parameter.
  • sr_errno:
    • Most functions should return SR_OK or SR_ERR_* (same for SRD_OK etc).
    • Most backend functions return status as an integer, which is SR_OK if all went well, or SR_ERR_* if an error occurred.
    • However, there is no way to pass any information back as to what went wrong — and this is important for user-friendliness.
    • Perhaps an error code is not enough; maybe something like sigrok_errno(errorcode, "unsupported device") is better.
  • Support specifying the firmware directory at runtime.

libsigrokdecode

Major features

  • Add high-precision timer to runtc
  • Add annotation mime types
  • Add annotation metadata (type/value/unit) to allow clients to format the value as the user desires (ASCII/dec/hex/bin/whatever)

Other

  • Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs.
  • Test/implement multiple inputs support.
  • Python exception handling in libsrd: add full traceback support with srd_dbg().

sigrok-cli

fx2lafw

  • Analog sampling: 1-channel, 2-channel, voltage meter
  • Trigger pin
  • Clock input
  • Clock output
  • Frequency/pulse counter
  • Signal generator
  • Fix power consumption during enumeration.
    • Non-LP FX2's consume more than 100mA during enumeration. This is outside of the USB specification
    • Official workaround is to enumerate first as full-speed, then as high-speed. This is overkill for sigrok.
    • Investigate putting the CPU to sleep (except for processing interrupts) until enumerated.

PulseView

  • Deduplicate property setting functionality between SamplingBar and DeviceOptions - make SamplingBar a properties container
  • Analog interpolation (cosine? sinc? some kind of interpolation filter?)
  • Signal overview
  • Transition coding

sigrok-meter

  • Make the list of measurements look nicer without using too much additional space.
  • Add graphs.
    • PyQtGraph looks like a nice graphing library.
      • Works with PyQt and PySide.
      • Pure python, easy to install.
      • Few dependencies: scipy is not required any more in the upcoming version 0.9.9, numpy is already a dependency of the python bindings.
      • From looking at the examples, it seems more than fast enough for our requirements.
    • Pass all samples (not only the most recent one) to the GUI thread and store them there.
      • The packet payload object is currently not thread save.