Once a device has been discovered and a socket connection established, data transfer may begin.
Data may be transferred as either a non-urgent (unexpedited) transmission or as an urgent (expedited) transmission.
The former is the default (i.e. RSocket::Read()
and
RSocket::Write()
) and should be used for beaming purposes. If an
expedited packet send is required, then an RSocket::Send()
with
the KExpeditedData
flag set must be queued. An urgent send is
placed at the head of the send queue and is processed first from the receive
queue of the remote machine.
The two EPOC IrDA protocol sets: "IrMUX" and "IrTinyTP", treat data transmission differently.
The "IrMUX" protocol set sends data as raw LM-MUX packets which does not provide any guarantee of the data being correctly received by the remote client application. By waiting for successful completion on each data write, however, the application programmer can take advantage of the socket server's flow control mechanism which blocks off completion of the write until the IrDA protocol stack can accept further send data. In this way, the EPOC IrMUX implementation at least ensures that data gets sent out at a smooth rate even if there is no guarantee of it being remotely consumed.
In order to provide a reliable transport layer for IrDA data
transmissions, it is necessary to load the "IrTinyTP" protocol set. This
enables the programmer to send IrMUX data over IrTinyTP which flow controls off
the sender if the remote side does not consume data rapidly enough. Once the
relevant protocol set is loaded, however, the RSocket
functions
for reading and writing data:
RSocket::Write()
RSocket::Send()
RSocket::Recv()
RSocket::RecvOneOrMore()
RSocket::Read()
.
are identical for both raw "IrMUX" and reliable "IrTinyTP".