/******************************************************************************
 *
 *  Copyright 2016 The Android Open Source Project
 *  Copyright 2002-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.
 *
 ******************************************************************************/
#ifndef BTA_HD_API_H
#define BTA_HD_API_H

#include "bta_api.h"
#include "hidd_api.h"

/*****************************************************************************
 *  Constants and Type Definitions
 ****************************************************************************/
#ifndef BTA_HD_DEBUG
#define BTA_HD_DEBUG FALSE
#endif

/* BTA HID Device callback events */
#define BTA_HD_ENABLE_EVT 0         /* BT-HD enabled */
#define BTA_HD_DISABLE_EVT 1        /* BT-HD disabled */
#define BTA_HD_REGISTER_APP_EVT 2   /* application registered */
#define BTA_HD_UNREGISTER_APP_EVT 3 /* application unregistered */
#define BTA_HD_OPEN_EVT 4           /* connection to host opened */
#define BTA_HD_CLOSE_EVT 5          /* connection to host closed */
#define BTA_HD_GET_REPORT_EVT 6     /* GET_REPORT request from host */
#define BTA_HD_SET_REPORT_EVT 7     /* SET_REPORT request from host */
#define BTA_HD_SET_PROTOCOL_EVT 8   /* SET_PROTOCOL request from host */
#define BTA_HD_INTR_DATA_EVT 9      /* DATA received from host on intr */
#define BTA_HD_VC_UNPLUG_EVT 10     /* Virtual Cable Unplug */
#define BTA_HD_CONN_STATE_EVT 11    /* Report connection state change */
#define BTA_HD_API_ERR_EVT 99       /* BT-HD API error */

typedef uint16_t tBTA_HD_EVT;

enum { BTA_HD_OK, BTA_HD_ERROR };
typedef uint8_t tBTA_HD_STATUS;

typedef tHID_DEV_DSCP_INFO tBTA_HD_DEV_DESCR;

typedef struct {
  char* p_name;
  char* p_description;
  char* p_provider;
  uint8_t subclass;
  tBTA_HD_DEV_DESCR descriptor;
} tBTA_HD_APP_INFO;

typedef struct {
  uint8_t service_type;
  uint32_t token_rate;
  uint32_t token_bucket_size;
  uint32_t peak_bandwidth;
  uint32_t access_latency;
  uint32_t delay_variation;
} tBTA_HD_QOS_INFO;

typedef struct {
  bool use_intr;
  uint8_t type;
  uint8_t id;
  uint16_t len;
  uint8_t* p_data;
} tBTA_HD_REPORT;

typedef struct {
  tBTA_HD_STATUS status;
  bool in_use;
  RawAddress bda;
} tBTA_HD_REG_STATUS;

typedef struct {
  RawAddress bda;
  tBTA_HD_STATUS status;
} tBTA_HD_CONN;

typedef struct {
  uint8_t report_type;
  uint8_t report_id;
  uint16_t buffer_size;
} tBTA_HD_GET_REPORT;

typedef struct {
  uint8_t report_type;
  uint8_t report_id;
  uint16_t len;
  uint8_t* p_data;
} tBTA_HD_SET_REPORT;

typedef uint8_t tBTA_HD_SET_PROTOCOL;

typedef struct {
  uint8_t report_id;
  uint16_t len;
  uint8_t* p_data;
} tBTA_HD_INTR_DATA;

/* union of data associated with HD callback */
typedef union {
  tBTA_HD_STATUS status;             /* BTA_HD_ENABLE_EVT
                                        BTA_HD_DISABLE_EVT
                                        BTA_HD_UNREGISTER_APP_EVT */
  tBTA_HD_REG_STATUS reg_status;     /* BTA_HD_REGISTER_APP_EVT */
  tBTA_HD_CONN conn;                 /* BTA_HD_OPEN_EVT
                                        BTA_HD_CLOSE_EVT
                                        BTA_HD_VC_UNPLUG_EVT
                                        BTA_HD_OWN_VC_UNPLUG_EVT */
  tBTA_HD_GET_REPORT get_report;     /* BTA_HD_GET_REPORT */
  tBTA_HD_SET_REPORT set_report;     /* BTA_HD_SET_REPORT */
  tBTA_HD_SET_PROTOCOL set_protocol; /* BTA_HD_SETPROTOCOL */
  tBTA_HD_INTR_DATA intr_data;       /* BTA_HD_INTR_DATA_EVT */
} tBTA_HD;

/* BTA HD callback function */
typedef void(tBTA_HD_CBACK)(tBTA_HD_EVT event, tBTA_HD* p_data);

/*****************************************************************************
 *  External Function Declarations
 ****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************************************
 *
 * Function         BTA_HhRegister
 *
 * Description      This function enable HID host and registers HID-Host with
 *                  lower layers.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdEnable(tBTA_HD_CBACK* p_cback);

/*******************************************************************************
 *
 * Function         BTA_HhDeregister
 *
 * Description      This function is called when the host is about power down.
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdDisable(void);

/*******************************************************************************
 *
 * Function         BTA_HdRegisterApp
 *
 * Description      This function is called when application should be
*registered
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdRegisterApp(tBTA_HD_APP_INFO* p_app_info,
                              tBTA_HD_QOS_INFO* p_in_qos,
                              tBTA_HD_QOS_INFO* p_out_qos);

/*******************************************************************************
 *
 * Function         BTA_HdUnregisterApp
 *
 * Description      This function is called when application should be
*unregistered
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdUnregisterApp(void);

/*******************************************************************************
 *
 * Function         BTA_HdSendReport
 *
 * Description      This function is called when report is to be sent
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdSendReport(tBTA_HD_REPORT* p_report);

/*******************************************************************************
 *
 * Function         BTA_HdVirtualCableUnplug
 *
 * Description      This function is called when VCU shall be sent
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdVirtualCableUnplug(void);

/*******************************************************************************
 *
 * Function         BTA_HdConnect
 *
 * Description      This function is called when connection to host shall be
 *                  made
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdConnect(const RawAddress& addr);

/*******************************************************************************
 *
 * Function         BTA_HdDisconnect
 *
 * Description      This function is called when host shall be disconnected
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdDisconnect(void);

/*******************************************************************************
 *
 * Function         BTA_HdAddDevice
 *
 * Description      This function is called when a device is virtually cabled
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdAddDevice(const RawAddress& addr);

/*******************************************************************************
 *
 * Function         BTA_HdRemoveDevice
 *
 * Description      This function is called when a device is virtually uncabled
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdRemoveDevice(const RawAddress& addr);

/*******************************************************************************
 *
 * Function         BTA_HdReportError
 *
 * Description      This function is called when reporting error for set report
 *
 * Returns          void
 *
 ******************************************************************************/
extern void BTA_HdReportError(uint8_t error);

#ifdef __cplusplus
}
#endif

#endif /* BTA_HD_API_H */
