aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorddennedy <ddennedy@53a565d1-3bb7-0310-b661-cf11e63c67ab>2006-03-04 01:17:46 +0000
committerddennedy <ddennedy@53a565d1-3bb7-0310-b661-cf11e63c67ab>2006-03-04 01:17:46 +0000
commit96aaa4ca65d7ff51089ebb87dbb3303737735e9d (patch)
treeb8aadb65c7e80d0c7d32db62cf091d0e9a652c08
parenta51052f41b164c285f91f4b48724e1fc2d125637 (diff)
downloadlibraw1394-96aaa4ca65d7ff51089ebb87dbb3303737735e9d.tar.gz
Added a new callback response for iso_xmit handlers: RAW1394_ISO_AGAIN.
This would be returned when the callback doesn't have enough data to create a complete packet. This can occur when the xmit buffers are bigger than the buffers supplying the data. It is not nescessarily an error, because there are enough packets in the xmit buffer. This response could give the data supplyer more time to fill the intermediate buffer without losing any packets. Signed-off-by: Pieter Palmers <pieterp@joow.be> Signed-off-by: Dan Dennedy <dan@dennedy.org> git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@161 53a565d1-3bb7-0310-b661-cf11e63c67ab
-rw-r--r--src/iso.c8
-rw-r--r--src/raw1394.h5
2 files changed, 13 insertions, 0 deletions
diff --git a/src/iso.c b/src/iso.c
index 76ba13a..0d5aa9f 100644
--- a/src/iso.c
+++ b/src/iso.c
@@ -320,6 +320,14 @@ static int _raw1394_iso_xmit_queue_packets(raw1394handle_t handle)
if(ioctl(handle->fd, RAW1394_IOC_ISO_QUEUE_ACTIVITY, 0))
goto out_produce;
break;
+ } else if(disp == RAW1394_ISO_AGAIN) {
+ /* the last packet was not ready, decrement counter */
+ packets.n_packets--;
+
+ /* queue an event so that we don't hang in the next read() */
+ if(ioctl(handle->fd, RAW1394_IOC_ISO_QUEUE_ACTIVITY, 0))
+ goto out_produce;
+ break;
} else if(disp == RAW1394_ISO_STOP) {
stop_sync = 1;
break;
diff --git a/src/raw1394.h b/src/raw1394.h
index 833915f..4f8fa4b 100644
--- a/src/raw1394.h
+++ b/src/raw1394.h
@@ -106,6 +106,11 @@ enum raw1394_iso_disposition {
/* (transmission only) - like ISO_STOP, but don't wait for the buffer to empty */
RAW1394_ISO_STOP_NOSYNC = 4,
+
+ /* (transmission only) - use this if the data you need for the packet was not ready yet
+ * The packet queueing will retry at a later point
+ */
+ RAW1394_ISO_AGAIN = 5,
};
enum raw1394_modify_mode {