1dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie/******************************************************************************
2dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski *  Copyright 1999-2013 Broadcom Corporation
4dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
5dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  Licensed under the Apache License, Version 2.0 (the "License");
6dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  you may not use this file except in compliance with the License.
7dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  You may obtain a copy of the License at:
8dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
9dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  http://www.apache.org/licenses/LICENSE-2.0
10dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
11dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  Unless required by applicable law or agreed to in writing, software
12dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  distributed under the License is distributed on an "AS IS" BASIS,
13dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  See the License for the specific language governing permissions and
15dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *  limitations under the License.
16dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie *
17dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie ******************************************************************************/
18dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie
192e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#ifndef SRVC_DIS_API_H
202e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#define SRVC_DIS_API_H
212e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
222e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#include "bt_target.h"
232e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#include "gatt_api.h"
242e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#include "gattdefs.h"
252e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
26911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_SUCCESS GATT_SUCCESS
27911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ILLEGAL_PARAM GATT_ILLEGAL_PARAMETER
28911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_NO_RESOURCES GATT_NO_RESOURCES
29d19e0785e662e640191a075eda07acce61c2aedaMarie Janssentypedef uint8_t tDIS_STATUS;
302e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
312e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
32ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Data structure for DIS
33ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
342e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
35911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_SYS_ID_BIT 0x0001
36911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_MODEL_NUM_BIT 0x0002
37911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_SERIAL_NUM_BIT 0x0004
38911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_FW_NUM_BIT 0x0008
39911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_HW_NUM_BIT 0x0010
40911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_SW_NUM_BIT 0x0020
41911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_MANU_NAME_BIT 0x0040
42911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_IEEE_DATA_BIT 0x0080
43911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_PNP_ID_BIT 0x0100
44d19e0785e662e640191a075eda07acce61c2aedaMarie Janssentypedef uint16_t tDIS_ATTR_MASK;
452e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
46911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_ATTR_ALL_MASK 0xffff
472e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
48911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef tDIS_ATTR_MASK tDIS_ATTR_BIT;
492e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
50911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
51911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t len;
52911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t* p_data;
53911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tDIS_STRING;
542e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
55911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
56911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t vendor_id;
57911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t product_id;
58911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t product_version;
59911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t vendor_id_src;
602e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
61911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tDIS_PNP_ID;
622e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
63911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
64911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint64_t system_id;
65911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tDIS_PNP_ID pnp_id;
66911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tDIS_STRING data_str;
67911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tDIS_ATTR;
682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
69911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define DIS_MAX_STRING_DATA 7
702e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
71911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
72911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t attr_mask;
73911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint64_t system_id;
74911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tDIS_PNP_ID pnp_id;
75911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t* data_string[DIS_MAX_STRING_DATA];
76911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tDIS_VALUE;
772e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
78a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskitypedef void(tDIS_READ_CBACK)(const RawAddress& addr, tDIS_VALUE* p_dis_value);
792e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
802e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
81ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Data structure used by Battery Service
82ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
83911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
84a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski  RawAddress remote_bda;
85911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool need_rsp;
86911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t clt_cfg;
87911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBA_WRITE_DATA;
88911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
89911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_READ_CLT_CFG_REQ 1
90911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_READ_PRE_FMT_REQ 2
91911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_READ_RPT_REF_REQ 3
92911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_READ_LEVEL_REQ 4
93911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_WRITE_CLT_CFG_REQ 5
94911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
95911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef void(tBA_CBACK)(uint8_t app_id, uint8_t event, tBA_WRITE_DATA* p_data);
96911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson
97911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_LEVEL_NOTIFY 0x01
98911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_LEVEL_PRE_FMT 0x02
99911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson#define BA_LEVEL_RPT_REF 0x04
100d19e0785e662e640191a075eda07acce61c2aedaMarie Janssentypedef uint8_t tBA_LEVEL_DESCR;
1012e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
102911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef struct {
103911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  bool is_pri;
104911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBA_LEVEL_DESCR ba_level_descr;
105911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tGATT_TRANSPORT transport;
106911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tBA_CBACK* p_cback;
1072e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
108911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBA_REG_INFO;
1092e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
110911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsontypedef union {
111911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint8_t ba_level;
112911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  uint16_t clt_cfg;
113911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tGATT_CHAR_RPT_REF rpt_ref;
114911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson  tGATT_CHAR_PRES pres_fmt;
115911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson} tBA_RSP_DATA;
1162e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1172e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
118ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  External Function Declarations
119ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1202e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
121ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  Service Engine API
122ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1232e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
124ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
125ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         srvc_eng_init
126ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
1279ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson * Description      Initializa the GATT Service engine, register a GATT
1289ca07091a1f07ea201cee0504dab6a1d7073d429Myles Watson *                  application as for a central service management.
129ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
130ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
131911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern tGATT_STATUS srvc_eng_init(void);
1322e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1332e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
134ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  DIS Server Function
135ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1362e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1372e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
138ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
139ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         DIS_SrInit
140ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
141ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Initializa the Device Information Service Server.
142ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
143ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
144911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern tDIS_STATUS DIS_SrInit(tDIS_ATTR_MASK dis_attr_mask);
1452e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
146ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
147ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         DIS_SrUpdate
148ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
149ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Update the DIS server attribute values
150ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
151ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
152911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern tDIS_STATUS DIS_SrUpdate(tDIS_ATTR_BIT dis_attr_bit, tDIS_ATTR* p_info);
1532e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*****************************************************************************
154ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *  DIS Client Function
155ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ****************************************************************************/
1562e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
157ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
158ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         DIS_ReadDISInfo
159ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
160ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Read remote device DIS information.
161ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
162ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Returns          void
163ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
164ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
165a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern bool DIS_ReadDISInfo(const RawAddress& peer_bda,
166c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski                            tDIS_READ_CBACK* p_cback, tDIS_ATTR_MASK mask);
1672e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1682e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
169ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *      BATTERY SERVICE API
170ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
1712e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
172ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
173ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         Battery_Instantiate
174ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
175ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Instantiate a Battery service
176ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
177ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
178911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern uint16_t Battery_Instantiate(uint8_t app_id, tBA_REG_INFO* p_reg_info);
1792e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1802e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
181ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
182ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         Battery_Rsp
183ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
184ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Respond to a battery service request
185ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
186ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
187911d1ae03efec2d54c3b1b605589d790d1745488Myles Watsonextern void Battery_Rsp(uint8_t app_id, tGATT_STATUS st, uint8_t event,
188911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                        tBA_RSP_DATA* p_rsp);
1892e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach/*******************************************************************************
190ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
191ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Function         Battery_Notify
192ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
193ee96a3c60fca590d38025925c072d264e06493c4Myles Watson * Description      Send battery level notification
194ee96a3c60fca590d38025925c072d264e06493c4Myles Watson *
195ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/
196a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern void Battery_Notify(uint8_t app_id, const RawAddress& remote_bda,
197911d1ae03efec2d54c3b1b605589d790d1745488Myles Watson                           uint8_t battery_level);
1982e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach
1992e7fa68bfd9723b7ec7b6b0b128d89f31a2e06eeAndre Eisenbach#endif
200