- revents = revents;
-
- z = read(fd, &c, BUFSIZE);
- if (z > 0) {
- packet.type = DF_LOGIC;
- packet.length = z;
- packet.unitsize = 1;
- packet.payload = c;
- session_bus(user_data, &packet);
+ (void)fd;
+ (void)revents;
+
+ do {
+ g_io_channel_read_chars(devc->channels[0],
+ (gchar *)&c, BUFSIZE, &z, NULL);
+
+ if (z > 0) {
+ packet.type = SR_DF_LOGIC;
+ packet.payload = &logic;
+ logic.length = z;
+ logic.unitsize = 1;
+ logic.data = c;
+ sr_session_send(devc->session_dev_id, &packet);
+ samples_received += z;
+ }
+ } while (z > 0);
+
+ if (!thread_running && z <= 0) {
+ /* Make sure we don't receive more packets. */
+ g_io_channel_shutdown(devc->channels[0], FALSE, NULL);
+
+ /* Send last packet. */
+ packet.type = SR_DF_END;
+ sr_session_send(devc->session_dev_id, &packet);
+
+ return FALSE;