/******************************************************************************
 *
 *  Copyright (C) 1999-2013 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 SRVC_DIS_API_H
#define SRVC_DIS_API_H

#include "bt_target.h"
#include "gatt_api.h"
#include "gattdefs.h"

#define DIS_SUCCESS GATT_SUCCESS
#define DIS_ILLEGAL_PARAM GATT_ILLEGAL_PARAMETER
#define DIS_NO_RESOURCES GATT_NO_RESOURCES
typedef uint8_t tDIS_STATUS;

/*****************************************************************************
 *  Data structure for DIS
 ****************************************************************************/

#define DIS_ATTR_SYS_ID_BIT 0x0001
#define DIS_ATTR_MODEL_NUM_BIT 0x0002
#define DIS_ATTR_SERIAL_NUM_BIT 0x0004
#define DIS_ATTR_FW_NUM_BIT 0x0008
#define DIS_ATTR_HW_NUM_BIT 0x0010
#define DIS_ATTR_SW_NUM_BIT 0x0020
#define DIS_ATTR_MANU_NAME_BIT 0x0040
#define DIS_ATTR_IEEE_DATA_BIT 0x0080
#define DIS_ATTR_PNP_ID_BIT 0x0100
typedef uint16_t tDIS_ATTR_MASK;

#define DIS_ATTR_ALL_MASK 0xffff

typedef tDIS_ATTR_MASK tDIS_ATTR_BIT;

typedef struct {
  uint16_t len;
  uint8_t* p_data;
} tDIS_STRING;

typedef struct {
  uint16_t vendor_id;
  uint16_t product_id;
  uint16_t product_version;
  uint8_t vendor_id_src;

} tDIS_PNP_ID;

typedef union {
  uint64_t system_id;
  tDIS_PNP_ID pnp_id;
  tDIS_STRING data_str;
} tDIS_ATTR;

#define DIS_MAX_STRING_DATA 7

typedef struct {
  uint16_t attr_mask;
  uint64_t system_id;
  tDIS_PNP_ID pnp_id;
  uint8_t* data_string[DIS_MAX_STRING_DATA];
} tDIS_VALUE;

typedef void(tDIS_READ_CBACK)(const RawAddress& addr, tDIS_VALUE* p_dis_value);

/*****************************************************************************
 *  Data structure used by Battery Service
 ****************************************************************************/
typedef struct {
  RawAddress remote_bda;
  bool need_rsp;
  uint16_t clt_cfg;
} tBA_WRITE_DATA;

#define BA_READ_CLT_CFG_REQ 1
#define BA_READ_PRE_FMT_REQ 2
#define BA_READ_RPT_REF_REQ 3
#define BA_READ_LEVEL_REQ 4
#define BA_WRITE_CLT_CFG_REQ 5

typedef void(tBA_CBACK)(uint8_t app_id, uint8_t event, tBA_WRITE_DATA* p_data);

#define BA_LEVEL_NOTIFY 0x01
#define BA_LEVEL_PRE_FMT 0x02
#define BA_LEVEL_RPT_REF 0x04
typedef uint8_t tBA_LEVEL_DESCR;

typedef struct {
  bool is_pri;
  tBA_LEVEL_DESCR ba_level_descr;
  tGATT_TRANSPORT transport;
  tBA_CBACK* p_cback;

} tBA_REG_INFO;

typedef union {
  uint8_t ba_level;
  uint16_t clt_cfg;
  tGATT_CHAR_RPT_REF rpt_ref;
  tGATT_CHAR_PRES pres_fmt;
} tBA_RSP_DATA;

/*****************************************************************************
 *  External Function Declarations
 ****************************************************************************/
/*****************************************************************************
 *  Service Engine API
 ****************************************************************************/
/*******************************************************************************
 *
 * Function         srvc_eng_init
 *
 * Description      Initializa the GATT Service engine, register a GATT
 *                  application as for a central service management.
 *
 ******************************************************************************/
extern tGATT_STATUS srvc_eng_init(void);

/*****************************************************************************
 *  DIS Server Function
 ****************************************************************************/

/*******************************************************************************
 *
 * Function         DIS_SrInit
 *
 * Description      Initializa the Device Information Service Server.
 *
 ******************************************************************************/
extern tDIS_STATUS DIS_SrInit(tDIS_ATTR_MASK dis_attr_mask);
/*******************************************************************************
 *
 * Function         DIS_SrUpdate
 *
 * Description      Update the DIS server attribute values
 *
 ******************************************************************************/
extern tDIS_STATUS DIS_SrUpdate(tDIS_ATTR_BIT dis_attr_bit, tDIS_ATTR* p_info);
/*****************************************************************************
 *  DIS Client Function
 ****************************************************************************/
/*******************************************************************************
 *
 * Function         DIS_ReadDISInfo
 *
 * Description      Read remote device DIS information.
 *
 * Returns          void
 *
 ******************************************************************************/
extern bool DIS_ReadDISInfo(const RawAddress& peer_bda,
                            tDIS_READ_CBACK* p_cback, tDIS_ATTR_MASK mask);

/*******************************************************************************
 *      BATTERY SERVICE API
 ******************************************************************************/
/*******************************************************************************
 *
 * Function         Battery_Instantiate
 *
 * Description      Instantiate a Battery service
 *
 ******************************************************************************/
extern uint16_t Battery_Instantiate(uint8_t app_id, tBA_REG_INFO* p_reg_info);

/*******************************************************************************
 *
 * Function         Battery_Rsp
 *
 * Description      Respond to a battery service request
 *
 ******************************************************************************/
extern void Battery_Rsp(uint8_t app_id, tGATT_STATUS st, uint8_t event,
                        tBA_RSP_DATA* p_rsp);
/*******************************************************************************
 *
 * Function         Battery_Notify
 *
 * Description      Send battery level notification
 *
 ******************************************************************************/
extern void Battery_Notify(uint8_t app_id, const RawAddress& remote_bda,
                           uint8_t battery_level);

#endif
