gboolean _bt_hal_is_advertising(void)
{
- gboolean status = FALSE;
int i;
for (i = 0; i < le_feature_info.adv_inst_max; i++) {
if (le_adv_slot[i].is_advertising == TRUE)
- status = TRUE;
+ return TRUE;
}
- return status;
+ return FALSE;
}
int _bt_hal_le_init(void)
.le_disable = _bt_hal_le_disable,
.le_init = _bt_hal_le_init,
.le_deinit = _bt_hal_le_deinit,
+ .is_advertising = _bt_hal_is_advertising,
#endif
.cleanup = cleanup,
#ifdef TIZEN_BT_HAL
size += __bt_insert_hal_properties(buf + size,
HAL_PROP_ADAPTER_NAME, strlen(name) + 1, name);
ev->num_props++;
- g_free(name);
} else if (!g_strcmp0(key, "Class")) {
cod = g_variant_get_uint32(value);
DBG("##Class [%d]", cod);
size += __bt_insert_hal_properties(buf + size,
HAL_PROP_ADAPTER_NAME, strlen(name) + 1, name);
ev->num_props++;
- g_free(name);
} else if (!g_strcmp0(key, "Powered")) {
powered = g_variant_get_boolean(value);
DBG("##Powered = %d", powered);
while (g_variant_iter_next(iter, "&s", &name) &&
g_variant_iter_next(iter, "&s", &val)) {
DBG("name = %s, Value = %s", name, val);
- g_variant_iter_loop(iter, "s", &val);
if (FALSE == _bt_hal_update_le_feature_support(name, val))
ERR("Failed to update LE feature (name = %s, value = %s)", name, val);
}
int (*le_init)(void);
void (*le_deinit)(void);
+
+ int (*is_advertising) (void);
#endif
/** Closes the interface. */
*/
oal_status_t adapter_ble_multi_adv_disable(int instance_id);
+/**
+ * @brief Check if the advertising is enable
+ *
+ * @param void
+ *
+ * @details check from the LE adv list if the Advertising is enabled on the server created.
+ *
+ * @return OAL_STATUS_SUCCESS on success, otherwise a non-zero error value.
+ * @retval #OAL_STATUS_SUCCESS Successful
+ *
+ * @pre Adapter must be enabled with adapter_enable() followed by OAL_EVENT_ADAPTER_ENABLED
+ */
+oal_status_t is_advertising(void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif
return ret;
}
+oal_status_t is_advertising(void)
+{
+ int ret = BT_STATUS_SUCCESS;
+ API_TRACE();
+ CHECK_OAL_INITIALIZED();
+#ifdef TIZEN_BT_HAL
+ if (OAL_STATUS_SUCCESS != hw_is_module_ready()) {
+ g_timeout_add(200, retry_enable_le, NULL);
+ return OAL_STATUS_PENDING;
+ }
+ int r = blued_api->is_advertising();
+ if (r == TRUE)
+ ret = BT_STATUS_SUCCESS;
+ else
+ ret = BT_STATUS_FAIL;
+#else
+ BT_INFO("Not Supported");
+ ret = OAL_STATUS_NOT_SUPPORT;
+#endif
+ return ret;
+}
oal_status_t adapter_start_custom_inquiry(discovery_type_t disc_type)
{
int ret;
char * adap_name = g_strdup(local_name);
/* Application has requested this property SET/GET hence send EVENT */
- send_event(OAL_EVENT_ADAPTER_PROPERTY_NAME, adap_name, strlen(adap_name));
+ send_event(OAL_EVENT_ADAPTER_PROPERTY_NAME, adap_name, strlen(adap_name)+1);
}
break;
}
CHECK_SERVER_INSTANCE(instance_id);
CHECK_SERVER_REGISTRATION(instance_id);
- if (gatt_servers[instance_id - 1].server_id < 0) {
- BT_INFO("GATT server registeration is not done for server Instance : %d", instance_id);
- return gatts_register(&gatt_servers[instance_id - 1].uuid);
- }
-
if (gatt_serv_id != NULL) {
uuid_to_stringname(&(gatt_serv_id->id.uuid), str);
API_TRACE("Service uuid: [%s]", str);
invocation_info_t *req_info = NULL;
BT_DBG("+");
- for (l = _bt_get_invocation_list(); l != NULL; l = g_slist_next(l)) {
+ for (l = _bt_get_invocation_list(); l != NULL; ) {
req_info = l->data;
+ l = g_slist_next(l);
if (req_info == NULL || req_info->service_function != service_function)
continue;
/* Get sender and adv handle for the server instance */
_bt_get_adv_handle_from_instance(data->server_inst, &adv_handle);
- if (adv_handle > 0) {
/* Check if pending Adv Data set or Scan response data set request is pending*/
for (l = adv_data_pending_list; l != NULL; l = l->next) {
info = l->data;
(void*)info, sizeof(bt_pending_adv_data_set_t));
}
goto data_free;
- }
}
}
}
}
_bt_get_previous_adv_data(adv, length, server_instance);
- BT_DBG("ADV Data length [%d] Server Instance [%d] Adv handle [%d]", length, server_instance, adv_handle);
+ BT_DBG("ADV Data length [%d] Server Instance [%d] Adv handle [%d]", *length, server_instance, adv_handle);
return BLUETOOTH_ERROR_NONE;
}
}
_bt_get_previous_scan_rsp_data(response, length, server_instance);
- BT_DBG("SCAN RSP Data length [%d] Server Instance [%d] Adv handle [%d]", length, server_instance, adv_handle);
+ BT_DBG("SCAN RSP Data length [%d] Server Instance [%d] Adv handle [%d]", *length, server_instance, adv_handle);
return BLUETOOTH_ERROR_NONE;
}
le_deinit();
}
+int _bt_is_advertising(void)
+{
+ int ret = is_advertising();
+
+ if (ret == BLUETOOTH_ERROR_NONE)
+ return TRUE;
+ else
+ return FALSE;
+}
/*************************************** LE Scan APIs *********************************************/
/*TODO: Init bluetooth profiles */
ret = _bt_hidhost_initialize();
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_hidhost_initialize Failed");
- return ret;
- }
ret = _bt_socket_init();
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_socket_init Failed");
- return ret;
- }
/*
* Query local adapter services and based on a2dp service uuids initialized
* in bluetooth stack, enable A2DP sourec or A2DP sink role.
*/
ret = adapter_get_service_uuids();
- if (ret != OAL_STATUS_SUCCESS) {
+ if (ret != OAL_STATUS_SUCCESS)
BT_ERR("adapter_get_service_uuids failed: %d", ret);
- return BLUETOOTH_ERROR_INTERNAL;
- } else {
+ else
a2dp_init_pending = TRUE;
- }
+
/* Initialize HFP Audio Gateway */
ret = _bt_audio_initialize(BT_AG_MODULE);
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_audio_initialize(BT_AG_MODULE) Failed");
- return ret;
- }
+
/* Registering callback for receiving audio services searched */
ret = _bt_audio_initialize(BT_AUDIO_ALL_MODULE);
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_audio_initialize(BT_AUDIO_ALL_MODULE) Failed");
- return ret;
- }
ret = _bt_hdp_init();
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_hdp_init Failed");
- return ret;
- }
ret = _bt_gatt_init();
- if (ret != BLUETOOTH_ERROR_NONE) {
+ if (ret != BLUETOOTH_ERROR_NONE)
BT_ERR("_bt_gatt_init Failed");
- return ret;
- }
return BLUETOOTH_ERROR_NONE;
}
break;
}
#endif
+ case BT_IS_ADVERTISING: {
+ gboolean advertising = FALSE;
+ advertising = _bt_is_advertising();
+ g_array_append_vals(*out_param1, &advertising,
+ sizeof(gboolean));
+ break;
+ }
default:
BT_INFO("UnSupported function [%d]", function_name);
result = BLUETOOTH_ERROR_NOT_SUPPORT;
#define BT_OBEX_CLIENT_INTERFACE "org.bluez.obex.Client1"
#ifdef TIZEN_FEATURE_BT_OBEX
#define BT_OBEX_MESSAGE_INTERFACE "org.bluez.obex.MessageAccess1"
+#define BT_EVENT_FREEDESKTOP "org.freedesktop.DBus"
#endif
#define BT_OBEX_TRANSFER_INTERFACE "org.bluez.obex.Transfer1"
void _bt_le_deinit(void);
+int _bt_is_advertising(void);
int _bt_set_advertising(const char *sender, int adv_handle, gboolean enable, gboolean use_reserved_slot);
int _bt_set_custom_advertising(const char *sender, int adv_handle, gboolean enable, bluetooth_advertising_params_t *params, gboolean use_reserved_slot);
if (signal_name == NULL)
return;
- BT_DBG("IPSP __bt_manager_event_filter Interface Name [%s]", interface_name);
g_variant_get(parameters, "(&s@a{sv}@as)", &inf_name, &val, NULL);
- BT_DBG("Interface Name [%s] Signal Name : [%s] ", inf_name, signal_name);
if (g_strcmp0(interface_name, BT_PROPERTIES_INTERFACE) == 0) {
_bt_handle_property_changed_event(parameters, path);
}
- BT_DBG("-");
return;
}
static int subs_interface_added_id = -1;
static int subs_interface_removed_id = -1;
+ static int subs_name_owner_changed = -1;
if (subscribe) {
if (subs_interface_added_id == -1) {
__bt_manager_event_filter,
NULL, NULL);
}
+ if (subs_name_owner_changed == -1) {
+ subs_name_owner_changed = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_EVENT_FREEDESKTOP,
+ BT_NAME_OWNER_CHANGED, NULL, NULL, 0,
+ __bt_manager_event_filter, NULL, NULL);
+ }
} else {
if (subs_interface_added_id != -1) {
subs_interface_removed_id);
subs_interface_removed_id = -1;
}
+ if (subs_name_owner_changed != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_name_owner_changed);
+ subs_name_owner_changed = -1;
+ }
+
}
return 0;
}
retv_if(agent_info.custom_server->app_pid != app_pid,
BLUETOOTH_ERROR_ACCESS_DENIED);
+
__bt_free_server_info(agent_info.custom_server);
agent_info.custom_server = NULL;