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