X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fscpi-pps%2Fprotocol.h;h=19902ccc0c40dfde72e9f1348b0c2809ebd531f6;hb=d4eabea847e675bc333be1e51ead4e0be6fc976b;hp=ee434473a4acfd109af6fc8f75dae6fb4cceb4ed;hpb=ca1a7cb56fbfeeb1c5b27ea87eb8603ca3ca888b;p=libsigrok.git diff --git a/src/hardware/scpi-pps/protocol.h b/src/hardware/scpi-pps/protocol.h index ee434473..19902ccc 100644 --- a/src/hardware/scpi-pps/protocol.h +++ b/src/hardware/scpi-pps/protocol.h @@ -27,18 +27,110 @@ #define LOG_PREFIX "scpi-pps" +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, + SCPI_CMD_GET_OUTPUT_CHANNEL_CONFIG, + SCPI_CMD_SET_OUTPUT_CHANNEL_CONFIG, +}; + +/* + * 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 { + int vendor_id; + char *vendor; + char *idn_vendor; + char *idn_model; + uint64_t features; + const int32_t *devopts; + unsigned int num_devopts; + const int32_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_group { + uint64_t features; +}; + +enum acq_states { + STATE_VOLTAGE, + STATE_CURRENT, + STATE_STOP, +}; + /** Private, per-device-instance driver context. */ struct dev_context { /* Model-specific information */ + const struct scpi_pps *device; /* Acquisition settings */ + void *cb_data; /* Operational state */ /* Temporary state across callbacks */ - + int state; + struct sr_channel *cur_channel; }; +SR_PRIV int scpi_cmd(const struct sr_dev_inst *sdi, int command, ...); SR_PRIV int scpi_pps_receive_data(int fd, int revents, void *cb_data); #endif