Purpose:
Get received data (packet).
Parameter:
IN: -
OUT: - receive buffer (described below)
The receive buffer consists of the following (after the ReadFile-request
returns successfully):
item | size | note |
Node-ID of transmitter(SID) | 1 byte | node-id of the transmitter |
Node-ID of receiver(DID) | 1 byte | 0, if packet is broadcast message, otherwise node-id of the receiver |
Reserved | 4 byte | not yet in use, ignore |
Data | 1-253 byteor 257-508 byte | transferred raw data |
Comment:
a buffer of at least 514 bytes must be handed to ReadFile/ReadFileEx!
ReadFile returns the number of bytes returned in the receive buffer,
not the number of databytes! If you want to get the number of received
databytes, subtract 6.
Possible errors (see also Error codes):
E_FARC_INVALID_HANDLE
E_FARC_BAD_PACKET_SIZE
E_FARC_EXCESSIVE_RECON
E_FARC_NOT_INITED
E_FARC_INITIALIZING
E_FARC_USAGE_EXPIRED
E_FARC_PENDING
E_FARC_ABORT
Example:
Note, that the following example is only a fragment. It is recommended,
that the driver is opened in asynchronous mode and a IOCTL_FARC_INIT was
successful performed.
OVERLAPPED overlapped;
DWORD read, err;
unsigned char packet[514];
BOOL ret;
overlapped.Offset = 0;
overlapped.OffsetHigh = 0;
overlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
...
length = 514; // buffersize
514 bytes
ret = ReadFile(drvhandle, packet,
length, &read, &overlapped);
if (!ret)
{
err = GetLastError();
if (err == E_FARC_PENDING)
{
ret
= GetOverlappedResult(drvhandle, &overlapped, &read, TRUE);
if
(!ret)
{
err = GetLastError();
// do errorhandling
here
}
else
{
// OK, ReadFile finished, with ‘read’ bytes in buffer
// read-6 = number of received databytes
}
}
else
{
//
other error occured, perhaps wrong handle
}
}
...