@startuml class NFCController { +NFCController(NFCControllerDriver* driver, events::EventQueue* queue) +void set_delegate(NFCController::Delegate* delegate) +nfc_rf_protocols_bitmask_t get_supported_rf_protocols() const +nfc_err_t initialize() +nfc_err_t configure_rf_protocols(nfc_rf_protocols_bitmask_t rf_protocols) +nfc_err_t start_discovery() +nfc_err_t cancel_discovery() } abstract class NFCController::Delegate { +{abstract} void on_discovery_terminated(nfc_discovery_terminated_reason_t reason) +{abstract} void on_nfc_target_discovered(const mbed::SharedPtr& target) +{abstract} void on_nfc_initiator_discovered(const mbed::SharedPtr& initiator) } abstract class NFCControllerDriver { +void set_delegate(Delegate* delegate) +{abstract} transceiver_t* initialize(scheduler_timer_t* pTimer) +{abstract} void get_supported_nfc_techs(nfc_tech_t* initiator, nfc_tech_t* target) const } abstract class NFCControllerDriver::Delegate { +{abstract} void on_hw_interrupt() } NFCController o-- NFCController::Delegate NFCController o-- NFCControllerDriver NFCControllerDriver o-- NFCControllerDriver::Delegate NFCControllerDriver::Delegate <-- NFCController @enduml