C++程序  |  157行  |  4.8 KB

/*
 * 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.
 */

/*
 *  Manage listen-mode AID routing to the host.
 */
#pragma once
#include "SyncEvent.h"
#include "NfcJniUtil.h"
#include "RouteDataSet.h"
#include <vector>
extern "C"
{
    #include "nfa_api.h"
}


class HostAidRouter
{
public:
    /*******************************************************************************
    **
    ** Function:        getInstance
    **
    ** Description:     Obtain a reference to the singleton object of HostAidRouter
    **
    ** Returns:         Reference to HostAidRouter object.
    **
    *******************************************************************************/
    static HostAidRouter& getInstance ();


    /*******************************************************************************
    **
    ** Function:        initialize
    **
    ** Description:     Initialize all resources.
    **
    ** Returns:         True if ok.
    **
    *******************************************************************************/
    bool initialize ();


    /*******************************************************************************
    **
    ** Function:        addPpseRoute
    **
    ** Description:     Route Proximity Payment System Environment request
    **                  to the host.  This function is called when there is no
    **                  route data.
    **
    ** Returns:         True if ok.
    **
    *******************************************************************************/
    bool addPpseRoute ();


    /*******************************************************************************
    **
    ** Function:        deleteAllRoutes
    **
    ** Description:     Delete all AID routes to the host.
    **
    ** Returns:         True if ok.
    **
    *******************************************************************************/
    bool deleteAllRoutes ();


    /*******************************************************************************
    **
    ** Function:        isFeatureEnabled
    **
    ** Description:     Is AID-routing-to-host feature enabled?
    **
    ** Returns:         True if enabled.
    **
    *******************************************************************************/
    bool isFeatureEnabled () {return mIsFeatureEnabled;};


    /*******************************************************************************
    **
    ** Function:        startRoute
    **
    ** Description:     Begin to route AID request to the host.
    **                  aid: Buffer that contains Application ID
    **                  aidLen: Actual length of the buffer.
    **
    ** Returns:         True if ok.
    **
    *******************************************************************************/
    bool startRoute (const UINT8* aid, UINT8 aidLen);


private:
    typedef std::vector<tNFA_HANDLE> AidHandleDatabase;

    tNFA_HANDLE mTempHandle;
    bool mIsFeatureEnabled;
    static HostAidRouter sHostAidRouter; //singleton object
    RouteDataSet mRouteDataSet; //route data from xml file
    SyncEvent mRegisterEvent;
    SyncEvent mDeregisterEvent;
    AidHandleDatabase mHandleDatabase; //store all AID handles that are registered with the stack


    /*******************************************************************************
    **
    ** Function:        HostAidRouter
    **
    ** Description:     Private constructor to prevent public call.
    **
    ** Returns:         None.
    **
    *******************************************************************************/
    HostAidRouter ();


    /*******************************************************************************
    **
    ** Function:        ~HostAidRouter
    **
    ** Description:     Private destructor to prevent public call.
    **
    ** Returns:         None.
    **
    *******************************************************************************/
    ~HostAidRouter ();


    /*******************************************************************************
    **
    ** Function:        stackCallback
    **
    ** Description:     Receive events from the NFC stack.
    **
    ** Returns:         None.
    **
    *******************************************************************************/
    static void stackCallback (UINT8 event, tNFA_CONN_EVT_DATA* eventdata);
};