/*
 *
 *  BlueZ - Bluetooth protocol stack for Linux
 *
 *  Copyright (C) 2014  Intel Corporation. All rights reserved.
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <inttypes.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>

#include <glib.h>

#include "src/shared/util.h"
#include "src/shared/tester.h"
#include "src/log.h"
#include "lib/bluetooth.h"

#include "android/avctp.h"
#include "android/avrcp-lib.h"

struct test_pdu {
	bool valid;
	bool fragmented;
	bool continuing;
	bool browse;
	const uint8_t *data;
	size_t size;
};

struct test_data {
	char *test_name;
	struct test_pdu *pdu_list;
};

struct context {
	struct avrcp *session;
	guint source;
	guint browse_source;
	guint process;
	int fd;
	int browse_fd;
	unsigned int pdu_offset;
	const struct test_data *data;
};

#define data(args...) ((const unsigned char[]) { args })

#define raw_pdu(args...)					\
	{							\
		.valid = true,					\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define brs_pdu(args...)					\
	{							\
		.valid = true,					\
		.browse = true,					\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define frg_pdu(args...)					\
	{							\
		.valid = true,					\
		.fragmented = true,				\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define cont_pdu(args...)					\
	{							\
		.valid = true,					\
		.continuing = true,				\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define define_test(name, function, args...)				\
	do {								\
		const struct test_pdu pdus[] = {			\
			args, { }					\
		};							\
		static struct test_data data;				\
		data.test_name = g_strdup(name);			\
		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
		tester_add(name, &data, NULL, function, NULL);		\
	} while (0)

static void test_debug(const char *str, void *user_data)
{
	const char *prefix = user_data;

	tester_debug("%s%s", prefix, str);
}

static void test_free(gconstpointer user_data)
{
	const struct test_data *data = user_data;

	g_free(data->test_name);
	g_free(data->pdu_list);
}

static void destroy_context(struct context *context)
{
	if (context->source > 0)
		g_source_remove(context->source);

	if (context->browse_source > 0)
		g_source_remove(context->browse_source);

	avrcp_shutdown(context->session);

	test_free(context->data);
	g_free(context);
}

static gboolean context_quit(gpointer user_data)
{
	struct context *context = user_data;

	if (context->process > 0)
		g_source_remove(context->process);

	destroy_context(context);

	tester_test_passed();

	return FALSE;
}

static gboolean send_pdu(gpointer user_data)
{
	struct context *context = user_data;
	const struct test_pdu *pdu;
	ssize_t len;

	pdu = &context->data->pdu_list[context->pdu_offset++];

	if (pdu->browse)
		len = write(context->browse_fd, pdu->data, pdu->size);
	else
		len = write(context->fd, pdu->data, pdu->size);

	util_hexdump('<', pdu->data, len, test_debug, "AVRCP: ");

	g_assert_cmpint(len, ==, pdu->size);

	if (pdu->fragmented)
		return send_pdu(user_data);

	context->process = 0;
	return FALSE;
}

static void context_process(struct context *context)
{
	if (!context->data->pdu_list[context->pdu_offset].valid) {
		context_quit(context);
		return;
	}

	context->process = g_idle_add(send_pdu, context);
}

static gboolean test_handler(GIOChannel *channel, GIOCondition cond,
							gpointer user_data)
{
	struct context *context = user_data;
	const struct test_pdu *pdu;
	unsigned char buf[512];
	ssize_t len;
	int fd;

	pdu = &context->data->pdu_list[context->pdu_offset++];

	g_assert(!pdu->browse);

	if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) {
		context->source = 0;
		tester_debug("%s: cond %x\n", __func__, cond);
		return FALSE;
	}

	fd = g_io_channel_unix_get_fd(channel);

	len = read(fd, buf, sizeof(buf));

	g_assert(len > 0);

	if (g_test_verbose())
		util_hexdump('>', buf, len, test_debug, "AVRCP: ");

	if (!pdu->continuing)
		g_assert_cmpint(len, ==, pdu->size);

	g_assert(memcmp(buf, pdu->data, pdu->size) == 0);

	if (!pdu->fragmented)
		context_process(context);

	return TRUE;
}

static gboolean browse_test_handler(GIOChannel *channel, GIOCondition cond,
							gpointer user_data)
{
	struct context *context = user_data;
	const struct test_pdu *pdu;
	unsigned char buf[512];
	ssize_t len;
	int fd;

	pdu = &context->data->pdu_list[context->pdu_offset++];

	g_assert(pdu->browse);

	if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) {
		context->browse_source = 0;
		tester_debug("%s: cond %x\n", __func__, cond);
		return FALSE;
	}

	fd = g_io_channel_unix_get_fd(channel);

	len = read(fd, buf, sizeof(buf));

	g_assert(len > 0);

	util_hexdump('>', buf, len, test_debug, "AVRCP: ");

	g_assert_cmpint(len, ==, pdu->size);

	g_assert(memcmp(buf, pdu->data, pdu->size) == 0);

	if (!pdu->fragmented)
		context_process(context);

	return TRUE;
}

static struct context *create_context(uint16_t version, gconstpointer data)
{
	struct context *context = g_new0(struct context, 1);
	GIOChannel *channel;
	int err, sv[2];

	/* Control channel setup */

	err = socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sv);
	g_assert(!err);

	context->session = avrcp_new(sv[0], 672, 672, version);
	g_assert(context->session != NULL);

	channel = g_io_channel_unix_new(sv[1]);

	g_io_channel_set_close_on_unref(channel, TRUE);
	g_io_channel_set_encoding(channel, NULL, NULL);
	g_io_channel_set_buffered(channel, FALSE);

	context->source = g_io_add_watch(channel,
				G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
				test_handler, context);
	g_assert(context->source > 0);

	g_io_channel_unref(channel);

	context->fd = sv[1];

	/* Browsing channel setup */

	err = socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sv);
	g_assert(!err);

	err = avrcp_connect_browsing(context->session, sv[0], 672, 672);
	g_assert(!err);

	channel = g_io_channel_unix_new(sv[1]);

	g_io_channel_set_close_on_unref(channel, TRUE);
	g_io_channel_set_encoding(channel, NULL, NULL);
	g_io_channel_set_buffered(channel, FALSE);

	context->browse_source = g_io_add_watch(channel,
				G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
				browse_test_handler, context);
	g_assert(context->browse_source > 0);

	g_io_channel_unref(channel);

	context->browse_fd = sv[1];

	context->data = data;

	return context;
}

static void test_dummy(gconstpointer data)
{
	struct context *context =  create_context(0x0100, data);

	context_quit(context);
}

static bool handle_play(struct avrcp *session, bool pressed, void *user_data)
{
	return true;
}

static bool handle_volume_up(struct avrcp *session, bool pressed,
							void *user_data)
{
	return true;
}

static bool handle_channel_up(struct avrcp *session, bool pressed,
							void *user_data)
{
	return true;
}

static bool handle_select(struct avrcp *session, bool pressed, void *user_data)
{
	return true;
}

static bool handle_vendor_uniq(struct avrcp *session, bool pressed,
								void *user_data)
{
	return true;
}

static const struct avrcp_passthrough_handler passthrough_handlers[] = {
		{ AVC_PLAY, handle_play },
		{ AVC_VOLUME_UP, handle_volume_up },
		{ AVC_CHANNEL_UP, handle_channel_up },
		{ AVC_SELECT, handle_select },
		{ AVC_VENDOR_UNIQUE, handle_vendor_uniq },
		{ },
};

static int get_capabilities(struct avrcp *session, uint8_t transaction,
							void *user_data)
{
	return -EINVAL;
}

static int list_attributes(struct avrcp *session, uint8_t transaction,
							void *user_data)
{
	avrcp_list_player_attributes_rsp(session, transaction, 0, NULL);

	return 0;
}

static int get_attribute_text(struct avrcp *session, uint8_t transaction,
					uint8_t number, uint8_t *attrs,
					void *user_data)
{
	const char *text[number];

	if (number) {
		memset(text, 0, number);
		text[0] = "equalizer";
	}

	avrcp_get_player_attribute_text_rsp(session, transaction, number, attrs,
									text);

	return 0;
}

static int list_values(struct avrcp *session, uint8_t transaction,
						uint8_t attr, void *user_data)
{
	avrcp_list_player_values_rsp(session, transaction, 0, NULL);

	return -EINVAL;
}

static int get_value_text(struct avrcp *session, uint8_t transaction,
				uint8_t attr, uint8_t number, uint8_t *values,
				void *user_data)
{
	const char *text[number];

	if (number) {
		memset(text, 0, number);
		text[0] = "on";
	}

	avrcp_get_player_values_text_rsp(session, transaction, number,
								values, text);

	return -EINVAL;
}

static int get_value(struct avrcp *session, uint8_t transaction,
			uint8_t number, uint8_t *attrs, void *user_data)
{
	uint8_t values[number];

	memset(values, 0, number);

	avrcp_get_current_player_value_rsp(session, transaction, number, attrs,
									values);

	return 0;
}

static int set_value(struct avrcp *session, uint8_t transaction,
			uint8_t number, uint8_t *attrs, uint8_t *values,
			void *user_data)
{
	avrcp_set_player_value_rsp(session, transaction);

	return 0;
}

static int get_play_status(struct avrcp *session, uint8_t transaction,
							void *user_data)
{
	avrcp_get_play_status_rsp(session, transaction, 0xaaaaaaaa, 0xbbbbbbbb,
									0x00);

	return 0;
}

static int get_element_attributes(struct avrcp *session, uint8_t transaction,
					uint64_t uid, uint8_t number,
					uint32_t *attrs, void *user_data)
{
	struct context *context = user_data;

	if (g_str_has_prefix(context->data->test_name, "/TP/RCR")) {
		uint8_t params[1024];

		memset(params, 0x00, sizeof(params) / 2);
		memset(params + (sizeof(params) / 2), 0xff, sizeof(params) / 2);

		avrcp_get_element_attrs_rsp(session, transaction, params,
							sizeof(params));
	} else
		avrcp_get_element_attrs_rsp(session, transaction, NULL, 0);

	return 0;
}

static int track_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	struct context *context = user_data;
	uint64_t track;

	if (g_str_equal(context->data->test_name, "/TP/NFY/BV-05-C") ||
		g_str_equal(context->data->test_name, "/TP/NFY/BV-08-C"))
		memset(&track, 0, sizeof(track));
	else
		memset(&track, 0xff, sizeof(track));

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
						AVRCP_EVENT_TRACK_CHANGED,
						&track, sizeof(track));

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
						AVRCP_EVENT_TRACK_CHANGED,
						&track, sizeof(track));

	return 0;
}

static int settings_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	uint8_t settings[3];

	settings[0] = 0x01;
	settings[1] = 0x01;
	settings[2] = 0x02;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
						AVRCP_EVENT_SETTINGS_CHANGED,
						settings, sizeof(settings));

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
						AVRCP_EVENT_SETTINGS_CHANGED,
						settings, sizeof(settings));

	return 0;
}

static int available_players_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
					AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED,
					NULL, 0);

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
					AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED,
					NULL, 0);

	return 0;
}

static int addressed_player_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	uint16_t player[2];

	player[0] = 0x0001;
	player[1] = 0x0001;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
					AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED,
					player, sizeof(player));

	player[0] = 0x0200;
	player[1] = 0x0200;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
					AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED,
					player, sizeof(player));

	return 0;
}

static int uids_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	struct context *context = user_data;
	uint16_t counter;

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BV-09-C"))
		counter = 0x0000;
	else
		counter = 0x0001;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
						AVRCP_EVENT_UIDS_CHANGED,
						&counter, sizeof(counter));

	if (!g_str_equal(context->data->test_name, "/TP/MCN/CB/BV-11-C") &&
		!g_str_equal(context->data->test_name, "/TP/MCN/CB/BI-05-C"))
		return 0;

	counter = 0x0200;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
						AVRCP_EVENT_UIDS_CHANGED,
						&counter, sizeof(counter));

	return 0;
}

static int now_playing_content_changed(struct avrcp *session,
					uint8_t transaction, uint32_t interval,
					void *user_data)
{
	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
					AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED,
					NULL, 0);

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
					AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED,
					NULL, 0);

	return 0;
}

static int volume_changed(struct avrcp *session, uint8_t transaction,
					uint32_t interval, void *user_data)
{
	uint8_t volume = 0x00;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_INTERIM,
					AVRCP_EVENT_VOLUME_CHANGED,
					&volume, sizeof(volume));

	volume = 0x01;

	avrcp_register_notification_rsp(session, transaction, AVC_CTYPE_CHANGED,
					AVRCP_EVENT_VOLUME_CHANGED,
					&volume, sizeof(volume));

	return 0;
}

static int register_notification(struct avrcp *session, uint8_t transaction,
					uint8_t event, uint32_t interval,
					void *user_data)
{
	switch (event) {
	case AVRCP_EVENT_TRACK_CHANGED:
		return track_changed(session, transaction, interval, user_data);
	case AVRCP_EVENT_SETTINGS_CHANGED:
		return settings_changed(session, transaction, interval,
								user_data);
	case AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED:
		return available_players_changed(session, transaction, interval,
								user_data);
	case AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED:
		return addressed_player_changed(session, transaction, interval,
								user_data);
	case AVRCP_EVENT_UIDS_CHANGED:
		return uids_changed(session, transaction, interval, user_data);
	case AVRCP_EVENT_NOW_PLAYING_CONTENT_CHANGED:
		return now_playing_content_changed(session, transaction,
							interval, user_data);
	case AVRCP_EVENT_VOLUME_CHANGED:
		return volume_changed(session, transaction,
							interval, user_data);
	default:
		return -EINVAL;
	}
}

static int set_volume(struct avrcp *session, uint8_t transaction,
					uint8_t volume, void *user_data)
{
	avrcp_set_volume_rsp(session, transaction, volume);

	return 0;
}

static int set_addressed(struct avrcp *session, uint8_t transaction,
						uint16_t id, void *user_data)
{
	struct context *context = user_data;
	uint8_t status;

	if (g_str_equal(context->data->test_name, "/TP/MPS/BI-01-C"))
		status = AVRCP_STATUS_INVALID_PLAYER_ID;
	else
		status = AVRCP_STATUS_SUCCESS;

	avrcp_set_addressed_player_rsp(session, transaction, status);

	return 0;
}

static int set_browsed(struct avrcp *session, uint8_t transaction,
						uint16_t id, void *user_data)
{
	struct context *context = user_data;
	const char *folders[1] = { "Filesystem" };

	if (g_str_equal(context->data->test_name, "/TP/MPS/BI-02-C"))
		avrcp_set_browsed_player_rsp(session, transaction,
						AVRCP_STATUS_INVALID_PLAYER_ID,
						0, 0, 0, NULL);
	else
		avrcp_set_browsed_player_rsp(session, transaction,
						AVRCP_STATUS_SUCCESS,
						0xabcd, 0, 1, folders);

	return 0;
}

static int get_folder_items(struct avrcp *session, uint8_t transaction,
				uint8_t scope, uint32_t start, uint32_t end,
				uint16_t number, uint32_t *attrs,
				void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BI-02-C"))
		return -ERANGE;

	if (start > 1)
		return -ERANGE;

	avrcp_get_folder_items_rsp(session, transaction, AVRCP_STATUS_SUCCESS,
						0xabcd, 0, NULL, NULL, NULL);

	return 0;
}

static int change_path(struct avrcp *session, uint8_t transaction,
					uint16_t counter, uint8_t direction,
					uint64_t uid, void *user_data)
{
	if (!uid)
		return -ENOTDIR;

	avrcp_change_path_rsp(session, transaction, AVRCP_STATUS_SUCCESS, 0);

	return 0;
}

static int get_item_attributes(struct avrcp *session, uint8_t transaction,
					uint8_t scope, uint64_t uid,
					uint16_t counter, uint8_t number,
					uint32_t *attrs, void *user_data)
{
	struct context *context = user_data;
	uint8_t status;

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BI-05-C"))
		status = AVRCP_STATUS_UID_CHANGED;
	else
		status = AVRCP_STATUS_SUCCESS;

	avrcp_get_item_attributes_rsp(session, transaction, status, 0, NULL,
									NULL);

	return 0;
}

static int play_item(struct avrcp *session, uint8_t transaction, uint8_t scope,
			uint64_t uid, uint16_t counter, void *user_data)
{
	if (!uid)
		return -ENOENT;

	avrcp_play_item_rsp(session, transaction, AVRCP_STATUS_SUCCESS);

	return 0;
}

static int search(struct avrcp *session, uint8_t transaction,
					const char *string, void *user_data)
{
	avrcp_search_rsp(session, transaction, AVRCP_STATUS_SUCCESS, 0xaabb, 0);

	return 0;
}

static int add_to_now_playing(struct avrcp *session, uint8_t transaction,
				uint8_t scope, uint64_t uid, uint16_t counter,
				void *user_data)
{
	if (!uid)
		return -ENOENT;

	avrcp_add_to_now_playing_rsp(session, transaction,
							AVRCP_STATUS_SUCCESS);

	return 0;
}

static const struct avrcp_control_ind control_ind = {
	.get_capabilities = get_capabilities,
	.list_attributes = list_attributes,
	.get_attribute_text = get_attribute_text,
	.list_values = list_values,
	.get_value_text = get_value_text,
	.get_value = get_value,
	.set_value = set_value,
	.get_play_status = get_play_status,
	.get_element_attributes = get_element_attributes,
	.register_notification = register_notification,
	.set_volume = set_volume,
	.set_addressed = set_addressed,
	.set_browsed = set_browsed,
	.get_folder_items = get_folder_items,
	.change_path = change_path,
	.get_item_attributes = get_item_attributes,
	.play_item = play_item,
	.search = search,
	.add_to_now_playing = add_to_now_playing,
};

static void test_server(gconstpointer data)
{
	struct context *context = create_context(0x0100, data);

	avrcp_set_passthrough_handlers(context->session, passthrough_handlers,
								context);
	avrcp_register_player(context->session, &control_ind, NULL, context);

	g_idle_add(send_pdu, context);
}

static void get_folder_items_rsp(struct avrcp *session, int err,
					uint16_t counter, uint16_t number,
					uint8_t *params, void *user_data)
{
	struct context *context = user_data;

	g_assert_cmpint(err, ==, 0);
	g_assert_cmpint(counter, ==, 0xabcd);
	g_assert_cmpint(number, ==, 0);

	context_quit(context);
}

static void set_volume_rsp(struct avrcp *session, int err, uint8_t volume,
							void *user_data)
{
	struct context *context = user_data;

	g_assert_cmpint(err, ==, 0);
	g_assert_cmpint(volume, ==, 1);

	context_quit(context);
}

static bool register_notification_rsp(struct avrcp *session, int err,
					uint8_t code, uint8_t event,
					void *params, void *user_data)
{
	struct context *context = user_data;
	uint8_t *p = params;

	g_assert_cmpint(err, ==, 0);

	switch (event) {
	case AVRCP_EVENT_VOLUME_CHANGED:
		if (g_str_equal(context->data->test_name, "/TP/VLH/BV-03-C")) {
			g_assert_cmpint(p[0], ==, 0);
			break;
		} else if (code == AVC_CTYPE_INTERIM) {
			g_assert_cmpint(p[0], ==, 0);
			return true;
		}
		g_assert_cmpint(p[0], ==, 1);
		break;
	}

	context_quit(context);

	return false;
}

static const struct avrcp_control_cfm control_cfm = {
	.register_notification = register_notification_rsp,
	.set_volume = set_volume_rsp,
	.get_folder_items = get_folder_items_rsp,
};

static void test_client(gconstpointer data)
{
	struct context *context = create_context(0x0100, data);

	avrcp_register_player(context->session, NULL, &control_cfm, context);

	if (g_str_equal(context->data->test_name, "/TP/MPS/BV-01-C"))
		avrcp_set_addressed_player(context->session, 0xabcd);

	if (g_str_equal(context->data->test_name, "/TP/MPS/BV-03-C"))
		avrcp_set_browsed_player(context->session, 0xabcd);

	if (g_str_equal(context->data->test_name, "/TP/MPS/BV-06-C") ||
		g_str_equal(context->data->test_name, "/TP/MPS/BV-08-C"))
		avrcp_get_folder_items(context->session,
					AVRCP_MEDIA_PLAYER_LIST, 0, 2, 0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MPS/BV-01-I"))
		avrcp_get_folder_items(context->session,
					AVRCP_MEDIA_PLAYER_LIST, 0, 2, 0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BV-01-C"))
		avrcp_get_folder_items(context->session,
					AVRCP_MEDIA_PLAYER_VFS, 0, 2, 0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BV-04-C"))
		avrcp_change_path(context->session, 0x01, 0x01, 0xaabb);

	if (g_str_equal(context->data->test_name, "/TP/MCN/CB/BV-07-C"))
		avrcp_get_item_attributes(context->session,
					AVRCP_MEDIA_PLAYER_VFS, 0x01, 0xaabb,
					0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/SRC/BV-01-C"))
		avrcp_search(context->session, "Country");

	if (g_str_equal(context->data->test_name, "/TP/MCN/SRC/BV-03-C"))
		avrcp_get_folder_items(context->session, AVRCP_MEDIA_SEARCH,
						0, 2, 0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/SRC/BV-05-C"))
		avrcp_get_item_attributes(context->session,
					AVRCP_MEDIA_SEARCH, 0x01, 0xaabb,
					0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/NP/BV-01-C"))
		avrcp_play_item(context->session, AVRCP_MEDIA_NOW_PLAYING, 1,
									1);

	if (g_str_equal(context->data->test_name, "/TP/MCN/NP/BV-03-C"))
		avrcp_add_to_now_playing(context->session,
					AVRCP_MEDIA_NOW_PLAYING, 0x01, 0xaabb);

	if (g_str_equal(context->data->test_name, "/TP/MCN/NP/BV-05-C"))
		avrcp_get_folder_items(context->session,
					AVRCP_MEDIA_NOW_PLAYING, 0, 2, 0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/MCN/NP/BV-08-C"))
		avrcp_get_item_attributes(context->session,
					AVRCP_MEDIA_NOW_PLAYING, 0x01, 0xaabb,
					0, NULL);

	if (g_str_equal(context->data->test_name, "/TP/CFG/BV-01-C"))
		avrcp_get_capabilities(context->session, CAP_EVENTS_SUPPORTED);

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-01-C"))
		avrcp_list_player_attributes(context->session);

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-03-C")) {
		uint8_t attrs[2] = { AVRCP_ATTRIBUTE_EQUALIZER,
						AVRCP_ATTRIBUTE_REPEAT_MODE };

		avrcp_get_player_attribute_text(context->session, sizeof(attrs),
									attrs);
	}

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-05-C"))
		avrcp_list_player_values(context->session,
						AVRCP_ATTRIBUTE_EQUALIZER);

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-07-C")) {
		uint8_t values[2] = { AVRCP_EQUALIZER_OFF, AVRCP_EQUALIZER_ON };

		avrcp_get_player_value_text(context->session,
						AVRCP_ATTRIBUTE_EQUALIZER,
						sizeof(values), values);
	}

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-09-C")) {
		uint8_t attrs[2] = { AVRCP_ATTRIBUTE_EQUALIZER,
						AVRCP_ATTRIBUTE_REPEAT_MODE };

		avrcp_get_current_player_value(context->session, sizeof(attrs),
									attrs);
	}

	if (g_str_equal(context->data->test_name, "/TP/PAS/BV-11-C")) {
		uint8_t attrs[2] = { AVRCP_ATTRIBUTE_EQUALIZER,
						AVRCP_ATTRIBUTE_REPEAT_MODE };
		uint8_t values[2] = { 0xaa, 0xff };

		avrcp_set_player_value(context->session, sizeof(attrs), attrs,
								values);
	}

	if (g_str_equal(context->data->test_name, "/TP/MDI/BV-01-C"))
		avrcp_get_play_status(context->session);

	if (g_str_equal(context->data->test_name, "/TP/MDI/BV-03-C"))
		avrcp_get_element_attributes(context->session);

	if (g_str_equal(context->data->test_name, "/TP/NFY/BV-01-C"))
		avrcp_register_notification(context->session,
						AVRCP_EVENT_STATUS_CHANGED, 0);

	if (g_str_equal(context->data->test_name, "/TP/BGN/BV-01-I"))
		avrcp_send_passthrough(context->session, IEEEID_BTSIG,
						AVC_VENDOR_NEXT_GROUP);

	if (g_str_equal(context->data->test_name, "/TP/BGN/BV-02-I"))
		avrcp_send_passthrough(context->session, IEEEID_BTSIG,
						AVC_VENDOR_PREV_GROUP);

	if (g_str_equal(context->data->test_name, "/TP/VLH/BV-01-C"))
		avrcp_set_volume(context->session, 0x00);

	if (g_str_equal(context->data->test_name, "/TP/VLH/BV-03-C"))
		avrcp_register_notification(context->session,
						AVRCP_EVENT_VOLUME_CHANGED, 0);

	if (g_str_equal(context->data->test_name, "/TP/VLH/BI-03-C"))
		avrcp_set_volume(context->session, 0x01);

	if (g_str_equal(context->data->test_name, "/TP/VLH/BI-04-C"))
		avrcp_register_notification(context->session,
						AVRCP_EVENT_VOLUME_CHANGED, 0);

	if (g_str_equal(context->data->test_name, "/TP/PTH/BV-01-C"))
		avrcp_send_passthrough(context->session, 0, AVC_PLAY);

	if (g_str_equal(context->data->test_name, "/TP/PTH/BV-02-C"))
		avrcp_send_passthrough(context->session, 0, AVC_FAST_FORWARD);
}

int main(int argc, char *argv[])
{
	tester_init(&argc, &argv);

	__btd_log_init("*", 0);

	/* Media Player Selection Commands and Notifications */

	/* SetAddressedPlayer - CT */
	define_test("/TP/MPS/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x60, 0x00, 0x00,
				0x02, 0xab, 0xcd));

	/* SetAddressedPlayer - TG */
	define_test("/TP/MPS/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x02, 0xab, 0xcd),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_STABLE,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x01, 0x04));

	/* SetBrowsedPlayer - CT */
	define_test("/TP/MPS/BV-03-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, 0x70, 0x00, 0x02,
				0xab, 0xcd));

	/* SetBrowsedPlayer - TG */
	define_test("/TP/MPS/BV-04-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, 0x70, 0x00, 0x02,
				0xab, 0xcd),
			brs_pdu(0x02, 0x11, 0x0e, 0x70, 0x00, 0x16,
				0x04, 0xab, 0xcd, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x6a, 0x01, 0x00, 0x0a,
				0x46, 0x69, 0x6c, 0x65, 0x73, 0x79,
				0x73, 0x74, 0x65, 0x6d));

	/* AddressedPlayerChanged notification – TG */
	define_test("/TP/MPS/BV-05-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0b,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0b,
				0x00, 0x01, 0x00, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0b,
				0x02, 0x00, 0x02, 0x00));

	/* GetFolderItems - CT */
	define_test("/TP/MPS/BV-06-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* AvailablePlayersChanged Notification – TG */
	define_test("/TP/MPS/BV-07-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0a,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x01, 0x0a),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x01, 0x0a));

	/* GetFolderItems - CT */
	define_test("/TP/MPS/BV-08-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00));

	/* GetFolderItems - TG */
	define_test("/TP/MPS/BV-09-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* SetAddressedPlayer - TG */
	define_test("/TP/MPS/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x02, 0xab, 0xcd),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_STABLE,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x01, 0x11));

	/* SetBrowsedPlayer - TG */
	define_test("/TP/MPS/BI-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, 0x70, 0x00, 0x02,
				0xab, 0xcd),
			brs_pdu(0x02, 0x11, 0x0e, 0x70, 0x00, 0x01,
				0x11));

	/*
	 * Media Content Navigation Commands and Notifications for Content
	 * Browsing.
	 */

	/* GetFolderItems - Virtual FS - CT */
	define_test("/TP/MCN/CB/BV-01-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00));

	/* GetFolderItems - Virtual FS - TG */
	define_test("/TP/MCN/CB/BV-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* GetFolderItems - Virtual FS - TG */
	define_test("/TP/MCN/CB/BV-03-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x02, 0xab, 0xcd),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_STABLE,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_SET_ADDRESSED_PLAYER,
				0x00, 0x00, 0x01, 0x04),
			brs_pdu(0x00, 0x11, 0x0e, 0x70, 0x00, 0x02,
				0xab, 0xcd),
			brs_pdu(0x02, 0x11, 0x0e, 0x70, 0x00, 0x16,
				0x04, 0xab, 0xcd, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x6a, 0x01, 0x00, 0x0a,
				0x46, 0x69, 0x6c, 0x65, 0x73, 0x79,
				0x73, 0x74, 0x65, 0x6d),
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* ChangePath - CT */
	define_test("/TP/MCN/CB/BV-04-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x0b,
				0xaa, 0xbb,		/* counter */
				0x01,			/* direction */
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01	/* Folder UID */));

	/* ChangePath - TG */
	define_test("/TP/MCN/CB/BV-05-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x0b,
				0xaa, 0xbb,		/* counter */
				0x01,			/* direction */
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01	/* Folder UID */),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00));

	/* ChangePath - TG */
	define_test("/TP/MCN/CB/BV-06-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x0b,
				0xaa, 0xbb,		/* counter */
				0x00,			/* direction */
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01	/* Folder UID */),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00));

	/* GetItemAttributes - CT */
	define_test("/TP/MCN/CB/BV-07-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uuid */
				0xaa, 0xbb,		/* counter */
				0x00));			/* num attr */

	/* GetItemAttributes - TG */
	define_test("/TP/MCN/CB/BV-08-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uuid */
				0xaa, 0xbb,		/* counter */
				0x00),			/* num attr */
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x02, 0x04, 0x00));

	/* UIDcounter - TG */
	define_test("/TP/MCN/CB/BV-09-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0c,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x00, 0x00));

	/* UIDcounter - TG */
	define_test("/TP/MCN/CB/BV-10-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0c,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x00, 0x01));

	/* UIDcounter - TG */
	define_test("/TP/MCN/CB/BV-11-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0c,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x00, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x02, 0x00));

	/* GetFolderItems - Virtual FS - TG */
	define_test("/TP/MCN/CB/BI-01-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x01, /* start */
				0x00, 0x00, 0x00, 0x00, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x01, 0x0b));

	/* GetFolderItems - Virtual FS - TG */
	define_test("/TP/MCN/CB/BI-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x01, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x01, 0x0b));

	/* GetFolderItems - Virtual FS - TG */
	define_test("/TP/MCN/CB/BI-03-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_VFS,
				0x00, 0x00, 0x00, 0x02, /* start */
				0x00, 0x00, 0x00, 0x03, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x01, 0x0b));

	/* ChangePath - TG */
	define_test("/TP/MCN/CB/BI-04-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x0b,
				0xaa, 0xbb,		/* counter */
				0x01,			/* direction */
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00	/* Folder UID */),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_CHANGE_PATH,
				0x00, 0x01, 0x08));

	/* UIDcounter - TG */
	define_test("/TP/MCN/CB/BI-05-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0c,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x00, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x03, 0x0c,
				0x02, 0x00),
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,
				0xaa, 0xbb,
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x01, 0x05));

	/* Media Content Navigation Commands and Notifications for Search */

	/* Search - CT */
	define_test("/TP/MCN/SRC/BV-01-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_SEARCH,
				0x00, 0x0b, 0x00, 0x6a,
				0x00, 0x07,
				0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79));

	define_test("/TP/MCN/SRC/BV-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_SEARCH,
				0x00, 0x0b, 0x00, 0x6a,
				0x00, 0x07,
				0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_SEARCH,
				0x00, 0x07, 0x04,
				0xaa, 0xbb,		/* counter */
				0x00, 0x00, 0x00, 0x00));

	/* GetFolderItems - CT */
	define_test("/TP/MCN/SRC/BV-03-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_SEARCH,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00));

	/* GetFolderItems - NowPlaying - TG */
	define_test("/TP/MCN/SCR/BV-04-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_SEARCH,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* GetItemAttributes - CT */
	define_test("/TP/MCN/SRC/BV-05-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_SEARCH,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uuid */
				0xaa, 0xbb,		/* counter */
				0x00));			/* num attr */

	/* GetItemAttributes - TG */
	define_test("/TP/MCN/SRC/BV-06-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_SEARCH,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uid */
				0xaa, 0xbb,		/* counter */
				0x00),			/* num attr */
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x02, 0x04, 0x00));

	/* Media Content Navigation Commands and Notifications for NowPlaying */

	/* PlayItem - NowPlaying - CT */
	define_test("/TP/MCN/NP/BV-01-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
				0x00, 0x01));

	/* PlayItem - NowPlaying - TG */
	define_test("/TP/MCN/NP/BV-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
				0x00, 0x01),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_PLAY_ITEM,
				0x00, 0x01, 0x04));

	/* AddToNowPlaying - NowPlaying - CT */
	define_test("/TP/MCN/NP/BV-03-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01, /* uid */
				0xaa, 0xbb));

	/* AddToNowPlaying - NowPlaying - TG */
	define_test("/TP/MCN/NP/BV-04-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01, /* uid */
				0xaa, 0xbb),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING,
				0x00, 0x01, 0x04));

	/* GetFolderItems - NowPlaying - CT */
	define_test("/TP/MCN/NP/BV-05-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00));

	/* GetFolderItems - NowPlaying - TG */
	define_test("/TP/MCN/NP/BV-06-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x05, 0x04, 0xab, 0xcd, 0x00, 0x00));

	/* NowPlayingContentChanged Notification – TG */
	define_test("/TP/MCN/NP/BV-07-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x09,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x01, 0x09),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x01, 0x09));

	/* GetItemAttributes - CT */
	define_test("/TP/MCN/NP/BV-08-C", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uid */
				0xaa, 0xbb,		/* counter */
				0x00));			/* num attr */

	/* GetItemAttributes - TG */
	define_test("/TP/MCN/CB/BV-09-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x0c, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x01,	/* uid */
				0xaa, 0xbb,		/* counter */
				0x00),			/* num attr */
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GET_ITEM_ATTRIBUTES,
				0x00, 0x02, 0x04, 0x00));

	/* PlayItem - NowPlaying - TG */
	define_test("/TP/MCN/NP/BI-01-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_PLAY_ITEM,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, /* uid */
				0xaa, 0xbb),		/* counter */
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_PLAY_ITEM,
				0x00, 0x01, 0x09));

	/* AddToNowPlaying - NowPlaying - TG */
	define_test("/TP/MCN/NP/BI-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING,
				0x00, 0x0b, AVRCP_MEDIA_NOW_PLAYING,
				0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, /* uid */
				0xaa, 0xbb),		/* counter */
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_ADD_TO_NOW_PLAYING,
				0x00, 0x01, 0x09));

	/* Media Player Selection IOP tests */

	/* Listing of available media players */
	define_test("/TP/MPS/BV-01-I", test_client,
			brs_pdu(0x00, 0x11, 0x0e, AVRCP_GET_FOLDER_ITEMS,
				0x00, 0x0a, AVRCP_MEDIA_PLAYER_LIST,
				0x00, 0x00, 0x00, 0x00, /* start */
				0x00, 0x00, 0x00, 0x02, /* end */
				0x00));

	/* Connection Establishment for Browsing tests */

	/*
	 * Tests are checking connection establishment and release
	 * for browsing channel. Since we are connected through socketpair
	 * the tests are dummy
	 */
	define_test("/TP/CON/BV-01-C", test_dummy, raw_pdu(0x00));
	define_test("/TP/CON/BV-02-C", test_dummy, raw_pdu(0x00));
	define_test("/TP/CON/BV-03-C", test_dummy, raw_pdu(0x00));
	define_test("/TP/CON/BV-04-C", test_dummy, raw_pdu(0x00));
	define_test("/TP/CON/BV-05-C", test_dummy, raw_pdu(0x00));

	/* Connection Establishment for Control tests */

	/*
	 * Tests are checking connection establishement and release
	 * for control channel. Since we are connected through socketpair
	 * the tests are dummy
	 */
	define_test("/TP/CEC/BV-01-I", test_dummy, raw_pdu(0x00));
	define_test("/TP/CEC/BV-02-I", test_dummy, raw_pdu(0x00));
	define_test("/TP/CRC/BV-01-I", test_dummy, raw_pdu(0x00));
	define_test("/TP/CRC/BV-02-I", test_dummy, raw_pdu(0x00));

	/* Information collection for control tests */

	define_test("/TP/ICC/BV-01-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0xf8, 0x30,
				0xff, 0xff, 0xff, 0xff, 0xff),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0xf8, 0x30,
				0x07, 0x48, 0xff, 0xff, 0xff));

	define_test("/TP/ICC/BV-02-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0xf8, 0x31,
				0x07, 0xff, 0xff, 0xff, 0xff),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0xf8, 0x31,
				0x07, 0x48, 0xff, 0xff, 0xff));

	define_test("/TP/PTT/BV-01-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				0x44, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				0x44, 0x00));

	define_test("/TP/PTT/BV-02-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				AVC_VOLUME_UP, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				AVC_VOLUME_UP, 0x00));

	define_test("/TP/PTT/BV-03-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				AVC_CHANNEL_UP, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				AVC_CHANNEL_UP, 0x00));

	define_test("/TP/PTT/BV-04-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				AVC_SELECT, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				AVC_SELECT, 0x00));

	define_test("/TP/PTT/BV-05-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				AVC_PLAY, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				AVC_PLAY, 0x00),
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x7c,
				AVC_PLAY | 0x80, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x7c,
				AVC_PLAY | 0x80, 0x00));

	/* Metadata transfer tests */

	define_test("/TP/CFG/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x10, 0x00, 0x00,
				0x01, 0x03));

	define_test("/TP/CFG/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x10, 0x00, 0x00,
				0x01, 0x02),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x10, 0x00, 0x00,
				0x05, 0x02, 0x01, 0x00, 0x19, 0x58));

	define_test("/TP/CFG/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x10, 0x00, 0x00,
				0x01, 0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58, 0x10,
				0x00, 0x00, 0x01,
				AVRCP_STATUS_INVALID_PARAM));

	/* Player Application Settings tests */

	define_test("/TP/PAS/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x11, 0x00, 0x00,
				0x00));

	define_test("/TP/PAS/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x11, 0x00, 0x00,
				0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, 0x11, 0x00, 0x00,
				0x01, 0x00));

	define_test("/TP/PAS/BV-03-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_ATTRIBUTE_TEXT,
				0x00, 0x00, 0x03, 0x02,
				AVRCP_ATTRIBUTE_EQUALIZER,
				AVRCP_ATTRIBUTE_REPEAT_MODE));

	define_test("/TP/PAS/BV-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_ATTRIBUTE_TEXT,
				0x00, 0x00, 0x02, 0x01, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_ATTRIBUTE_TEXT,
				0x00, 0x00, 0x0e, 0x01, 0x01, 0x00,
				0x6a, 0x09, 0x65, 0x71, 0x75, 0x61,
				0x6c, 0x69, 0x7a, 0x65, 0x72));

	define_test("/TP/PAS/BV-05-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_LIST_PLAYER_VALUES,
				0x00, 0x00, 0x01,
				AVRCP_ATTRIBUTE_EQUALIZER));

	define_test("/TP/PAS/BV-06-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_LIST_PLAYER_VALUES,
				0x00, 0x00, 0x01, AVRCP_ATTRIBUTE_EQUALIZER),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_LIST_PLAYER_VALUES,
				0x00, 0x00, 0x01, 0x00));

	define_test("/TP/PAS/BV-07-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_VALUE_TEXT,
				0x00, 0x00, 0x04,
				AVRCP_ATTRIBUTE_EQUALIZER, 0x02,
				AVRCP_EQUALIZER_OFF,
				AVRCP_EQUALIZER_ON));

	define_test("/TP/PAS/BV-08-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_VALUE_TEXT,
				0x00, 0x00, 0x03, AVRCP_ATTRIBUTE_EQUALIZER,
				0x01, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_VALUE_TEXT,
				0x00, 0x00, 0x07, 0x01, 0x01, 0x00,
				0x6a, 0x02, 0x6f, 0x6e));

	define_test("/TP/PAS/BV-09-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_CURRENT_PLAYER_VALUE,
				0x00, 0x00, 0x03, 0x02,
				AVRCP_ATTRIBUTE_EQUALIZER,
				AVRCP_ATTRIBUTE_REPEAT_MODE));

	define_test("/TP/PAS/BV-10-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_CURRENT_PLAYER_VALUE,
				0x00, 0x00, 0x03, 0x02,
				AVRCP_ATTRIBUTE_EQUALIZER,
				AVRCP_ATTRIBUTE_REPEAT_MODE),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_CURRENT_PLAYER_VALUE,
				0x00, 0x00, 0x05, 0x02,
				AVRCP_ATTRIBUTE_EQUALIZER, 0x00,
				AVRCP_ATTRIBUTE_REPEAT_MODE, 0x00));

	define_test("/TP/PAS/BV-11-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_SET_PLAYER_VALUE,
				0x00, 0x00, 0x05, 0x02,
				AVRCP_ATTRIBUTE_EQUALIZER, 0xaa,
				AVRCP_ATTRIBUTE_REPEAT_MODE, 0xff));

	/* Get player app setting attribute text invalid behavior - TG */
	define_test("/TP/PAS/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_ATTRIBUTE_TEXT,
				0x00, 0x00, 0x02, 0x01,
				/* Invalid attribute id */
				0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_ATTRIBUTE_TEXT,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* List player application setting values invalid behavior - TG */
	define_test("/TP/PAS/BI-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_LIST_PLAYER_VALUES,
				0x00, 0x00, 0x01,
				/* Invalid attribute id */
				0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_LIST_PLAYER_VALUES,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* Get player application setting value text invalid behavior - TG */
	define_test("/TP/PAS/BI-03-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_VALUE_TEXT,
				0x00, 0x00, 0x03, AVRCP_ATTRIBUTE_EQUALIZER,
				0x01,
				/* Invalid setting value */
				0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_GET_PLAYER_VALUE_TEXT,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* Get current player application setting value invalid behavior - TG */
	define_test("/TP/PAS/BI-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_GET_CURRENT_PLAYER_VALUE,
				0x00, 0x00, 0x02, 0x01,
				/* Invalid attribute */
				0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_GET_CURRENT_PLAYER_VALUE,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* Set player application setting value invalid behavior - TG */
	define_test("/TP/PAS/BI-05-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58,
				AVRCP_SET_PLAYER_VALUE,
				0x00, 0x00, 0x03, 0x01,
				AVRCP_ATTRIBUTE_REPEAT_MODE, 0x7f),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_SET_PLAYER_VALUE,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* Media Information Commands */

	/* Get play status - CT */
	define_test("/TP/MDI/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS,
				0x00, 0x00, 0x00));

	/* Get play status - TG */
	define_test("/TP/MDI/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS,
				0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_PLAY_STATUS,
				0x00, 0x00, 0x09,
				0xbb, 0xbb, 0xbb, 0xbb, /* duration */
				0xaa, 0xaa, 0xaa, 0xaa, /* position */
				0x00));

	/* Get element attributes - CT */
	define_test("/TP/MDI/BV-03-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00));

	/* Get element attributes - TG */
	define_test("/TP/MDI/BV-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x00));

	/* Get element attributes - TG */
	define_test("/TP/MDI/BV-05-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
				0x00, 0x00, 0x00, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x00));

	/* Notification Commands */

	/* Register notification - CT */
	define_test("/TP/NFY/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, AVRCP_EVENT_STATUS_CHANGED,
				0x00, 0x00, 0x00, 0x00));

	/* Register notification - TG */
	define_test("/TP/NFY/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED,
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
				0xff, 0xff),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED,
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
				0xff, 0xff));

	/* Register notification - TG */
	define_test("/TP/NFY/BV-03-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05,
				AVRCP_EVENT_SETTINGS_CHANGED,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x04,
				AVRCP_EVENT_SETTINGS_CHANGED,
				0x01, 0x01, 0x02),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x04,
				AVRCP_EVENT_SETTINGS_CHANGED,
				0x01, 0x01, 0x02));

	/* Register notification - Track Changed - No Selected Track - TG */
	define_test("/TP/NFY/BV-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED,
				0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
				0xff, 0xff));

	/* Register notification - Track Changed - Track Playing - TG */
	define_test("/TP/NFY/BV-05-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00));

	/* Register notification - Track Changed - Selected Track - TG */
	define_test("/TP/NFY/BV-08-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x09, AVRCP_EVENT_TRACK_CHANGED,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00));

	/* Register notification - Register for events invalid behavior - TG */
	define_test("/TP/NFY/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05,
				/* Invalid event id */
				0xff,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x01, AVRCP_STATUS_INVALID_PARAM));

	/* Invalid commands */

	/* Invalid PDU ID - TG */
	define_test("/TP/INV/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58,
				/* Invalid PDU ID */
				0xff,
				0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_REJECTED,
				0x48, 0x00, 0x00, 0x19, 0x58,
				0xff, 0x00, 0x00, 0x01,
				AVRCP_STATUS_INVALID_COMMAND));

	/* Invalid PDU ID - Browsing TG */
	define_test("/TP/INV/BI-02-C", test_server,
			brs_pdu(0x00, 0x11, 0x0e, 0xff, 0x00, 0x00),
			brs_pdu(0x02, 0x11, 0x0e, AVRCP_GENERAL_REJECT,
				0x00, 0x01, AVRCP_STATUS_INVALID_COMMAND));

	/* Next Group command transfer - CT */
	define_test("/TP/BGN/BV-01-I", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_NEXT_GROUP));

	/* Next Group command transfer - TG */
	define_test("/TP/BGN/BV-01-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_NEXT_GROUP),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED,
				0x48, AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_NEXT_GROUP));

	/* Previous Group command transfer - CT */
	define_test("/TP/BGN/BV-02-I", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_PREV_GROUP));

	/* Previous Group command transfer - TG */
	define_test("/TP/BGN/BV-02-I", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_PREV_GROUP),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED,
				0x48, AVC_OP_PASSTHROUGH,
				AVC_VENDOR_UNIQUE, 0x05, 0x00, 0x19,
				0x58, 0x00, AVC_VENDOR_PREV_GROUP));

	/* Volume Level Handling */

	/* Set absolute volume – CT */
	define_test("/TP/VLH/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x00));

	/* Set absolute volume – TG */
	define_test("/TP/VLH/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x00));

	/* NotifyVolumeChange - CT */
	define_test("/TP/VLH/BV-03-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0d,
				0x00, 0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x02, 0x0d,
				0x00));

	/* NotifyVolumeChange - TG */
	define_test("/TP/VLH/BV-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0d,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x02, 0x0d,
				0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x02, 0x0d,
				0x01));

	/* Set absolute volume – TG */
	define_test("/TP/VLH/BI-01-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, 0x0a, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x01));

	/* Set absolute volume – TG */
	define_test("/TP/VLH/BI-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x80),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x00));

	/* Set Absolute Volume invalid behavior CT */
	define_test("/TP/VLH/BI-03-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x01),
			raw_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_SET_ABSOLUTE_VOLUME,
				0x00, 0x00, 0x01, 0x81));

	/* Set Absolute Volume invalid behavior CT */
	define_test("/TP/VLH/BI-04-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x03, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x05, 0x0d,
				0x00, 0x00, 0x00, 0x00),
			frg_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_INTERIM, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x02, 0x0d,
				0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_CHANGED, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REGISTER_NOTIFICATION,
				0x00, 0x00, 0x02, 0x0d,
				0x81));

	/* PASS THROUGH Handling */

	/* Press and release – CT */
	define_test("/TP/PTH/BV-01-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH, AVC_PLAY, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED, 0x48,
				AVC_OP_PASSTHROUGH, AVC_PLAY),
			raw_pdu(0x10, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH, AVC_PLAY | 0x80, 0x00));

	define_test("/TP/PTH/BV-02-C", test_client,
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH, AVC_FAST_FORWARD, 0x00),
			raw_pdu(0x02, 0x11, 0x0e, AVC_CTYPE_ACCEPTED, 0x48,
				AVC_OP_PASSTHROUGH, AVC_FAST_FORWARD),
			raw_pdu(0x10, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH, AVC_FAST_FORWARD | 0x80,
				0x00),
			raw_pdu(0x12, 0x11, 0x0e, AVC_CTYPE_ACCEPTED, 0x48,
				AVC_OP_PASSTHROUGH, AVC_FAST_FORWARD | 0x80),
			raw_pdu(0x20, 0x11, 0x0e, 0x00, 0x48,
				AVC_OP_PASSTHROUGH, AVC_FAST_FORWARD, 0x00));

	/* Request continuing response - TG */
	define_test("/TP/RCR/BV-02-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
			cont_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x01, 0x01, 0xf9),
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REQUEST_CONTINUING,
				0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES),
			cont_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x02, 0x01, 0xf9),
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_REQUEST_CONTINUING,
				0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES),
			cont_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x03, 0x00, 0x0e));

	/* Abort continuing response - TG */
	define_test("/TP/RCR/BV-04-C", test_server,
			raw_pdu(0x00, 0x11, 0x0e, 0x01, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
			cont_pdu(0x02, 0x11, 0x0e, 0x0c, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_GET_ELEMENT_ATTRIBUTES,
				0x01, 0x01, 0xf9),
			raw_pdu(0x00, 0x11, 0x0e, 0x00, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_ABORT_CONTINUING,
				0x00, 0x00, 0x01, AVRCP_GET_ELEMENT_ATTRIBUTES),
			raw_pdu(0x02, 0x11, 0x0e, 0x09, 0x48, 0x00,
				0x00, 0x19, 0x58, AVRCP_ABORT_CONTINUING,
				0x00, 0x00, 0x00));

	return tester_run();
}
