From: DoHyun Pyun Date: Sun, 22 Mar 2020 23:20:17 +0000 (+0900) Subject: Use the local state for battery monitor state X-Git-Tag: accepted/tizen/5.5/unified/20200331.180229~10 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git;a=commitdiff_plain;h=a246a1ea8aec74b45ae2d9ca5819171d0c9f2b1d Use the local state for battery monitor state Change-Id: I0fe1d00eed7d030f5af836aa0b0018439e7422c0 Signed-off-by: DoHyun Pyun --- diff --git a/bt-api/bt-adapter.c b/bt-api/bt-adapter.c index 36edc67..fc41fa2 100644 --- a/bt-api/bt-adapter.c +++ b/bt-api/bt-adapter.c @@ -29,6 +29,15 @@ #define VCONFKEY_BATTERY_MONITOR_STATUS "db/bluetooth/bmstatus" #endif + +typedef enum { + BT_MONITOR_NONE = -1, + BT_MONITOR_OFF = 0, + BT_MONITOR_ON = 1, +} bt_battery_monitor_state_t; + +static int battery_monitor_state = BT_MONITOR_NONE; + static int __bt_fill_device_list(GArray *out_param2, GPtrArray **dev_list) { int i; @@ -117,16 +126,57 @@ BT_EXPORT_API int bluetooth_set_battery_monitor_state(bool state) BT_ERR("vconf_set_bool failed"); return BLUETOOTH_ERROR_INTERNAL; } + + battery_monitor_state = (state == false) ? BT_MONITOR_OFF : BT_MONITOR_ON; + return BLUETOOTH_ERROR_NONE; } +static void __bt_battery_monitor_status_changed_cb(keynode_t *node, void *data) +{ + gboolean status = FALSE; + int type; + + type = vconf_keynode_get_type(node); + if (type == VCONF_TYPE_BOOL) { + status = vconf_keynode_get_bool(node); + + BT_DBG("Update the monitor state to %d", status); + + battery_monitor_state = (status == FALSE) ? BT_MONITOR_OFF : BT_MONITOR_ON; + } else { + BT_ERR("Invaild vconf key type : %d", type); + return; + } +} + +void _bt_reset_battery_monitor_info(void) +{ + vconf_ignore_key_changed(VCONFKEY_BATTERY_MONITOR_STATUS, + (vconf_callback_fn)__bt_battery_monitor_status_changed_cb); + + _bt_rfcomm_server_reset_timer(); + _bt_rfcomm_client_reset_timer(); + + battery_monitor_state = BT_MONITOR_NONE; +} + BT_EXPORT_API int bluetooth_get_battery_monitor_state() { int state = 0; + if (battery_monitor_state != BT_MONITOR_NONE) + return battery_monitor_state; + if (vconf_get_bool(VCONFKEY_BATTERY_MONITOR_STATUS, &state) != 0) BT_ERR("vconf_get_bool failed"); + battery_monitor_state = state; + + if (vconf_notify_key_changed(VCONFKEY_BATTERY_MONITOR_STATUS, + (vconf_callback_fn)__bt_battery_monitor_status_changed_cb, NULL) < 0) + BT_ERR("Unable to register key handler"); + return state; } diff --git a/bt-api/bt-common.c b/bt-api/bt-common.c index b87ebe4..2161643 100644 --- a/bt-api/bt-common.c +++ b/bt-api/bt-common.c @@ -182,7 +182,6 @@ int _bt_common_send_rfcomm_tx_details(int len) 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; @@ -2496,6 +2495,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) { diff --git a/bt-api/bt-rfcomm-client.c b/bt-api/bt-rfcomm-client.c index a0f5aff..65c983c 100644 --- a/bt-api/bt-rfcomm-client.c +++ b/bt-api/bt-rfcomm-client.c @@ -78,40 +78,38 @@ static void __client_connected_cb(rfcomm_cb_data_t *cb_data, static bool __rfcomm_record_tx_data(void) { - if (bluetooth_get_battery_monitor_state()) { - if (tx_data > 0) { - int ret = _bt_common_send_rfcomm_tx_details(tx_data); - if (ret == BLUETOOTH_ERROR_NONE) { - tx_data = 0; - return TRUE; - } else { - BT_ERR("RFCOMM tx data could not be registered"); - } + if (tx_data > 0) { + int ret = _bt_common_send_rfcomm_tx_details(tx_data); + if (ret == BLUETOOTH_ERROR_NONE) { + tx_data = 0; + return TRUE; + } else { + BT_ERR("RFCOMM tx data could not be registered"); } } tx_data = 0; tx_tag = 0; + return FALSE; } static bool __rfcomm_record_rx_data(void) { - if (bluetooth_get_battery_monitor_state()) { - if (rx_data) { - int ret = _bt_common_send_rfcomm_rx_details(rx_data); - if (ret == BLUETOOTH_ERROR_NONE) { - rx_data = 0; - return TRUE; - } else { - BT_ERR("RFCOMM rx data could not be registered"); - } + if (rx_data) { + int ret = _bt_common_send_rfcomm_rx_details(rx_data); + if (ret == BLUETOOTH_ERROR_NONE) { + rx_data = 0; + return TRUE; + } else { + BT_ERR("RFCOMM rx data could not be registered"); } } rx_data = 0; rx_tag = 0; - return FALSE; + + return FALSE; } static void __bt_free_cb_data(rfcomm_cb_data_t *cb_data) @@ -366,7 +364,6 @@ static gboolean __client_data_received_cb(GIOChannel *chan, GIOCondition cond, GIOStatus status = G_IO_STATUS_NORMAL; GError *err = NULL; int fd; - BT_DBG("+"); retv_if(info == NULL, FALSE); fd = g_io_channel_unix_get_fd(chan); @@ -448,7 +445,6 @@ static gboolean __client_data_received_cb(GIOChannel *chan, GIOCondition cond, } g_free(buffer); - BT_DBG("-"); return TRUE; } @@ -520,6 +516,22 @@ void _bt_rfcomm_client_disconnect_all(void) return; } +void _bt_rfcomm_client_reset_timer(void) +{ + if (rx_tag > 0) { + rx_tag = 0; + g_source_remove(rx_tag); + } + + if (tx_tag > 0) { + g_source_remove(tx_tag); + tx_tag = 0; + } + + rx_data = 0; + tx_data = 0; +} + int new_connection(const char *path, int fd, bluetooth_device_address_t *addr) { rfcomm_cb_data_t *info; diff --git a/bt-api/bt-rfcomm-server.c b/bt-api/bt-rfcomm-server.c index d8a42f3..1365077 100644 --- a/bt-api/bt-rfcomm-server.c +++ b/bt-api/bt-rfcomm-server.c @@ -61,20 +61,19 @@ static guint rx_tag = 0; static bool __rfcomm_record_rx_data(void) { - BT_INFO(""); - if (bluetooth_get_battery_monitor_state()) { - if (rx_data) { - int ret = _bt_common_send_rfcomm_rx_details(rx_data); - if (ret == BLUETOOTH_ERROR_NONE) { - rx_data = 0; - return TRUE; - } - else { - BT_ERR("RFCOMM rx data could not be registered"); - } + if (rx_data) { + int ret = _bt_common_send_rfcomm_rx_details(rx_data); + if (ret == BLUETOOTH_ERROR_NONE) { + rx_data = 0; + return TRUE; + } else { + BT_ERR("RFCOMM rx data could not be registered"); } } + + rx_data = 0; rx_tag = 0; + return FALSE; } @@ -548,6 +547,16 @@ void _bt_rfcomm_server_disconnect_all(void) return; } + +void _bt_rfcomm_server_reset_timer(void) +{ + if (rx_tag > 0) { + g_source_remove(rx_tag); + rx_tag = 0; + } + + rx_data = 0; +} #else #define BT_RFCOMM_SERVER_ID_MAX 254 diff --git a/bt-api/include/bt-common.h b/bt-api/include/bt-common.h index f3019a5..c74baaf 100644 --- a/bt-api/include/bt-common.h +++ b/bt-api/include/bt-common.h @@ -408,6 +408,12 @@ void _bt_rfcomm_client_disconnect_all(void); gboolean _check_uuid_path(char *path, char *uuid); #endif +void _bt_rfcomm_server_reset_timer(void); + +void _bt_rfcomm_client_reset_timer(void); + +void _bt_reset_battery_monitor_info(void); + int _bt_hid_device_get_fd(const char *address, int *ctrl, int *intr); int _bt_hid_new_connection(bluetooth_device_address_t *addr, @@ -420,6 +426,7 @@ int _bt_get_error_value_from_message(const char *error_message); void _bt_hdp_app_remove_obj_info(unsigned int channe_id); int _bt_hdp_app_acquire_fd(bt_hdp_connected_t *conn_info); + #ifdef __cplusplus } #endif /* __cplusplus */