From: poljar (D. J. <po...@po...> - 2014-01-28 16:13:20
|
This patch adds zsh completion for sigrok-cli to the contrib directory. The completion is not fully finished, mainly protocol decoder options and annotations are done only for the spi protocol decoder. Config options need also some more work. --- contrib/sigrok-cli-zsh-completion.zsh | 280 ++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 contrib/sigrok-cli-zsh-completion.zsh diff --git a/contrib/sigrok-cli-zsh-completion.zsh b/contrib/sigrok-cli-zsh-completion.zsh new file mode 100644 index 0000000..d5f7f80 --- /dev/null +++ b/contrib/sigrok-cli-zsh-completion.zsh @@ -0,0 +1,280 @@ +#compdef sigrok-cli + +_drivers() { + local -a _driver_list + + for _section in ${(ps:\n\n:)"$(_call_program drivers "sigrok-cli --version")"}; do + if [[ $_section == *drivers:* ]]; then + _raw_drivers=${_section##*drivers:} + for _line in ${(f)_raw_drivers}; do + _driver=(${(s: :)_line}) + _driver_name=$_driver[2,-1] + _driver_list+=($_driver[1]:$_driver_name) + done + fi + done + + _describe 'supported drivers' _driver_list +} + +_input_formats() { + local -a _input_format_list + + for _section in ${(ps:\n\n:)"$(_call_program drivers "sigrok-cli --version")"}; do + if [[ $_section == *input\ formats:* ]]; then + _raw_formats=${_section##*formats:} + for _line in ${(f)_raw_formats}; do + _format=(${(s: :)_line}) + _format_name=$_format[2,-1] + _input_format_list+=($_format[1]:$_format_name) + done + fi + done + + _describe 'supported input formats' _input_format_list +} + +_bits_opts() { + _values -S = 'bits output options' \ + 'width[Text width]:bits opts:(64 80 120)' \ +} + +_output_formats() { + _values -S : 'supported output formats' \ + 'bits[Bits]::bits opts:_bits_opts' \ + 'hex[Hexadecimal]::bits opts:_bits_opts' \ + 'ascii[ASCII]' \ + 'binary[Raw binary]' \ + 'vcd[Value Change Dump (VCD)]' \ + 'ols[OpenBench Logic Sniffer]' \ + 'gnuplot[Gnuplot]' \ + 'chronovu-la8[ChronoVu LA8]' \ + 'csv[Comma-separated values (CSV)]' \ + 'analog[Analog data]' \ +} + +_decoder_stack() { + local -a _decoder_list + + for _section in ${(ps:\n\n:)"$(_call_program drivers "sigrok-cli --version")"}; do + if [[ $_section == *decoders* ]]; then + _raw_decoders=${_section##*decoders:} + for _line in ${(f)_raw_decoders}; do + _decoder=(${(s: :)_line}) + _decoder_name=$_decoder[2,-1] + _decoder_list+=("$_decoder[1][$_decoder_name]") + done + fi + done + + _values -s , 'supported decoders' $_decoder_list[@] +} + +_spi_opts() { + _values -s : 'spi decoder options' \ + 'cpol[Clock polarity (default 0)]:polarity:(0 1)' \ + 'bitorder[Bit order within the SPI data (default msb-first)]:bit order:(msb-first lsb-first)' \ + 'cs_polarity[CS# polarity (default active-low)]:polarity:(active-low active-high)' \ + 'wordsize[Word size of SPI data (default 8)]:wordsize:(8 9 10)' \ + 'cpha[Clock phase (default 0)]:clock phase:(0 1 2)' \ +} + +_decoders() { + _values -s , -S : 'supported protocol decoders' \ + 'ds1307[Dallas DS1307]' \ + 'mlx90614[Melexis MLX90614]' \ + 'parallel[Parallel sync bus]' \ + 'onewire_network[1-Wire serial communication bus (network layer)]' \ + 'edid[Extended Display Identification Data]' \ + 'i2s_dump[I2S dump]' \ + 'i2s[Integrated Interchip Sound]' \ + 'guess_bitrate[Guess bitrate/baudrate]' \ + 'rtc8564[Epson RTC-8564 JE/NB]' \ + 'uart_dump[UART dump]' \ + 'i2c[Inter-Integrated Circuit]' \ + 'lm75[National LM75]' \ + 'onewire_link[1-Wire serial communication bus (link layer)]' \ + 'i2cfilter[I2C filter]' \ + 'midi[Musical Instrument Digital Interface]' \ + 'uart[Universal Asynchronous Receiver/Transmitter]' \ + 'usb_packet[Universal Serial Bus (LS/FS) packet]' \ + 'jtag[Joint Test Action Group (IEEE 1149.1)]' \ + 'usb_signalling[Universal Serial Bus (LS/FS) signalling]' \ + 'xfp[10 Gigabit Small Form Factor Pluggable Module (XFP)]' \ + 'mx25lxx05d[Macronix MX25Lxx05D]' \ + 'tlc5620[Texas Instruments TLC5620]' \ + 'transitioncounter[Pin transition counter]' \ + 'can[Controller Area Network]' \ + 'mxc6225xu[MEMSIC MXC6225XU]' \ + 'nunchuk[Nintendo Wii Nunchuk]' \ + 'avr_isp[AVR In-System Programming]' \ + 'spi[Serial Peripheral Interface]::spi options:_spi_opts' \ + 'i2cdemux[I2C demultiplexer]' \ + 'dcf77[DCF77 time protocol]' \ + 'pan1321[Panasonic PAN1321]' \ + 'maxim_ds28ea00[Maxim DS28EA00 1-Wire digital thermometer]' \ + 'jtag_stm32[Joint Test Action Group / ST STM32]' \ + 'lpc[Low-Pin-Count]' \ + 'sdcard_spi[Secure Digital card (SPI mode)]' \ +} + +_spi_annts() { + _values -s , -S = 'spi annotations' \ + 'hex[SPI data bytes in hex format]' \ +} + +_decoder_annts() { + _values -s , -S : 'supported protocol decoders' \ + 'ds1307[Dallas DS1307]' \ + 'mlx90614[Melexis MLX90614]' \ + 'parallel[Parallel sync bus]' \ + 'onewire_network[1-Wire serial communication bus (network layer)]' \ + 'edid[Extended Display Identification Data]' \ + 'i2s_dump[I2S dump]' \ + 'i2s[Integrated Interchip Sound]' \ + 'guess_bitrate[Guess bitrate/baudrate]' \ + 'rtc8564[Epson RTC-8564 JE/NB]' \ + 'uart_dump[UART dump]' \ + 'i2c[Inter-Integrated Circuit]' \ + 'lm75[National LM75]' \ + 'onewire_link[1-Wire serial communication bus (link layer)]' \ + 'i2cfilter[I2C filter]' \ + 'midi[Musical Instrument Digital Interface]' \ + 'uart[Universal Asynchronous Receiver/Transmitter]' \ + 'usb_packet[Universal Serial Bus (LS/FS) packet]' \ + 'jtag[Joint Test Action Group (IEEE 1149.1)]' \ + 'usb_signalling[Universal Serial Bus (LS/FS) signalling]' \ + 'xfp[10 Gigabit Small Form Factor Pluggable Module (XFP)]' \ + 'mx25lxx05d[Macronix MX25Lxx05D]' \ + 'tlc5620[Texas Instruments TLC5620]' \ + 'transitioncounter[Pin transition counter]' \ + 'can[Controller Area Network]' \ + 'mxc6225xu[MEMSIC MXC6225XU]' \ + 'nunchuk[Nintendo Wii Nunchuk]' \ + 'avr_isp[AVR In-System Programming]' \ + 'spi[Serial Peripheral Interface]::spi annotations:_spi_annts' \ + 'i2cdemux[I2C demultiplexer]' \ + 'dcf77[DCF77 time protocol]' \ + 'pan1321[Panasonic PAN1321]' \ + 'maxim_ds28ea00[Maxim DS28EA00 1-Wire digital thermometer]' \ + 'jtag_stm32[Joint Test Action Group / ST STM32]' \ + 'lpc[Low-Pin-Count]' \ + 'sdcard_spi[Secure Digital card (SPI mode)]' \ +} + +_probe_groups() { + local -a _groups + _groups=('CH1' 'CH2' 'CH3' 'CH4' 'CH5' \ + 'CH6' 'CH7' 'CH8' 'CH9' 'CH10' \ + 'POD0' 'POD1' 'Logic') + + _describe 'probe groups' _groups +} + +_probes() { + local -a _labels + _labels=('MISO' 'MOSI' 'CLK' 'DATA') + + _values -s , -S = 'probes' \ + 'CH1::probe label:($_labels[@])' 'CH2::probe_label:($_labels[@])' \ + 'CH3::probe_label:($_labels[@])' 'CH4::probe_label:($_labels[@])' \ + 'CH5::probe_label:($_labels[@])' 'CH6::probe_label:($_labels[@])' \ + 'CH7::probe_label:($_labels[@])' 'CH8::probe_label:($_labels[@])' \ + 'D0::probe_label:($_labels[@])' 'D1::probe_label:($_labels[@])' \ + 'D2::probe_label:($_labels[@])' 'D3::probe_label:($_labels[@])' \ + 'D4::probe_label:($_labels[@])' 'D5::probe_label:($_labels[@])' \ + 'D6::probe_label:($_labels[@])' 'D7::probe_label:($_labels[@])' \ + 'D8::probe_label:($_labels[@])' 'D9::probe_label:($_labels[@])' \ + 'D10::probe_label:($_labels[@])' 'D11::probe_label:($_labels[@])' \ + 'D12::probe_label:($_labels[@])' 'D13::probe_label:($_labels[@])' \ + 'D14::probe_label:($_labels[@])' 'D15::probe_label:($_labels[@])' \ +} + +_config() { + local -a _patterns _timebases _trigger_sources + local -a _vdivs _copling_opts _samplerates + + _patterns=('sigrok' 'random' 'incremental' + 'all-low' 'all-high' 'square' + 'sine' 'triangle' 'sawtooth') + + _timebases=('2ns' '5ns' '10ns' '20ns' '50ns' '100ns' '200ns' + '500ns' '1us' '2us' '5us' '10us' '20us' '50us' + '100us' '200us' '500us' '1ms' '2ms' '5ms' '10ms' + '20ms' '50ms' '100ms' '200ms' '500ms' '1s' '2s' + '5s' '10s' '20s' '50s') + + _samplerates=('2kHz' '5kHz' '10kHz' '20kHz' '50kHz' '100kHz' '200kHz' + '500kHz' '1MHz' '2MHz' '5MHz' '10MHz' '20MHz' '50MHz' + '100Hz' '200Hz' '500Hz' '1Hz' '2Hz' '5Hz' '10Hz' + '20Hz' '50Hz' '100Hz' '200Hz' '500Hz' '1GHz') + + _trigger_sources=('CH1' 'CH2' 'CH3' 'CH4' 'LINE' 'EXT' 'D0' + 'D1' 'D2' 'D3' 'D4' 'D5' 'D6' 'D7') + + _coupling_opts=('AC' 'ACL' 'DC' 'DCL' 'GND') + + _vdivs=('1mV' '2mV' '5mV' '10mV' '20mV' '50mV' '100mV' + '200mV' '500mV' '1V' '2V' '5V' '10V') + + _values -s : -S = 'config options' \ + 'triggerslope[Trigger slope]:slope options:(r f)' \ + 'samplerate[Device sample rate]:samplerate options:($_samplerates[@])' \ + 'pattern[Pattern to generate]:pattern options:($_patterns[@])' \ + 'horiz_triggerpos[Trigger offset]:trigger pos options:(0.5 0 1)' \ + 'timebase[Time base]:timebase options:($_timebases[@])' \ + 'coupling[Coupling]:coupling options:($_coupling_opts[@])' \ + 'vdivs[Vertical division]:vdiv options:($_vdivs[@])' \ +} + +_log_levels() { + local -a _levels + _levels=('0:None' '1:Error' '2:Warnings' '3:Informational' + '4:Debug' '5:Spew') + + _describe 'log levels' _levels +} + + + +_sigrok_cli() { + local -a _sample_limits + + _sample_limits=('2k' '5k' '10k' '20k' '50k' '100k' '200k' + '500k' '1m' '2m' '5m' '10m' '20m' '50m' + '100' '200' '500' '1' '2' '5' '10' + '20' '50' '100' '200' '500' '1g') + + _time_limits=('1ms' '2ms' '5ms' '10ms' '20ms' '50ms' + '100ms' '200ms' '500ms' '1s' '2s' '5s' + '10s' '20s' '50s') + + _arguments -C \ + {-h,--help}'[Show help options]' \ + {-V,--version}'[Show version and support list]' \ + {-l,--loglevel}'[Set loglevel (5 is most verbose)]:log level:_log_levels' \ + {-d,--driver}'[The driver to use]:supported drivers:_drivers' \ + {-c,--config}'[Specify device configuration options]:config options:_config' \ + {-i,--input-file}'[Load input from file]:input_file:_files' \ + {-I,--input-format}'[Input format]:input format:_input_formats' \ + {-o,--output-file}'[Save output to file]:out file:_files' \ + {-O,--output-format}'[Output format]:output format:_output_formats' \ + {-p,--probes}'[Probes to use]:probe names:_probes' \ + {-g,--probe-group}'[Probe groups]:group names:_probe_groups' \ + {-t,--triggers}'[Trigger configuration]' \ + {-w,--wait-trigger}'[Wait for trigger]' \ + {-P,--protocol-decoders}'[Protocol decoders to run]:decoders:_decoders' \ + {-S,--protocol-decoder-stack}'[Protocol decoder stack]:decoders:_decoder_stack' \ + {-A,--protocol-decoder-annotations}'[Protocol decoder annotation(s) to show]:decoders:_decoder_annts' \ + {-M,--protocol-decoder-meta}'[Protocol decoder meta output to show]' \ + {-B,--protocol-decoder-binary}'[Protocol decoder binary output to show]' \ + '--scan[Scan for devices]' \ + '--show[Show device detail]' \ + '--time[How long to sample (ms)]:time in ms:($_time_limits[@])' \ + '--samples[Number of samples to acquire]:number of samples:($_sample_limits[@])' \ + '--frames[Number of frames to acquire]:frame number:(1 2 3 4 5 6 7 8 9 10)' \ + '--continuous[Sample continuously]' \ + '--set[Set device options only]' \ +} + +_sigrok_cli "$@" -- 1.8.5.3 |
From: Peter S. <pe...@st...> - 2014-01-31 06:13:56
|
poljar (Damir Jelić) wrote: > This patch adds zsh completion for sigrok-cli to the contrib directory. Shouldn't this be auto-generated by sigrok-cli? //Peter |
From: Damir J. <po...@po...> - 2014-01-31 11:53:08
|
On Fri, Jan 31, 2014 at 07:13:47AM +0100, Peter Stuge wrote: > poljar (Damir Jelić) wrote: > > This patch adds zsh completion for sigrok-cli to the contrib directory. > > Shouldn't this be auto-generated by sigrok-cli? > What do you mean by "this"? The completion? Some part of the completion? The available arguments? |
From: Peter S. <pe...@st...> - 2014-01-31 13:59:32
|
Damir Jelić wrote: > > > This patch adds zsh completion for sigrok-cli to the contrib directory. > > > > Shouldn't this be auto-generated by sigrok-cli? > > > > What do you mean by "this"? The completion? Some part of the completion? > The available arguments? Right, at the very least the arguments, so that there is only one place to maintain that information. I realize that this is in contrib/ but still.. That just makes it all the more certain that the file will get out of date quickly. //Peter |
From: Joel H. <jo...@ai...> - 2014-01-31 14:18:47
|
Do any other apps do this? If not contrib/ seems OK to me. On 31 January 2014 13:59:23 GMT, Peter Stuge <pe...@st...> wrote: >Damir Jelić wrote: >> > > This patch adds zsh completion for sigrok-cli to the contrib >directory. >> > >> > Shouldn't this be auto-generated by sigrok-cli? >> > >> >> What do you mean by "this"? The completion? Some part of the >completion? >> The available arguments? > >Right, at the very least the arguments, so that there is only one >place to maintain that information. > >I realize that this is in contrib/ but still.. That just makes it all >the more certain that the file will get out of date quickly. > > >//Peter > >------------------------------------------------------------------------------ >WatchGuard Dimension instantly turns raw network data into actionable >security intelligence. It gives you real-time visual feedback on key >security issues and trends. Skip the complicated setup - simply import >a virtual appliance and go from zero to informed in seconds. >http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk >_______________________________________________ >sigrok-devel mailing list >sig...@li... >https://lists.sourceforge.net/lists/listinfo/sigrok-devel -- Sent from my Android device with K-9 Mail. Please excuse my brevity. |
From: Damir J. <po...@po...> - 2014-01-31 15:59:58
|
On Fri, Jan 31, 2014 at 02:59:23PM +0100, Peter Stuge wrote: > Damir Jelić wrote: > > > > This patch adds zsh completion for sigrok-cli to the contrib directory. > > > > > > Shouldn't this be auto-generated by sigrok-cli? > > > > > > > What do you mean by "this"? The completion? Some part of the completion? > > The available arguments? > > Right, at the very least the arguments, so that there is only one > place to maintain that information. You're still not really specific about your question, so I'll try to answer as best as I can. The arguments for -l (--loglevel) are not parsed because they are only available from the man page, they are not expected to change and writing a parser would be considerably more effort than to specify them. The arguments for the -d (--driver), -I (--input-format) and -O (--output format) are parsed from the sigrok-cli --version output. The arguments for -c (--config) are not parsed because on some devices the --show option (which would output all the available commands for a given device) can be really slow, same goes for -p (--probes), -g (--probe-group). The arguments for -P (--protocol-decoders) and -A (--protocol-decoder-annotations) are not currently parsed because the info about the decoders is subject to change. Specifically the arguments for -A were not really parsable until recently [1], and the available sub-arguments for the specific decoder options are still missing (e.g. -P uart:format=???). Furthermore I would like the info output for the decoders to be more consistent, for example consider the info for the annotations: Annotations: - rx-data UART RX data - tx-data UART TX data [...] Fine, the option is on one line the description on the next, no problem. But let's take a look at the probes: Optional probes: - RX (rx): UART receive line - TX (tx): UART transmit line Is RX the option or rx, or both? And the description is now on the same line as the option separated by a colon. This is parsable but I think we would want some more consistency in the output here (I actually prefer the probe info style) and writing a parser on a moving target is a losing game. The arguments for -S (--protocol-decoders-stack) are parsed. The arguments for -M (--protocol-decoder-meta) and -B (--protocol-decoder-binary) are not parsed because I have no idea what these options do. There is currently no documentation in the man page and the commit messages that introduced these options didn't provide any info as well [2] [3]. The arguments for --time, --samples and --frames can be arbitrary so I put only a couple of reasonable defaults there. > > I realize that this is in contrib/ but still.. That just makes it all > the more certain that the file will get out of date quickly. > Yes and the reason it's in contrib and the option to install it via make install is missing is because it's not finished yet (as the commit message suggests). I posted this here because I wanted other people to have some place to contribute to. I don't think all the options will significantly change for this completion to be useless even if it will be out of date, and besides I'm here to maintain the completion. [1] http://sigrok.org/gitweb/?p=libsigrokdecode.git;a=commit;h=9f2f42c064e8a7100cee13460a7a3638f468f56a [2] http://sigrok.org/gitweb/?p=sigrok-cli.git;a=commit;h=f1c146f0854e5e098cafe4cf5a2a74f9bcf06117 [3] http://sigrok.org/gitweb/?p=sigrok-cli.git;a=commit;h=61d33a0f49b3c8bc6cc2dfafaaa7d2a1c9d8b1e0 Thanks, Damir. |