+ while ((dev_name = g_dir_read_name(dir)) != NULL) {
+ if (strncmp(dev_name, prefix, strlen(prefix)))
+ continue;
+
+ device = g_strconcat(dev_dir, dev_name, NULL);
+
+ fd = open(device, O_RDWR);
+ len = write(fd, idn_query, strlen(idn_query));
+ len = read(fd, buf, sizeof(buf));
+ close(fd);
+ if (len == 0) {
+ g_free(device);
+ return NULL;
+ }
+
+ buf[len] = 0;
+ tokens = g_strsplit(buf, delimiter, 0);
+ close(fd);
+ sr_dbg("response: %s %d [%s]", device, len, buf);
+
+ for (num_tokens = 0; tokens[num_tokens] != NULL; num_tokens++);
+
+ if (num_tokens < 4) {
+ g_strfreev(tokens);
+ g_free(device);
+ return NULL;
+ }
+
+ manufacturer = tokens[0];
+ model = tokens[1];
+ version = tokens[3];
+
+ if (strcmp(manufacturer, "Rigol Technologies")) {
+ g_strfreev(tokens);
+ g_free(device);
+ return NULL;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(supported_models); i++) {
+ if (!strcmp(model, supported_models[i])) {
+ matched = 1;
+ break;
+ }
+ }
+
+ if (!matched || !(sdi = sr_dev_inst_new(0, SR_ST_ACTIVE,
+ manufacturer, model, version))) {
+ g_strfreev(tokens);
+ g_free(device);
+ return NULL;
+ }
+
+ g_strfreev(tokens);