/******************************************************************************
 *
 *  Copyright (C) 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
