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

#include "stack/include/sdp_api.h"
/*
 * tHID_STATUS: HID result codes, returned by HID and device and host functions.
*/
typedef enum : uint8_t {
  HID_SUCCESS = 0,
  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
} tHID_STATUS;

#define CASE_RETURN_TEXT(code) \
  case code:                   \
    return #code

inline std::string hid_status_text(const tHID_STATUS& status) {
  switch (status) {
    CASE_RETURN_TEXT(HID_SUCCESS);
    CASE_RETURN_TEXT(HID_ERR_NOT_REGISTERED);
    CASE_RETURN_TEXT(HID_ERR_ALREADY_REGISTERED);
    CASE_RETURN_TEXT(HID_ERR_NO_RESOURCES);
    CASE_RETURN_TEXT(HID_ERR_NO_CONNECTION);
    CASE_RETURN_TEXT(HID_ERR_INVALID_PARAM);
    CASE_RETURN_TEXT(HID_ERR_UNSUPPORTED);
    CASE_RETURN_TEXT(HID_ERR_UNKNOWN_COMMAND);
    CASE_RETURN_TEXT(HID_ERR_CONGESTED);
    CASE_RETURN_TEXT(HID_ERR_CONN_IN_PROCESS);
    CASE_RETURN_TEXT(HID_ERR_ALREADY_CONN);
    CASE_RETURN_TEXT(HID_ERR_DISCONNECTING);
    CASE_RETURN_TEXT(HID_ERR_SET_CONNABLE_FAIL);
    CASE_RETURN_TEXT(HID_ERR_HOST_UNKNOWN);
    CASE_RETURN_TEXT(HID_ERR_L2CAP_FAILED);
    CASE_RETURN_TEXT(HID_ERR_AUTH_FAILED);
    CASE_RETURN_TEXT(HID_ERR_SDP_BUSY);
    CASE_RETURN_TEXT(HID_ERR_GATT);
    CASE_RETURN_TEXT(HID_ERR_INVALID);
    default:
      return std::string("UNKNOWN[%hhu]", status);
  }
}
#undef CASE_RETURN_TEXT

#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

#define HIDD_APP_DESCRIPTOR_LEN 2048

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
