Commit Graph

2174 Commits

Author SHA1 Message Date
Gerhard Sittig e86cc12b66 output: also print meta strings in analog output module
Meta packets not only communicate numbers, but also strings. Print them.
This unbreaks the reflection of LCR meters' equivalent circuit model.
2019-06-09 14:51:02 +02:00
Gerhard Sittig 10cfb04826 serial-dmm: drop obsolete redundant 'baudrate' parameter value
The serial communication timing parameters during probe get determined
from earlier serial port configuration, which obsoletes the redundant
'baudrate' parameter, and eliminates potential inconsistency between
user specified parameters and builtin default values.
2019-06-09 14:51:02 +02:00
Gerhard Sittig 685ed70998 kern-scale: drop obsolete redundant 'baudrate' parameter value
The serial communication timing parameters during probe get determined
from earlier serial port configuration, which obsoletes the redundant
'baudrate' parameter, and eliminates potential inconsistency between
user specified parameters and builtin default values.
2019-06-09 14:51:02 +02:00
Gerhard Sittig d03815a066 serial: use timeout API in stream detect, obsoletes bitrate param
The serial_stream_detect() routine needs to estimate the time which is
needed to communicate a given amount of data. Since the serial port got
opened and configured before, the serial communication parameters are
known, and callers need not redundantly specify the bit rate.
2019-06-09 14:51:02 +02:00
Gerhard Sittig d478724801 serial: add support for optional "RX chunk" callback
The previous implementation provided a raw input stream of RX data from
read() calls to device drivers. This works great with genuine COM ports,
as well as with most setups which involve simple "cable expanders".

Recent additions of alternative transports (serial over HID and BLE)
added more protocol layers to the setup, and some device drivers are
reported to depend on the very framing of these transports: Mooshimeter
cares about individual BLE notification "frames", and the information
cannot get derived from the payload bytes. Some HID based cables which
obscure the DMM chips' serial protocol, or some HID based setups which
the serial layer does not abstract away as "a cable" may suffer from
similar requirements (do some drivers require access to individual HID
reports? Ikalogic? Victor DMM?).

Add support for an optional "RX chunk callback" which takes precedence
over "mere payload byte streams". Instead of returning payload bytes
from read() calls, the serial layer can call an application defined
routine and pass data bytes in the very framing which the physical
transport happens to use.

It's still up to the implementation of the specific transport whether
the callback approach is supported, and whether the wire's framing is
obeyed or whether payload data keeps getting provided as one raw stream.
It's also implementation dependent whether data reception transparently
occurs in background, or whether callers need to periodically "stimulate"
data reception by calling read or check routines which happen to call
back into the caller should RX data become available.

The approach that got implemented here is not universally applicable,
but serves those specific environments that were identified so far.
2019-06-04 18:59:04 +02:00
Gerhard Sittig b79c342278 serial_bt: implement the serial over Bluetooth transport (conn=bt/...)
Introduce the serial_bt.c source file which implements the methods of a
serial transport and calls into the platform agnostic src/bt/ support
code.

Implement support for several chips and modules: RFCOMM (BT classic,
tested with HC-05), BLE122 (tested with 121GW), Nordic nRF51, and TI
CC254x (the latter untested). Read support is assumed to be complete,
write support for BLE may be incomplete due to lack of access to
hardware for tests.
2019-06-04 18:53:04 +02:00
Gerhard Sittig 7c8ae47dcb bluetooth: introduce Bluetooth communication API, implement BlueZ support
Create a src/bt/ subdirectory for source files. Declare a platform
agnostic internal API for Bluetooth communication, and provide an
implementation of that portable API when the BlueZ library is available.

This implementation assumes that HAVE_BLUETOOTH and HAVE_LIBBLUEZ can be
used interchangeably, which is true for this initial version. When
support for other platforms gets added, the common and the specific
parts need to get sorted. Trying that now would involve guessing. :)
2019-06-04 18:52:40 +02:00
Gerhard Sittig f085705f48 build: prepare serial over Bluetooth, search for optional BlueZ lib
Adding Bluetooth communication is desirable for all sigrok supported
platforms. The BlueZ library is available on Linux which will receive
support first. Check for the BlueZ library's presence, determine a
HAVE_BLUETOOTH summary state, and extend the HAVE_SERIAL_COMM check.
Print version details for the external library.

This commit extends build support and version information, but does not
yet include the implementation of the serial transport primitives.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 6e407e9850 serial-lcr: add driver item for the UNI-T UT612 model
Register another driver for the UNI-T UT612 LCR meter, which is based on the
ES51919/ES51920 chipset, too. This device had been usable before when the
internal UART connection was made accessible (read: with a hack). It became
officially supported in unmodified form with the addition of transparent
serial over HID support for SiLabs CP2110 chips.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 164c5ae537 uni-t-ut32x: migrate from USB transfers to serial-over-HID communication
Switch the UT32x driver from running specific USB transfers to generic
serial communication. Preset the bitrate and frame format, but allow for
user specified overrides as well. Default to the WCH CH9325 HID chip,
but allow for overrides or more specific selection so that users can
resolve ambiguities with multiple cables.

The switch from libusb to hidapi removes a limitation that specifically
was reported for the Mac platform. The serial-over-HID variant should
now work as well. See bug #555.

Drop the background transfers. Stick with a local acquisition stop
routine, because a STOP request needs to get sent to the device. Reduce
the receive buffer size such that either blocking or non-blocking calls
will work. The additional flexibility of the buffer handling and packet
processing does not harm.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 616bc3a170 serial_hid: add support for the SiLabs CP2110 chip (UT-D09, UT612)
Also reported to be seen in Voltcraft devices (VC-650, VC-890).
2019-06-02 20:39:02 +02:00
Gerhard Sittig 828eeea227 serial_hid: add support for the WCH CH9325 chip (UT-D04 cables, UT32x) 2019-06-02 20:39:02 +02:00
Gerhard Sittig edec0436db serial_hid: implement serial over HID transport
Do implement the transport methods for serial communication underneath
the common layer, by communicating HID requests and payload data by
means of HIDAPI library calls.

This commit adds the common logic of serial-over-HID communication and
implements the full internal serial transport API, including reception
in the background. But it does not yet support a single HID chip (which
each run their own proprietary protocol).

The implementation works with either hidapi-libusb or hidapi-hidraw
variant of the HIDAPI library, but was only tested on Linux.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 4417074c68 serial: prepare serial over HID in common layer and build support
Search for the optional HIDAPI library. Call the library's init and exit
routine, and print version information. Extend the common serial layer's
code paths for open, list, and find USB to also support serial over HID.

This commit prepares serial over HID, but the HIDAPI specific transport
for serial communication still is empty in this implementation.
2019-06-02 20:39:02 +02:00
Gerhard Sittig ad5aa993ae serial: introduce local receive data buffer
Add a local RX buffer to the common code of libsigrok's serial layer.
Callers of the serial layer's API won't notice, this is an internal
detail of how alternative transports receive their data from the
physical line, and pass it to read() calls emitted by device drivers.

The libserialport specific code still calls into the library, and does
not use the RX buffer. Future HID and BLE support will use the buffer.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 48b7c34629 serial: make LCR, modbus, SCPI over serial depend on generic serial comm
Add guards around the implementation of ES51919 chip support for LCR, as
well as modbus and SCPI over serial. To accept when the source files get
compiled in the absence of their dependencies, end up with an empty
implementation in that case.

This approach can simplify build rules when several optional external
dependencies result in differing sets of supported communication means.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 1ac8c2181b serial: prepare for the absence of libserialport
Only reference the libserialport header when the library is available.
Allow to always compile the serial.c source file, but optionally end
up with an empty implementation. Make the sr_serial_dev_inst symbol
available outside of HAVE_SERIAL_COMM such that empty stub code can
compile. This prepares the introduction of alternative transports for
serial communication, while all of them remain optional.

The libsigrok serial layer internally uses parity and flow control
symbols which are provided by libserialport. Optionally locally declare
these symbols when libserialport is not available.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 1df81f4b06 serial: introduce more general "have serial comm" feature flag
Introduce the HAVE_SERIAL_COMM identifier, which gets derived from, but
need not be identical to the HAVE_LIBSERIALPORT condition.

Derive the NEED_SERIAL automake condition from the general availability
of serial communication not the specific libserialport library.

Adjust source code references. Stick with HAVE_LIBSERIALPORT where the
specific library is meant, but switch to HAVE_SERIAL_COMM where the
availability of serial communication in general is meant.
2019-06-02 20:39:02 +02:00
Gerhard Sittig a7b8692ed0 serial: prepare alternative transports for serial communication
Add an indirection between the common serial communication code and the
libserialport specific support code. Prepare the use of alternative
transports like USB HID in the future. Decide in the open() routine
which transport to use for subsequent operations (based on port names).

In theory only the transport specific layer depends on the libserialport
library's availability. In this implementation all support for serial
communication still depends on the HAVE_LIBSERIALPORT preprocessor
symbol. This needs to get addressed in later commits.
2019-06-02 20:39:02 +02:00
Gerhard Sittig f992151332 ols: use serial layer's "has receive data" query
Eliminate a direct libserialport dependency in the OLS device driver.
Use libsigrok's internal serial layer's API instead to check for the
availability of receive data.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 8c3df6e5cd serial: introduce "has receive data" query
Add a serial_has_receive_data() routine to the serial layer's API which
returns the number of (known to be) available RX data bytes. Implement
support in the libserialport specific code.
2019-06-02 20:39:02 +02:00
Gerhard Sittig ae4c1fb637 serial_libsp: move libserialport specific code to separate source file
Introduce a new serial_libsp.c source file, and move code from serial.c
there which is specific to libserialport. Keep the existing serial.c API
in place, this is a pure internal refactoring.

Adjust a little whitespace while we are here. Rearrange long lines to
keep related parameter groups adjacent (like pointer and size, or UART
frame length and flow control). Consistently reduce indentation of
continuation lines.
2019-06-02 20:39:02 +02:00
Gerhard Sittig 639c6f61c3 serial: determine timeout from most recent set_params() values
Store the most recent successfully applied set of parameters for serial
communication. Re-use these values as a fallback to calculate timeouts,
when the underlying transport fails to provide the current settings.
2019-06-02 20:39:02 +02:00
Gerhard Sittig dca683ef99 rohde-schwarz-sme-0x: remove obsolete libserialport reference
The rohde-schwarz-sme-0x device driver used to unconditionally reference
a libserialport header file. Remove that reference, it's not needed in
this specific driver.
2019-06-02 20:39:01 +02:00
Gerhard Sittig e24e74ed84 agilent-dmm: fixup whitespace nit (trailing space) 2019-06-02 20:39:01 +02:00
Andreas Piesk 108d2ec2c2 saleae-logic16: Warn (instead of erroring out) if FPGA is unsupported
Don't exit with an error if the FPGA is detected as unsupported.

Just issue a warning with the detected version and continue. I have such
a clone and it works with the original Saleae software and with sigrok
despite the fact that its FPGA version is 0xff.
2019-06-01 17:15:55 +02:00
Vitaliy Vorobyov ca9f8961e3 serial-lcr: Add MASTECH MS5308 2019-05-14 19:56:57 +02:00
Vitaliy Vorobyov dcd212f7a2 Add MASTECH MS2115B support. 2019-05-01 15:55:07 +02:00
Gerd v. Egidy 16a8e58068 agilent-dmm: add basic support for Agilent/Keysight U127x
Their commands are very similar to the U123x series, they just
add some more modes and the second channel. So use the re-functions
and just extend them where necessary.

Log reading not supported yet.

Basic testing done with a U1272A.
2019-05-01 15:43:00 +02:00
Gerd v. Egidy 878e0e9d21 agilent-dmm: fix support for Agilent/Keysight U1252A
- fix the resolution of the CONF?-response:
  the resolution is given with 6 decimal places
  (instead of 8) like this:

  VOLT +5.000000E+00,+1.000000E-04

- add more measurement modes that are possible with the meter:
  CONT,COND,TEMP,PULS
2019-05-01 15:43:00 +02:00
Gerhard Sittig 271392d969 serial: rename variable to reflect it's related to libserialport
Rename the rather generic 'data' struct member to 'sp_data', to better
reflect that it contains details which are specific to libserialport.
2019-04-28 17:41:12 +02:00
Gerhard Sittig 6213c38ef8 serial: update doxygen comments (flush vs drain, in vs out params)
It's important to remain aware that the serial layer's flush and drain
semantics differs from e.g. filesystem calls. The libserialport API is
said to follow the termios example.

Extend comments in the libsigrok API, to not depend on the libserialport
layer and the availability of its documentation. This raises awareness
during maintenance of sigrok device drivers, as well as the pending
addition of alternative transports for serial communication.

Adjust the doxygen comment for the read line routine while we are here.
Add "in" and "out" attributes for routine parameters.
2019-04-28 17:41:12 +02:00
Gerhard Sittig fcfa36fd6f libsigrok-internal.h: fix source file references in comments
The src/hardware/ subdirectory exclusively contains device drivers these
days, while common support code has moved to the src/dmm/, src/lcr/,
src/scale/, etc directories or src/ itself. Adjust comments in the
libsigrok-internal.h declaration blocks which reference source files.
2019-04-28 17:41:12 +02:00
Gerhard Sittig fdcdfe53d8 libsigrok-internal.h: nit, alpha-sort include directives 2019-04-28 17:41:12 +02:00
Gerhard Sittig e47a9562e9 device: rephrase sizeof() calls for reduced redundancy, use malloc0
Just allocate the memory needed to hold the very variable's size. No
need to duplicate the variable's type. Reduces redundancy and increases
robustness during maintenance.

Use g_malloc0() in sr_serial_new() to make sure all of the structure is
initialized.
2019-04-28 17:41:12 +02:00
Uwe Hermann 7d0f52f7e5 Consistently use the "Sysclk" spelling everywhere.
We use this spelling (not "SysClk") in most of the rest of the code-base,
as well as in the wiki.
2019-04-24 18:23:41 +02:00
Uwe Hermann f3178f123d sysclk-sla5032: Minor asterisk placement consistency fixes. 2019-04-24 18:23:41 +02:00
Uwe Hermann 98ed645e40 sysclk-sla5032: Make a few functions static. 2019-04-24 18:18:57 +02:00
Uwe Hermann 9e0693f92d sysclk-sla5032: Merge sla5032.[ch] into protocol.[ch]. 2019-04-24 18:18:57 +02:00
Uwe Hermann 052cc011bf sysclk-sla5032: Shorten sla5032_start_sample() a bit. 2019-04-24 17:33:24 +02:00
Uwe Hermann d57a114347 sysclk-sla5032: Shorten a few code snippets a bit. 2019-04-22 13:39:48 +02:00
Uwe Hermann 262cb9968d sysclk-sla5032: Fix compiler warnings (max vs. MAX).
src/hardware/sysclk-sla5032/protocol.c: In function ‘la_start_acquisition’:
  src/hardware/sysclk-sla5032/protocol.c:244:8: warning: implicit declaration of function ‘max’ [-Wimplicit-function-declaration]
    pre = max(pre, 2);
          ^~~
2019-04-22 13:39:48 +02:00
Vitaliy Vorobyov 8da8c8265f Add initial Sysclk SLA5032 driver. 2019-04-22 13:39:48 +02:00
Dewelde Anthony ddbe6880a0 korad-kaxxxxp: Added support for TENMA 72-2535 V2.1 2019-04-17 17:59:22 +02:00
Uwe Hermann b89e6db910 scpi-pps: Fix typos and minor cosmetics. 2019-04-17 17:59:16 +02:00
Uwe Hermann fd2433153a scpi-pps: Fix "aquisition" typo everywhere. 2019-04-17 17:59:16 +02:00
Uwe Hermann 9652610080 sr_session_send_meta(): Drop unneeded check.
As of right now, sr_config_new() "cannot fail" and will never return NULL.
2019-04-17 17:45:04 +02:00
Frank Stettner 26e96658ab scpi-pps: Don't use SCPI_CMD_REMOTE and SCPI_CMD_LOCAL for HP 66xxB devices when in GPIB mode. 2019-04-17 17:45:04 +02:00
Frank Stettner 5ce427c71b scpi-pps: Add various HP power supplies:
HP 6632A, HP 6634A, HP 6611C, HP 6612C, HP 6613C and HP 6614C
2019-04-17 17:45:04 +02:00
Frank Stettner fdf0365257 scpi-pps: Implement init_acquisition() and update_status() for HP 66xxA power supplies. 2019-04-17 17:44:59 +02:00
Frank Stettner f083ae63c7 scpi-pps: Add config keys SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE,
SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE and
SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE to HP 66xxA power supplies.
2019-04-17 17:44:59 +02:00
Frank Stettner 0ad7074c9e scpi-pps: Add SR_CONF_REGULATION for HP 66xxA power supplies. 2019-04-17 17:44:59 +02:00
Frank Stettner dbc519f720 scpi-pps: Seperate existing HP 66xxA and 66xxB profiles. 2019-04-17 17:44:59 +02:00
Frank Stettner 969671a542 scpi-pps: Add missing frequency channel settings for acquisition. 2019-04-17 17:44:56 +02:00
Frank Stettner 3d1aa50f38 scpi-pps: Set device and channel group feature for HP 66xxB. 2019-04-17 17:44:56 +02:00
Frank Stettner f2bbcc330a scpi-pps: Add configurable sr_mqflags. 2019-04-17 17:44:56 +02:00
Frank Stettner fe4bb77492 scpi-pps: Implement init_acquisition() and update_status() for HP 66xxB power supplies. 2019-04-17 17:44:51 +02:00
Frank Stettner 6188675b72 scpi_libgpib: Add mutex to SPoll. 2019-04-17 17:44:51 +02:00
Frank Stettner 87aa1e63e3 scpi: Add enum scpi_transport_layer. 2019-04-17 17:44:51 +02:00
Frank Stettner 7e66bf0586 scpi-pps: Add init_acquisition() and update_status() for device specific
acquisition functions.
2019-04-17 17:43:07 +02:00
Frank Stettner 8b5eadf427 scpi-pps: Add config keys SR_CONF_OVER_VOLTAGE_PROTECTION_ACTIVE,
SR_CONF_OVER_CURRENT_PROTECTION_ACTIVE and
SR_CONF_OVER_TEMPERATURE_PROTECTION_ACTIVE to HP 66xxB power supplies.
2019-04-17 17:11:21 +02:00
Frank Stettner 43ff1110fb scpi-pps: Add SR_CONF_REGULATION for HP 66xxB power supplies. 2019-04-17 17:11:21 +02:00
Frank Stettner 5e7377f4c7 scpi-pps: Add enum pps_scpi_dialect and add to struct scpi_pps,
preset with reasonable values.
2019-04-17 17:11:21 +02:00
Frank Stettner 7d1a4a5239 session: Add helper sr_session_send_meta() to send SR_DF_META packages.
Replace individual functions in drivers for arachnid-labs-re-load-pro
and lcr/es51919 with sr_session_send_meta() helper function.
2019-04-17 17:11:19 +02:00
Uwe Hermann 6449b2e035 demo: Minor cosmetics. 2019-03-29 16:23:21 +01:00
Frank Stettner 1c0e1baaaa korad-kaxxxxp: Add another KA3005P with 0xBC as extra byte in the model ID. 2019-03-29 16:15:37 +01:00
Frank Stettner d1a3f3be45 korad-kaxxxxp: Add SR_MQFLAG_DC flag to the current channel package. 2019-03-29 16:15:37 +01:00
Frank Stettner 8107a9a650 scpi: Add connenction_id() function to all scpi drivers. 2019-03-29 16:15:37 +01:00
Frank Stettner 9618fde422 demo: Get/Set new config key offset. 2019-03-29 16:15:37 +01:00
Frank Stettner 78ec6cf99d Add new config key OFFSET. 2019-03-29 16:15:37 +01:00
Frank Stettner a6e5d2f676 demo: Get/Set amplitude while data acquisition is running. 2019-03-29 16:15:37 +01:00
Frank Stettner 94f364ec11 demo: Get/Set measurement quantity for the analog channels. 2019-03-29 16:15:37 +01:00
Frank Stettner 8430c9b62e demo: Set an initial mq, mq flag and digits to the analog package.
Without a measured quantity in packet.meaning->mq the C++ binding function
sigrok::Analog::mq() throws an exception and there is no way to check if
there is any measured quantity set in the analog package.
2019-03-29 16:15:37 +01:00
Frank Stettner a0bc8afd7d Free sr_config and sr_config lists in meta datafeeds correctly. 2019-03-29 16:15:37 +01:00
Soeren Apel 7ed4ae6307 input/trace32_ad: Add support for new file format (BINHDR2) 2019-03-24 21:33:54 +01:00
Soeren Apel 628dc330bc input/trace32_ad: Use only hex offsets 2019-03-24 13:48:44 +01:00
Uwe Hermann d025fce937 chronovu-la: Fix broken triggering.
This fixes bug #1369.
2019-03-22 00:59:39 +01:00
Thomas Andres 27a9b6639e korad-kaxxxxp: support for Stamos S-LS-31 power supply 2019-03-17 17:06:28 +01:00
Michael Klengel 88e6a8da9c manson-hcs-3xxx: Add HCS-3300 / DPPS-32-15 / HCS-3302 support.
Manson HCS-3300 (1-16 V, 30 A):

  $ sigrok-cli --show -d manson-hcs-3xxx:conn=/dev/cu.SLAB_USBtoUART5
  [...]
  sr: manson-hcs-3xxx: Unknown model ID 'HCS-3300' detected, aborting.

Voltcraft DPPS-32-15 (1-32 V, 15 A), identical to Manson HCS-3302:

  $ sigrok-cli --show -d manson-hcs-3xxx:conn=/dev/cu.SLAB_USBtoUART
  [...]
  sr: manson-hcs-3xxx: Unknown model ID 'HCS-3302' detected, aborting.
2019-03-09 18:23:05 +01:00
Michael Klengel dfd1daf25f manson-hcs-3xxx: Whitespace changes for models[]. 2019-03-09 18:23:05 +01:00
Frank Stettner 02d4db3562 hp-3478a: Check via GPIB serial poll if new data is available.
When just reading the data without check, the bus is blocked until new
data is available.
2019-03-09 18:01:11 +01:00
Uwe Hermann 1b6b9c01df ipdbg-la: Minor cosmetic and comment fixes. 2019-01-29 23:18:41 +01:00
Daniel Anselmi 8e249032d3 ipdbg-la: improve speed 2019-01-29 23:18:30 +01:00
danselmi c54ca32340 ipdbg-la: working on windows 2019-01-29 23:18:23 +01:00
Wolfram Sang f6ce25ec05 ols: add feature to support >256K memory
Add support for the Pepino-style of accessing >256K of memory. Because
this the only known extension of accessing >256K currently, we apply it
as soon as the sample size is bigger than 256K.  Let's hope other
devices (if any) will follow this style. If not, we need to add support
depending on the device name later.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang ec26d9e1df pipistrello: rename registers to match actual function
Magnus (creator of the Pipistrello) confirmed that he mixed up the
register names. The code was doing it correctly nonetheless but was
confusing to read because of this. Fix it to make it easier to
comprehend.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang 60143473c9 ols: mention compatible devices in driver name
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang ae4e6999c5 ols: extend reponse delay when scanning device
My Pepino needs 15ms instead of 10ms, so let's use 20ms to be on the
safe side.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang a88114183a ols: sort commands according to their hex value
Makes adding new ones easier.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang ea642977e5 ols: refactor using max_channels
Let max_channels really carry the number of maximum channels the
hardware supports. We will handle the limitation of only half the
channels available in 200MHz mode later. Note that there won't be a
regression because we only set the variable but never check it. The
desired result of this patch is the removal of the NUM_CHANNELS macro.
The number of channels needs to be dealt with at runtime.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang 4a34a74d73 ols: refactor channel initialization
We needs this twice so put it into a seperate function, so updates to it
will automatically handled for both callers.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang aad0c77708 ols: simplify calculation of readcount
Somewhen we probably want DIV_ROUND_UP from the Kernel.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang be15c51ed4 ols: drop wrong usage of macro
commit f51acd69 ("ols: combine demux samples") wrongly replaced the bit
pattern of 0x20 with the number of channels which just happens to be 32
as well. So, the code works but is confusing to read. Reword the
for-loop to make it more comprehensible.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang 6e5a1a0178 ols: use 32bit for handling sample counts
The OLS protocol sends 16bit values to specify the sample count and
delay count. However, this 16bit value is the number of 32bit words to
be sampled, so the actual sample count is 4 times larger and does not
fit into a uint16_t. Extend it to support the full range of 256K
(LogicShrimp will need this) and to prepare support for devices with
even more memory (Pepino).

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang 6745488b1a ols: remove needless initialization
channel_mask is recalculated before it gets accessed, so this
initialization is not needed.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Wolfram Sang 082537602a ols: remove unused define
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2019-01-13 20:07:27 +01:00
Gerhard Sittig f0e6b41f7a uni-t-ut32x: rephrase the receive buffer and packets relation
The previous implementation assumed that a receive data chunk ends
exactly with a sensor packet's end. Yet the buffer had 32 bytes while
the packets have 19 bytes.

Separate the data reception from the packet processing. Collect whatever
chunks the USB connection provides, and scan the resulting buffer for
packets. Cope with either incomplete or corrupt or misaligned packets as
well as with multiple packets in receive chunks. The latter might happen
upon initial synchronization, when a device already sends data or the
serial port buffered previously communicated data.

In the regular case, the computer will process so fast that each single
character will be handled individually. We don't mind. The frequency is
some 60 times per second, and the data volume is 19 bytes. The software
works for the regular case, and synchronizes fast at startup or after
comm errors.
2019-01-13 19:34:10 +01:00
Gerhard Sittig a0ba75bda2 uni-t-ut32x: improve robustness of packet parser, more diagnostics
Always print the data bytes of received buffers in the packet parser,
then check some more fixed fields to not process invalid packets, then
process the packet content as the previous implementation did.

Call the packet parser for incomplete packets and discarded input
buffers as well (initial synchronization, re-sync after comm errors).
This results in the availability of more diagnostics during development.

Pass the packet's location and size from outside. This prepares the
logic to cope with situations where the receive buffer contains multiple
(potentially incomplete) packets.
2019-01-13 19:34:10 +01:00
Gerhard Sittig 4b3197828d uni-t-ut32x: use ASCII literals in packet parser, symbols for magic numbers
Slightly unobfuscate the UT32x packet parser. The protocol is mostly
ASCII based, checks for hex numbers may be unexpected. Use symbolic
identifiers for the packet length and some special characters.
2019-01-13 19:34:10 +01:00
Gerhard Sittig 2631d9320d uni-t-ut32x: comment on the "T1-T2" channel name (looks like a range) 2019-01-13 19:34:10 +01:00
Gerhard Sittig 9e11197246 uni-t-ut32x: use common code for sw limits, minor data type fixup (data source) 2019-01-13 19:34:10 +01:00
Gerhard Sittig bf700f679a uni-t-ut32x: pre-set to default conn= spec
The previous implementation of the UT32x driver expected to see a conn=
spec, without it no device is found. Default to the USB identification
of the CH9325 chip, to make the driver work out of the box. Users still
can provide conn= specs and override the default for other cables.
2019-01-13 19:34:10 +01:00
Martin Ling 47b821dc7d rigol-ds: Fix memory buffer readout on DS4000 series. 2018-12-29 03:24:23 +01:00
majekw e150d55046 Add support for YiXingDianZi MDSO in hantek-6xxx driver. 2018-12-28 13:49:33 +01:00
Mike Williams c3bfb95959 scpi-pps: add support for BK Precision 9130 2018-12-28 13:10:05 +01:00
Mike Williams 08e8c0e5bf scpi-dmm: add experimental Keysight 34465A support
Tested DC current, DC voltage, and resistance. Instrument gives an error
only on first measurement but the output of the measurements is correct.
2018-12-28 13:10:05 +01:00
Paul c7a51272a5 ftdi-la: added FT232H device ID 2018-12-28 13:01:03 +01:00
Gerhard Sittig 6f7e15090e dmm/eev121gw: fix a typo in a comment 2018-12-27 11:26:19 +01:00
Gerhard Sittig fbbf21dcf5 pickit2: avoid NULL dereference in close code path 2018-12-27 11:26:19 +01:00
Daniel Anselmi f3549a1ccf ipdbg-la: Check if limit samples is valid (leq size of ringuffer) 2018-12-27 11:26:02 +01:00
Martin Ling 942719b46c Don't reference SR_PACKAGE_VERSION_STRING directly in backend.c.
Reporting build versus runtime versions makes sense for a client,
but not inside the library itself.
2018-12-20 19:12:34 +01:00
Martin Ling 2868bca35b Don't reference SR_PACKAGE_VERSION_STRING directly in output modules. 2018-12-20 19:12:34 +01:00
Uwe Hermann 3f34a40268 drivers: Make per-driver sr_dev_driver structs static. 2018-12-20 17:29:36 +01:00
Uwe Hermann 3aadf5c479 microchip-pickit2: Drop unneeded prefix. 2018-12-20 16:36:09 +01:00
Uwe Hermann e760f2cdaf microchip-pickit2: Minor cosmetics. 2018-12-20 16:36:09 +01:00
Gerhard Sittig bde6a99b33 microchip-pickit2: first driver implementation (acquisition works, triggers don't)
Fill in the scan, open/close, get/set/list, acquisition start/stop logic
such that data acquisition with a PICkit2 works.

Trigger support needs more attention. User specified triggers either
seem to not take effect, or the trigger position is not in the expected
location. It's yet to get determined what's the issue.

This implementation is based on protocol information gathered from the
pk2-la project.
2018-12-20 16:19:42 +01:00
Gerhard Sittig a5c0259c4a microchip-pickit2: Initial driver skeleton. 2018-12-20 16:19:42 +01:00
Gerhard Sittig d9a3c0b749 brymen-bm86x: drop redundant free call, fixup channel index
Remove a free() call in an error path for a list which immediately
before the call was determined to be NULL. Use index 0 and 1 for
channels P1 and P2 respectively (the previous implementation used 0
for both channels).
2018-12-20 16:19:42 +01:00
Gerhard Sittig 2887799404 scpi-dmm: run OPC queries immediately before essential commands
The current implementation of the SCPI DMM driver is conservative about
checking the device's being operational, but the *OPC? queries are found
in unfortunate locations. Run the OPC query right before running the
next "actual" command, not afterwards. And certainly not between sending
requests and potentially gathering responses in subsequent calls.

This commit does not change current behaviour, but improves maintenance
before pending commits.
2018-11-17 20:19:13 +01:00
Gerhard Sittig 08f3b427b6 scpi-dmm: return MQ table entry to "get MQ" routine callers
The "get MQ" helper routine communicates SCPI responses and translates
them to internal "MQ and flag" values. Optionally return the MQ table
entry reference to callers, so they don't have to repeat the table
lookup when the function's default precision is required, or should
future "start acquisition" requests need to refer to the meter's current
function.
2018-11-17 20:19:13 +01:00
Gerhard Sittig 64d03de1c2 scpi-dmm: adjust MQ table for Agilent 34405A
Rename the table to reflect that it's model specific. Remove the 4-wire
resistance function which this device does not support.
2018-11-17 20:17:48 +01:00
Gerhard Sittig 1d2f9963ab scpi-dmm: add support for model specific device options
Supported SCPI DMM devices will differ in the set of options and whether
parameters can get queried or configured. Use a "generic" set of devopts
during scan and for simpler models, prepare support for other sets of
devopts for more complex models.
2018-11-17 20:08:59 +01:00
Gerhard Sittig 31e65c62ec scpi-dmm: accept serialcomm= scan options 2018-11-17 20:08:59 +01:00
Gerhard Sittig 21bc4353f0 scpi: alpha-sort the vendor alias list 2018-11-17 20:07:21 +01:00
Gerhard Sittig 49b6732ec5 scpi: add Keysight vendor alias 2018-11-17 20:07:21 +01:00
Gerhard Sittig 0617bb5a4e scpi-dmm: move declaration of local variable out of header file 2018-11-17 20:07:21 +01:00
Michał Janiszewski 3e33089b72 Remove always-false condition 2018-11-10 23:20:29 +01:00
Gerhard Sittig 3cdad416e4 scpi-dmm: Implement support for Agilent 34405A, prepare others
Implement the scpi-dmm driver in such a generic way that it could work
with several protocol variants and with differing models which happen to
use any of these protocol variants. Prepare a list of supported models
with their respective SCPI command set, set of DMM functions and their
precision.

Add support for Agilent 34405A. The ten functions of this device got
tested and are operational, in continuous mode as well as with sample
count or capture time limits. The driver can query the current meter's
function, can change the function, and can run acquisitions in either
the current mode or with a user specified function selection. There is
some potential for improvement: AUTO/MIN/MAX/HOLD indicators are not
supported by this implementation.
2018-11-10 23:14:49 +01:00
Gerhard Sittig 7a396ff5c5 scpi-dmm: Initial driver skeleton. 2018-11-10 20:11:35 +01:00
Gerhard Sittig a1ce15d4a1 scpi: nit, use glib to determine string vector length
Replace a DIY length calculation with a glib call.
2018-11-10 20:11:35 +01:00
Gerhard Sittig a019bc48fd scpi: introduce string un-quote helper routine
The SCPI protocol may communicate strings in quoted form, enclosed by a
matching pair of single or double quote characters, and occurances of
this very quote character within the string get doubled (escaped). Add a
common routine to undo the quotes.
2018-11-10 18:26:30 +01:00
Gerhard Sittig c10b0276da fluke-45: fix minor memory leaks in the probe routine
Free the SCPI hardware info after successful model detection, too. Only
allocate the device instance when a supported model was found. Link the
device context earlier right after allocation, for easier verification.
2018-11-10 18:26:30 +01:00
Gerhard Sittig 71db2d4d06 fluke-45: disable ECHO test, it confuses other SCPI devices
Disable the ECHO test in the Fluke 45 probe routine which violates the
SCPI protocol and makes other devices unavailable. This fixes bug #1272.
2018-11-10 18:26:30 +01:00
Gerhard Sittig 712f7d5e40 fluke-45: avoid NULL dereference in the probe routine
The Fluke 45 probe routine tries to detect whether the serial port is
"in echo mode" (which already is questionable before the IDN query).
In the absence of a response, the library segfaults. Fix it.
2018-11-10 18:26:30 +01:00
Uwe Hermann 827139ef49 siglent-sds: Consistently use gboolean/TRUE/FALSE. 2018-10-21 23:33:15 +02:00
Gerhard Sittig 0be955d23d dmm/eev121gw: drop an obsolete TODO comment (power measurement) 2018-10-18 19:18:46 +02:00
Gerhard Sittig 72b6f1c082 dmm/eev121gw: cosmetics, align ranges' scaling table entries
Align the scaling items such that all numbers are aligned. Drop unneeded
"prefixes" for the 2nd display's tables, the main and sub displays already
have their individual tables which reside in their respective groups.
2018-10-18 19:11:38 +02:00
Gerhard Sittig 39ea7b7d39 dmm/eev121gw: add missing scale items for sub display in power modes
Complete the voltage and current scale items for the sub display which
were incomplete for VA, mVA, and uVA power measurement modes before.
2018-10-18 19:08:50 +02:00
Uwe Hermann 59cae77e28 serial_stream_detect(): Make a code comment more generic. 2018-10-14 22:05:57 +02:00
Soeren Apel d10781808d demo: Fixup soft-trigger 2018-10-14 22:05:57 +02:00
luftek 6fc51fb1ee demo: Implement logic triggering.
Analog triggers and other items still need more work.
2018-10-14 21:37:40 +02:00
luftek 31f69b096f demo: Port trigger configuration from fx2lafw. 2018-10-14 21:37:30 +02:00
Uwe Hermann 07182332f0 Random whitespace/cosmetic/typo fixes. 2018-10-14 18:21:56 +02:00
Gerhard Sittig 015df4ae8f serial-dmm: add EEVblog 121GW device entry (-d eevblog-121gw:conn=<uart>)
Add an "eevblog-121gw" subdriver entry for the EEVblog 121GW multimeter.
Use device dependent channel names instead of the default "P1" etc names.

It's assumed that the device's binary packet data is available at a COM
port. This means that an external BT to UART gateway is required until
BLE communication will be one of libsigrok's native connection types.
2018-10-14 18:21:56 +02:00
Gerhard Sittig 1c3098aae0 dmm/eev121gw: introduce parser for EEVblog 121GW 19-byte binary packets
Introduce the dmm/eev121gw.c source file with parse routines for the
EEVblog 121GW meter's 19-bytes binary packets. Get the values and MQ
properties of the device's several displays (main, sub, bar) in several
individual parse calls.

This commit introduces initial support for the device. Some of the modes
and features are untested, as are some of the device's ranges.
2018-10-14 18:21:56 +02:00
Thomas Weißschuh 388aa0fb6b Newer versions of Victor DMMs (at least for 86) contain a direct
Mini-USB port. This port speaks the FS9922 protocol.

Picture of Mini-USB version:
http://roastlogger.co.uk/coffee/roastlogger/victor86.html

Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
2018-10-14 17:43:34 +02:00
Uwe Hermann 023c6114c5 siglent-sds: Fix SR_CONF_AVERAGING/SR_CONF_AVG_SAMPLES handling. 2018-10-14 01:41:03 +02:00
marchelh c90065a949 siglent-sds: Add ESERIES device support.
Due to some SCPI command changes that Siglent made, the connection
failed due to the wrong commands being send to the device.

This might fix parts of bug #1242, though initial tests show that
further changes might be needed.

[Note: This commit consists of multiple squashed commits from
marchelh <marchelh@gmail.com> and various fixups and rebasing
operations by Uwe Hermann <uwe@hermann-uwe.de>]
2018-10-14 01:40:38 +02:00
Uwe Hermann 0540954d76 korad-kaxxxxp: Add Tenma 72-2540 V2.0/V2.1 support (untested).
The IDN strings were mentioned here:
https://github.com/kxtells/tenma-serial/issues/2
2018-10-13 17:26:47 +02:00
Gerhard Sittig e5fa47c1c9 serial: dump DMM packets during stream detection
Regular operation of serial DMM drivers optionally can dump packet bytes
after the intialization phase has synchronized to the stream. Failure to
synchronize to the stream left developers without a dump, which complicates
research what went wrong.

Do dump packet content while the serial_stream_detect() routine tries to
synchronize to the stream. Use the spew level since the dump occurs upon
every attempt, which translates to: every received byte until a valid
packet was seen (or the synchronization phase expired).
2018-10-13 15:57:01 +02:00