/******************************************************************************
 *
 *  Copyright 2009-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 interface file for the HL (HeaLth device profile) subsystem
 *  call-out functions.
 *
 ******************************************************************************/
#ifndef BTA_HL_CO_H
#define BTA_HL_CO_H

#include "bta_api.h"
#include "bta_hl_api.h"

/*****************************************************************************
 *  Constants and Data Types
 ****************************************************************************/
/**************************
 *  Common Definitions
 **************************/

/*******************************************************************************
 *
 * Function        bta_hl_co_get_num_of_mdep
 *
 * Description     This function is called to get the number of MDEPs for this
 *                 application ID
 *
 * Parameters      app_id - application ID
 *                 p_num_of_mdep (output) - number of MDEP configurations
 *                                          supported
 *                                          by the application
 *
 * Returns         Bloolean - true success
 *
 ******************************************************************************/
extern bool bta_hl_co_get_num_of_mdep(uint8_t app_id, uint8_t* p_num_of_mdep);
/*******************************************************************************
 *
 * Function        bta_hl_co_advrtise_source_sdp
 *
 * Description     This function is called to find out whether the SOURCE MDEP
 *                 configuration information should be advertize in the SDP or
 *                 not
 *
 * Parameters      app_id - application ID
 *
 * Returns         Bloolean - true advertise the SOURCE MDEP configuration
 *                            information
 *
 ******************************************************************************/
extern bool bta_hl_co_advrtise_source_sdp(uint8_t app_id);
/*******************************************************************************
 *
 * Function        bta_hl_co_get_mdep_config
 *
 * Description     This function is called to get the supported feature
 *                 configuration for the specified mdep index and it also
 *                 assigns
 *                 the MDEP ID for the specified mdep index
 *
 * Parameters      app_id - HDP application ID
 *                 mdep_idx - the mdep index
 *                  mdep_counter - mdep_counter
 *                 mdep_id  - the assigned MDEP ID for the specified medp_idx
 *                 p_mdl_cfg (output) - pointer to the MDEP configuration
 *
 *
 * Returns         Bloolean - true success
 ******************************************************************************/
extern bool bta_hl_co_get_mdep_config(uint8_t app_id, uint8_t mdep_idx,
                                      uint8_t mdep_counter,
                                      tBTA_HL_MDEP_ID mdep_id,
                                      tBTA_HL_MDEP_CFG* p_mdep_cfg);

/*******************************************************************************
 *
 * Function        bta_hl_co_get_echo_config
 *
 * Description     This function is called to get the echo test
 *                 maximum APDU size configuration
 *
 * Parameters      app_id - HDP application ID
 *                 p_echo_cfg (output) - pointer to the Echo test maximum APDU
 *                                       size configuration
 *
 * Returns         Bloolean - true success
 ******************************************************************************/
extern bool bta_hl_co_get_echo_config(uint8_t app_id,
                                      tBTA_HL_ECHO_CFG* p_echo_cfg);

/*******************************************************************************
 *
 * Function        bta_hl_co_save_mdl
 *
 * Description     This function is called to save a MDL configuration item in
 *                 persistent storage
 *
 * Parameters      app_id - HDP application ID
 *                 item_idx - the MDL configuration storage index
 *                 p_mdl_cfg - pointer to the MDL configuration data
 *
 * Returns          void
 *
 ******************************************************************************/
extern void bta_hl_co_save_mdl(uint8_t app_id, uint8_t item_idx,
                               tBTA_HL_MDL_CFG* p_mdl_cfg);
/*******************************************************************************
 *
 * Function        bta_hl_co_delete_mdl
 *
 * Description     This function is called to delete a MDL configuration item in
 *                 persistent storage
 *
 * Parameters      app_id - HDP application ID
 *                 item_idx - the MDL configuration storage index
 *
 * Returns          void
 *
 ******************************************************************************/
extern void bta_hl_co_delete_mdl(uint8_t app_id, uint8_t item_idx);
/*******************************************************************************
 *
 * Function         bta_hl_co_get_mdl_config
 *
 * Description     This function is called to get the MDL configuration
 *                 from teh persistent memory. This function shall only be
*called
*8                 once after the device is powered up
 *
 * Parameters      app_id - HDP application ID
 *                 buffer_size - the unit of the buffer size is
*sizeof(tBTA_HL_MDL_CFG)
 *                 p_mdl_buf - Point to the starting location of the buffer
 *
 * Returns         bool
 *
 *
 ******************************************************************************/
extern bool bta_hl_co_load_mdl_config(uint8_t app_id, uint8_t buffer_size,
                                      tBTA_HL_MDL_CFG* p_mdl_buf);

/*******************************************************************************
 *
 * Function         bta_hl_co_get_tx_data
 *
 * Description     Get the data to be sent
 *
 * Parameters      app_id - HDP application ID
 *                 mdl_handle - MDL handle
 *                 buf_size - the size of the buffer
 *                 p_buf - the buffer pointer
 *                 evt - the evt to be passed back to the HL in the
 *                       bta_hl_ci_get_tx_data call-in function
 *
 * Returns        Void
 *
 ******************************************************************************/
extern void bta_hl_co_get_tx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle,
                                  uint16_t buf_size, uint8_t* p_buf,
                                  uint16_t evt);

/*******************************************************************************
 *
 * Function        bta_hl_co_put_rx_data
 *
 * Description     Put the received data
 *
 * Parameters      app_id - HDP application ID
 *                 mdl_handle - MDL handle
 *                 data_size - the size of the data
 *                 p_data - the data pointer
 *                 evt - the evt to be passed back to the HL in the
 *                       bta_hl_ci_put_rx_data call-in function
 *
 * Returns        Void
 *
 ******************************************************************************/
extern void bta_hl_co_put_rx_data(uint8_t app_id, tBTA_HL_MDL_HANDLE mdl_handle,
                                  uint16_t data_size, uint8_t* p_data,
                                  uint16_t evt);
/*******************************************************************************
 *
 * Function         bta_hl_co_get_tx_data
 *
 * Description     Get the Echo data to be sent
 *
 * Parameters      app_id - HDP application ID
 *                 mcl_handle - MCL handle
 *                 buf_size - the size of the buffer
 *                 p_buf - the buffer pointer
 *                 evt - the evt to be passed back to the HL in the
 *                       bta_hl_ci_get_tx_data call-in function
 *
 * Returns        Void
 *
 ******************************************************************************/
extern void bta_hl_co_get_echo_data(uint8_t app_id,
                                    tBTA_HL_MCL_HANDLE mcl_handle,
                                    uint16_t buf_size, uint8_t* p_buf,
                                    uint16_t evt);

/*******************************************************************************
 *
 * Function        bta_hl_co_put_echo_data
 *
 * Description     Put the received loopback echo data
 *
 * Parameters      app_id - HDP application ID
 *                 mcl_handle - MCL handle
 *                 data_size - the size of the data
 *                 p_data - the data pointer
 *                 evt - the evt to be passed back to the HL in the
 *                       bta_hl_ci_put_echo_data call-in function
 *
 * Returns        Void
 *
 ******************************************************************************/
extern void bta_hl_co_put_echo_data(uint8_t app_id,
                                    tBTA_HL_MCL_HANDLE mcl_handle,
                                    uint16_t data_size, uint8_t* p_data,
                                    uint16_t evt);

#endif /* BTA_HL_CO_H */
