Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Purpose

This page aims at helping L3 applications developers to use the OLA Java API.

The code snippets below are just an example of how things can be done, absolutely not the only way to go!

Basic transaction

A basic OLA transaction includes the following steps:

  • OLA component initialization (Ola.ola_initialize)

Code Block
private void txnInit() {
    final String path = "/data/data/com.amadis.agnoid_tester/";
    final String CAKeys = path + "CAKeys";
    final String CRL = path + "CRL";
    final String EFL = path + "EFL";
    final String langIni = path + "lang.ini";
    final byte[] params = {0x00, 0x00, 0x00, 0x10, 0x05, 0x00};
    final byte paramsLen = (byte)params.length;
    final byte traceLevel = (byte)5;

    ola.ola_initialize(new OlaInit(path, CAKeys, CRL, EFL, langIni, params, paramsLen, traceLevel));
}

  • Preprocessing (OlaContactless.ola_contactless_preprocess)

Code Block
private OlaContactlessResult txnPreProcess() {
    OlaContactlessResult ret = contactless.ola_contactless_preprocess(
            new byte[]{0x00, 0x00, 0x00, 0x0A},
            new BCD.BCD_YYMMDD(20, 12, 31),
            new BCD.BCD_YYMMDD(12, 59, 59),
            new BCD(0, 0, 0, 1)
    );

    if (ret != OlaContactlessResult.OK) {
        Log.e("OLA-TESTER", "contactless pre-process failed");
    }

    return ret;
}

  • Card detection

Code Block
private short txnGetCard() {
    Log.d("OLA-TESTER", "PRESENT CARD");

    int foundTechnos = dev.technoPolling(60000);
    l("Result of foundTechnos: "+ foundTechnos);

    if (foundTechnos==4) {
        return clcEMV_CARD; //TODO remove hard-coding
    } else {
        return 0;
    }
}

  • Build candidate list (OlaContactless.ola_contactless_build_candidate_list)

Code Block
private OlaContactlessResult txnBuildCandidateList() {
    SingleObjectHolder<Integer> nbCandidatesHolder = new SingleObjectHolder<Integer>();
    OlaContactlessResult ret = contactless.ola_contactless_build_candidate_list(nbCandidatesHolder);

    if (ret != OlaContactlessResult.OK) {
        showOutcome(ret);
    }
    
    return ret;
}

  • Select application (OlaContactless.ola_contactless_final_select_candidate)

Code Block
private OlaContactlessResult txnFinalSelectCandidate() {
    kernel_id_holder = new SingleObjectHolder<Byte>();
    OlaContactlessResult ret = contactless.ola_contactless_final_select_candidate(1, kernel_id_holder);

    if (ret != OlaContactlessResult.OK) {
        showOutcome(ret);
    }

    return ret;
}

  • Start transaction (OlaContactless.ola_contactless_do_transaction)

Code Block
private void txnDoTransaction() {
    SingleObjectHolder<OlaEntryMode> entryMode_holder = new SingleObjectHolder<OlaEntryMode>();
    OlaContactlessResult ret = contactless.ola_contactless_do_transaction(entryMode_holder);
    showOutcome(ret);
}