Add support for getConfig() from NFC HAL 1.1
Test: Boots, Nfc initialized, Nfc enable/disable
Bug: 72080121
Change-Id: I13cf70d67bcddb0a6a0d5db143c789d0223ad804
(cherry picked from commit 6a09eef919906286b90ec33e9e1625f9c876067d)
diff --git a/src/adaptation/NfcAdaptation.cc b/src/adaptation/NfcAdaptation.cc
index 1431c55..3f6e2e6 100644
--- a/src/adaptation/NfcAdaptation.cc
+++ b/src/adaptation/NfcAdaptation.cc
@@ -23,10 +23,10 @@
#include <hwbinder/ProcessState.h>
#include "NfcAdaptation.h"
-
#include "android_logmsg.h"
#include "debug_nfcsnoop.h"
#include "nfa_api.h"
+#include "nfa_rw_api.h"
#include "nfc_config.h"
#include "nfc_int.h"
#include "nfca_version.h"
@@ -40,7 +40,9 @@
using android::hardware::Return;
using android::hardware::Void;
using android::hardware::nfc::V1_0::INfc;
+using android::hardware::nfc::V1_1::PresenceCheckAlgorithm;
using INfcV1_1 = android::hardware::nfc::V1_1::INfc;
+using NfcVendorConfig = android::hardware::nfc::V1_1::NfcConfig;
using android::hardware::nfc::V1_1::INfcClientCallback;
using android::hardware::hidl_vec;
@@ -172,6 +174,47 @@
return *mpInstance;
}
+void NfcAdaptation::GetVendorConfigs(
+ std::map<std::string, ConfigValue>& configMap) {
+ if (mHal_1_1) {
+ mHal_1_1->getConfig([&configMap](NfcVendorConfig config) {
+ std::vector<uint8_t> nfaPropCfg = {
+ config.nfaProprietaryCfg.protocol18092Active,
+ config.nfaProprietaryCfg.protocolBPrime,
+ config.nfaProprietaryCfg.protocolDual,
+ config.nfaProprietaryCfg.protocol15693,
+ config.nfaProprietaryCfg.protocolKovio,
+ config.nfaProprietaryCfg.protocolMifare,
+ config.nfaProprietaryCfg.discoveryPollKovio,
+ config.nfaProprietaryCfg.discoveryPollBPrime,
+ config.nfaProprietaryCfg.discoveryListenBPrime};
+ configMap.emplace(NAME_NFA_PROPRIETARY_CFG, ConfigValue(nfaPropCfg));
+ configMap.emplace(NAME_NFA_POLL_BAIL_OUT_MODE,
+ ConfigValue(config.nfaPollBailOutMode ? 1 : 0));
+ configMap.emplace(NAME_DEFAULT_OFFHOST_ROUTE,
+ ConfigValue(config.defaultOffHostRoute));
+ configMap.emplace(NAME_DEFAULT_NFCF_ROUTE,
+ ConfigValue(config.defaultOffHostRouteFelica));
+ configMap.emplace(NAME_DEFAULT_SYS_CODE_ROUTE,
+ ConfigValue(config.defaultSystemCodeRoute));
+ configMap.emplace(NAME_OFF_HOST_SIM_PIPE_ID,
+ ConfigValue(config.offHostSIMPipeId));
+ configMap.emplace(NAME_OFF_HOST_ESE_PIPE_ID,
+ ConfigValue(config.offHostESEPipeId));
+ configMap.emplace(NAME_ISO_DEP_MAX_TRANSCEIVE,
+ ConfigValue(config.maxIsoDepTransceiveLength));
+ /* For Backwards compatibility */
+ if (config.presenceCheckAlgorithm ==
+ PresenceCheckAlgorithm::ISO_DEP_NAK) {
+ configMap.emplace(NAME_PRESENCE_CHECK_ALGORITHM,
+ ConfigValue((uint32_t)NFA_RW_PRES_CHK_ISO_DEP_NAK));
+ } else {
+ configMap.emplace(NAME_PRESENCE_CHECK_ALGORITHM,
+ ConfigValue((uint32_t)config.presenceCheckAlgorithm));
+ }
+ });
+ }
+}
/*******************************************************************************
**
** Function: NfcAdaptation::Initialize()
diff --git a/utils/nfc_config.cc b/src/adaptation/nfc_config.cc
similarity index 88%
rename from utils/nfc_config.cc
rename to src/adaptation/nfc_config.cc
index 57ae044..96acfe4 100644
--- a/utils/nfc_config.cc
+++ b/src/adaptation/nfc_config.cc
@@ -14,6 +14,7 @@
* limitations under the License.
*/
#include "nfc_config.h"
+#include "NfcAdaptation.h"
#include <android-base/file.h>
#include <android-base/logging.h>
@@ -46,6 +47,13 @@
string config_path = findConfigPath();
CHECK(config_path != "");
config_.parseFromFile(config_path);
+ /* Read vendor specific configs */
+ NfcAdaptation& theInstance = NfcAdaptation::GetInstance();
+ std::map<std::string, ConfigValue> configMap;
+ theInstance.GetVendorConfigs(configMap);
+ for (auto config : configMap) {
+ config_.addConfig(config.first, config.second);
+ }
}
NfcConfig& NfcConfig::getInstance() {
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index 81ecfca..cf1054e 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -18,6 +18,7 @@
#pragma once
#include <pthread.h>
+#include "config.h"
#include "nfc_hal_api.h"
#include "nfc_target.h"
@@ -86,6 +87,7 @@
static NfcAdaptation& GetInstance();
tHAL_NFC_ENTRY* GetHalEntryFuncs();
void DownloadFirmware();
+ void GetVendorConfigs(std::map<std::string, ConfigValue>& configMap);
void Dump(int fd);
private:
diff --git a/utils/include/nfc_config.h b/src/include/nfc_config.h
similarity index 85%
rename from utils/include/nfc_config.h
rename to src/include/nfc_config.h
index db27f6f..b941ece 100644
--- a/utils/include/nfc_config.h
+++ b/src/include/nfc_config.h
@@ -20,25 +20,34 @@
#include <config.h>
+/* Configs from libnfc-nci.conf */
#define NAME_NFC_DEBUG_ENABLED "NFC_DEBUG_ENABLED"
+#define NAME_NFA_STORAGE "NFA_STORAGE"
+#define NAME_PRESERVE_STORAGE "PRESERVE_STORAGE"
#define NAME_POLLING_TECH_MASK "POLLING_TECH_MASK"
+#define NAME_P2P_LISTEN_TECH_MASK "P2P_LISTEN_TECH_MASK"
+#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
#define NAME_NFA_DM_CFG "NFA_DM_CFG"
#define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
-#define NAME_NFA_STORAGE "NFA_STORAGE"
-#define NAME_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
-#define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
-#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
-#define NAME_PRESERVE_STORAGE "PRESERVE_STORAGE"
#define NAME_NFA_MAX_EE_SUPPORTED "NFA_MAX_EE_SUPPORTED"
+#define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
#define NAME_POLL_FREQUENCY "POLL_FREQUENCY"
-#define NAME_PRESENCE_CHECK_ALGORITHM "PRESENCE_CHECK_ALGORITHM"
-#define NAME_DEVICE_HOST_WHITE_LIST "DEVICE_HOST_WHITE_LIST"
-#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
-#define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
#define NAME_NFA_AID_BLOCK_ROUTE "NFA_AID_BLOCK_ROUTE"
-#define NAME_ISO_DEP_MAX_TRANSCEIVE "ISO_DEP_MAX_TRANSCEIVE"
+#define NAME_AID_FOR_EMPTY_SELECT "AID_FOR_EMPTY_SELECT"
+#define NAME_AID_MATCHING_MODE "AID_MATCHING_MODE"
+
+/* Configs from vendor interface */
+#define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
+#define NAME_PRESENCE_CHECK_ALGORITHM "PRESENCE_CHECK_ALGORITHM"
+#define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
+#define NAME_DEFAULT_OFFHOST_ROUTE "DEFAULT_OFFHOST_ROUTE"
+#define NAME_DEFAULT_NFCF_ROUTE "DEFAULT_NFCF_ROUTE"
+#define NAME_DEFAULT_SYS_CODE_ROUTE "DEFAULT_SYS_CODE_ROUTE"
+#define NAME_DEFAULT_ROUTE "DEFAULT_ROUTE"
#define NAME_OFF_HOST_ESE_PIPE_ID "OFF_HOST_ESE_PIPE_ID"
#define NAME_OFF_HOST_SIM_PIPE_ID "OFF_HOST_SIM_PIPE_ID"
+#define NAME_ISO_DEP_MAX_TRANSCEIVE "ISO_DEP_MAX_TRANSCEIVE"
+#define NAME_DEVICE_HOST_WHITE_LIST "DEVICE_HOST_WHITE_LIST"
class NfcConfig {
public:
diff --git a/utils/Android.bp b/utils/Android.bp
index 4aca752..04053a4 100644
--- a/utils/Android.bp
+++ b/utils/Android.bp
@@ -24,7 +24,6 @@
host_supported: true,
srcs: [
"config.cc",
- "nfc_config.cc",
"ringbuffer.cc",
],
shared_libs: [
diff --git a/utils/config.cc b/utils/config.cc
index 69b536e..4128098 100644
--- a/utils/config.cc
+++ b/utils/config.cc
@@ -41,6 +41,26 @@
} // namespace
+ConfigValue::ConfigValue() {}
+
+ConfigValue::ConfigValue(std::string value) {
+ // Don't allow empty strings
+ CHECK(!(value.empty()));
+ type_ = STRING;
+ value_string_ = value;
+}
+
+ConfigValue::ConfigValue(unsigned value) {
+ type_ = UNSIGNED;
+ value_unsigned_ = value;
+}
+
+ConfigValue::ConfigValue(std::vector<uint8_t> value) {
+ CHECK(!(value.empty()));
+ type_ = BYTES;
+ value_bytes_ = value;
+}
+
ConfigValue::Type ConfigValue::getType() const { return type_; }
std::string ConfigValue::getString() const {
@@ -82,6 +102,11 @@
return false;
}
+void ConfigFile::addConfig(const std::string& key, ConfigValue& value) {
+ CHECK(!hasKey(key));
+ values_.emplace(key, value);
+}
+
void ConfigFile::parseFromFile(const std::string& file_name) {
string config;
bool config_read = ReadFileToString(file_name, &config);
@@ -108,8 +133,7 @@
ConfigValue value;
bool value_parsed = value.parseFromString(value_string);
CHECK(value_parsed);
- CHECK(!hasKey(key));
- values_.emplace(key, value);
+ addConfig(key, value);
LOG(INFO) << "ConfigFile - [" << key << "] = " << value_string;
}
diff --git a/utils/include/config.h b/utils/include/config.h
index 90bbcc1..a9a16ec 100644
--- a/utils/include/config.h
+++ b/utils/include/config.h
@@ -23,6 +23,10 @@
public:
enum Type { UNSIGNED, STRING, BYTES };
+ ConfigValue();
+ ConfigValue(std::string);
+ ConfigValue(unsigned);
+ ConfigValue(std::vector<uint8_t>);
Type getType() const;
std::string getString() const;
unsigned getUnsigned() const;
@@ -41,6 +45,7 @@
public:
void parseFromFile(const std::string& file_name);
void parseFromString(const std::string& config);
+ void addConfig(const std::string& config, ConfigValue& value);
bool hasKey(const std::string& key);
std::string getString(const std::string& key);