Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
typeflat

API _Version _Revision

Description

_AgnosEP _version 3.5.23 _revision 23782

Agnos EP Interface provides a set of primitives to manage EMV contactless card processing. It encapsulates EMVCo Book A and B.

Image Modified

Agnos Entry Point

See entrypoint.h, loader.h

#include

Code Block
languagec
//---- AgnosMW Headers ----
#include "paymentMW.h"
//---- Global Headers ----
#include "gpi_agnos_framework_globals.h"

--

ApplicationSelectionMethod

Code Block
typedef tPaymentError (*ApplicationSelectionMethod)
(
tADFList *mutualList,
tByte *MLIndex, tBoolean CL
);

Callback definition. Called after PPSE selection if defined

KernelSelectionMethod

Code Block
typedef tBoolean (*KernelSelectionMethod)
(
tByte* kernelIdentifier,
tByte kernelIdentifierLen,
tByte* requestedKernelIdentifier
);

Callback definition. Called

duration

during combination selection if defined

enpConnectPaymentServices

Code Block
languagec
DLLEXPORT void enpConnectPaymentServices(const tString path)

Connect entry point onto available L2 CL kernels. This call shall be performed only when the system is cycled up

enpDisconnectPaymentServices

Code Block
languagec
DLLEXPORT void enpDisconnectPaymentServices(void);

Disconnect entry point from connected L2 CL kernels. This call shall be performed only when the system is cycled up

enpInitialize

Code Block
languagec
DLLEXPORT void enpInitialize
(
tString		readerName,
tString		pinpadName,
tBoolean	signal,
tBoolean	fallbackOnAID,	// DEPRECATED
tBoolean	entryPoint,		// DEPRECATED
tPaymentContext 
*payment //In: may be NULL is not autorun (contactless mechanism)
);

Set internal context to prepare the entry point for the subsequent transaction

Code Block
languagec
// Standard call for a payment application
enpInitialize("","",bFALSE,bFALSE,bFALSE,NULL);

Important:

Prior to that call:

  • If payment is set NULL, L3 must set following flags

    • payment->mEMVContact if contact supported

    • payment->mEMVContactless if contactless supported

    • payment->mMagstripe if magstripe supported

  • If autorun is supported. L3 must set following fields

    • payment->mAmount

enpSetLegacyXXXStatus

Code Block
languagec
DLLEXPORT void enpSetLegacyZIPStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyPayPassStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyAMEXStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyJCBStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyCUPStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyDPASStatus(tBoolean status);
Code Block
languagec
DLLEXPORT void enpSetLegacyVISAStatus(tBoolean status);
Set

Enable legacy selection rule for a given payment scheme. Payment schemes' specifications, outside Book Cx, use selection rules that might differ for error management. it is important to set appropriate flag duting TA

enpSetPollingTimeout

Code Block
languagec
DLLEXPORT void enpSetPollingTimeout(int timeout);

Set timeout value used during gpiPolling to detect a card presentation

enpSetLongTapTimeoutExpired

Code Block
languagec
DLLEXPORT void enpSetLongTapTimeoutExpired(void);

Indicate to the entry point that the online transaction has timed out and consequently the long tap has timed out

enpGetPollingTimeout

Code Block
languagec
DLLEXPORT int enpGetPollingTimeout(void);

Return timeout value used during gpiPolling to detect a card presentation

enpPSESelectionPerformed

Code Block
languagec
DLLEXPORT tBoolean enpPSESelectionPerformed(void);

Deprecated

enpGetPPSEFCI

Code Block
languagec
DLLEXPORT tPSE* enpGetPPSEFCI(tWord *SW1SW2);

Return PPSE’s FCI

is

stored at PPSE selection so payment application can fetch any proprietary tags

like 9F0A

(for example

:

, tag 9F0A, ASPRD). If SW1SW2 is defined then the entry point returns the status word

enpGetMutualList

Code Block
languagec
DLLEXPORT tADFList *enpGetMutualList(void);

Return the mutual list calculated at PPSE selection time. See Agnos and Selection module to get details on tADFList

enpAreAllCLAppplicationsNotAllowed

Code Block
languagec
DLLEXPORT tBoolean enpAreAllCLAppplicationsNotAllowed(void);

enpResetAreAllCLAppplicationsNotAllowed

Code Block
languagec
DLLEXPORT void enpResetAreAllCLAppplicationsNotAllowed(void);

Return bTRUE if there is no elligible contactless application after preprocessing. If no CL application is

selectable

elligible, provide a specific status so payment application

which

may fallback to

CT

contact or

magstrtipe

magstripe depeding on interfaces supported by the device

enpResetAreAllCLAppplicationsNotAllowed

Code Block
languagec
DLLEXPORT void enpResetAreAllCLAppplicationsNotAllowed(void);

Reset corresponding state

enpGetLastCardDetectionStatus

Code Block
languagec
DLLEXPORT tGPIError enpGetLastCardDetectionStatus(void);

Return the last gpiPolling error obtain at the last START_B

enpSkipPollingOnNextStartB

Code Block
languagec
DLLEXPORT void enpSkipPollingOnNextStartB(tGPIError detectedStatus);

When gpiPolling is performed from outside the entry point, skip gpiPolling call from inside the entry point to avoid double tap

enpReleasePaymentServices

Code Block
languagec
DLLEXPORT void enpReleasePaymentServices(const tBoolean sdk);

Broadcast afsRelease to all L2 CL kernels. This call shall be performed only when the system is cycled down.

enpExecutePaymentTransaction

Code Block
languagec
DLLEXPORT void enpExecutePaymentTransaction
(
tStartingPoint 		sp,
tPaymentContext		*payment,
tOutComeParameter	*outcome
);

Main point of entry to initiate a CL transaction.

tPaymentContext shall be set accordingly

tOutcomeParameter provides final status in lign with L2 TA’s test plans

Set sp to:

  • spSTART_A: to initiate a new transaction

  • spSTART_D: to activate the kernel used for the current transaction

  • spNO_START: to clean the context

enpGetTerminalAID

Code Block
languagec
void enpGetTerminalAID(tByte aidId, tByte **aid, tByte *len);

enpGetCurrentTerminalAID

Code Block
languagec
void enpGetCurrentTerminalAID(tByte **aid, tByte *len);

Code Example

See entrypoint.h

Code Block
languagec
// Payment contexts
static tPaymentContext paymentCtx;
static tOutComeParameter outcome;
// Transaction amounts
static tAmount amount, cashBack;

char path[250] = "./AGNOS/"; // Configuration files here
unsigned char defaultTxnType = 0x00; // Default 9C value

  enpConnectPaymentServices(PATH);
  
enpInitialize("","",bTRUE,bFALSE,bFALSE,pay);

  
// Init payment context and payment outcome
  pmwInitializePaymentContext(&paymentCtx);
  pmwInitializeOutComeParameter(&outcome);
		
  // Important to perform these initializations after pmwInitializePaymentContext
  paymentCtx.mAmount = &amount;
  paymentCtx.mCashBack = &cashBack;
  paymentCtx.mTransactionType = (tTransactionType)defaultTxnType;
  amount = cashBack = 
NULL
0;
  
  // Set payment context from TRD...
  // ...
  
  // Initialize transient data model
  /// Only CL combinations refering to paymentCtx.mTransactionType will be loaded
  dtmInitializeFromFile(path, 0, 0, 0, 0, 0, paymentCtx.mTransactionType, bFALSE);
  enpInitialize("CTLSS", "", bTRUE, bFALSE, bFALSE, paymentCtx); // Using signal in the scope of L2 TA
  
  enpExecutePaymentTransaction(spSTART_A, paymentCtx, outcome);
  
  if (enpAreAllCLApplicationNotAllowed)
  {
    // Fallback to other technology if any
  }
  else
  {
    // Process outcome
  }