]> sigrok.org Git - libsigrok.git/blobdiff - src/session_driver.c
scpi-pps: Support for the EEZ PSU series
[libsigrok.git] / src / session_driver.c
index c6af3b6dc04342fe136080f0315fef3ddf275696..79383cc719fb011aab5758b1ad471d64324abb0b 100644 (file)
@@ -72,7 +72,7 @@ static gboolean stream_session_data(struct sr_dev_inst *sdi)
        struct sr_analog_spec spec;
        struct zip_stat zs;
        int ret, got_data;
-       char capturefile[16];
+       char capturefile[128];
        void *buf;
 
        got_data = FALSE;
@@ -150,8 +150,8 @@ static gboolean stream_session_data(struct sr_dev_inst *sdi)
                ret = zip_fread(vdev->capfile, buf, CHUNKSIZE);
 
        if (ret > 0) {
-               got_data = TRUE;
                if (vdev->cur_analog_channel != 0) {
+                       got_data = TRUE;
                        packet.type = SR_DF_ANALOG;
                        packet.payload = &analog;
                        /* TODO: Use proper 'digits' value for this device (and its modes). */
@@ -164,7 +164,8 @@ static gboolean stream_session_data(struct sr_dev_inst *sdi)
                        analog.meaning->unit = SR_UNIT_VOLT;
                        analog.meaning->mqflags = SR_MQFLAG_DC;
                        analog.data = (float *) buf;
-               } else {
+               } else if (vdev->unitsize) {
+                       got_data = TRUE;
                        if (ret % vdev->unitsize != 0)
                                sr_warn("Read size %d not a multiple of the"
                                        " unit size %d.", ret, vdev->unitsize);
@@ -173,9 +174,17 @@ static gboolean stream_session_data(struct sr_dev_inst *sdi)
                        logic.length = ret;
                        logic.unitsize = vdev->unitsize;
                        logic.data = buf;
+               } else {
+                       /*
+                        * Neither analog data, nor logic which has
+                        * unitsize, must be an unexpected API use.
+                        */
+                       sr_warn("Neither analog nor logic data. Ignoring.");
+               }
+               if (got_data) {
+                       vdev->bytes_read += ret;
+                       sr_session_send(sdi, &packet);
                }
-               vdev->bytes_read += ret;
-               sr_session_send(sdi, &packet);
        } else {
                /* done with this capture file */
                zip_fclose(vdev->capfile);
@@ -319,7 +328,7 @@ static int config_set(uint32_t key, GVariant *data,
 static int config_list(uint32_t key, GVariant **data,
        const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
 {
-       return STD_CONFIG_LIST(key, data, sdi, cg, NULL, NULL, devopts);
+       return STD_CONFIG_LIST(key, data, sdi, cg, NO_OPTS, NO_OPTS, devopts);
 }
 
 static int dev_acquisition_start(const struct sr_dev_inst *sdi)