diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-05-19 12:41:54 +0300 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-05-19 16:12:47 +0300 |
commit | 49e49b00dc6b15952118eef29f5f2c14bc5712c8 (patch) | |
tree | 295c2fa9af24d122122d90c8d2697a64ae90fe68 /android/avrcp-lib.c | |
parent | 86a7a090e4692756a6c8adee658de4acdb2e7f9a (diff) | |
download | bluez-49e49b00dc6b15952118eef29f5f2c14bc5712c8.tar.gz |
android/avrcp-lib: Add support for SetAbsoluteVolume PDU
Diffstat (limited to 'android/avrcp-lib.c')
-rw-r--r-- | android/avrcp-lib.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c index 7aeab434d..036867ecf 100644 --- a/android/avrcp-lib.c +++ b/android/avrcp-lib.c @@ -709,6 +709,27 @@ static ssize_t register_notification(struct avrcp *session, uint8_t transaction, player->user_data); } +static ssize_t set_volume(struct avrcp *session, uint8_t transaction, + uint16_t params_len, uint8_t *params, + void *user_data) +{ + struct avrcp_player *player = user_data; + uint8_t volume; + + DBG(""); + + if (!player->ind || !player->ind->set_volume) + return -ENOSYS; + + if (!params || params_len != sizeof(volume)) + return -EINVAL; + + volume = params[0] & 0x7f; + + return player->ind->set_volume(session, transaction, volume, + player->user_data); +} + static ssize_t set_addressed(struct avrcp *session, uint8_t transaction, uint16_t params_len, uint8_t *params, void *user_data) @@ -761,6 +782,9 @@ static const struct avrcp_control_handler player_handlers[] = { { AVRCP_REGISTER_NOTIFICATION, AVC_CTYPE_NOTIFY, AVC_CTYPE_INTERIM, register_notification }, + { AVRCP_SET_ABSOLUTE_VOLUME, + AVC_CTYPE_CONTROL, AVC_CTYPE_STABLE, + set_volume }, { AVRCP_SET_ADDRESSED_PLAYER, AVC_CTYPE_CONTROL, AVC_CTYPE_STABLE, set_addressed }, @@ -2705,6 +2729,22 @@ int avrcp_register_notification_rsp(struct avrcp *session, uint8_t transaction, &iov, 1); } +int avrcp_set_volume_rsp(struct avrcp *session, uint8_t transaction, + uint8_t volume) +{ + struct iovec iov; + + if (volume > 127) + return -EINVAL; + + iov.iov_base = &volume; + iov.iov_len = sizeof(volume); + + return avrcp_send(session, transaction, AVC_CTYPE_STABLE, + AVC_SUBUNIT_PANEL, AVRCP_SET_ABSOLUTE_VOLUME, + &iov, 1); +} + int avrcp_set_addressed_player_rsp(struct avrcp *session, uint8_t transaction, uint8_t status) { |