/* * 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 <string> #include <vector> /***************************************************************************** ** ** 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_t* buffer() { return mBuffer; }; int length() { return mBufferLen; }; private: uint8_t* mBuffer; uint32_t 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); };