Fixed AVRCP controller reply pending request
[platform/core/connectivity/bluetooth-frwk.git] / bt-service-adaptation / services / audio / avrcp / bt-service-avrcp-ctrl.c
index 4c280d2..7a43fad 100644 (file)
@@ -135,50 +135,120 @@ int _bt_avrcp_control_cmd(int type)
 
        connected = _bt_is_headset_type_connected(BT_AVRCP, connected_address);
 
-       if (connected) {
-               _bt_convert_addr_string_to_type(device_address.addr,
-                               connected_address);
-               switch (type) {
-               case RC_PASS_CMD_PLAY:
-                       status = avrcp_ct_play((bt_address_t*)&device_address);
-                       break;
-               case RC_PASS_CMD_PAUSE:
-                       status = avrcp_ct_pause((bt_address_t*)&device_address);
-                       break;
-               case RC_PASS_CMD_STOP:
-                       status = avrcp_ct_stop((bt_address_t*)&device_address);
-                       break;
-               case RC_PASS_CMD_NEXT:
-                       status = avrcp_ct_next_track((bt_address_t*)&device_address);
-                       break;
-               case RC_PASS_CMD_PREVIOUS:
-                       status = avrcp_ct_prev_track((bt_address_t*)&device_address);
-                       break;
-               case RC_PASS_CMD_PRESS_FAST_FORWARD:
-                       status = avrcp_ct_fforward((bt_address_t*)&device_address, PRESS_STATE);
-                       break;
-               case RC_PASS_CMD_RELEASE_FAST_FORWARD:
-                       status = avrcp_ct_fforward((bt_address_t*)&device_address, RELEASE_STATE);
-                       break;
-               case RC_PASS_CMD_PRESS_REWIND:
-                       status = avrcp_ct_rewind((bt_address_t*)&device_address, PRESS_STATE);
-                       break;
-               case RC_PASS_CMD_RELEASE_REWIND:
-                       status = avrcp_ct_rewind((bt_address_t*)&device_address, RELEASE_STATE);
-                       break;
-               default:
-                       break;
-               }
+       if (!connected) {
+               BT_ERR("Device is not connected:");
+               return BLUETOOTH_ERROR_NOT_CONNECTED;
+       }
 
-               if (status != OAL_STATUS_SUCCESS) {
-                       BT_ERR("Send pass through command err: [%d]", status);
-                       result = BLUETOOTH_ERROR_INTERNAL;
-               }
-       } else {
+       _bt_convert_addr_string_to_type(device_address.addr,
+                       connected_address);
+       switch (type) {
+       case RC_PASS_CMD_PLAY:
+               status = avrcp_ct_play((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_PAUSE:
+               status = avrcp_ct_pause((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_STOP:
+               status = avrcp_ct_stop((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_NEXT:
+               status = avrcp_ct_next_track((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_PREVIOUS:
+               status = avrcp_ct_prev_track((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_PRESS_FAST_FORWARD:
+               status = avrcp_ct_fforward((bt_address_t*)&device_address, PRESS_STATE);
+               break;
+       case RC_PASS_CMD_RELEASE_FAST_FORWARD:
+               status = avrcp_ct_fforward((bt_address_t*)&device_address, RELEASE_STATE);
+               break;
+       case RC_PASS_CMD_PRESS_REWIND:
+               status = avrcp_ct_rewind((bt_address_t*)&device_address, PRESS_STATE);
+               break;
+       case RC_PASS_CMD_RELEASE_REWIND:
+               status = avrcp_ct_rewind((bt_address_t*)&device_address, RELEASE_STATE);
+               break;
+       case RC_PASS_CMD_VOLUME_UP:
+               status = avrcp_ct_volume_up((bt_address_t*)&device_address);
+               break;
+       case RC_PASS_CMD_VOLUME_DOWN:
+               status = avrcp_ct_volume_down((bt_address_t*)&device_address);
+               break;
+       default:
+               break;
+       }
+
+       if (status != OAL_STATUS_SUCCESS) {
+               BT_ERR("Send pass through command err: [%d]", status);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       return result;
+}
+
+int _bt_avrcp_control_cmd_to_dest(int type, bluetooth_device_address_t *device_address)
+{
+       char connected_address[BT_ADDRESS_STRING_SIZE + 1];
+       gboolean connected;
+       oal_status_t status = OAL_STATUS_SUCCESS;
+       int result = BLUETOOTH_ERROR_NONE;
+       BT_INFO("+");
+
+       _bt_convert_addr_type_to_string(connected_address, device_address->addr);
+
+       connected = _bt_is_headset_address_type_connected(BT_AVRCP,
+                                                               (const char *)connected_address);
+
+       if (!connected) {
                BT_ERR("Device is not connected:");
                return BLUETOOTH_ERROR_NOT_CONNECTED;
        }
 
+       switch (type) {
+       case RC_PASS_CMD_PLAY:
+               status = avrcp_ct_play((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_PAUSE:
+               status = avrcp_ct_pause((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_STOP:
+               status = avrcp_ct_stop((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_NEXT:
+               status = avrcp_ct_next_track((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_PREVIOUS:
+               status = avrcp_ct_prev_track((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_PRESS_FAST_FORWARD:
+               status = avrcp_ct_fforward((bt_address_t*)device_address, PRESS_STATE);
+               break;
+       case RC_PASS_CMD_RELEASE_FAST_FORWARD:
+               status = avrcp_ct_fforward((bt_address_t*)device_address, RELEASE_STATE);
+               break;
+       case RC_PASS_CMD_PRESS_REWIND:
+               status = avrcp_ct_rewind((bt_address_t*)device_address, PRESS_STATE);
+               break;
+       case RC_PASS_CMD_RELEASE_REWIND:
+               status = avrcp_ct_rewind((bt_address_t*)device_address, RELEASE_STATE);
+               break;
+       case RC_PASS_CMD_VOLUME_UP:
+               status = avrcp_ct_volume_up((bt_address_t*)device_address);
+               break;
+       case RC_PASS_CMD_VOLUME_DOWN:
+               status = avrcp_ct_volume_down((bt_address_t*)device_address);
+               break;
+       default:
+               break;
+       }
+
+       if (status != OAL_STATUS_SUCCESS) {
+               BT_ERR("Send pass through command err: [%d]", status);
+               result = BLUETOOTH_ERROR_INTERNAL;
+       }
+
        return result;
 }
 
@@ -407,13 +477,13 @@ static void __bt_avrcp_ct_reply_pending_requests(void)
                case BT_AVRCP_GET_TRACK_INFO:
                case BT_AVRCP_CONTROL_GET_PROPERTY: {
                        _bt_service_method_return(req_info->context, out_param, result);
+                       _bt_free_info_from_invocation_list(req_info);
+                       g_array_free(out_param, TRUE);
                        break;
                }
                default:
                        break;
                }
-               _bt_free_info_from_invocation_list(req_info);
-               g_array_free(out_param, TRUE);
        }
        BT_INFO("-");
 }