X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftransform%2Finvert.c;h=cb7f15d1e108193826fd3d668e1bddb38ed3efc5;hb=3fc3fbe46e472a1466085bb2498d8d9b469d63f8;hp=5a64afac5d06324aa42af396cea0352a0c4095c7;hpb=c1aae90038456a61d0f9313d34e6107c3440d3e7;p=libsigrok.git diff --git a/src/transform/invert.c b/src/transform/invert.c index 5a64afac..cb7f15d1 100644 --- a/src/transform/invert.c +++ b/src/transform/invert.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include #include "libsigrok-internal.h" @@ -29,13 +30,15 @@ static int receive(const struct sr_transform *t, struct sr_datafeed_packet **packet_out) { const struct sr_datafeed_logic *logic; + const struct sr_datafeed_analog_old *analog_old; const struct sr_datafeed_analog *analog; struct sr_channel *ch; GSList *l; float *fdata, *f; int si, num_channels, c; uint8_t *b; - uint64_t i, j; + int64_t p; + uint64_t i, j, q; if (!t || !t->sdi || !packet_in || !packet_out) return SR_ERR_ARG; @@ -51,13 +54,13 @@ static int receive(const struct sr_transform *t, } } break; - case SR_DF_ANALOG: - analog = packet_in->payload; - fdata = (float *)analog->data; - num_channels = g_slist_length(analog->channels); - for (si = 0; si < analog->num_samples; si++) { + case SR_DF_ANALOG_OLD: + analog_old = packet_in->payload; + fdata = (float *)analog_old->data; + num_channels = g_slist_length(analog_old->channels); + for (si = 0; si < analog_old->num_samples; si++) { /* For now invert all values in all channels. */ - for (l = analog->channels, c = 0; l; l = l->next, c++) { + for (l = analog_old->channels, c = 0; l; l = l->next, c++) { ch = l->data; (void)ch; f = &fdata[si * num_channels + c]; @@ -65,6 +68,15 @@ static int receive(const struct sr_transform *t, } } break; + case SR_DF_ANALOG: + analog = packet_in->payload; + p = analog->encoding->scale.p; + q = analog->encoding->scale.q; + if (q > INT64_MAX) + return SR_ERR; + analog->encoding->scale.p = (p < 0) ? -q : q; + analog->encoding->scale.q = (p < 0) ? -p : p; + break; default: sr_spew("Unsupported packet type %d, ignoring.", packet_in->type); break;