#define _BLUETOOTH_API_H_
#include <stdlib.h>
+#include <stdbool.h>
#include <unistd.h>
#include <glib.h>
* @{
*/
+#define BLUETOOTH_ADDRESS_STRING_LENGTH 17 /**< This specifies bluetooth device address length (AA:BB:CC:DD:EE:FF) */
#define BLUETOOTH_ADDRESS_LENGTH 6 /**< This specifies bluetooth device address length */
#define BLUETOOTH_VERSION_LENGTH_MAX 30 /**< This specifies bluetooth device version length */
#define BLUETOOTH_INTERFACE_NAME_LENGTH 16
#define BLUETOOTH_MAX_DPM_LIST 20 /**< This specifies maximum number of devices/uuids
dpm shall store */
+#define BLUETOOTH_TDS_DATA_LENGTH_MAX 239 /**< This specifies maximum AD data length: 0xEF */
+#define BLUETOOTH_TDS_CONTROL_POINT_PARAM_LENGTH_MAX 500 /**< TDS Control Point parameter Max length */
+
+/*
+ * < This defines the maximum size of OTP server directory name
+ */
+#define BLUETOOTH_MAX_OTP_SERVER_DIR_NAME 100
+
/**
* This is Bluetooth error code
*/
#define BLUETOOTH_ERROR_LOCAL_HOST_TERM 0x16
#define BLUETOOTH_ERROR_REPEATED_ATTEMPTS 0x17
#define BLUETOOTH_ERROR_LMP_RESPONSE_TIMEOUT 0x22
+#define BLUETOOTH_ERROR_LMP_TRANSACTION_COLLISION 0x23
+#define BLUETOOTH_ERROR_INSTANT_PASSED 0x28
+#define BLUETOOTH_ERROR_INSUFFICIENT_SECURITY 0x2f
+#define BLUETOOTH_ERROR_CONNECTION_TERMINATED_DUE_TO_MIC_FAILURE 0x3d
#define BLUETOOTH_ERROR_CONNECTION_FAILED_TO_BE_ESTABLISHED 0x3e
-
+#define BLUETOOTH_ERROR_INVALID_DIRECTORY 0x01
/**
* Device disconnect reason
/**
* Service type
+ * Service type matched to bt_profile_type_t of bt-service-common.h
*/
typedef enum {
BLUETOOTH_RFCOMM_SERVICE = 0x01,
} bluetooth_pxp_poperty_t;
/**
+ * TDS transport Type
+ */
+typedef enum {
+ BLUETOOTH_TDS_TRANSPORT_BT = 0x01, /* Transport type BR-EDR */
+ BLUETOOTH_TDS_TRANSPORT_CUSTOM, /* Transport type custom */
+ /* ... */
+ BLUETOOTH_TDS_TRANSPORT_INVALID
+} bluetooth_tds_transport_t;
+
+/**
+ * TDS transport state
+ */
+typedef enum {
+ BLUETOOTH_TDS_TRANSPORT_STATE_OFF = 0,
+ BLUETOOTH_TDS_TRANSPORT_STATE_ON,
+ BLUETOOTH_TDS_TRANSPORT_STATE_UNAVAILABLE,
+ BLUETOOTH_TDS_TRANSPORT_STATE_RESERVED
+} bluetooth_tds_transport_state_t;
+
+/**
+* TDS data
+*/
+typedef struct {
+ int length;
+ guint8 data[BLUETOOTH_TDS_DATA_LENGTH_MAX];
+} bluetooth_tds_data_t;
+
+/**
+* TDS activation request
+*/
+typedef struct {
+ bluetooth_device_address_t rem_addr;
+ bluetooth_tds_transport_t transport;
+ bluetooth_tds_data_t tds_data;
+} bluetooth_tds_activation_req_t;
+
+/**
+* TDS Control Point data
+*/
+typedef struct {
+ int length; /**< Control point data length */
+ guint8 data[BLUETOOTH_TDS_CONTROL_POINT_PARAM_LENGTH_MAX]; /**< Control pint param data */
+} bluetooth_control_point_data_t;
+
+/**
+* TDS Indication Response data
+*/
+typedef struct {
+ bluetooth_device_address_t rem_addr; /**< Device address */
+ bluetooth_control_point_data_t tds_data; /**< TDS Control Point Indication params */
+} bluetooth_tds_indication_res_t;
+
+/**
+* Structure to hold the TDS Complete data information which is read from remote TDS provider
+*/
+typedef struct {
+ bluetooth_device_address_t device_address; /**< Device address */
+ int data_length; /**< Data length */
+ char *data; /**< Complete Transport Specific data */
+} bluetooth_tds_transport_data_info_t;
+
+/**
* Advertising parameters
*/
typedef struct {
/**< Base ID for AVRCP events */
#define BLUETOOTH_EVENT_IPSP_BASE ((int)(BLUETOOTH_EVENT_AVRCP_CONTROL_BASE + 0x0020))
/**< Base ID for IPSP events */
+#define BLUETOOTH_EVENT_MAP_BASE ((int)(BLUETOOTH_EVENT_IPSP_BASE + 0x0020))
+ /**< Base ID for MAP events */
/**
* Bluetooth event type
BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS, /* OPC Transfer progress event */
BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE, /* OPC Transfer Complete event */
+ BLUETOOTH_EVENT_MAP_CONNECTED = BLUETOOTH_EVENT_MAP_BASE,
+ BLUETOOTH_EVENT_MAP_DISCONNECTED,
+ /*
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_COMPLETE,
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_SET_FOLDER_FAILED,
+ BLUETOOTH_EVENT_MAP_UPDATE_INBOX_COMPLETE,
+ BLUETOOTH_EVENT_MAP_UPDATE_INBOX_FAILED,
+ */
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_COMPLETE,
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_LIST_FOLDERS_FAILED,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_COMPLETE,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_LIST_MESSAGES_FAILED,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_COMPLETE,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_PUSH_MESSAGE_FAILED,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_COMPLETE,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_INVALID_ARGUMENTS,
+ BLUETOOTH_EVENT_MAP_GET_MESSAGE_FAILED,
+ BLUETOOTH_EVENT_MAP_LIST_FILTER_FIELD_COMPLETE,
+
BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_AUTHORIZE = BLUETOOTH_EVENT_OBEX_SERVER_BASE,
/* Obex server authorize event*/
BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED, /* Obex Server transfer started event*/
BLUETOOTH_EVENT_IPSP_INTERFACE_INFO, /** IPSP BT Interface Info after connection */
BLUETOOTH_EVENT_LE_DATA_LENGTH_CHANGED, /** LE data length values changed */
BLUETOOTH_EVENT_PXP_PROPERTY_CHANGED, /** Proximity property changed */
+ BLUETOOTH_EVENT_TDS_ACTIVATION_REQUESTED, /** TDS activation requested */
+ BLUETOOTH_EVENT_TDS_TRANSPORT_DATA_RECEIVED, /** TDS Transport Data received */
+ BLUETOOTH_EVENT_TDS_ACTIVATION_RESULT, /** TDS Activation Result */
+ BLUETOOTH_EVENT_TDS_CONTROL_POINT_ENABLED, /** TDS CCCD enabled event */
+ BLUETOOTH_EVENT_TDS_ACTIVATION_INDICATION, /** TDS Activation Indication from Provider */
+
+ BLUETOOTH_EVENT_OTP_SERVER_STATE_CHANGED, /* OTP Server Status **/
} bluetooth_event_type_t;
/**
BLUETOOTH_DUN_PROFILE_UUID = ((unsigned short)0x1103), /**<DUN*/
BLUETOOTH_OBEX_IR_MC_SYNC_SERVICE_UUID = ((unsigned short)0x1104), /**<OBEX IR MC SYNC*/
BLUETOOTH_OBEX_OBJECT_PUSH_SERVICE_UUID = ((unsigned short)0x1105), /**<OPP*/
+ BLUETOOTH_OBEX_MESSAGE_ACCESS_SERVICE_UUID = ((unsigned short)0x1134), /**<MAP*/
BLUETOOTH_OBEX_FILE_TRANSFER_UUID = ((unsigned short)0x1106), /**<FTP*/
BLUETOOTH_IRMC_SYNC_COMMAND_UUID = ((unsigned short)0x1107), /**<IRMC SYNC COMMAND*/
BLUETOOTH_HS_PROFILE_UUID = ((unsigned short)0x1108), /**<HS*/
int percentage;
} bt_opc_transfer_info_t;
+/* TODO: MAP client structures, see above */
+/**
+ * Stucture to Map filter fields
+ */
+typedef struct {
+ char **fields;
+ int size;
+} bt_map_list_filter_fields_info_t;
+
/* Obex Server transfer type */
#define TRANSFER_PUT "PUT"
#define TRANSFER_GET "GET"
char *service_handle;
char *address;
guint16 offset;
- guint8 req_id;
+ guint req_id;
} bt_gatt_read_req_t;
/**
char *att_handle;
char *service_handle;
char *address;
- guint8 req_id;
+ guint req_id;
+ gboolean response_needed;
guint16 offset;
guint8 *att_value;
guint32 val_len;
char if_name[16];
} bt_ipsp_connection_info_t;
+typedef struct {
+ char* session_path;
+ char* remote_address;
+} bt_map_client_session_info_s;
+
+typedef char* bt_map_client_message_object_t;
+
+typedef struct {
+ int16_t offset;
+ int16_t max_count;
+} bt_map_client_list_folders_filter_t;
+
+typedef struct {
+ int16_t offset;
+ int16_t max_count;
+ int8_t subject_length;
+ char *fields;
+ char *types;
+ char *period_begin;
+ char *period_end;
+ int is_read;
+ char *recipient;
+ char *sender;
+ int is_priority;
+} bt_map_client_list_messages_filter_t;
+
+typedef struct {
+ bt_map_client_message_object_t message_object;
+ char *folder;
+ char *subject;
+ char *timestamp;
+ char *sender;
+ char *sender_address;
+ char *reply_to;
+ char *recipient;
+ char *recipient_address;
+ char *type;
+ int64_t size;
+ int is_text;
+ char *status;
+ int64_t attachment_size;
+ int is_priority;
+ int is_read;
+ int is_sent;
+ int is_protected;
+} bt_map_client_message_item_t;
+
+typedef struct {
+ int is_transparent;
+ int is_retry;
+ char *charset;
+} bt_map_client_push_message_args_t;
+
+typedef struct {
+ char *folder;
+ char *subject;
+ char *timestamp;
+ char *sender;
+ char *sender_address;
+ char *reply_to;
+ char *recipient;
+ char *recipient_address;
+ char *type;
+ int64_t size;
+ char *status;
+ int is_priority;
+ int is_read;
+ int is_deleted;
+ int is_sent;
+ int is_protected;
+} bt_map_client_message_t;
+
+typedef struct {
+ char **names; // holding %size null-terminated folder names
+ int64_t size;
+} bt_map_client_folders_s;
+
+typedef struct {
+ bt_map_client_message_item_t *message_items;
+ int64_t size;
+} bt_map_client_message_items_s;
+
+typedef struct {
+ const char* target_file;
+ void* user_data;
+} bt_get_message_callback_data;
+
/**
* Callback pointer type
*/
/**
+ * @fn int bluetooth_map_client_init(void)
+ * @brief Initialize MAP client.
+ *
+ * This function is a synchronous call.
+ * No event corresponding to this api
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ * BLUETOOTH_ERROR_NO_RESOURCES - Not resource available \n
+ * BLUETOOTH_ERROR_ACCESS_DENIED -Memory allocation failed \n
+ *
+ * @exception None
+ *
+ * @remark None
+ * @see bluetooth_map_client_deinit
+ */
+int bluetooth_map_client_init(void);
+
+int bluetooth_map_client_deinit(void);
+
+int bluetooth_map_client_create_session(bt_map_client_session_info_s *session);
+
+int bluetooth_map_client_destroy_session(bt_map_client_session_info_s *session);
+
+int bluetooth_map_client_set_folder(bt_map_client_session_info_s *session, const char *name);
+
+int bluetooth_map_client_list_folders(bt_map_client_session_info_s *session,
+ bt_map_client_list_folders_filter_t *filter);
+
+/**
+ * @fn int bluetooth_map_client_list_filter_fields(bt_map_session_info_s* session)
+ * @brief Return all available fields that can be used in Fields filter.
+ *
+ * This function is a asynchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Update inbox failed \n
+ *
+ * @exception None
+ * @param[in] session Information about session.
+ * @remark None
+ */
+int bluetooth_map_client_list_filter_fields(bt_map_client_session_info_s *session);
+
+int bluetooth_map_client_list_messages(bt_map_client_session_info_s *session,
+ const char *folder,
+ bt_map_client_list_messages_filter_t *filter);
+
+int bluetooth_map_client_update_inbox(bt_map_client_session_info_s *session);
+
+int bluetooth_map_client_push_message(bt_map_client_session_info_s *session,
+ const char *source_file,
+ const char *folder,
+ bt_map_client_push_message_args_t *args);
+
+int bluetooth_map_client_get_message(bt_map_client_session_info_s *session,
+ const bt_map_client_message_object_t message_object,
+ const char *target_file,
+ bool attachment);
+
+
+/**
* @fn int bluetooth_oob_read_local_data(bt_oob_data_t *local_oob_data)
* @brief Read the local Hash and Randmizer.
*
bluetooth_pxp_poperty_t property, int *value);
/**
+ * @fn int bluetooth_tds_provider_register(void);
+ *
+ * @brief Register Transport Discovery Provider role.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_ALREADY_INITIALIZED - Already done \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Adapter not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] None
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_tds_provider_register(void);
+
+/**
+ * @fn int bluetooth_tds_provider_unregister(void);
+ *
+ * @brief Unregister Transport Discovery Provider role.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_NOT_INITIALIZED - Provider not registered \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Adapter not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] None
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_tds_provider_unregister(void);
+
+/**
+ * @fn int bluetooth_tds_provider_create(int transport, unsigned int handle);
+ *
+ * @brief Create Transport Discovery Provider for a transport.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ * BLUETOOTH_ERROR_NOT_INITIALIZED - Provider not registered \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] Transport (BT, CUSTOM etc.)
+ * @param[in] Unique handle for TDS provider.
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_tds_provider_create(int transport, unsigned int handle);
+
+/**
+ * @fn int bluetooth_tds_provider_destroy(unsigned int handle);
+ *
+ * @brief Remove previously created Transport Discovery Provider.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ *
+ * @exception None
+ * @param[in] Unique handle for previously created provider.
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_tds_provider_destroy(unsigned int handle);
+
+/**
+ * @fn int bluetooth_set_tds_provider_manuf_data(unsigned char *buf, unsigned int length);
+ *
+ * @brief Set transport block for in advertisement and gatt db.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Adapter not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] Provider specific manufacturer data.
+ * @param[in] Provider specific manufacturer data length.
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_set_tds_provider_manuf_data(unsigned char *buf, unsigned int length);
+
+/**
+ * @fn int bluetooth_set_tds_provider_transport_data(unsigned int tds_handle,
+ * bluetooth_tds_transport_state_t state, unsigned char *buf, unsigned int length);
+ *
+ * @brief Set transport block for in advertisement and gatt db.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Adapter not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] Unique handle for TDS provider.
+ * @param[in] Transport state (On/Off/Not Available).
+ * @param[in] Transport specific data block.
+ * @param[in] Transport specific data block length.
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_set_tds_provider_transport_data(unsigned int tds_handle,
+ bluetooth_tds_transport_state_t state, unsigned char *buf, unsigned int length);
+
+/**
+ * @fn int bluetooth_send_tds_activation_response(bluetooth_device_address_t *device_address,
+ * unsigned int tds_handle, int response, unsigned char *buf, unsigned int length);
+ *
+ * @brief Send response to TDS activation request from remoted device.
+ *
+ * This function is a synchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ * BLUETOOTH_ERROR_NOT_INITIALIZED - Provider not registered \n
+ * BLUETOOTH_ERROR_INTERNAL - Operation failed\n
+ *
+ * @exception None
+ * @param[in] Remote device BT address.
+ * @param[in] Unique handle for TDS provider.
+ * @param[in] Response for TDS activation request.
+ * @param[in] Transport specific data block to be sent in activation response.
+ * @param[in] Data block length.
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_send_tds_activation_response(bluetooth_device_address_t *device_address,
+ unsigned int tds_handle, int response, unsigned char *buf, unsigned int length);
+
+/**
+ * @fn int bluetooth_tds_read_transport_data(bluetooth_device_address_t *device_address, const char *handle);
+ *
+ * @brief Reads the Complete TDS transport Blocks from Remote Provider's GATT database.
+ *
+ * This function is an asynchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ * BLUETOOTH_ERROR_IN_PROGRESS - Already Read Request is pending on same provider \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ *
+ * @exception None
+ * @param[in] device_address remote device address
+ * @param[in] handle attribute handle
+ *
+ * @remark BLUETOOTH_EVENT_TDS_TRANSPORT_DATA_RECEIVED event is sent to pplication
+ * when TDS data is received from Remote provider
+ */
+int bluetooth_tds_read_transport_data(const bluetooth_device_address_t *device_address,
+ const char *handle);
+
+/**
+ * @fn int bluetooth_tds_enable_control_point(const bluetooth_device_address_t *device_address, const char *handle);
+ *
+ * @brief Enables CCCD on Remote Provider.
+ *
+ * This function is an asynchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ * BLUETOOTH_ERROR_IN_PROGRESS - Already Control Point activation is ongoing to Same Provider \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ *
+ * @exception None
+ * @param[in] device_address remote device address
+ * @param[in] handle attribute handle
+ *
+ * @remark BLUETOOTH_EVENT_TDS_CONTROL_POINT_ENABLED event is sent to application
+ * when Indication is enabled on Remote provider
+ */
+int bluetooth_tds_enable_control_point(const bluetooth_device_address_t *device_address,
+ const char *handle);
+
+/**
+ * @fn int bluetooth_tds_activate_control_point(const bluetooth_device_address_t *device_address, const char *handle
+ * unsigned char *buf, int length);
+ * @brief Sends activation request for Alternate Transport enable on Remote Provider
+ *
+ * This function is an asynchronous call.
+ *
+ * @return BLUETOOTH_ERROR_NONE - Success \n
+ * BLUETOOTH_ERROR_DEVICE_NOT_ENABLED - Device is not enabled \n
+ * BLUETOOTH_ERROR_INTERNAL - Internal Error \n
+ * BLUETOOTH_ERROR_IN_PROGRESS - Already Control Point activation is ongoing to Same Provider \n
+ * BLUETOOTH_ERROR_INVALID_PARAM - Invalid parameter \n
+ *
+ * @exception None
+ * @param[in] device_address remote device address
+ * @param[in] handle attribute handle
+ * @param[in] buf Control point activation param
+ * @param[in] param length
+ *
+ * @remark BLUETOOTH_EVENT_TDS_ACTIVATION_INDICATION event is sent to application when Indication response
+ * is received from remote Provider
+ */
+int bluetooth_tds_activate_control_point(const bluetooth_device_address_t *device_address, const char *handle,
+ unsigned char *buf, int length);
+
+/**
+ * @fn int bluetooth_otp_server_init(const char *directory);
+ *
+ * @brief Starts OTP server.
+ *
+ * This function is a synchronous call.
+ *
+ * @return
+ *
+ * @exception None
+ * @param[in] None
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_otp_server_init(const char *directory);
+
+/**
+ * @fn int bluetooth_otp_server_deinit();
+ *
+ * @brief Stops OTP server.
+ *
+ * This function is a synchronous call.
+ *
+ * @return
+ *
+ * @exception None
+ * @param[in] None
+ * @param[out] None
+ *
+ * @remark None
+ */
+int bluetooth_otp_server_deinit();
+
+/**
* @}
*/