Difference between revisions of "TODO"
Jump to navigation
Jump to search
Uwe Hermann (talk | contribs) m (→sigrok 0.3) |
Uwe Hermann (talk | contribs) m (Remove resolved 28c3 issues, move rest to other sections. Remove other resolved items, too.) |
||
Line 1: | Line 1: | ||
== sigrok 0.3 == | == sigrok 0.3 == | ||
* Remove time/duration left-overs from libsigrok. | * Remove time/duration left-overs from libsigrok. | ||
* stackable protocol decoder implementation | * stackable protocol decoder implementation | ||
** | ** Test/implement '''config''' PD method etc. | ||
** Use 'bytes' and/or 'memoryview' and the new Python 3 buffer API. | |||
** PD performance: | |||
*** How to pass (and what exactly, and in which format) samples and already decoded protocol packets | |||
**** From C to Python (i.e. from libsigrokdecode/controller to the lowest-level decoder) | |||
**** From Python to Python (i.e., from one decoder to the next in the stack) | |||
**** From Python to C (i.e., from a decoder back to libsigrokdecode, which then hands it over to the CLI/GUI, which write it to file or display it in the GUI). | |||
** enforce input/output options in PDs: don't send logic if PD only accepts i2c etc. | ** enforce input/output options in PDs: don't send logic if PD only accepts i2c etc. | ||
** free all instances at end of session | ** free all instances at end of session | ||
** <s>proper python exception handling in libsrd: output only error message with srd_err(), and full traceback with srd_dbg()</s> | ** <s>proper python exception handling in libsrd: output only error message with srd_err(), and full traceback with srd_dbg()</s> | ||
** Annotations need an additional 'type' field, so that PDs/GUIs can differentiate between different output "things". | ** Annotations need an additional 'type' field, so that PDs/GUIs can differentiate between different output "things". | ||
*** Types are not yet defined, but could be things like DEFAULT, ERR, WARN, DBG, and others. | *** Types are not yet defined, but could be things like DEFAULT, ERR, WARN, DBG, and others. | ||
** Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs. | ** Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs. | ||
** Test/implement multiple inputs support. | ** Test/implement multiple inputs support. | ||
Line 69: | Line 35: | ||
** VCD: All samplenumbers are 0 (instead of the proper samplecount). | ** VCD: All samplenumbers are 0 (instead of the proper samplecount). | ||
** OLS, gnuplot: Hangs on MinGW for some reasons (not sure if related). | ** OLS, gnuplot: Hangs on MinGW for some reasons (not sure if related). | ||
* CLI: Eliminate all printing to stdout, only sample data or decoder output should end up there. Error/debug messages should go to stderr always. | * CLI: Eliminate all printing to stdout, only sample data or decoder output should end up there. Error/debug messages should go to stderr always. | ||
* Run the code receiving the samples as quickly as possible, run output format code and other non-timing-critical stuff (protocol decoders) in an extra thread. The problem is nicely visible with FX2-based logic analyzers, the longer an output format takes to produce its output, the better your chances to get "oops, I just lost samples" errors. | * Run the code receiving the samples as quickly as possible, run output format code and other non-timing-critical stuff (protocol decoders) in an extra thread. The problem is nicely visible with FX2-based logic analyzers, the longer an output format takes to produce its output, the better your chances to get "oops, I just lost samples" errors. | ||
Line 83: | Line 48: | ||
* Finish [[fx2lafw]] (open-source FX2 firmware). | * Finish [[fx2lafw]] (open-source FX2 firmware). | ||
* Factor out input/output file formats to libsigrokfile. | * Factor out input/output file formats to libsigrokfile. | ||
* We will have an extra datafeed type SR_DF_LOGIC_INDEXED, which contains [samplenumber, sample] instead of just raw samples. Samplenumber is a uint64_t, and sample is unchanged (unitsize). Frontends must be able to handle both, and modular filters in libsigrok or the sampling filter in libsigrokdecode may convert from SR_DF_LOGIC to SR_DF_LOGIC_INDEXED at any time. | |||
* ANT8/18e unified driver | |||
* Processing raw logic vs. everything else up the stack: (optionally) deliver pre-sampled by clock or rate? <blockquote>Yes, the controller will deliver a clock- or rate-sampled feed instead, if the PD requests this via a configuration option.</blockquote> | |||
== Before 1.0 == | == Before 1.0 == |
Revision as of 19:57, 28 January 2012
sigrok 0.3
- Remove time/duration left-overs from libsigrok.
- stackable protocol decoder implementation
- Test/implement config PD method etc.
- Use 'bytes' and/or 'memoryview' and the new Python 3 buffer API.
- PD performance:
- How to pass (and what exactly, and in which format) samples and already decoded protocol packets
- From C to Python (i.e. from libsigrokdecode/controller to the lowest-level decoder)
- From Python to Python (i.e., from one decoder to the next in the stack)
- From Python to C (i.e., from a decoder back to libsigrokdecode, which then hands it over to the CLI/GUI, which write it to file or display it in the GUI).
- How to pass (and what exactly, and in which format) samples and already decoded protocol packets
- enforce input/output options in PDs: don't send logic if PD only accepts i2c etc.
- free all instances at end of session
proper python exception handling in libsrd: output only error message with srd_err(), and full traceback with srd_dbg()- Annotations need an additional 'type' field, so that PDs/GUIs can differentiate between different output "things".
- Types are not yet defined, but could be things like DEFAULT, ERR, WARN, DBG, and others.
- Test/implement support for multiple outputs of one PD, and stacking different additional PDs on those outputs.
- Test/implement multiple inputs support.
- CLI: Support for printing/selecting a specific annotation for output (or multiple).
- APIs:
- PDs: Change extra_probes to optional_probes (or a shorter name for that).
- srd: All public functions/names must have srd_ prefix.
- all libs: Add good Doxygen documentation, validate/review APIs, etc. etc.
- change all code to start counting probes at 0, not 1.
- Get rid of the use of manual polling of FDs, which is not portable (doesn't work on Windows). Use g_poll() instead (which spawns a new thread on Windows).
Mac OS X: B460800 is not available it seems. Find the correct header (if any) and/or find a (possibly platform-specific) workaround, or drop this on Mac OS X.- Add a --start-sampling (TODO: Better name?) option, which just starts sampling with the supplied or default samplerate. Contrary to --time or --samples you don't need to explicitly specify a duration or number of samples here, that's automatically determined by the available memory of the logic analyzer and the selected samplerate.
- TODO: Similar to --continuous? Merge both?
Make sure all combinations of --enable-*/--disable-* options works for configure.There may be issue if none of the drivers is enabled, print useful error in that case(?)
- libsigrok.h/libsigrokdecode.h: Only list public API functions.
- Windows port:
- Implement anykey.c replacement.
- 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).
- CLI: Eliminate all printing to stdout, only sample data or decoder output should end up there. Error/debug messages should go to stderr always.
- Run the code receiving the samples as quickly as possible, run output format code and other non-timing-critical stuff (protocol decoders) in an extra thread. The problem is nicely visible with FX2-based logic analyzers, the longer an output format takes to produce its output, the better your chances to get "oops, I just lost samples" errors.
- Hardware drivers: Make specification of triggering capabilities more detailed, so that frontends/GUIs can auto-generate GUI forms out of that metadata.
sigrok 0.4
- 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
- Finish fx2lafw (open-source FX2 firmware).
- Factor out input/output file formats to libsigrokfile.
- We will have an extra datafeed type SR_DF_LOGIC_INDEXED, which contains [samplenumber, sample] instead of just raw samples. Samplenumber is a uint64_t, and sample is unchanged (unitsize). Frontends must be able to handle both, and modular filters in libsigrok or the sampling filter in libsigrokdecode may convert from SR_DF_LOGIC to SR_DF_LOGIC_INDEXED at any time.
- ANT8/18e unified driver
- Processing raw logic vs. everything else up the stack: (optionally) deliver pre-sampled by clock or rate?
Yes, the controller will deliver a clock- or rate-sampled feed instead, if the PD requests this via a configuration option.
Before 1.0
- all output modules should use GString API instead of estimating output size
- VCD input modules
- OLS format input module
Future
- 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
- 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 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:
- 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.
- 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.
- Clean up device-specific globals in hardware drivers, to properly permit multiple devices per driver:
asix-sigma,demo(not relevant),link-mso19,openbench-logic-sniffer, saleae-logic, zeroplus-logic-cube - Python bindings for libsigrok and libsigrokdecode.
Contributors wanted
- Add output for latex package tikz-timing.
- Add output for browser waveform viewer/editor written in javascript/JSON called WaveDrom.
- Linux distro packages for non-Debian distros.
- FreeBSD packages/ports.