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 Symbian platform 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 Symbian platform 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:
are identical for both raw "IrMUX" and reliable "IrTinyTP".