summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ddennedy 2006-03-04 01:17:46 +0000
committerGravatar ddennedy 2006-03-04 01:17:46 +0000
commit96aaa4ca65d7ff51089ebb87dbb3303737735e9d (patch)
treeb8aadb65c7e80d0c7d32db62cf091d0e9a652c08
parentFix raw1394_iso_xmit_write() to work with recent kernel change to raw1394 (diff)
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 {
'> git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@109 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-07-13Updates from 0.10.0 release.Gravatar bencollins 4-5/+14 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@108 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-23add libtoolize to bootstrapGravatar ddennedy 1-1/+10 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@107 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-21added Dan Maas' rawiso docsGravatar ddennedy 1-32/+295 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@106 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-04-07new_handle_on_port() error path fix from Jim RadfordGravatar dmaas 1-1/+3 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@105 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@104 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@103 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@102 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@101 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@100 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@99 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@98 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@97 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; ↵Gravatar anonymous 3-124/+48 brought kernel-raw1394.h back in sync with the kernel version git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@96 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 - changed return type of rawiso xmit/recv handlers from int to enum raw1394_iso_disposition - added an ioctl (RAW1394_ISO_QUEUE_ACTIVITY) to force an ISO_ACTIVITY event into the queue. This is needed for handling RAW1394_ISO_DEFER, to kick us out of the next read() instead of sleeping forever. - removed references to "8-byte" isochronous header - this is an OHCI-specific implementation detail git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@95 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@94 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@93 53a565d1-3bb7-0310-b661-cf11e63c67ab