unleashed-firmware/lib/nfc/protocols/nfc_generic_event.h
gornekich d92b0a82cc
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.

Starring:

- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer

Supporting roles:

- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance

Special thanks:

@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 12:08:09 +09:00

80 lines
2.6 KiB
C

/**
* @file nfc_generic_event.h
* @brief Generic Nfc stack event definitions.
*
* Events are the main way of passing information about, well, various events
* that occur across the Nfc protocol stack.
*
* In order to subscribe to events from a certain instance, the user code must call
* its corresponding start() function while providing the appropriate callback.
* During this call, an additional context pointer can be provided, which will be passed
* to the context parameter at the time of the callback execution.
*
* For additional information on how events are passed around and processed, see protocol-specific
* poller and listener implementations found in the respectively named subfolders.
*
*/
#pragma once
#include "nfc_protocol.h"
#include <nfc/nfc.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Generic Nfc instance type.
*
* Must be cast to a concrete type before use.
* Depending on the context, a pointer of this type
* may point to an object of the following types:
* - Nfc type,
* - Concrete poller type,
* - Concrete listener type.
*/
typedef void NfcGenericInstance;
/**
* @brief Generic Nfc event data type.
*
* Must be cast to a concrete type before use.
* Usually, it will be the protocol-specific event type.
*/
typedef void NfcGenericEventData;
/**
* @brief Generic Nfc event type.
*
* A generic Nfc event contains a protocol identifier, can be used to determine
* the remaing fields' type.
*
* If the value of the protocol field is NfcProtocolInvalid, then it means that
* the event was emitted from an Nfc instance, otherwise it originated from
* a concrete poller or listener instance.
*
* The event_data field is protocol-specific and should be cast to the appropriate type before use.
*/
typedef struct {
NfcProtocol protocol; /**< Protocol identifier of the instance that produced the event. */
NfcGenericInstance*
instance; /**< Pointer to the protocol-specific instance that produced the event. */
NfcGenericEventData* event_data; /**< Pointer to the protocol-specific event. */
} NfcGenericEvent;
/**
* @brief Generic Nfc event callback type.
*
* A function of this type must be passed as the callback parameter upon start
* of a poller, listener or Nfc instance.
*
* @param [in] event Nfc generic event, passed by value, complete with protocol type and data.
* @param [in,out] context pointer to the user-specific context (set when starting a poller/listener instance).
* @returns the command which the event producer must execute.
*/
typedef NfcCommand (*NfcGenericCallback)(NfcGenericEvent event, void* context);
#ifdef __cplusplus
}
#endif