/*
 * Copyright (C) 2015 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.
 */

/******************************************************************************
 *
 *  This file contains compile-time configurable constants for vendor specific
 *proprietary protocols
 *
 ******************************************************************************/
#ifndef __NFC_VENDOR_CFG_H__
#define __NFC_VENDOR_CFG_H__

/* compile-time configuration structure for proprietary protocol and discovery
 * value */
typedef struct {
  uint8_t pro_protocol_18092_active;
  uint8_t pro_protocol_b_prime;
  uint8_t pro_protocol_dual;
  uint8_t pro_protocol_15693;
  uint8_t pro_protocol_kovio;
  uint8_t pro_protocol_mfc;

  uint8_t pro_discovery_kovio_poll;
  uint8_t pro_discovery_b_prime_poll;
  uint8_t pro_discovery_b_prime_listen;
  uint8_t pro_protocol_chinese_id;
} tNFA_PROPRIETARY_CFG;

extern tNFA_PROPRIETARY_CFG* p_nfa_proprietary_cfg;

/**********************************************
 * Proprietary Protocols
 **********************************************/
#ifndef NCI_PROTOCOL_18092_ACTIVE
#define NCI_PROTOCOL_18092_ACTIVE \
  (p_nfa_proprietary_cfg->pro_protocol_18092_active)
#endif
#ifndef NCI_PROTOCOL_B_PRIME
#define NCI_PROTOCOL_B_PRIME (p_nfa_proprietary_cfg->pro_protocol_b_prime)
#endif
#ifndef NCI_PROTOCOL_DUAL
#define NCI_PROTOCOL_DUAL (p_nfa_proprietary_cfg->pro_protocol_dual)
#endif
#ifndef NCI_PROTOCOL_15693
#define NCI_PROTOCOL_15693 (p_nfa_proprietary_cfg->pro_protocol_15693)
#endif
#ifndef NCI_PROTOCOL_KOVIO
#define NCI_PROTOCOL_KOVIO (p_nfa_proprietary_cfg->pro_protocol_kovio)
#endif
#ifndef NCI_PROTOCOL_MIFARE
#define NCI_PROTOCOL_MIFARE (p_nfa_proprietary_cfg->pro_protocol_mfc)
#endif
#ifndef NCI_PROTOCOL_CI
#define NCI_PROTOCOL_CI (p_nfa_proprietary_cfg->pro_protocol_chinese_id)
#endif

/**********************************************
 * Proprietary Discovery technology and mode
 **********************************************/
#ifndef NCI_DISCOVERY_TYPE_POLL_KOVIO
#define NCI_DISCOVERY_TYPE_POLL_KOVIO \
  (p_nfa_proprietary_cfg->pro_discovery_kovio_poll)
#endif

#ifndef NCI_DISCOVERY_TYPE_POLL_B_PRIME
#define NCI_DISCOVERY_TYPE_POLL_B_PRIME \
  (p_nfa_proprietary_cfg->pro_discovery_b_prime_poll)
#endif

#ifndef NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME \
  (p_nfa_proprietary_cfg->pro_discovery_b_prime_listen)
#endif

#endif /* __NFC_VENDOR_CFG_H__ */
