X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-api%2Fbt-common.c;h=2dd27000a77523fcf63d8f96bb041f9d433e8a95;hb=62a00d2e3430ed504bc220bcfe67387dd0507e22;hp=496d94b26ae172872e2c991099e3a49016cb56ed;hpb=e5fd74626807bd7ebda6d43851cb9570d1258461;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-api/bt-common.c b/bt-api/bt-common.c index 496d94b..2dd2700 100644 --- a/bt-api/bt-common.c +++ b/bt-api/bt-common.c @@ -37,21 +37,17 @@ #include "bluetooth-gatt-server-api.h" #endif -#ifdef TIZEN_GATT_CLIENT #include "bluetooth-gatt-client-api.h" -#endif +#include "bluetooth-mesh-api.h" #include "bt-common.h" #include "bt-request-sender.h" #include "bt-event-handler.h" - -#ifdef TIZEN_FEATURE_BT_DPM #include "bt-dpm.h" -#endif static bt_user_info_t user_info[BT_MAX_USER_INFO]; static GDBusConnection *system_shared_conn = NULL; -static GDBusConnection *system_private_conn = NULL; +static GDBusConnection *system_common_conn = NULL; static guint bus_id; @@ -59,6 +55,7 @@ static gboolean bt_enabled = FALSE; #define DBUS_TIMEOUT 20 * 1000 /* 20 Seconds */ +#if 0 // Remain this code for private connection in later. static GDBusConnection *g_bus_get_private_conn(void) { GError *error = NULL; @@ -91,15 +88,21 @@ static GDBusConnection *g_bus_get_private_conn(void) return private_gconn; } +#endif -GDBusConnection *_bt_get_system_private_conn(void) +// TODO: Need to use _bt_get_system_shared_conn in later. +GDBusConnection *_bt_get_system_common_conn(void) { - if (system_private_conn == NULL) - system_private_conn = g_bus_get_private_conn(); - else if (g_dbus_connection_is_closed(system_private_conn)) - system_private_conn = g_bus_get_private_conn(); - - return system_private_conn; + if (system_common_conn == NULL) { + GError *error = NULL; + system_common_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); + if (error) { + BT_ERR("GDBus connection Error : %s \n", error->message); + g_clear_error(&error); + return NULL; + } + } + return system_common_conn; } GDBusConnection *_bt_get_system_shared_conn(void) @@ -133,20 +136,21 @@ bt_user_info_t *_bt_get_user_data(int type) return &user_info[type]; } -int _bt_common_send_rfcomm_rx_details(bluetooth_rfcomm_received_data_t *data) +int _bt_common_send_rfcomm_rx_details(unsigned int len) { uid_t uid = getuid(); pid_t pid = getpid(); - int size = data->buffer_size; + unsigned int size = len; int ret = BLUETOOTH_ERROR_NONE; BT_INFO("+"); + BT_CHECK_ENABLED(return); BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); g_array_append_vals(in_param1, &uid, sizeof(uid_t)); g_array_append_vals(in_param2, &pid, sizeof(pid_t)); - g_array_append_vals(in_param3, &size, sizeof(int)); + g_array_append_vals(in_param3, &size, sizeof(unsigned int)); ret = _bt_send_request(BT_BLUEZ_SERVICE, BT_RFCOMM_SEND_RX_DETAILS, in_param1, in_param2, in_param3, in_param4, &out_param); @@ -156,33 +160,59 @@ int _bt_common_send_rfcomm_rx_details(bluetooth_rfcomm_received_data_t *data) return ret; } -int _bt_common_send_rfcomm_tx_details(int len) +int _bt_common_send_rfcomm_tx_details(unsigned int len) { uid_t uid = getuid(); pid_t pid = getpid(); - int size = len; + unsigned int size = len; int ret = BLUETOOTH_ERROR_NONE; BT_INFO("+"); + BT_CHECK_ENABLED(return); BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); g_array_append_vals(in_param1, &uid, sizeof(uid_t)); g_array_append_vals(in_param2, &pid, sizeof(pid_t)); - g_array_append_vals(in_param3, &size, sizeof(int)); + g_array_append_vals(in_param3, &size, sizeof(unsigned int)); ret = _bt_send_request(BT_BLUEZ_SERVICE, BT_RFCOMM_SEND_TX_DETAILS, in_param1, in_param2, in_param3, in_param4, &out_param); BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); - BT_DBG("-"); + BT_INFO("-"); return ret; } +int _bt_common_send_rfcomm_conn_info(int role, gboolean connected, int socket_fd) +{ + int result = BLUETOOTH_ERROR_NONE; + + if (bluetooth_get_battery_monitor_state() == 0) { + BT_DBG("Battery monitor state is off"); + return BLUETOOTH_ERROR_NONE; + } + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &role, sizeof(int)); + g_array_append_vals(in_param2, &connected, sizeof(gboolean)); + g_array_append_vals(in_param3, &socket_fd, sizeof(int)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, BT_RFCOMM_UPDATE_CONNECTION_INFO, + in_param1, in_param2, in_param3, in_param4, &out_param); + + BT_DBG("result: %x", result); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + void _bt_common_event_cb(int event, int result, void *param, void *callback, void *user_data) { - BT_DBG("+"); bluetooth_event_param_t bt_event = { 0, }; bt_event.event = event; bt_event.result = result; @@ -258,7 +288,6 @@ void _bt_avrcp_event_cb(int event, int result, void *param, user_data); } -#ifdef TIZEN_GATT_CLIENT void _bt_gatt_client_event_cb(int event, int result, void *param, void *callback, void *user_data) { @@ -275,19 +304,16 @@ void _bt_gatt_client_event_cb(int event, int result, void *param, BT_ERR("GATT Client event callback is not registered!!!"); } } -#endif #ifndef GATT_DIRECT void _bt_gatt_server_event_cb(int event, int result, void *param, void *callback, void *user_data) { - BT_INFO("__bt_gatt_server_event_cb"); gatt_server_event_param_t bt_event = { 0, 0, NULL, NULL }; bt_event.event = event; bt_event.result = result; bt_event.param_data = param; if (callback) { - BT_INFO("GATT Server event callback is registered"); ((gatt_server_cb_func_ptr)callback)(bt_event.event, &bt_event, user_data); } else { @@ -296,6 +322,23 @@ void _bt_gatt_server_event_cb(int event, int result, void *param, } #endif +void _bt_mesh_event_cb(int event, int result, void *param, + void *callback, void *user_data) +{ + BT_DBG("_bt_mesh_event_cb"); + mesh_event_param_t bt_event = { 0, 0, NULL, NULL }; + bt_event.event = event; + bt_event.result = result; + bt_event.param_data = param; + if (callback) { + BT_DBG("Mesh event callback is registered"); + ((mesh_cb_func_ptr)callback)(bt_event.event, &bt_event, + user_data); + } else { + BT_ERR("Mesh event callback is not registered!!!"); + } +} + void _bt_divide_device_class(bluetooth_device_class_t *device_class, unsigned int cod) { @@ -974,7 +1017,7 @@ static GDBusProxy *__bt_gdbus_get_device_proxy(char *object_path) GError *err = NULL; GDBusProxy *device_gproxy; - gconn = _bt_get_system_private_conn(); + gconn = _bt_get_system_common_conn(); if (gconn == NULL) return NULL; @@ -1067,7 +1110,7 @@ static GDBusProxy * __bt_gdbus_get_adapter_proxy() GVariant *result = NULL; char *adapter_path = NULL; - conn = _bt_get_system_private_conn(); + conn = _bt_get_system_common_conn(); retv_if(conn == NULL, NULL); manager_proxy = g_dbus_proxy_new_sync(conn, @@ -1582,9 +1625,9 @@ int _bt_discover_service_uuids(char *address, char *remote_uuid) GVariant *value = NULL; GVariant *ret = NULL; int result = BLUETOOTH_ERROR_INTERNAL; - BT_INFO("+"); + retv_if(remote_uuid == NULL, BLUETOOTH_ERROR_INTERNAL); - gconn = _bt_get_system_private_conn(); + gconn = _bt_get_system_common_conn(); retv_if(gconn == NULL, BLUETOOTH_ERROR_INTERNAL); object_path = _bt_get_device_object_path(address); retv_if(object_path == NULL, BLUETOOTH_ERROR_INTERNAL); @@ -1654,7 +1697,7 @@ int _bt_get_cod_by_address(char *address, bluetooth_device_class_t *dev_class) unsigned int class = 0x00; int ret = BLUETOOTH_ERROR_NONE; - gconn = _bt_get_system_private_conn(); + gconn = _bt_get_system_common_conn(); retv_if(gconn == NULL, BLUETOOTH_ERROR_INTERNAL); object_path = _bt_get_device_object_path(address); @@ -1748,15 +1791,30 @@ int _bt_disconnect_ext_profile(char *address, char *path) { GDBusProxy *proxy; char *object_path; + GDBusConnection *gconn; + GError *err = NULL; object_path = _bt_get_device_object_path(address); if (object_path == NULL) return BLUETOOTH_ERROR_INTERNAL; - proxy = __bt_gdbus_get_device_proxy(object_path); + gconn = _bt_get_system_shared_conn(); + if (gconn == NULL) { + g_free(object_path); + return BLUETOOTH_ERROR_INTERNAL; + } + + proxy = g_dbus_proxy_new_sync(gconn, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, + NULL, BT_BLUEZ_NAME, + object_path, + BT_DEVICE_INTERFACE, + NULL, &err); + g_free(object_path); - if (proxy == NULL) { - BT_ERR("Error while getting proxy"); + + if (proxy == NULL && err) { + BT_ERR("Unable to create proxy: %s", err->message); + g_clear_error(&err); return BLUETOOTH_ERROR_INTERNAL; } @@ -1913,7 +1971,7 @@ char *_bt_get_device_object_path(char *address) GDBusConnection *conn = NULL; char *object_path = NULL; - conn = _bt_get_system_private_conn(); + conn = _bt_get_system_common_conn(); retv_if(conn == NULL, NULL); proxy = g_dbus_proxy_new_sync(conn, @@ -2028,7 +2086,7 @@ GVariant *_bt_get_managed_objects(void) BT_DBG("+"); - g_conn = _bt_get_system_private_conn(); + g_conn = _bt_get_system_common_conn(); retv_if(g_conn == NULL, NULL); manager_proxy = g_dbus_proxy_new_sync(g_conn, @@ -2427,7 +2485,7 @@ BT_EXPORT_API int bluetooth_register_callback(bluetooth_cb_func_ptr callback_ptr { int ret; - _bt_get_system_private_conn(); + _bt_get_system_common_conn(); ret = _bt_init_event_handler(); if (ret != BLUETOOTH_ERROR_NONE && @@ -2496,6 +2554,8 @@ BT_EXPORT_API int bluetooth_unregister_callback(void) _bt_set_obex_server_id(BT_NO_SERVER); + _bt_reset_battery_monitor_info(); + _bt_gdbus_deinit_proxys(); if (profile_gproxy) { @@ -2503,9 +2563,9 @@ BT_EXPORT_API int bluetooth_unregister_callback(void) profile_gproxy = NULL; } - if (system_private_conn) { - g_object_unref(system_private_conn); - system_private_conn = NULL; + if (system_common_conn) { + g_object_unref(system_common_conn); + system_common_conn = NULL; } return BLUETOOTH_ERROR_NONE;