/*
* This file is part of the sigrok project.
*
- * Copyright (C) 2010-2012 Bert Vermeulen <bert@biot.com>
+ * Copyright (C) 2013 Bert Vermeulen <bert@biot.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* 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).
- * @param hwcap The capability that should be checked (whether it's supported
- * by the specified device).
+ * @param key The option that should be checked for support on the
+ * specified device.
*
- * @return TRUE if the device has the specified capability, FALSE otherwise.
- * FALSE is also returned upon invalid input parameters or other
+ * @return TRUE if the device has the specified option, FALSE otherwise.
+ * FALSE is also returned on invalid input parameters or other
* error conditions.
*/
-SR_API gboolean sr_dev_has_hwcap(const struct sr_dev_inst *sdi, int hwcap)
+SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key)
{
- const int *hwcaps;
- int i;
+ GVariant *gvar;
+ const int *devopts;
+ gsize num_opts, i;
+ int ret;
- if (!sdi || !sdi->driver)
+ if (!sdi || !sdi->driver || !sdi->driver->config_list)
return FALSE;
- if (sdi->driver->config_get(SR_DI_HWCAPS,
- (const void **)&hwcaps, NULL) != SR_OK)
+ if (sdi->driver->config_list(SR_CONF_DEVICE_OPTIONS, &gvar, NULL) != SR_OK)
return FALSE;
- for (i = 0; hwcaps[i]; i++) {
- if (hwcaps[i] == hwcap)
- return TRUE;
+ ret = FALSE;
+ devopts = g_variant_get_fixed_array(gvar, &num_opts, sizeof(int32_t));
+ for (i = 0; i < num_opts; i++) {
+ if (devopts[i] == key) {
+ ret = TRUE;
+ break;
+ }
}
+ g_variant_unref(gvar);
- return FALSE;
+ return ret;
}
/** @private */
struct sr_dev_inst *sdi;
if (!(sdi = g_try_malloc(sizeof(struct sr_dev_inst)))) {
- sr_err("%s: sdi malloc failed", __func__);
+ sr_err("Device instance malloc failed.");
return NULL;
}
struct sr_usb_dev_inst *udi;
if (!(udi = g_try_malloc(sizeof(struct sr_usb_dev_inst)))) {
- sr_err("%s: udi malloc failed", __func__);
+ sr_err("USB device instance malloc failed.");
return NULL;
}
struct sr_serial_dev_inst *serial;
if (!port) {
- sr_err("hwdriver: serial port required");
+ sr_err("Serial port required.");
return NULL;
}
if (!(serial = g_try_malloc0(sizeof(struct sr_serial_dev_inst)))) {
- sr_err("hwdriver: serial malloc failed");
+ sr_err("Serial device instance malloc failed.");
return NULL;
}
/** @private */
SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial)
{
-
g_free(serial->port);
g_free(serial->serialcomm);
g_free(serial);
-
-}
-
-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->config_set) {
- sr_err("Unable to set config option.");
- return SR_ERR;
- }
-
- ret = sdi->driver->config_set(hwcap, value, sdi);
-
- 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
SR_API int sr_dev_inst_clear(const struct sr_dev_driver *driver)
{
-
if (driver && driver->dev_clear)
return driver->dev_clear();
else