/***************************************************************************
 *
 * Copyright 2015-2019 BES.
 * All rights reserved. All unpublished rights reserved.
 *
 * No part of this work may be used or reproduced in any form or by any
 * means, or stored in a database or retrieval system, without prior written
 * permission of BES.
 *
 * Use of this work is governed by a license granted by BES.
 * This work contains confidential and proprietary information of
 * BES. which is protected by copyright, trade secret,
 * trademark and other intellectual property rights.
 *
 ****************************************************************************/
#ifndef _L2CAP_API_H
#define _L2CAP_API_H
#include "bluetooth.h"
#include "me_api.h"
#include "stdbool.h"

#define BTIF_NULL_IDENTIFIER_CID      0x0000
#define BTIF_SIGNALING_CHNL_CID       0x0001
#define BTIF_CONNLESS_CHNL_CID        0x0002
#define BTIF_BASE_DYNAMIC_CID         0x0040
#define BTIF_LAST_DYNAMIC_CID         (BTIF_BASE_DYNAMIC_CID + L2CAP_NUM_CHANNELS - 1)
#define BTIF_CID_TO_INDEX(_CID)       ((_CID) - BTIF_BASE_DYNAMIC_CID)
#define BTIF_BASE_GROUP_CID           ((BTIF_LAST_DYNAMIC_CID+16) & 0xFFF0)
#define BTIF_LAST_GROUP_CID           (BTIF_BASE_GROUP_CID + L2CAP_NUM_GROUPS - 1)
#define BTIF_GROUP_CID_TO_INDEX(_CID) ((_CID) - BTIF_BASE_GROUP_CID)

#define BTIF_LLC_COMMAND_REJ     0x01
#define BTIF_LLC_CONN_REQ        0x02
#define BTIF_LLC_CONN_RSP        0x03
#define BTIF_LLC_CONFIG_REQ      0x04
#define BTIF_LLC_CONFIG_RSP      0x05
#define BTIF_LLC_DISC_REQ        0x06
#define BTIF_LLC_DISC_RSP        0x07
#define BTIF_LLC_ECHO_REQ        0x08
#define BTIF_LLC_ECHO_RSP        0x09
#define BTIF_LLC_INFO_REQ        0x0A
#define BTIF_LLC_INFO_RSP        0x0B
#define  BTIF_LLC_TWS_DATA_XFER	0xFE

typedef U16 btif_l2cap_psm_value_t;

#define BTIF_BT_CLIENT_ONLY_PSM      0x0000

/* Value for a Service Discovery Protocol server */
#define BTIF_BT_PSM_SDP              0x0001

/* Value for an RFCOMM server */
#define BTIF_BT_PSM_RFCOMM           0x0003

/* Value for a TCS Binary server */
#define BTIF_BT_PSM_TCS              0x0005

/* Value for a TCS Binary group */
#define BTIF_BT_PSM_TCS_CORDLESS     0x0007

/* Value for the BNEP service */
#define BTIF_BT_PSM_BNEP             0x000F

/* Value for the HID Control Channel */
#define BTIF_BT_PSM_HID_CTRL         0x0011

/* Value for the HID Interrupt Channel */
#define BTIF_BT_PSM_HID_INTR         0x0013

/* Value for the UPnP/ESDP service */
#define BTIF_BT_PSM_UPNP             0x0015

/* Value for the A/V Control Transport Protocol signal channel */
#define BTIF_BT_PSM_AVCTP            0x0017

/* Value for the A/V Distribution Transport protocol */
#define BTIF_BT_PSM_AVDTP            0x0019

/* Value for the A/V Control Transport Protocol browsing channel*/
#define BTIF_BT_PSM_AVCTP_BROWSING   0x001B

/* Value for Unrestricted Digital Information Control Plane protocol */
#define BTIF_BT_PSM_UDI_C            0x001D

#define BTIF_BT_DYNAMIC_PSM          0x1101

typedef void btif_l2cap_channel_t;

#ifdef __cplusplus
extern "C" {
#endif

#if defined(IBRT)
    bool btif_l2cap_is_profile_channel_connected(uint8_t psm_context_mask);
#endif
    void btif_l2cap_register_sdp_disconnect_callback(btif_callback cb);
	void btif_btm_register_get_ibrt_role_callback(btif_callback_ext cb);
     void btif_btm_register_get_tss_state_callback(btif_callback_ext cb);
    btif_l2cap_channel_t *btif_l2cap_alloc_channel_instance(uint16_t index);
    btif_l2cap_channel_t *btif_l2cap_get_l2cap_channel_instance(uint16_t index);
    uint16_t btif_l2cap_cid_to_index(uint16_t index);
    uint32_t btif_l2cap_get_channel_size(void);
    void btif_l2cap_set_channel_local_cid(btif_l2cap_channel_t * channel, uint16_t cid);
    void btif_l2cap_set_channel_remote_cid(btif_l2cap_channel_t * channel, uint16_t cid);
    uint16_t btif_l2cap_get_channel_local_cid(btif_l2cap_channel_t * channel);
    uint16_t btif_l2cap_get_channel_remote_cid(btif_l2cap_channel_t * channel);

#if IS_USE_INTERNAL_ACL_DATA_PATH

#else
    bt_status_t btif_l2cap_send_data_to_peer_tws(U16 connHandle, U8 dataLen, U8 * data);

#endif

#ifdef __cplusplus
}
#endif
#endif