Difference between revisions of "TODO"

From sigrok
Jump to navigation Jump to search
m (Test.)
m
 
(218 intermediate revisions by 11 users not shown)
Line 1: Line 1:
== sigrok 0.2 ==
== libsigrok ==


* <s>Support OLS file format output (https://github.com/jawi/ols/wiki/OLS-data-file-format).</s>
=== Hardware support ===
* <s>CLI: Fix save session</s>
* <s>implement load session.</s>
* <s>Don't initialize and scan for hardware on all plugins if the '''-d <plugin>''' option is used; instead, only initialize the specified plugin.</s>
* Make sure all combinations of --enable-*/--disable-* options works for configure.
** <s>There are possible issues if no libusb-device is enabled (e.g. only OLS or only demo).</s>
** There may be issue if none of the drivers is enabled, print useful error in that case(?)
* <s>output modules shouldn't assume the device has SR_DI_CUR_SAMPLERATE, and segfault when they get NULL -- HWCAPs should be checked for SR_HWCAP_SAMPLERATE.</s>
* libsigrok.h/libsigrokdecode.h: Only list public API functions.
** <s>Prefix all public functions with sr_ or srd_.</s>
* Windows port: Implement anykey.c replacement.
* <s>CLI: Restructure command line option syntax.</s>
* <s>libsigrok, libsigrokdecode: Proper shared libs setup and version numbers to be able to handle API/ABI compatibility issues sanely later.</s>
** <s>Also, provide correct and complete libsigrok.pc/libsigrokdecode.pc files.</s>
* <s>Fix segfaults in protocol decoders, e.g. '''sigrok-cli --samples 2050 -a transitioncounter'''.</s>
* <s>demo driver: Add a mechanism to set/report a samplerate, needed for some output file formats and other stuff.</s>
** hex output: Not all lines/columns are of the same length (as they are with real LAs).
** VCD: All samplenumbers are 0 (instead of the proper samplecount).
** OLS, gnuplot: Hangs on MinGW for some reasons (not sure if related).
* Finish protocol decoder API design.
* CLI: Eliminate all printing to stdout, only sample data or decoder output should end up there. Error/debug messages should go to stderr always.
* MinGW: Fix Python path decoder issues due to Windows vs. Linux path specification.


== sigrok 0.3 ==
* 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).


* stackable protocol decoder implementation
=== Input modules ===
* modular filter system
** take arguments in the regular thing:key=value format
** integrate current probe compression filter
** resampling module: sample up/down based on factor argument
** noise filter: filter out pulses shorter than the samplerate's period


== Before 1.0 ==
* Add OLS input module support.
* Add gnuplot input module support ([[User:Uwe Hermann|Uwe Hermann]]).


* all output modules should use GString API instead of estimating output size
=== Miscellaneous ===
* VCD input modules
* OLS format input module


== Future ==
* Check all public API calls to see whether they need an sr_context parameter.
 
* udev:
** Make udev optional, only build MSO driver if it's available
** have OLS driver use udev if available, fall back to serial port probing otherwise
** Find alternative to udev for windows and macos
* <s>Add support for downloading/installing the Python Windows installer.</s>
* Fix/workaround libusb 1.0 [[Windows]] port issues:
** Device renumeration not yet supported (needed for FX2 based LAs)
** File descriptor / socket based polling not supported in Windows. Workaround (short-term): Use a thread in sigrok.
* Make sure all optional components are really optional in the build system:
** Only require Python if the users wants protocol decoders, the rest should also build/compile/run fine without Python installed.
* 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.
* sr_errno:
* sr_errno:
** Most functions should return SR_OK or SR_ERR_* (same for SRD_OK etc).
** 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_* and similar if an error occurred.
** 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 &mdash; and this is important for user-friendliness.
** 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.
* Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver: <s>asix-sigma</s>, <s>demo</s> (not relevant), <s>link-mso19</s>, openbench-logic-sniffer, saleae-logic, zeroplus-logic-cube
* Support specifying the firmware directory at runtime.
* Python bindings for libsigrok and 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)
 
==== 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


== Contributors wanted ==
== sigrok-meter ==


* Add output for latex package [http://www.ctan.org/tex-archive/graphics/pgf/contrib/tikz-timing tikz-timing].
* Make the list of measurements look nicer without using too much additional space.
* Linux distro packages for non-Debian distros.
* Add graphs.
* FreeBSD packages/ports.
** [http://www.pyqtgraph.org/ PyQtGraph] looks like a nice graphing library.
* Open-source firmware for the FX2 devices
*** Works with PyQt and PySide.
<blockquote>
*** Pure python, easy to install.
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.
*** Few dependencies: '''scipy''' is not required any more in the upcoming version 0.9.9, '''numpy''' is already a dependency of the python bindings.
It would be great if sigrok could ship with an own firmware implementation for these devices. Some links:
*** From looking at the examples, it seems more than fast enough for our requirements.
** [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.
** Pass all samples (not only the most recent one) to the GUI thread and store them there.
** [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.
*** The packet payload object is currently not thread save.
** [http://gnuradio.org/ GNU Radio]'s USRP2 board has an FX2 on it, and GNU Radio has extensive custom firmware for it.
</blockquote>

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.