]> sigrok.org Git - libsigrok.git/blobdiff - src/output/csv.c
output/csv: Drop support for SR_DF_ANALOG_OLD.
[libsigrok.git] / src / output / csv.c
index 8b234424c22211a0976552a131fbb5c549a7d0e6..00265870be0b35ffcb2a022f8808daf372c4dc04 100644 (file)
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+#include <config.h>
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
@@ -163,24 +164,24 @@ static void init_output(GString **out, struct context *ctx,
        }
 }
 
-static void handle_analog_frame(struct context *ctx,
-                               const struct sr_datafeed_analog *analog)
+static void handle_analog_frame(struct context *ctx, GSList *channels,
+               unsigned int num_samples, float *data)
 {
        unsigned int numch, nums, i, j, s;
        GSList *l;
 
-       numch = g_slist_length(analog->channels);
-       if ((unsigned int)analog->num_samples > numch)
-               nums = analog->num_samples / numch;
+       numch = g_slist_length(channels);
+       if (num_samples > numch)
+               nums = num_samples / numch;
        else
                nums = 1;
 
        s = 0;
-       l = analog->channels;
+       l = channels;
        for (i = 0; i < nums; i++) {
                for (j = 0; j < ctx->num_analog_channels; j++) {
                        if (ctx->analog_channels[j] == l->data)
-                               ctx->analog_vals[j] = analog->data[s++];
+                               ctx->analog_vals[j] = data[s++];
                }
                l = l->next;
        }
@@ -193,7 +194,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
        const struct sr_datafeed_logic *logic;
        const struct sr_datafeed_analog *analog;
        const struct sr_config *src;
-       GSList *l;
+       unsigned int num_samples;
+       float *data;
+       GSList *l, *channels;
        struct context *ctx;
        int idx;
        uint64_t i, j, k, nums, numch;
@@ -266,9 +269,16 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                break;
        case SR_DF_ANALOG:
                analog = packet->payload;
+               channels = analog->meaning->channels;
+               numch = g_slist_length(channels);
+               num_samples = analog->num_samples;
+               data = g_malloc(sizeof(float) * num_samples * numch);
+               ret = sr_analog_to_float(analog, data);
+               if (ret != SR_OK)
+                       return ret;
 
                if (ctx->inframe) {
-                       handle_analog_frame(ctx, analog);
+                       handle_analog_frame(ctx, channels, num_samples, data);
                        break;
                }
 
@@ -276,9 +286,8 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                k = 0;
                l = NULL;
 
-               numch = g_slist_length(analog->channels);
-               if ((unsigned int)analog->num_samples > numch)
-                       nums = analog->num_samples / numch;
+               if (num_samples > numch)
+                       nums = num_samples / numch;
                else
                        nums = 1;
 
@@ -286,11 +295,11 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                        for (j = 0; j < ctx->num_enabled_channels; j++) {
                                if (ctx->channels[j]->type == SR_CHANNEL_ANALOG) {
                                        if (!l)
-                                               l = analog->channels;
+                                               l = channels;
 
                                        if (ctx->channels[j] == l->data) {
                                                g_string_append_printf(*out,
-                                                       "%f", analog->data[k++]);
+                                                       "%f", data[k++]);
                                        }
 
                                        l = l->next;
@@ -301,7 +310,6 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                        g_string_append_printf(*out, "\n");
                }
                break;
-       /* TODO case SR_DF_ANALOG2: */
        }
 
        return ret;