Commit Graph

139 Commits

Author SHA1 Message Date
Gerhard Sittig 7f0463840a scpi-pps: don't break SCPI devices when scanning for HP-IB devices
Only scan for hpib-pps devices when a user provided conn= specification
was given. This avoids breaking SCPI devices by emitting non-standard
requests before reliable device identification.
2021-06-01 08:20:59 +02:00
Petteri Aimonen 5433907ed9 scpi-pps: Add support for Owon P4000 series.
Tested on P4603 firmware version 1.6.0.
2021-02-28 15:25:21 +02:00
Gerhard Sittig 1c5d5905a4 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.
2021-02-02 21:09:54 +01:00
Gerhard Sittig 7320ce5ecc 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).
2021-02-02 21:07:29 +01:00
Gerhard Sittig f403cb9de9 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.
2020-08-25 21:06:01 +02:00
Gerhard Sittig 22f76e188b 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
2020-08-25 20:59:31 +02:00
Florian Schmidt bd5f0a143e 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 ]
2020-08-25 20:58:54 +02:00
Florian Schmidt 8f3c77db26 scpi-pps: fixed out-of-bounds array access...
when accessing devc->device->channels in config_list().
this array has to be accessed via the "hw_output_idx"

This fixes bug #1533.
2020-04-11 15:52:13 +02:00
Mike Walters 0b0f40d864 scpi-pps: Support HP 66312a 2019-07-03 12:43:18 +01: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
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 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
Mike Williams c3bfb95959 scpi-pps: add support for BK Precision 9130 2018-12-28 13:10:05 +01:00
Uwe Hermann 755793e991 scpi-pps: Add a missing "break" in config_get(). 2018-09-18 23:42:24 +02:00
Martin Ling 3d11872282 scpi-pps: Fix broken channel selection code.
Fixes bug #1279.
2018-09-11 13:08:12 +01:00
Martin Ling 88e4daa9ff scpi-pps: Use software sample and time limits. 2018-09-10 16:33:11 +01:00
Martin Ling 49f7cb2425 scpi-pps: Don't block waiting for a value on capture stop.
The comment says "A requested value is certainly on the way", but the code no
longer works this way. The receive handler requests a value and blocks until
it is received. There is no value pending between receive handler calls, so
this code now only leads to a timeout.
2018-09-10 16:12:58 +01:00
Uwe Hermann d828b05e65 scpi-pps: Rigol DP71x: Make OVP/OCP threshold listable. 2018-06-01 15:47:48 +02:00
Frank Stettner 49a468ed8b scpi-pps: Add listable OVP/OCP threshold for HP 66xxx and prepared all other 2018-06-01 15:46:17 +02:00
Frank Stettner a61c8cce01 scpi-pps: Add HP 6631B, HP 66332A, HP 6633B and HP 6634B power supplies 2018-06-01 15:46:17 +02:00
Frank Stettner 7e381bfc3c scpi-pps: Add missing functionality for the HP 6632B power supply. 2018-06-01 15:46:17 +02:00
Frank Stettner 17a82e83ff scpi-pps: Reimplemention of switching channel groups (PSU channels)
Acquisition won't work correctly in a multi-threaded environment, when
config_set() and config_get() are called with a channel group.
The channel switching itself has moved to scpi/scpi.c, to be able to
handle switching in a thread safe way.
2018-06-01 15:46:17 +02:00
Frank Stettner fa2ce8c762 scpi-pps: Use thread safe SCPI functions, return float not double.
Use of the thread safe SCPI functions, so no write+read operation is
interruped.

Also return float values instead of double value in acquisition mode.
This is related to bug #779.
2018-06-01 15:46:17 +02:00
Uwe Hermann 319fe9cea6 scpi-pps: Add support for the Rigol DP711/DP712. 2018-06-01 14:43:10 +02:00
Gerhard Sittig 08eba2d301 scpi-pps: silence potential NULL dereference compiler warning
Check pointers' validity before dereferencing them.

This was reported by clang's scan-build.
2018-02-09 21:37:40 +01:00
Frank Stettner 7c517d02f7 scpi-pps: Channel group device options for HP 663xx 2017-11-11 19:46:52 +01:00
Uwe Hermann 758906aa71 drivers: Remove some unneeded 'ret' variables. 2017-07-31 16:23:31 +02:00
Uwe Hermann dd7a72ea69 drivers: Consistently use same indentation for config_*() API calls. 2017-07-31 16:23:31 +02:00
Uwe Hermann 53012da658 drivers: Use ARRAY_AND_SIZE where possible. 2017-07-21 17:06:40 +02:00
Uwe Hermann 105df67463 drivers: Factor out std_gvar_array_*(). 2017-07-21 16:54:05 +02:00
Uwe Hermann bcee129962 scpi-pps: Change some floats to doubles.
This makes the code more consistent with the rest of the code-base
and also allows std_gvar_min_max_step_array() to work here.

Without this change:

  src/hardware/scpi-pps/api.c: In function ‘config_list’:
  src/hardware/scpi-pps/api.c:570:40: warning: passing argument 1 of ‘std_gvar_min_max_step_array’ from incompatible pointer type [-Wincompatible-pointer-types]
      *data = std_gvar_min_max_step_array(ch_spec->voltage);
                                          ^~~~~~~
  In file included from src/scpi.h:30:0,
                   from src/hardware/scpi-pps/api.c:23:
  src/libsigrok-internal.h:964:19: note: expected ‘const double *’ but argument is of type ‘const float *’
   SR_PRIV GVariant *std_gvar_min_max_step_array(const double a[3]);
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  src/hardware/scpi-pps/api.c:573:40: warning: passing argument 1 of ‘std_gvar_min_max_step_array’ from incompatible pointer type [-Wincompatible-pointer-types]
      *data = std_gvar_min_max_step_array(ch_spec->frequency);
                                          ^~~~~~~
  In file included from src/scpi.h:30:0,
                   from src/hardware/scpi-pps/api.c:23:
  src/libsigrok-internal.h:964:19: note: expected ‘const double *’ but argument is of type ‘const float *’
   SR_PRIV GVariant *std_gvar_min_max_step_array(const double a[3]);
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  src/hardware/scpi-pps/api.c:576:40: warning: passing argument 1 of ‘std_gvar_min_max_step_array’ from incompatible pointer type [-Wincompatible-pointer-types]
      *data = std_gvar_min_max_step_array(ch_spec->current);
                                          ^~~~~~~
  In file included from src/scpi.h:30:0,
                   from src/hardware/scpi-pps/api.c:23:
  src/libsigrok-internal.h:964:19: note: expected ‘const double *’ but argument is of type ‘const float *’
   SR_PRIV GVariant *std_gvar_min_max_step_array(const double a[3]);
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2017-07-21 16:49:01 +02:00
Uwe Hermann 54d471f498 drivers: Factor out std_gvar_min_max_step{,_array}(). 2017-07-21 16:49:01 +02:00
Uwe Hermann ca314e060f drivers: Drop unneeded or duplicate comments.
Drop various comments which are not really needed, too verbose, document
obvious things, are duplicated across all drivers, or simply incorrect.
2017-07-21 15:23:56 +02:00
Uwe Hermann e66d1892d0 drivers: Add and use STD_CONFIG_LIST().
This ensures consistent handling of the SR_CONF_SCAN_OPTIONS and
SR_CONF_DEVICE_OPTIONS (with sdi NULL or non-NULL) config keys
and also reduces copy-pasted boilerplate in the drivers a bit.

This function does not handle channel-group specific items, that's
very driver-specific and thus left to the individual drivers.

Also move some generic checks and error messages from the drivers into
the sr_config_list() wrapper.
2017-07-19 15:11:01 +02:00
Uwe Hermann a9010323dd drivers: Remove some uneeded 'ret' variables. 2017-07-13 11:59:11 +02:00
Uwe Hermann 3553451f1e clear_helper(): Use a cast to shorten all implementations. 2017-07-13 11:59:11 +02:00
Uwe Hermann 8bf18daabb sr_dev_clear(): Always free sdi->priv (devc).
Until now, clear_helper() callbacks for std_dev_clear_with_callback()
were expected to g_free(devc), but not all of them did that.

Have std_dev_clear_with_callback() unconditionally g_free(sdi->priv)
(i.e., devc), regardless of whether a clear_helper() callback was
provided or not. It was doing g_free(sdi->priv) when no callback
was provided already anyway.

This makes the individual drivers' clear_helper() implementations
shorter and prevents errors such as missing g_free(devc) calls.

This works, because all drivers either call std_dev_clear_with_callback()
directly, or indirectly via std_dev_clear().

This also allows us to remove some no-longer needed dev_clear()
and clear_helper() implementations that only did g_free(devc)
in favor of std_dev_clear().
2017-07-13 11:59:11 +02:00