]> sigrok.org Git - libsigrok.git/blobdiff - hardware/alsa/api.c
Replace 'probe group' with 'channel group' everywhere.
[libsigrok.git] / hardware / alsa / api.c
index 69a78ad2f022fa545b3a9ae206c008f054c1b7c8..5538e4f05089f0861d0f664f0883c5470d0a0200 100644 (file)
@@ -36,22 +36,27 @@ static const int32_t hwcaps[] = {
 SR_PRIV struct sr_dev_driver alsa_driver_info;
 static struct sr_dev_driver *di = &alsa_driver_info;
 
-static int clear_instances(void)
+static void clear_helper(void *priv)
 {
-       struct drv_context *drvc;
+       struct dev_context *devc;
 
-       if (!(drvc = di->priv))
-               return SR_OK;
+       devc = priv;
 
-       g_slist_free_full(drvc->instances, (GDestroyNotify)alsa_dev_inst_clear);
-       drvc->instances = NULL;
+       snd_pcm_hw_params_free(devc->hw_params);
+       devc->hw_params = NULL;
 
-       return SR_OK;
+       g_free((void *)devc->samplerates);
+       devc->samplerates = NULL;
+}
+
+static int dev_clear(void)
+{
+       return std_dev_clear(di, clear_helper);
 }
 
 static int init(struct sr_context *sr_ctx)
 {
-       return std_hw_init(sr_ctx, di, LOG_PREFIX);
+       return std_init(sr_ctx, di, LOG_PREFIX);
 }
 
 static GSList *scan(GSList *options)
@@ -106,12 +111,11 @@ static int dev_close(struct sr_dev_inst *sdi)
 
        if (devc->capture_handle) {
                sr_dbg("Closing PCM device.");
-               if ((ret = snd_pcm_close(devc->capture_handle)) < 0) {
+               if ((ret = snd_pcm_close(devc->capture_handle)) < 0)
                        sr_err("Failed to close device: %s.",
                               snd_strerror(ret));
-                       devc->capture_handle = NULL;
-            sdi->status = SR_ST_INACTIVE;
-               }
+               devc->capture_handle = NULL;
+               sdi->status = SR_ST_INACTIVE;
        } else {
                sr_dbg("No capture handle, no need to close audio device.");
        }
@@ -121,15 +125,16 @@ static int dev_close(struct sr_dev_inst *sdi)
 
 static int cleanup(void)
 {
-       clear_instances();
-
-       return SR_OK;
+       return dev_clear();
 }
 
-static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi)
+static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
+               const struct sr_channel_group *channel_group)
 {
        struct dev_context *devc;
 
+       (void)channel_group;
+
        switch (id) {
        case SR_CONF_SAMPLERATE:
                devc = sdi->priv;
@@ -142,10 +147,13 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi)
        return SR_OK;
 }
 
-static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
+static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi,
+               const struct sr_channel_group *channel_group)
 {
        struct dev_context *devc;
 
+       (void)channel_group;
+
        if (sdi->status != SR_ST_ACTIVE)
                return SR_ERR_DEV_CLOSED;
 
@@ -165,13 +173,16 @@ static int config_set(int id, GVariant *data, const struct sr_dev_inst *sdi)
        return SR_OK;
 }
 
-static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi)
+static int config_list(int key, GVariant **data, const struct sr_dev_inst *sdi,
+               const struct sr_channel_group *channel_group)
 {
        struct dev_context *devc;
        GVariant *gvar;
        GVariantBuilder gvb;
        int i;
 
+       (void)channel_group;
+
        switch (key) {
        case SR_CONF_DEVICE_OPTIONS:
                *data = g_variant_new_fixed_array(G_VARIANT_TYPE_INT32,
@@ -325,7 +336,7 @@ SR_PRIV struct sr_dev_driver alsa_driver_info = {
        .cleanup = cleanup,
        .scan = scan,
        .dev_list = dev_list,
-       .dev_clear = clear_instances,
+       .dev_clear = dev_clear,
        .config_get = config_get,
        .config_set = config_set,
        .config_list = config_list,