scpi-pps: Use regex to match model names.

This commit is contained in:
Bert Vermeulen 2014-09-05 12:50:07 +02:00
parent 22c18b0370
commit 58b77c41ff
2 changed files with 12 additions and 7 deletions

View File

@ -45,6 +45,8 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
const struct scpi_pps *device;
const struct channel_group_spec *cgs;
struct pps_channel_group *pcg;
GRegex *model_re;
GMatchInfo *model_mi;
uint64_t mask;
unsigned int i, j;
const char *vendor;
@ -57,20 +59,23 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
device = NULL;
for (i = 0; i < num_pps_profiles; i++) {
vendor = get_vendor(hw_info->manufacturer);
if (strcasecmp(vendor, pps_profiles[i].idn_vendor))
if (strcasecmp(vendor, pps_profiles[i].vendor))
continue;
if (!strcmp(hw_info->model, pps_profiles[i].idn_model)) {
model_re = g_regex_new(pps_profiles[i].model, 0, 0, NULL);
if (g_regex_match(model_re, hw_info->model, 0, &model_mi))
device = &pps_profiles[i];
g_match_info_unref(model_mi);
g_regex_unref(model_re);
if (device)
break;
}
}
if (!device) {
sr_scpi_hw_info_free(hw_info);
return NULL;
}
sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, vendor,
device->idn_model, hw_info->firmware_version);
sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, vendor, hw_info->model,
hw_info->firmware_version);
sdi->conn = scpi;
sdi->driver = di;
sdi->inst_type = SR_INST_SCPI;

View File

@ -70,8 +70,8 @@ enum pps_features {
};
struct scpi_pps {
char *idn_vendor;
char *idn_model;
char *vendor;
char *model;
uint64_t features;
const int32_t *devopts;
unsigned int num_devopts;