Fix BT enable issue on XU3 TV profile
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-rfcomm-client.c
index cd72071..99ad52a 100644 (file)
@@ -323,7 +323,7 @@ static gboolean __client_data_received_cb(GIOChannel *chan, GIOCondition cond,
        GIOStatus status = G_IO_STATUS_NORMAL;
        GError *err = NULL;
        int fd;
-       BT_DBG("");
+       BT_DBG("+");
 
        retv_if(info == NULL, FALSE);
        fd = g_io_channel_unix_get_fd(chan);
@@ -391,7 +391,14 @@ static gboolean __client_data_received_cb(GIOChannel *chan, GIOCondition cond,
                        result, &data_r,
                        event_info->cb, event_info->user_data);
 
+       if (bluetooth_get_battery_monitor_state()) {
+               int ret = _bt_common_send_rfcomm_rx_details(&data_r);
+               if (ret != BLUETOOTH_ERROR_NONE)
+                       BT_ERR("RFCOMM received data details not sent to battery monitor frwk");
+       }
+
        g_free(buffer);
+       BT_DBG("-");
        return TRUE;
 }
 
@@ -1012,7 +1019,7 @@ BT_EXPORT_API int bluetooth_rfcomm_connect(
        int id, object_id;
        char *path;
 
-       if (_bt_check_privilege(BT_BLUEZ_SERVICE, BT_RFCOMM_CLIENT_CONNECT)
+       if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_RFCOMM_CLIENT_CONNECT)
             == BLUETOOTH_ERROR_PERMISSION_DEINED) {
                BT_ERR("Don't have a privilege to use this API");
                return BLUETOOTH_ERROR_PERMISSION_DEINED;
@@ -1073,7 +1080,7 @@ BT_EXPORT_API int bluetooth_rfcomm_connect(
        /* In now, we only support to connecty using UUID */
        connect_type = BT_RFCOMM_UUID;
 
-       if (_bt_check_privilege(BT_BLUEZ_SERVICE, BT_RFCOMM_CLIENT_CONNECT)
+       if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_RFCOMM_CLIENT_CONNECT)
             == BLUETOOTH_ERROR_PERMISSION_DEINED) {
                BT_ERR("Don't have a privilege to use this API");
                return BLUETOOTH_ERROR_PERMISSION_DEINED;
@@ -1205,7 +1212,7 @@ BT_EXPORT_API int bluetooth_rfcomm_disconnect(int socket_fd)
 
        BT_CHECK_ENABLED(return);
 
-       if (_bt_check_privilege(BT_BLUEZ_SERVICE, BT_RFCOMM_SOCKET_DISCONNECT)
+       if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_RFCOMM_SOCKET_DISCONNECT)
             == BLUETOOTH_ERROR_PERMISSION_DEINED) {
                BT_ERR("Don't have a privilege to use this API");
                return BLUETOOTH_ERROR_PERMISSION_DEINED;
@@ -1253,7 +1260,7 @@ BT_EXPORT_API int bluetooth_rfcomm_disconnect(int socket_fd)
        BT_CHECK_ENABLED(return);
        retv_if(socket_fd < 0, BLUETOOTH_ERROR_INVALID_PARAM);
 
-       if (_bt_check_privilege(BT_BLUEZ_SERVICE, BT_RFCOMM_SOCKET_DISCONNECT)
+       if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_RFCOMM_SOCKET_DISCONNECT)
                        == BLUETOOTH_ERROR_PERMISSION_DEINED) {
                BT_ERR("Don't have a privilege to use this API");
                return BLUETOOTH_ERROR_PERMISSION_DEINED;
@@ -1287,7 +1294,7 @@ BT_EXPORT_API int bluetooth_rfcomm_disconnect(int socket_fd)
 #else
 static int __write_all(int fd, const char *buf, int len)
 {
-       int sent = 0;
+       int sent = 0, try = 0;
 
        BT_DBG("+");
        while (len > 0) {
@@ -1296,8 +1303,11 @@ static int __write_all(int fd, const char *buf, int len)
                written = write(fd, buf, len);
                BT_DBG("written: %d", written);
                if (written < 0) {
-                       if (errno == EINTR || errno == EAGAIN)
-                               continue;
+                       if (errno == EINTR || errno == EAGAIN) {
+                               try++;
+                               if (try <= 49)
+                                       continue;
+                       }
                        return -1;
                }
 
@@ -1307,6 +1317,7 @@ static int __write_all(int fd, const char *buf, int len)
                len -= written;
                buf += written;
                sent += written;
+               try = 0;
        }
 
        BT_DBG("-");
@@ -1334,17 +1345,9 @@ BT_EXPORT_API int bluetooth_rfcomm_write(int fd, const char *buf, int length)
 
        retv_if(length <= 0, BLUETOOTH_ERROR_INVALID_PARAM);
 
-#ifdef TIZEN_FEATURE_BT_DPM
-       if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED ||
-               _bt_check_dpm(BT_DPM_HF_ONLY, NULL) == BT_DPM_RESTRICTED) {
-               BT_ERR("Not allow to write RFCOMM data");
-               return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION;
-       }
-#endif
-
        switch (privilege_token) {
        case 0:
-               result = _bt_check_privilege(BT_BLUEZ_SERVICE, BT_RFCOMM_SOCKET_WRITE);
+               result = _bt_check_privilege(BT_CHECK_PRIVILEGE, BT_RFCOMM_SOCKET_WRITE);
 
                if (result == BLUETOOTH_ERROR_NONE) {
                        privilege_token = 1; /* Have a permission */
@@ -1366,6 +1369,12 @@ BT_EXPORT_API int bluetooth_rfcomm_write(int fd, const char *buf, int length)
                return BLUETOOTH_ERROR_INTERNAL;
        }
 
+       if (bluetooth_get_battery_monitor_state()) {
+               int ret = _bt_common_send_rfcomm_tx_details(length);
+               if (ret != BLUETOOTH_ERROR_NONE)
+                       BT_ERR("RFCOMM tx data could not be sent");
+       }
+
 #ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
        written = write(fd, buf, length);
        /*BT_DBG("Length %d, written = %d, balance(%d)",