#ifndef IFELICA_H
#define IFELICA_H
/*=============================================================================================

FILE            : IFeliCa.h

SERVICES        : BREW Felica

DESCRIPTION     : Felica Extension Global Header

PUBLIC CLASSES  : なし

INITIALIZATION AND SEQUENCING REQUIREMENTS : なし

     Copyright 2004-2005 Felica Networks, Inc.
              All Rights Reserved.
        Felica Networks, Inc. Proprietary

=============================================================================================*/

/*=============================================================================================
 INCLUDES AND VARIABLE DEFINITIONS
=============================================================================================*/

/*=====================================================================
 Include Files
=====================================================================*/
#include "AEE.h"
//#include "AEEInterface.h"

/*=====================================================================
 Macros
=====================================================================*/

//---------------------------------------------------------------------
// FeliCa Extension 復帰値/処理結果
//---------------------------------------------------------------------
//#define SUCCESS                         (0)                   // AEEError.hにて定義されている
#define EFELICA_FAILED                  (-1)
#define EFELICA_BADPARAM                (-2)
#define EFELICA_CLOSED                  (-3)
#define EFELICA_ALREADY                 (-4)
#define EFELICA_BADSTATE                (-5)
#define EFELICA_NOMEMORY                (-6)
#define EFELICA_EXIST                   (-7)
#define EFELICA_NOTEXIST                (-8)
#define EFELICA_PRIVLEVEL               (-9)
#define EFELICA_TIMEOUT                 (-10)
#define EFELICA_BADSERVICE              (-11)
#define EFELICA_BADBLOCKNO              (-12)
#define EFELICA_PURSE_FAILED            (-13)
#define EFELICA_CASHBACK_FAILED         (-14)
#define EFELICA_CYCLIC_FAILED           (-15)
#define EFELICA_PIN_FAILED              (-16)
#define EFELICA_PARENT_PIN_FAILED       (-17)
#define EFELICA_PIN_COUNT_OVER          (-18)
#define EFELICA_PIN_LOCKOUT             (-19)
#define EFELICA_PIN_ATTRIBUTE           (-20)
#define EFELICA_INTERRUPTED             (-21)
#define EFELICA_TCAP                    (-22)
#define EFELICA_CONNECT                 (-23)
#define EFELICA_HTTP                    (-24)
#define EFELICA_BUSY                    (-25)

//---------------------------------------------------------------------
// FeliCa Extension Timeout Value
//---------------------------------------------------------------------
#define FELICA_TIMEOUT_MIN              (500)
#define FELICA_TIMEOUT_MAX              (60000)

//---------------------------------------------------------------------
// FeliCa Extension Retry Count
//---------------------------------------------------------------------
#define FELICA_RETRY_MIN                (0)
#define FELICA_RETRY_MAX                (10)

//---------------------------------------------------------------------
// FeliCa Extension Service List Max Value
//---------------------------------------------------------------------
#define FELICA_SERVICELIST_MAX          (32)

//---------------------------------------------------------------------
// FeliCa Extension Block List Max Value
//---------------------------------------------------------------------
#define FELICA_BLOCKLIST_MAX            (16)

//---------------------------------------------------------------------
// FeliCa Extension PIN Max Value
//---------------------------------------------------------------------
#define FELICA_PINLIST_MAX              (8)

//---------------------------------------------------------------------
// Mobile FeliCa Chip Block Size
//---------------------------------------------------------------------
#define FELICA_BLOCKSIZE                (16)

//---------------------------------------------------------------------
// Purse Service User Data Value
//---------------------------------------------------------------------
#define FELICA_PURSE_USERDATASIZE       (6)

//---------------------------------------------------------------------
// データ送受信パケット最大サイズ
//---------------------------------------------------------------------
#define FELICA_COMMANDSIZE              (245)

//---------------------------------------------------------------------
// Default Device Info
//---------------------------------------------------------------------
#define FELICA_DEVICE_TYPE_FELICA       "FeliCa"
#define FELICA_DEVICE_TYPE_GENERIC      "Generic"
#define FELICA_DEVICE_NAME_RW           "R/W"
#define FELICA_DEVICE_NAME_DISPLAY      "Display"
#define FELICA_DEVICE_ID001             (0x0001)
#define FELICA_DEVICE_ID002             (0x0002)
#define FELICA_DEVICE_ID_BASE            FELICA_DEVICE_ID001

//---------------------------------------------------------------------
// ランダムサービスにて読み込んだデータの取得
//---------------------------------------------------------------------
#define FELICA_GET_BLOCKLIST_RANDOM(pBlockData, pData) \
{ \
   MEMCPY((pData), \
          (pBlockData)->BlockData.RandomData.byBlockData, \
          sizeof((pBlockData)->BlockData.RandomData.byBlockData)); \
}

//---------------------------------------------------------------------
// ランダムサービスにて書き込むためのデータ設定
//---------------------------------------------------------------------
#define FELICA_SET_BLOCKLIST_RANDOM(pBlockData, pData) \
{ \
   MEMCPY((pBlockData)->BlockData.RandomData.byBlockData, \
          (pData), \
          sizeof((pBlockData)->BlockData.RandomData.byBlockData)); \
}

//---------------------------------------------------------------------
// サイクリックサービスにて読み込んだデータの取得
//---------------------------------------------------------------------
#define     FELICA_GET_BLOCKLIST_CYCLIC(pBlockData, pData) \
{ \
   MEMCPY((pData), \
          (pBlockData)->BlockData.CyclicData.byBlockData, \
          sizeof((pBlockData)->BlockData.CyclicData.byBlockData)); \
}

//---------------------------------------------------------------------
// サイクリックサービスにて書き込むためのデータ設定
//---------------------------------------------------------------------
#define FELICA_SET_BLOCKLIST_CYCLIC(pBlockData, pData) \
{ \
   MEMCPY((pBlockData)->BlockData.CyclicData.byBlockData, \
          (pData), \
          sizeof((pBlockData)->BlockData.CyclicData.byBlockData)); \
}

//---------------------------------------------------------------------
// パースサービスにて読み込んだデータの取得
//---------------------------------------------------------------------
#define FELICA_GET_BLOCKLIST_PURSEDIRECT(pBlockData, pdwPurse, pdwCashback, pUser, pwExID) \
{ \
   *(pdwPurse)    = (pBlockData)->BlockData.PurseDirectData.dwPurseData; \
   *(pdwCashback) = (pBlockData)->BlockData.PurseDirectData.dwCashBackData; \
   MEMCPY((pUser), \
          (pBlockData)->BlockData.PurseDirectData.byUserData, \
          sizeof((pBlockData)->BlockData.PurseDirectData.byUserData)); \
   *(pwExID)      = (pBlockData)->BlockData.PurseDirectData.wExecutionID; \
}

//---------------------------------------------------------------------
// パースサービス(ダイレクトアクセス)にて書き込むためのデータ設定
//---------------------------------------------------------------------
#define FELICA_SET_BLOCKLIST_PURSEDIRECT(pBlockData, pdwPurse, pdwCashback, pUser, pwExID) \
{ \
   (pBlockData)->BlockData.PurseDirectData.dwPurseData = (*pdwPurse); \
   (pBlockData)->BlockData.PurseDirectData.dwCashBackData  = (*pdwCashback); \
   MEMCPY((pBlockData)->BlockData.PurseDirectData.byUserData, \
          (pUser), \
          sizeof((pBlockData)->BlockData.PurseDirectData.byUserData)); \
   (pBlockData)->BlockData.PurseDirectData.wExecutionID = (*pwExID); \
}

//---------------------------------------------------------------------
// パースサービス(デクリメントアクセス)にて書き込むためのデータ設定
//---------------------------------------------------------------------
#define FELICA_SET_BLOCKLIST_PURSEDECREMENT(pBlockData, pdwDecrement, pwExID) \
{ \
   (pBlockData)->BlockData.PurseCashBackData.bDecrementWriteFlag = TRUE; \
   (pBlockData)->BlockData.PurseDecrementData.dwDecrementData = (*pdwDecrement); \
   (pBlockData)->BlockData.PurseDecrementData.wExecutionID = (*pwExID); \
}

//---------------------------------------------------------------------
// パースサービス(キャッシュバックアクセス)にて書き込むためのデータ設定
//---------------------------------------------------------------------
#define FELICA_SET_BLOCKLIST_PURSECASHBACK(pBlockData, pdwCashback, pwExID) \
{ \
   (pBlockData)->BlockData.PurseCashBackData.bDecrementWriteFlag = FALSE; \
   (pBlockData)->BlockData.PurseCashBackData.dwCashBackData = (*pdwCashback); \
   (pBlockData)->BlockData.PurseCashBackData.wExecutionID = (*pwExID); \
}

/*=====================================================================
 Type Declarations
=====================================================================*/

//---------------------------------------------------------------------
// IDmを格納するためのデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaIDm {
   uint8        IDm[8];
} FeliCaIDm;

//---------------------------------------------------------------------
// サービスリストを格納するデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaServiceList {
   uint32       nCount;
   uint16       wList[FELICA_SERVICELIST_MAX];
} FeliCaServiceList;

//---------------------------------------------------------------------
// 鍵バージョンを格納するためのデータ型
//---------------------------------------------------------------------
typedef FeliCaServiceList   FeliCaKeyVersionList;

//---------------------------------------------------------------------
// ランダムサービスアクセス時に使用するブロックデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaRandomData {
   uint8        byBlockData[FELICA_BLOCKSIZE];
} FeliCaRandomData;

//---------------------------------------------------------------------
// サイクリックサービスアクセス時に使用するブロックデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaCyclicData {
   uint8        byBlockData[FELICA_BLOCKSIZE];
} FeliCaCyclicData;

//---------------------------------------------------------------------
// パースサービスのダイレクトアクセス時と、パースサービスのデータ読み出し時に使用するブロック
// データ型
//---------------------------------------------------------------------
typedef struct _FeliCaPurseDirectData {
   uint32       dwPurseData;
   uint32       dwCashBackData;
   uint8        byUserData[FELICA_PURSE_USERDATASIZE];
   uint16       wExecutionID;
} FeliCaPurseDirectData;

//---------------------------------------------------------------------
// パースサービスのデクリメントアクセス時に使用するブロックデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaPurseDecrementData {
   uint32       dwDecrementData;
   boolean      bDecrementWriteFlag;
   uint8        byReserve[9];
   uint16       wExecutionID;
} FeliCaPurseDecrementData;

//---------------------------------------------------------------------
// パースサービスのキャッシュバックアクセス時に使用するブロックデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaPurseCashBackData {
   uint32       dwCashBackData;
   boolean      bDecrementWriteFlag;
   uint8        byReserve[9];
   uint16       wExecutionID;
} FeliCaPurseCashBackData;

//---------------------------------------------------------------------
// 各サービスのブロックデータを定義したデータ型
//---------------------------------------------------------------------
typedef union _FeliCaBlockData {
   FeliCaRandomData             RandomData;
   FeliCaCyclicData             CyclicData;
   FeliCaPurseDirectData        PurseDirectData;
   FeliCaPurseDecrementData     PurseDecrementData;
   FeliCaPurseCashBackData      PurseCashBackData;
} FeliCaBlockData;

//---------------------------------------------------------------------
// ブロックデータをRead/Writeする際に使用するデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaBlock {
   uint16           wService;
   uint16           wBlockNo;
   FeliCaBlockData  BlockData;
} FeliCaBlock;

//---------------------------------------------------------------------
// ブロックデータをRead/Writeする際に使用するデータリスト型
//---------------------------------------------------------------------
typedef struct _FeliCaBlockList {
   uint32       nCount;
   FeliCaBlock  BlockList[FELICA_BLOCKLIST_MAX];
} FeliCaBlockList;

//---------------------------------------------------------------------
// PIN照合で使用するデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaPinCheck {
   uint16       wServiceCode;
   uint32       dwPIN;
} FeliCaPinCheck;

//---------------------------------------------------------------------
// PIN照合で使用するデータリスト型
//---------------------------------------------------------------------
typedef struct _FeliCaPinCheckList {
   uint32           nCount;
   FeliCaPinCheck   PinCheckList[FELICA_PINLIST_MAX];
} FeliCaPinCheckList;

//---------------------------------------------------------------------
// PIN有効化/PIN無効化で使用するデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaPinEnable {
   uint16       wServiceCode; 
   uint32       dwPIN;
   boolean      bFlag;
} FeliCaPinEnable;

//---------------------------------------------------------------------
// PIN有効化/PIN無効化で使用するデータリスト型
//---------------------------------------------------------------------
typedef struct _FeliCaPinEnableList {
   uint32           nCount; 
   FeliCaPinEnable  PinEnableList[FELICA_PINLIST_MAX]; 
} FeliCaPinEnableList;


//---------------------------------------------------------------------
// PIN変更で使用するデータ型
//---------------------------------------------------------------------
typedef struct _FeliCaPinChange {
   uint16       wServiceCode; 
   uint32       dwOldPIN;
   uint32       dwNewPIN;
} FeliCaPinChange;

//---------------------------------------------------------------------
// PIN変更で使用するデータリスト型
//---------------------------------------------------------------------
typedef struct _FeliCaPinChangeList {
   uint32           nCount;
   FeliCaPinChange  PinChangeList[FELICA_PINLIST_MAX];
} FeliCaPinChangeList;

//---------------------------------------------------------------------
// 各PIN操作型を定義したデータ型
//---------------------------------------------------------------------
typedef union _FeliCaPinOperateInfo {
   FeliCaPinCheckList  PinCheck; 
   FeliCaPinEnableList PinEnable; 
   FeliCaPinChangeList PinChange; 
} FeliCaPinOperateInfo;

//---------------------------------------------------------------------
// PIN操作を指定する際に使用する列挙型
//---------------------------------------------------------------------
typedef enum _FeliCaPinOperate {
   FELICA_PIN_CHECK,
   FELICA_PIN_ENABLE, 
   FELICA_PIN_CHANGE
} FeliCaPinOperate;

//---------------------------------------------------------------------
// モバイルFeliCaチップのオープン/クローズ状態を表す列挙型
//---------------------------------------------------------------------
typedef enum _FeliCaStatus {
   FELICA_STATUS_OPENING,
   FELICA_STATUS_OPENED,
   FELICA_STATUS_CLOSING,
   FELICA_STATUS_CLOSED
} FeliCaStatus;

//---------------------------------------------------------------------
// モバイルFeliCaチップの処理モードを表す列挙型
//---------------------------------------------------------------------
typedef enum _FeliCaMode {
   FELICA_MODE_ONLINE, 
   FELICA_MODE_OFFLINE 
} FeliCaMode;
//---------------------------------------------------------------------
// モバイルFeliCaチップコマンド送受信用構造体
//---------------------------------------------------------------------
typedef struct _FeliCaCommand {
   uint32            dwSize;
   uint8             byCommand[FELICA_COMMANDSIZE];
} FeliCaCommand;

//---------------------------------------------------------------------
// モバイルFeliCaチップにアクセスが発生するAPIの結果通知に使用するコールバック関数の型
//---------------------------------------------------------------------
typedef void (*PFFELICARESULT)(void    *pUser, 
                               int      Result);

//---------------------------------------------------------------------
//オンライン処理において正常終了イベントが発生した場合に実行されるリスナー関数
//---------------------------------------------------------------------
typedef void (*PFFELICALISTENERFINISH)(void    *pUser,
                                       uint32   dwStatus);

//---------------------------------------------------------------------
// オンライン処理においてデバイス操作イベントが発生した場合に実行されるリスナー関数
//---------------------------------------------------------------------
typedef void (*PFFELICALISTENERDEVICE)(void     *pUser,
                                       uint16    wDeviceID,
                                       char     *pszParam,
                                       uint8    *pbyData,
                                       uint16    wSize);

//---------------------------------------------------------------------
// オンライン処理において異常終了イベントが発生した場合に実行されるリスナー関数
//---------------------------------------------------------------------
typedef void (*PFFELICALISTENERERROR)(void         *pUser,
                                      int           Type,
                                      const char   *pszMessage);

/*=====================================================================
 Interface Definitions
=====================================================================*/
typedef struct IFeliCa IFeliCa;

/*=====================================================================
 IFELICA Interface
=====================================================================*/
AEEINTERFACE(IFeliCa){
   INHERIT_IBase(IFeliCa);
   // Common
   int          (*Open)                 (IFeliCa *po, PFFELICARESULT pfn, void *pUser);
   int          (*Close)                (IFeliCa *po, PFFELICARESULT pfn, void *pUser);
   FeliCaStatus (*GetStatus)            (IFeliCa *po);
   FeliCaMode   (*GetMode)              (IFeliCa *po);
   // Online
   int          (*Start)                (IFeliCa *po, const char *pszURL);
   int          (*Stop)                 (IFeliCa *po);
   int          (*SetListener)          (IFeliCa *po, 
                                         PFFELICALISTENERFINISH pfnFinish, void *pFinish,
                                         PFFELICALISTENERDEVICE pfnDevice, void *pDevice,
                                         PFFELICALISTENERERROR  pfnError,  void *pError);
   int          (*AddDevice)            (IFeliCa *po, const char *pszDeviceType, const char *pszDeviceName, uint16 *pwDeviceID);
   int          (*GetDeviceID)          (IFeliCa *po, const char *pszDeviceType, const char *pszDeviceName, uint16 *pwDeviceID);
   int          (*GetDevice)            (IFeliCa *po, uint16 wDeviceID, char *pszDeviceType, char *pszDeviceName);
   int          (*ClearAllDevices)      (IFeliCa *po);
   int          (*CompleteOperateDevice)(IFeliCa *po, const char *pszSendMsg, uint16 wSize, int nResult);
   // Offline
   int          (*SetSystemCode)        (IFeliCa *po, uint16 wSystemCode, PFFELICARESULT pfn, void *pUser);
   int          (*GetSystemCode)        (IFeliCa *po, uint16 *pwSystemCode);
   int          (*GetIDm)               (IFeliCa *po, FeliCaIDm *pIDm);
   int          (*GetICCode)            (IFeliCa *po, uint16 *pwICCode);
   int          (*GetKeyVersion)        (IFeliCa *po, FeliCaServiceList *pServiceList, FeliCaKeyVersionList *pKeyVersionList,
                                         PFFELICARESULT pfn, void *pUser);
   int          (*Read)                 (IFeliCa *po, FeliCaBlockList *pBlockList, PFFELICARESULT pfn, void *pUser);
   int          (*Write)                (IFeliCa *po, FeliCaBlockList *pBlockList, PFFELICARESULT pfn, void *pUser);
   int          (*PIN)                  (IFeliCa *po, FeliCaPinOperate Operate, FeliCaPinOperateInfo *pInfo, 
                                         PFFELICARESULT pfn, void *pUser);
   int          (*Activate)             (IFeliCa *po, PFFELICARESULT pfn, void *pUser);
   int          (*Inactivate)           (IFeliCa *po, PFFELICARESULT pfn, void *pUser);
   boolean      (*IsActivated)          (IFeliCa *po);
   int          (*SetTimeout)           (IFeliCa *po, uint32 nTimeout);
   int          (*GetTimeout)           (IFeliCa *po, uint32 *pnTimeout);
   int          (*SetRetryCount)        (IFeliCa *po, uint32 nCount);
   int          (*GetRetryCount)        (IFeliCa *po, uint32 *pnCount);
   int          (*ExecCommand)          (IFeliCa *po, FeliCaCommand *pReqCmd, FeliCaCommand *pResCmd, PFFELICARESULT pfn, void *pUser);
};

/*=====================================================================
 Function Declarations
=====================================================================*/

// Common
#define IFELICA_AddRef(p)                               AEEGETPVTBL((p),IFeliCa)->AddRef((p))
#define IFELICA_Release(p)                              AEEGETPVTBL((p),IFeliCa)->Release((p))
#define IFELICA_Open(p,pfn,pUser)                       AEEGETPVTBL((p),IFeliCa)->Open((p),(pfn),(pUser))
#define IFELICA_Close(p,pfn,pUser)                      AEEGETPVTBL((p),IFeliCa)->Close((p),(pfn),(pUser))
#define IFELICA_GetStatus(p)                            AEEGETPVTBL((p),IFeliCa)->GetStatus((p))
#define IFELICA_GetMode(p)                              AEEGETPVTBL((p),IFeliCa)->GetMode((p))
// Online
#define IFELICA_Start(p,pURL)                           AEEGETPVTBL((p),IFeliCa)->Start((p),(pURL))
#define IFELICA_Stop(p)                                 AEEGETPVTBL((p),IFeliCa)->Stop((p))
#define IFELICA_SetListener(p,pFE,pUE,pFD,pUD,pFF,pUF)  AEEGETPVTBL((p),IFeliCa)->SetListener((p),(pFE),(pUE),(pFD),(pUD),(pFF),(pUF))
#define IFELICA_AddDevice(p,pType,pName,pID)            AEEGETPVTBL((p),IFeliCa)->AddDevice((p),(pType),(pName),(pID))
#define IFELICA_GetDeviceID(p,pType,pName,pID)          AEEGETPVTBL((p),IFeliCa)->GetDeviceID((p),(pType),(pName),(pID))
#define IFELICA_GetDevice(p,ID,pType,pName)             AEEGETPVTBL((p),IFeliCa)->GetDevice((p),(ID),(pType),(pName))
#define IFELICA_ClearAllDevices(p)                      AEEGETPVTBL((p),IFeliCa)->ClearAllDevices((p))
#define IFELICA_CompleteOperateDevice(p,pMsg,pSize)     AEEGETPVTBL((p),IFeliCa)->CompleteOperateDevice((p),(pMsg),(pSize), SUCCESS)
#define IFELICA_AbortOperateDevice(p,pMsg)              AEEGETPVTBL((p),IFeliCa)->CompleteOperateDevice((p),(pMsg),(0), EFELICA_FAILED)
// Offline
#define IFELICA_SetSystemCode(p,Code,pfn,pUser)         AEEGETPVTBL((p),IFeliCa)->SetSystemCode((p),(Code),(pfn),(pUser))
#define IFELICA_GetSystemCode(p,pCode)                  AEEGETPVTBL((p),IFeliCa)->GetSystemCode((p),(pCode))
#define IFELICA_GetIDm(p,pIDm)                          AEEGETPVTBL((p),IFeliCa)->GetIDm((p),(pIDm))
#define IFELICA_GetICCode(p,pwICCode)                   AEEGETPVTBL((p),IFeliCa)->GetICCode((p),(pwICCode))
#define IFELICA_GetKeyVersion(p,pILst,pOLst,pfn,pUser)  AEEGETPVTBL((p),IFeliCa)->GetKeyVersion((p),(pILst),(pOLst),(pfn),(pUser))
#define IFELICA_Read(p,pList,pfn,pUser)                 AEEGETPVTBL((p),IFeliCa)->Read((p),(pList),(pfn),(pUser))
#define IFELICA_Write(p,pList,pfn,pUser)                AEEGETPVTBL((p),IFeliCa)->Write((p),(pList),(pfn),(pUser))
#define IFELICA_PIN(p,Ope,pInfo,pfn,pUser)              AEEGETPVTBL((p),IFeliCa)->PIN((p),(Ope),(pInfo),(pfn),(pUser))
#define IFELICA_Activate(p,pfn,pUser)                   AEEGETPVTBL((p),IFeliCa)->Activate((p),(pfn),(pUser))
#define IFELICA_Inactivate(p,pfn,pUser)                 AEEGETPVTBL((p),IFeliCa)->Inactivate((p),(pfn),(pUser))
#define IFELICA_IsActivated(p)                          AEEGETPVTBL((p),IFeliCa)->IsActivated((p))
#define IFELICA_SetTimeout(p,Time)                      AEEGETPVTBL((p),IFeliCa)->SetTimeout((p),(Time))
#define IFELICA_GetTimeout(p,pTime)                     AEEGETPVTBL((p),IFeliCa)->GetTimeout((p),(pTime))
#define IFELICA_SetRetryCount(p,Count)                  AEEGETPVTBL((p),IFeliCa)->SetRetryCount((p),(Count))
#define IFELICA_GetRetryCount(p,pCount)                 AEEGETPVTBL((p),IFeliCa)->GetRetryCount((p),(pCount))
#define IFELICA_ExecCommand(p,pRqCmd,pRsCmd,pfn,pUser)  AEEGETPVTBL((p),IFeliCa)->ExecCommand((p),(pRqCmd),(pRsCmd),(pfn),(pUser))

/*=============================================================================================

 インタフェース説明

===============================================================================================

IFELICA_AddRef()

Description     :
  IFeliCaオブジェクトの参照カウンタをインクリメントする。

Prototype       :
  uint32    IFELICA_AddRef(IFeliCa     *po);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  0以上         : 正常終了
                  インクリメント後の参照カウンタの値

Comment         : 
  なし

See Also        :
  IFELICA_Release()

===============================================================================================

IFELICA_Release()

Description     :
  IFeliCaオブジェクトの参照カウンタをインクリメントする。

Prototype       :
  uint32    IFELICA_Release(IFeliCa    *po);
  
Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  0以上         : 正常終了
                  デクリメントした後の参照カウンタの値

Comment         : 
  ・モバイルFeliCaチップの状態がクローズ以外の状態でコールされた場合は、モバイルFeliCaチッ
    プをクローズ状態にする。
  ・本関数が実行された時点で、登録されている全てのコールバック関数及びリスナー関数は実行せ
    ずに破棄する。
  ・Online状態でコールした場合の動作は、IFELICA_Close()をOnline状態でコールした場合の動作と
    同様とする。詳細はIFELICA_Close()を参照。

See Also        :
  IFELICA_AddRef()
  IFELICA_Close()

===============================================================================================

IFELICA_Open()

Description     :
  モバイルFeliCaチップをオープンする。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、オープンの要求を正常に受け付けたことを意味する。
  オープンが正常に完了したかどうかは指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_Open(IFeliCa           *po,
                         PFFELICARESULT     pfn,
                         void              *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pfn           : オープン処理が終了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pfnがNULL
  EFELICA_BADSTATE      : 自オブジェクトが使用中
  EFELICA_FAILED        : 異常終了

Comment         :
  ・モバイルFeliCaチップを使用する場合、最初に本関数をコールする必要がある。
  ・SUCCESS以外が復帰した場合、指定したコールバック関数からの通知は行わない。
  ・EFELICA_BADSTATEが復帰した場合、自オブジェクトが既に使用中である。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了

See Also        :
  IFELICA_Close()
  PFFELICARESULT

===============================================================================================

IFELICA_Close()

Description     :
  モバイルFeliCaチップをクローズする。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、クローズの要求を正常に受け付けたことを意味する。
  クローズが正常に完了したかどうかは指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_Close(IFeliCa          *po
                          PFFELICARESULT    pfn,
                          void             *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pfn           : クローズ処理が終了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pfnがNULL
  EFELICA_CLOSED        : すでにクローズ済
  EFELICA_FAILED        : 異常終了

Comment         :
  ・SUCCESSが復帰した場合、登録されている全てのコールバック関数は実行せずに破棄する。
  ・SUCCESS以外が復帰した場合、指定したコールバック関数からの通知は行わない。
  ・Online状態でコールした場合、FSS側アプリケーションとの通信を強制的に終了する。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Release()の呼び出しが発生するまで保持される。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_FAILED    : 異常終了

See Also        :
  IFELICA_Open()
  PFFELICARESULT

===============================================================================================

IFELICA_GetStatus()

Description     :
  モバイルFeliCaチップのオープン／クローズ状態を取得する。

Prototype       :
  FeliCaStatus  IFELICA_GetStatus(IFeliCa  *po) ;

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  FELICA_STATUS_OPENING : 指定オブジェクトからのオープン処理を実行中
  FELICA_STATUS_OPENED  : 指定オブジェクトが既にオープン済み
  FELICA_STATUS_CLOSING : 指定オブジェクトからのクローズ処理を実行中
  FELICA_STATUS_CLOSED  : 指定オブジェクトが既にクローズ済み

Comment         :
  なし

See Also        :
  IFELICA_Open()
  IFELICA_Close()
  FeliCaStatus

===============================================================================================

IFELICA_GetMode()

Description     :
  現在の処理モードを取得する。
  処理モードはOnline状態とOffline状態のいずれかである。

Prototype       :
  FeliCaMode    IFELICA_GetMode(IFeliCa    *po);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  FELICA_MODE_ONLINE    : Online状態
  FELICA_MODE_OFFLINE   : Offline状態

Comment         :
  ・モバイルFeliCaチップがクローズ状態の場合は、FELICA_MODE_OFFLINEを返す。

See Also        :
  FeliCaMode

===============================================================================================

IFELICA_Start()

Description     :
  URLで指定したサーバとのオンライン処理を開始する。
  本関数は即座に復帰する。
  本関数がSUCCESSで復帰した時点からOnline状態となる。
  通信が正常終了した場合、IFELICA_SetListener()にて登録した正常終了イベント用リスナー関
  数(PFFELICALISTENERFINISH)を実行する。
  通信が異常終了した場合、IFELICA_SetListener()にて登録した異常終了イベント用リスナー関
  数(PFFELICALISTENERERROR)を実行する。

Prototype       :
  int       IFELICA_Start(IFeliCa      *po,
                          const char   *pszURL);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pszURL        : URL文字列が格納されている領域へのポインタ
                  URLはNULL終端すること

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pszURLがNULL
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_FAILED        : 異常終了
                          すべてのリスナー関数が登録されていない場合

Comment         :
  本関数がSUCCESSを復帰した時点からリスナー関数で終了が通知されるまで、Online状態となる。
  Online状態ではOffline機能のすべてとOnline機能の一部が使用不可となる。
  すべてのリスナー関数を登録していない状態で、本関数を実行した場合、EFELICA_FAILEDを返却
  する。従って、本関数を使用する前に、IFELICA_SetListener()にて、すべてのリスナー関数を
  登録しておくこと。

See Also        :
  IFELICA_Stop()
  IFELICA_SetListener()
  PFFELICALISTENERFINISH
  PFFELICALISTENERERROR

===============================================================================================

IFELICA_Stop()

Description     :
  オンライン処理を中断する。
  本関数は即座に復帰する。
  中断処理が完了した場合、Offline状態とした後、IFELICA_SetListener()にて登録した異常終了
  イベント用リスナー関数(PFFELICALISTENERERROR)を実行する。

Prototype       :
  int       IFELICA_Stop(IFeliCa   *po);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Offline状態
  EFELICA_FAILED        : 異常終了

Comment         :
  ・本関数がSUCCESSで復帰した場合、通信中断の要求を受け付けたことを意味する。
    実際の通信中断完了は異常終了のリスナー関数(PFFELICALISTENERERROR)にて通知する。
    このリスナー関数を実行するまでの間に本関数をコールした場合、本関数はSUCCESSを復帰し、何
    も処理を行わない。

See Also        :
  IFELICA_Start()
  IFELICA_SetListener()
  PFFELICALISTENERERROR

===============================================================================================

IFELICA_SetListener()

Description     :
  オンライン処理においてイベントが発生した場合にコールバック関数するリスナー関数を設定する。

Prototype       :
  int       IFELICA_SetListener(IFeliCa                *po,
                                PFFELICALISTENERFINISH  pfnFinish,
                                void                   *pFinish,
                                PFFELICALISTENERDEVICE  pfnDevice,
                                void                   *pDevice,
                                PFFELICALISTENERERROR   pfnError,
                                void                   *pError);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pfnFinish     : オンライン処理において正常終了イベントが発生した時点で、実行させるリス
                  ナー関数のポインタ
  pFinish       : コール元で設定するユーザデータへのポインタ
                  (PFFELICALISTENERFINISH用)
  pfnDevice     : オンライン処理においてデバイス操作イベントが発生した時点で、実行させる
                  リスナー関数のポインタ
  pDevice       : コール元で設定するユーザデータへのポインタ
                  (PFFELICALISTENERDEVICE用)
  pfnError      : オンライン処理において異常終了イベントが発生した時点で、実行させるリス
                  ナー関数のポインタ
  pError        : コール元で設定するユーザデータへのポインタ
                  (PFFELICALISTENERERROR用)

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了

Comment         :
  ・本関数にてリスナー関数が登録された後に、再度本関数がコールされた場合は、登録したリスナー
    関数を上書きする。また、登録したリスナー関数を破棄する場合は破棄したいリスナー関数の変
    数(pfnFinish/pfnDevice/pfnErrorのいずれかもしくは、全て)をNULL指定にて実行する。
  ・設定したリスナー関数は、再度本関数を実行するか、IFELICA_Release()が実行されるまで保持する。

See Also        :
  IFELICA_Start()
  IFELICA_Stop()
  PFFELICALISTENERFINISH
  PFFELICALISTENERDEVICE
  PFFELICALISTENERERROR

===============================================================================================

IFELICA_AddDevice()

Description     :
  オンライン処理においてイベントが発生した場合にコールバック関数するリスナー関数を設定する。

Prototype       :
  int       IFELICA_AddDevice(IFeliCa      *po,
                              const char   *pszDeviceType,
                              const char   *pszDeviceName,
                              uint16       *pwDeviceID);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pszDeviceType : デバイスタイプをASCIIコード(0x21 - 0x7E)で指定する
                  文字列長は1以上255以下(バイト)
                  NULL終端すること
  pszDeviceName : デバイス名をASCIIコード(0x21 - 0x7E)で指定する
                  文字列長は1以上255以下(バイト)
                  NULL終端すること
  pwDeviceID    : デバイスIDを格納する領域へのポインタ
                  不要な場合はNULL指定

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_EXIST         : すでに登録済みのデバイス登録の場合
  EFELICA_NOMEMORY      : メモリ不足
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pszDeviceTypeがNULL
                            pszDeviceTypeの文字列長が1未満または256以上
                            pszDeviceTypeを構成するデータが[ 0x21 ] 以上 [ 0x7E ] 以下でなかった場合
                            pszDeviceNameがNULL
                            pszDeviceNameの文字列長が1未満または256以上
                            pszDeviceNameを構成するデータが[ 0x21 ] 以上 [ 0x7E ] 以下でなかった場合
  EFELICA_FAILED        : 異常終了

Comment         :
  ・本関数はIFELICA_Start()を実行する前にコールされた時のみFSS側アプリケーションにデバイ
    ス情報の追加を行うことができる。
  ・pwDeviceIDにNULL指定を行った場合、生成したデバイスIDは返却されないが、処理は通常通り
    に行う。
  ・pszDeviceTypeとpszDeviceNameの組み合わせが、既に登録されている場合は、あらためて追加
    せずにすでに登録済みとする。
  ・以下のデバイスはあらかじめサーバに登録されているので、本関数にて登録しなくても使用す
    ることが可能である。

    デバイス            │デバイスタイプ  │デバイス名  │デバイスID
    ──────────┼────────┼──────┼───────
    モバイルFeliCaチップ│"FeliCa"        │"R/W"       │0x0001
    汎用ディスプレイ    │"Generic"       │"Display"   │0x0002

See Also        :
  IFELICA_GetDeviceID()
  IFELICA_GetDevice()
  IFELICA_ClearAllDevices()

===============================================================================================

IFELICA_GetDeviceID()

Description     :
  デバイスタイプ、デバイス名を指定して対応するデバイスIDを取得する。

Prototype       :
  int       IFELICA_GetDeviceID(IFeliCa    *po,
                                const char *pszDeviceType,
                                const char *pszDeviceName,
                                uint16     *pwDeviceID);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pszDeviceType : デバイスタイプをASCIIコード(0x21 - 0x7E)で指定する
                  文字列長は1以上255以下(バイト)
                  NULL終端すること
  pszDeviceName : デバイス名をASCIIコード(0x21 - 0x7E)で指定する
                  文字列長は1以上255以下(バイト)
                  NULL終端すること
  pwDeviceID    : デバイスIDを格納する領域へのポインタ

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_NOTEXIST      : 指定されたデバイスが存在しない
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pszDeviceTypeがNULL
                            pszDeviceTypeの文字列長が1未満または256以上
                            pszDeviceTypeを構成するデータが[ 0x21 ] 以上 [ 0x7E ] 以下でなかった場合
                            pszDeviceNameがNULL
                            pszDeviceNameの文字列長が1未満または256以上
                            pszDeviceNameを構成するデータが[ 0x21 ] 以上 [ 0x7E ] 以下でなかった場合
  EFELICA_FAILED        : 異常終了

Comment         :
  IFELICA_AddDevice()にて追加/生成した情報を返却する。

See Also        :
  IFELICA_AddDevice()
  IFELICA_GetDevice()
  IFELICA_ClearAllDevices()

===============================================================================================

IFELICA_GetDevice()

Description     :
  デバイスIDを指定してデバイスタイプ、デバイス名の取得を行う。

Prototype       :
  int       IFELICA_GetDevice(IFeliCa      *po,
                              uint16        wDeviceID,
                              char         *pszDeviceType,
                              char         *pszDeviceName);


Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  wDeviceID     : デバイスIDを指定
  pszDeviceType : デバイスタイプを格納する領域を指すポインタ
                  領域のサイズは256バイト分獲得すること
  pszDeviceName : デバイス名を格納する領域を指すポインタ
                  領域のサイズは256バイト分獲得すること

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pDeviceTypeがNULL
                            pDeviceNameがNULL
  EFELICA_NOTEXIST      : wDeviceIDにて指定されたデバイスIDが登録されていない
  EFELICA_FAILED        : 異常終了

Comment         :
  IFELICA_AddDevice()にて追加/生成した情報を返却する。

See Also        :
  IFELICA_AddDevice()
  IFELICA_GetDeviceID()
  IFELICA_ClearAllDevices()

===============================================================================================

IFELICA_ClearAllDevices()

Description     :
  IFELICA_AddDevice()で追加したデバイス情報を全て削除する。

Prototype       :
  int       IFELICA_ClearAllDevices(IFeliCa     *po);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADSTATE      : Online状態
  EFELICA_FAILED        : 異常終了

Comment         :
  IFELICA_AddDevice()にて追加/生成した情報を自オブジェクト内から全て削除する。

See Also        :
  IFELICA_AddDevice()
  IFELICA_GetDevice()
  IFELICA_GetDeviceID()

===============================================================================================

IFELICA_CompleteOperateDevice()

Description     :
  デバイス操作が正常終了したことをFeliCa Extensionに対して通知する。

Prototype       :
  int     IFELICA_CompleteOperateDevice(IFeliCa    *po,
                                        const char *pszSendMsg,
                                        uint16      wSize);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pszSendMsg    : デバイス操作結果メッセージが格納されている領域へのポインタ
  wSize         : デバイス操作結果メッセージのサイズ
                  (pszSendMsgのサイズ)
                  単位 : バイト
                  サイズは(0)以上(2^16 - 17)以下とする。

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : パラメータ異常
                            wSizeが(0)以上(2^16 - 17)以下でなかった場合。
  EFELICA_NOMEMORY      : メモリ不足
  EFELICA_FAILED        : 異常終了
                            Commentに示すタイミング以外から実行された場合。

Comment         :
  本関数は、以下のタイミングで実行すること。
    タイミング :
      デバイス操作リスナーが実行されたときから、デバイス操作正常終了通知、また
      はデバイス操作異常終了通知をコールするまで(※1)
      (※1)
        デバイス操作リスナーが実行され、デバイス操作正常終了通知、またはデバイス操作異常終了通知を
        コールする前に、以下のAPIをコールした場合も、本関数は実行不可となる。
          − 通信中断         : IFELICA_Stop()
          − クローズ         : IFELICA_Close()
          − オブジェクト解放 : IFELICA_Release()

    デバイス操作リスナーをコールし、その関数から復帰した段階で、FeliCa Extensionは待ち状態となる。
    この待ち状態の解除トリガーがデバイス操作正常終了通知、またはデバイス操作異常終了通知であるた
    め、どちらかのAPIを必ず実行すること。
    デバイス操作リスナー内からデバイス操作正常終了通知、またはデバイス操作異常終了通知がコールさ
    れた場合、FeliCa Extensionは待ち状態とはならず、そのまま処理を継続する。
    pszSendMsgがNULLの場合、FSS側アプリケーションに結果(成功)のみを通知する。

See Also        :
  IFELICA_SetListener()
  IFELICA_AbortOperateDevice()
  IFELICA_AddDevice()
  IFELICA_GetDevice()
  IFELICA_GetDeviceID()

===============================================================================================

IFELICA_AbortOperateDevice()

Description     :
  デバイス操作が異常終了したことをFeliCa Extensionに対して通知する。

Prototype       :
  int     IFELICA_AbortOperateDevice(IFeliCa    *po,
                                     const char *pszErrorMsg);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pszErrorMsg   : デバイス操作結果メッセージをASCIIコード(0x21 - 0x7E)で指定する。
                  文字列長は(0)以上(2^16 - 1)以下 (バイト)
                  NULL終端すること

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : パラメータ異常
                            pszErrorMsgの文字列長が(0)以上(2^16 - 17)以下でなかった場合。
  EFELICA_NOMEMORY      : メモリ不足
  EFELICA_FAILED        : 異常終了
                            Commentに示すタイミング以外から実行された場合。

Comment         :
  本関数は、以下のタイミングで実行すること。
    タイミング :
      デバイス操作リスナーが実行されたときから、デバイス操作正常終了通知、また
      はデバイス操作異常終了通知をコールするまで(※1)
      (※1)
        デバイス操作リスナーが実行され、デバイス操作正常終了通知、またはデバイス操作異常終了通知を
        コールする前に、以下のAPIをコールした場合も、本関数は実行不可となる。
          − 通信中断         : IFELICA_Stop()
          − クローズ         : IFELICA_Close()
          − オブジェクト解放 : IFELICA_Release()

    デバイス操作リスナーをコールし、その関数から復帰した段階で、FeliCa Extensionは待ち状態となる。
    この待ち状態の解除トリガーがデバイス操作正常終了通知、またはデバイス操作異常終了通知であるた
    め、どちらかのAPIを必ず実行すること。
    デバイス操作リスナー内からデバイス操作正常終了通知、またはデバイス操作異常終了通知がコールさ
    れた場合、FeliCa Extensionは待ち状態とはならず、そのまま処理を継続する。
    pszErrorMsgがNULLの場合、FSS側アプリケーションに結果(失敗)のみを通知する。

See Also        :
  IFELICA_SetListener()
  IFELICA_CompleteOperateDevice()
  IFELICA_AddDevice()
  IFELICA_GetDevice()
  IFELICA_GetDeviceID()

===============================================================================================

IFELICA_SetSystemCode()

Description     :
  処理対象とするシステムのシステムコードを設定する。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、システムコード設定の要求を正常に受け付けたことを
  意味する。
  システムコードの設定が正常に完了したかどうかは、指定されたコールバック関数にて通知する。
  本関数内で、指定されたシステムコードをキーとしてIDmを取得する。IDmの取得に成功した場合
  のみ、システムコードの保持を行う。同時に取得したIDmの保持を行う。
  保持したシステムコードは、IFELICA_Close()が実行されるまで有効とする。

Prototype       :
  int       IFELICA_SetSystemCode(IFeliCa          *po,
                                  uint16            wSystemCode,
                                  PFFELICARESULT    pfn,
                                  void             *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  wSystemCode   : 設定するシステムコード
  pfn           : システムコード設定が完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pfnがNULL
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_FAILED        : 異常終了

Comment         :
  ・Offline機能を使用する場合に最初に実行する必要がある。
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・本関数内で、IDmを取得する際に使用するモバイルFeliCaチップへのタイムアウト値、およびリ
    トライ回数は、IFELICA_SetTimeout()/IFELICA_SetRetryCount()によって設定された値に依存せ
    ず、常に以下の値を使用する。
      タイムアウト値 : FELICA_TIMEOUT_MIN    : [ 500 ](ms)
      リトライ回数   : FELICA_RETRY_MIN      : [   0 ](回)
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了
                          レスポンスデータが異常だった場合
                          その他、システムコード設定に失敗した場合


See Also        :
  IFELICA_GetSystemCode()
  PFFELICARESULT
  FELICA_TIMEOUT_MIN
  FELICA_RETRY_MIN

===============================================================================================

IFELICA_GetSystemCode()

Description     :
  処理対象となっているシステムのシステムコードを取得する。

Prototype       :
  int       IFELICA_GetSystemCode(IFeliCa  *po,
                                  uint16   *pwSystemCode);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pwSystemCode  : 処理対象となっているシステムコードを格納する領域へのポインタ

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : pwSystemCodeがNULL
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・IFELICA_SetSystemCode()にて設定したシステムコードを返却する。

See Also        :
  IFELICA_SetSystemCode()

===============================================================================================

IFELICA_GetIDm()

Description     :
  処理対象となっているシステムのIDmを取得する。

Prototype       :
  int       IFELICA_GetIDm(IFeliCa     *po,
                           FeliCaIDm   *pIDm);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pIDm          : IDmを格納する領域へのポインタ

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : pIDmがNULL
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・IFELICA_SetSystemCode()にて保持したIDmを返却する。

See Also        :
  IFELICA_SetSystemCode()
  FeliCaIDm

===============================================================================================

IFELICA_GetICCode()

Description     :
  処理対象となっているシステムのICコードを取得する。

Prototype       :
  int     IFELICA_GetICCode(IFeliCa         *po,
                            uint16          *pwICCode);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pwICCode      : ICコードを格納する領域へのポインタ

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : pwICCodeがNULL
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・IFELICA_SetSystemCode()にて保持したICコードを返却する。

See Also        :
  IFELICA_SetSystemCode()

===============================================================================================

IFELICA_GetKeyVersion()

Description     :
  指定したサービス(またはエリア)の鍵バージョンを取得する。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、サービス鍵バージョン取得の要求を正常に受け付けたこ
  とを意味する。
  サービス鍵バージョン取得が正常に完了したかどうかは、指定されたコールバック関数にて通知する。
  鍵バージョンが取得できた場合、データはpKeyVersionListのメンバに格納される。

Prototype       :
  int       IFELICA_GetKeyVersion(IFeliCa              *po,
                                  FeliCaServiceList    *pServiceList,
                                  FeliCaKeyVersionList *pKeyVersionList,
                                  PFFELICARESULT        pfn,
                                  void                 *pUser);

Parameters      :
  po                    : IFeliCaオブジェクトへのポインタ
  pServiceList          : 鍵バージョンを取得したいサービス(またはエリア)を指定
                          サービス数に指定できる最大値は32である。
  pKeyVersionList       : 鍵バージョンを格納する領域へのポインタ
  pfn                   : サービス鍵バージョン取得が完了した段階で実行されるコールバック関数へのポインタ
  pUser                 : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pServiceListがNULL
                            pKeyVersionListがNULL
                            pfnがNULL
                            サービス数が1以上32以下でない場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・指定したサービス(エリア)が存在しない場合、鍵バージョンには0xffffを格納する。
  ・サービス(エリア)に0xffffを指定した場合、鍵バージョンにシステムの鍵バージョンを格納する。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了
                          レスポンスデータが異常だった場合
                          その他、サービス鍵バージョン取得に失敗した場合

See Also        :
  FeliCaServiceList()
  FeliCaKeyVersionList()
  PFFELICARESULT

===============================================================================================

IFELICA_Read()

Description     :
  モバイルFeliCaチップ内のブロックからデータを読み込む。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、データ読み込みの要求を正常に受け付けたことを意味する。
  データ読み込みが正常に完了したかどうかは、指定されたコールバック関数にて通知する。
  正常に読み込みが行われた場合、読み込みデータは、pBlockListのメンバに格納される。

Prototype       :
  int       IFELICA_Read(IFeliCa           *po,
                         FeliCaBlockList   *pBlockList,
                         PFFELICARESULT     pfn,
                         void              *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pBlockList    : ブロックリストデータ型領域へのポインタ
                  ブロックリスト数は、以下の範囲とする。1以上12以下
  pfn           : データ読み込みが完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pBlockListがNULL
                            pfnがNULL
                            ブロックリスト数が1以上12以下でない場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・pBlockListに設定されているすべてのブロックの読み込みに成功しない場合は、全ての読み込
    みはキャンセルされ、コールバック関数のパラメータで異常が発生した旨を通知する。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS               : 正常終了
      EFELICA_TIMEOUT       : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_BADSERVICE    : 以下のいずれかの原因で読み出しに失敗した場合指定したサービスが存在していない指定したサービスが不正
      EFELICA_BADBLOCKNO    : 指定したブロックナンバーが不正で読み出しに失敗した場合
      EFELICA_PIN_FAILED    : PIN未照合により読み出しに失敗した場合
      EFELICA_FAILED        : 異常終了レスポンスデータが異常だった場合その他、読み出しに失敗した場合

See Also        :
  IFELICA_Write()
  FeliCaBlockList
  PFFELICARESULT

===============================================================================================

IFELICA_Write()

Description     :
  モバイルFeliCaチップ内のブロックにデータを書き込む。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、データ書き込みの要求を正常に受け付けたことを意味する。
  データ書き込みが正常に完了したかどうかは、指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_Write(IFeliCa              *po,
                          FeliCaBlockList      *pBlockList,
                          PFFELICARESULT        pfn,
                          void                 *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pBlockList    : ブロックリストデータ型領域へのポインタ
                  ブロックリスト数は、1以上8以下で指定すること
  pfn           : データ書き込みが完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            pBlockListがNULL
                            pfnがNULL
                            ブロックリスト数が1以上8以下でない場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・pBlockListの設定されている、すべてのブロックの書き込みに成功しない場合は、全ての書き
    込みはキャンセルされ、コールバック関数のパラメータで異常が発生した旨を通知する。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS                   : 正常終了
      EFELICA_TIMEOUT           : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_BADSERVICE        : 以下のいずれかの原因で書き込みに失敗した場合
                                    指定したサービスが存在していない
                                    指定したサービスが不正
      EFELICA_BADBLOCKNO        : 指定したブロックナンバーが不正で書き込みに失敗した場合
      EFELICA_PIN_FAILED        : PIN未照合により書き込みに失敗した場合
      EFELICA_PURSE_FAILED      : 以下のいずれかの原因で書き込みに失敗した場合
                                    デクリメントのパースバリュー不足
                                    キャッシュバックのパースバリューオーバーフロー
      EFELICA_CASHBACK_FAILED   : キャッシュバック値が直前のデクリメント値より大きい場合
      EFELICA_CYCLIC_FAILED     : サイクリック連続書き込みブロック数がサイクリックサービ
                                  スのために確保されているブロック数よりも大きい場合
      EFELICA_FAILED            : 異常終了
                                  レスポンスデータが異常だった場合
                                  その他、データ書き込みに失敗した場合

See Also        :
  IFELICA_Read()
  FeliCaBlockList
  PFFELICARESULT

===============================================================================================

IFELICA_PIN()

Description     :
  指定したPIN操作パラメータ(PIN照合/PIN有効化/PIN変更)でPIN処理を行う。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、PIN操作の要求を正常に受け付けたことを意味する。
  PIN操作が正常に完了したかどうかは、指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_PIN(IFeliCa                *po,
                        FeliCaPinOperate        Operate,
                        FeliCaPinOperateInfo   *pInfo,
                        PFFELICARESULT          pfn,
                        void                   *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  Operate       : 操作種別を指定する。指定可能な操作種別は以下のいずれかとなる。
                    PIN照合   : FELICA_PIN_CHECK
                    PIN有効化 : FELICA_PIN_ENABLE
                    PIN変更   : FELICA_PIN_CHANGE
  pInfo         : PIN操作に必要な情報を指定する。Operateに指定した操作種別により使用する構造体が異なる。
                    PIN照合   : FeliCaPinCheck
                    PIN有効化 : FeliCaPinEnable
                    PIN変更   : FeliCaPinChange
                    サービス(エリア)数に指定できる最大値は8である。
  pfn           : PIN操作が完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : 以下のいずれかの場合
                            Operateが不正
                            pInfoがNULL
                            pfnがNULL
                            サービス(エリア)数が1以上8以下でない場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合
                            Online状態
                            Active状態
  EFELICA_FAILED        : 異常終了システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・サービス(エリア)が複数登録されていて、途中の処理に失敗した場合、Operateに指定された
    値により、振る舞いが異なる。
      [ FELICA_PIN_CHECK  ]
        指定された順にPIN照合が行われ、途中のパラメータのPIN処理に失敗した場合でも、それ
        以前で成功しているPIN照合は有効となる。失敗した以降のサービス(エリア)のPIN照合は
        行わない。
        この場合、コールバック関数のパラメータで異常が発生した旨を通知する。
      [ FELICA_PIN_ENABLE ]
        指定されたパラメータの内、1つでも失敗した場合は、すべてのPIN有効化/無効化は行われない。
        この場合、コールバック関数のパラメータで異常が発生した旨を通知する。
      [ FELICA_PIN_CHANGE ]
        指定されたパラメータの内、1つでも失敗した場合は、すべてのPIN変更は行われない。
        この場合、コールバック関数のパラメータで異常が発生した旨を通知する。
  ・指定されたすべてのサービス(エリア)に対するPIN操作が正常終了した場合のみ、コールバッ
    ク関数のパラメータにSUCCESSを格納する。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・1回のオープンからクローズまでの間に解除できるPINの上限は8である。この場合、モバイル
    FeliCaチップをクローズする必要がある。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS                   : 正常終了
      EFELICA_TIMEOUT           : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_BADSERVICE        : 以下のいずれかの原因でPIN操作に失敗した場合
                                    指定したサービスが存在していない
                                    指定したサービスが不正
      EFELICA_PIN_FAILEDPIN     : 未照合によりPIN操作に失敗した場合
      EFELICA_PARENT_PIN_FAILED : 親エリアのPIN未照合によりPIN操作に失敗した場合
      EFELICA_PIN_COUNT_OVERPIN : 同時解除数が上限を超えたことにより、PIN操作に失敗した場合
      EFELICA_PIN_LOCKOUT       : PINの照合試行回数が上限に達していることにより、PIN操作に失敗した場合
      EFELICA_PIN_ATTRIBUTE     : PINの有効/無効の切り替えが不可のサービス(エリア)に対して、PIN有効化(無効化)を行った場合
      EFELICA_FAILED            : 異常終了
                                  レスポンスデータが異常だった場合
                                  その他、PIN操作に失敗した場合

See Also        :
  FeliCaPinOperate()
  FeliCaPinCheck()
  FeliCaPinEnable()
  FeliCaPinChange()
  FeliCaPinOperateInfo()
  PFFELICARESULT

===============================================================================================

IFELICA_Activate()

Description     :
  三者間通信時に使用する機能である。
  外部R/Wアクセス待ち状態に設定する。
  本関数は即時に復帰する。
  本関数の復帰値がSUCCESSであった場合、外部R/Wアクセス待ち状態設定の要求を正常に受け付け
  たことを意味する。
  外部R/Wアクセス待ち状態になったかどうかは、指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_Activate(IFeliCa           *po, 
                             PFFELICARESULT     pfn,
                             void              *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pfn           : 外部R/Wアクセス待ち状態設定が完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pfnがNULL
  EFELICA_ALREADY       : 既にActive状態である場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・Active状態から、再度モバイルFeliCaチップへアクセスする場合、IFELICA_Inactivate()を実
    行し、Acitve状態を解除するか、IFELICA_Close()を実行し、一旦モバイルFeliCaチップをクロー
    ズ後、再度IFELICA_Open()にてモバイルFeliCaチップをオープンする必要がある。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了
                          レスポンスデータが異常だった場合

See Also        :
  IFELICA_Inactivate()
  IFELICA_IsActive()
  PFFELICARESULT

===============================================================================================

IFELICA_Inactivate()

Description     :
  三者間通信時に使用する機能である。
  外部R/Wアクセス待ち状態を解除する。
  本関数の復帰値がSUCCESSであった場合、外部R/Wアクセス待ち状態解除の要求を正常に受け付け
  たことを意味する。
  外部R/Wアクセス待ち状態が解除できたかどうかは、指定されたコールバック関数にて通知する。

Prototype       :
  int       IFELICA_Inactivate(IFeliCa         *po,
                               PFFELICARESULT   pfn,
                               void            *pUser);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pfn           : 外部R/Wアクセス待ち状態解除が完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : pfnがNULL
  EFELICA_ALREADY       : 既にInactive状態である場合
  EFELICA_BUSY          : モバイルFeliCaチップへアクセス中の場合
  EFELICA_CLOSED        : モバイルFeliCaチップをオープンしていない
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  ・戻り値がSUCCESS以外の場合、コールバック関数は実行しない。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持される。
  ・本関数はActivated状態を解除するものであるが、モバイルFeliCaチップの状態が、解除可能になる
    までは、本関数を用いても解除することができない。
  ・処理結果はコールバック関数のパラメータで通知される。パラメータの内容は以下とする。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了レスポンスデータが異常だった場合

See Also        :
  IFELICA_Activate()
  IFELICA_IsActive()
  PFFELICARESULT

===============================================================================================

IFELICA_IsActive()

Description     :
  外部R/Wアクセス待ち状態(Active状態)かどうかをチェックする。

Prototype       :
  boolean   IFELICA_IsActive(IFeliCa   *po);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ

Return Value    :
  TRUE          : Active状態
  FALSE         : Active状態ではない(Inactive状態)

Comment         :
  None

See Also        :
  IFELICA_Activate()
  IFELICA_Inactivate()

===============================================================================================

IFELICA_SetTimeout()

Description     :
  モバイルFeliCaチップにコマンドを送信してからレスポンスが通知されるまでのタイムアウト値を設定する。

Prototype       :
  int       IFELICA_SetTimeout(IFeliCa     *po,
                               uint32       nTimeout);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  nTimeout      : 設定するタイムアウト値
                  単位 : ミリ秒
                  最大値    : FELICA_TIMEOUT_MAX   [ 60000 ]
                  最小値    : FELICA_TIMEOUT_MIN   [   500 ] (デフォルト)

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : nTimeoutが範囲外
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  本関数でタイムアウト値設定を行われない場合は、デフォルト値をタイムアウト値として使用する。
  本関数でタイムアウト値設定が行われた場合、設定された値は、次回のモバイルFeliCaチップへの
  コマンド送信から適用される。
  例)
    IFELICA_Read()を実行し、そのコールバック関数が実行されるより以前に本関数を実行したとする。
    この場合、既に送信済みであるコマンドに対するタイムアウト値は設定前のものを使用する。
    モバイルFeliCaチップからのレスポンスタイムアウト、またはレスポンスデータ異常が発生し、
    コマンドを再送する場合、本関数で設定されたタイムアウト値を使用する。

See Also        :
  IFELICA_GetTimeout()

===============================================================================================

IFELICA_GetTimeout()

Description     :
  モバイルFeliCaチップにコマンドを送信してからレスポンスが通知されるまでのタイムアウト値を取得する。

Prototype       :
  int       IFELICA_GetTimeout(IFeliCa *po,
                               uint32  *pnTimeout);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pnTimeout     : タイムアウト値を格納するための領域へのポインタ
                  単位 : ミリ秒

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : pnTimeoutがNULL
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  IFELICA_SetTimeout()で指定された値が返却される。
  IFELICA_SetTimeout()が実行されていない場合、デフォルト値が返却される。

See Also        :
  IFELICA_SetTimeout()

===============================================================================================

IFELICA_SetRetryCount()

Description     :
  モバイルFeliCaチップへコマンドを送信し、レスポンスが異常、または応答がなくタイムアウト
  した場合に、コマンドを再送する回数値を設定する。

Prototype       :
  int       IFELICA_SetRetryCount(IFeliCa  *po,
                                  uint32    nCount);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  nCount        : リトライ回数
                  単位 : 回
                  最大値    : FELICA_RETRY_MAX       [    10 ]
                  最小値    : FELICA_RETRY_MIN       [     0 ] (デフォルト)

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : nCountが範囲外
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  本関数でリトライ回数値設定が行われない場合は、デフォルト値をリトライ回数値として使用する。
  本関数でリトライ回数値設定が行われた場合、設定された値は即座に適用される。
  ただし、リトライ中の回数よりも、小さい値が設定された場合は、実行中のリトライ処理が最後
  の処理となる。
  例)
    リトライ回数値が0回でIFELICA_Read()を実行し、結果通知コールバック関数が実行される前に、
    本関数でリトライ回数を5回に設定したとする。
    モバイルFeliCaチップからのレスポンスタイムアウト、またはレスポンスデータ異常が発生した
    場合、設定された値に従いリトライを行う。

See Also        :
  IFELICA_GetRetryCount()

===============================================================================================

IFELICA_SetRetryCount()

Description     :
  モバイルFeliCaチップへコマンドを送信し、レスポンスが異常、または応答がなくタイムアウト
  した場合に、コマンドを再送する回数値を取得する。

Prototype       :
  int       IFELICA_GetRetryCount(IFeliCa  *po,
                                  uint32   *pnCount);

Parameters      :
  po            : IFeliCaオブジェクトへのポインタ
  pnCount       : リトライ回数を格納する領域へのポインタ
                  単位 : 回

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_BADPARAM      : pnCountがNULL
  EFELICA_BADSTATE      : Online状態であった場合
  EFELICA_FAILED        : 異常終了
                          システムコードが設定されていない場合

Comment         :
  IFELICA_SetRetryCount()で指定された値が返却される。
  IFELICA_SetRetryCount()が実行されていない場合、デフォルト値が返却される。

See Also        :
  IFELICA_SetRetryCount()

===============================================================================================

IFELICA_ExecCommand()

Description     :
  FeliCa チップにコマンドを送信し、レスポンスを受信します。
  コマンドとレスポンスは、WiredAccess のサブコマンドとなります。

Prototype       :
  int       IFELICA_ExecCommand(IFeliCa         *po,
                                FeliCaCommand   *pRequest,
                                FeliCaCommand   *pResponse,
                                PFFELICARESULT   pfn,
                                void            *pUser);

Parameters      :
  po            : IFeliCa オブジェクトへのポインタ
  pRequest      : コマンド送信用コマンドデータ型領域へのポインタ
  pResponse     : レスポンス受信用コマンドデータ型領域へのポインタ
  pfn           : データ読み込みが完了した段階で実行されるコールバック関数へのポインタ
  pUser         : コール元で設定するユーザデータへのポインタ

Return Value    :
  SUCCESS               : 要求受付完了
  EFELICA_BADPARAM      : パラメータ異常以下のいずれかの場合
                            pRequest がNULL
                            pResponse がNULL
                            pRequest のコマンドデータサイズが1 以上245 以下でない場合
  EFELICA_BUSY          : FeliCa チップへアクセス中の場合
  EFELICA_CLOSED        : FeliCa チップをオープンしていない
  EFELICA_BADSTATE      : 以下のいずれかの状態であった場合Online 状態Activated 状態
  EFELICA_FAILED        : 異常終了

Comment         :
  ・戻り値がSUCCESS 以外の場合、コールバック関数は実行しません。
  ・コールバック関数は、コールバック関数の実行／IFELICA_Close()の呼び出し／IFELICA_Release()
    の呼び出しが発生するまで保持されます。
  ・処理結果はコールバック関数のパラメータで通知されます。パラメータの内容は以下とします。
      SUCCESS           : 正常終了
      EFELICA_TIMEOUT   : レスポンスがタイムアウト時間内で得られなかった場合
      EFELICA_FAILED    : 異常終了レスポンスデータが異常だった場合その他、読み出しに失敗した場合

See Also        :
  FeliCaCommand
  PFFELICARESULT

===============================================================================================

 マクロ説明

===============================================================================================

FELICA_GET_BLOCKLIST_RANDOM

Description     :
  IFELICA_Read()の処理完了後、指定されたユーザ領域に読み出した結果を取得する。

Prototype       :
  FELICA_GET_BLOCKLIST_RANDOM(pBlockData, pData);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pData         : データを読み込み領域へのポインタ領域
                  サイズ : 16(bytes)

Comment         :
  IFELICA_Read()実行後、コールバック関数の通知が正常終了だった場合、本マクロを使用するこ
  とで、読み込んだデータを任意の領域にコピーすることが可能。

See Also        :
  IFELICA_Read()
  FeliCaBlock

===============================================================================================

FELICA_SET_BLOCKLIST_RANDOM

Description     :
  IFELICA_Write()の実行前に指定されたデータをIFELICA_Write()のパラメータへ設定する。

Prototype       :
  FELICA_SET_BLOCKLIST_RANDOM(pBlockData, pData);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pData         : 書き込みデータが格納された領域へのポインタ領域
                  サイズ : 16(bytes)

Comment         :
  None

See Also        :
  IFELICA_Write()
  FeliCaBlock

===============================================================================================

FELICA_GET_BLOCKLIST_CYCLIC

Description     :
  IFELICA_Read()の処理完了後、指定されたユーザ領域に読み出した結果を取得する。

Prototype       :
  FELICA_GET_BLOCKLIST_CYCLIC(pBlockData, pData);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pData         : データを読み込み領域へのポインタ領域
                  サイズ : 16(bytes)

Comment         :
  IFELICA_Read()実行後、コールバック関数の通知が正常終了だった場合、本マクロを使用するこ
  とで、読み込んだデータを任意の領域にコピーすることが可能。

See Also        :
  IFELICA_Read()
  FeliCaBlock

===============================================================================================

FELICA_SET_BLOCKLIST_CYCLIC

Description     :
  IFELICA_Write()の実行前に指定されたデータをIFELICA_Write()のパラメータへ設定する。

Prototype       :
  FELICA_SET_BLOCKLIST_CYCLIC(pBlockData, pData);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pData         : 書き込みデータが格納された領域へのポインタ領域
                  サイズ : 16(bytes)

Comment         :
  None

See Also        :
  IFELICA_Write()
  FeliCaBlock

===============================================================================================

FELICA_GET_BLOCKLIST_PURSEDIRECT

Description     :
  IFELICA_Read()の処理完了後、指定されたユーザ領域に読み出した結果を取得する。

Prototype       :
  FELICA_GET_BLOCKLIST_PURSEDIRECT(pBlockData, pdwPurse, pdwCashback, pUser, pwExID);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pdwPurse      : パースデータを読み込む領域へのポインタ領域
                  サイズ : 4(bytes)
  pdwCashback   : キャッシュバックデータを読み込む領域へのポインタ領域
                  サイズ : 4(bytes)
  pUser         : ユーザデータを読み込む領域へのポインタ領域
                  サイズ : 6(bytes)
  pwExID        : 実行IDを読み込む領域へのポインタ領域
                  サイズ : 2(bytes)

Comment         :
  IFELICA_Read()実行後、コールバック関数の通知が正常終了だった場合、本マクロを使用するこ
  とで、読み込んだデータを任意の領域にコピーすることが可能。

See Also        :
  IFELICA_Read()
  FeliCaBlock

===============================================================================================

FELICA_SET_BLOCKLIST_PURSEDIRECT

Description     :
  IFELICA_Write()の実行前に指定されたデータをIFELICA_Write()のパラメータへ設定する。

Prototype       :
  FELICA_SET_BLOCKLIST_PURSEDIRECT(pBlockData, pdwPurse, pdwCashback, pUser, pwExID);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pdwPurse      : 書き込むパースデータが格納されている領域へのポインタ
                  サイズ : 4(bytes)
  pdwCashback   : 書き込むキャッシュバックデータが格納されている領域へのポインタ
                  サイズ : 4(bytes)
  pUser         : 書き込むユーザデータが格納されている領域へのポインタ
                  サイズ : 6(bytes)
  pwExID        : 書き込む実行IDが格納されている領域へのポインタ
                  サイズ : 2(bytes)

Comment         :
  None

See Also        :
  IFELICA_Write()
  FeliCaBlock

===============================================================================================

FELICA_SET_BLOCKLIST_PURSEDECREMENT

Description     :
  IFELICA_Write()の実行前に指定されたデータをIFELICA_Write()のパラメータへ設定する。

Prototype       :
  FELICA_SET_BLOCKLIST_PURSEDECREMENT(pBlockData, pdwDecrement, pwExID);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pdwDecrement  : 書き込むデクリメントデータが格納されている領域へのポインタ
                  サイズ : 4(bytes)
  pwExID        : 書き込む実行IDが格納されている領域へのポインタ
                  サイズ : 2(bytes)

Comment         :
  None

See Also        :
  IFELICA_Write()
  FeliCaBlock

===============================================================================================

FELICA_SET_BLOCKLIST_PURSECASHBACK

Description     :
  IFELICA_Write()の実行前に指定されたデータをIFELICA_Write()のパラメータへ設定する。

Prototype       :
  FELICA_SET_BLOCKLIST_PURSECASHBACK(pBlockData, pdwCashback, pwExID);

Parameters      :
  pBlockData    : FeliCaBlock型領域へのポインタ
  pdwCashback   : 書き込むキャッシュバックデータが格納されている領域へのポインタ
                  サイズ : 4(bytes)
  pwExID        : 書き込む実行IDが格納されている領域へのポインタ
                  サイズ : 2(bytes)

Comment         :
  None

See Also        :
  IFELICA_Write()
  FeliCaBlock

===============================================================================================

 データ型説明

===============================================================================================

FeliCaIDm

Description     :
  IDmを格納するためのデータ型

Type Definition :
  typedef struct _FeliCaIDm {
     uint8        IDm[8];
  } FeliCaIDm;

Member          :
  IDm           : IDm格納領域

Comment         :
  None

See Also        :
  IFELICA_GetIDm()

===============================================================================================

FeliCaServiceList

Description     :
  サービスリストを格納するデータ型

Type Definition :
  typedef struct _FeliCaServiceList {
     uint32       nCount;
     uint16       wList[FELICA_SERVICELIST_MAX];
  } FeliCaServiceList;

Member          :
  nCount        : サービスリスト数
  wList         : サービスリスト格納領域

Comment         :
  ・本データ型は、以下のAPIを使用する際に使用する。
      IFELICA_GetKeyVersion()
      IFELICA_GetBlockInfo()
  ・使用するAPIによりサービスリスト数の上限が異なることに注意すること。詳細は各APIの説明を参照すること。
      wListのnCount目以降の要素は無視する。

See Also        :
  IFELICA_GetKeyVersion()
  IFELICA_GetBlockInfo()
  FELICA_SERVICELIST_MAX

===============================================================================================

FeliCaKeyVersionList

Description     :
  サービスリストを格納するデータ型

Type Definition :
  typedef FeliCaServiceList   FeliCaKeyVersionList;

Member          :
  FeliCaServiceList参照

Comment         :
  FeliCaServiceList参照

See Also        :
  FeliCaServiceList

===============================================================================================

FeliCaBlockInfoList

Description     :
  ブロック情報を格納するためのデータ型

Type Definition :
  typedef FeliCaServiceList   FeliCaBlockInfoList;

Member          :
  FeliCaServiceList参照

Comment         :
  FeliCaServiceList参照

See Also        :
  FeliCaServiceList

===============================================================================================

FeliCaRandomData

Description     :
  ランダムサービスアクセス時に使用するブロックデータ型

Type Definition :
  typedef struct _FeliCaRandomData {
     uint8        byBlockData[FELICA_BLOCKSIZE];
  } FeliCaRandomData;

Member          :
  byBlockData   : ブロックデータ

Comment         :
  None

See Also        :
  FeliCaBlockData
  FELICA_BLOCKSIZE

===============================================================================================

FeliCaCyclicData

Description     :
  サイクリックサービスアクセス時に使用するブロックデータ型

Type Definition :
  typedef struct _FeliCaCyclicData {
     uint8        byBlockData[FELICA_BLOCKSIZE];
  } FeliCaCyclicData;

Member          :
  byBlockData   : ブロックデータ

Comment         :
  None

See Also        :
  FeliCaBlockData
  FELICA_BLOCKSIZE

===============================================================================================

FeliCaPurseDirectData

Description     :
  パースサービスのダイレクトアクセス時と、パースサービスのデータ読み出し時に使用するブロ
  ックデータ型

Type Definition :
  typedef struct _FeliCaPurseDirectData {
     uint32       dwPurseData;
     uint32       dwCashBackData;
     uint8        byUserData[FELICA_PURSE_USERDATASIZE];
     uint16       wExecutionID;
  } FeliCaPurseDirectData;

Member          :
  dwPurseData           : パースデータ
  dwCashBackData        : キャッシュバックデータ
  byUserData            : ユーザデータ
  wExecutionID          : 実行ID

Comment         :
  None

See Also        :
  FeliCaBlockData
  FELICA_PURSE_USERDATASIZE

===============================================================================================

FeliCaPurseDecrementData

Description     :
  パースサービスのデクリメントアクセス時に使用するブロックデータ型

Type Definition :
  typedef struct _FeliCaPurseDecrementData {
     uint32       dwDecrementData;
     uint8        byReserve[10];
     uint16       wExecutionID;
  } FeliCaPurseDecrementData;

Member          :
  dwDecrementData       : デクリメントデータ
  byReserve             : リザーブ領域
  wExecutionID          : 実行ID

Comment         :
  リザーブ領域に指定された値は無視する。

See Also        :
  FeliCaBlockData

===============================================================================================

FeliCaPurseCashBackData

Description     :
  パースサービスのキャッシュバックアクセス時に使用するブロックデータ型

Type Definition :
  typedef struct _FeliCaPurseCashBackData {
     uint32       dwCashBackData;
     uint8        byReserve[10];
     uint16       wExecutionID;
  } FeliCaPurseCashBackData;

Member          :
  dwCashBackData        : キャッシュバックデータ
  byReserve             : リザーブ領域
  wExecutionID          : 実行ID

Comment         :
  リザーブ領域に指定された値は無視する。

See Also        :
  FeliCaBlockData

===============================================================================================

FeliCaBlockData

Description     :
  各サービスのブロックデータを定義したデータ型

Type Definition :
  typedef union _FeliCaBlockData {
     FeliCaRandomData             RandomData;
     FeliCaCyclicData             CyclicData;
     FeliCaPurseDirectData        PurseDirectData;
     FeliCaPurseDecrementData     PurseDecrementData;
     FeliCaPurseCashBackData      PurseCashBackData;
  } FeliCaBlockData;

Member          :
  RandomData            : ランダムサービスで使用するブロックデータ
  CyclicData            : サイクリックサービスで使用するブロックデータ
  PurseDirectData       : パースサービスのダイレクトアクセス時およびデータ読み込み時に使用するブロックデータ
  PurseDecrementData    : パースサービスのデクリメントアクセス時に使用するブロックデータ
  PurseCashBackData     : パースサービスのキャッシュバックアクセス時に使用するブロックデータ

Comment         :
  共用体であるため、指定するサービスによってアクセスするメンバを変更すること。

See Also        :
  FeliCaBlock

===============================================================================================

FeliCaBlock

Description     :
  ブロックデータをRead/Writeする際に使用するデータ型

Type Definition :
  typedef struct _FeliCaBlock {
     uint16           wService;
     uint16           wBlockNo;
     FeliCaBlockData  BlockData;
  } FeliCaBlock;

Member          :
  wService      : サービスコードを指定
  wBlockNo      : ブロックナンバーを指定
  BlockData     : ブロックデータを指定

Comment         :
  BlockDataメンバはIFELICA_Read()時はアウトプットとなり、IFELIA_Write()時はインプットとなる。

See Also        :
  IFELICA_Read()
  IFELICA_Write()
  FeliCaBlockData
  FeliCaBlockList

===============================================================================================

FeliCaBlockList

Description     :
  ブロックデータをRead/Writeする際に使用するデータリスト型

Type Definition :
  typedef struct _FeliCaBlockList {
     uint32       nCount;
     FeliCaBlock  BlockList[FELICA_BLOCKLIST_MAX];
  } FeliCaBlockList;

Member          :
  nCount        : ブロックリスト数
  BlockList     : ブロックリスト

Comment         :
  BlockListのnCount目以降の要素は無視する。

See Also        :
  IFELICA_Read()
  IFELICA_Write()
  FeliCaBlockData
  FeliCaBlock

===============================================================================================

FeliCaPinCheck

Description     :
  PIN照合で使用するデータ型

Type Definition :
  typedef struct _FeliCaPinCheck {
     uint16       wServiceCode;
     uint32       dwPIN;
  } FeliCaPinCheck;

Member          :
  wServiceCode  : サービス(エリア)
  dwPIN         : PIN

Comment         :
  None

See Also        :
  IFELICA_PIN()
  FeliCaPinCheckList

===============================================================================================

FeliCaPinCheckList

Description     :
  PIN照合で使用するデータリスト型

Type Definition :
  typedef struct _FeliCaPinCheckList {
     uint32           nCount;
     FeliCaPinCheck   PinCheckList[FELICA_PINLIST_MAX];
  } FeliCaPinCheckList;

Member          :
  nCount        : PIN照合を行うサービス(エリア)数
  PinCheckList  : PIN照合リスト

Comment         :
  PinCheckListのnCount目以降の要素は無視する。

See Also        :
  IFELICA_PIN()
  FeliCaPinCheck

===============================================================================================

FeliCaPinEnable

Description     :
  PIN有効化/PIN無効化で使用するデータ型

Type Definition :
  typedef struct _FeliCaPinEnable {
     uint16       wServiceCode; 
     uint32       dwPIN;
     boolean      bFlag;
  } FeliCaPinEnable;

Member          :
  wServiceCode  : サービス(エリア)
  dwPIN         : PIN
  bFlag         : 有効化/無効化のフラグ
                    有効化：TRUE
                    無効化：FALSE

Comment         :
  None

See Also        :
  IFELICA_PIN()
  FeliCaPinEnableList

===============================================================================================

FeliCaPinEnableList

Description     :
  PIN有効化/PIN無効化で使用するデータリスト型

Type Definition :
  typedef struct _FeliCaPinEnableList {
     uint32           nCount; 
     FeliCaPinEnable  PinEnableList[FELICA_PINLIST_MAX]; 
  } FeliCaPinEnableList;

Member          :
  nCount        : PIN有効化/PIN無効化を行うサービス(エリア)数
  PinEnableList : PIN有効化/PIN無効化リスト

Comment         :
  PinEnableListのnCount目以降の要素は無視する。

See Also        :
  IFELICA_PIN()
  FeliCaPinEnable

===============================================================================================

FeliCaPinChange

Description     :
  PIN変更で使用するデータ型

Type Definition :
  typedef struct _FeliCaPinChange {
     uint16       wServiceCode; 
     uint32       dwOldPIN;
     uint32       dwNewPIN;
  } FeliCaPinChange;

Member          :
  wServiceCode  : サービス(エリア)
  dwOldPIN      : 変更前のPIN
  dwNewPIN      : 変更後のPIN

Comment         :
  None

See Also        :
  IFELICA_PIN()
  FeliCaPinChangeList

===============================================================================================

FeliCaPinChangeList

Description     :
  PIN変更で使用するデータリスト型

Type Definition :
  typedef struct _FeliCaPinChangeList {
     uint32           nCount;
     FeliCaPinChange  PinChangeList[FELICA_PINLIST_MAX];
  } FeliCaPinChangeList;


Member          :
  nCount        : PIN変更を行うサービス(エリア)数
  PinChangeList : PIN変更リスト

Comment         :
  PinChangeListのnCount目以降の要素は無視する。

See Also        :
  IFELICA_PIN()
  FeliCaPinChange

===============================================================================================

FeliCaPinOperateInfo

Description     :
  各PIN操作を定義したデータ型

Type Definition :
  typedef union _FeliCaPinOperateInfo {
     FeliCaPinCheckList  PinCheck; 
     FeliCaPinEnableList PinEnable; 
     FeliCaPinChangeList PinChange; 
  } FeliCaPinOperateInfo;

Member          :
  PinCheck      : PIN照合
  PinEnable     : PIN有効化/PIN無効化
  PinChange     : PIN変更

Comment         :
  共用体であるため、指定するサービスによってアクセスするメンバを変更すること。

See Also        :
  IFELICA_PIN()
  FeliCaPinCheckList
  FeliCaPinEnableList
  FeliCaPinChangeList

===============================================================================================

FeliCaPinOperate

Description     :
  PIN操作を指定する際に使用する列挙型

Type Definition :
  typedef enum _FeliCaPinOperate {
     FELICA_PIN_CHECK,
     FELICA_PIN_ENABLE, 
     FELICA_PIN_CHANGE
  } FeliCaPinOperate;

Member          :
  FELICA_PIN_CHECK      : PIN照合
  FELICA_PIN_ENABLE     : PIN有効化/PIN無効化
  FELICA_PIN_CHANGE     : PIN変更

Comment         :
  IFELICA_PIN()の操作種別を指定する際に使用する。

See Also        :
  IFELICA_PIN()

===============================================================================================

FeliCaPinOperate

Description     :
  モバイルFeliCaチップのオープン/クローズ状態を表す列挙型

Type Definition :
  typedef enum _FeliCaStatus {
     FELICA_STATUS_OPENING,
     FELICA_STATUS_OPENED,
     FELICA_STATUS_CLOSING,
     FELICA_STATUS_CLOSED
  } FeliCaStatus;

Member          :
  FELICA_STATUS_OPENING     : 指定オブジェクトからのオープン処理実行中
  FELICA_STATUS_OPENED      : 指定オブジェクトが既にオープン済
  FELICA_STATUS_CLOSING     : 指定オブジェクトからのクローズ処理実行中
  FELICA_STATUS_CLOSED      : 指定オブジェクトが既にクローズ済

Comment         :
  IFELICA_GetStatus()が実行された場合に、本列挙型のメンバが戻り値として使用される。

See Also        :
  IFELICA_GetStatus()

===============================================================================================

FeliCaMode

Description     :
  モバイルFeliCaチップの処理モードを表す列挙型

Type Definition :
  typedef enum _FeliCaMode {
     FELICA_MODE_ONLINE, 
     FELICA_MODE_OFFLINE 
  } FeliCaMode;

Member          :
  FELICA_MODE_ONLINE    : Online状態
  FELICA_MODE_OFFLINE   : Offline状態

Comment         :
  IFELICA_GetMode()が実行された場合に、本列挙型のメンバが戻り値として使用される。

See Also        :
  IFELICA_GetMode()

===============================================================================================

PFFELICARESULT

Description     :
  モバイルFeliCaチップにアクセスが発生するAPIの結果通知に使用するコールバック関数の型

Type Definition :
  typedef void (*PFFELICARESULT)(void *pUser, int Result);

Parameters      :
  pUser         : 登録時に指定されたユーザデータへのポインタ
  Result        : モバイルFeliCaチップの処理結果を格納する

Comment         :
  Resultの値については、各APIを参照。

See Also        :
  IFELICA_Open()
  IFELICA_Close()
  IFELICA_SetSystemCode()
  IFELICA_GetKeyVersion()
  IFELICA_Read()
  IFELICA_Write()
  IFELICA_PIN()
  IFELICA_Activate()
  IFELICA_Inactivate()
  IFELICA_GetBlockInfo()

===============================================================================================

PFFELICALISTENERFINISH

Description     :
  オンライン処理において正常終了イベントが発生した場合に実行されるリスナー関数

Type Definition :
  typedef void (*PFFELICALISTENERFINISH)(void *pUser, uint16 wStatus);

Parameters      :
  pUser         : 登録時に指定されたユーザデータへのポインタ
  wStatus       : ステータス(FSS側アプリケーションの終了コード)

Return Value    :
  None

Comment         :
  ・モバイルFeliCaチップはリセットされ、FSS側アプリケーションから変更されたタイムアウト値
    とリトライ数、及び追加されたデバイスリストをクリアする。モバイルFeliCaチップをリセット
    すると、PINの解除情報もクリアする。

See Also        :
  IFELICA_SetListener()

===============================================================================================

PFFELICALISTENERDEVICE

Description     :
  オンライン処理においてデバイス操作イベントが発生した場合に実行されるリスナー関数

Type Definition :
  typedef void (*PFFELICALISTENERDEVICE)(void   *pUser,
                                         uint16  wDeviceID,
                                         char   *pszParam,
                                         uint8  *pbyData,
                                         uint16  wSize);

Parameters      :
  pUser         : 登録時に指定されたユーザデータへのポインタ
  wDeviceID     : デバイスID
  pszParam      : FSS側アプリケーションからのパラメータ
                  NULL終端までが有効文字列となる。
  pbyData       : FSS側アプリケーションからのデータ
  wSize         : FSS側アプリケーションからのデータのサイズ(pbyDataのサイズ)
                  単位 : バイト

Return Value    :
  SUCCESS               : 正常終了
  EFELICA_FAILED        : 異常終了

Comment         :
  ・本関数が実行されデバイス操作が正常終了した場合、デバイス操作正常終了通知
    (IFELICA_CompleteOperateDevice())を必ず実行すること。
  ・本関数が実行されデバイス操作が異常終了した場合、デバイス操作異常終了通知
    (IFELIICA_AbortOperateDevice())を必ず実行すること。
  ・デバイス操作の結果をFSS側アプリケーションに通知したい場合は、デバイス操作正常終了通
    知、またはデバイス操作異常終了通知のパラメータに結果メッセージを付加すること。

See Also        :
   IFELICA_SetListener()
   IFELICA_CompleteOperateDevice()
   IFELIICA_AbortOperateDevice()

===============================================================================================

PFFELICALISTENERERROR

Description     :
  オンライン処理において異常終了イベントが発生した場合に実行されるリスナー関数

Type Definition :
  typedef void (*PFFELICALISTENERERROR)(void *pUser, int Type, const char *pszMessage);

Parameters      :
  pUser         : 登録時に指定されたユーザデータへのポインタ
  Type          : 終了タイプ
  pszMessage    : 詳細メッセージ

Return Value    :
  None

Comment         :
  ・モバイルFeliCaチップはリセットされ、FSS側アプリケーションから変更されたタイムアウ
    ト値とリトライ数、及び追加されたデバイスリストをクリアする。モバイルFeliCaチップ
    をリセットすると、PINの解除情報もクリアする。
  ・終了タイプ／詳細メッセージの組合せを、以下に記載する。

    異常終了の原因                    │終了タイプ                  │詳細メッセージ
    ─────────────────┼──────────────┼──────────────────
    オンライン処理中に、              │EFELICA_INTERRUPTED         │なし(NULL)
    IFELICA_Stop()を呼び出した場合    │                            │
    ─────────────────┼──────────────┼──────────────────
    オンライン処理中に、              │BREW規定のエラーコード      │なし(NULL)
    通信系エラーが発生した場合        │【Brew API Reference】参照  │
    ─────────────────┼──────────────┼──────────────────
    オンライン処理中に、              │EFELICA_HTTP                │"Http Error(XXX)"
    HTTP/HTTPS系のエラーが発生した場合│                            │※1
    ─────────────────┼──────────────┼──────────────────
    オンライン処理中に、              │EFELICA_TCAP                │TCAPメッセージのデータ部
    FSS側アプリケーションからエラーが │                            │
    通知された場合                    │                            │
    ─────────────────┼──────────────┼──────────────────
    オンライン処理中に、              │EFELICA_FAILED              │なし(NULL)
    その他のエラーが発生した場合      │                            │

    ※1 : XXXにはAEEWeb.hにて規定されるHTTP/HTTPS系エラーコードの値を文字列として格納。

  ・本リスナー関数は異常終了の原因により実行するタイミングが異なる。
    実行タイミングを以下の表に示す。

    異常終了の原因                    │実行タイミング
    ─────────────────┼─────────────────────────────────
    オンライン処理中に、              │FSS側アプリケーションからの通信終了を示すメッセージを受
    IFELICA_Stop()を呼び出した場合    │信したタイミング
    ─────────────────┼─────────────────────────────────
    オンライン処理中に、              │通信系エラーを検知したタイミング
    通信系エラーが発生した場合        │
    ─────────────────┼─────────────────────────────────
    オンライン処理中に、              │HTTP/HTTPS系のエラーを検知したタイミング
    HTTP/HTTPS系のエラーが発生した場合│
    ─────────────────┼─────────────────────────────────
    オンライン処理中に、              │FSS側アプリケーションからの通信終了を示すメッセージを受
    FSS側アプリケーションからエラーが │信したタイミング
    通知された場合                    │
    ─────────────────┼─────────────────────────────────
    オンライン処理中に、              │FSS側アプリケーションからの通信終了を示すメッセージを受
    その他のエラーが発生した場合      │信したタイミング

See Also        :
  IFELICA_SetListener()

=============================================================================================*/

#endif // IFELICA_H
