+ case SR_DF_ANALOG:
+ case SR_DF_ANALOG2:
+ analog = packet->payload;
+ analog2 = packet->payload;
+
+ if (packet->type == SR_DF_ANALOG) {
+ channels = analog->channels;
+ numch = g_slist_length(channels);
+ num_samples = analog->num_samples;
+ data = analog->data;
+ } else {
+ channels = analog2->meaning->channels;
+ numch = g_slist_length(channels);
+ num_samples = analog2->num_samples;
+ data = g_malloc(sizeof(float) * num_samples * numch);
+ ret = sr_analog_to_float(analog2, data);
+ if (ret != SR_OK)
+ return ret;
+ }
+
+ if (ctx->inframe) {
+ handle_analog_frame(ctx, channels, num_samples, data);
+ break;
+ }
+
+ init_output(out, ctx, o);
+ k = 0;
+ l = NULL;
+
+ if (num_samples > numch)
+ nums = num_samples / numch;
+ else
+ nums = 1;
+
+ for (i = 0; i < nums; i++) {
+ for (j = 0; j < ctx->num_enabled_channels; j++) {
+ if (ctx->channels[j]->type == SR_CHANNEL_ANALOG) {
+ if (!l)
+ l = channels;
+
+ if (ctx->channels[j] == l->data) {
+ g_string_append_printf(*out,
+ "%f", data[k++]);
+ }
+
+ l = l->next;
+ }
+ g_string_append_c(*out, ctx->separator);
+ }
+ g_string_truncate(*out, (*out)->len - 1);
+ g_string_append_printf(*out, "\n");
+ }
+ break;