]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/openbench-logic-sniffer/protocol.c
ols: Refactor, deduplicate logic packet code
[libsigrok.git] / src / hardware / openbench-logic-sniffer / protocol.c
index 0a2bc4dd60b999903a2963ce9ebff6fdc4504dcd..0e7ebd7939d966e0e57a9c23583ac3ba430fef6e 100644 (file)
@@ -30,7 +30,7 @@ SR_PRIV int send_shortcommand(struct sr_serial_dev_inst *serial,
        if (serial_write_blocking(serial, buf, 1, serial_timeout(serial, 1)) != 1)
                return SR_ERR;
 
-       if (serial_drain(serial) != 0)
+       if (serial_drain(serial) != SR_OK)
                return SR_ERR;
 
        return SR_OK;
@@ -51,7 +51,7 @@ SR_PRIV int send_longcommand(struct sr_serial_dev_inst *serial,
        if (serial_write_blocking(serial, buf, 5, serial_timeout(serial, 1)) != 5)
                return SR_ERR;
 
-       if (serial_drain(serial) != 0)
+       if (serial_drain(serial) != SR_OK)
                return SR_ERR;
 
        return SR_OK;
@@ -509,25 +509,19 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data)
 
                        /* Send the trigger. */
                        std_session_send_df_trigger(sdi);
-
-                       /* Send post-trigger samples. */
-                       packet.type = SR_DF_LOGIC;
-                       packet.payload = &logic;
-                       logic.length = (devc->num_samples * 4) - (devc->trigger_at_smpl * 4);
-                       logic.unitsize = 4;
-                       logic.data = devc->raw_sample_buf + devc->trigger_at_smpl * 4 +
-                               (devc->limit_samples - devc->num_samples) * 4;
-                       sr_session_send(sdi, &packet);
-               } else {
-                       /* no trigger was used */
-                       packet.type = SR_DF_LOGIC;
-                       packet.payload = &logic;
-                       logic.length = devc->num_samples * 4;
-                       logic.unitsize = 4;
-                       logic.data = devc->raw_sample_buf +
-                               (devc->limit_samples - devc->num_samples) * 4;
-                       sr_session_send(sdi, &packet);
                }
+
+               /* Send post-trigger / all captured samples. */
+               int num_pre_trigger_samples = devc->trigger_at_smpl == OLS_NO_TRIGGER
+                       ? 0 : devc->trigger_at_smpl;
+               packet.type = SR_DF_LOGIC;
+               packet.payload = &logic;
+               logic.length = (devc->num_samples - num_pre_trigger_samples) * 4;
+               logic.unitsize = 4;
+               logic.data = devc->raw_sample_buf + (num_pre_trigger_samples +
+                       devc->limit_samples - devc->num_samples) * 4;
+               sr_session_send(sdi, &packet);
+
                g_free(devc->raw_sample_buf);
 
                serial_flush(serial);