1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 *  Import and export general routing data using a XML file.
19 */
20#pragma once
21#include "NfcJniUtil.h"
22#include "nfa_api.h"
23#include <libxml/parser.h>
24#include <vector>
25#include <string>
26
27
28/*****************************************************************************
29**
30**  Name:           RouteData
31**
32**  Description:    Base class for every kind of route data.
33**
34*****************************************************************************/
35class RouteData
36{
37public:
38    enum RouteType {ProtocolRoute, TechnologyRoute};
39    RouteType mRouteType;
40
41protected:
42    RouteData (RouteType routeType) : mRouteType (routeType)
43    {}
44};
45
46
47
48
49/*****************************************************************************
50**
51**  Name:           RouteDataForProtocol
52**
53**  Description:    Data for protocol routes.
54**
55*****************************************************************************/
56class RouteDataForProtocol : public RouteData
57{
58public:
59    int mNfaEeHandle; //for example 0x4f3, 0x4f4
60    bool mSwitchOn;
61    bool mSwitchOff;
62    bool mBatteryOff;
63    tNFA_PROTOCOL_MASK mProtocol;
64
65    RouteDataForProtocol () : RouteData (ProtocolRoute), mNfaEeHandle (NFA_HANDLE_INVALID),
66            mSwitchOn (false), mSwitchOff (false), mBatteryOff (false),
67            mProtocol (0)
68    {}
69};
70
71
72/*****************************************************************************
73**
74**  Name:           RouteDataForTechnology
75**
76**  Description:    Data for technology routes.
77**
78*****************************************************************************/
79class RouteDataForTechnology : public RouteData
80{
81public:
82    int mNfaEeHandle; //for example 0x4f3, 0x4f4
83    bool mSwitchOn;
84    bool mSwitchOff;
85    bool mBatteryOff;
86    tNFA_TECHNOLOGY_MASK mTechnology;
87
88    RouteDataForTechnology () : RouteData (TechnologyRoute), mNfaEeHandle (NFA_HANDLE_INVALID),
89            mSwitchOn (false), mSwitchOff (false), mBatteryOff (false),
90            mTechnology (0)
91    {}
92};
93
94
95/*****************************************************************************/
96/*****************************************************************************/
97
98
99/*****************************************************************************
100**
101**  Name:           AidBuffer
102**
103**  Description:    Buffer to store AID after converting a string of hex
104**                  values to bytes.
105**
106*****************************************************************************/
107class AidBuffer
108{
109public:
110
111    /*******************************************************************************
112    **
113    ** Function:        AidBuffer
114    **
115    ** Description:     Parse a string of hex numbers.  Store result in an array of
116    **                  bytes.
117    **                  aid: string of hex numbers.
118    **
119    ** Returns:         None.
120    **
121    *******************************************************************************/
122    AidBuffer (std::string& aid);
123
124
125    /*******************************************************************************
126    **
127    ** Function:        ~AidBuffer
128    **
129    ** Description:     Release all resources.
130    **
131    ** Returns:         None.
132    **
133    *******************************************************************************/
134    ~AidBuffer ();
135
136
137    UINT8* buffer () {return mBuffer;};
138    int length () {return mBufferLen;};
139
140private:
141    UINT8* mBuffer;
142    UINT32 mBufferLen;
143};
144
145
146/*****************************************************************************/
147/*****************************************************************************/
148
149
150/*****************************************************************************
151**
152**  Name:           RouteDataSet
153**
154**  Description:    Import and export general routing data using a XML file.
155**                  See /data/bcm/param/route.xml
156**
157*****************************************************************************/
158class RouteDataSet
159{
160public:
161    typedef std::vector<RouteData*> Database;
162    enum DatabaseSelection {DefaultRouteDatabase, SecElemRouteDatabase};
163
164
165    /*******************************************************************************
166    **
167    ** Function:        ~RouteDataSet
168    **
169    ** Description:     Release all resources.
170    **
171    ** Returns:         None.
172    **
173    *******************************************************************************/
174    ~RouteDataSet ();
175
176
177    /*******************************************************************************
178    **
179    ** Function:        initialize
180    **
181    ** Description:     Initialize resources.
182    **
183    ** Returns:         True if ok.
184    **
185    *******************************************************************************/
186    bool initialize ();
187
188
189    /*******************************************************************************
190    **
191    ** Function:        import
192    **
193    ** Description:     Import data from an XML file.  Fill the database.
194    **
195    ** Returns:         True if ok.
196    **
197    *******************************************************************************/
198    bool import ();
199
200
201    /*******************************************************************************
202    **
203    ** Function:        getDatabase
204    **
205    ** Description:     Obtain a database of routing data.
206    **                  selection: which database.
207    **
208    ** Returns:         Pointer to database.
209    **
210    *******************************************************************************/
211    Database* getDatabase (DatabaseSelection selection);
212
213
214    /*******************************************************************************
215    **
216    ** Function:        saveToFile
217    **
218    ** Description:     Save XML data from a string into a file.
219    **                  routesXml: XML that represents routes.
220    **
221    ** Returns:         True if ok.
222    **
223    *******************************************************************************/
224    static bool saveToFile (const char* routesXml);
225
226
227    /*******************************************************************************
228    **
229    ** Function:        loadFromFile
230    **
231    ** Description:     Load XML data from file into a string.
232    **                  routesXml: string to receive XML data.
233    **
234    ** Returns:         True if ok.
235    **
236    *******************************************************************************/
237    static bool loadFromFile (std::string& routesXml);
238
239
240    /*******************************************************************************
241    **
242    ** Function:        deleteFile
243    **
244    ** Description:     Delete route data XML file.
245    **
246    ** Returns:         True if ok.
247    **
248    *******************************************************************************/
249    static bool deleteFile ();
250
251    /*******************************************************************************
252    **
253    ** Function:        printDiagnostic
254    **
255    ** Description:     Print some diagnostic output.
256    **
257    ** Returns:         None.
258    **
259    *******************************************************************************/
260    void printDiagnostic ();
261
262private:
263    Database mSecElemRouteDatabase; //routes when NFC service selects sec elem
264    Database mDefaultRouteDatabase; //routes when NFC service deselects sec elem
265    static const char* sConfigFile;
266    static const bool sDebug = false;
267
268
269    /*******************************************************************************
270    **
271    ** Function:        deleteDatabase
272    **
273    ** Description:     Delete all routes stored in all databases.
274    **
275    ** Returns:         None.
276    **
277    *******************************************************************************/
278    void deleteDatabase ();
279
280
281    /*******************************************************************************
282    **
283    ** Function:        importProtocolRoute
284    **
285    ** Description:     Parse data for protocol routes.
286    **                  element: XML node for one protocol route.
287    **                  database: store data in this database.
288    **
289    ** Returns:         None.
290    **
291    *******************************************************************************/
292    void importProtocolRoute (xmlNodePtr& element, Database& database);
293
294
295    /*******************************************************************************
296    **
297    ** Function:        importTechnologyRoute
298    **
299    ** Description:     Parse data for technology routes.
300    **                  element: XML node for one technology route.
301    **                  database: store data in this database.
302    **
303    ** Returns:         None.
304    **
305    *******************************************************************************/
306    void importTechnologyRoute (xmlNodePtr& element, Database& database);
307};
308
309