lin
2025-07-31 065ea569db06206874bbfa18eb25ff6121aec09b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/******************************************************************************
 *
 *  Copyright 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);
 
#endif