libsigrok.git
12 months agosiglent-sds: move model dependent request emission to after identification
Gerhard Sittig [Sat, 22 May 2021 10:26:18 +0000 (12:26 +0200)]
siglent-sds: move model dependent request emission to after identification

Device or model or protocol variant specific commands should only be
used after the device reliably got identified. The "CHDR OFF" command
upsets other devices and needs to move after *IDN? and model checks.

12 months agohp-59306a: only match when conn= is given to avoid false probe positives
Gerhard Sittig [Sat, 22 May 2021 10:25:27 +0000 (12:25 +0200)]
hp-59306a: only match when conn= is given to avoid false probe positives

The HP 59306A device was made in 1973 and would not reliably identify
by means of SCPI queries. The previous scan() implementation would have
matched any connected SCPI device, then upset these devices by emitting
non-SCPI requests.

Tighten the scope of the hp-59306a probe, only scan for devices when a
conn= spec was provided. This avoids false positives and malfunction of
other devices, and still lets users address the problematic device. This
is similar to serial-dmm and unspecific cables and has proven to work
there.

How to reproduce the issue:

  (while any auto enumerating SCPI device is connected)
  $ sigrok-cli --scan

12 months agomotech-lps-301: make better use of serial extract options helper
Gerhard Sittig [Sat, 22 May 2021 11:35:29 +0000 (13:35 +0200)]
motech-lps-301: make better use of serial extract options helper

Pre-assign default values before having user specified options scanned.
This avoids the necessity to post-process the result. Move the initial
assignment to where its corresponding update is to improve readability.

12 months agoserial: extend semantics of connection and comm params extraction helper
Gerhard Sittig [Sat, 22 May 2021 11:27:43 +0000 (13:27 +0200)]
serial: extend semantics of connection and comm params extraction helper

The sr_serial_extract_options() routine is a hidden gem, has existed for
almost eight years, and is exclusively used by the motech-lps-301 driver
(was also used by hameg-hmo at some point in the past). Being so useful
and doing something to terribly popular, more drivers should use it.

Extend the API to make either of the out parameters genuinely optional,
and guarantee that pre-assigned defaults will survive in the absence of
user specs. Update the Doxygen comment.

13 months agoscpi-dmm: avoid get/set range calls for some of the Agilent DMM functions
Gerhard Sittig [Fri, 21 May 2021 16:37:05 +0000 (18:37 +0200)]
scpi-dmm: avoid get/set range calls for some of the Agilent DMM functions

While queries for the range are supported for voltage, current,
resistence, capacitance, the same queries in temperature, frequency,
diode, continuity modes not only fail but even lose the USB connection
to the device. This was consistently observed with 34405A and 34465A.

Suppress get and set range requests for the known problematic modes of
the Agilent protocol speaking meters.

13 months agoscpi-dmm: add four-wire resistance to list of 34405A MQs
Gerhard Sittig [Fri, 21 May 2021 16:55:57 +0000 (18:55 +0200)]
scpi-dmm: add four-wire resistance to list of 34405A MQs

Although the 34405A does not support this function, other Agilent
protocol using meters do (currently 34465A, very probably others which
are about to get added in the future).

It's assumed that announcing the availability of that MQ for a set of
meters while only some of them support it is preferrable over exploding
numbers of copies of tables which only slightly vary among each other.

13 months agoscpi-dmm: prepare introduction of per-MQ driver flags
Gerhard Sittig [Fri, 21 May 2021 16:35:01 +0000 (18:35 +0200)]
scpi-dmm: prepare introduction of per-MQ driver flags

This mechanical edit adds a flags field and the initializer element to
make the compiler happy. Behaviour does not change. See a word diff for
improved review experience.

13 months agoscpi-dmm: add support to get/set range on Agilent protocol using meters
Gerhard Sittig [Thu, 20 May 2021 20:00:47 +0000 (22:00 +0200)]
scpi-dmm: add support to get/set range on Agilent protocol using meters

Add support to get and set the auto/manual range on Agilent protocol
speaking devices (34405A, 34465A). The range values are mere numbers
without a unit or MQ associated with them. Support to list available
ranges is prepared but not used (not needed on these meters). Common
logic could open code the lists of ranges from the model description
if desired in a future implementation.

13 months agoscpi-dmm: use INIT instead of MEAS for Agilent to start acquisition
Gerhard Sittig [Thu, 20 May 2021 22:30:51 +0000 (00:30 +0200)]
scpi-dmm: use INIT instead of MEAS for Agilent to start acquisition

Though measurement values come in, the 34405A and 34465A meters kept
beeping when acquisition is started. Stopped beeping when the MEAS
keyword was changed to INIT, which is used for other Agilent devices
using the HP protocol variant.

This change is acceptable because it was tested on all DMMs which use
the Agilent protocol (according to scpi-dmm profiles).

13 months agoscpi-dmm: Keysight 34465A is a 6.5 digit meter, bump digits count
Gerhard Sittig [Thu, 20 May 2021 21:11:56 +0000 (23:11 +0200)]
scpi-dmm: Keysight 34465A is a 6.5 digit meter, bump digits count

Increase the default digit count in the 34465A model description. Though
most measurements get the precision from the current reading, this data
is used as a fallback when the response won't provide the detail.

13 months agoscpi-dmm: move OPC availability check to after IDN device identification
Gerhard Sittig [Thu, 20 May 2021 21:08:19 +0000 (23:08 +0200)]
scpi-dmm: move OPC availability check to after IDN device identification

Assume that *IDN? requests don't involve expensive processing, and thus
don't require *OPC? before their execution. This makes scpi-dmm follow
the good tradition to only use non-standard or model dependent features
after the device was successfully identified. Which avoids confusion on
unrelated devices.

Exclusively check for *OPC? availability on Owon devices, because these
motivated the introduction of the test in the first place. This avoids
confusion on other devices where short timeouts result in errors because
the response is not retrieved although the command is supported (observed
on Agilent meters connected via USBTMC).

13 months agocontrib: add udev rule for Keysight USBTMC
Gerhard Sittig [Thu, 20 May 2021 18:53:14 +0000 (20:53 +0200)]
contrib: add udev rule for Keysight USBTMC

Add the USB identification of a Keysight 34465A digital multimeter.

13 months agosiglent-sds: prefer common glib routine to get vector's length
Gerhard Sittig [Sun, 16 May 2021 12:57:54 +0000 (14:57 +0200)]
siglent-sds: prefer common glib routine to get vector's length

Replace an open coded loop with a call to common glib code.

13 months agoscpi: readability nits in vector getters, style nit in malloc call
Gerhard Sittig [Sun, 16 May 2021 17:51:52 +0000 (19:51 +0200)]
scpi: readability nits in vector getters, style nit in malloc call

Improve readability of SCPI uint8 and float vector get routines. Move
assignment and use of variables closer together to simplify review.
Allocate the glib array based on the text split result's length. Move
data processing to the "straight" path and handle failed conversion as
an exceptional condition in an error path.

Eliminate a redundant data type reference in a malloc call.

13 months agosiglent-sds: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:54:48 +0000 (14:54 +0200)]
siglent-sds: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

The implemented approach is modelled after pull request 114 by
Matti Eiden, to get the leak fixes in while the PR is queued.

This addresses part of bug #1683.

Submitted-By: Matti Eiden <snaipperi@gmail.com>
13 months agohameg-hmo: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 17:42:53 +0000 (19:42 +0200)]
hameg-hmo: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

Move an existing assigment such that the initial assignment, the memory
allocation, use of response data, and resource release are in closer
proximity, and thus are easier to reason about during maintenance.
Behaviour does not change.

This is motivated by bug #1683.

13 months agorigol-ds: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:48:42 +0000 (14:48 +0200)]
rigol-ds: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

The approach to release allocated memory is simlar or identical to the
corresponding parts of pull request 95, in an attempt to get the reported
leak fixes in, yet reduce the potential for conflicts where this commit
deviates from the PR. Most work was done by Ralf. Thank you!

This addresses part of bug #1683.

Submitted-By: Reported-By: Ralf <jr-oss@gmx.net>
Tested-By: Reported-By: Ralf <jr-oss@gmx.net>
13 months agoscpi-dmm: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:52:49 +0000 (14:52 +0200)]
scpi-dmm: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

This addresses part of bug #1683.

13 months agorigol-dg: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:45:47 +0000 (14:45 +0200)]
rigol-dg: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

Move an existing release call to an earlier location, to avoid leaking
memory when an error path is taken.

This addresses part of bug #1683.

13 months agolecroy-xstream: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:44:57 +0000 (14:44 +0200)]
lecroy-xstream: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

This addresses part of bug #1683.

13 months agohp-3457a: style nits in the probe routine
Gerhard Sittig [Sun, 16 May 2021 13:30:42 +0000 (15:30 +0200)]
hp-3457a: style nits in the probe routine

Unobfuscate a string comparison. Eliminate redundant data type specs
in malloc calls.

13 months agohp-3457a: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:43:58 +0000 (14:43 +0200)]
hp-3457a: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

This addresses part of bug #1683.

13 months agofluke-45: free memory that was allocated by SCPI get routines
Gerhard Sittig [Sun, 16 May 2021 12:40:00 +0000 (14:40 +0200)]
fluke-45: free memory that was allocated by SCPI get routines

The SCPI get routines may allocate memory for response data which
callers have to free after use.

This implementation is incomplete. The fluke-45 driver's context holds
a "global" copy of the most recently received response. While the data
is freed in the next receive call, one item remains allocated for the
driver's remaining life time. Which is considered non-critical.

Also moves an operator in a complex multi-line expression to a different
location to follow the project's style.

This addresses part of bug #1683.

13 months agoscpi: document callers' responsibility to free getters' allocated memory
Gerhard Sittig [Sun, 16 May 2021 17:47:44 +0000 (19:47 +0200)]
scpi: document callers' responsibility to free getters' allocated memory

Some of the SCPI getter routines allocate memory for response data which
callers need to free after use. Document this responsibility in more
places, and rephrase existing locations for consistency. See a word-diff
for the essence of the commit.

It's assumed that the separate paragraph in the function description is
better perceived than something that's hidden in the parameter or return
value discussion. Also reference the corresponding free routine by name
for callers' convenience (data types will differ among routines). Some
free routines can be called unconditionally, others require NULL checks
at the caller's.

Reported-By: Ralf <jr-oss@gmx.net>
13 months agoscpi: make sure to either return valid SCPI response data or NULL
Gerhard Sittig [Sun, 16 May 2021 11:48:24 +0000 (13:48 +0200)]
scpi: make sure to either return valid SCPI response data or NULL

Assign NULL early in those SCPI get routines which return allocated
memory to their callers. So that the return value is either a valid
pointer to memory or NULL regardless of the routine's exit code. This
simplifies call sites and increases robustness.

13 months agoserial_libsp: extend diag in code path which opens serial ports
Gerhard Sittig [Sun, 9 May 2021 17:27:22 +0000 (19:27 +0200)]
serial_libsp: extend diag in code path which opens serial ports

Opening a serial port involves two libserialport calls, while only the
second call's return value gets inspected. Check the lookup before the
open, too, and provide its details in a diag message.

13 months agoserial-dmm: Add PeakTech 2025 meter support.
Rafael G. Martins [Thu, 1 Apr 2021 19:01:57 +0000 (21:01 +0200)]
serial-dmm: Add PeakTech 2025 meter support.

This meter seems to be a rebranded Victor 86D. Vendor procotol
documentation matches FS9922 RS232 protocol.

13 months agordtech-dps: Add missing devc initialisation.
Frank Stettner [Sun, 9 May 2021 16:55:08 +0000 (18:55 +0200)]
rdtech-dps: Add missing devc initialisation.

14 months agocontrib/60-libsigrok.rules: add udev rule for Microchip PICkit2
Gerhard Sittig [Thu, 28 Mar 2019 16:43:24 +0000 (17:43 +0100)]
contrib/60-libsigrok.rules: add udev rule for Microchip PICkit2

14 months agoinput/csv: trim surrounding whitespace from header line channel names
Gerhard Sittig [Mon, 6 Jan 2020 08:59:21 +0000 (09:59 +0100)]
input/csv: trim surrounding whitespace from header line channel names

When CSV import grabs channel names from the first line in the file then
the text strictly between column separators (a comma) was used. Which
resulted in channel names like " channel 1". Trim leading and trailing
space before unquote, to better fulfill most users' expectation. Users
still can quote the input data for special cases if desired.

14 months agordtech-dps: research to reduce serial comm transfer volume again
Gerhard Sittig [Sun, 25 Apr 2021 08:03:47 +0000 (10:03 +0200)]
rdtech-dps: research to reduce serial comm transfer volume again

The DPS devices default to a rather low UART communication bitrate. The
generous retrieval of more Modbus registers than strictly necessary for
the periodic acquisition of analog channel values and state tracking may
or may not be an issue.

Instrument all call sites in api.c to the device state gathering calls
such that the protocol.c side transparently can reduce the transfer
volume depending on which level of detail the caller may expect given
its current context. Under optimal circumstances this might cut the
traffic in half, which DPS devices may benefit from.

This commit adds the infrastructure to potentially reduce transfer
volume, but does not change behaviour. The "config" reasons may need
further partitioning if Modbus register access really turns out to be
a severe bottleneck. The API lends itself to that extension easily. The
approach which gets prepared in this commit needs to get runtime tested
by those who got access to the hardware.

14 months agordtech-dps: introduce support for RD6006 and other Riden RD models
Gerhard Sittig [Sun, 25 Apr 2021 07:03:22 +0000 (09:03 +0200)]
rdtech-dps: introduce support for RD6006 and other Riden RD models

The RD devices differ from DPS devices in their default communication
bitrate (115200), register content endianess (BE), and register set
layout (addresses for registers). In either case 16bit registers get
accessed by means of Modbus communication over a serial channel. The
interpretation of the registers' values mostly is the same as for DPS
devices once a register with the same meaning got identified. Device
identification includes a 32bit serial number which DPS devices appear
to not provide.

All other product features are the same, and map to identical sigrok
mechanisms. That's why re-using the rdtech-dps driver to add rdtech-rd
support is considered desirable. This implementation shares all code
"above" the raw register addressing and raw value interpretation. All
logical processing, configuration interface, state tracking and data
submission to the session feed, are shared among the different device
types.

Declare support for the RD6006, RD6012, and RD6018 models. Their specs
were taken from the 2020.12.2 instruction manual. The driver was tested
with an RD6006 device (firmware version 1.28). Unfortunately automatic
device detection is not possible or will not be reliable, which is why
users need to specify the respective model by picking one of the two
drivers. Within a driver variant the device identification and use of
the device are automatically dealt with.

14 months agordtech-dps: layer separation between API and protocol, style nits
Gerhard Sittig [Tue, 13 Apr 2021 21:52:59 +0000 (23:52 +0200)]
rdtech-dps: layer separation between API and protocol, style nits

The existing power supply driver for Riden DPS/DPH devices unfortunately
duplicated intimate details of modbus communication and register layout
including interpretation of raw register values across several source
files. Do separate the physical transport and the register layout and
register fields interpretation layers. This brings the driver in line
with the usual api.c and protocol.c arrangement of responsibilities, and
prepares the future addition of other similar devices.

Address a few style nits while we are here. Include <config.h> in all
source files, and alpha-sort include directives. Address minor data type
nits. Reduce indentation in code paths. Propagate more error codes.
Update comments which lagged behind the code, adjust grammer (eliminate
"actual" false friends). Eliminate a few magic numbers and redundancies,
switch to the more recent endianess aware byte stream reader API where
beneficial, to eliminate redundant offset math.

Other nits seem to have gone unnoticed before: The indices of all sigrok
channels were identical (all zero). Signed print formats were used for
unsigned data.

This implementation compiles, but wasn't runtime tested due to lack of
hardware. A rough estimate of transfer volume and transport throughput
suggests that the 10ms cycle time no longer can be kept, may end up
around 25ms (40 cycles per second). This can get avoided by adding more
code to tell the configuration requests, the acquisition start, and the
measurements grabbing during acquisition apart. It's assumed though that
the 10ms glib poll interval did not translate to such fast measurement
gathering. The firmware may typically provide data at lower rates anyway.

The generic source code may look overly complicated or redundant at
first glance, but compilers' generated code will greatly get optimized.
Simplified maintenance because of reduced cognitive load is considered
more important.

14 months agohp-59306a: Initial HP 59306A driver.
Frank Stettner [Sat, 24 Apr 2021 14:44:50 +0000 (16:44 +0200)]
hp-59306a: Initial HP 59306A driver.

[ gsi: drop libgpib dependency, minor style adjustment ]

14 months agohp-59306a: Initial driver skeleton.
Frank Stettner [Sat, 24 Apr 2021 11:46:25 +0000 (13:46 +0200)]
hp-59306a: Initial driver skeleton.

14 months agoAdd device type SR_CONF_MULTIPLEXER.
Frank Stettner [Sat, 24 Apr 2021 14:43:23 +0000 (16:43 +0200)]
Add device type SR_CONF_MULTIPLEXER.

15 months agoAmend #119 to use vector instead of tuple
Soeren Apel [Sun, 28 Mar 2021 21:17:17 +0000 (23:17 +0200)]
Amend #119 to use vector instead of tuple

This way, we don't need to bump glibmm to 2.54, which we otherwise would

15 months agokingst-la2016: address trivial style nits (whitespace, braces, line length)
Gerhard Sittig [Thu, 25 Feb 2021 20:31:21 +0000 (21:31 +0100)]
kingst-la2016: address trivial style nits (whitespace, braces, line length)

Improve readability by addressing the trivial style nits in the driver.

Break the channel list into two times eight instead of nine plus seven
items. Put braces around all branches if one of them has braces. Add
braces to multi line branches despite most of the branch just being a
comment -- it's still many lines. Break extra long text lines, adjust
the position of operators when single expressions span multiple lines.

Drop unnecessary parentheses around single variables and auto
incrementing pointer dereferences. Adjust whitespace especially for
pointer data types, and arith operators.

15 months agokingst-la2016: Eliminate non-portable packed structs for USB transfer layout
Helge Kruse [Sat, 30 Jan 2021 14:46:46 +0000 (15:46 +0100)]
kingst-la2016: Eliminate non-portable packed structs for USB transfer layout

Eliminate packed structs in the construction and in the reception of
USB transfers, since these are rather non-portable. Use common support
for endianess aware access to byte streams instead. This unbreaks the
driver for MinGW builds, and increases portability and maintainability
on all other sigrok supported platforms.

[ gsi: adjust more locations, improve robustness, fixup style, reword message ]

15 months agokingst-la2016: Use common code to send trigger and frame boundary packets
Helge Kruse [Sat, 30 Jan 2021 14:16:49 +0000 (15:16 +0100)]
kingst-la2016: Use common code to send trigger and frame boundary packets

[ gsi: adjust more locations, reword commit message ]

15 months agotests: extend endianess conversion tests to also cover the 48bit writer
Gerhard Sittig [Sat, 27 Feb 2021 13:35:54 +0000 (14:35 +0100)]
tests: extend endianess conversion tests to also cover the 48bit writer

Cover the recently added writer for 48bit little endian data. Prepare a
large bytes pattern buffer that can also serve for future 64bit tests.

15 months agolibsigrok-internal.h: add 48bit endianess aware byte stream helpers
Gerhard Sittig [Sat, 27 Feb 2021 13:19:18 +0000 (14:19 +0100)]
libsigrok-internal.h: add 48bit endianess aware byte stream helpers

15 months agokingst-la2016: Upload firmware to correct USB configuration 1
Helge Kruse [Sat, 30 Jan 2021 13:49:02 +0000 (14:49 +0100)]
kingst-la2016: Upload firmware to correct USB configuration 1

The ezusb_upload_firmware() routine opens the USB device and selects the
current configuration. The specified value must match the previously read
configuration descriptor. This commit unbreaks the firmware download for
MinGW builds which link against libusb-1.0.20-rc3-event-abstraction-v4.

[ gsi: reworded commit message ]

15 months agokorad-kaxxxxp: Add support for Korad KD3005P V2.1
Frank Stettner [Sat, 27 Feb 2021 13:00:39 +0000 (14:00 +0100)]
korad-kaxxxxp: Add support for Korad KD3005P V2.1

15 months agoscpi-dmm: Add support for Owon XDM2041
Petteri Aimonen [Sun, 28 Feb 2021 13:34:40 +0000 (15:34 +0200)]
scpi-dmm: Add support for Owon XDM2041

15 months agoscpi-dmm: Gracefully handle meters that lack OPC command.
Petteri Aimonen [Sun, 28 Feb 2021 13:32:08 +0000 (15:32 +0200)]
scpi-dmm: Gracefully handle meters that lack OPC command.

The SCPI standard requires OPeration Complete command,
but some Owon meters do not implement it. This commit
makes the probe try OPC once, and if it gets no reply
it assumes it is not supported.

15 months agoscpi-dmm: Add infinity limit to model-specific config.
Petteri Aimonen [Sun, 28 Feb 2021 13:28:55 +0000 (15:28 +0200)]
scpi-dmm: Add infinity limit to model-specific config.

Owon multimeters seem otherwise compatible with gwinstek reader,
except infinity is only 1e9.

16 months agoscpi-pps: Add support for Owon P4000 series.
Petteri Aimonen [Sun, 28 Feb 2021 13:25:21 +0000 (15:25 +0200)]
scpi-pps: Add support for Owon P4000 series.

Tested on P4603 firmware version 1.6.0.

16 months agohantek-6xxx: Add ISDS205B support
litospain [Sat, 11 Apr 2020 20:27:15 +0000 (22:27 +0200)]
hantek-6xxx: Add ISDS205B support

16 months agohantek-6xxx: Fix for channel coupling not updating on changing
waka [Fri, 17 Jul 2020 20:28:06 +0000 (22:28 +0200)]
hantek-6xxx: Fix for channel coupling not updating on changing

Presumed regression related to fix for bug #836

16 months agozketech-ebd-usb: Don't ignore errors
Florian Ragwitz [Sun, 29 Nov 2020 02:19:24 +0000 (18:19 -0800)]
zketech-ebd-usb: Don't ignore errors

16 months agobeaglelogic: Fix resource leak
Florian Ragwitz [Sun, 29 Nov 2020 02:18:35 +0000 (18:18 -0800)]
beaglelogic: Fix resource leak

16 months agohantek-dso: fix 100MS/s
Alberto Scotta [Sat, 5 Dec 2020 15:05:51 +0000 (16:05 +0100)]
hantek-dso: fix 100MS/s

Do not downsample at 100MS/s.
The device actually sampled at (100.0/0x1000)MS/s when 100MS/s was set.

16 months agorigol-ds: Add DS1102Z-E model variant
HReimann [Sat, 23 Jan 2021 15:44:04 +0000 (16:44 +0100)]
rigol-ds: Add DS1102Z-E model variant

16 months agopython bindings: Support passing in rational voltages for config_set
Richard Allen [Tue, 26 Jan 2021 06:27:09 +0000 (00:27 -0600)]
python bindings: Support passing in rational voltages for config_set

16 months agogwinstek-gpd: Fix voltage/current measurement
Richard Allen [Sat, 16 Jan 2021 22:24:50 +0000 (16:24 -0600)]
gwinstek-gpd: Fix voltage/current measurement

16 months agogwinstek-gpd: Support auto-baud detection
Richard Allen [Sat, 16 Jan 2021 19:47:38 +0000 (13:47 -0600)]
gwinstek-gpd: Support auto-baud detection

If the user does not specify a serialcomm configuration,
try all three options from the manual.

16 months agogwinstek-gpd: Retry device identification on failure
Richard Allen [Sat, 16 Jan 2021 19:31:31 +0000 (13:31 -0600)]
gwinstek-gpd: Retry device identification on failure

Try the identification command up to three times
if the device responds with 'Invalid Character.',
which can happen if the device has buffered part
of a command but not executed it.

16 months agogwinstek-gpd: Print serialcomm config
Richard Allen [Sat, 16 Jan 2021 18:35:35 +0000 (12:35 -0600)]
gwinstek-gpd: Print serialcomm config

16 months agoscpi-pps: add R&S HMP2000 model specs
Gerhard Sittig [Tue, 2 Feb 2021 20:09:54 +0000 (21:09 +0100)]
scpi-pps: add R&S HMP2000 model specs

Re-use HMP4000 options and channel groups, only keep separate channel
specs for HMP2000 devices. HMP2030 has three identical 32V/5A channels.
HMP2020 has one 10A channel and one 5A channel.

16 months agoscpi-pps: adjust R&S HMP4000 current resolution for 10A channels
Gerhard Sittig [Tue, 2 Feb 2021 20:07:29 +0000 (21:07 +0100)]
scpi-pps: adjust R&S HMP4000 current resolution for 10A channels

Specs published by R&S suggest that 10A channels support 0.2mA resolution,
while only 5A channels resolve to 0.1mA (up to 1A full scale, 1mA above 1A).

17 months agools: Clean up: Replace hand-rolled byte order conversion with existing macros
v1ne [Tue, 31 Mar 2020 22:29:05 +0000 (00:29 +0200)]
ols: Clean up: Replace hand-rolled byte order conversion with existing macros

17 months agools: Refactor: Extract trigger setup into private place
v1ne [Wed, 1 Apr 2020 03:35:02 +0000 (05:35 +0200)]
ols: Refactor: Extract trigger setup into private place

This copies the code verbatim from one place to another in preparation to adding
support for complex triggers.

17 months agools: Make external clock setting queriable
v1ne [Tue, 31 Mar 2020 22:05:37 +0000 (00:05 +0200)]
ols: Make external clock setting queriable

... and thus selectable in PulseView.

17 months agools: Add option to use the falling edge of the external clock
v1ne [Tue, 31 Mar 2020 18:29:48 +0000 (20:29 +0200)]
ols: Add option to use the falling edge of the external clock

17 months agools: Clear "disabled groups" flags before setting them
v1ne [Tue, 31 Mar 2020 18:21:47 +0000 (20:21 +0200)]
ols: Clear "disabled groups" flags before setting them

This fixes a bug where the channel group setting would not be overwritten in a
new run, but instead the channel group settings of both runs would be merged
together.

17 months agools: Display actual expanded sample instead of the raw sample
v1ne [Wed, 1 Apr 2020 14:15:36 +0000 (16:15 +0200)]
ols: Display actual expanded sample instead of the raw sample

While the raw sample is the actual received data, the expanded sample is the
crucial data I as a developer am interested in seeing. At least if I assume that
the sample expansion works.

17 months agools: Clean up: Prefix private function for consistency
v1ne [Wed, 18 Nov 2020 22:54:46 +0000 (23:54 +0100)]
ols: Clean up: Prefix private function for consistency

17 months agodoc: update README.devices for Meterman 38XR (RS232 button)
Gerhard Sittig [Tue, 5 Jan 2021 17:17:45 +0000 (18:17 +0100)]
doc: update README.devices for Meterman 38XR (RS232 button)

17 months agodmm/mm38xr: introduce DMM packet parser for Meterman 38XR
Peter Skarpetis [Mon, 4 Jan 2021 04:59:23 +0000 (15:59 +1100)]
dmm/mm38xr: introduce DMM packet parser for Meterman 38XR

Introduce a DMM packet parser in src/dmm/ and register it with the
serial-dmm device driver. This adds support for the Meterman 38XR
multimeter.

[ gsi: style adjustment, raise awareness during maintenance ]

17 months agoserial-dmm: move Mastek items after Metex in the model database
Gerhard Sittig [Tue, 5 Jan 2021 07:10:21 +0000 (08:10 +0100)]
serial-dmm: move Mastek items after Metex in the model database

Keep the alpha-sort order in the list of supported chips and models.

17 months agoarachnid-labs-re-load-pro: Fix for get voltage and current while in acquisition.
Frank Stettner [Mon, 4 Jan 2021 13:36:18 +0000 (14:36 +0100)]
arachnid-labs-re-load-pro: Fix for get voltage and current while in acquisition.

[ gsi: moved intruction order to unify with other cond signalling code paths ]

18 months agodmm/bm52x: unbreak build when serial comm is not available
Gerhard Sittig [Tue, 29 Dec 2020 17:31:38 +0000 (18:31 +0100)]
dmm/bm52x: unbreak build when serial comm is not available

Make another code path in the Brymen BM52x packet parser optional which
snuck in earlier and broke compilation when serial_comm dependencies are
not met.

Ideally the src/dmm/ parser code would not get built at all in that
case, but building a parser with reduced functionality and not using it
later because its callers are conditional is as good, and is what other
DMM packet parsers did in the past.

How to reproduce:

  $ configure --without-libserialport --without-libhidapi --without-libbluez
  $ make

18 months agofx2lafw: Unbreak SR_CONF_LIMIT_SAMPLES for large values (above 2**32)
Ralf [Tue, 15 Dec 2020 19:02:37 +0000 (20:02 +0100)]
fx2lafw: Unbreak SR_CONF_LIMIT_SAMPLES for large values (above 2**32)

Capture does not stop for sample count values which exceed the range of
a 32bit type variable. Adjust the data type to 64bit.

How to reproduce: 8MSa/s * 600s -> 4,800,000,000 samples

  $ sigrok-cli -d fx2lafw -o capture.sr --config samplerate=8M --time 600000

[ gsi: rephrased the commit message ]

18 months agoftdi-la: work around missing USB strings during device probe
Gerhard Sittig [Fri, 25 Dec 2020 11:47:01 +0000 (12:47 +0100)]
ftdi-la: work around missing USB strings during device probe

Some FTDI chip based products ship with EEPROM content which makes
libftdi fail to lookup the USB strings, which breaks the scan for the
device's presence. The previous implementation was strict and only
accepted the absence of a serial number. This implementation also copes
when vendor and model cannot be gathered from the device, and provides
fallback values based on VID:PID numbers.

Also factor out a magic number for string lengths. Stick with dynamic
allocation since 3x 32bytes would be rather huge a local stack use, and
future maintenance might bump that string length again.

[ gsi: magic number in one spot, bounded string assignment, style nits ]

Submitted-By: Christo Crause <christo.crause@gmail.com>
19 months agoasix-sigma: parse serial numbers as unsigned values
Niklas Thorne [Tue, 17 Nov 2020 11:55:26 +0000 (12:55 +0100)]
asix-sigma: parse serial numbers as unsigned values

This unbreaks device detection on 32bit platforms.

19 months agostrutil: introduce sr_atoul_base() conversion helper (non-decimal)
Niklas Thorne [Tue, 17 Nov 2020 11:55:26 +0000 (12:55 +0100)]
strutil: introduce sr_atoul_base() conversion helper (non-decimal)

Introduce a text to number conversion routine which supports non-decimal
bases and optional suffixes, but returns unsigned results and thus covers
a larger range of values. This kind of amends commit 97aa41e9b59c which
introduced the sr_atol_base() routine.

19 months agodriver_list: unbreak list of builtin drivers for LTO configurations
Gerhard Sittig [Tue, 3 Nov 2020 17:25:18 +0000 (18:25 +0100)]
driver_list: unbreak list of builtin drivers for LTO configurations

Check for the availability of the "no_reorder" linker attribute, which
keeps the list of builtin drivers in shape on LTO enabled build setups.
Keep backwards compatibility for platforms which lack support for the
"no_reorder" attribute. Phrase the implementation such that other
keywords as well as user provided external specs are possible.

This resolves bug #1433.

Submitted-By: Ivan Mironov <mironov.ivan@gmail.com>
20 months agolibsigrok-internal.h: add u64be endianess writer
Gerhard Sittig [Mon, 26 Oct 2020 18:48:22 +0000 (19:48 +0100)]
libsigrok-internal.h: add u64be endianess writer

Add endianess aware writer for uint64_t data in BE format. This is
motivated by the Codethink Interrogizer.

20 months agoserial-dmm: add support for the Brymen BM820s family
Gerhard Sittig [Wed, 30 Sep 2020 07:59:32 +0000 (09:59 +0200)]
serial-dmm: add support for the Brymen BM820s family

The BM820s series uses the same 10000 counts protocol as BM520s does,
but lacks the capability of recording measurements. Re-use the bm52x
DMM packet parser, but don't register the config get/set/list and
acquisition start callbacks.

It turns out that the packet request and packet validity check routines
need to be individual, since 0x82 is used instead of 0x52 as a magic
number in some places. Fortunately the complex payload parser is shared
among BM520s and BM820s series. This was tested with a BM829s meter.

20 months agodmm/bm52x: add support for recorded measurements (memory data sets)
Gerhard Sittig [Thu, 24 Sep 2020 21:01:26 +0000 (23:01 +0200)]
dmm/bm52x: add support for recorded measurements (memory data sets)

Extend the BM52x packet parser, add config get/set/list code to handle
the data source property. Either let the common serial-dmm code run the
acquisition of live readings, or locally retrieve the selected "session
page" and forward its measurements to the session bus. These separate
code paths are required because the protocol differs a lot between these
modes, a totally different set of requests and responses is involved,
response interpretation logic is impossible to share between live and
recorded measurements.

20 months agobrymen-dmm: remove obsolete driver (support has moved to serial-dmm)
Gerhard Sittig [Thu, 24 Sep 2020 19:50:37 +0000 (21:50 +0200)]
brymen-dmm: remove obsolete driver (support has moved to serial-dmm)

The DMM support for Brymen BM850s has moved to src/dmm/ and became
part of the serial-dmm driver. Remove the now obsolete brymen-dmm/
source code.

20 months agodmm/bm85x: introduce DMM packet parser for Brymen BM850(a/s)
Gerhard Sittig [Thu, 24 Sep 2020 19:45:51 +0000 (21:45 +0200)]
dmm/bm85x: introduce DMM packet parser for Brymen BM850(a/s)

Implement a DMM packet parser for the BM850s protocol. This involves
variable length responses, which recently became a common serial-dmm
feature. Register the new parser under the "brymen-bm85x" device name.
This obsoletes the brymen-dmm driver which announces as "brymen-bm857".
This implementation was tested with the BM859s meter.

The text to number conversion with precision detection resolves the
last remaining issue of bug #1611.

20 months agostrutil: add text to float conversion which also gets precision from text
Gerhard Sittig [Thu, 24 Sep 2020 19:18:21 +0000 (21:18 +0200)]
strutil: add text to float conversion which also gets precision from text

Provide a common string helper routine which converts input text to a
double precision floating point number, and also gets its precision in
the process.

20 months agoserial-dmm: more DMM parser callbacks (open, var length, config, start)
Gerhard Sittig [Thu, 24 Sep 2020 14:33:20 +0000 (16:33 +0200)]
serial-dmm: more DMM parser callbacks (open, var length, config, start)

Extend the serial-dmm driver's common infrastructure to support more
per-parser (per-model) specific extensions. Add support for variable
length packets (motivated by BM85x), and pass the packet length to
parsers which accept it. Add callbacks which run after the COM port got
opened (motivated by BM85x). Add support for additional configuration
get/set/list properties (motivated by BM52x), including a hook into the
acquisition start and a state container which is owned by the parser.

Device specific acquisition start can check its local state which can
store the result of previous config get/set requests, and can arrange
for a different receive routine to execute (motivated by BM52x). The
default code path will execute serial-dmm's receive routine which keeps
invoking the DMM's packet parser for each registered display.

Prefer double precision values in the new parser callbacks. Also fixup
some data type issues: Use unsigned types for length and size specs as
well as timeouts, don't promote false booleans to NULL pointers, reduce
malloc() argument redundancy. Rephrase some instruction grouping and
update comments to simplify future maintenance. Get the current time
just once for improved consistency in the packet re-request code path.
Rename identifiers in the data reception path to improve readability.

20 months agoserial: extend stream detect for variable length packet checkers
Gerhard Sittig [Thu, 24 Sep 2020 14:29:06 +0000 (16:29 +0200)]
serial: extend stream detect for variable length packet checkers

The previous implementation of the packet detection in a serial stream
assumed that all packets are of equal length which is known in advance.
Extend the packet validity check interface such that caller provided
callbacks can either decide that the input is valid or invalid (terminal
decision), or request more receive data before a decision can be made
(deferral, coverring variable length packets, with a minimum size to
cover the header before a length becomes available and the total packet
length is known).

This commit extends the API, and adjusts the call sites to not break the
compilation. Actual variable length checkers are yet to be done. Improve
readability while we are here: Better reflect the purpose and units of
variables in their identifiers. Tweak diagnostics messages, update
inline and doxygen comments.

20 months agoinput/vcd: fix a divide by zero bug in the analog-only case
Gerhard Sittig [Thu, 22 Oct 2020 17:27:06 +0000 (19:27 +0200)]
input/vcd: fix a divide by zero bug in the analog-only case

When the input data exclusively contained analog data, then creation of
the submit buffer for logic data caused a division by zero. Fix the
create_feed() routine.

20 months agoinput/vcd: suggest downsampling to users for reduced resource consumption
Gerhard Sittig [Sat, 17 Oct 2020 10:16:49 +0000 (12:16 +0200)]
input/vcd: suggest downsampling to users for reduced resource consumption

Naive creation of VCD files with inappropriately fine timescale specs
results in excessive resource consumption due to libsigrok's assumption
of a constant rate stream of sample data. A workaround is available and
documented, but users need to become much more aware.

Implement a reliable check for wasteful input data situations which
depends on the reception of _all_ input data, and can only alert users
late after potentially spending lots of time and assuming that available
resources allow completion of the import. Users could miss that check's
outcome.

Also implement early checks which (necessarily) are based on weaker
conditions, to already raise user's awareness while data import still is
executing. Phrase these early checks as computationally inexpensive as
possible, to not affect the main task of data import too much. Avoid
false positives by balancing the desire for early emission of messages
and picking appropriate conditions to test for.

This commit implements the foundation for early estimates and reliable
terminal checks, as well as the emission of messages which support users
and allow a more effective use of the file format. The specific limits
and tested conditions still may benefit from more tuning in the future.

The input module logic in this commit emits an information for harmless
cases, and emits warnings for "severe" cases where default option values
or incomplete user specs result in several orders of magnitude higher
resource consumption than necessary. GUI users may not notice, but the
library cannot help that given the current infrastructure -- the library
stricly does as the application tells it to, according to user input.

The best use is to run the CLI's --show feature on VCD files of unknown
content, to get an idea how to most appropriately configure a subsequent
file import. An alternative is to open the VCD file before import, check
the timescale in the header and the last two timestamps, to get an rough
estimate of a useful downsample factor.

This is motivated by but does not resolve bug 1624.

20 months agoinput/vcd: unbreak U and - values for single bit input data
Gerhard Sittig [Sat, 17 Oct 2020 08:42:56 +0000 (10:42 +0200)]
input/vcd: unbreak U and - values for single bit input data

The previous implementation already mapped L/H/U/- literals for input
data values to the 0/1/0/0 logic levels which sigrok can handle. But
missed these literals in the condition which dispatches real/integer,
bit vector, and single bit data types. Which made VCD import fail for
some of the files in the SpinalWorkshop repo.

Extend the test condition for single bit values. This unbreaks the
import of the Apb3TimerTester.vcd and ApbPwmTester.vcd files, which
contained phrases like these:

  ...
  $var reg 1 % io_apb_pwrite $end
  ...
  #0
  bUUUUUUUU !
  b0 "
  0#
  1$
  U%

and

  ...
  $var reg 8 # io_apb_paddr[7:0] $end
  $var reg 1 $ io_apb_pwrite $end
  ...
  #0
  b0 !
  0"
  b-------- #
  -$
  b-------------------------------- %
  b00000000000000000000000000000000 &
  1'

20 months agoconfigure: Add optional TI-RPC dependency, unbreak VXI communication.
Soeren Apel [Sun, 26 Jul 2020 15:11:37 +0000 (17:11 +0200)]
configure: Add optional TI-RPC dependency, unbreak VXI communication.

Recent glibc-2.26 no longer provides support for SunRPC, and libsigrok's
build support failed to detect the presence of libtirpc in that case.

  https://wiki.gentoo.org/wiki/Glibc_2.26_porting_notes/RPC_implementation

Extend the check, use either SunRPC or TI-RPC. Which re-enables VXI on
recent setups. This resolves bug #1473.

20 months 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.

20 months 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.

20 months 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.

20 months 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.

20 months 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.

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

20 months 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

20 months 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.

20 months 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.

20 months 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.