Program Listing for File tag_responder.hpp

Return to documentation for file (libspookyaction/include/desfire/tag_responder.hpp)

//
// Created by spak on 1/19/23.
//

#ifndef DESFIRE_ESP32_TAG_RESPONDER_HPP
#define DESFIRE_ESP32_TAG_RESPONDER_HPP

#include <desfire/tag.hpp>
#include <pn532/desfire_pcd.hpp>
#include <pn532/scanner.hpp>

namespace desfire {
    struct tag_responder : virtual pn532::scanner_responder {
        [[nodiscard]] inline std::vector<pn532::target_type> get_scan_target_types(pn532::scanner &) const override;

        inline pn532::post_interaction interact(pn532::scanner &scanner, pn532::scanned_target const &target) override;

        virtual pn532::post_interaction interact_with_tag(tag &tag) = 0;
    };
}// namespace desfire

namespace desfire {

    std::vector<pn532::target_type> tag_responder::get_scan_target_types(pn532::scanner &) const {
        return {pn532::target_type::passive_106kbps_iso_iec_14443_4_typea};
    }

    pn532::post_interaction tag_responder::interact(pn532::scanner &scanner, pn532::scanned_target const &target) {
        auto tag = std::make_shared<::desfire::tag>(scanner.ctrl().shared_from_this(), target.index);
        return interact_with_tag(*tag);
    }
}// namespace desfire

#endif//DESFIRE_ESP32_TAG_RESPONDER_HPP