/******************************************************************************
 *
 *  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.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  This file contains HID protocol definitions
 *
 ******************************************************************************/

#ifndef HIDDEFS_H
#define HIDDEFS_H

#include "sdp_api.h"
/*
 * tHID_STATUS: HID result codes, returned by HID and device and host functions.
*/
enum {
  HID_SUCCESS,
  HID_ERR_NOT_REGISTERED,
  HID_ERR_ALREADY_REGISTERED,
  HID_ERR_NO_RESOURCES,
  HID_ERR_NO_CONNECTION,
  HID_ERR_INVALID_PARAM,
  HID_ERR_UNSUPPORTED,
  HID_ERR_UNKNOWN_COMMAND,
  HID_ERR_CONGESTED,
  HID_ERR_CONN_IN_PROCESS,
  HID_ERR_ALREADY_CONN,
  HID_ERR_DISCONNECTING,
  HID_ERR_SET_CONNABLE_FAIL,
  /* Device specific error codes */
  HID_ERR_HOST_UNKNOWN,
  HID_ERR_L2CAP_FAILED,
  HID_ERR_AUTH_FAILED,
  HID_ERR_SDP_BUSY,
  HID_ERR_GATT,

  HID_ERR_INVALID = 0xFF
};

typedef uint8_t tHID_STATUS;

#define HID_L2CAP_CONN_FAIL \
  (0x0100)                          /* Connection Attempt was made but failed */
#define HID_L2CAP_REQ_FAIL (0x0200) /* L2CAP_ConnectReq API failed */
#define HID_L2CAP_CFG_FAIL \
  (0x0400) /* L2CAP Configuration was rejected by peer */

/* Define the HID transaction types
*/
#define HID_TRANS_HANDSHAKE (0)
#define HID_TRANS_CONTROL (1)
#define HID_TRANS_GET_REPORT (4)
#define HID_TRANS_SET_REPORT (5)
#define HID_TRANS_GET_PROTOCOL (6)
#define HID_TRANS_SET_PROTOCOL (7)
#define HID_TRANS_GET_IDLE (8)
#define HID_TRANS_SET_IDLE (9)
#define HID_TRANS_DATA (10)
#define HID_TRANS_DATAC (11)

#define HID_GET_TRANS_FROM_HDR(x) (((x) >> 4) & 0x0f)
#define HID_GET_PARAM_FROM_HDR(x) ((x)&0x0f)
#define HID_BUILD_HDR(t, p) (uint8_t)(((t) << 4) | ((p)&0x0f))

/* Parameters for Handshake
*/
#define HID_PAR_HANDSHAKE_RSP_SUCCESS (0)
#define HID_PAR_HANDSHAKE_RSP_NOT_READY (1)
#define HID_PAR_HANDSHAKE_RSP_ERR_INVALID_REP_ID (2)
#define HID_PAR_HANDSHAKE_RSP_ERR_UNSUPPORTED_REQ (3)
#define HID_PAR_HANDSHAKE_RSP_ERR_INVALID_PARAM (4)
#define HID_PAR_HANDSHAKE_RSP_ERR_UNKNOWN (14)
#define HID_PAR_HANDSHAKE_RSP_ERR_FATAL (15)

/* Parameters for Control
*/
#define HID_PAR_CONTROL_NOP (0)
#define HID_PAR_CONTROL_HARD_RESET (1)
#define HID_PAR_CONTROL_SOFT_RESET (2)
#define HID_PAR_CONTROL_SUSPEND (3)
#define HID_PAR_CONTROL_EXIT_SUSPEND (4)
#define HID_PAR_CONTROL_VIRTUAL_CABLE_UNPLUG (5)

/* Different report types in get, set, data
*/
#define HID_PAR_REP_TYPE_MASK (0x03)
#define HID_PAR_REP_TYPE_OTHER (0x00)
#define HID_PAR_REP_TYPE_INPUT (0x01)
#define HID_PAR_REP_TYPE_OUTPUT (0x02)
#define HID_PAR_REP_TYPE_FEATURE (0x03)

/* Parameters for Get Report
*/

/* Buffer size in two bytes after Report ID */
#define HID_PAR_GET_REP_BUFSIZE_FOLLOWS (0x08)

/* Parameters for Protocol Type
*/
#define HID_PAR_PROTOCOL_MASK (0x01)
#define HID_PAR_PROTOCOL_REPORT (0x01)
#define HID_PAR_PROTOCOL_BOOT_MODE (0x00)

#define HID_PAR_REP_TYPE_MASK (0x03)

/* Descriptor types in the SDP record
*/
#define HID_SDP_DESCRIPTOR_REPORT (0x22)
#define HID_SDP_DESCRIPTOR_PHYSICAL (0x23)

typedef struct desc_info {
  uint16_t dl_len;
  uint8_t* dsc_list;
} tHID_DEV_DSCP_INFO;

#define HID_SSR_PARAM_INVALID 0xffff

typedef struct sdp_info {
  char svc_name[HID_MAX_SVC_NAME_LEN];   /*Service Name */
  char svc_descr[HID_MAX_SVC_DESCR_LEN]; /*Service Description*/
  char prov_name[HID_MAX_PROV_NAME_LEN]; /*Provider Name.*/
  uint16_t rel_num;                      /*Release Number */
  uint16_t hpars_ver;                    /*HID Parser Version.*/
  uint16_t ssr_max_latency;              /* HIDSSRHostMaxLatency value, if
                                            HID_SSR_PARAM_INVALID not used*/
  uint16_t
      ssr_min_tout;  /* HIDSSRHostMinTimeout value, if HID_SSR_PARAM_INVALID not
                        used* */
  uint8_t sub_class; /*Device Subclass.*/
  uint8_t ctry_code; /*Country Code.*/
  uint16_t sup_timeout; /* Supervisory Timeout */

  tHID_DEV_DSCP_INFO dscp_info; /* Descriptor list and Report list to be set in
                                  the SDP record.
                                  This parameter is used if
                                  HID_DEV_USE_GLB_SDP_REC is set to false.*/
  tSDP_DISC_REC* p_sdp_layer_rec;
} tHID_DEV_SDP_INFO;

#endif
