1121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/****************************************************************************** 2121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 3121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Copyright (C) 2011-2012 Broadcom Corporation 4121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 5121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Licensed under the Apache License, Version 2.0 (the "License"); 6121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * you may not use this file except in compliance with the License. 7121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * You may obtain a copy of the License at: 8121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 9121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * http://www.apache.org/licenses/LICENSE-2.0 10121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 11121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Unless required by applicable law or agreed to in writing, software 12121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * distributed under the License is distributed on an "AS IS" BASIS, 13121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * See the License for the specific language governing permissions and 15121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * limitations under the License. 16121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 17121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ******************************************************************************/ 18121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 19121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/****************************************************************************** 20121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 21121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * The original Work has been changed by NXP Semiconductors. 22121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 23121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Copyright (C) 2013-2014 NXP Semiconductors 24121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 25121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Licensed under the Apache License, Version 2.0 (the "License"); 26121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * you may not use this file except in compliance with the License. 27121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * You may obtain a copy of the License at 28121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 29121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * http://www.apache.org/licenses/LICENSE-2.0 30121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 31121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * Unless required by applicable law or agreed to in writing, software 32121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * distributed under the License is distributed on an "AS IS" BASIS, 33121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 34121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * See the License for the specific language governing permissions and 35121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * limitations under the License. 36121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao * 37121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ******************************************************************************/ 38121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 39121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <string> 40121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <vector> 41121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <list> 42121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <stdio.h> 43121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <sys/stat.h> 44121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 45121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <phNxpConfig.h> 46121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#include <phNxpLog.h> 47121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 48121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#if GENERIC_TARGET 49121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst char alternative_config_path[] = "/data/nfc/"; 50121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#else 51121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst char alternative_config_path[] = ""; 52121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#endif 53121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 54121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#if 1 55121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst char transport_config_path[] = "/etc/"; 56121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#else 57121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst char transport_config_path[] = "res/"; 58121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#endif 59121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 60121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#define config_name "libnfc-nxp.conf" 61121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#define extra_config_base "libnfc-nxp-" 62121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#define extra_config_ext ".conf" 63121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#define IsStringValue 0x80000000 64121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 65121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst char config_timestamp_path[] = "/data/nfc/libnfc-nxpConfigState.bin"; 66121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 67121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaousing namespace::std; 68121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 69121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoclass CNfcParam : public string 70121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 71121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaopublic: 72121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcParam(); 73121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcParam(const char* name, const string& value); 74121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcParam(const char* name, unsigned long value); 75121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao virtual ~CNfcParam(); 76121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long numValue() const {return m_numValue;} 77121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const char* str_value() const {return m_str_value.c_str();} 78121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao size_t str_len() const {return m_str_value.length();} 79121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoprivate: 80121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string m_str_value; 81121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long m_numValue; 82121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao}; 83121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 84121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoclass CNfcConfig : public vector<const CNfcParam*> 85121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 86121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaopublic: 87121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao virtual ~CNfcConfig(); 88121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao static CNfcConfig& GetInstance(); 89121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao friend void readOptionalConfig(const char* optional); 90121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int updateTimestamp(); 91121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int checkTimestamp(); 92121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 93121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool getValue(const char* name, char* pValue, size_t len) const; 94121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool getValue(const char* name, unsigned long& rValue) const; 95121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool getValue(const char* name, unsigned short & rValue) const; 96121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool getValue(const char* name, char* pValue, long len,long* readlen) const; 97121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* find(const char* p_name) const; 98121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao void clean(); 99121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoprivate: 100121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig(); 101121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool readConfig(const char* name, bool bResetContent); 102121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao void moveFromList(); 103121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao void moveToList(); 104121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao void add(const CNfcParam* pParam); 105121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao list<const CNfcParam*> m_list; 106121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bool mValidFile; 107121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long m_timeStamp; 108121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 109121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long state; 110121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 111121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao inline bool Is(unsigned long f) {return (state & f) == f;} 112121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao inline void Set(unsigned long f) {state |= f;} 113121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao inline void Reset(unsigned long f) {state &= ~f;} 114121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao}; 115121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 116121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 117121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 118121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: isPrintable() 119121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 120121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: determine if 'c' is printable 121121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 122121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 1, if printable, otherwise 0 123121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 124121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 125121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoinline bool isPrintable(char c) 126121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 127121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return (c >= 'A' && c <= 'Z') || 128121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao (c >= 'a' && c <= 'z') || 129121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao (c >= '0' && c <= '9') || 130121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao c == '/' || c == '_' || c == '-' || c == '.'; 131121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 132121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 133121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 134121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 135121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: isDigit() 136121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 137121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: determine if 'c' is numeral digit 138121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 139121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: true, if numerical digit 140121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 141121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 142121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoinline bool isDigit(char c, int base) 143121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 144121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ('0' <= c && c <= '9') 145121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 146121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (base == 16) 147121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 148121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (('A' <= c && c <= 'F') || 149121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ('a' <= c && c <= 'f') ) 150121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 151121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 152121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 153121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 154121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 155121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 156121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 157121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: getDigitValue() 158121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 159121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: return numerical value of a decimal or hex char 160121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 161121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: numerical value if decimal or hex char, otherwise 0 162121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 163121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 164121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoinline int getDigitValue(char c, int base) 165121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 166121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ('0' <= c && c <= '9') 167121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return c - '0'; 168121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (base == 16) 169121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 170121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ('A' <= c && c <= 'F') 171121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return c - 'A' + 10; 172121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if ('a' <= c && c <= 'f') 173121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return c - 'a' + 10; 174121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 175121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 0; 176121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 177121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 178121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 179121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 180121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::readConfig() 181121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 182121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: read Config settings and parse them into a linked list 183121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** move the element from linked list to a array at the end 184121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 185121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 1, if there are any config data, 0 otherwise 186121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 187121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 188121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaobool CNfcConfig::readConfig(const char* name, bool bResetContent) 189121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 190121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao enum { 191121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao BEGIN_LINE = 1, 192121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao TOKEN, 193121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao STR_VALUE, 194121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao NUM_VALUE, 195121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao BEGIN_HEX, 196121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao BEGIN_QUOTE, 197121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao END_LINE 198121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao }; 199121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 200121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao FILE* fd; 201121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao struct stat buf; 202121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string token; 203121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string strValue; 204121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long numValue = 0; 205121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcParam* pParam = NULL; 206121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int i = 0; 207121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int base = 0; 208121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao char c; 209121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int bflag = 0; 210121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = BEGIN_LINE; 211121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao /* open config file, read it into a buffer */ 212121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ((fd = fopen(name, "rb")) == NULL) 213121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 214121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGE("%s Cannot open config file %s\n", __func__, name); 215121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (bResetContent) 216121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 217121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGE("%s Using default value for all settings\n", __func__); 218121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao mValidFile = false; 219121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 220121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 221121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 222121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao stat(name, &buf); 223121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_timeStamp = (unsigned long)buf.st_mtime; 224121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 225121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao mValidFile = true; 226121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (size() > 0) 227121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 228121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (bResetContent) 229121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao clean(); 230121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 231121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao moveToList(); 232121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 233121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 234121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao while (!feof(fd) && fread(&c, 1, 1, fd) == 1) 235121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 236121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao switch (state & 0xff) 237121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 238121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case BEGIN_LINE: 239121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '#') 240121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 241121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (isPrintable(c)) 242121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 243121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao i = 0; 244121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao token.erase(); 245121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.erase(); 246121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = TOKEN; 247121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao token.push_back(c); 248121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 249121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 250121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case TOKEN: 251121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '=') 252121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 253121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao token.push_back('\0'); 254121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = BEGIN_QUOTE; 255121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 256121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (isPrintable(c)) 257121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao token.push_back(c); 258121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 259121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 260121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 261121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case BEGIN_QUOTE: 262121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '"') 263121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 264121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = STR_VALUE; 265121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao base = 0; 266121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 267121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (c == '0') 268121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = BEGIN_HEX; 269121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (isDigit(c, 10)) 270121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 271121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = NUM_VALUE; 272121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao base = 10; 273121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = getDigitValue(c, base); 274121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao i = 0; 275121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 276121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (c == '{') 277121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 278121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = NUM_VALUE; 279121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bflag = 1; 280121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao base = 16; 281121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao i = 0; 282121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao Set(IsStringValue); 283121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 284121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 285121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 286121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 287121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case BEGIN_HEX: 288121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == 'x' || c == 'X') 289121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 290121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = NUM_VALUE; 291121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao base = 16; 292121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = 0; 293121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao i = 0; 294121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 295121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 296121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (isDigit(c, 10)) 297121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 298121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = NUM_VALUE; 299121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao base = 10; 300121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = getDigitValue(c, base); 301121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 302121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 303121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (c != '\n' && c != '\r') 304121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 305121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 306121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 307121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 308121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao // fall through to numValue to handle numValue 309121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 310121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case NUM_VALUE: 311121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (isDigit(c, base)) 312121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 313121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue *= base; 314121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue += getDigitValue(c, base); 315121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ++i; 316121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 317121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if(bflag == 1 && (c == ' ' || c == '\r' || c=='\n' || c=='\t')) 318121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 319121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 320121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 321121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (base == 16 && (c== ','|| c == ':' || c == '-' || c == ' ' || c == '}')) 322121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 323121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 324121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if( c=='}' ) 325121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 326121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao bflag = 0; 327121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 328121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (i > 0) 329121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 330121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int n = (i+1) / 2; 331121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao while (n-- > 0) 332121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 333121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = numValue >> (n * 8); 334121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned char c = (numValue) & 0xFF; 335121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.push_back(c); 336121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 337121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 338121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 339121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao Set(IsStringValue); 340121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = 0; 341121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao i = 0; 342121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 343121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 344121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 345121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '\n' || c == '\r') 346121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 347121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(bflag == 0 ) 348121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 349121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = BEGIN_LINE; 350121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 351121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 352121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 353121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 354121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if( bflag == 0) 355121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 356121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 357121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 358121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 359121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (Is(IsStringValue) && base == 16 && i > 0) 360121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 361121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int n = (i+1) / 2; 362121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao while (n-- > 0) 363121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.push_back(((numValue >> (n * 8)) & 0xFF)); 364121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 365121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (strValue.length() > 0) 366121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao pParam = new CNfcParam(token.c_str(), strValue); 367121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 368121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao pParam = new CNfcParam(token.c_str(), numValue); 369121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao add(pParam); 370121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.erase(); 371121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao numValue = 0; 372121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 373121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 374121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case STR_VALUE: 375121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '"') 376121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 377121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.push_back('\0'); 378121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = END_LINE; 379121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao pParam = new CNfcParam(token.c_str(), strValue); 380121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao add(pParam); 381121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 382121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (isPrintable(c)) 383121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strValue.push_back(c); 384121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 385121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case END_LINE: 386121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (c == '\n' || c == '\r') 387121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state = BEGIN_LINE; 388121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 389121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao default: 390121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 391121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 392121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 393121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 394121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 395121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 396121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao moveFromList(); 397121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return size() > 0; 398121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 399121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 400121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 401121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 402121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::CNfcConfig() 403121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 404121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class constructor 405121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 406121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 407121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 408121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 409121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcConfig::CNfcConfig() : 410121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao mValidFile(true), 411121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_timeStamp(0), 412121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao state(0) 413121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 414121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 415121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 416121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 417121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 418121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::~CNfcConfig() 419121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 420121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class destructor 421121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 422121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 423121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 424121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 425121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcConfig::~CNfcConfig() 426121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 427121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 428121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 429121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 430121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 431121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::GetInstance() 432121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 433121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: get class singleton object 434121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 435121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 436121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 437121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 438121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcConfig& CNfcConfig::GetInstance() 439121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 440121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao static CNfcConfig theInstance; 441121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 442121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (theInstance.size() == 0 && theInstance.mValidFile) 443121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 444121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string strPath; 445121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (alternative_config_path[0] != '\0') 446121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 447121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath.assign(alternative_config_path); 448121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath += config_name; 449121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao theInstance.readConfig(strPath.c_str(), true); 450121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (!theInstance.empty()) 451121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 452121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return theInstance; 453121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 454121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 455121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath.assign(transport_config_path); 456121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath += config_name; 457121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao theInstance.readConfig(strPath.c_str(), true); 458121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 459121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 460121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return theInstance; 461121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 462121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 463121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 464121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 465121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::getValue() 466121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 467121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: get a string value of a setting 468121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 469121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: true if setting exists 470121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** false if setting does not exist 471121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 472121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 473121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaobool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const 474121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 475121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* pParam = find(name); 476121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam == NULL) 477121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 478121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 479121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam->str_len() > 0) 480121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 481121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao memset(pValue, 0, len); 482121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao memcpy(pValue, pParam->str_value(), pParam->str_len()); 483121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 484121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 485121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 486121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 487121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 488121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaobool CNfcConfig::getValue(const char* name, char* pValue, long len,long* readlen) const 489121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 490121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* pParam = find(name); 491121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam == NULL) 492121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 493121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 494121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam->str_len() > 0) 495121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 496121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(pParam->str_len() <= (unsigned long)len) 497121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 498121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao memset(pValue, 0, len); 499121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao memcpy(pValue, pParam->str_value(), pParam->str_len()); 500121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao *readlen = pParam->str_len(); 501121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 502121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 503121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 504121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao *readlen = -1; 505121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 506121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 507121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 508121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 509121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 510121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 511121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 512121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 513121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 514121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::getValue() 515121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 516121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: get a long numerical value of a setting 517121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 518121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: true if setting exists 519121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** false if setting does not exist 520121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 521121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 522121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaobool CNfcConfig::getValue(const char* name, unsigned long& rValue) const 523121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 524121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* pParam = find(name); 525121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam == NULL) 526121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 527121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 528121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam->str_len() == 0) 529121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 530121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao rValue = static_cast<unsigned long>(pParam->numValue()); 531121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 532121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 533121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 534121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 535121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 536121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 537121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 538121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::getValue() 539121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 540121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: get a short numerical value of a setting 541121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 542121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: true if setting exists 543121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** false if setting does not exist 544121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 545121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 546121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaobool CNfcConfig::getValue(const char* name, unsigned short& rValue) const 547121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 548121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* pParam = find(name); 549121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam == NULL) 550121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 551121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 552121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam->str_len() == 0) 553121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 554121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao rValue = static_cast<unsigned short>(pParam->numValue()); 555121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 556121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 557121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 558121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 559121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 560121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 561121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 562121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::find() 563121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 564121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: search if a setting exist in the setting array 565121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 566121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: pointer to the setting object 567121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 568121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 569121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoconst CNfcParam* CNfcConfig::find(const char* p_name) const 570121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 571121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (size() == 0) 572121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return NULL; 573121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 574121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (const_iterator it = begin(), itEnd = end(); it != itEnd; ++it) 575121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 576121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (**it < p_name) 577121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 578121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao continue; 579121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 580121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else if (**it == p_name) 581121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 582121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if((*it)->str_len() > 0) 583121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 584121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao NXPLOG_EXTNS_D("%s found %s=%s\n", __func__, p_name, (*it)->str_value()); 585121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 586121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 587121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 588121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao NXPLOG_EXTNS_D("%s found %s=(0x%lx)\n", __func__, p_name, (*it)->numValue()); 589121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 590121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return *it; 591121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 592121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 593121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 594121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 595121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return NULL; 596121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 597121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 598121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 599121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 600121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::clean() 601121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 602121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: reset the setting array 603121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 604121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 605121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 606121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 607121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaovoid CNfcConfig::clean() 608121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 609121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (size() == 0) 610121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return; 611121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 612121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) 613121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao delete *it; 614121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao clear(); 615121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 616121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 617121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 618121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 619121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::Add() 620121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 621121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: add a setting object to the list 622121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 623121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 624121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 625121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 626121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaovoid CNfcConfig::add(const CNfcParam* pParam) 627121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 628121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (m_list.size() == 0) 629121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 630121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.push_back(pParam); 631121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return; 632121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 633121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it) 634121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 635121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (**it < pParam->c_str()) 636121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao continue; 637121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.insert(it, pParam); 638121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return; 639121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 640121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.push_back(pParam); 641121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 642121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 643121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 644121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 645121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::moveFromList() 646121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 647121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: move the setting object from list to array 648121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 649121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 650121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 651121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 652121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaovoid CNfcConfig::moveFromList() 653121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 654121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (m_list.size() == 0) 655121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return; 656121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 657121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it) 658121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao push_back(*it); 659121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.clear(); 660121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 661121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 662121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 663121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 664121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::moveToList() 665121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 666121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: move the setting object from array to list 667121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 668121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 669121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 670121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 671121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaovoid CNfcConfig::moveToList() 672121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 673121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (m_list.size() != 0) 674121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.clear(); 675121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 676121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (iterator it = begin(), itEnd = end(); it != itEnd; ++it) 677121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_list.push_back(*it); 678121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao clear(); 679121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 680121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 681121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#if 0 682121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 683121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 684121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::checkTimestamp() 685121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 686121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: check if config file has modified 687121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 688121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 0 if not modified, 1 otherwise. 689121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 690121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 691121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoint CNfcConfig::checkTimestamp() 692121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 693121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao FILE* fd; 694121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao struct stat st; 695121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long value = 0; 696121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int ret = 0; 697121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 698121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(stat(config_timestamp_path, &st) != 0) 699121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 700121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGD("%s file %s not exist, creat it.\n", __func__, config_timestamp_path); 701121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ((fd = fopen(config_timestamp_path, "w+")) != NULL) 702121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 703121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fwrite(&m_timeStamp, sizeof(unsigned long), 1, fd); 704121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 705121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 706121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 707121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 708121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 709121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 710121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fd = fopen(config_timestamp_path, "r+"); 711121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(fd == NULL) 712121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 713121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGE("%s Cannot open file %s\n", __func__, config_timestamp_path); 714121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 715121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 716121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 717121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fread(&value, sizeof(unsigned long), 1, fd); 718121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ret = (value != m_timeStamp); 719121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(ret) 720121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 721121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fseek(fd, 0, SEEK_SET); 722121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fwrite(&m_timeStamp, sizeof(unsigned long), 1, fd); 723121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 724121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 725121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 726121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return ret; 727121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 728121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 729121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao#endif 730121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 731121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 732121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::checkforTimestamp() 733121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 734121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: check if config file has modified 735121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 736121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 0 if not modified, 1 otherwise. 737121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 738121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 739121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoint CNfcConfig::checkTimestamp() 740121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 741121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao FILE* fd; 742121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao struct stat st; 743121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long value = 0; 744121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int ret = 0; 745121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 746121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(stat(config_timestamp_path, &st) != 0) 747121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 748121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGD("%s file not exist.\n", __func__); 749121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 750121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 751121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 752121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 753121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fd = fopen(config_timestamp_path, "r+"); 754121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(fd == NULL) 755121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 756121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGE("%s Cannot open file %s\n", __func__, config_timestamp_path); 757121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 758121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 759121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 760121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fread(&value, sizeof(unsigned long), 1, fd); 761121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ret = (value != m_timeStamp); 762121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 763121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 764121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return ret; 765121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 766121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 767121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 768121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 769121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcConfig::updateTimestamp() 770121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 771121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: update if config file has modified 772121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 773121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 0 if not modified, 1 otherwise. 774121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 775121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 776121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoint CNfcConfig::updateTimestamp() 777121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 778121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao FILE* fd; 779121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao struct stat st; 780121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long value = 0; 781121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao int ret = 0; 782121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 783121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(stat(config_timestamp_path, &st) != 0) 784121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 785121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGD("%s file %s not exist, creat it.\n", __func__, config_timestamp_path); 786121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if ((fd = fopen(config_timestamp_path, "w+")) != NULL) 787121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 788121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fwrite(&m_timeStamp, sizeof(unsigned long), 1, fd); 789121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 790121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 791121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 792121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 793121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao else 794121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 795121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fd = fopen(config_timestamp_path, "r+"); 796121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(fd == NULL) 797121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 798121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ALOGE("%s Cannot open file %s\n", __func__, config_timestamp_path); 799121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return 1; 800121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 801121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 802121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fread(&value, sizeof(unsigned long), 1, fd); 803121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao ret = (value != m_timeStamp); 804121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if(ret) 805121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 806121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fseek(fd, 0, SEEK_SET); 807121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fwrite(&m_timeStamp, sizeof(unsigned long), 1, fd); 808121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 809121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao fclose(fd); 810121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 811121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return ret; 812121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 813121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 814121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 815121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 816121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcParam::CNfcParam() 817121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 818121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class constructor 819121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 820121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 821121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 822121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 823121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcParam::CNfcParam() : 824121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_numValue(0) 825121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 826121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 827121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 828121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 829121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 830121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcParam::~CNfcParam() 831121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 832121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class destructor 833121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 834121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 835121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 836121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 837121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcParam::~CNfcParam() 838121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 839121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 840121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 841121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 842121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 843121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcParam::CNfcParam() 844121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 845121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class copy constructor 846121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 847121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 848121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 849121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 850121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcParam::CNfcParam(const char* name, const string& value) : 851121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string(name), 852121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_str_value(value), 853121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_numValue(0) 854121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 855121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 856121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 857121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 858121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 859121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: CNfcParam::CNfcParam() 860121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 861121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: class copy constructor 862121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 863121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 864121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 865121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 866121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou LiaoCNfcParam::CNfcParam(const char* name, unsigned long value) : 867121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string(name), 868121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao m_numValue(value) 869121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 870121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 871121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 872121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 873121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 874121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: GetStrValue 875121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 876121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: API function for getting a string value of a setting 877121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 878121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: True if found, otherwise False. 879121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 880121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 881121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" int GetNxpStrValue(const char* name, char* pValue, unsigned long len) 882121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 883121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 884121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 885121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return rConfig.getValue(name, pValue, len); 886121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 887121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 888121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 889121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 890121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: GetByteArrayValue() 891121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 892121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: Read byte array value from the config file. 893121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 894121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Parameters: 895121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** name - name of the config param to read. 896121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** pValue - pointer to input buffer. 897121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** bufflen - input buffer length. 898121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** len - out parameter to return the number of bytes read from config file, 899121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** return -1 in case bufflen is not enough. 900121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 901121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: TRUE[1] if config param name is found in the config file, else FALSE[0] 902121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 903121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 904121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" int GetNxpByteArrayValue(const char* name, char* pValue,long bufflen, long *len) 905121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 906121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 907121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 908121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return rConfig.getValue(name, pValue, bufflen,len); 909121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 910121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 911121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 912121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 913121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: GetNumValue 914121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 915121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: API function for getting a numerical value of a setting 916121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 917121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: true, if successful 918121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 919121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 920121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" int GetNxpNumValue(const char* name, void* pValue, unsigned long len) 921121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 922121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (!pValue) 923121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 924121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 925121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 926121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const CNfcParam* pParam = rConfig.find(name); 927121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 928121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (pParam == NULL) 929121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 930121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao unsigned long v = pParam->numValue(); 931121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4) 932121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 933121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao const unsigned char* p = (const unsigned char*)pParam->str_value(); 934121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao for (unsigned int i = 0 ; i < pParam->str_len(); ++i) 935121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 936121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao v *= 256; 937121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao v += *p++; 938121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 939121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 940121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao switch (len) 941121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao { 942121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case sizeof(unsigned long): 943121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao *(static_cast<unsigned long*>(pValue)) = (unsigned long)v; 944121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 945121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case sizeof(unsigned short): 946121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao *(static_cast<unsigned short*>(pValue)) = (unsigned short)v; 947121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 948121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao case sizeof(unsigned char): 949121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao *(static_cast<unsigned char*> (pValue)) = (unsigned char)v; 950121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao break; 951121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao default: 952121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return false; 953121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao } 954121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return true; 955121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 956121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 957121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 958121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 959121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: resetConfig 960121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 961121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: reset settings array 962121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 963121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 964121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 965121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 966121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" void resetNxpConfig() 967121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 968121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 969121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 970121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 971121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao rConfig.clean(); 972121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 973121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 974121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 975121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 976121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: readOptionalConfig() 977121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 978121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: read Config settings from an optional conf file 979121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 980121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: none 981121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 982121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 983121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaovoid readOptionalConfig(const char* extra) 984121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 985121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao string strPath; 986121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath.assign(transport_config_path); 987121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao if (alternative_config_path[0] != '\0') 988121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath.assign(alternative_config_path); 989121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 990121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath += extra_config_base; 991121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath += extra; 992121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao strPath += extra_config_ext; 993121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig::GetInstance().readConfig(strPath.c_str(), false); 994121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 995121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 996121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 997121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 998121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: isNxpConfigModified() 999121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1000121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: check if config file has modified 1001121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1002121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 0 if not modified, 1 otherwise. 1003121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1004121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 1005121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" int isNxpConfigModified() 1006121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 1007121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 1008121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return rConfig.checkTimestamp(); 1009121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 1010121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao 1011121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao/******************************************************************************* 1012121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1013121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Function: updateNxpConfigTimestamp() 1014121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1015121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Description: update if config file has modified 1016121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1017121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** Returns: 0 if not modified, 1 otherwise. 1018121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao** 1019121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao*******************************************************************************/ 1020121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liaoextern "C" int updateNxpConfigTimestamp() 1021121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao{ 1022121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao CNfcConfig& rConfig = CNfcConfig::GetInstance(); 1023121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao return rConfig.updateTimestamp(); 1024121096a3511ea4ac559dea3ef7d39f0df00c97a6Jizhou Liao} 1025