090045e47f3d4490814f9a4d52fa47c3ce0be96c
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / hardware / bt_mesh.h
1 /*
2  * Copyright (C) 2020 Samsung Electronics Company Ltd.
3  *
4  * @author: Anupam Roy <anupam.r@samsung.com>
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 #ifndef TIZEN_INCLUDE_BT_MESH_H
20 #define TIZEN_INCLUDE_BT_MESH_H
21
22 #include <stdint.h>
23 #include <glib.h>
24
25 __BEGIN_DECLS
26
27 /* Mesh Authentication types */
28 typedef enum {
29         /*< Output authentication request types */
30         BT_HAL_MESH_AUTH_ALPHANUMERIC_DISPLAY = 0,
31         BT_HAL_MESH_AUTH_NUMERIC_DISPLAY,
32         BT_HAL_MESH_AUTH_PUSH_COUNT_DISPLAY,
33         BT_HAL_MESH_AUTH_TWIST_COUNT_DISPLAY,
34
35         /*< Input authentication request types */
36         BT_HAL_MESH_AUTH_REQ_ALPHANUMERIC_INPUT,
37         BT_HAL_MESH_AUTH_REQ_NUMERIC_INPUT,
38         BT_HAL_MESH_AUTH_REQ_BLINK_COUNT_INPUT,
39         BT_HAL_MESH_AUTH_REQ_BEEP_COUNT_INPUT,
40         BT_HAL_MESH_AUTH_REQ_VIBRATE_COUNT_INPUT,
41
42         /**< OOB Key Inputs */
43         BT_HAL_MESH_AUTH_REQ_OOB_PUBLIC_KEY_INPUT,
44         BT_HAL_MESH_AUTH_REQ_OOB_STATIC_KEY_INPUT,
45         BT_HAL_MESH_UNKNOWN_AUTH_METHOD
46 } bt_hal_mesh_auth_variant_e;
47
48 /* Spec defined Error Codes */
49 typedef enum {
50         BT_HAL_MESH_PROV_ERR_INTERNAL               = -1,
51         BT_HAL_MESH_PROV_ERR_SUCCESS                = 0x00,
52         BT_HAL_MESH_PROV_ERR_INVALID_PDU            = 0x01,
53         BT_HAL_MESH_PROV_ERR_INVALID_FORMAT         = 0x02,
54         BT_HAL_MESH_PROV_ERR_UNEXPECTED_PDU         = 0x03,
55         BT_HAL_MESH_PROV_ERR_CONFIRM_FAILED         = 0x04,
56         BT_HAL_MESH_PROV_ERR_INSUF_RESOURCE         = 0x05,
57         BT_HAL_MESH_PROV_ERR_DECRYPT_FAILED         = 0x06,
58         BT_HAL_MESH_PROV_ERR_UNEXPECTED_ERR         = 0x07,
59         BT_HAL_MESH_PROV_ERR_CANT_ASSIGN_ADDR       = 0x08,
60         /* Internally generated  by Stack */
61         BT_HAL_MESH_PROV_ERR_TIMEOUT                = 0xFF,
62 } bt_hal_mesh_prov_error_codes_e;
63
64 /* Mesh Node Properties */
65 typedef struct {
66         uint16_t companyid;
67         uint16_t vendorid;
68         uint16_t versionid;
69         uint16_t crpl;
70         int relay;
71         int frnd;
72         int proxy;
73         int lpn;
74 } bt_hal_mesh_vendor_info_t;
75
76 /* Mesh Model: 2 bytes for BT SIG Model & 4 bytes for Vendor Model */
77 typedef struct {
78         uint16_t elem_index;
79         uint32_t model_id;
80 } bt_hal_mesh_model_t;
81
82 /* Mesh Element structure */
83 typedef struct {
84         uint16_t index;
85         int num_models;
86 } bt_hal_mesh_element_t;
87
88 /* Mesh Node structure */
89 typedef struct {
90         bt_hal_mesh_vendor_info_t vendor_info;
91         uint16_t num_elements;
92         uint16_t primary_unicast;
93         bt_uuid_t uuid;
94         union {
95                 uint8_t u8[8];
96                 uint64_t u64;
97         } token;
98 } bt_hal_mesh_node_t;
99
100 /** Bluetooth Mesh Security Token */
101 typedef struct {
102         uint8_t token[8];
103 } bt_mesh_token_t;
104
105 typedef struct {
106         uint32_t scan_time;
107 } bt_hal_mesh_scan_param_t;
108
109 typedef struct {
110         bool public_oob;
111         bool static_oob;
112         uint16_t out_oob;
113         uint16_t in_oob;
114 } bt_hal_mesh_prov_caps_t;
115
116 /** Bluetooth Mesh Security Token */
117 typedef struct {
118         int rssi;
119         bt_uuid_t dev_uuid;
120         uint8_t oob_info[2];
121         uint8_t uri_hash[4];
122 } bt_mesh_scan_result_t;
123
124 /** Bluetooth Mesh Scan state */
125 typedef enum {
126         BT_MESH_SCAN_STOPPED,
127         BT_MESH_SCAN_STARTED
128 } bt_mesh_scan_state_t;
129
130 /** Bluetooth Mesh Scan state */
131 typedef enum {
132         BT_MESH_KEY_CREATE,
133         BT_MESH_KEY_UPDATE,
134         BT_MESH_KEY_DELETE,
135 } bt_mesh_key_op_e;
136
137 /** Callback Signatures */
138 typedef void (*btmesh_network_proxy_added_callback)(bt_status_t status);
139
140 typedef void (*btmesh_network_attached_callback)(bt_status_t status,
141                 bt_mesh_token_t *token, bt_uuid_t *uuid);
142
143 typedef void (*btmesh_network_destroyed_callback)(bt_status_t status,
144                 bt_mesh_token_t *token, bt_uuid_t *uuid);
145
146 typedef void (*btmesh_network_scan_status_callback)(
147                 bt_mesh_scan_state_t scan_state, bt_status_t status,
148                         bt_uuid_t *net_uuid);
149
150 typedef void (*btmesh_network_scan_result_callback)(bt_status_t status,
151                 bt_uuid_t *net_uuid, bt_mesh_scan_result_t *scan_result);
152
153 typedef void (*btmesh_network_provisioning_status_callback)(
154                 bt_status_t status, bt_uuid_t *net_uuid, bt_uuid_t *dev_uuid);
155
156 typedef void (*btmesh_network_provisioning_finished_callback)(
157                 bt_status_t status, int reason, bt_uuid_t *net_uuid,
158                         bt_uuid_t *dev_uuid, uint16_t unicast, uint8_t count);
159
160 typedef void (*btmesh_network_provisioning_data_requested_callback)(
161                 bt_uuid_t *net_uuid, uint8_t count);
162
163 typedef void (*btmesh_network_authentication_requested_callback)(
164                 bt_uuid_t *net_uuid,
165                         bt_hal_mesh_auth_variant_e auth_type, char auth_value[]);
166
167 typedef void (*btmesh_network_netkey_execute_callback)(
168                 bt_status_t status, bt_uuid_t *net_uuid,
169                         uint8_t key_event, uint16_t netkey_idx);
170
171 typedef void (*btmesh_network_appkey_execute_callback)(
172                 bt_status_t status, bt_uuid_t *net_uuid, uint8_t key_event,
173                         uint16_t netkey_idx, uint16_t appkey_idx);
174
175 typedef void (*btmesh_devkey_message_received_callback)(bt_uuid_t *net_uuid,
176                 uint16_t source_addr, bool is_devkey_remote, uint16_t netkey_idx,
177                         uint16_t data_len, uint8_t *data);
178
179 typedef void (*btmesh_message_received_callback)(bt_uuid_t *net_uuid,
180                 uint16_t source_addr, uint16_t dest_addr, uint16_t key_idx,
181                         uint16_t data_len, uint8_t *data);
182
183 /** BT-Mesh callback structure. */
184 typedef struct {
185         /** set to sizeof(btmesh_callbacks_t) */
186         size_t      size;
187         btmesh_network_proxy_added_callback  network_proxy_added_cb;
188         btmesh_network_attached_callback  network_attached_cb;
189         btmesh_network_destroyed_callback  network_destroyed_cb;
190         btmesh_network_scan_status_callback  scan_status_cb;
191         btmesh_network_scan_result_callback  scan_result_cb;
192         btmesh_network_provisioning_status_callback  provisioning_status_cb;
193         btmesh_network_provisioning_finished_callback  provisioning_finished_cb;
194         btmesh_network_provisioning_data_requested_callback  provisioning_data_requested_cb;
195         btmesh_network_authentication_requested_callback  authentication_requested_cb;
196         btmesh_network_netkey_execute_callback  netkey_execute_cb;
197         btmesh_network_appkey_execute_callback  appkey_execute_cb;
198         btmesh_devkey_message_received_callback  devkey_msg_cb;
199         btmesh_message_received_callback  msg_cb;
200 } btmesh_callbacks_t;
201
202 /** Represents the standard BT-MESH interface. */
203 typedef struct {
204
205         /** set to sizeof(btmesh_interface_t) */
206         size_t          size;
207         /**
208          * Register the BT Mesh callbacks
209          */
210         bt_status_t (*init)(btmesh_callbacks_t* callbacks);
211         bt_status_t (*create)(bt_hal_mesh_node_t *node,
212                 GSList *model_list, bool is_prov);
213         bt_status_t (*destroy)(bt_uuid_t *network);
214         bt_status_t (*release)(bt_uuid_t *network);
215         bt_status_t (*delete_node)(bt_uuid_t *network, uint16_t unicast,
216                 uint16_t elem_cnt);
217         bt_status_t (*scan)(bt_uuid_t *network,
218                 bt_hal_mesh_scan_param_t *param);
219         bt_status_t (*scan_cancel)(bt_uuid_t *network);
220         bt_status_t (*capability)(bt_uuid_t *network,
221                 bt_hal_mesh_prov_caps_t *param);
222         bt_status_t (*provision)(bt_uuid_t *network, bt_uuid_t *dev_uuid);
223         bt_status_t (*provision_data)(bt_uuid_t* network_uuid,
224                 uint16_t netkey_idx, uint16_t unicast);
225         bt_status_t (*auth_reply)(bt_hal_mesh_auth_variant_e auth_type,
226                 const char *auth_value);
227         bt_status_t (*subnet_execute)(bt_uuid_t* network_uuid,
228                 bt_mesh_key_op_e op, uint16_t netkey_idx);
229         bt_status_t (*appkey_execute)(bt_uuid_t* network_uuid,
230                 bt_mesh_key_op_e op, uint16_t netkey_idx, uint16_t appkey_idx);
231         bt_status_t (*config_send)(bt_uuid_t *network, uint16_t dest,
232                 bool is_dev_key, uint16_t netkey_idx, uint8_t *buf, int len);
233         bt_status_t (*key_send)(bt_uuid_t *network, uint16_t dest,
234                 bool is_netkey, bool is_update, uint16_t key_idx, uint16_t netkey_idx);
235         bt_status_t (*msg_execute)(bt_uuid_t *network, uint16_t dest,
236                 uint16_t appkey_idx, uint8_t *buf, int len);
237         bt_status_t (*attach)(void);
238         /** Closes the interface. */
239         void (*cleanup)(void);
240 } btmesh_interface_t;
241 __END_DECLS
242
243 #endif /* TIZEN_INCLUDE_BT_MESH_H */