/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package android.hardware.nfc@1.1;

import @1.0::NfcEvent;

enum NfcEvent : @1.0::NfcEvent {
    /** In case of an error, HCI network needs to be re-initialized */
    HCI_NETWORK_RESET = 7
};

enum Constant : uint8_t {
    UNSUPPORTED_CONFIG = 0xFF,
};

/**
 * Vendor Specific Proprietary Protocol & Discovery Configuration.
 * Set to UNSUPPORTED_CONFIG if not supported.
 * discovery* fields map to "RF Technology and Mode" in NCI Spec
 * protocol* fields map to "RF protocols" in NCI Spec
 */
struct ProtocolDiscoveryConfig {
    uint8_t protocol18092Active;
    uint8_t protocolBPrime;
    uint8_t protocolDual;
    uint8_t protocol15693;
    uint8_t protocolKovio;
    uint8_t protocolMifare;
    uint8_t discoveryPollKovio;
    uint8_t discoveryPollBPrime;
    uint8_t discoveryListenBPrime;
};

/* Presence Check Algorithm as per ISO/IEC 14443-4 */
enum PresenceCheckAlgorithm : uint8_t {
    /** Lets the stack select an algorithm */
    DEFAULT = 0,
    /** ISO-DEP protocol's empty I-block */
    I_BLOCK = 1,
    /**
     * Type - 4 tag protocol iso-dep nak presence check command is sent waiting for
     * response and notification.
     */
    ISO_DEP_NAK = 2
};

struct NfcConfig {
    /** If true, NFCC is using bail out mode for either Type A or Type B poll. */
    bool nfaPollBailOutMode;

    PresenceCheckAlgorithm presenceCheckAlgorithm;

    ProtocolDiscoveryConfig nfaProprietaryCfg;

    /** Default off-host route. 0x00 if there aren't any. Refer to NCI spec. */
    uint8_t defaultOffHostRoute;

    /**
     * Default off-host route for Felica. 0x00 if there aren't any. Refer to
     * NCI spec.
     */
    uint8_t defaultOffHostRouteFelica;

    /** Default system code route. 0x00 if there aren't any. Refer NCI spec */
    uint8_t defaultSystemCodeRoute;

    /** Default power state for system code route. 0x00 if there aren't any. Refer NCI spec */
    uint8_t defaultSystemCodePowerState;

    /**
     * Default route for all remaining protocols and technology which haven't
     * been configured.
     * Device Host(0x00) is the default. Refer to NCI spec.
     * */
    uint8_t defaultRoute;

    /** Pipe ID for eSE. 0x00 if there aren't any. */
    uint8_t offHostESEPipeId;

    /** Pipe ID for UICC. 0x00 if there aren't any. */
    uint8_t offHostSIMPipeId;

    /** Extended APDU length for ISO_DEP. If not supported default length is 261 */
    uint32_t maxIsoDepTransceiveLength;

    /** list of white listed host ids, as per ETSI TS 102 622 */
    vec<uint8_t> hostWhitelist;
};
