]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/yokogawa-dlm/protocol.c
rigol-ds: improve robustness in samplerate getting code path
[libsigrok.git] / src / hardware / yokogawa-dlm / protocol.c
index cc822eb462feb1f0fbf8ddaafa901832341a22d4..d2c51cdac6d4f5ebfebaf61c02c66dfef262d9cb 100644 (file)
@@ -777,9 +777,13 @@ SR_PRIV int dlm_device_init(struct sr_dev_inst *sdi, int model_index)
 
        devc->analog_groups = g_malloc0(sizeof(struct sr_channel_group*) *
                        scope_models[model_index].analog_channels);
-
        devc->digital_groups = g_malloc0(sizeof(struct sr_channel_group*) *
                        scope_models[model_index].pods);
+       if (!devc->analog_groups || !devc->digital_groups) {
+               g_free(devc->analog_groups);
+               g_free(devc->digital_groups);
+               return SR_ERR_MALLOC;
+       }
 
        /* Add analog channels, each in its own group. */
        for (i = 0; i < scope_models[model_index].analog_channels; i++) {
@@ -1014,7 +1018,6 @@ SR_PRIV int dlm_data_receive(int fd, int revents, void *cb_data)
        struct scope_state *model_state;
        struct dev_context *devc;
        struct sr_channel *ch;
-       struct sr_datafeed_packet packet;
        int chunk_len, num_bytes;
        static GArray *data = NULL;
 
@@ -1061,10 +1064,8 @@ SR_PRIV int dlm_data_receive(int fd, int revents, void *cb_data)
        devc->data_pending = FALSE;
 
        /* Signal the beginning of a new frame if this is the first 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);
 
        if (dlm_block_data_header_process(data, &num_bytes) != SR_OK) {
                sr_err("Encountered malformed block data header.");
@@ -1107,8 +1108,7 @@ SR_PRIV int dlm_data_receive(int fd, int revents, void *cb_data)
         * and set the next enabled channel. Then, request its data.
         */
        if (!devc->current_channel->next) {
-               packet.type = SR_DF_FRAME_END;
-               sr_session_send(sdi, &packet);
+               std_session_send_df_frame_end(sdi);
                devc->current_channel = devc->enabled_channels;
 
                /*