X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=device.c;h=740ad5077cebcf350e99757e575dc0901c030a13;hb=6f22a8ef2ccf7091324b41b553632695507215a7;hp=533331141d4908e30ae4e1ee891e6242bab67c75;hpb=48a486cd3ed51cfefce271224541502f4388c225;p=libsigrok.git diff --git a/device.c b/device.c index 53333114..740ad507 100644 --- a/device.c +++ b/device.c @@ -19,9 +19,25 @@ #include #include +#include "config.h" /* Needed for HAVE_LIBUSB_1_0 and others. */ #include "libsigrok.h" #include "libsigrok-internal.h" +/** + * @file + * + * Device handling in libsigrok. + */ + +/** + * @defgroup grp_devices Devices + * + * Device handling in libsigrok. + * + * @{ + */ + +/** @private */ SR_PRIV struct sr_probe *sr_probe_new(int index, int type, gboolean enabled, const char *name) { @@ -151,9 +167,10 @@ SR_API int sr_dev_trigger_set(const struct sr_dev_inst *sdi, int probenum, } /** - * Determine whether the specified device has the specified capability. + * Determine whether the specified device instance has the specified + * capability. * - * @param dev Pointer to the device instance to be checked. Must not be NULL. + * @param sdi Pointer to the device instance to be checked. Must not be NULL. * If the device's 'driver' field is NULL (virtual device), this * function will always return FALSE (virtual devices don't have * a hardware capabilities list). @@ -184,6 +201,7 @@ SR_API gboolean sr_dev_has_hwcap(const struct sr_dev_inst *sdi, int hwcap) return FALSE; } +/** @private */ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status, const char *vendor, const char *model, const char *version) { @@ -194,6 +212,7 @@ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status, return NULL; } + sdi->driver = NULL; sdi->index = index; sdi->status = status; sdi->inst_type = -1; @@ -206,17 +225,29 @@ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status, return sdi; } +/** @private */ SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi) { + struct sr_probe *probe; + GSList *l; + + for (l = sdi->probes; l; l = l->next) { + probe = l->data; + g_free(probe->name); + g_free(probe); + } + g_free(sdi->priv); g_free(sdi->vendor); g_free(sdi->model); g_free(sdi->version); g_free(sdi); + } #ifdef HAVE_LIBUSB_1_0 +/** @private */ SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus, uint8_t address, struct libusb_device_handle *hdl) { @@ -234,6 +265,7 @@ SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus, return udi; } +/** @private */ SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb) { /* Avoid compiler warnings. */ @@ -244,6 +276,7 @@ SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb) #endif +/** @private */ SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port, int fd) { @@ -260,8 +293,43 @@ SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port, return serial; } +/** @private */ SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial) { g_free(serial->port); } +SR_API int sr_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, + const void *value) +{ + int ret; + + if (!sdi || !sdi->driver || !sdi->driver->dev_config_set) { + sr_err("hwdriver: unable to set config option"); + return SR_ERR; + } + + ret = sdi->driver->dev_config_set(sdi, hwcap, value); + + return ret; +} + +SR_API GSList *sr_dev_inst_list(const struct sr_dev_driver *driver) +{ + + if (driver && driver->dev_list) + return driver->dev_list(); + else + return NULL; +} + +SR_API int sr_dev_inst_clear(const struct sr_dev_driver *driver) +{ + + if (driver && driver->dev_clear) + return driver->dev_clear(); + else + return SR_OK; +} + +/** @} */