#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;
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;
}
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;
_bt_set_obex_server_id(BT_NO_SERVER);
+ _bt_reset_battery_monitor_info();
+
_bt_gdbus_deinit_proxys();
if (profile_gproxy) {
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)
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);
}
g_free(buffer);
- BT_DBG("-");
return TRUE;
}
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;
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;
}
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
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,
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 */