]> sigrok.org Git - libsigrok.git/blobdiff - session_driver.c
session: Always read a whole number of samples.
[libsigrok.git] / session_driver.c
index a7ecce6b80674e544a0516563ce164d7a6c9160c..69a53c6867102903fb22bee900b3eec652b348c9 100644 (file)
@@ -127,8 +127,12 @@ static int receive_data(int fd, int revents, void *cb_data)
                        return FALSE;
                }
 
-               ret = zip_fread(vdev->capfile, buf, CHUNKSIZE);
+               ret = zip_fread(vdev->capfile, buf,
+                               CHUNKSIZE / vdev->unitsize * vdev->unitsize);
                if (ret > 0) {
+                       if (ret % vdev->unitsize != 0)
+                               sr_warn("Read size %d not a multiple of the"
+                                       " unit size %d.", ret, vdev->unitsize);
                        got_data = TRUE;
                        packet.type = SR_DF_LOGIC;
                        packet.payload = &logic;
@@ -173,7 +177,7 @@ static int init(struct sr_context *sr_ctx)
        return SR_OK;
 }
 
-static int cleanup(void)
+static int dev_clear(void)
 {
        GSList *l;
 
@@ -310,10 +314,10 @@ SR_PRIV struct sr_dev_driver session_driver = {
        .longname = "Session-emulating driver",
        .api_version = 1,
        .init = init,
-       .cleanup = cleanup,
+       .cleanup = dev_clear,
        .scan = NULL,
        .dev_list = NULL,
-       .dev_clear = NULL,
+       .dev_clear = dev_clear,
        .config_get = config_get,
        .config_set = config_set,
        .config_list = config_list,