2 * Open Adaptation Layer (OAL)
4 * Copyright (c) 2019 -2020 Samsung Electronics Co., Ltd All Rights Reserved.
6 * @author: Anupam Roy <anupam.r@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include <oal-manager.h>
27 /* Start of BLE Mesh structures and enum declarations */
29 #define OAL_MESH_DEVKEY_MSG_BUF_MAX 2048
30 #define OAL_MESH_MSG_BUF_MAX 2048
32 /* Mesh Key Operation Enums (For Appkey & NetKey) */
39 /* Mesh Authentication types */
41 /*< Output authentication request types */
42 OAL_MESH_AUTH_ALPHANUMERIC_DISPLAY = 0,
43 OAL_MESH_AUTH_NUMERIC_DISPLAY,
44 OAL_MESH_AUTH_PUSH_COUNT_DISPLAY,
45 OAL_MESH_AUTH_TWIST_COUNT_DISPLAY,
47 /*< Input authentication request types */
48 OAL_MESH_AUTH_REQ_ALPHANUMERIC_INPUT,
49 OAL_MESH_AUTH_REQ_NUMERIC_INPUT,
50 OAL_MESH_AUTH_REQ_BLINK_COUNT_INPUT,
51 OAL_MESH_AUTH_REQ_BEEP_COUNT_INPUT,
52 OAL_MESH_AUTH_REQ_VIBRATE_COUNT_INPUT,
54 /**< OOB Key Inputs */
55 OAL_MESH_AUTH_REQ_OOB_PUBLIC_KEY_INPUT,
56 OAL_MESH_AUTH_REQ_OOB_STATIC_KEY_INPUT
57 } oal_mesh_variant_authentication_e;
59 /* Mesh Enumerations of 2 octet OUT OOB Actions */
61 OAL_MESH_OUT_OOB_METHOD_BLINK = 0x01,
62 OAL_MESH_OUT_OOB_METHOD_BEEP = 0x02,
63 OAL_MESH_OUT_OOB_METHOD_VIBRATE = 0x04,
64 OAL_MESH_OUT_OOB_METHOD_NUMERIC = 0x08,
65 OAL_MESH_OUT_OOB_METHOD_ALPHANUMERIC = 0x10,
66 /* bit 5 ~ 15 : RFU */
67 } oal_mesh_output_oob_action_e;
69 /* Mesh Enumerations of 2 octet IN OOB Actions */
71 OAL_MESH_IN_OOB_METHOD_PUSH = 0x01,
72 OAL_MESH_IN_OOB_METHOD_TWIST = 0x02,
73 OAL_MESH_IN_OOB_METHOD_NUMERIC = 0x04,
74 OAL_MESH_IN_OOB_METHOD_ALPHANUMERIC = 0x08,
75 /* bit 4 ~ 15 : RFU */
76 } oal_mesh_input_oob_action_e;
78 /* Mesh strcuture of Mesh Provisioning Capabilities */
80 /**< Indicates Public Key for ECC Key exchange, can be fetched OOB */
82 /**< Indicates Static Key for authentication, can be fetched OOB */
84 /**< Indicates support for bitmap combination of OUT-OOB actions */
85 oal_mesh_output_oob_action_e out_oob;
86 /**< Indicates support for bitmap combination of IN-OOB actions */
87 oal_mesh_input_oob_action_e in_oob;
88 } oal_mesh_capabilities_t;
90 /* Mesh Unprovisioned Device Scan result */
94 /* 2-octet OOB info */
96 /* 4-octet URI Hash info */
98 } oal_mesh_scan_result_t;
100 /* Mesh Scan Parameters */
103 /* Structure may be expanded in future to support more scan parameters*/
104 } oal_mesh_scan_params_t;
106 /* Mesh Node Properties */
116 } oal_mesh_vendor_info_t;
118 /* Mesh Model: 2 bytes for BT SIG Model & 4 bytes for Vendor Model */
124 /* Mesh Element structure */
128 } oal_mesh_element_t;
130 /* Mesh Node structure */
132 oal_mesh_vendor_info_t vendor_info;
133 uint16_t num_elements;
134 uint16_t primary_unicast;
146 } event_mesh_network_attached_t;
152 } event_mesh_network_destroyed_t;
157 oal_mesh_scan_result_t result;
158 } event_mesh_scan_result_t;
163 } event_mesh_scan_status_t;
169 } event_mesh_provisioning_status_t;
174 } event_mesh_provisioning_data_requested_t;
178 oal_mesh_variant_authentication_e auth_type;
179 /* MAX length of Auth value is 50 */
180 char auth_value[50 + 1];
181 } event_mesh_authentication_requested_t;
190 } event_mesh_provisioning_finished_t;
195 oal_mesh_key_op_e op;
197 } event_mesh_netkey_operation_t;
202 oal_mesh_key_op_e op;
205 } event_mesh_appkey_operation_t;
209 /* Source means the node which sent the DevKey Message*/
214 uint8_t data[OAL_MESH_DEVKEY_MSG_BUF_MAX];
215 } event_mesh_devkey_message_t;
219 uint16_t source; /* address of remote element which sent msg */
220 uint16_t dest; /* address of local element which received msg*/
223 uint8_t data[OAL_MESH_MSG_BUF_MAX];
224 } event_mesh_message_t;
228 * @brief Enables Bluetooth Mesh Stack
230 * @remarks Application will be able to BLE Mesh features.
231 * @remarks Initializes Bluetooth Mesh HAL interface.
234 oal_status_t mesh_enable(void);
237 * @brief Disables Bluetooth Mesh Stack
239 * @remarks De-Initializes Bluetooth Mesh HAL interface.
240 * @remarks Application will not be able to BLE Mesh features.
242 * @pre OAL API should be enabled with mesh_enable().
246 oal_status_t mesh_disable(void);
249 * @brief Register the BLE Mesh Node
251 * @remarks Application will register the Mesh Provisioner node
254 * @pre OAl API should be enabled with mesh_enable().
258 oal_status_t mesh_register_node(oal_mesh_node_t *node,
259 GSList *model_list, bool is_provisioner);
263 * @brief Destroy or leave Network
265 * @remarks Stack will remove the local node entry
267 * @pre OAl API should be enabled with mesh_enable().
270 * @see mesh_register_node()
272 oal_status_t mesh_network_destroy(oal_uuid_t* network_uuid);
275 * @brief Delete Remote Node configuration
277 * @remarks Stack will remove the Remote node entry
279 * @pre OAl API should be enabled with mesh_enable().
283 oal_status_t mesh_delete_remote_node(oal_uuid_t* network_uuid,
284 uint16_t unicast, uint16_t num_elements);
287 * @brief UnRegister the BLE Mesh Node
289 * @remarks Application will unregister the Mesh Provisioner
290 * node or Device node
292 * @pre OAl API should be enabled with mesh_enable().
295 * @see mesh_register_node()
297 oal_status_t mesh_deregister_node(oal_mesh_node_t *node);
300 * @brief Local Network Subnet Operations by Mesh Provisioner Node
302 * @remarks Application can Create/Delete/Update subnets in
305 * @pre OAl API should be enabled with mesh_enable().
308 * @see mesh_network_subnet_execute()
310 oal_status_t mesh_network_subnet_execute(oal_uuid_t* network_uuid,
311 oal_mesh_key_op_e operation, uint16_t net_index);
314 * @brief Local Network Appkey Operations by Mesh Provisioner Node
316 * @remarks Application can Create/Delete/Update Appkeys, bound to
317 * netkeys in local key database
319 * @pre OAl API should be enabled with mesh_enable().
322 * @see mesh_network_subnet_execute()
323 * @see mesh_network_subnet_execute()
325 oal_status_t mesh_network_appkey_execute(oal_uuid_t* network_uuid,
326 oal_mesh_key_op_e operation,
327 uint16_t net_index, uint16_t app_index);
330 * @brief Discover unprovisioned device
332 * @remarks Provisioner application can discover Unprovisioned Device
333 * beaons which want to Join Mesh network
334 * @remarks scan params structure is defined for forward compatibility.
335 * Currently only single parameter (seconds) is supported
337 * @pre OAl API should be enabled with mesh_enable().
340 * @see mesh_network_start_scan()
342 oal_status_t mesh_network_start_scan(oal_uuid_t* network_uuid,
343 oal_mesh_scan_params_t *params);
346 * @brief Cancel unprovisionined Device scanning
349 * @see mesh_network_start_scan()
351 oal_status_t mesh_network_scan_cancel(oal_uuid_t* network_uuid);
354 * @brief Set Provisioning capabilities
356 * @remarks Provisioner application should set the capabilities
357 * before initiating device provision. Provisioning parameters are
358 * chosen based on combination of provisioner & device's capabilities
360 * @pre OAl API should be enabled with mesh_enable().
364 oal_status_t mesh_network_set_provisioning_capabilities(
365 oal_uuid_t *network_uuid, oal_mesh_capabilities_t *caps);
368 * @brief Security provision a device to Mesh Network
370 * @remarks Provisioner application can provision device after
371 * scanning for device beacons.
372 * @remarks Provisioner application should set the Provisioning
373 * capabilities before starting provision.
375 * @pre OAl API should be enabled with mesh_enable().
378 * @see mesh_network_set_provisioning_capabilities()
379 * @see mesh_network_provision_device()
381 oal_status_t mesh_network_provision_device(oal_uuid_t* network_uuid,
382 oal_uuid_t *dev_uuid);
386 * @brief Send data for provisioning like NetKey, Primary unicast
390 oal_status_t mesh_network_send_provisioning_data(oal_uuid_t* network_uuid,
391 uint16_t netkey_idx, uint16_t unicast);
394 * @brief Send Reply to Ongoing Security Provisioning
396 * @remarks Tizen supports only one Provisioning or Join
397 * Call simulatneously.
399 * @pre OAl API should be enabled with mesh_enable().
402 * @see mesh_network_provision_device()
403 * @see cb_mesh_authentication_request()
405 oal_status_t mesh_authentication_reply(oal_mesh_variant_authentication_e type,
406 const char* auth_value);
409 * @brief Cancels an ongoing security provisioning
411 * @remarks Mesh stack does not support Cancelling Ongoing
412 * provisiong currently.
414 * @pre OAl API should be enabled with mesh_enable().
417 * @see mesh_network_provision_device()
419 oal_status_t mesh_provisioning_cancel(oal_uuid_t *local_device_uuid);
422 * @brief Sends Configuration Client message originated from Local Node
424 * @remarks Local Configuration client can send message to both local
425 * & remote Configuration Server.
427 * @pre OAl API should be enabled with mesh_enable().
430 * @see cb_mesh_conf_message()
432 oal_status_t mesh_conf_send_message(oal_uuid_t *network_uuid,
433 uint16_t dest, bool is_devkey_remote,
434 uint16_t netkey_idx, uint8_t *buf, int len);
437 * @brief Sends Configuration Client Key (NetKey & AppKey Add/Update)
438 * messages originated from Local Node
440 * @remarks Local Configuration client can send message to both
441 * local & remote Configuration Server.
443 * @pre OAl API should be enabled with mesh_enable().
446 * @see cb_mesh_conf_message()
448 oal_status_t mesh_conf_send_key_message(oal_uuid_t *network_uuid,
449 uint16_t dest, bool is_netkey,
450 bool is_update, int key_idx, int netkey_idx);
454 * @brief Sends Application message to be encrypted with appplication key
456 * @remarks These messages are generated by Models, which are
457 * implemented by Tizen Application.
458 * @remarks Tizen Mesh Framework will not handle these mesages directly
459 * and only transport these to and from application.
461 * @pre OAl API should be enabled with mesh_enable().
464 * @see cb_mesh_model_message()
466 oal_status_t mesh_model_send_message(oal_uuid_t *network_uuid,
467 uint16_t dest, uint16_t appkey_idx, uint8_t *buf, int len);
469 #endif /* OAL_MESH_H_ */