]> sigrok.org Git - libsigrok.git/log
libsigrok.git
4 years agorigol-dg: Add device/firmware specific quirks support.
Timo Kokkonen [Mon, 5 Oct 2020 09:04:57 +0000 (02:04 -0700)]
rigol-dg: Add device/firmware specific quirks support.

DG800/DG900 units seems to have issues with counter implementation:
- About 1 second delay is needed after enabling or disabling the counter.
  Otherwise unit stops responding properly (start seeing USB errors).
- Second channel and counter cannot be enabled simultaneously.

4 years agoitech-it8500: avoid "new" as a variable identifier
Gerhard Sittig [Tue, 6 Oct 2020 17:26:36 +0000 (19:26 +0200)]
itech-it8500: avoid "new" as a variable identifier

Strictly speaking the "new" identifier is not a reserved word. Still
it's good practice not to use it for variables in C language sources.
Rename variables to "old_bit" and "new_bit" for consistency.

4 years agoitech-it8500: declaration nits
Gerhard Sittig [Tue, 6 Oct 2020 17:18:42 +0000 (19:18 +0200)]
itech-it8500: declaration nits

Rearrange the order of declarations in the protocol.h header. Start with
packet layout, continue with requests (commands), then responses (status),
before the device context and the set of routines.

Rename the status codes to STS_* in contrast to CMD_* codes. Use an enum
for different byte values, leave defines for packet sizes et al. Phrase
bit fields in terms of bit numbers not byte values.

Total nit: Change the breaks in the long list of add_source() args. Keep
event type and timeout together, similar to callback and its data.

4 years agoitech-it8500: rephrase config get/set/list, reflect error paths
Gerhard Sittig [Tue, 6 Oct 2020 17:13:34 +0000 (19:13 +0200)]
itech-it8500: rephrase config get/set/list, reflect error paths

Explicitly "break the flow" when internal status gathering fails, to
reflect that an error path is taken and the config call will fail. The
conditional assignment of response data in case of success could be
slightly misleading (it was to me during review).

Eliminate a goto which kind of circumvented the optional transmission of
a request to the device. Instead test whether a command was filled in to
determine whether a command needs to get sent.

4 years agoitech-it8500: ITECH IT8500 series DC electronic load driver.
Timo Kokkonen [Sat, 30 May 2020 23:03:26 +0000 (16:03 -0700)]
itech-it8500: ITECH IT8500 series DC electronic load driver.

This driver supports ITECH IT8500 series electronic loads:
 IT8511+, IT8511A+,
 IT8512+, IT8512A+, IT8512B+, IT8512C+, IT8512H+,
 IT8513A+, IT8513B+, IT8513C+, IT8514C+, IT8514B+, IT8516C+

Additionally BK Precision 8500 series loads (models 8500, 8502, 8510,
8512, 8514, 8518, 8520, 8522, 8524 & 8526) should work as well.
As ITECH is the OEM manufacturer for these BK Brecision models.

4 years agoitech-it8500: Initial driver skeleton.
Timo Kokkonen [Fri, 29 May 2020 08:43:35 +0000 (01:43 -0700)]
itech-it8500: Initial driver skeleton.

4 years agohwdriver: New entries for DC Load "CW" (Power) and "CR" (Resitance) modes.
Timo Kokkonen [Mon, 5 Oct 2020 04:03:19 +0000 (21:03 -0700)]
hwdriver: New entries for DC Load "CW" (Power) and "CR" (Resitance) modes.

Added following new entries:
- SR_CONF_POWER
- SR_CONF_POWER_TARGET
- SR_CONF_RESISTANCE_TARGET

4 years agodmm/metex14: unbreak packet request helper return code
Gerhard Sittig [Tue, 6 Oct 2020 18:59:27 +0000 (20:59 +0200)]
dmm/metex14: unbreak packet request helper return code

Return SR_OK in case of successful transmission of a packet request. The
previous implementation passed the serial layer's verbatim return value,
which was non-negative non-null (read: above zero) in case of success,
which is none of the expected return codes of a packet request routine.

This amends commit 379e95c587e1d and completes the adjustment which was
started in commit a4be2b327be8. The issue has gone unnoticed in the past
since it took not effect. The serial-dmm caller only tested for negative
return values.

4 years agoREADME.devices: add JTAGulator section for Logic Analyzer mode
Gerhard Sittig [Tue, 6 Oct 2020 18:32:04 +0000 (20:32 +0200)]
README.devices: add JTAGulator section for Logic Analyzer mode

Manual activity is required to enable the SUMP protocol support on the
JTAGulator. Link to the vendor's wiki article for users' convenience.

4 years agoinput/csv: trim cell content before conversion
Gerhard Sittig [Sun, 4 Oct 2020 17:48:42 +0000 (19:48 +0200)]
input/csv: trim cell content before conversion

Trailing whitespace in CSV cells broke the text to number conversion.
Trim the text content of cells before processing it. This is useful and
actually essential for data cells, and does not harm titles in header
lines, neither will it affect column format specs.

How to reproduce:

  $ echo ' 3.14 , 2' | \
    sigrok-cli -i - -I csv:header=false:column_formats=2a
  sr: input/csv: Cannot parse analog text  3.14  in column 1 in line 1.

4 years agorigol-dg: Fix reading current output signal duty cycle value.
Timo Kokkonen [Sat, 3 Oct 2020 23:35:10 +0000 (16:35 -0700)]
rigol-dg: Fix reading current output signal duty cycle value.

Reading output signal duty cycle value didn't always work, since it relied
on old (cached) information about the currently active waveform. Changed to
always query channel status so this won't happen anymore.

4 years agorigol-dg: Add Rigol DG800 and DG900 series support.
Timo Kokkonen [Sat, 3 Oct 2020 23:20:31 +0000 (16:20 -0700)]
rigol-dg: Add Rigol DG800 and DG900 series support.

This adds support for all Rigol DG800/DG900 series models.

DG800 series: DG811, DG812, DG821, DG822, DG831, DG832
DG900 series: DG952, DG972, DG992

4 years agoudev: Add Rigol DG800 and DG900 series VID/PID.
Timo Kokkonen [Sat, 3 Oct 2020 23:18:35 +0000 (16:18 -0700)]
udev: Add Rigol DG800 and DG900 series VID/PID.

4 years agopce-322a: unbreak send_command() return code
Gerhard Sittig [Fri, 2 Oct 2020 09:18:57 +0000 (11:18 +0200)]
pce-322a: unbreak send_command() return code

Data was sent to the serial port, and the non-zero positive write length
was mistaken as an error, since it did not match the SR_OK code's value.
This snuck in with commit 379e95c587e1d in 2017-08.

Rephrase the check for successful serial writes in the pce-322a driver.
Pass on error codes from the serial layer in verbatim form. Check for
the exact expected write length and derive SR_ERR_IO upon mismatch. Do
return SR_OK upon success.

Reported-By: Michael Ströder <redacted>
Tested-By: Michael Ströder <redacted>
4 years agorigol-dg: reduce redundancy in malloc() calls
Gerhard Sittig [Sun, 27 Sep 2020 10:09:47 +0000 (12:09 +0200)]
rigol-dg: reduce redundancy in malloc() calls

No need to duplicate the data type, just allocate enough memory to
hold the variable's value. Shuffle the order of items in the array
size calculation (number of items times the size of an item).

4 years agoudev: Add Rigol DG1000z Series VID/PID.
Timo Kokkonen [Mon, 31 Aug 2020 06:22:00 +0000 (23:22 -0700)]
udev: Add Rigol DG1000z Series VID/PID.

4 years agorigol-dg: Initial Rigol DG1000z driver implementation.
Timo Kokkonen [Sun, 6 Sep 2020 05:06:30 +0000 (22:06 -0700)]
rigol-dg: Initial Rigol DG1000z driver implementation.

This implements support for Rigol DG1000z series digital signal
generators. Driver provides basic control via channel groups
("1", and "2"). Acquisition returns data from the built-in
frequency counter.

Supported models: DG1022Z, DG1032Z, DG1062Z

[ gsi: added some coding style adjustment ]

4 years agorigol-dg: Initial driver skeleton.
Timo Kokkonen [Sat, 29 Aug 2020 19:05:12 +0000 (12:05 -0700)]
rigol-dg: Initial driver skeleton.

4 years agohwdriver: Add SR_CONF_DUTY_CYCLE & SR_CONF_PHASE.
Timo Kokkonen [Sat, 29 Aug 2020 19:37:46 +0000 (12:37 -0700)]
hwdriver: Add SR_CONF_DUTY_CYCLE & SR_CONF_PHASE.

4 years agoscpi: accept numbers like 4.0000E3 as integer value
Ralf [Tue, 25 Aug 2020 06:19:18 +0000 (08:19 +0200)]
scpi: accept numbers like 4.0000E3 as integer value

MSO5000 returns memory depth value in that format, e.g.
sr: [04:21.491949] scpi_vxi: Successfully sent SCPI command: 'ACQ:MDEP?'.
sr: [04:21.501463] scpi: Got response: '4.0000E+03', length 10.

[ gsi: drop redundant assignment and parens, amend diag message ]

4 years agoserial: lower severity of failed stream detect message
Gerhard Sittig [Sun, 27 Sep 2020 06:01:44 +0000 (08:01 +0200)]
serial: lower severity of failed stream detect message

Reduce the message's log level from ERR to INFO when the serial stream
detect routine cannot find a valid packet. Although an error code gets
returned, the condition need not be fatal (can be the result of trying
several peers before success or finally giving up). Let callers decide
on the severity of failure to detect a specific device's presence, and
provide more context in their message which is more helpful to users.
Interested readers still get the message at slightly raised log levels.

This avoids confusing user perceivable situations like these:

  $ sigrok-cli --scan
  sr: serial: Didn't find a valid packet (read 0 bytes).
  sr: serial: Didn't find a valid packet (read 0 bytes).
  The following devices were found:
  demo - Demo device with 13 channels: D0 D1 D2 D3 D4 D5 D6 D7 A0 A1 A2 A3 A4

4 years agools: more robust device reset in acquisition stop
Gerhard Sittig [Sun, 27 Sep 2020 05:50:14 +0000 (07:50 +0200)]
ols: more robust device reset in acquisition stop

Use the existing ols_send_reset() routine because acquisition
termination can get initiated in several code paths. Make sure the
device will cease activity whatever state it happens to be in. This
amends commit 6d8182b643ae.

4 years agools: send CMD_RESET on acquisition stop
Ben Gardiner [Tue, 22 Sep 2020 03:27:40 +0000 (03:27 +0000)]
ols: send CMD_RESET on acquisition stop

Sending CMD_RESET will interrupt armed/untriggered acquisitions which is
very useful in Pulseview sessions since, without this, a next 'run' will
hang.

Signed-off-by: Ben Gardiner <redacted>
4 years agobrymen-dmm: unbreak dBm reference impedance interpretation
Gerhard Sittig [Mon, 21 Sep 2020 19:08:27 +0000 (21:08 +0200)]
brymen-dmm: unbreak dBm reference impedance interpretation

The reference impedance for dBm measurements comes in an unexpected
format. Isolate the 4..1200 Ohms value, ignore the (inappropriate?)
"0." and exponent parts of the response. Clearly reflect that Ohms
values are seen in different contexts (dBm reference, continuity,
resistance).

Reword comments in the BM850 response parser's code path for dBm
measurements. The reference value is shown when the function is entered
(verified here) or when the reference value changes (haven't seen this
here but a comment in the previous implementation said so).

4 years agobrymen-dmm: unbreak temperature response parsing
Gerhard Sittig [Mon, 21 Sep 2020 18:32:21 +0000 (20:32 +0200)]
brymen-dmm: unbreak temperature response parsing

The BM850s temperature function response includes the C/F unit in an
unexpected position ("0.0272CE+3") which breaks number conversion. Drop
the C/F unit to unbreak the conversion.

This was observed with BM859s. Absence of the C/F unit in the response
is fatal in this implementation. If other meter firmware versions or
models don't suffer from that issue, the removal must be silent and
non-fatal.

4 years agobrymen-dmm: rephrase bfunc and value text parsing
Gerhard Sittig [Mon, 21 Sep 2020 18:20:13 +0000 (20:20 +0200)]
brymen-dmm: rephrase bfunc and value text parsing

When the BM850s response packet's payload gets interpreted, the DLE/STX
transport envelope is not of interest. Rephrase the bitfield inspection
to better reflect that 'bfunc' indicators get accessed (match the vendor's
documentation). Rephrase the calling parse routine to unobfuscate the text
field access. Unclutter assignments for the analog feed. Use a shorter
layout in debug messages, reflect raw input data and conversion results.

4 years agobrymen-dmm: improve text to number conversion robustness, signed OL
Gerhard Sittig [Mon, 21 Sep 2020 17:57:32 +0000 (19:57 +0200)]
brymen-dmm: improve text to number conversion robustness, signed OL

The BM850(a/s) response packets are a mix of binary and text content.
The text part of it is _not_ a regular ASCIIZ string. Enforce the NUL
termination before running standard C library string routines on it.
Rephrase the conversion routine to become more C idiomatic.

Also check the optional sign for overflow conditions, return either
positive or negative infinity as a result.

4 years agobrymen-dmm: style nits, apply comm param defaults, low battery warning
Gerhard Sittig [Sun, 20 Sep 2020 07:33:35 +0000 (09:33 +0200)]
brymen-dmm: style nits, apply comm param defaults, low battery warning

Rephrase how the default serial communication parameters get applied.
Preset the variable to the default value and let optional user provided
specs override these. This avoids an extra check which is difficult to
read and highly redundant. Add a comment for raised awareness that a
default port spec is undesirable because it's unreliable.

Raise the severity of low battery messages. It's worth warning the user
because measurements could be inaccurate.

Reduce indentation in continuation lines of a long routine signature,
and drop an empty line in a short struct while we are here.

4 years agobrymen-dmm: unbreak BM85x communication by pulsing RTS after COM port open
Gerhard Sittig [Sun, 20 Sep 2020 07:23:45 +0000 (09:23 +0200)]
brymen-dmm: unbreak BM85x communication by pulsing RTS after COM port open

Either the Brymen meters in the BM850s series or their cables require an
RTS pulse to wakeup, without it there won't be a response during scan or
when requesting measurements. Follow the vendor's documented sequence for
a low RTS pulse after opening the serial port and before communication to
the device.

This fixes bug #1595.

Reported-By: Karl Palsson <redacted>
4 years agoserial: add routine to manipulate handshake state (RTS, DTR)
Gerhard Sittig [Sun, 20 Sep 2020 07:14:01 +0000 (09:14 +0200)]
serial: add routine to manipulate handshake state (RTS, DTR)

Introduce a routine in libsigrok's internal serial layer which lets
applications manipulate the state of handshake signals (RTS and DTR)
after the serial port got opened and configured. This allows for timed
pulses which cannot get expressed with static "rts=1" etc phrases in
parameter strings, and allows handshake signal control while leaving
bitrate and frame format untouched. Applications specify which signals
to modify while other signals remain as they are (ternary input).

Do implement the signal manipulation in the libserialport transport,
do nothing and silently pass in the HID and BT transports. These can
get extended later as the need arises, depending on the HID chips' and
RFCOMM peers' capability to control these signals. This extension is
transparent to application code (acquisition device drivers).

4 years agoserial: rephrase check for speed (bitrate) in parameter string routine
Gerhard Sittig [Sun, 20 Sep 2020 07:38:45 +0000 (09:38 +0200)]
serial: rephrase check for speed (bitrate) in parameter string routine

Use positive logic, put the error path for an unavailable value where
the check for its availability is. Do the regular activity on available
values in the straight code path with lesser indentation. Also group the
bitrate, frame format, and handshake params when breaking text lines.

4 years agodmm/bm52x: introduce support for Brymen BM525s
Gerhard Sittig [Wed, 16 Sep 2020 19:25:33 +0000 (21:25 +0200)]
dmm/bm52x: introduce support for Brymen BM525s

Introduce a bm52x DMM packet parser which is modelled after the bm86x
implementation, and hook it up to the serial-dmm driver. This supports
the live readings (real-time download) of the Brymen BM525s logging DMM.
The timing follows the vendor documentation (0.5s between requests, and
4.0s absolute timeout after request transmission). Reading previously
recorded data (memory data sets) unfortunately does not fit well into
the serial-dmm approach, and needs to get addressed differently later.

4 years agoserial-dmm: only do bytes to text conversion at higher log levels
Gerhard Sittig [Fri, 18 Sep 2020 14:38:54 +0000 (16:38 +0200)]
serial-dmm: only do bytes to text conversion at higher log levels

Check the current log level before starting the potentially expensive
bytes to text conversion for a debug message (dump DMM packets).

4 years agoinput/csv: provide double precision values to session feed
Gerhard Sittig [Sun, 13 Sep 2020 14:35:59 +0000 (16:35 +0200)]
input/csv: provide double precision values to session feed

Common conversion support code accepts double precision input data for
analog packets. Use the 'double' data type in the CSV input module to
feed sample data to the session bus.

4 years agoanalog.c: rephrase analog feed to float conversion routine
Gerhard Sittig [Sun, 13 Sep 2020 06:34:45 +0000 (08:34 +0200)]
analog.c: rephrase analog feed to float conversion routine

Rephrase the sr_analog_to_float() routine to further reduce redundancy.

Check early for a match of the input data and result format, to grab the
raw data without conversion in that case. Handle optional scale/offset
calculation in that fast code path, too.

Unify the instructions which convert input data from either integer or
floating point presentations to the result format. Use common stream
readers to retrieve input data in several formats, which eliminates
local conversion buffers. Move common sub-expressions (scale/offset) out
of loops. Run more calculations on double precision data before results
get trimmed to single precision.

Add and extend comments to improve future maintenance. Include (terse)
details of unsupported input data presentations in error messages.

This implementation was neither tuned nor measured for performance.
There still is a lot of redundancy among the branches which handle a
specific input data type. Rephrasing that approach interacts with the
yet to be done performance tuning, thus needs to get addressed later.
The current phrases' verbosity is believed to improve readability.

4 years agolibsigrok-internal.h: add more endianess aware stream reader routines
Gerhard Sittig [Sat, 12 Sep 2020 06:13:21 +0000 (08:13 +0200)]
libsigrok-internal.h: add more endianess aware stream reader routines

Add endianess aware readers including address incrementing variants for
those intrinsic data types which were missing in the previous version
yet are needed for sr_analog_to_float() adjustment.

Also move the 24bit reader to its position in the sort order.

4 years agotests/analog: add more tests for analog feed to float array conversion
Gerhard Sittig [Tue, 8 Sep 2020 19:07:33 +0000 (21:07 +0200)]
tests/analog: add more tests for analog feed to float array conversion

Extend test coverage for the sr_analog_to_float() conversion routine.
Pass data which is encoded in native, little and big endian format to
the routine. Pass single and double precision floating point data, and
integer data in different unit sizes and signedness. Cover scale/offset
calculations as well.

Also cover expected failed conversion for unsupported combinations of
input data format details (half/quad precision float, u64 integer).

Adjust the grouping of test cases in the sequence while we are here.
Move SI prefix, unit, and rational number related tests out of the
analog-to-float conversion group.

4 years agoanalog.c: sr_analog_to_float(): Support for receiving double values.
Timo Kokkonen [Tue, 8 Sep 2020 00:33:07 +0000 (17:33 -0700)]
analog.c: sr_analog_to_float(): Support for receiving double values.

Unbreak the conversion of input data in the floating point format when
the input data's format does not match the host's internal presentation,
thus grabbing raw data cannot be done.

Also accept the input data in double precision format which was not
supported before. Check for unsupported unit size values and emit an
error message similar to the integer code path.

This is motivated by bug #779 but does not resolve it. Adjusts common
conversion support, but sticks with single precision return data type
for API compatibility.

4 years agotests: strutil, use ck_assert
Jiri Slaby [Tue, 15 Sep 2020 06:50:48 +0000 (08:50 +0200)]
tests: strutil, use ck_assert

We pass no message, so use ck_assert instead of ck_assert_msg. This
results in an error with check 0.15:
tests/strutil.c:157:2: error: too few arguments to function '_ck_assert_failed'
  157 |  ck_assert_msg(saved_locale != NULL);

4 years agoinput/saleae: improve L2D undersampling, do provide sample data
Gerhard Sittig [Wed, 2 Sep 2020 15:59:47 +0000 (17:59 +0200)]
input/saleae: improve L2D undersampling, do provide sample data

The Saleae Logic exported files (Logic2 digital format) don't contain a
samplerate, so users need to specify the value. For values smaller than
the samplerate that was used during the capture undersampling will take
place. An implementation detail of the input module could result in
incorrect timing of sample values in the session feed. In extreme cases
none of the periods between signal edges qualified for submission. In
that case no sample data was sent to the sigrok session at all.

  $ sigrok-cli -i digital_1.bin -I saleae:samplerate=1000

Keep the very timestamp at hand when the last sample data was submitted.
Only advance that timestamp when more sample data was sent. This avoids
the accumulation of timing errors for undersampling scenarios, and does
forward undersampled input data when the user provided sample period has
passed.

This fixes bug #1600.

4 years agokorad-kaxxxxp: remove obsolete code (clear before read, timeout literal)
Gerhard Sittig [Tue, 1 Sep 2020 15:06:55 +0000 (17:06 +0200)]
korad-kaxxxxp: remove obsolete code (clear before read, timeout literal)

The korad response read routine clears the receive buffers, so callers
don't have to. This amends commit d2cc60bd4511.

The acquisition timeout is handled by common sw_limits support. Remove
the no longer referenced literal. This amends commit 3f9b48ae5f35.

4 years agokorad-kaxxxxp: speed up scan process, rephrase response read routine
Gerhard Sittig [Mon, 31 Aug 2020 19:03:31 +0000 (21:03 +0200)]
korad-kaxxxxp: speed up scan process, rephrase response read routine

The Korad protocol relies on unterminated request and response strings,
which works well enough for fixed length acquisition and status queries.
But the variable length replies to identification requests suffered from
an implementation detail in the receive routine. A large timeout must be
used because supported devices reportedly are slow to respond. There is
no simple yet robust condition to detect the response's completion. The
scan code must prepare for the maximum response length across the set of
supported devices. Unfortunately the maximum amount of time was spent
waiting for the response to occupy the provided response buffer, before
a long total timeout expired.

Rework the korad driver's helper routine which gets a variable length
non-terminated text string. Keep the long initial timeout, and keep
iterating in that initial phase to quickly detect when response data
became available. But terminate the read sequence after a shorter period
without receive data after some initial receive data was seen. Assume
that identification responses get transferred at wire speed and without
additional delays beyond bitrate expectations. Acquisition and status
responses shall not be affected by this change.

This speeds up the scan for devices from roughly 5s to some 0.1s on
newer devices (KA3005P v5.5) and 0.5s on older devices (KA3005P V2.0).

This commit also addresses an issue in the response text termination,
where partial responses contained undefined data. The previous version's
return value was unspecific: Negative for fatal errors, but either zero
or non-zero for successful reads, with no way for callers to learn about
the received amount of data. The rephrased version always returns the
amount of received data, and adds internal documentation which discusses
the implementation's constraints and the motivation for the approach.

This is a modified version of the initial implementation which was
Submitted-By: Karl Palsson <redacted>
4 years agokorad-kaxxxxp: style cleanup in device scan, keep serno at hand
Gerhard Sittig [Fri, 28 Aug 2020 14:17:22 +0000 (16:17 +0200)]
korad-kaxxxxp: style cleanup in device scan, keep serno at hand

Cleanup style in the korad driver's scan() routine. Keep declarations
out of code blocks. Reduce redundancy and improve robustness in the
response buffer length calculation. Reduce clutter and group related
instructions together. Unobfuscate result checks, and keep the result
at hand (for diagnostics, or error propagation). Unobfuscate string
comparisons in the model ID lookups, terminate the search upon match.
Use a not so terse name for data that gets referenced at rather distant
locations.

Keep the optionally available serial number at hand, to present it to
users when desired. This aspect was
Reported-By: Karl Palsson <redacted>
4 years agoinput/saleae: keep previous channels across cleanup() call
Gerhard Sittig [Wed, 26 Aug 2020 14:46:41 +0000 (16:46 +0200)]
input/saleae: keep previous channels across cleanup() call

The previous implementation of the cleanup() routine in the saleae input
module kept user specified options, but lost the previously created list
of sigrok channels. Keep it.

Also make sure that reset() voids the previous copy after grabbing its
value. To not unexpectedly release resources which still get referenced.

This shall unbreak file-reload.

4 years agoscpi-pps: use remote and local modes for HMP4000
Gerhard Sittig [Tue, 25 Aug 2020 18:47:26 +0000 (20:47 +0200)]
scpi-pps: use remote and local modes for HMP4000

Stop using the unusal "mixed" mode (local interface available during
remote operation) for HMP4000, applications may not be prepared for this
use case. Use traditional "remote" and "local" modes instead. This change
also ends remote mode after the application is done using the device.

4 years agoscpi-pps: Add more HMP4000 series devices
Gerhard Sittig [Tue, 25 Aug 2020 18:58:24 +0000 (20:58 +0200)]
scpi-pps: Add more HMP4000 series devices

List both vendor names "HAMEG" and "ROHDE&SCHWARZ" in the scpi-pps
driver, either responses were seen for HMP4000 devices. Unfortunately
vendor names don't support regex matches, so they require individual
profile items. The items also "violate" the alpha sort order in the list
of profiles, but keeping the series' models together is more important.

Add a declaration for the HMP4030 device which re-uses the HMP4040 data
but open codes the smaller channel count. Ideally the .probe_channels()
routine would receive the scpi_pps item as a parameter, and could yield
model specific result data from common information for the series. The
implementation in this commit is the least intrusive approach until
something better becomes available.

This shall cover the whole HMP4000 series:
  https://www.rohde-schwarz.com/product/hmp4000

4 years agoscpi-pps: add support for Hameg / Rohde & Schwarz HMP4040
Florian Schmidt [Tue, 7 Apr 2020 14:33:29 +0000 (16:33 +0200)]
scpi-pps: add support for Hameg / Rohde & Schwarz HMP4040

This commit introduces initial support for the HMP4040 power supply by
Rohde & Schwarz. It allows to configure the device and "statically" read
back current state. Automatic status updates with per-channel details
are not available yet (common support is missing).

[ gsi: drop status update remainder, address minor style nits ]

4 years agodoc: update README.devices for GWInstek VCP (CP210x in disguise)
Gerhard Sittig [Fri, 21 Aug 2020 09:47:59 +0000 (11:47 +0200)]
doc: update README.devices for GWInstek VCP (CP210x in disguise)

Reference the vendor's Windows specific "driver" download for the
CP210x chip with a non-default VID:PID. Provide an example how to
assign the Linux driver to that device (interactive, no udev rule).

4 years agoscpi_serial: add "GWInstek VCP" (PID 0x0030) as seen in GDM-834x
Gerhard Sittig [Fri, 21 Aug 2020 09:40:29 +0000 (11:40 +0200)]
scpi_serial: add "GWInstek VCP" (PID 0x0030) as seen in GDM-834x

4 years agoscpi-dmm: factor out some OL detection limits
Gerhard Sittig [Fri, 21 Aug 2020 09:34:54 +0000 (11:34 +0200)]
scpi-dmm: factor out some OL detection limits

Prepare the "plus/minus infinity" checks for OL conditions to use
model dependent limits. This commit does not change behaviour.

4 years agoscpi-dmm: add SR_CONF_CONN getter
Gerhard Sittig [Fri, 21 Aug 2020 10:36:53 +0000 (12:36 +0200)]
scpi-dmm: add SR_CONF_CONN getter

Add config_get() support for conn= specs. This is a best-effort approach.
Failure to get the SCPI connection text is non-fatal during probe.

4 years agools: Detect Demon Core, use its canonic command names
v1ne [Tue, 31 Mar 2020 19:51:22 +0000 (21:51 +0200)]
ols: Detect Demon Core, use its canonic command names

Document Demon Core commands and associated metadata magic numbers.
See http://web.archive.org/web/20190317154112/
http://mygizmos.org/ols/Logic-Sniffer-FPGA-Spec.pdf for documentation.

Detect the Demon Core presence, use more symbolic names in related
code paths to eliminate magic numbers, switch to their canonic names.

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Refactor, deduplicate logic packet code
v1ne [Tue, 31 Mar 2020 17:02:29 +0000 (19:02 +0200)]
ols: Refactor, deduplicate logic packet code

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Use symbolic name for "success" error code.
v1ne [Wed, 1 Apr 2020 14:45:17 +0000 (16:45 +0200)]
ols: Use symbolic name for "success" error code.

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Make constant names more precise, clarify comment
v1ne [Tue, 31 Mar 2020 18:20:25 +0000 (20:20 +0200)]
ols: Make constant names more precise, clarify comment

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Rename "flags" to "capture flags".
v1ne [Tue, 31 Mar 2020 17:32:23 +0000 (19:32 +0200)]
ols: Rename "flags" to "capture flags".

In the current implementation the "flags" are exclusively used for
captures. Prepare the introduction of device flags by renaming the
capture related flags which are specific to an operation.

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Symbolic name for magic value, reflect units in variable names
v1ne [Tue, 31 Mar 2020 16:48:30 +0000 (18:48 +0200)]
ols: Symbolic name for magic value, reflect units in variable names

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Remove stray command
v1ne [Tue, 31 Mar 2020 19:38:38 +0000 (21:38 +0200)]
ols: Remove stray command

It's nowhere documented and nowhere used.

Reviewed-By: Wolfram Sang <redacted>
4 years agools: Make use of zero-initialization.
v1ne [Tue, 31 Mar 2020 16:48:05 +0000 (18:48 +0200)]
ols: Make use of zero-initialization.

No need to assign zero after gmalloc0(). Move comments to declaration.

Reviewed-By: Wolfram Sang <redacted>
4 years agolibsigrok.h: Fix comment for unit Joule.
Frank Stettner [Sun, 23 Aug 2020 11:10:00 +0000 (13:10 +0200)]
libsigrok.h: Fix comment for unit Joule.

4 years agolibsigrok.h: Add Joule, Coulomb, and Ah units.
Frank Stettner [Mon, 27 Jul 2020 17:54:06 +0000 (19:54 +0200)]
libsigrok.h: Add Joule, Coulomb, and Ah units.

Also extend a comment on energy in comparison to power.

4 years agolibsigrok.h: Add MQ for electric charge.
Frank Stettner [Mon, 27 Jul 2020 17:54:06 +0000 (19:54 +0200)]
libsigrok.h: Add MQ for electric charge.

4 years agoteleinfo: Fix measured quantity (energy, not power).
Frank Stettner [Mon, 27 Jul 2020 17:55:27 +0000 (19:55 +0200)]
teleinfo: Fix measured quantity (energy, not power).

4 years agooutput/csv: always generate text for analog/logic data packets
Gerhard Sittig [Sat, 22 Aug 2020 16:24:12 +0000 (18:24 +0200)]
output/csv: always generate text for analog/logic data packets

Unconditionally generate output text when a session packet is received
which carries analog or logic sample data. Even if the data gets queued
and is not shown immediately, in that case the output text remains empty
but needs to be present. Otherwise applications may assume that the CSV
output module had not handled the data at all, which would result in
unexpected "screen output" with fallback data being interleaved with the
CSV output.

This resolves bug #1026 in its strictest sense (the unexpected presence
of fallback data). But leaves all other issues mentioned in comment 1.

4 years agooutput/csv: check unsupported/untested input signal conditions
Gerhard Sittig [Sat, 22 Aug 2020 15:57:55 +0000 (17:57 +0200)]
output/csv: check unsupported/untested input signal conditions

The current implementation of the CSV output module makes assumptions
which don't hold. Which results in incorrect or incomplete output for
some combinations of logic and analog signals.

Check for some of the known problematic conditions, and warn the user
about potentially unexpected results. This is a workaround until the
issues properly get addressed in the implementation.

This is motivated by but does not resolve bug #1026.

4 years agoREADME.devices: Document enabling GW Instek GDM-397 serial output mode.
Timo Kokkonen [Sat, 22 Aug 2020 06:59:25 +0000 (23:59 -0700)]
README.devices: Document enabling GW Instek GDM-397 serial output mode.

4 years agoserial-dmm: Add GW Instek GDM-397 meter support.
Timo Kokkonen [Sat, 22 Aug 2020 06:14:47 +0000 (23:14 -0700)]
serial-dmm: Add GW Instek GDM-397 meter support.

This meter appears to be rebranded UNI-T UT61B, but with
improved input protection.

4 years agokorad-kaxxxxp: add support for forced "detection" of a given model
Gerhard Sittig [Sat, 1 Aug 2020 15:22:28 +0000 (17:22 +0200)]
korad-kaxxxxp: add support for forced "detection" of a given model

Korad PSU models are rather popular. But the successful operation of
currently unsupported model names or firmware versions is hard to verify
by users, because building the library from locally modified sources is
involved.

Introduce support for the "force_detect=" scan option. Warning messages
contain how the device identifies itself. Optional user specs can force
the assignment of the driver to the unsupported model. Which results in
reports that include the identification details as well as the successful
use of the device.

  $ sigrok-cli -d korad-kaxxxxp:conn=...:force_detect=KORADKA3005PV2.0 --show

4 years agohwdriver: introduce SR_CONF_FORCE_DETECT config key (scan option)
Gerhard Sittig [Sat, 1 Aug 2020 15:12:50 +0000 (17:12 +0200)]
hwdriver: introduce SR_CONF_FORCE_DETECT config key (scan option)

Often previously unsupported models might be covered by existing code,
but would not match against a builtin list of known devices.

Introduce a config key which provides a scan option for users to force
the use of a driver with an unsupported device. This increases the
probability of requests for support of an additional model which are
associated with a successful use of that very device, and eliminates
the necessity to build from source for the trivial cases.

It's up to individual drivers whether they support forced detection,
and how they interpret the value of the scan option.

4 years agokorad-kaxxxxp: add config_get() support for SR_CONF_CONN
Gerhard Sittig [Sun, 2 Aug 2020 10:01:45 +0000 (12:01 +0200)]
korad-kaxxxxp: add config_get() support for SR_CONF_CONN

Let applications query the device instance's conn= key. This lets users
recognize individual devices if multiple of them are connected.

  $ sigrok-cli -d korad-kaxxxxp:conn=/dev/ttyACM0 --show
  ...
  korad-kaxxxxp:conn=/dev/ttyACM0 - Korad KA3005P with 2 channels: V I
  ...

4 years agoscpi-dmm: Remove SYST:LOC hack for GWInstek meters.
Timo Kokkonen [Wed, 19 Aug 2020 06:52:19 +0000 (23:52 -0700)]
scpi-dmm: Remove SYST:LOC hack for GWInstek meters.

No need for this hack anymymore as there is now DMM_CMD_SETUP_LOCAL
command that can be used to return unit back to "local" mode properly.

4 years agoscpi-dmm: Add new command DMM_CMD_SETUP_LOCAL.
Timo Kokkonen [Wed, 19 Aug 2020 06:29:18 +0000 (23:29 -0700)]
scpi-dmm: Add new command DMM_CMD_SETUP_LOCAL.

Add new command DMM_CMD_SETUP_LOCAL for setting device back
to "local" mode. If device implmements this command, it is
sent when driver is closed and after device "scan".

Define DMM_CMD_SETUP_LOCAL for GWInstek meters, so they get
returned to local mode automatically after use.

4 years agoscpi-dmm: alpha-sort the list of supported devices (vendor/model list)
Gerhard Sittig [Mon, 17 Aug 2020 18:32:08 +0000 (20:32 +0200)]
scpi-dmm: alpha-sort the list of supported devices (vendor/model list)

Any order is as arbitrary as any other. The alphabetical order of vendor
and model names might be the most robust during maintenance: easiest to
remember, easiest to use when checking for presence, and easiest to add
to or resolve conflicts during merges. Vendor renames (HP to Agilent to
Keysight, et al) are ugly but can't be helped easily.

4 years agoscpi-dmm: minor style adjustment (gdm906x, analog init, comments, diag)
Gerhard Sittig [Mon, 17 Aug 2020 18:01:02 +0000 (20:01 +0200)]
scpi-dmm: minor style adjustment (gdm906x, analog init, comments, diag)

Address minor style issues: Need not assign NULL after g_malloc0(), need
not check for NULL before g_free(). Rephrase diagnostics messages which
are user visible by default, remove internal development details. Reword
a few comments, and adjust their grammar for consistency across the code
base. The sr_analog_init() routine executed immediately before getting
measurements, need not (re-)assign endianess or floating point details,
except those which do change after initialization (double vs float).
Rephrase model dependent checks for easier adjustment during maintenance.
Unobfuscate string comparisons.

4 years agoscpi: Raise severity when IDN response lacks the serial number field.
Gerhard Sittig [Mon, 17 Aug 2020 17:07:37 +0000 (19:07 +0200)]
scpi: Raise severity when IDN response lacks the serial number field.

Raise the diagnostics message's severity from debug to warn when the
'*IDN?' response lacks the serial number field. Although it has only
been seen for some GWInstek DMMs, it violates the SCPI spec, and more
or other activity is required in a future implementation. This change
amends commit 47e7a6395e21.

4 years agoscpi_serial: Rephrase NL and NL+CR line termination check.
Gerhard Sittig [Mon, 17 Aug 2020 16:48:50 +0000 (18:48 +0200)]
scpi_serial: Rephrase NL and NL+CR line termination check.

Rearrange the check for line termination in SCPI receive data, and add a
comment in that spot. Keep related conditions together, avoid line breaks
for complex terms. This shall simplify review, and raise awareness during
maintenance. This change amends commit a0ade2f933d6.

4 years agoscpi_serial: Add GW-Instek GPD-9061 (USBCDC mode) VID/PID.
Timo Kokkonen [Sun, 16 Aug 2020 00:03:34 +0000 (17:03 -0700)]
scpi_serial: Add GW-Instek GPD-9061 (USBCDC mode) VID/PID.

4 years agoudev: Add GW-Instek GDM-9061 VID/PID.
Timo Kokkonen [Sat, 15 Aug 2020 23:59:55 +0000 (16:59 -0700)]
udev: Add GW-Instek GDM-9061 VID/PID.

4 years agoscpi-dmm: Add support for GW-Instek 906X series bench multimeters.
Timo Kokkonen [Sat, 15 Aug 2020 22:40:23 +0000 (15:40 -0700)]
scpi-dmm: Add support for GW-Instek 906X series bench multimeters.

- Add support for GDM-9060 and GDM-9061 DMMs.

4 years agoscpi-dmm: Add support for GW-Instek 8200A series bench multimeters.
Timo Kokkonen [Tue, 2 Jun 2020 06:29:47 +0000 (23:29 -0700)]
scpi-dmm: Add support for GW-Instek 8200A series bench multimeters.

- Add support for GDM-8251A and GDM-8255A DMMs.

4 years agoscpi: Support devices that omit serial number in *IDN? command responses.
Timo Kokkonen [Tue, 2 Jun 2020 07:42:54 +0000 (00:42 -0700)]
scpi: Support devices that omit serial number in *IDN? command responses.

4 years agoscpi_serial: Add support for (broken) devices sending NL+CR terminator.
Timo Kokkonen [Tue, 2 Jun 2020 06:56:03 +0000 (23:56 -0700)]
scpi_serial: Add support for (broken) devices sending NL+CR terminator.

This allows SCPI code to work with devices that terminate their responses
with NL+CR (instead of usual NL) like some GW-Instek DMMs.

4 years agoserial_hid: add iokit= prefix for the Mac IOKit special case
Gerhard Sittig [Thu, 30 Jul 2020 16:54:44 +0000 (18:54 +0200)]
serial_hid: add iokit= prefix for the Mac IOKit special case

Rephrase the logic which turns HIDAPI paths returned from enumerations
into something that can be used with conn= device options. Rearrange
code paths and rename variables to hopefully increase readability, and
to prepare support for more conditions in future implementations.

Replace the "IOService:" prefix on recent Mac versions with the "iokit="
literal, to eliminate the previously unhandled colon in path names. This
resolves bug #1586.

Move the allocation of a writable buffer from the callers to the callee,
to simplify multiple call sites, and most of all because the caller need
not be aware of the buffer's required size (input and output size can
differ in either direction).

Update the conn=hid/ section in README.devices, add the iokit= prefix.

4 years agooutput/csv: complete and improve timestamp construction support
Gerhard Sittig [Wed, 5 Aug 2020 17:52:17 +0000 (19:52 +0200)]
output/csv: complete and improve timestamp construction support

Unbreak the timestamp calculation when session data is received in
multiple packets. Avoid a division by zero when the samplerate is not
known yet the time column is requested. Only calculate timestamps when
the time column is requested. Use floating point during the scaling,
only convert to integer immediately before printing. Change line breaks
to not split a complex sub-expression across several lines.

4 years agooutput/csv: Avoid accumulated timestamp error for odd samplerates
Earle F. Philhower, III [Sat, 2 May 2020 17:45:22 +0000 (10:45 -0700)]
output/csv: Avoid accumulated timestamp error for odd samplerates

The conversion of sample rates to sample periods and the repeated
addition of truncated values (integer variables) resulted in the
accumulation of errors in the timestamp column for odd samplerate
values. How to reproduce:

  $ sigrok-cli -d demo:analog_channels=0 \
      -c samplerate=6000000 --samples 1200001 \
      -O csv:time=true | tail

Accept the additional cost to reduce the error. Always get the timestamp
in a new calculation based on the sample number and the sample rate.

This addresses bug #1027.

Signed-off-by: Earle F. Philhower, III <redacted>
[ gsi: rephrased commit message, how to reprodue ]

4 years agogwinstek-gpd: Add missing SW limits API calls.
Timo Kokkonen [Tue, 14 Jul 2020 04:54:25 +0000 (21:54 -0700)]
gwinstek-gpd: Add missing SW limits API calls.

4 years agosw_limits: add const for limits param for config_get
Gerhard Sittig [Mon, 3 Aug 2020 15:48:38 +0000 (17:48 +0200)]
sw_limits: add const for limits param for config_get

The sr_sw_limits_config_get() routine exclusively reads the 'limits'
parameter, need not write to it. Add the 'const' attribute.

4 years agoserial: make failed flush() in open() non-fatal, CP2110 flush() return
Gerhard Sittig [Sat, 1 Aug 2020 12:55:20 +0000 (14:55 +0200)]
serial: make failed flush() in open() non-fatal, CP2110 flush() return

Commit cb828f1b3e00 introduced an unconditional flush() call in the
open() routine's body, and passed its return value in verbatim form to
open() callers. Some of the transports/cables for serial communication
yield the SR_ERR_NA return value. Consider this a non-fatal condition.

Unbreak the CP2110 HID chip's flush() implementation. Don't expect a
return value of 0 from HID write calls, instead expect to see the number
of written bytes for successful calls.

This was tested with ch9325 (UT-D04), cp2110 (UT-D09) and bu86x.

4 years agogwinstek-gpd: Add support to old (hardware) revision units.
Timo Kokkonen [Tue, 14 Jul 2020 04:32:17 +0000 (21:32 -0700)]
gwinstek-gpd: Add support to old (hardware) revision units.

Manufacturer revised hardware design without changing model numbers at some point.
Old units have firmware that behaves differently. Responses are terminated with \r
instead of \n. And STATUS? command response format is different.

4 years agogwinstek-gpd: Add support for GPD-3303S.
Timo Kokkonen [Tue, 14 Jul 2020 04:44:25 +0000 (21:44 -0700)]
gwinstek-gpd: Add support for GPD-3303S.

4 years agooutput/ascii: data type nits, rephrase sample bit access
Gerhard Sittig [Fri, 31 Jul 2020 09:09:46 +0000 (11:09 +0200)]
output/ascii: data type nits, rephrase sample bit access

Use size types for counters, unsigned for bit manipulation. Trigger
position needs to remain a signed int (must be possible to go negative
for "not here", and strictly remains within the output text line length,
so should be good).

Rephrase the nested loop during bit extraction from logic packets, and
how a channel's value at a given sample number gets accessed. Eliminate
redundancy in that spot, to improve readability and simplify maintenance.

4 years agooutput/ascii: style nits in name alignment and trigger flush
Gerhard Sittig [Fri, 31 Jul 2020 08:15:44 +0000 (10:15 +0200)]
output/ascii: style nits in name alignment and trigger flush

Unobfuscate the implementation of the recent channel name alignment and
trigger position flush, address other style nits of earlier versions:

Don't need a GString for runtime constant channel names (which also
suffered from a mismatch of declaration and allocation). Don't need to
"construct space" when printf(3) can align the value. Pre-allocate text
buffers with more appropriate length when known in advance. Drop another
unused variable. Eliminate data type redundancy in malloc(3) calls. Make
sure to get zeroed memory, disabled channels can result in assignment
gaps. Use consistent brace style and separate variable declaration from
use (no RAII here).

Excess text line length remains, there has been a lot of it in the
previous implementation. It is left for another commit.

Tested with:

  $ sigrok-cli -d demo:analog_channels=0:logic_channels=4 --samples 40 -O ascii -t D3=r -w

4 years agooutput/ascii: Also print trigger marker for "short" data lines
v1ne [Wed, 1 Apr 2020 20:14:39 +0000 (22:14 +0200)]
output/ascii: Also print trigger marker for "short" data lines

The trigger position would be missing in the output text when the number of
available samples is less than the configured text line length. Do flush the
trigger marker for the last chunk of accumulated samples, too.

How to reproduce:

  $ sigrok-cli -d ... --samples 32 -O ascii:width=128

[ gsi: rephrased commit message ]

4 years agooutput/ascii: Vertically align logic channel names
v1ne [Wed, 1 Apr 2020 19:34:01 +0000 (21:34 +0200)]
output/ascii: Vertically align logic channel names

This results in vertical alignment of sample data and trigger positions.
The implementation assumes that the channel names' byte count corresponds
to the space which they occupy on screen. Channel names with umlauts still
may suffer from misalignment.

[ gsi: rephrased commit message ]

4 years agooutput/ascii: Remove unused variable
v1ne [Wed, 1 Apr 2020 20:13:26 +0000 (22:13 +0200)]
output/ascii: Remove unused variable

4 years agoanalog: avoid double free in '-O analog' shutdown path
milan hauth [Tue, 28 Jul 2020 15:01:03 +0000 (17:01 +0200)]
analog: avoid double free in '-O analog' shutdown path

Do void the 'def' and 'values' references for '-O analog' module options
in the shutdown path, to avoid double free calls.

4 years agooutput/srzip: improve robustness (analog-only acquisition)
Gerhard Sittig [Mon, 27 Jul 2020 16:51:22 +0000 (18:51 +0200)]
output/srzip: improve robustness (analog-only acquisition)

For pure analog acquisition without logic data the ZIP creation code
path resulted in a division by zero. Skip the bytes to samples math in
that case. How to reproduce:

  $ sigrok-cli -d demo:logic_channels=0:analog_channels=1 --samples 20 -o file.sr

Avoid a dependency on malloc(0) behaviour while we are here. Add a
warning on data feed submitter implementation issues, to not silently
drop the data, which could surprise users. This ShouldNotHappen(TM) for
correct implementations where channel counts and unit size agree, but
was observed with incomplete out-of-tree implementations. Eliminate
a data type redundancy in another malloc() call.

4 years agoscpi-dmm: Add Agilent 34410A.
Mike Walters [Mon, 27 Jul 2020 00:10:57 +0000 (01:10 +0100)]
scpi-dmm: Add Agilent 34410A.

4 years agoserial: flush() after open() in the serial core.
Wolfram Sang [Sun, 3 May 2020 20:57:50 +0000 (22:57 +0200)]
serial: flush() after open() in the serial core.

Quite some drivers flush the serial port after opening it. And quite
some don't although they should. Factor this out, so serial_open() will
always flush the port. The removal in the drivers was done with this
small coccinelle script:

@@
struct sr_serial_dev_inst *serial;
@@

        serial_open(serial, ...)
        ... when != serial
-       serial_flush(serial);

and then the results and the unmatched findings of serial_flush() were
audited.

Signed-off-by: Wolfram Sang <redacted>
4 years agobt: drop bt_put_le16() dependency (not universally available)
Gerhard Sittig [Fri, 6 Sep 2019 15:43:05 +0000 (17:43 +0200)]
bt: drop bt_put_le16() dependency (not universally available)

Eliminate the dependency on the non-portable bt_put_le16() routine. It
isn't available in all supported BlueZ versions, and won't be available
in other platform backends. Prefer write_u16le() which is available on
all sigrok supported platforms.