/******************************************************************************
 *
 *  Copyright (C) 2004-2012 Broadcom Corporation
 *
 *  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 is the private interface file for the BTA data gateway.
 *
 ******************************************************************************/
#ifndef BTA_PAN_INT_H
#define BTA_PAN_INT_H

#include "bta_pan_api.h"
#include "bta_sys.h"
#include "osi/include/fixed_queue.h"

/*****************************************************************************
 *  Constants
 ****************************************************************************/

/* PAN events */
enum {
  /* these events are handled by the state machine */
  BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN),
  BTA_PAN_CI_TX_READY_EVT,
  BTA_PAN_CI_RX_READY_EVT,
  BTA_PAN_CI_TX_FLOW_EVT,
  BTA_PAN_CI_RX_WRITE_EVT,
  BTA_PAN_CI_RX_WRITEBUF_EVT,
  BTA_PAN_CONN_OPEN_EVT,
  BTA_PAN_CONN_CLOSE_EVT,
  BTA_PAN_BNEP_FLOW_ENABLE_EVT,
  BTA_PAN_RX_FROM_BNEP_READY_EVT,

  /* these events are handled outside of the state machine */
  BTA_PAN_API_ENABLE_EVT,
  BTA_PAN_API_DISABLE_EVT,
  BTA_PAN_API_SET_ROLE_EVT,
  BTA_PAN_API_OPEN_EVT
};

/* state machine states */
enum { BTA_PAN_IDLE_ST, BTA_PAN_OPEN_ST, BTA_PAN_CLOSING_ST };

/*****************************************************************************
 *  Data types
 ****************************************************************************/

/* data type for BTA_PAN_API_ENABLE_EVT */
typedef struct {
  BT_HDR hdr;              /* Event header */
  tBTA_PAN_CBACK* p_cback; /* PAN callback function */
} tBTA_PAN_API_ENABLE;

/* data type for BTA_PAN_API_REG_ROLE_EVT */
typedef struct {
  BT_HDR hdr;                               /* Event header */
  char user_name[BTA_SERVICE_NAME_LEN + 1]; /* Service name */
  char gn_name[BTA_SERVICE_NAME_LEN + 1];   /* Service name */
  char nap_name[BTA_SERVICE_NAME_LEN + 1];  /* Service name */
  tBTA_PAN_ROLE role;
  uint8_t user_app_id;
  uint8_t gn_app_id;
  uint8_t nap_app_id;
  tBTA_SEC user_sec_mask; /* Security mask */
  tBTA_SEC gn_sec_mask;   /* Security mask */
  tBTA_SEC nap_sec_mask;  /* Security mask */

} tBTA_PAN_API_SET_ROLE;

/* data type for BTA_PAN_API_OPEN_EVT */
typedef struct {
  BT_HDR hdr;               /* Event header */
  tBTA_PAN_ROLE local_role; /* local role */
  tBTA_PAN_ROLE peer_role;  /* peer role */
  RawAddress bd_addr;       /* peer bdaddr */
} tBTA_PAN_API_OPEN;

/* data type for BTA_PAN_CI_TX_FLOW_EVT */
typedef struct {
  BT_HDR hdr;  /* Event header */
  bool enable; /* Flow control setting */
} tBTA_PAN_CI_TX_FLOW;

/* data type for BTA_PAN_CONN_OPEN_EVT */
typedef struct {
  BT_HDR hdr; /* Event header */
  tPAN_RESULT result;

} tBTA_PAN_CONN;

/* union of all data types */
typedef union {
  BT_HDR hdr;
  tBTA_PAN_API_ENABLE api_enable;
  tBTA_PAN_API_SET_ROLE api_set_role;
  tBTA_PAN_API_OPEN api_open;
  tBTA_PAN_CI_TX_FLOW ci_tx_flow;
  tBTA_PAN_CONN conn;
} tBTA_PAN_DATA;

/* state machine control block */
typedef struct {
  RawAddress bd_addr; /* peer bdaddr */
  fixed_queue_t*
      data_queue;    /* Queue of buffers waiting to be passed to application */
  uint16_t handle;   /* BTA PAN/BNEP handle */
  bool in_use;       /* scb in use */
  tBTA_SEC sec_mask; /* Security mask */
  bool pan_flow_enable;     /* BNEP flow control state */
  bool app_flow_enable;     /* Application flow control state */
  uint8_t state;            /* State machine state */
  tBTA_PAN_ROLE local_role; /* local role */
  tBTA_PAN_ROLE peer_role;  /* peer role */
  uint8_t app_id;           /* application id for the connection */

} tBTA_PAN_SCB;

/* main control block */
typedef struct {
  tBTA_PAN_SCB scb[BTA_PAN_NUM_CONN]; /* state machine control blocks */
  tBTA_PAN_CBACK* p_cback;            /* PAN callback function */
  uint8_t app_id[3];                  /* application id for PAN roles */
  uint8_t flow_mask;                  /* Data flow mask */
  uint8_t q_level; /* queue level set by application for TX data */

} tBTA_PAN_CB;

/* pan data param */
typedef struct {
  BT_HDR hdr;
  RawAddress src;
  RawAddress dst;
  uint16_t protocol;
  bool ext;
  bool forward;

} tBTA_PAN_DATA_PARAMS;

/*****************************************************************************
 *  Global data
 ****************************************************************************/

/* PAN control block */
extern tBTA_PAN_CB bta_pan_cb;

/*****************************************************************************
 *  Function prototypes
 ****************************************************************************/
extern tBTA_PAN_SCB* bta_pan_scb_alloc(void);
extern void bta_pan_scb_dealloc(tBTA_PAN_SCB* p_scb);
extern uint8_t bta_pan_scb_to_idx(tBTA_PAN_SCB* p_scb);
extern tBTA_PAN_SCB* bta_pan_scb_by_handle(uint16_t handle);
extern bool bta_pan_hdl_event(BT_HDR* p_msg);

/* action functions */
extern void bta_pan_enable(tBTA_PAN_DATA* p_data);
extern void bta_pan_disable(void);
extern void bta_pan_set_role(tBTA_PAN_DATA* p_data);
extern void bta_pan_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_api_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_set_shutdown(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_rx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_tx_path(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_tx_flow(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_conn_open(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_conn_close(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_writebuf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_write_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);
extern void bta_pan_free_buf(tBTA_PAN_SCB* p_scb, tBTA_PAN_DATA* p_data);

#endif /* BTA_PAN_INT_H */
