/*
* 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 option The option that should be checked for support on the
+ * @param key The option that should be checked for support on the
* specified device.
*
* @return TRUE if the device has the specified option, FALSE otherwise.
*/
SR_API gboolean sr_dev_has_option(const struct sr_dev_inst *sdi, int key)
{
+ GVariant *gvar;
const int *devopts;
- int i;
+ gsize num_opts, i;
+ int ret;
- if (!sdi || !sdi->driver)
+ if (!sdi || !sdi->driver || !sdi->driver->config_list)
return FALSE;
- if (sdi->driver->config_list(SR_CONF_DEVICE_OPTIONS,
- (const void **)&devopts, NULL) != SR_OK)
+ if (sdi->driver->config_list(SR_CONF_DEVICE_OPTIONS, &gvar, NULL) != SR_OK)
return FALSE;
- for (i = 0; devopts[i]; i++) {
- if (devopts[i] == key)
- 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 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