]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/lecroy-xstream/protocol.c
lecroy-xstream: free memory that was allocated by SCPI get routines
[libsigrok.git] / src / hardware / lecroy-xstream / protocol.c
index 591f708012d5555524b72f7cfae943ce7671ce04..a05ff618d5e4c8eeaa1877f6fc46b6ada7ac7875 100644 (file)
@@ -92,11 +92,11 @@ static const char *trigger_sources[] = {
 
 static const uint64_t timebases[][2] = {
        /* picoseconds */
-       { 20, 1000000000000 },
-       { 50, 1000000000000 },
-       { 100, 1000000000000 },
-       { 200, 1000000000000 },
-       { 500, 1000000000000 },
+       { 20, UINT64_C(1000000000000) },
+       { 50, UINT64_C(1000000000000) },
+       { 100, UINT64_C(1000000000000) },
+       { 200, UINT64_C(1000000000000) },
+       { 500, UINT64_C(1000000000000) },
        /* nanoseconds */
        { 1, 1000000000 },
        { 2, 1000000000 },
@@ -435,6 +435,7 @@ SR_PRIV int lecroy_xstream_state_get(struct sr_dev_inst *sdi)
                }
                i++;
        }
+       g_free(tmp_str);
 
        if (!trig_source || scope_state_get_array_option(trig_source,
                        config->trigger_sources, config->num_trigger_sources,
@@ -448,6 +449,7 @@ SR_PRIV int lecroy_xstream_state_get(struct sr_dev_inst *sdi)
        if (scope_state_get_array_option(tmp_str, config->trigger_slopes,
                        config->num_trigger_slopes, &state->trigger_slope) != SR_OK)
                return SR_ERR;
+       g_free(tmp_str);
 
        if (sr_scpi_get_float(sdi->conn, "TRIG_DELAY?", &state->horiz_triggerpos) != SR_OK)
                return SR_ERR;
@@ -626,13 +628,10 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data)
        struct sr_analog_encoding encoding;
        struct sr_analog_meaning meaning;
        struct sr_analog_spec spec;
-       char buf[8];
 
        (void)fd;
        (void)revents;
 
-       data = NULL;
-
        if (!(sdi = cb_data))
                return TRUE;
 
@@ -645,12 +644,7 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data)
        if (ch->type != SR_CHANNEL_ANALOG)
                return SR_ERR;
 
-       /* Pass on the received data of the channel(s). */
-       if (sr_scpi_read_data(sdi->conn, buf, 4) != 4) {
-               sr_err("Reading header failed, scope probably didn't send any data.");
-               return TRUE;
-       }
-
+       data = NULL;
        if (sr_scpi_get_block(sdi->conn, NULL, &data) != SR_OK) {
                if (data)
                        g_byte_array_free(data, TRUE);
@@ -665,6 +659,9 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data)
                return SR_ERR;
 
        if (analog.num_samples == 0) {
+               g_free(analog.data);
+               g_byte_array_free(data, TRUE);
+
                /* No data available, we have to acquire data first. */
                g_snprintf(command, sizeof(command), "ARM;WAIT;*OPC;C%d:WAVEFORM?", ch->index + 1);
                sr_scpi_send(sdi->conn, command);
@@ -674,18 +671,19 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data)
        } else {
                /* Update sample rate if needed. */
                if (state->sample_rate == 0)
-                       if (lecroy_xstream_update_sample_rate(sdi, analog.num_samples) != SR_OK)
+                       if (lecroy_xstream_update_sample_rate(sdi, analog.num_samples) != SR_OK) {
+                               g_free(analog.data);
+                               g_byte_array_free(data, TRUE);
                                return SR_ERR;
+                       }
        }
 
        /*
         * Send "frame begin" packet upon reception of data for the
         * first enabled channel.
         */
-       if (devc->current_channel == devc->enabled_channels) {
-               packet.type = SR_DF_FRAME_BEGIN;
-               sr_session_send(sdi, &packet);
-       }
+       if (devc->current_channel == devc->enabled_channels)
+               std_session_send_df_frame_begin(sdi);
 
        meaning.channels = g_slist_append(NULL, ch);
        packet.payload = &analog;
@@ -709,8 +707,7 @@ SR_PRIV int lecroy_xstream_receive_data(int fd, int revents, void *cb_data)
                return TRUE;
        }
 
-       packet.type = SR_DF_FRAME_END;
-       sr_session_send(sdi, &packet);
+       std_session_send_df_frame_end(sdi);
 
        /*
         * End of frame was reached. Stop acquisition after the specified