-
Notifications
You must be signed in to change notification settings - Fork 79
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add module for NXP PN7160 NFC chip as token provider (#951)
* Add module for PN7160 NFC reader Signed-off-by: Christoph Burandt <christoph.burandt@pionix.de> * Refactor Code to meet criteria of PR discussion: Signed-off-by: Christoph Burandt <christoph.burandt@pionix.de> * Add debug config option and log token discovery only in debug mode Signed-off-by: Christoph Burandt <christoph.burandt@pionix.de> * Set configuration file search path at runtime Signed-off-by: Christoph Burandt <christoph.burandt@pionix.de> --------- Signed-off-by: Christoph Burandt <christoph.burandt@pionix.de> Signed-off-by: cburandt <christoph.burandt@pionix.de>
- Loading branch information
Showing
15 changed files
with
803 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# | ||
# AUTO GENERATED - MARKED REGIONS WILL BE KEPT | ||
# template version 3 | ||
# | ||
|
||
# module setup: | ||
# - ${MODULE_NAME}: module name | ||
ev_setup_cpp_module() | ||
|
||
# ev@bcc62523-e22b-41d7-ba2f-825b493a3c97:v1 | ||
|
||
target_include_directories(${MODULE_NAME} | ||
PRIVATE | ||
"common" | ||
) | ||
|
||
target_sources(${MODULE_NAME} | ||
PRIVATE | ||
"main/libnfc_handler.cpp" | ||
) | ||
|
||
target_link_libraries(${MODULE_NAME} | ||
PRIVATE | ||
"libnfc_nci" | ||
) | ||
# ev@bcc62523-e22b-41d7-ba2f-825b493a3c97:v1 | ||
|
||
target_sources(${MODULE_NAME} | ||
PRIVATE | ||
"main/auth_token_providerImpl.cpp" | ||
) | ||
|
||
# ev@c55432ab-152c-45a9-9d2e-7281d50c69c3:v1 | ||
|
||
install(FILES | ||
"libnfc-nci_config/libnfc-nxp.conf" | ||
"libnfc-nci_config/libnfc-nci.conf" | ||
DESTINATION | ||
"${CMAKE_INSTALL_SYSCONFDIR}/everest/libnfc_config/") | ||
|
||
# ev@c55432ab-152c-45a9-9d2e-7281d50c69c3:v1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// Copyright 2022 - 2024 Pionix GmbH and Contributors to EVerest | ||
#include "PN7160TokenProvider.hpp" | ||
|
||
namespace module { | ||
|
||
void PN7160TokenProvider::init() { | ||
invoke_init(*p_main); | ||
} | ||
|
||
void PN7160TokenProvider::ready() { | ||
invoke_ready(*p_main); | ||
} | ||
|
||
} // namespace module |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// SPDX-License-Identifier: Apache-2.0 | ||
// Copyright Pionix GmbH and Contributors to EVerest | ||
#ifndef PN7160TOKEN_PROVIDER_HPP | ||
#define PN7160TOKEN_PROVIDER_HPP | ||
|
||
// | ||
// AUTO GENERATED - MARKED REGIONS WILL BE KEPT | ||
// template version 2 | ||
// | ||
|
||
#include "ld-ev.hpp" | ||
|
||
// headers for provided interface implementations | ||
#include <generated/interfaces/auth_token_provider/Implementation.hpp> | ||
|
||
// ev@4bf81b14-a215-475c-a1d3-0a484ae48918:v1 | ||
// insert your custom include headers here | ||
// ev@4bf81b14-a215-475c-a1d3-0a484ae48918:v1 | ||
|
||
namespace module { | ||
|
||
struct Conf {}; | ||
|
||
class PN7160TokenProvider : public Everest::ModuleBase { | ||
public: | ||
PN7160TokenProvider() = delete; | ||
PN7160TokenProvider(const ModuleInfo& info, std::unique_ptr<auth_token_providerImplBase> p_main, Conf& config) : | ||
ModuleBase(info), p_main(std::move(p_main)), config(config){}; | ||
|
||
const std::unique_ptr<auth_token_providerImplBase> p_main; | ||
const Conf& config; | ||
|
||
// ev@1fce4c5e-0ab8-41bb-90f7-14277703d2ac:v1 | ||
// insert your public definitions here | ||
// ev@1fce4c5e-0ab8-41bb-90f7-14277703d2ac:v1 | ||
|
||
protected: | ||
// ev@4714b2ab-a24f-4b95-ab81-36439e1478de:v1 | ||
// insert your protected definitions here | ||
// ev@4714b2ab-a24f-4b95-ab81-36439e1478de:v1 | ||
|
||
private: | ||
friend class LdEverest; | ||
void init(); | ||
void ready(); | ||
|
||
// ev@211cfdbe-f69a-4cd6-a4ec-f8aaa3d1b6c8:v1 | ||
// insert your private definitions here | ||
// ev@211cfdbe-f69a-4cd6-a4ec-f8aaa3d1b6c8:v1 | ||
}; | ||
|
||
// ev@087e516b-124c-48df-94fb-109508c7cda9:v1 | ||
// insert other definitions here | ||
// ev@087e516b-124c-48df-94fb-109508c7cda9:v1 | ||
|
||
} // namespace module | ||
|
||
#endif // PN7160TOKEN_PROVIDER_HPP |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
.. _everest_modules_handwritten_PN7160TokenProvider: | ||
|
||
******************* | ||
PN7160TokenProvider | ||
******************* | ||
|
||
This module provides authentication tokens obtained from RFID cards via the NXP PN7160 NFC chip. | ||
|
||
It uses a modified *libnfc-nci* as external dependency to interface the chip via I²C or SPI, either from user space or via a kernel module. | ||
|
||
Hardware Interface Configuration | ||
================================ | ||
|
||
Configuration of the hardware interface is possible at runtime. | ||
The module installs two configuration files: | ||
|
||
* ``libnfc-nci_config/libnfc-nci.conf``: define NFC options | ||
* ``libnfc-nci_config/libnfc-nxp.conf``: choose the hardware interface (kernel module vs. userspace; I²C vs. SPI, ...) | ||
|
||
Module Configuration | ||
==================== | ||
|
||
The EVerest module can be adjusted in its behaviour as follows: | ||
|
||
* ``token_debounce_interval_ms``: Publish tokens in minimum intervall of this timespan in order not to flood subscribers. | ||
* ``disable_nfc_rfid``: Allows to load the module without actually initializing the hardware. | ||
|
121 changes: 121 additions & 0 deletions
121
modules/PN7160TokenProvider/libnfc-nci_config/libnfc-nci.conf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
############################################################################## | ||
# | ||
# Note by PIONIX GmbH | ||
# =================== | ||
# | ||
# Original file distributed NXP | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
# | ||
############################################################################## | ||
|
||
########################### PN7160 libnfc-nci.conf ############################ | ||
|
||
############################################################################### | ||
# Application options | ||
APPL_TRACE_LEVEL=0xFF | ||
PROTOCOL_TRACE_LEVEL=0xFFFFFFFF | ||
|
||
NFC_DEBUG_ENABLED=0x00 | ||
|
||
############################################################################### | ||
# File used for NFA storage | ||
NFA_STORAGE="/data/vendor/nfc" | ||
|
||
############################################################################### | ||
# Forcing HOST to listen for a selected protocol | ||
# 0x00 : Disable Host Listen | ||
# 0x01 : Enable Host to Listen (A) for ISO-DEP tech A | ||
# 0x02 : Enable Host to Listen (B) for ISO-DEP tech B | ||
# 0x04 : Enable Host to Listen (F) for T3T Tag Type Protocol tech F | ||
# 0x07 : Enable Host to Listen (ABF)for ISO-DEP tech AB & T3T Tag Type Protocol tech F | ||
HOST_LISTEN_TECH_MASK=0x07 | ||
|
||
############################################################################### | ||
# When screen is turned off, specify the desired power state of the controller. | ||
# 0: power-off-sleep state; DEFAULT | ||
# 1: full-power state | ||
# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used) | ||
SCREEN_OFF_POWER_STATE=1 | ||
|
||
############################################################################### | ||
# NCI Hal Module name | ||
NCI_HAL_MODULE="nfc_nci.pn54x" | ||
|
||
############################################################################### | ||
# Force tag polling for the following technology(s). | ||
# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h. | ||
# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B | | ||
# NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 | | ||
# NFA_TECHNOLOGY_MASK_KOVIO | NFA_TECHNOLOGY_MASK_A_ACTIVE | | ||
# NFA_TECHNOLOGY_MASK_F_ACTIVE | ||
# | ||
# Notable bits: | ||
# NFA_TECHNOLOGY_MASK_A 0x01 /* NFC Technology A */ | ||
# NFA_TECHNOLOGY_MASK_B 0x02 /* NFC Technology B */ | ||
# NFA_TECHNOLOGY_MASK_F 0x04 /* NFC Technology F */ | ||
# NFA_TECHNOLOGY_MASK_ISO15693 0x08 /* Proprietary Technology */ | ||
# NFA_TECHNOLOGY_MASK_KOVIO 0x20 /* Proprietary Technology */ | ||
# NFA_TECHNOLOGY_MASK_A_ACTIVE 0x40 /* NFC Technology A active mode */ | ||
# NFA_TECHNOLOGY_MASK_F_ACTIVE 0x80 /* NFC Technology F active mode */ | ||
# This flag when set to zero will disable Reader mode. | ||
POLLING_TECH_MASK=0xCF | ||
|
||
############################################################################### | ||
# Force P2P to only listen for the following technology(s). | ||
# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h. | ||
# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F | | ||
# NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE | ||
# | ||
# Notable bits: | ||
# NFA_TECHNOLOGY_MASK_A 0x01 /* NFC Technology A */ | ||
# NFA_TECHNOLOGY_MASK_F 0x04 /* NFC Technology F */ | ||
# NFA_TECHNOLOGY_MASK_A_ACTIVE 0x40 /* NFC Technology A active mode */ | ||
# NFA_TECHNOLOGY_MASK_F_ACTIVE 0x80 /* NFC Technology F active mode */ | ||
# This flag when set to zero will disable P2P Listen mode. | ||
P2P_LISTEN_TECH_MASK=0xC5 | ||
|
||
PRESERVE_STORAGE=0x01 | ||
|
||
############################################################################### | ||
# AID_MATCHING constants | ||
# AID_MATCHING_EXACT_ONLY 0x00 | ||
# AID_MATCHING_EXACT_OR_PREFIX 0x01 | ||
# AID_MATCHING_PREFIX_ONLY 0x02 | ||
# AID_MATCHING_EXACT_OR_SUBSET_OR_PREFIX 0x03 | ||
AID_MATCHING_MODE=0x03 | ||
|
||
############################################################################### | ||
# Override the stack default for NFA_EE_MAX_EE_SUPPORTED set in nfc_target.h. | ||
# Maximum EE supported number | ||
NFA_MAX_EE_SUPPORTED=0x01 | ||
|
||
############################################################################### | ||
#Set the OffHost AID supported power state: | ||
OFFHOST_AID_ROUTE_PWR_STATE=0x3B | ||
|
||
############################################################################### | ||
# Vendor Specific Proprietary Protocol & Discovery Configuration | ||
# Set to 0xFF if unsupported | ||
# byte[0] NCI_PROTOCOL_18092_ACTIVE | ||
# byte[1] NCI_PROTOCOL_B_PRIME | ||
# byte[2] NCI_PROTOCOL_DUAL | ||
# byte[3] NCI_PROTOCOL_15693 | ||
# byte[4] NCI_PROTOCOL_KOVIO | ||
# byte[5] NCI_PROTOCOL_MIFARE | ||
# byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO | ||
# byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME | ||
# byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME | ||
NFA_PROPRIETARY_CFG={05:FF:FF:06:81:80:70:FF:FF} | ||
|
||
############################################################################### |
Oops, something went wrong.