X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fsession.c;h=97b9512ad300d864c33e3cfe3bd9ccb3611e3606;hb=de285cce11aca3afd0d4adfdd514c691e6a71c64;hp=8211438ee28aac654804c60808c8ea6f70cd7210;hpb=6ec6c43b4738dbc7091f4a49a4ec80ea6102cb52;p=libsigrok.git diff --git a/src/session.c b/src/session.c index 8211438e..97b9512a 100644 --- a/src/session.c +++ b/src/session.c @@ -1248,6 +1248,8 @@ SR_PRIV int sr_packet_copy(const struct sr_datafeed_packet *packet, struct sr_datafeed_logic *logic_copy; const struct sr_datafeed_analog *analog; struct sr_datafeed_analog *analog_copy; + const struct sr_datafeed_analog2 *analog2; + struct sr_datafeed_analog2 *analog2_copy; uint8_t *payload; *copy = g_malloc0(sizeof(struct sr_datafeed_packet)); @@ -1285,10 +1287,29 @@ SR_PRIV int sr_packet_copy(const struct sr_datafeed_packet *packet, analog_copy->mq = analog->mq; analog_copy->unit = analog->unit; analog_copy->mqflags = analog->mqflags; + analog_copy->data = g_malloc(analog->num_samples * sizeof(float)); memcpy(analog_copy->data, analog->data, analog->num_samples * sizeof(float)); (*copy)->payload = analog_copy; break; + case SR_DF_ANALOG2: + analog2 = packet->payload; + analog2_copy = g_malloc(sizeof(analog2)); + analog2_copy->data = g_malloc( + analog2->encoding->unitsize * analog2->num_samples); + memcpy(analog2_copy->data, analog2->data, + analog2->encoding->unitsize * analog2->num_samples); + analog2_copy->num_samples = analog2->num_samples; + analog2_copy->encoding = g_memdup(analog2->encoding, + sizeof(struct sr_analog_encoding)); + analog2_copy->meaning = g_memdup(analog2->meaning, + sizeof(struct sr_analog_meaning)); + analog2_copy->meaning->channels = g_slist_copy( + analog2->meaning->channels); + analog2_copy->spec = g_memdup(analog2->spec, + sizeof(struct sr_analog_spec)); + (*copy)->payload = analog2_copy; + break; default: sr_err("Unknown packet type %d", packet->type); return SR_ERR; @@ -1302,6 +1323,7 @@ void sr_packet_free(struct sr_datafeed_packet *packet) const struct sr_datafeed_meta *meta; const struct sr_datafeed_logic *logic; const struct sr_datafeed_analog *analog; + const struct sr_datafeed_analog2 *analog2; struct sr_config *src; GSList *l; @@ -1335,6 +1357,15 @@ void sr_packet_free(struct sr_datafeed_packet *packet) g_free(analog->data); g_free((void *)packet->payload); break; + case SR_DF_ANALOG2: + analog2 = packet->payload; + g_free(analog2->data); + g_free(analog2->encoding); + g_slist_free(analog2->meaning->channels); + g_free(analog2->meaning); + g_free(analog2->spec); + g_free((void *)packet->payload); + break; default: sr_err("Unknown packet type %d", packet->type); }