2.5. Isochronous Transmissions

Nodes can allocate a channel and bandwidth for isochronous transmissions at the iso manager to broadcast timing critical data (e.g. multimedia streams) on the bus. However these transmissions are unreliable, there is no guarantee that every packet reaches the intended recipients (the software and hardware involved also take iso packets a bit more lightly). After a cycle start packet, the isochronous cycle begins and every node can transmit iso packets, however only one packet per channel is allowed. As soon as a gap of a certain length appears (i.e. no node sends anymore), the iso cycle ends and the rest of the time until the next cycle start is reserved for asynchronous packets.

The channel register on the iso manager consists of 64 bits, each of which signifies one channel. A channel can be allocated by any node by doing a compare-swap lock request with the new bitmask. Likewise the bandwidth can be allocated by doing a lock request with the new value. The bandwidth register contains the remaining time available for every iso cycle. Since you allocate time, the maximum data you are allowed to put into an iso packet depends on the speed you will send at.

On every bus reset, the resource registers are resetted to their initial values (all channels free, all bandwidth minus some amount set aside for asynchronous communication available), this has to happen since the isochronous manager may have moved to another node. Isochronous transmissions may continue with the old allocations for 1000ms. During that time, the nodes have to reallocate their resources and no new allocations are allowed to occur. Only after this period new allocations may be done, this avoids nodes losing their allocations over a bus reset.

libraw1394 does not provide special functions for allocating iso resources nor does it clean up after programs when they exit. Protocols exist that require the first node to use some resources to allocate it and then leave it for the last node using it to deallocate it. This may be different nodes, so automatic behaviour would be very undesirable in these cases.