Support for receiving isoch packets that vary in payload...

I am working on a driver for a custom device that sends data using
isochronous packets that vary in packet size. Typically the device starts by
sending out a stream of about 7600 packets that have only the CIP header (8
bytes total) then it starts sending out ‘data’ packets whose payload is 1072
bytes. These data packets may come mixed in with packets that have just the
CIP headers.

I am having problems receiving isochronous packets from this device. I have
a callback setup that should be called after receiving certain number of
bytes. This callback function is called twice (instead on once) anytime I
have different packet sizes mixed in the isoch. stream. The second ‘bogus’
call hangs my driver. On the other hand if I receive constant sized packets
(of any size) then the callback is called only once as expected and
everything works fine.

In the 1394.h file located inside “\WinDDK\2195\inc\ddk\wdm” directory,
there is a constant defined at line 1526 to be used as a flag while
allocating isochronous resource. The line reads:

#define RESOURCE_VARIABLE_ISOCH_PAYLOAD 0x00000080 // not implemented

This leads me to think that the Microsoft’s implementation of the 1394 bus
driver does not support (at least not yet) receiving isoch. packets that
vary in packet size.

Could someone in comment on my problem and point me to a solution?

Thank you very much.


Baskaran Subramaniam
Senior Software Engineer
Eastman Kodak Scientific Imaging Systems

> #define RESOURCE_VARIABLE_ISOCH_PAYLOAD 0x00000080 // not implemented

This is used only for hardware CIP stripping on TI’s LV23 chip (a subkind of
OHCI hardware).

This leads me to think that the Microsoft’s implementation of the 1394 bus
driver does not support (at least not yet) receiving isoch. packets that
vary in packet size.

IIRC yes. You must determine the maximum packet size and allocate the
receive buffers OK for this size. Also you must set “use packed-based” flag
on the isoch resource.
If some of the packets are lesser than the maximum size - then some space
will be wasted, but receive will be OK. DV driver uses this.

Max