/******************************************************************************
 *
 *  Copyright 2016 The Android Open Source Project
 *  Copyright 2005-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 file contains BTA HID Device internal definitions
 *
 ******************************************************************************/

#ifndef BTA_HD_INT_H
#define BTA_HD_INT_H

#include "bta_hd_api.h"
#include "bta_sys.h"
#include "hiddefs.h"

enum {
  BTA_HD_API_REGISTER_APP_EVT = BTA_SYS_EVT_START(BTA_ID_HD),
  BTA_HD_API_UNREGISTER_APP_EVT,
  BTA_HD_API_CONNECT_EVT,
  BTA_HD_API_DISCONNECT_EVT,
  BTA_HD_API_ADD_DEVICE_EVT,
  BTA_HD_API_REMOVE_DEVICE_EVT,
  BTA_HD_API_SEND_REPORT_EVT,
  BTA_HD_API_REPORT_ERROR_EVT,
  BTA_HD_API_VC_UNPLUG_EVT,
  BTA_HD_INT_OPEN_EVT,
  BTA_HD_INT_CLOSE_EVT,
  BTA_HD_INT_INTR_DATA_EVT,
  BTA_HD_INT_GET_REPORT_EVT,
  BTA_HD_INT_SET_REPORT_EVT,
  BTA_HD_INT_SET_PROTOCOL_EVT,
  BTA_HD_INT_VC_UNPLUG_EVT,
  BTA_HD_INT_SUSPEND_EVT,
  BTA_HD_INT_EXIT_SUSPEND_EVT,

  /* handled outside state machine */
  BTA_HD_API_ENABLE_EVT,
  BTA_HD_API_DISABLE_EVT
};
typedef uint16_t tBTA_HD_INT_EVT;

#define BTA_HD_INVALID_EVT (BTA_HD_API_DISABLE_EVT + 1)

typedef struct {
  BT_HDR hdr;
  tBTA_HD_CBACK* p_cback;
} tBTA_HD_API_ENABLE;

#define BTA_HD_APP_NAME_LEN 50
#define BTA_HD_APP_DESCRIPTION_LEN 50
#define BTA_HD_APP_PROVIDER_LEN 50
#define BTA_HD_APP_DESCRIPTOR_LEN 2048

#define BTA_HD_STATE_DISABLED 0x00
#define BTA_HD_STATE_ENABLED 0x01
#define BTA_HD_STATE_IDLE 0x02
#define BTA_HD_STATE_CONNECTED 0x03
#define BTA_HD_STATE_DISABLING 0x04
#define BTA_HD_STATE_REMOVING 0x05

typedef struct {
  BT_HDR hdr;
  char name[BTA_HD_APP_NAME_LEN];
  char description[BTA_HD_APP_DESCRIPTION_LEN];
  char provider[BTA_HD_APP_PROVIDER_LEN];
  uint8_t subclass;
  uint16_t d_len;
  uint8_t d_data[BTA_HD_APP_DESCRIPTOR_LEN];

  tBTA_HD_QOS_INFO in_qos;
  tBTA_HD_QOS_INFO out_qos;
} tBTA_HD_REGISTER_APP;

#define BTA_HD_REPORT_LEN HID_DEV_MTU_SIZE

typedef struct {
  BT_HDR hdr;
  bool use_intr;
  uint8_t type;
  uint8_t id;
  uint16_t len;
  uint8_t data[BTA_HD_REPORT_LEN];
} tBTA_HD_SEND_REPORT;

typedef struct {
  BT_HDR hdr;
  RawAddress addr;
} tBTA_HD_DEVICE_CTRL;

typedef struct {
  BT_HDR hdr;
  uint8_t error;
} tBTA_HD_REPORT_ERR;

/* union of all event data types */
typedef union {
  BT_HDR hdr;
  tBTA_HD_API_ENABLE api_enable;
  tBTA_HD_REGISTER_APP register_app;
  tBTA_HD_SEND_REPORT send_report;
  tBTA_HD_DEVICE_CTRL device_ctrl;
  tBTA_HD_REPORT_ERR report_err;
} tBTA_HD_DATA;

typedef struct {
  BT_HDR hdr;
  RawAddress addr;
  uint32_t data;
  BT_HDR* p_data;
} tBTA_HD_CBACK_DATA;

/******************************************************************************
 * Main Control Block
 ******************************************************************************/
typedef struct {
  tBTA_HD_CBACK* p_cback;
  uint32_t sdp_handle;
  uint8_t trace_level;
  uint8_t state;
  RawAddress bd_addr;
  bool use_report_id;
  bool boot_mode;
  bool vc_unplug;
  bool disable_w4_close;
} tBTA_HD_CB;

extern tBTA_HD_CB bta_hd_cb;

/*****************************************************************************
 *  Function prototypes
 ****************************************************************************/
extern bool bta_hd_hdl_event(BT_HDR* p_msg);

extern void bta_hd_api_enable(tBTA_HD_DATA* p_data);
extern void bta_hd_api_disable(void);

extern void bta_hd_register_act(tBTA_HD_DATA* p_data);
extern void bta_hd_unregister_act(tBTA_HD_DATA* p_data);
extern void bta_hd_unregister2_act(tBTA_HD_DATA* p_data);
extern void bta_hd_connect_act(tBTA_HD_DATA* p_data);
extern void bta_hd_disconnect_act(tBTA_HD_DATA* p_data);
extern void bta_hd_add_device_act(tBTA_HD_DATA* p_data);
extern void bta_hd_remove_device_act(tBTA_HD_DATA* p_data);
extern void bta_hd_send_report_act(tBTA_HD_DATA* p_data);
extern void bta_hd_report_error_act(tBTA_HD_DATA* p_data);
extern void bta_hd_vc_unplug_act(tBTA_HD_DATA* p_data);

extern void bta_hd_open_act(tBTA_HD_DATA* p_data);
extern void bta_hd_close_act(tBTA_HD_DATA* p_data);
extern void bta_hd_intr_data_act(tBTA_HD_DATA* p_data);
extern void bta_hd_get_report_act(tBTA_HD_DATA* p_data);
extern void bta_hd_set_report_act(tBTA_HD_DATA* p_data);
extern void bta_hd_set_protocol_act(tBTA_HD_DATA* p_data);
extern void bta_hd_vc_unplug_done_act(tBTA_HD_DATA* p_data);
extern void bta_hd_suspend_act(tBTA_HD_DATA* p_data);
extern void bta_hd_exit_suspend_act(tBTA_HD_DATA* p_data);

#endif
