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;
144 } event_mesh_network_proxy_added_t;
150 } event_mesh_network_attached_t;
156 } event_mesh_network_destroyed_t;
161 oal_mesh_scan_result_t result;
162 } event_mesh_scan_result_t;
167 } event_mesh_scan_status_t;
173 } event_mesh_provisioning_status_t;
178 } event_mesh_provisioning_data_requested_t;
182 oal_mesh_variant_authentication_e auth_type;
183 /* MAX length of Auth value is 50 */
184 char auth_value[50 + 1];
185 } event_mesh_authentication_requested_t;
194 } event_mesh_provisioning_finished_t;
199 oal_mesh_key_op_e op;
201 } event_mesh_netkey_operation_t;
206 oal_mesh_key_op_e op;
209 } event_mesh_appkey_operation_t;
213 /* Source means the node which sent the DevKey Message*/
218 uint8_t data[OAL_MESH_DEVKEY_MSG_BUF_MAX];
219 } event_mesh_devkey_message_t;
223 uint16_t source; /* address of remote element which sent msg */
224 uint16_t dest; /* address of local element which received msg*/
227 uint8_t data[OAL_MESH_MSG_BUF_MAX];
228 } event_mesh_message_t;
232 * @brief Enables Bluetooth Mesh Stack
234 * @remarks Application will be able to BLE Mesh features.
235 * @remarks Initializes Bluetooth Mesh HAL interface.
238 oal_status_t mesh_enable(void);
241 * @brief Disables Bluetooth Mesh Stack
243 * @remarks De-Initializes Bluetooth Mesh HAL interface.
244 * @remarks Application will not be able to BLE Mesh features.
246 * @pre OAL API should be enabled with mesh_enable().
250 oal_status_t mesh_disable(void);
253 * @brief Register the BLE Mesh Node
255 * @remarks Application will register the Mesh Provisioner node
258 * @pre OAl API should be enabled with mesh_enable().
262 oal_status_t mesh_register_node(oal_mesh_node_t *node,
263 GSList *model_list, bool is_provisioner);
267 * @brief Destroy or leave Network
269 * @remarks Stack will remove the local node entry
271 * @pre OAl API should be enabled with mesh_enable().
274 * @see mesh_register_node()
276 oal_status_t mesh_network_destroy(oal_uuid_t* network_uuid);
279 * @brief Request Stack to release Network resources
281 * @remarks Stack will remove only yhe DBUS resources of local node
283 * @pre OAl API should be enabled with mesh_enable().
286 * @see mesh_register_node()
288 oal_status_t mesh_network_release(oal_uuid_t* network_uuid);
291 * @brief Delete Remote Node configuration
293 * @remarks Stack will remove the Remote node entry
295 * @pre OAl API should be enabled with mesh_enable().
299 oal_status_t mesh_delete_remote_node(oal_uuid_t* network_uuid,
300 uint16_t unicast, uint16_t num_elements);
303 * @brief UnRegister the BLE Mesh Node
305 * @remarks Application will unregister the Mesh Provisioner
306 * node or Device node
308 * @pre OAl API should be enabled with mesh_enable().
311 * @see mesh_register_node()
313 oal_status_t mesh_deregister_node(oal_mesh_node_t *node);
316 * @brief Local Network Subnet Operations by Mesh Provisioner Node
318 * @remarks Application can Create/Delete/Update subnets in
321 * @pre OAl API should be enabled with mesh_enable().
324 * @see mesh_network_subnet_execute()
326 oal_status_t mesh_network_subnet_execute(oal_uuid_t* network_uuid,
327 oal_mesh_key_op_e operation, uint16_t net_index);
330 * @brief Local Network Appkey Operations by Mesh Provisioner Node
332 * @remarks Application can Create/Delete/Update Appkeys, bound to
333 * netkeys in local key database
335 * @pre OAl API should be enabled with mesh_enable().
338 * @see mesh_network_subnet_execute()
339 * @see mesh_network_subnet_execute()
341 oal_status_t mesh_network_appkey_execute(oal_uuid_t* network_uuid,
342 oal_mesh_key_op_e operation,
343 uint16_t net_index, uint16_t app_index);
346 * @brief Discover unprovisioned device
348 * @remarks Provisioner application can discover Unprovisioned Device
349 * beaons which want to Join Mesh network
350 * @remarks scan params structure is defined for forward compatibility.
351 * Currently only single parameter (seconds) is supported
353 * @pre OAl API should be enabled with mesh_enable().
356 * @see mesh_network_start_scan()
358 oal_status_t mesh_network_start_scan(oal_uuid_t* network_uuid,
359 oal_mesh_scan_params_t *params);
362 * @brief Cancel unprovisionined Device scanning
365 * @see mesh_network_start_scan()
367 oal_status_t mesh_network_scan_cancel(oal_uuid_t* network_uuid);
370 * @brief Set Provisioning capabilities
372 * @remarks Provisioner application should set the capabilities
373 * before initiating device provision. Provisioning parameters are
374 * chosen based on combination of provisioner & device's capabilities
376 * @pre OAl API should be enabled with mesh_enable().
380 oal_status_t mesh_network_set_provisioning_capabilities(
381 oal_uuid_t *network_uuid, oal_mesh_capabilities_t *caps);
384 * @brief Security provision a device to Mesh Network
386 * @remarks Provisioner application can provision device after
387 * scanning for device beacons.
388 * @remarks Provisioner application should set the Provisioning
389 * capabilities before starting provision.
391 * @pre OAl API should be enabled with mesh_enable().
394 * @see mesh_network_set_provisioning_capabilities()
395 * @see mesh_network_provision_device()
397 oal_status_t mesh_network_provision_device(oal_uuid_t* network_uuid,
398 oal_uuid_t *dev_uuid);
402 * @brief Send data for provisioning like NetKey, Primary unicast
406 oal_status_t mesh_network_send_provisioning_data(oal_uuid_t* network_uuid,
407 uint16_t netkey_idx, uint16_t unicast);
410 * @brief Send Reply to Ongoing Security Provisioning
412 * @remarks Tizen supports only one Provisioning or Join
413 * Call simulatneously.
415 * @pre OAl API should be enabled with mesh_enable().
418 * @see mesh_network_provision_device()
419 * @see cb_mesh_authentication_request()
421 oal_status_t mesh_authentication_reply(oal_mesh_variant_authentication_e type,
422 const char* auth_value);
425 * @brief Cancels an ongoing security provisioning
427 * @remarks Mesh stack does not support Cancelling Ongoing
428 * provisiong currently.
430 * @pre OAl API should be enabled with mesh_enable().
433 * @see mesh_network_provision_device()
435 oal_status_t mesh_provisioning_cancel(oal_uuid_t *local_device_uuid);
438 * @brief Sends Configuration Client message originated from Local Node
440 * @remarks Local Configuration client can send message to both local
441 * & 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_message(oal_uuid_t *network_uuid,
449 uint16_t dest, bool is_devkey_remote,
450 uint16_t netkey_idx, uint8_t *buf, int len);
453 * @brief Sends Configuration Client Key (NetKey & AppKey Add/Update)
454 * messages originated from Local Node
456 * @remarks Local Configuration client can send message to both
457 * local & remote Configuration Server.
459 * @pre OAl API should be enabled with mesh_enable().
462 * @see cb_mesh_conf_message()
464 oal_status_t mesh_conf_send_key_message(oal_uuid_t *network_uuid,
465 uint16_t dest, bool is_netkey,
466 bool is_update, int key_idx, int netkey_idx);
470 * @brief Sends Application message to be encrypted with appplication key
472 * @remarks These messages are generated by Models, which are
473 * implemented by Tizen Application.
474 * @remarks Tizen Mesh Framework will not handle these mesages directly
475 * and only transport these to and from application.
477 * @pre OAl API should be enabled with mesh_enable().
480 * @see cb_mesh_model_message()
482 oal_status_t mesh_model_send_message(oal_uuid_t *network_uuid,
483 uint16_t dest, uint16_t appkey_idx, uint8_t *buf, int len);
485 #endif /* OAL_MESH_H_ */