From: Bert Vermeulen Date: Fri, 5 Sep 2014 01:49:25 +0000 (+0200) Subject: scpi-pps: Generalize vendor name cleanup. X-Git-Tag: libsigrok-0.4.0~1036 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=22c18b03707834251b14a4f77d92aee19188dcbc;p=libsigrok.git scpi-pps: Generalize vendor name cleanup. --- diff --git a/src/hardware/scpi-pps/api.c b/src/hardware/scpi-pps/api.c index 0c19c017..cf161710 100644 --- a/src/hardware/scpi-pps/api.c +++ b/src/hardware/scpi-pps/api.c @@ -47,6 +47,7 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) struct pps_channel_group *pcg; uint64_t mask; unsigned int i, j; + const char *vendor; if (sr_scpi_get_hw_id(scpi, &hw_info) != SR_OK) { sr_info("Couldn't get IDN response."); @@ -55,8 +56,10 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) device = NULL; for (i = 0; i < num_pps_profiles; i++) { - if (!strcasecmp(hw_info->manufacturer, pps_profiles[i].idn_vendor) && - !strcmp(hw_info->model, pps_profiles[i].idn_model)) { + vendor = get_vendor(hw_info->manufacturer); + if (strcasecmp(vendor, pps_profiles[i].idn_vendor)) + continue; + if (!strcmp(hw_info->model, pps_profiles[i].idn_model)) { device = &pps_profiles[i]; break; } @@ -66,8 +69,8 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) return NULL; } - sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, device->vendor, device->idn_model, - hw_info->firmware_version); + sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, vendor, + device->idn_model, hw_info->firmware_version); sdi->conn = scpi; sdi->driver = di; sdi->inst_type = SR_INST_SCPI; diff --git a/src/hardware/scpi-pps/profiles.c b/src/hardware/scpi-pps/profiles.c index 8de5b13c..de00684b 100644 --- a/src/hardware/scpi-pps/profiles.c +++ b/src/hardware/scpi-pps/profiles.c @@ -17,14 +17,27 @@ * along with this program. If not, see . */ +#include #include "protocol.h" #define CH_IDX(x) (1 << x) -enum vendors { - RIGOL, +const char *pps_vendors[][2] = { + { "RIGOL TECHNOLOGIES", "Rigol" }, }; +const char *get_vendor(const char *raw_vendor) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(pps_vendors); i++) { + if (!strcasecmp(raw_vendor, pps_vendors[i][0])) + return pps_vendors[i][1]; + } + + return raw_vendor; +} + /* Rigol DP800 series */ static const int32_t devopts_rigol_dp800[] = { SR_CONF_POWER_SUPPLY, @@ -87,7 +100,7 @@ struct scpi_command cmd_rigol_dp800[] = { SR_PRIV const struct scpi_pps pps_profiles[] = { /* Rigol DP800 series */ - { RIGOL, "Rigol", "RIGOL TECHNOLOGIES", "DP832", PPS_OTP, + { "Rigol", "DP832", PPS_OTP, ARRAY_AND_SIZE(devopts_rigol_dp800), ARRAY_AND_SIZE(devopts_cg_rigol_dp800), ARRAY_AND_SIZE(ch_rigol_dp800), diff --git a/src/hardware/scpi-pps/protocol.h b/src/hardware/scpi-pps/protocol.h index 19902ccc..25b55cb1 100644 --- a/src/hardware/scpi-pps/protocol.h +++ b/src/hardware/scpi-pps/protocol.h @@ -70,8 +70,6 @@ enum pps_features { }; struct scpi_pps { - int vendor_id; - char *vendor; char *idn_vendor; char *idn_model; uint64_t features; @@ -130,6 +128,7 @@ struct dev_context { struct sr_channel *cur_channel; }; +const char *get_vendor(const char *raw_vendor); 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);