-SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
- const char *vendor, const char *model, const char *version)
-{
- struct sr_dev_inst *sdi;
-
- if (!(sdi = g_try_malloc(sizeof(struct sr_dev_inst)))) {
- sr_err("hwdriver: %s: sdi malloc failed", __func__);
- return NULL;
- }
-
- sdi->index = index;
- sdi->status = status;
- sdi->inst_type = -1;
- sdi->vendor = vendor ? g_strdup(vendor) : NULL;
- sdi->model = model ? g_strdup(model) : NULL;
- sdi->version = version ? g_strdup(version) : NULL;
- sdi->priv = NULL;
-
- return sdi;
-}
-
-SR_PRIV struct sr_dev_inst *sr_dev_inst_get(GSList *dev_insts, int dev_index)
-{
- struct sr_dev_inst *sdi;
- GSList *l;
-
- for (l = dev_insts; l; l = l->next) {
- sdi = (struct sr_dev_inst *)(l->data);
- if (sdi->index == dev_index)
- return sdi;
- }
- sr_warn("could not find device index %d instance", dev_index);
-
- return NULL;
-}
-
-SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi)
-{
- g_free(sdi->priv);
- g_free(sdi->vendor);
- g_free(sdi->model);
- g_free(sdi->version);
- g_free(sdi);
-}
-
-#ifdef HAVE_LIBUSB_1_0
-
-SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
- uint8_t address, struct libusb_device_handle *hdl)
-{
- struct sr_usb_dev_inst *udi;
-
- if (!(udi = g_try_malloc(sizeof(struct sr_usb_dev_inst)))) {
- sr_err("hwdriver: %s: udi malloc failed", __func__);
- return NULL;
- }
-
- udi->bus = bus;
- udi->address = address;
- udi->devhdl = hdl;
-
- return udi;
-}
-
-SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb)
-{
- /* Avoid compiler warnings. */
- (void)usb;
-
- /* Nothing to do for this device instance type. */
-}
-
-#endif
-
-SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port,
- int fd)
+/**
+ * Returns information about the given driver or device instance.
+ *
+ * @param driver The sr_dev_driver struct to query.
+ * @param id The type of information, in the form of an SR_HWCAP_* option.
+ * @param data Pointer where the value. will be stored. Must not be NULL.
+ * @param sdi Pointer to the struct sr_dev_inst to be checked. Must not be NULL.
+ *
+ * @return SR_OK upon success or SR_ERR in case of error. Note SR_ERR_ARG
+ * may be returned by the driver indicating it doesn't know that id,
+ * but this is not to be flagged as an error by the caller; merely
+ * as an indication that it's not applicable.
+ */
+SR_API int sr_info_get(struct sr_dev_driver *driver, int id,
+ const void **data, const struct sr_dev_inst *sdi)