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