|
|
|
@ -178,3 +178,36 @@ ANY_GET_PARAMETER to the reader A gate to get information on the target |
|
|
|
|
that was discovered). |
|
|
|
|
|
|
|
|
|
Typically, such an event will be propagated to NFC Core from MSGRXWQ context. |
|
|
|
|
|
|
|
|
|
Error management |
|
|
|
|
---------------- |
|
|
|
|
|
|
|
|
|
Errors that occur synchronously with the execution of an NFC Core request are |
|
|
|
|
simply returned as the execution result of the request. These are easy. |
|
|
|
|
|
|
|
|
|
Errors that occur asynchronously (e.g. in a background protocol handling thread) |
|
|
|
|
must be reported such that upper layers don't stay ignorant that something |
|
|
|
|
went wrong below and know that expected events will probably never happen. |
|
|
|
|
Handling of these errors is done as follows: |
|
|
|
|
|
|
|
|
|
- driver (pn544) fails to deliver an incoming frame: it stores the error such |
|
|
|
|
that any subsequent call to the driver will result in this error. Then it calls |
|
|
|
|
the standard nfc_shdlc_recv_frame() with a NULL argument to report the problem |
|
|
|
|
above. shdlc stores a EREMOTEIO sticky status, which will trigger SMW to |
|
|
|
|
report above in turn. |
|
|
|
|
|
|
|
|
|
- SMW is basically a background thread to handle incoming and outgoing shdlc |
|
|
|
|
frames. This thread will also check the shdlc sticky status and report to HCI |
|
|
|
|
when it discovers it is not able to run anymore because of an unrecoverable |
|
|
|
|
error that happened within shdlc or below. If the problem occurs during shdlc |
|
|
|
|
connection, the error is reported through the connect completion. |
|
|
|
|
|
|
|
|
|
- HCI: if an internal HCI error happens (frame is lost), or HCI is reported an |
|
|
|
|
error from a lower layer, HCI will either complete the currently executing |
|
|
|
|
command with that error, or notify NFC Core directly if no command is executing. |
|
|
|
|
|
|
|
|
|
- NFC Core: when NFC Core is notified of an error from below and polling is |
|
|
|
|
active, it will send a tag discovered event with an empty tag list to the user |
|
|
|
|
space to let it know that the poll operation will never be able to detect a tag. |
|
|
|
|
If polling is not active and the error was sticky, lower levels will return it |
|
|
|
|
at next invocation. |
|
|
|
|