You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
8.9 KiB
288 lines
8.9 KiB
/*
|
|
* 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);
|
|
};
|