Reading and writing data

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:

  • RSocket::Write()

  • RSocket::Send()

  • RSocket::Recv()

  • RSocket::RecvOneOrMore()

  • RSocket::Read().

are identical for both raw "IrMUX" and reliable "IrTinyTP".