X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhwdriver.c;h=ab2210104fbe72ac6c82100253516fbcd266b65f;hb=1cd40b57d67cadc6abbf7009917d85d8f80fb64d;hp=7e16b82a9cecd2aaca78ead54f4456bea77c56bc;hpb=b0baddef5620c5783080d0e8811e668fbc2b38f5;p=libsigrok.git diff --git a/src/hwdriver.c b/src/hwdriver.c index 7e16b82a..ab221010 100644 --- a/src/hwdriver.c +++ b/src/hwdriver.c @@ -175,6 +175,8 @@ static struct sr_key_info sr_key_info_config[] = { "Under-voltage condition", NULL}, {SR_CONF_UNDER_VOLTAGE_CONDITION_ACTIVE, SR_T_BOOL, "uvc_active", "Under-voltage condition active", NULL}, + {SR_CONF_TRIGGER_LEVEL, SR_T_FLOAT, "triggerlevel", + "Trigger level", NULL}, /* Special stuff */ {SR_CONF_SESSIONFILE, SR_T_STRING, "sessionfile", @@ -551,9 +553,12 @@ SR_PRIV void sr_hw_cleanup_all(const struct sr_context *ctx) } } -/** Allocate struct sr_config. - * A floating reference can be passed in for data. - * @private +/** + * Allocate struct sr_config. + * + * A floating reference can be passed in for data. + * + * @private */ SR_PRIV struct sr_config *sr_config_new(uint32_t key, GVariant *data) { @@ -566,8 +571,10 @@ SR_PRIV struct sr_config *sr_config_new(uint32_t key, GVariant *data) return src; } -/** Free struct sr_config. - * @private +/** + * Free struct sr_config. + * + * @private */ SR_PRIV void sr_config_free(struct sr_config *src) { @@ -672,12 +679,13 @@ static int check_key(const struct sr_dev_driver *driver, /** * Query value of a configuration key at the given driver or device instance. * - * @param[in] driver The sr_dev_driver struct to query. + * @param[in] driver The sr_dev_driver struct to query. Must not be NULL. * @param[in] sdi (optional) If the key is specific to a device, this must * contain a pointer to the struct sr_dev_inst to be checked. - * Otherwise it must be NULL. + * Otherwise it must be NULL. If sdi is != NULL, sdi->priv must + * also be != NULL. * @param[in] cg The channel group on the device for which to list the - * values, or NULL. + * values, or NULL. * @param[in] key The configuration key (SR_CONF_*). * @param[in,out] data Pointer to a GVariant where the value will be stored. * Must not be NULL. The caller is given ownership of the GVariant @@ -688,8 +696,8 @@ static int check_key(const struct sr_dev_driver *driver, * @retval SR_OK Success. * @retval SR_ERR Error. * @retval SR_ERR_ARG The driver doesn't know that key, but this is not to be - * interpreted as an error by the caller; merely as an indication - * that it's not applicable. + * interpreted as an error by the caller; merely as an indication + * that it's not applicable. * * @since 0.3.0 */ @@ -709,6 +717,11 @@ SR_API int sr_config_get(const struct sr_dev_driver *driver, if (check_key(driver, sdi, cg, key, SR_CONF_GET, NULL) != SR_OK) return SR_ERR_ARG; + if (sdi && !sdi->priv) { + sr_err("Can't get config (sdi != NULL, sdi->priv == NULL)."); + return SR_ERR; + } + if ((ret = driver->config_get(key, data, sdi, cg)) == SR_OK) { log_key(sdi, cg, key, SR_CONF_GET, *data); /* Got a floating reference from the driver. Sink it here, @@ -734,8 +747,8 @@ SR_API int sr_config_get(const struct sr_dev_driver *driver, * @retval SR_OK Success. * @retval SR_ERR Error. * @retval SR_ERR_ARG The driver doesn't know that key, but this is not to be - * interpreted as an error by the caller; merely as an indication - * that it's not applicable. + * interpreted as an error by the caller; merely as an indication + * that it's not applicable. * * @since 0.3.0 */ @@ -789,9 +802,11 @@ SR_API int sr_config_commit(const struct sr_dev_inst *sdi) /** * List all possible values for a configuration key. * - * @param[in] driver The sr_dev_driver struct to query. + * @param[in] driver The sr_dev_driver struct to query. Must not be NULL. * @param[in] sdi (optional) If the key is specific to a device, this must * contain a pointer to the struct sr_dev_inst to be checked. + * Otherwise it must be NULL. If sdi is != NULL, sdi->priv must + * also be != NULL. * @param[in] cg The channel group on the device for which to list the * values, or NULL. * @param[in] key The configuration key (SR_CONF_*). @@ -804,8 +819,8 @@ SR_API int sr_config_commit(const struct sr_dev_inst *sdi) * @retval SR_OK Success. * @retval SR_ERR Error. * @retval SR_ERR_ARG The driver doesn't know that key, but this is not to be - * interpreted as an error by the caller; merely as an indication - * that it's not applicable. + * interpreted as an error by the caller; merely as an indication + * that it's not applicable. * * @since 0.3.0 */ @@ -824,6 +839,10 @@ SR_API int sr_config_list(const struct sr_dev_driver *driver, if (check_key(driver, sdi, cg, key, SR_CONF_LIST, NULL) != SR_OK) return SR_ERR_ARG; } + if (sdi && !sdi->priv) { + sr_err("Can't list config (sdi != NULL, sdi->priv == NULL)."); + return SR_ERR; + } if ((ret = driver->config_list(key, data, sdi, cg)) == SR_OK) { log_key(sdi, cg, key, SR_CONF_LIST, *data); g_variant_ref_sink(*data);