1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 2011-2012 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "OverrideLog.h" 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "config.h" 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <stdio.h> 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string> 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <vector> 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <list> 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define LOG_TAG "NfcAdaptation" 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectconst char transport_config_path[] = "/etc/"; 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define config_name "libnfc-brcm.conf" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define extra_config_base "libnfc-brcm-" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define extra_config_ext ".conf" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define IsStringValue 0x80000000 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectusing namespace::std; 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectclass CNfcParam : public string 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectpublic: 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcParam(); 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcParam(const char* name, const string& value); 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcParam(const char* name, unsigned long value); 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project virtual ~CNfcParam(); 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long numValue() const {return m_numValue;} 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const char* str_value() const {return m_str_value.c_str();} 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project size_t str_len() const {return m_str_value.length();} 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectprivate: 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string m_str_value; 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long m_numValue; 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectclass CNfcConfig : public vector<const CNfcParam*> 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectpublic: 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project virtual ~CNfcConfig(); 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project static CNfcConfig& GetInstance(); 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project friend void readOptionalConfig(const char* optional); 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen bool getValue(const char* name, char* pValue, size_t& len) const; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool getValue(const char* name, unsigned long& rValue) const; 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool getValue(const char* name, unsigned short & rValue) const; 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const CNfcParam* find(const char* p_name) const; 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void clean(); 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectprivate: 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcConfig(); 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool readConfig(const char* name, bool bResetContent); 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void moveFromList(); 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void moveToList(); 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project void add(const CNfcParam* pParam); 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project list<const CNfcParam*> m_list; 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project bool mValidFile; 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long state; 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project inline bool Is(unsigned long f) {return (state & f) == f;} 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project inline void Set(unsigned long f) {state |= f;} 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project inline void Reset(unsigned long f) {state &= ~f;} 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}; 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: isPrintable() 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: detremine if a char is printable 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectinline bool isPrintable(char c) 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (c >= 'A' && c <= 'Z') || 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (c >= 'a' && c <= 'z') || 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project (c >= '0' && c <= '9') || 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project c == '/' || c == '_' || c == '-' || c == '.'; 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: isDigit() 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: detremine if a char is numeral digit 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectinline bool isDigit(char c, int base) 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ('0' <= c && c <= '9') 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (base == 16) 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (('A' <= c && c <= 'F') || 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ('a' <= c && c <= 'f') ) 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: getDigitValue() 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: return numercal value of a char 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectinline int getDigitValue(char c, int base) 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ('0' <= c && c <= '9') 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return c - '0'; 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (base == 16) 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ('A' <= c && c <= 'F') 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return c - 'A' + 10; 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if ('a' <= c && c <= 'f') 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return c - 'a' + 10; 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return 0; 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::readConfig() 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: read Config settings and parse them into a linked list 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** move the element from linked list to a array at the end 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectbool CNfcConfig::readConfig(const char* name, bool bResetContent) 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project enum { 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BEGIN_LINE = 1, 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project TOKEN, 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project STR_VALUE, 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NUM_VALUE, 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BEGIN_HEX, 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BEGIN_QUOTE, 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project END_LINE 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project }; 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen FILE* fd = NULL; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string token; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string strValue; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long numValue = 0; 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcParam* pParam = NULL; 1685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen int i = 0; 1695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen int base = 0; 1705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen char c = 0; 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = BEGIN_LINE; 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* open config file, read it into a buffer */ 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((fd = fopen(name, "rb")) == NULL) 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD("%s Cannot open config file %s\n", __func__, name); 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (bResetContent) 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD("%s Using default value for all settings\n", __func__); 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mValidFile = false; 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD("%s Opened %s config %s\n", __func__, (bResetContent ? "base" : "optional"), name); 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project mValidFile = true; 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (size() > 0) 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (bResetContent) 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project clean(); 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project moveToList(); 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 195a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu for (;;) 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 197a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (feof(fd) || fread(&c, 1, 1, fd) != 1) 198a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 199a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (state == BEGIN_LINE) 200a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu break; 201a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 202a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // got to the EOF but not in BEGIN_LINE state so the file 203a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // probably does not end with a newline, so the parser has 204a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // not processed current line, simulate a newline in the file 205a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu c = '\n'; 206a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 207a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (state & 0xff) 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case BEGIN_LINE: 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '#') 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (isPrintable(c)) 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project i = 0; 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project token.erase(); 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.erase(); 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = TOKEN; 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project token.push_back(c); 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case TOKEN: 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '=') 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project token.push_back('\0'); 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = BEGIN_QUOTE; 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (isPrintable(c)) 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project token.push_back(c); 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case BEGIN_QUOTE: 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '"') 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = STR_VALUE; 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project base = 0; 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (c == '0') 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = BEGIN_HEX; 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (isDigit(c, 10)) 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = NUM_VALUE; 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project base = 10; 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue = getDigitValue(c, base); 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project i = 0; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (c == '{') 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = NUM_VALUE; 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project base = 16; 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project i = 0; 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project Set(IsStringValue); 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case BEGIN_HEX: 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == 'x' || c == 'X') 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = NUM_VALUE; 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project base = 16; 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue = 0; 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project i = 0; 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (isDigit(c, 10)) 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = NUM_VALUE; 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project base = 10; 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue = getDigitValue(c, base); 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (c != '\n' && c != '\r') 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project // fal through to numValue to handle numValue 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case NUM_VALUE: 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (isDigit(c, base)) 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue *= base; 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue += getDigitValue(c, base); 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ++i; 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (base == 16 && (c == ':' || c == '-' || c == ' ' || c == '}')) 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (i > 0) 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int n = (i+1) / 2; 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while (n-- > 0) 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned char c = (numValue >> (n * 8)) & 0xFF; 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.push_back(c); 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project Set(IsStringValue); 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue = 0; 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project i = 0; 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '\n' || c == '\r') 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = BEGIN_LINE; 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (Is(IsStringValue) && base == 16 && i > 0) 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int n = (i+1) / 2; 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while (n-- > 0) 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.push_back(((numValue >> (n * 8)) & 0xFF)); 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (strValue.length() > 0) 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pParam = new CNfcParam(token.c_str(), strValue); 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pParam = new CNfcParam(token.c_str(), numValue); 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project add(pParam); 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.erase(); 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project numValue = 0; 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case STR_VALUE: 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '"') 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.push_back('\0'); 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = END_LINE; 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pParam = new CNfcParam(token.c_str(), strValue); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project add(pParam); 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (isPrintable(c)) 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strValue.push_back(c); 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case END_LINE: 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (c == '\n' || c == '\r') 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project state = BEGIN_LINE; 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 342a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 343a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (feof(fd)) 344a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu break; 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project fclose(fd); 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project moveFromList(); 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return size() > 0; 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::CNfcConfig() 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcConfig::CNfcConfig() : 3631569641423dac0a41af7596fdef972126e698f46Evan Chu mValidFile(true), 3641569641423dac0a41af7596fdef972126e698f46Evan Chu state(0) 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::~CNfcConfig() 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcConfig::~CNfcConfig() 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::GetInstance() 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: get class singleton object 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcConfig& CNfcConfig::GetInstance() 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project static CNfcConfig theInstance; 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (theInstance.size() == 0 && theInstance.mValidFile) 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string strPath; 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath.assign(transport_config_path); 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath += config_name; 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project theInstance.readConfig(strPath.c_str(), true); 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return theInstance; 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::getValue() 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: get a string value of a setting 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: true if setting exists 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** false if setting does not exist 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4155c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenbool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const CNfcParam* pParam = find(name); 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam == NULL) 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 420e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam->str_len() > 0) 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project memset(pValue, 0, len); 4245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if (len > pParam->str_len()) 4255c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen len = pParam->str_len(); 4265c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen memcpy(pValue, pParam->str_value(), len); 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::getValue() 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: get a long numerical value of a setting 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: true if setting exists 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** false if setting does not exist 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectbool CNfcConfig::getValue(const char* name, unsigned long& rValue) const 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const CNfcParam* pParam = find(name); 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam == NULL) 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam->str_len() == 0) 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rValue = static_cast<unsigned long>(pParam->numValue()); 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::getValue() 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: get a short numerical value of a setting 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: true if setting exists 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** false if setting does not exist 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectbool CNfcConfig::getValue(const char* name, unsigned short& rValue) const 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const CNfcParam* pParam = find(name); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam == NULL) 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam->str_len() == 0) 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rValue = static_cast<unsigned short>(pParam->numValue()); 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::find() 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: search if a setting exist in the setting array 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: pointer to the setting object 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectconst CNfcParam* CNfcConfig::find(const char* p_name) const 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (size() == 0) 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NULL; 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (**it < p_name) 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project continue; 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else if (**it == p_name) 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if((*it)->str_len() > 0) 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value()); 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 5035c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue()); 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return *it; 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NULL; 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::clean() 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: reset the setting array 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid CNfcConfig::clean() 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (size() == 0) 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project delete *it; 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project clear(); 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::Add() 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: add a setting object to the list 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid CNfcConfig::add(const CNfcParam* pParam) 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (m_list.size() == 0) 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.push_back(pParam); 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it) 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (**it < pParam->c_str()) 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project continue; 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.insert(it, pParam); 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.push_back(pParam); 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::moveFromList() 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: move the setting object from list to array 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid CNfcConfig::moveFromList() 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (m_list.size() == 0) 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return; 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it) 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project push_back(*it); 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.clear(); 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcConfig::moveToList() 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: move the setting object from array to list 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid CNfcConfig::moveToList() 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (m_list.size() != 0) 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.clear(); 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_list.push_back(*it); 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project clear(); 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcParam::CNfcParam() 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class constructor 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcParam::CNfcParam() : 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_numValue(0) 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcParam::~CNfcParam() 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class destructor 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcParam::~CNfcParam() 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcParam::CNfcParam() 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class copy constructor 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcParam::CNfcParam(const char* name, const string& value) : 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string(name), 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_str_value(value), 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_numValue(0) 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: CNfcParam::CNfcParam() 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: class copy constructor 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectCNfcParam::CNfcParam(const char* name, unsigned long value) : 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string(name), 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project m_numValue(value) 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: GetStrValue 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: API function for getting a string value of a setting 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern "C" int GetStrValue(const char* name, char* pValue, unsigned long l) 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 6645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen size_t len = l; 665e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcConfig& rConfig = CNfcConfig::GetInstance(); 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen bool b = rConfig.getValue(name, pValue, len); 6685c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen return b ? len : 0; 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 670e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 671e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 672e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: GetNumValue 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: API function for getting a numerical value of a setting 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 680e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" int GetNumValue(const char* name, void* pValue, unsigned long len) 681e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (!pValue) 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcConfig& rConfig = CNfcConfig::GetInstance(); 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const CNfcParam* pParam = rConfig.find(name); 687e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 688e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (pParam == NULL) 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long v = pParam->numValue(); 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4) 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 693e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project const unsigned char* p = (const unsigned char*)pParam->str_value(); 6945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen for (size_t i = 0 ; i < pParam->str_len(); ++i) 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 696e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project v *= 256; 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project v += *p++; 698e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 699e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (len) 701e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case sizeof(unsigned long): 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *(static_cast<unsigned long*>(pValue)) = (unsigned long)v; 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case sizeof(unsigned short): 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *(static_cast<unsigned short*>(pValue)) = (unsigned short)v; 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case sizeof(unsigned char): 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *(static_cast<unsigned char*> (pValue)) = (unsigned char)v; 710e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 711e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project default: 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return false; 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return true; 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 717e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 718e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: resetConfig 720e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: reset settings array 722e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 723e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 724e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 726e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern void resetConfig() 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 728e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcConfig& rConfig = CNfcConfig::GetInstance(); 729e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project rConfig.clean(); 731e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function: readOptionalConfig() 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description: read Config settings from an optional conf file 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: none 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid readOptionalConfig(const char* extra) 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project string strPath; 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath.assign(transport_config_path); 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath += extra_config_base; 747e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath += extra; 748e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project strPath += extra_config_ext; 749e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project CNfcConfig::GetInstance().readConfig(strPath.c_str(), false); 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 752