Merge "Add time member to app info structure for battery monitor plugin" into tizen
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / oal-avrcp-ctrl.c
index 978166f..ce1586c 100644 (file)
@@ -88,24 +88,23 @@ static void cb_avrcp_ct_btrc_setplayerapplicationsetting_rsp(bt_bdaddr_t *bd_add
 
 /** AVRCP Controller callback structure. */
 static btrc_ctrl_callbacks_t avrcp_ct_cb = {
-       /** set to sizeof(BtRcCallbacks) */
-       sizeof(avrcp_ct_cb),
-       cb_avrcp_ct_btrc_passthrough_rsp,
-       NULL, //cb_avrcp_ct_btrc_groupnavigation_rsp,
-       cb_avrcp_ct_connection_state,
-       NULL,/*btrc_ct_getrcfeatures_callback*/
-       cb_avrcp_ct_btrc_setplayerapplicationsetting_rsp,
-       NULL, /*btrc_ct_playerapplicationsetting_callback*/
-       cb_avrcp_ct_btrc_playerapplicationsetting_changed,
-       NULL, /*btrc_ct_setabsvol_cmd_callback*/
-       NULL, /*btrc_ct_registernotification_abs_vol_callback*/
-       cb_avrcp_ct_trak_info_chnaged,
-       cb_avrcp_ct_btrc_play_position_changed,
-       cb_avrcp_ct_btrc_play_status_changed,
-       NULL, /*btrc_ct_get_folder_items_callback*/
-       NULL, /*btrc_ct_change_path_callback*/
-       NULL, /*btrc_ct_set_browsed_player_callback*/
-       NULL /*btrc_ct_set_addressed_player_callback*/
+       .size = sizeof(avrcp_ct_cb),
+       .passthrough_rsp_cb = cb_avrcp_ct_btrc_passthrough_rsp,
+       .groupnavigation_rsp_cb = NULL,
+       .connection_state_cb = cb_avrcp_ct_connection_state,
+       .getrcfeatures_cb = NULL,
+       .setplayerappsetting_rsp_cb = cb_avrcp_ct_btrc_setplayerapplicationsetting_rsp,
+       .playerapplicationsetting_cb = NULL,
+       .playerapplicationsetting_changed_cb = cb_avrcp_ct_btrc_playerapplicationsetting_changed,
+       .setabsvol_cmd_cb = NULL,
+       .registernotification_absvol_cb = NULL,
+       .track_changed_cb = cb_avrcp_ct_trak_info_chnaged,
+       .play_position_changed_cb = cb_avrcp_ct_btrc_play_position_changed,
+       .play_status_changed_cb = cb_avrcp_ct_btrc_play_status_changed,
+       .get_folder_items_cb = NULL,
+       .change_folder_path_cb = NULL,
+       .set_browsed_player_cb = NULL,
+       .set_addressed_player_cb = NULL
 };
 
 static void __add_device_to_avrcp_list(bt_address_t *address)
@@ -420,6 +419,7 @@ static void cb_avrcp_ct_btrc_playerapplicationsetting_changed(
                        break;
                default:
                        event = OAL_EVENT_END;
+                       g_free(event_data);
                        break;
                }
 
@@ -500,6 +500,7 @@ static void cb_avrcp_ct_btrc_passthrough_rsp(bt_bdaddr_t *bd_addr, int id, int s
                                event_data, sizeof(avrcp_ct_pass_cmd_t));
        } else {
                BT_ERR("Invalid pass through command key code");
+               g_free(event_data);
        }
 }
 
@@ -564,8 +565,6 @@ static void cb_avrcp_ct_trak_info_chnaged(bt_bdaddr_t *device_address,
                                track_info->total_track = g_ascii_strtoll(
                                                (const gchar *)p_attrs[idx].text, NULL, 10);
                                event_data->total_track = track_info->total_track;
-                       } else {
-                               BT_WARN("string is null!!!!!!!");
                        }
                        break;
                case BTRC_MEDIA_ATTR_ID_TRACK_NUM:
@@ -573,18 +572,12 @@ static void cb_avrcp_ct_trak_info_chnaged(bt_bdaddr_t *device_address,
                                track_info->track_number = g_ascii_strtoll(
                                                (const gchar *)p_attrs[idx].text, NULL, 10);
                                event_data->track_number = track_info->track_number;
-                       } else {
-                               BT_WARN("string is null!!!!!!!");
                        }
                        break;
                case BTRC_MEDIA_ATTR_ID_PLAYING_TIME:
-                       if (p_attrs[idx].text != NULL) {
                                track_info->playing_time = g_ascii_strtoll(
                                                (const gchar *)p_attrs[idx].text, NULL, 10);
-                               event_data->playing_time = track_info->playing_time;
-                       } else {
-                               BT_WARN("string is null!!!!!!!");
-                       }
+                               event_data->playing_time = (uint64_t) track_info->playing_time;
                        break;
                default:
                        break;
@@ -678,6 +671,30 @@ oal_status_t avrcp_ct_prev_track(bt_address_t *device_address)
        return result;
 }
 
+oal_status_t avrcp_ct_volume_up(bt_address_t *device_address)
+{
+       oal_status_t result = OAL_STATUS_SUCCESS;
+
+       API_TRACE();
+
+       result = __avrcp_ct_send_pass_through_cmd(device_address,
+                       OAL_RC_PASS_CMD_VOLUME_UP, PRESS_STATE);
+
+       return result;
+}
+
+oal_status_t avrcp_ct_volume_down(bt_address_t *device_address)
+{
+       oal_status_t result = OAL_STATUS_SUCCESS;
+
+       API_TRACE();
+
+       result = __avrcp_ct_send_pass_through_cmd(device_address,
+                       OAL_RC_PASS_CMD_VOLUME_DOWN, PRESS_STATE);
+
+       return result;
+}
+
 oal_status_t avrcp_ct_fforward(bt_address_t *device_address, avrcp_ct_pass_state_t press_state)
 {
        oal_status_t result = OAL_STATUS_SUCCESS;
@@ -773,6 +790,30 @@ oal_status_t avrcp_ct_set_property(bt_address_t *device_address, avrcp_ct_player
        return result;
 }
 
+oal_status_t avrcp_transport_set_property(bt_address_t *device_address, int type, unsigned int value)
+{
+       int result = OAL_STATUS_SUCCESS;
+       bt_status_t status;
+       bdstr_t bdstr;
+
+       API_TRACE();
+
+       CHECK_OAL_AVRCP_CTRL_ENABLED();
+       BT_INFO("BT Audio Address: %s", bdt_bd2str(device_address, &bdstr));
+
+       if (type) {
+               status = avrcp_ct_interface->set_transport_setting_cmd((bt_bdaddr_t *)device_address, NO_OF_ATTRIBUTE,
+                               &type, &value);
+               if ((status != BT_STATUS_SUCCESS) && (status != BT_STATUS_DONE)) {
+                       BT_ERR("OAL, Set property failed err: %s", status2string(status));
+                       result =  convert_to_oal_status(status);
+               }
+       } else {
+               result = OAL_STATUS_INTERNAL_ERROR;
+       }
+       return result;
+}
+
 static gboolean __send_avrcp_property_event(gpointer data)
 {
        avrcp_ct_property_value_t *event_data = (avrcp_ct_property_value_t *)data;
@@ -822,6 +863,7 @@ oal_status_t avrcp_ct_get_property(bt_address_t *device_address, avrcp_ct_player
                break;
        default:
                BT_ERR("Invalid Type [%d]", type);
+               g_free(event_data);
                return OAL_STATUS_INVALID_PARAM;
        }
 
@@ -923,7 +965,7 @@ oal_status_t avrcp_ct_get_media_attribute(bt_address_t *device_address)
                                MEDIA_ATTIRBUTE_STRING_LENGTH);
        g_strlcpy((char *)event_data->artist_info, (const char *)track_info->artist_info,
                                MEDIA_ATTIRBUTE_STRING_LENGTH);
-       event_data->playing_time = track_info->playing_time;
+       event_data->playing_time = (uint64_t)track_info->playing_time;
        event_data->total_track = track_info->total_track;
        event_data->track_number = track_info->track_number;