+enum pps_scpi_cmds {
+ SCPI_CMD_KEY_UNLOCK,
+ SCPI_CMD_GET_MEAS_VOLTAGE,
+ SCPI_CMD_GET_MEAS_CURRENT,
+ SCPI_CMD_GET_MEAS_POWER,
+ SCPI_CMD_GET_VOLTAGE_MAX,
+ SCPI_CMD_SET_VOLTAGE_MAX,
+ SCPI_CMD_GET_CURRENT_MAX,
+ SCPI_CMD_SET_CURRENT_MAX,
+ SCPI_CMD_GET_OUTPUT_ENABLED,
+ SCPI_CMD_SET_OUTPUT_ENABLED,
+ SCPI_CMD_GET_OUTPUT_REGULATION,
+ SCPI_CMD_GET_OVER_TEMPERATURE_PROTECTION,
+ SCPI_CMD_SET_OVER_TEMPERATURE_PROTECTION,
+ SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ENABLED,
+ SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_ENABLED,
+ SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_ACTIVE,
+ SCPI_CMD_GET_OVER_VOLTAGE_PROTECTION_THRESHOLD,
+ SCPI_CMD_SET_OVER_VOLTAGE_PROTECTION_THRESHOLD,
+ SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ENABLED,
+ SCPI_CMD_SET_OVER_CURRENT_PROTECTION_ENABLED,
+ SCPI_CMD_GET_OVER_CURRENT_PROTECTION_ACTIVE,
+ SCPI_CMD_GET_OVER_CURRENT_PROTECTION_THRESHOLD,
+ SCPI_CMD_SET_OVER_CURRENT_PROTECTION_THRESHOLD,
+};
+
+/*
+ * These are bit values denoting features a device can have either globally,
+ * in scpi_pps.features, or on a per-channel-group basis in
+ * channel_group_spec.features.
+ */
+enum pps_features {
+ PPS_OTP = (1 << 0),
+ PPS_OVP = (1 << 1),
+ PPS_OCP = (1 << 2),
+ PPS_INDEPENDENT = (1 << 3),
+ PPS_SERIES = (1 << 4),
+ PPS_PARALLEL = (1 << 5),
+};
+
+struct scpi_pps {
+ char *vendor;
+ char *model;
+ uint64_t features;
+ const uint32_t *devopts;
+ unsigned int num_devopts;
+ const uint32_t *devopts_cg;
+ unsigned int num_devopts_cg;
+ struct channel_spec *channels;
+ unsigned int num_channels;
+ struct channel_group_spec *channel_groups;
+ unsigned int num_channel_groups;
+ struct scpi_command *commands;
+ unsigned int num_commands;
+};
+
+struct channel_spec {
+ char *name;
+ /* Min, max, programming resolution. */
+ float voltage[3];
+ float current[3];
+};
+
+struct scpi_command {
+ int command;
+ char *string;
+};
+
+struct channel_group_spec {
+ char *name;
+ uint64_t channel_index_mask;
+ uint64_t features;
+};
+
+struct pps_channel {
+ int mq;
+ unsigned int hw_output_idx;
+ char *hwname;
+};
+
+struct pps_channel_instance {
+ int mq;
+ int command;
+ char *prefix;
+};
+
+struct pps_channel_group {
+ uint64_t features;
+};
+
+enum acq_states {
+ STATE_VOLTAGE,
+ STATE_CURRENT,
+ STATE_STOP,
+};
+