...
...
...
That level of API is important to be able to run valid test procedures. It provides an interface to Agnos Certification Environement (ACE) through a set of services that corresponds to different test requirements specified by payment networks.
This API is the second level of integration for Agnos Framework. Hence, It is recommended to unit test all the services below outside the execution of a transaction before starting functional tests.
tocSee tutorials to get examples on ACE services integration.
ACE Services
ACE Services | Description | Prerequisites to a Call |
---|
aceInitialize | | |
aceInitializeCommunication | | |
aceSetMode | | There are three running modes defined in ACE: Use pmSDK for unit testing ACE integration |
aceGetMode | Get current ACE mode | aceInitializeCommunication-- |
aceGetRequest | | |
aceSendResponse | | |
aceMsgToACE | | |
aceClearScreen | Clear ACE screen | -- |
aceDisplayMessage | Display a ACE in ACE | -- |
aceEmptyKeyPadCache | Empty ACE keyPAD cache | -- |
aceLogAPDU | Log APDU | Inline or offline depending on depth value |
aceLogAllBatchedAPDU | Log offline APDU | -- |
acePlayBeep | Play a beep in ACE | -- |
aceGetKey | Get key from ACE | -- |
aceSwitchLED | Switch a LED on ACE | -- |
aceOut | Out in ACE’s Console Log | Code Block |
---|
aceOut("Hello World!"); // Open Console Log under ACE prior the unit test |
|
...
Signals Services | Description | Prerequisites to a Call |
---|
aceGetSignal | Get all signals services from ACE in order to set signals callbacks defined in AgnosMW. These signals callbacks are called by Agnos components like AgnosEP and kernels to raise information at ACE level during a transaction | Code Block |
---|
| #include "paymentMW.h"
//---------------------------------------------------------
// setSignals
//---------------------------------------------------------
// Set Signals used for CL certification
//
// Visibility: Private
//
Hypothesis:
--
// Reference: --
//
void setSignals()
{
tBoolean contactless = bTRUE;
tBoolean signal = bTRUE;
tSignal signal;
if(contactless && signal)
{
aceGetSignal(&signal);
}
else
{
signal.mSendOutcomeSignal = 0;
signal.mSendDRSignal = 0;
signal.mSendDDSignal = 0;
signal.mSendRawDDSignal = 0;
signal.mSendDEKSignal = 0;
signal.mSendDETSignal = 0;
signal.mSendTagSignal = 0;
}
pmwSetSignal(&signal);
} |
|
aceSendAdvancedDisplayAsOutcome | Send Advanced As Outcome signal to ACE | Code Block |
---|
tUIRequestData data;
dtxInitializeUIRequestData(&data);
aceSetDigitalSignal(0);
aceSendAdvancedDisplayAsOutcome(&data);
aceSetDigitalSignal(1);
aceSendAdvancedDisplayAsOutcome(&data); |
|
aceSendAdvancedDisplay | Send Advanced signal to ACE | Code Block |
---|
tUIRequestData data;
dtxInitializeUIRequestData(&data);
aceSetDigitalSignal(0);
aceSendAdvancedDisplay(&data);
aceSetDigitalSignal(1);
aceSendAdvancedDisplay(&data); |
|
aceSendOutcome | Send an Outcome signal to ACE | Code Block |
---|
tOutComeParameter outcome;
pmwInitializeOutComeParameter(&outcome);
aceSendOutcome(&outcome); |
|
aceSendDR | Send a Data Record signal to ACE | AgnosMW must be initialized from pmwSetSignal (use setSignals available in Kizis) Running mode = pmSDK (default value) gpiGetFreeRAM must be integrated tPaymentContext mDataExchange.mDataRecord.mStream and tPaymentContext mDataExchange.mDataRecord.mLength must contained TLV data Example:
Code Block |
---|
| tPaymentContext pay;
pmwInitializePaymentContext(&pay);
aceSendDR(pay); // Set mDataRecord to see TLV displayed |
|
aceSendDD | Send a Discretionary Data signal to ACE | AgnosMW must be initialized from pmwSetSignal (use setSignals available in Kizis) Running mode = pmSDK (default value) gpiGetFreeRAM must be integrated tPaymentContext mDataExchange.mDiscretionaryData.mStream and tPaymentContext mDataExchange.mDiscretionaryData.mLength must contained TLV data Example:
Code Block |
---|
tPaymentContext pay;
pmwInitializePaymentContext(&pay);
aceSendDD(pay); // Set mDataRecord to see TLV displayed |
|
aceSendRawDD | Send a Raw Discretionary Data signal to ACE | AgnosMW must be initialized from pmwSetSignal (use setSignals available in Kizis) Running mode = pmSDK (default value) gpiGetFreeRAM must be integrated Example:
Code Block |
---|
| aceSendRawDD((tByte*)"\x9F\x02\x06\x99\x99\x99\x99\x99\x99",0x0009); |
|
aceSendDEK | Send a DEK signal to ACE | AgnosMW must be initialized from pmwSetSignal (use setSignals available in Kizis) Running mode = pmSDK (default value) gpiGetFreeRAM must be integrated Example:
Code Block |
---|
| tPaymentContext pay;
tByte outDET[50]="";
tWord lenOutDET=0;
pmwInitializePaymentContext(&pay);
aceSendDEK(pay,asGPO,bFALSE,outDET,&lenOutDET); |
|
aceSendDET | N/A | N/A |
aceSendTag | Send all tags contained in AgnosDB session | AgnosMW must be initialized from pmwSetSignal (use setSignals available in Kizis) Running mode = pmSDK (default value) gpiGetFreeRAM must be integrated Example:
Code Block |
---|
| tPaymentContext pay;
tTransactionalContext txnContext;
tSessionId session;
agnOpenSession("","","",&txnContext,bFALSE,bFALSE,&session,bFALSE,bFALSE);
pmwInitializePaymentContext(&pay);
aceSendTag(&pay);
agnCloseSession(session); |
|
...
Options Services | This set of primitives is not dependent on the platform. It doesn’t require specific implementation or modification for a given integration. Hence, it works as is. |
---|
Trace | Trace = 0 will log APDU commands and responses to ACE Trace 1 to max = will log commands and reponses to logout and only commands to ACE Trace > max will log commands and responses offline |
Automation | Reserved to Agnos Framework maintenance |
Signal | Enable/disable signals display in ACE (in pmSDK mode) |
APDULog | Enable/disable APDU logging (in pmSDK mode) |
UIDisplay | Enable/disable UI services in ACE from the device |
ID Message Display | Enable/disable message display (in signals) along with their message identifier |
Digital Signal | Enable/disable digital signals display following standard bitmap as defined by EMVCo |