* [PATCH BlueZ 2/8] player: Remove GetTrack and TrackChanged
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 3/8] player: Add support for button controls Luiz Augusto von Dentz
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This turn track metadata into a property called "Track" of MediaPlayer1
---
profiles/audio/player.c | 83 +++++++++++++++----------------------------------
1 file changed, 25 insertions(+), 58 deletions(-)
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 8748893..ae6b19b 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -82,33 +82,6 @@ static void append_metadata(void *key, void *value, void *user_data)
dict_append_entry(dict, key, DBUS_TYPE_STRING, &value);
}
-static DBusMessage *media_player_get_track(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- struct media_player *mp = data;
- DBusMessage *reply;
- DBusMessageIter iter, dict;
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_iter_init_append(reply, &iter);
-
- dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
- DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_VARIANT_AS_STRING
- DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
- &dict);
-
- g_hash_table_foreach(mp->track, append_metadata, &dict);
-
- dbus_message_iter_close_container(&iter, &dict);
-
- return reply;
-}
-
static struct pending_req *find_pending(struct media_player *mp,
const char *key)
{
@@ -246,16 +219,31 @@ static void set_setting(const GDBusPropertyTable *property,
player_set_setting(mp, id, property->name, value);
}
+static gboolean get_track(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct media_player *mp = data;
+ DBusMessageIter dict;
+
+ dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
+ DBUS_TYPE_STRING_AS_STRING
+ DBUS_TYPE_VARIANT_AS_STRING
+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
+ &dict);
+
+ g_hash_table_foreach(mp->track, append_metadata, &dict);
+
+ dbus_message_iter_close_container(iter, &dict);
+
+ return TRUE;
+}
+
static const GDBusMethodTable media_player_methods[] = {
- { GDBUS_EXPERIMENTAL_METHOD("GetTrack",
- NULL, GDBUS_ARGS({ "metadata", "a{sv}" }),
- media_player_get_track) },
{ }
};
static const GDBusSignalTable media_player_signals[] = {
- { GDBUS_EXPERIMENTAL_SIGNAL("TrackChanged",
- GDBUS_ARGS({ "metadata", "a{sv}" })) },
{ }
};
@@ -272,6 +260,8 @@ static const GDBusPropertyTable media_player_properties[] = {
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
{ "Scan", "s", get_setting, set_setting, setting_exists,
G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
+ { "Track", "a{sv}", get_track, NULL, NULL,
+ G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
{ }
};
@@ -424,33 +414,10 @@ void media_player_set_status(struct media_player *mp, const char *status)
static gboolean process_metadata_changed(void *user_data)
{
struct media_player *mp = user_data;
- DBusMessage *signal;
- DBusMessageIter iter, dict;
-
- mp->process_id = 0;
-
- signal = dbus_message_new_signal(mp->path, MEDIA_PLAYER_INTERFACE,
- "TrackChanged");
- if (signal == NULL) {
- error("Unable to allocate TrackChanged signal");
- return FALSE;
- }
- dbus_message_iter_init_append(signal, &iter);
-
- dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
- DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
- DBUS_TYPE_STRING_AS_STRING
- DBUS_TYPE_VARIANT_AS_STRING
- DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
- &dict);
-
-
- g_hash_table_foreach(mp->track, append_metadata, &dict);
-
- dbus_message_iter_close_container(&iter, &dict);
-
- g_dbus_send_message(btd_get_dbus_connection(), signal);
+ g_dbus_emit_property_changed(btd_get_dbus_connection(),
+ mp->path, MEDIA_PLAYER_INTERFACE,
+ "Track");
return FALSE;
}
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 3/8] player: Add support for button controls
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 2/8] player: Remove GetTrack and TrackChanged Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 4/8] player: Fix documentation to use TrackNumber in track metadata Luiz Augusto von Dentz
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds support for buttons controls in MediaPlayer1
---
profiles/audio/avrcp.c | 91 ++++++++++++++++++++++++++-
profiles/audio/player.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++++
profiles/audio/player.h | 9 +++
3 files changed, 261 insertions(+), 1 deletion(-)
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index ce070cd..7b7c2ef 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -1965,8 +1965,96 @@ static bool ct_set_setting(struct media_player *mp, const char *key,
return true;
}
+static int ct_press(struct avrcp_player *player, uint8_t op)
+{
+ int err;
+ struct avrcp *session;
+
+ session = player->sessions->data;
+ if (session == NULL)
+ return -ENOTCONN;
+
+ err = avctp_send_passthrough(session->conn, op);
+ if (err < 0)
+ return err;
+
+ return 0;
+}
+
+static int ct_play(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_PLAY);
+}
+
+static int ct_pause(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_PAUSE);
+}
+
+static int ct_stop(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_STOP);
+}
+
+static int ct_next(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_FORWARD);
+}
+
+static int ct_previous(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_BACKWARD);
+}
+
+static int ct_fast_forward(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_FAST_FORWARD);
+}
+
+static int ct_rewind(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_REWIND);
+}
+
+static int ct_volume_up(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_VOLUME_UP);
+}
+
+static int ct_volume_down(struct media_player *mp, void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ return ct_press(player, AVC_VOLUME_DOWN);
+}
+
static const struct media_player_callback ct_cbs = {
- .set_setting = ct_set_setting,
+ .set_setting = ct_set_setting,
+ .play = ct_play,
+ .pause = ct_pause,
+ .stop = ct_stop,
+ .next = ct_next,
+ .previous = ct_previous,
+ .fast_forward = ct_fast_forward,
+ .rewind = ct_rewind,
+ .volume_up = ct_volume_up,
+ .volume_down = ct_volume_down,
};
static gboolean avrcp_get_capabilities_resp(struct avctp *conn,
@@ -1988,6 +2076,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn,
count = pdu->params[1];
path = device_get_path(session->dev->btd_dev);
+
mp = media_player_controller_create(path);
if (mp == NULL)
return FALSE;
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index ae6b19b..01086d0 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -239,7 +239,169 @@ static gboolean get_track(const GDBusPropertyTable *property,
return TRUE;
}
+static DBusMessage *media_player_play(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->play == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->play(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_pause(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->pause == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->pause(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_stop(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->stop == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->stop(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_next(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->next == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->next(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_previous(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->previous == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->previous(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_fast_forward(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->fast_forward == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->fast_forward(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_rewind(DBusConnection *conn, DBusMessage *msg,
+ void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->rewind == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->rewind(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_volume_up(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->volume_up == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->volume_up(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *media_player_volume_down(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ struct media_player *mp = data;
+ struct player_callback *cb = mp->cb;
+ int err;
+
+ if (cb->cbs->volume_down == NULL)
+ return btd_error_not_supported(msg);
+
+ err = cb->cbs->volume_down(mp, cb->user_data);
+ if (err < 0)
+ return btd_error_failed(msg, strerror(-err));
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
static const GDBusMethodTable media_player_methods[] = {
+ { GDBUS_METHOD("Play", NULL, NULL, media_player_play) },
+ { GDBUS_METHOD("Pause", NULL, NULL, media_player_pause) },
+ { GDBUS_METHOD("Stop", NULL, NULL, media_player_stop) },
+ { GDBUS_METHOD("Next", NULL, NULL, media_player_next) },
+ { GDBUS_METHOD("Previous", NULL, NULL, media_player_previous) },
+ { GDBUS_METHOD("FastForward", NULL, NULL, media_player_fast_forward) },
+ { GDBUS_METHOD("Rewind", NULL, NULL, media_player_rewind) },
+ { GDBUS_METHOD("VolumeUp", NULL, NULL, media_player_volume_up) },
+ { GDBUS_METHOD("VolumeDown", NULL, NULL, media_player_volume_down) },
{ }
};
diff --git a/profiles/audio/player.h b/profiles/audio/player.h
index 87dfb66..4b92b30 100644
--- a/profiles/audio/player.h
+++ b/profiles/audio/player.h
@@ -28,6 +28,15 @@ struct media_player;
struct media_player_callback {
bool (*set_setting) (struct media_player *mp, const char *key,
const char *value, void *user_data);
+ int (*play) (struct media_player *mp, void *user_data);
+ int (*pause) (struct media_player *mp, void *user_data);
+ int (*stop) (struct media_player *mp, void *user_data);
+ int (*next) (struct media_player *mp, void *user_data);
+ int (*previous) (struct media_player *mp, void *user_data);
+ int (*fast_forward) (struct media_player *mp, void *user_data);
+ int (*rewind) (struct media_player *mp, void *user_data);
+ int (*volume_up) (struct media_player *mp, void *user_data);
+ int (*volume_down) (struct media_player *mp, void *user_data);
};
struct media_player *media_player_controller_create(const char *path);
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 4/8] player: Fix documentation to use TrackNumber in track metadata
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 2/8] player: Remove GetTrack and TrackChanged Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 3/8] player: Add support for button controls Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 5/8] AVRCP: Always create a controller player even for version 1.0 Luiz Augusto von Dentz
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Using Track key inside a Track property would be pointless, despite the
documentation and code where also inconsistent.
---
doc/media-api.txt | 2 +-
profiles/audio/avrcp.c | 2 +-
profiles/audio/player.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/media-api.txt b/doc/media-api.txt
index eb1f74f..5a6b68c 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -280,7 +280,7 @@ Properties string Equalizer [readwrite]
Number of tracks in total
- uint32 Number:
+ uint32 TrackNumber:
Track number
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 7b7c2ef..99741e8 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -649,7 +649,7 @@ static const char *metadata_to_str(uint32_t id)
case AVRCP_MEDIA_ATTRIBUTE_GENRE:
return "Genre";
case AVRCP_MEDIA_ATTRIBUTE_TRACK:
- return "Track";
+ return "TrackNumber";
case AVRCP_MEDIA_ATTRIBUTE_N_TRACKS:
return "NumberOfTracks";
case AVRCP_MEDIA_ATTRIBUTE_DURATION:
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 01086d0..62c08c9 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -72,7 +72,7 @@ static void append_metadata(void *key, void *value, void *user_data)
DBusMessageIter *dict = user_data;
if (strcasecmp((char *) key, "Duration") == 0 ||
- strcasecmp((char *) key, "Track") == 0 ||
+ strcasecmp((char *) key, "TrackNumber") == 0 ||
strcasecmp((char *) key, "NumberOfTracks") == 0) {
uint32_t num = atoi(value);
dict_append_entry(dict, key, DBUS_TYPE_UINT32, &num);
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 5/8] AVRCP: Always create a controller player even for version 1.0
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
` (2 preceding siblings ...)
2013-01-03 19:46 ` [PATCH BlueZ 4/8] player: Fix documentation to use TrackNumber in track metadata Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 6/8] control: Mark all members of MediaControl1 as deprecated Luiz Augusto von Dentz
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Since the buttons controls are now part of the MediaPlayer1 it can be used
even with AVRCP version 1.0.
---
profiles/audio/avrcp.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 99741e8..74ef3ea 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -1952,6 +1952,9 @@ static bool ct_set_setting(struct media_player *mp, const char *key,
if (session == NULL)
return false;
+ if (session->version < 0x0103)
+ return false;
+
attr = attr_to_val(key);
if (attr < 0)
return false;
@@ -2063,24 +2066,15 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn,
void *user_data)
{
struct avrcp *session = user_data;
- struct avrcp_player *player = session->player;
- struct media_player *mp;
struct avrcp_header *pdu = (void *) operands;
uint16_t events = 0;
uint8_t count;
- const char *path;
if (pdu->params[0] != CAP_EVENTS_SUPPORTED)
return FALSE;
count = pdu->params[1];
- path = device_get_path(session->dev->btd_dev);
-
- mp = media_player_controller_create(path);
- if (mp == NULL)
- return FALSE;
-
for (; count > 0; count--) {
uint8_t event = pdu->params[1 + count];
@@ -2095,10 +2089,6 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn,
}
}
- media_player_set_callbacks(mp, &ct_cbs, player);
- player->user_data = mp;
- player->destroy = (GDestroyNotify) media_player_destroy;
-
if (!(events & (1 << AVRCP_EVENT_SETTINGS_CHANGED)))
avrcp_list_player_attributes(session);
@@ -2185,6 +2175,8 @@ static void session_tg_init(struct avrcp *session)
static void session_ct_init(struct avrcp *session)
{
struct avrcp_player *player;
+ struct media_player *mp;
+ const char *path;
session->control_handlers = ct_control_handlers;
@@ -2195,13 +2187,22 @@ static void session_ct_init(struct avrcp *session)
handle_vendordep_pdu,
session);
- if (session->version < 0x0103)
- return;
-
player = g_new0(struct avrcp_player, 1);
player->sessions = g_slist_prepend(player->sessions, session);
session->player = player;
+ path = device_get_path(session->dev->btd_dev);
+
+ mp = media_player_controller_create(path);
+ if (mp != NULL) {
+ media_player_set_callbacks(mp, &ct_cbs, player);
+ player->user_data = mp;
+ player->destroy = (GDestroyNotify) media_player_destroy;
+ }
+
+ if (session->version < 0x0103)
+ return;
+
avrcp_get_capabilities(session);
}
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 6/8] control: Mark all members of MediaControl1 as deprecated
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
` (3 preceding siblings ...)
2013-01-03 19:46 ` [PATCH BlueZ 5/8] AVRCP: Always create a controller player even for version 1.0 Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 7/8] player: Remove experimental flag from MediaPlayer1 Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 8/8] gdbus: Fix introspection data for deprecated properties Luiz Augusto von Dentz
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
profiles/audio/control.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/profiles/audio/control.c b/profiles/audio/control.c
index 642fdd5..70faab8 100644
--- a/profiles/audio/control.c
+++ b/profiles/audio/control.c
@@ -222,20 +222,23 @@ static gboolean control_property_get_connected(
}
static const GDBusMethodTable control_methods[] = {
- { GDBUS_METHOD("Play", NULL, NULL, control_play) },
- { GDBUS_METHOD("Pause", NULL, NULL, control_pause) },
- { GDBUS_METHOD("Stop", NULL, NULL, control_stop) },
- { GDBUS_METHOD("Next", NULL, NULL, control_next) },
- { GDBUS_METHOD("Previous", NULL, NULL, control_previous) },
- { GDBUS_METHOD("VolumeUp", NULL, NULL, control_volume_up) },
- { GDBUS_METHOD("VolumeDown", NULL, NULL, control_volume_down) },
- { GDBUS_METHOD("FastForward", NULL, NULL, control_fast_forward) },
- { GDBUS_METHOD("Rewind", NULL, NULL, control_rewind) },
+ { GDBUS_DEPRECATED_METHOD("Play", NULL, NULL, control_play) },
+ { GDBUS_DEPRECATED_METHOD("Pause", NULL, NULL, control_pause) },
+ { GDBUS_DEPRECATED_METHOD("Stop", NULL, NULL, control_stop) },
+ { GDBUS_DEPRECATED_METHOD("Next", NULL, NULL, control_next) },
+ { GDBUS_DEPRECATED_METHOD("Previous", NULL, NULL, control_previous) },
+ { GDBUS_DEPRECATED_METHOD("VolumeUp", NULL, NULL, control_volume_up) },
+ { GDBUS_DEPRECATED_METHOD("VolumeDown", NULL, NULL,
+ control_volume_down) },
+ { GDBUS_DEPRECATED_METHOD("FastForward", NULL, NULL,
+ control_fast_forward) },
+ { GDBUS_DEPRECATED_METHOD("Rewind", NULL, NULL, control_rewind) },
{ }
};
static const GDBusPropertyTable control_properties[] = {
- { "Connected", "b", control_property_get_connected },
+ { "Connected", "b", control_property_get_connected, NULL, NULL,
+ G_DBUS_PROPERTY_FLAG_DEPRECATED },
{ }
};
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 7/8] player: Remove experimental flag from MediaPlayer1
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
` (4 preceding siblings ...)
2013-01-03 19:46 ` [PATCH BlueZ 6/8] control: Mark all members of MediaControl1 as deprecated Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
2013-01-03 19:46 ` [PATCH BlueZ 8/8] gdbus: Fix introspection data for deprecated properties Luiz Augusto von Dentz
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
doc/media-api.txt | 2 +-
profiles/audio/player.c | 21 +++++++--------------
2 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/doc/media-api.txt b/doc/media-api.txt
index 5a6b68c..12a2d7a 100644
--- a/doc/media-api.txt
+++ b/doc/media-api.txt
@@ -179,7 +179,7 @@ MediaPlayer1 hierarchy
======================
Service org.bluez (Controller role)
-Interface org.bluez.MediaPlayer1 [Experimental]
+Interface org.bluez.MediaPlayer1
Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/playerX
Methods void Play()
diff --git a/profiles/audio/player.c b/profiles/audio/player.c
index 62c08c9..5a6d69f 100644
--- a/profiles/audio/player.c
+++ b/profiles/audio/player.c
@@ -410,20 +410,13 @@ static const GDBusSignalTable media_player_signals[] = {
};
static const GDBusPropertyTable media_player_properties[] = {
- { "Position", "u", get_position, NULL, NULL,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Status", "s", get_status, NULL, status_exists,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Equalizer", "s", get_setting, set_setting, setting_exists,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Repeat", "s", get_setting, set_setting, setting_exists,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Shuffle", "s", get_setting, set_setting, setting_exists,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Scan", "s", get_setting, set_setting, setting_exists,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
- { "Track", "a{sv}", get_track, NULL, NULL,
- G_DBUS_PROPERTY_FLAG_EXPERIMENTAL },
+ { "Position", "u", get_position, NULL, NULL },
+ { "Status", "s", get_status, NULL, status_exists },
+ { "Equalizer", "s", get_setting, set_setting, setting_exists },
+ { "Repeat", "s", get_setting, set_setting, setting_exists },
+ { "Shuffle", "s", get_setting, set_setting, setting_exists },
+ { "Scan", "s", get_setting, set_setting, setting_exists },
+ { "Track", "a{sv}", get_track, NULL, NULL },
{ }
};
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH BlueZ 8/8] gdbus: Fix introspection data for deprecated properties
2013-01-03 19:46 [PATCH BlueZ 1/8] media-api: Add playback control methods to MediaPlayer1 Luiz Augusto von Dentz
` (5 preceding siblings ...)
2013-01-03 19:46 ` [PATCH BlueZ 7/8] player: Remove experimental flag from MediaPlayer1 Luiz Augusto von Dentz
@ 2013-01-03 19:46 ` Luiz Augusto von Dentz
6 siblings, 0 replies; 8+ messages in thread
From: Luiz Augusto von Dentz @ 2013-01-03 19:46 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fix missing </property> when generating introspection xml of deprecated
properties.
---
gdbus/object.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gdbus/object.c b/gdbus/object.c
index b9cb284..729557b 100644
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -210,9 +210,12 @@ static void generate_interface_xml(GString *gstr, struct interface_data *iface)
if (!deprecated)
g_string_append_printf(gstr, "/>\n");
- else
+ else {
g_string_append_printf(gstr,
G_DBUS_ANNOTATE_DEPRECATED(">\n\t\t\t"));
+
+ g_string_append_printf(gstr, "\t\t</property>\n");
+ }
}
}
--
1.8.0.1
^ permalink raw reply related [flat|nested] 8+ messages in thread