1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /******************************************************************************
18  *
19  * This file contains constants and definitions that can be used commonly
20  * between JNI and stack layer
21  *
22  ******************************************************************************/
23 #ifndef ANDROID_INCLUDE_BT_COMMON_TYPES_H
24 #define ANDROID_INCLUDE_BT_COMMON_TYPES_H
25 
26 #include <bluetooth/uuid.h>
27 #include <raw_address.h>
28 
29 #include <vector>
30 
31 #include "bluetooth.h"
32 
33 typedef struct {
34   uint8_t client_if;
35   uint8_t filt_index;
36   uint8_t advertiser_state;
37   uint8_t advertiser_info_present;
38   uint8_t addr_type;
39   uint8_t tx_power;
40   int8_t rssi_value;
41   uint16_t time_stamp;
42   RawAddress bd_addr;
43   uint8_t adv_pkt_len;
44   uint8_t* p_adv_pkt_data;
45   uint8_t scan_rsp_len;
46   uint8_t* p_scan_rsp_data;
47 } btgatt_track_adv_info_t;
48 
49 typedef enum {
50   BTGATT_DB_PRIMARY_SERVICE,
51   BTGATT_DB_SECONDARY_SERVICE,
52   BTGATT_DB_INCLUDED_SERVICE,
53   BTGATT_DB_CHARACTERISTIC,
54   BTGATT_DB_DESCRIPTOR,
55 } bt_gatt_db_attribute_type_t;
56 
57 typedef struct {
58   uint16_t id;
59   bluetooth::Uuid uuid;
60   bt_gatt_db_attribute_type_t type;
61   uint16_t attribute_handle;
62 
63   /*
64    * If |type| is |BTGATT_DB_PRIMARY_SERVICE|, or
65    * |BTGATT_DB_SECONDARY_SERVICE|, this contains the start and end attribute
66    * handles.
67    */
68   uint16_t start_handle;
69   uint16_t end_handle;
70 
71   /*
72    * If |type| is |BTGATT_DB_CHARACTERISTIC|, this contains the properties of
73    * the characteristic.
74    */
75   uint8_t properties;
76   uint16_t extended_properties;
77 
78   uint16_t permissions;
79 } btgatt_db_element_t;
80 
81 typedef struct {
82   uint16_t feat_seln;
83   uint16_t list_logic_type;
84   uint8_t filt_logic_type;
85   uint8_t rssi_high_thres;
86   uint8_t rssi_low_thres;
87   uint8_t dely_mode;
88   uint16_t found_timeout;
89   uint16_t lost_timeout;
90   uint8_t found_timeout_cnt;
91   uint16_t num_of_tracking_entries;
92 } btgatt_filt_param_setup_t;
93 
94 // Advertising Packet Content Filter
95 struct ApcfCommand {
96   uint8_t type;
97   RawAddress address;
98   uint8_t addr_type;
99   bluetooth::Uuid uuid;
100   bluetooth::Uuid uuid_mask;
101   std::vector<uint8_t> name;
102   uint16_t company;
103   uint16_t company_mask;
104   uint8_t org_id;
105   uint8_t tds_flags;
106   uint8_t tds_flags_mask;
107   uint8_t meta_data_type;
108   std::vector<uint8_t> meta_data;
109   uint8_t ad_type;
110   std::vector<uint8_t> data;
111   std::vector<uint8_t> data_mask;
112   std::array<uint8_t, 16> irk;  // 128 bit/16 octet IRK
113 };
114 
115 typedef enum {
116   MSFT_CONDITION_TYPE_PATTERNS = 0x01,
117   MSFT_CONDITION_TYPE_UUID = 0x02,
118   MSFT_CONDITION_TYPE_IRK_RESOLUTION = 0x03,
119   MSFT_CONDITION_TYPE_ADDRESS = 0x04,
120 } bt_msft_condition_type;
121 
122 enum MsftLeMonitorAdvConditionUuidType {
123   MSFT_CONDITION_UUID_TYPE_16_BIT = 0x01,
124   MSFT_CONDITION_UUID_TYPE_32_BIT = 0x02,
125   MSFT_CONDITION_UUID_TYPE_128_BIT = 0x03,
126 };
127 
128 // MSFT scan filter pattern
129 struct MsftAdvMonitorPattern {
130   uint8_t ad_type;
131   uint8_t start_byte;
132   std::vector<uint8_t> pattern;
133 };
134 
135 struct MsftAdvMonitorAddress {
136   uint8_t addr_type;
137   RawAddress bd_addr;
138 };
139 
140 // LE Scan filter defined by MSFT extension.
141 struct MsftAdvMonitor {
142   uint8_t rssi_threshold_high;
143   uint8_t rssi_threshold_low;
144   uint8_t rssi_threshold_low_time_interval;
145   uint8_t rssi_sampling_period;
146   uint8_t condition_type;
147   std::vector<MsftAdvMonitorPattern> patterns;
148   MsftAdvMonitorAddress addr_info;
149 };
150 
151 #if __has_include(<bluetooth/log.h>)
152 #include <bluetooth/log.h>
153 
154 namespace fmt {
155 template <>
156 struct formatter<bt_gatt_db_attribute_type_t>
157     : enum_formatter<bt_gatt_db_attribute_type_t> {};
158 }  // namespace fmt
159 #endif  // __has_include(<bluetooth/log.h>)
160 
161 #endif /* ANDROID_INCLUDE_BT_COMMON_TYPES_H */
162