/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Import and export general routing data using a XML file. */ #pragma once #include "NfcJniUtil.h" #include "nfa_api.h" #include <libxml/parser.h> #include <vector> #include <string> /***************************************************************************** ** ** Name: RouteData ** ** Description: Base class for every kind of route data. ** *****************************************************************************/ class RouteData { public: enum RouteType {ProtocolRoute, TechnologyRoute}; RouteType mRouteType; protected: RouteData (RouteType routeType) : mRouteType (routeType) {} }; /***************************************************************************** ** ** Name: RouteDataForProtocol ** ** Description: Data for protocol routes. ** *****************************************************************************/ class RouteDataForProtocol : public RouteData { public: int mNfaEeHandle; //for example 0x4f3, 0x4f4 bool mSwitchOn; bool mSwitchOff; bool mBatteryOff; tNFA_PROTOCOL_MASK mProtocol; RouteDataForProtocol () : RouteData (ProtocolRoute), mNfaEeHandle (NFA_HANDLE_INVALID), mSwitchOn (false), mSwitchOff (false), mBatteryOff (false), mProtocol (0) {} }; /***************************************************************************** ** ** Name: RouteDataForTechnology ** ** Description: Data for technology routes. ** *****************************************************************************/ class RouteDataForTechnology : public RouteData { public: int mNfaEeHandle; //for example 0x4f3, 0x4f4 bool mSwitchOn; bool mSwitchOff; bool mBatteryOff; tNFA_TECHNOLOGY_MASK mTechnology; RouteDataForTechnology () : RouteData (TechnologyRoute), mNfaEeHandle (NFA_HANDLE_INVALID), mSwitchOn (false), mSwitchOff (false), mBatteryOff (false), mTechnology (0) {} }; /*****************************************************************************/ /*****************************************************************************/ /***************************************************************************** ** ** Name: AidBuffer ** ** Description: Buffer to store AID after converting a string of hex ** values to bytes. ** *****************************************************************************/ class AidBuffer { public: /******************************************************************************* ** ** Function: AidBuffer ** ** Description: Parse a string of hex numbers. Store result in an array of ** bytes. ** aid: string of hex numbers. ** ** Returns: None. ** *******************************************************************************/ AidBuffer (std::string& aid); /******************************************************************************* ** ** Function: ~AidBuffer ** ** Description: Release all resources. ** ** Returns: None. ** *******************************************************************************/ ~AidBuffer (); UINT8* buffer () {return mBuffer;}; int length () {return mBufferLen;}; private: UINT8* mBuffer; UINT32 mBufferLen; }; /*****************************************************************************/ /*****************************************************************************/ /***************************************************************************** ** ** Name: RouteDataSet ** ** Description: Import and export general routing data using a XML file. ** See /data/bcm/param/route.xml ** *****************************************************************************/ class RouteDataSet { public: typedef std::vector<RouteData*> Database; enum DatabaseSelection {DefaultRouteDatabase, SecElemRouteDatabase}; /******************************************************************************* ** ** Function: ~RouteDataSet ** ** Description: Release all resources. ** ** Returns: None. ** *******************************************************************************/ ~RouteDataSet (); /******************************************************************************* ** ** Function: initialize ** ** Description: Initialize resources. ** ** Returns: True if ok. ** *******************************************************************************/ bool initialize (); /******************************************************************************* ** ** Function: import ** ** Description: Import data from an XML file. Fill the database. ** ** Returns: True if ok. ** *******************************************************************************/ bool import (); /******************************************************************************* ** ** Function: getDatabase ** ** Description: Obtain a database of routing data. ** selection: which database. ** ** Returns: Pointer to database. ** *******************************************************************************/ Database* getDatabase (DatabaseSelection selection); /******************************************************************************* ** ** Function: saveToFile ** ** Description: Save XML data from a string into a file. ** routesXml: XML that represents routes. ** ** Returns: True if ok. ** *******************************************************************************/ static bool saveToFile (const char* routesXml); /******************************************************************************* ** ** Function: loadFromFile ** ** Description: Load XML data from file into a string. ** routesXml: string to receive XML data. ** ** Returns: True if ok. ** *******************************************************************************/ static bool loadFromFile (std::string& routesXml); /******************************************************************************* ** ** Function: deleteFile ** ** Description: Delete route data XML file. ** ** Returns: True if ok. ** *******************************************************************************/ static bool deleteFile (); /******************************************************************************* ** ** Function: printDiagnostic ** ** Description: Print some diagnostic output. ** ** Returns: None. ** *******************************************************************************/ void printDiagnostic (); private: Database mSecElemRouteDatabase; //routes when NFC service selects sec elem Database mDefaultRouteDatabase; //routes when NFC service deselects sec elem static const char* sConfigFile; static const bool sDebug = false; /******************************************************************************* ** ** Function: deleteDatabase ** ** Description: Delete all routes stored in all databases. ** ** Returns: None. ** *******************************************************************************/ void deleteDatabase (); /******************************************************************************* ** ** Function: importProtocolRoute ** ** Description: Parse data for protocol routes. ** element: XML node for one protocol route. ** database: store data in this database. ** ** Returns: None. ** *******************************************************************************/ void importProtocolRoute (xmlNodePtr& element, Database& database); /******************************************************************************* ** ** Function: importTechnologyRoute ** ** Description: Parse data for technology routes. ** element: XML node for one technology route. ** database: store data in this database. ** ** Returns: None. ** *******************************************************************************/ void importTechnologyRoute (xmlNodePtr& element, Database& database); };