#include "avctp.h"
#include "avrcp.h"
#include "control.h"
+#include "media.h"
#include "player.h"
#include "transport.h"
if (pending->pdu_id != pdu->params[0])
goto err;
-
len = 0;
pending->attr_ids = player_fill_media_attribute(player,
pending->attr_ids,
player = g_slist_nth_data(server->players, 0);
if (player != NULL) {
+ int8_t init_volume;
target->player = player;
player->sessions = g_slist_prepend(player->sessions, session);
+
+ init_volume = media_player_get_device_volume(session->dev);
+ media_transport_update_device_volume(session->dev, init_volume);
}
session->supported_events |= (1 << AVRCP_EVENT_STATUS_CHANGED) |
avrcp_handle_set_volume, session);
}
+struct avrcp_player *avrcp_get_target_player_by_device(struct btd_device *dev)
+{
+ struct avrcp_server *server;
+ struct avrcp *session;
+ struct avrcp_data *target;
+
+ server = find_server(servers, device_get_adapter(dev));
+ if (server == NULL)
+ return NULL;
+
+ session = find_session(server->sessions, dev);
+ if (session == NULL)
+ return NULL;
+
+ target = session->target;
+ if (target == NULL)
+ return NULL;
+
+ return target->player;
+}
+
#ifdef TIZEN_FEATURE_BLUEZ_MODIFY
int avrcp_get_target_volume(struct btd_device *dev, uint8_t* volume)
{
media_endpoint_remove(endpoint);
}
+static struct media_adapter *find_adapter(struct btd_device *device)
+{
+ GSList *l;
+
+ for (l = adapters; l; l = l->next) {
+ struct media_adapter *adapter = l->data;
+
+ if (adapter->btd_adapter == device_get_adapter(device))
+ return adapter;
+ }
+
+ return NULL;
+}
+
static void clear_configuration(struct media_endpoint *endpoint,
struct media_transport *transport)
{
a2dp_endpoint_config_t cb;
};
+int8_t media_player_get_device_volume(struct btd_device *device)
+{
+ struct avrcp_player *target_player;
+ struct media_adapter *adapter;
+ GSList *l;
+
+ if (!device)
+ return -1;
+
+ target_player = avrcp_get_target_player_by_device(device);
+ if (!target_player)
+ return -1;
+
+ adapter = find_adapter(device);
+ if (!adapter)
+ return -1;
+
+ for (l = adapter->players; l; l = l->next) {
+ struct media_player *mp = l->data;
+
+ if (mp->player == target_player)
+ return mp->volume;
+ }
+
+ return -1;
+}
+
static gboolean set_configuration(struct media_endpoint *endpoint,
uint8_t *configuration, size_t size,
media_endpoint_cb_t cb,
const char *path;
DBusMessageIter iter;
struct media_transport *transport;
+ int8_t init_volume;
#ifdef TIZEN_FEATURE_BLUEZ_MODIFY
struct media_adapter *adapter;
struct media_player *mp;
if (transport == NULL)
return FALSE;
+ init_volume = media_player_get_device_volume(device);
+ media_transport_update_volume(transport, init_volume);
+
msg = dbus_message_new_method_call(endpoint->sender, endpoint->path,
MEDIA_ENDPOINT_INTERFACE,
"SetConfiguration");
return TRUE;
}
-static struct media_adapter *find_adapter(struct btd_device *device)
-{
- GSList *l;
-
- for (l = adapters; l; l = l->next) {
- struct media_adapter *adapter = l->data;
-
- if (adapter->btd_adapter == device_get_adapter(device))
- return adapter;
- }
-
- return NULL;
-}
-
static bool endpoint_properties_exists(const char *uuid,
struct btd_device *dev,
void *user_data)
mp->sender = g_strdup(sender);
mp->path = g_strdup(path);
mp->timer = g_timer_new();
+ mp->volume = -1;
mp->watch = g_dbus_add_disconnect_watch(conn, sender,
media_player_exit, mp,