/******************************************************************************
 *
 *  Copyright 2003-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 system manager.
 *
 ******************************************************************************/
#ifndef BTA_SYS_INT_H
#define BTA_SYS_INT_H

/*****************************************************************************
 *  Constants and data types
 ****************************************************************************/

/*****************************************************************************
 *  state table
 ****************************************************************************/

/* SYS HW state */
enum {
  BTA_SYS_HW_OFF,
  BTA_SYS_HW_STARTING,
  BTA_SYS_HW_ON,
  BTA_SYS_HW_STOPPING
};
typedef uint8_t tBTA_SYS_HW_STATE;

/* Collision callback */
#define MAX_COLLISION_REG 5

typedef struct {
  uint8_t id[MAX_COLLISION_REG];
  tBTA_SYS_CONN_CBACK* p_coll_cback[MAX_COLLISION_REG];
} tBTA_SYS_COLLISION;

/* system manager control block */
typedef struct {
  tBTA_SYS_REG* reg[BTA_ID_MAX]; /* registration structures */
  bool is_reg[BTA_ID_MAX];       /* registration structures */
  tBTA_SYS_HW_STATE state;
  tBTA_SYS_HW_CBACK* sys_hw_cback[BTA_SYS_MAX_HW_MODULES]; /* enable callback
                                                              for each HW
                                                              modules */
  uint32_t sys_hw_module_active; /* bitmask of all active modules */
  uint16_t sys_features;         /* Bitmask of sys features */

  tBTA_SYS_CONN_CBACK* prm_cb; /* role management callback registered by DM */
  tBTA_SYS_CONN_CBACK*
      ppm_cb; /* low power management callback registered by DM */
  tBTA_SYS_CONN_CBACK*
      p_policy_cb; /* link policy change callback registered by DM */
  tBTA_SYS_CONN_CBACK*
      p_sco_cb; /* SCO connection change callback registered by AV */
  tBTA_SYS_CONN_CBACK* p_role_cb; /* role change callback registered by AV */
  tBTA_SYS_COLLISION colli_reg;   /* collision handling module */
#if (BTA_EIR_CANNED_UUID_LIST != TRUE)
  tBTA_SYS_EIR_CBACK* eir_cb; /* add/remove UUID into EIR */
#endif
#if (BTM_SSR_INCLUDED == TRUE)
  tBTA_SYS_SSR_CFG_CBACK* p_ssr_cb;
#endif
  /* VS event handler */
  tBTA_SYS_VS_EVT_HDLR* p_vs_evt_hdlr;

} tBTA_SYS_CB;

/*****************************************************************************
 *  Global variables
 ****************************************************************************/

/* system manager control block */
extern tBTA_SYS_CB bta_sys_cb;

/* functions used for BTA SYS HW state machine */
void bta_sys_hw_btm_cback(tBTM_DEV_STATUS status);
void bta_sys_hw_error(tBTA_SYS_HW_MSG* p_sys_hw_msg);
void bta_sys_hw_api_enable(tBTA_SYS_HW_MSG* p_sys_hw_msg);
void bta_sys_hw_api_disable(tBTA_SYS_HW_MSG* p_sys_hw_msg);
void bta_sys_hw_evt_enabled(tBTA_SYS_HW_MSG* p_sys_hw_msg);
void bta_sys_hw_evt_disabled(tBTA_SYS_HW_MSG* p_sys_hw_msg);
void bta_sys_hw_evt_stack_enabled(tBTA_SYS_HW_MSG* p_sys_hw_msg);

bool bta_sys_sm_execute(BT_HDR* p_msg);

#endif /* BTA_SYS_INT_H */
