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