linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ 01/12] android/avrcp-lib: Change API to register callbacks instead of PDU handlers
@ 2014-03-17  8:08 Luiz Augusto von Dentz
  2014-03-17  8:08 ` [PATCH BlueZ 02/12] android/avrcp-lib: Add support for parsing GetCapabilities PDU Luiz Augusto von Dentz
                   ` (11 more replies)
  0 siblings, 12 replies; 19+ messages in thread
From: Luiz Augusto von Dentz @ 2014-03-17  8:08 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds avrcp_register_player function to register callbacks for
requests and responses, the fundamental difference is that the
callbacks are called after the original PDU is parsed and the parameter
are converted to host byte order making us able to unit test the
parsing itself.
---
 android/avrcp-lib.c | 27 +++++++++++++++++++++++++++
 android/avrcp-lib.h | 11 +++++++++++
 2 files changed, 38 insertions(+)

diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c
index 7b043ce..ca01b50 100644
--- a/android/avrcp-lib.c
+++ b/android/avrcp-lib.c
@@ -73,6 +73,7 @@ struct avrcp_header {
 
 struct avrcp {
 	struct avctp *conn;
+	struct avrcp_player *player;
 
 	size_t tx_mtu;
 	uint8_t *tx_buf;
@@ -89,6 +90,13 @@ struct avrcp {
 	void *destroy_data;
 };
 
+struct avrcp_player {
+	const struct avrcp_control_ind *ind;
+	const struct avrcp_control_cfm *cfm;
+
+	void *user_data;
+};
+
 void avrcp_shutdown(struct avrcp *session)
 {
 	if (session->conn) {
@@ -107,6 +115,7 @@ void avrcp_shutdown(struct avrcp *session)
 	if (session->destroy)
 		session->destroy(session->destroy_data);
 
+	g_free(session->player);
 	g_free(session->tx_buf);
 	g_free(session);
 }
@@ -162,6 +171,9 @@ static ssize_t handle_vendordep_pdu(struct avctp *conn, uint8_t transaction,
 		switch (ret) {
 		case -EAGAIN:
 			return ret;
+		case -ENOSYS:
+			pdu->params[0] = AVRCP_STATUS_INVALID_PARAM;
+			goto reject;
 		case -EINVAL:
 			pdu->params[0] = AVRCP_STATUS_INVALID_PARAM;
 			goto reject;
@@ -249,6 +261,21 @@ void avrcp_set_destroy_cb(struct avrcp *session, avrcp_destroy_cb_t cb,
 	session->destroy_data = user_data;
 }
 
+void avrcp_register_player(struct avrcp *session,
+				const struct avrcp_control_ind *ind,
+				const struct avrcp_control_cfm *cfm,
+				void *user_data)
+{
+	struct avrcp_player *player;
+
+	player = g_new0(struct avrcp_player, 1);
+	player->ind = ind;
+	player->cfm = cfm;
+	player->user_data = user_data;
+
+	session->player = player;
+}
+
 void avrcp_set_control_handlers(struct avrcp *session,
 				const struct avrcp_control_handler *handlers,
 				void *user_data)
diff --git a/android/avrcp-lib.h b/android/avrcp-lib.h
index 4adf4bf..6e33a75 100644
--- a/android/avrcp-lib.h
+++ b/android/avrcp-lib.h
@@ -100,6 +100,12 @@ struct avrcp_control_handler {
 			uint16_t params_len, uint8_t *params, void *user_data);
 };
 
+struct avrcp_control_ind {
+};
+
+struct avrcp_control_cfm {
+};
+
 struct avrcp_passthrough_handler {
 	uint8_t op;
 	bool (*func) (struct avrcp *session, bool pressed, void *user_data);
@@ -123,6 +129,11 @@ struct avrcp *avrcp_new(int fd, size_t imtu, size_t omtu, uint16_t version);
 void avrcp_shutdown(struct avrcp *session);
 void avrcp_set_destroy_cb(struct avrcp *session, avrcp_destroy_cb_t cb,
 							void *user_data);
+
+void avrcp_register_player(struct avrcp *session,
+				const struct avrcp_control_ind *ind,
+				const struct avrcp_control_cfm *cfm,
+				void *user_data);
 void avrcp_set_control_handlers(struct avrcp *session,
 				const struct avrcp_control_handler *handlers,
 				void *user_data);
-- 
1.8.5.3


^ permalink raw reply related	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2014-03-17 13:01 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-17  8:08 [PATCH BlueZ 01/12] android/avrcp-lib: Change API to register callbacks instead of PDU handlers Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 02/12] android/avrcp-lib: Add support for parsing GetCapabilities PDU Luiz Augusto von Dentz
2014-03-17  8:42   ` Andrei Emeltchenko
2014-03-17  9:25     ` Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 03/12] android/avrcp-lib: Add support for parsing ListPlayerAttributes PDU Luiz Augusto von Dentz
2014-03-17  8:47   ` Andrei Emeltchenko
2014-03-17  8:54     ` Andrei Emeltchenko
2014-03-17  8:08 ` [PATCH BlueZ 04/12] android/avrcp-lib: Add support for parsing GetPlayerAttributeText PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 05/12] android/avrcp-lib: Add support for parsing ListPlayerValues PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 06/12] android/avrcp-lib: Add support for parsing GetPlayerValueText PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 07/12] android/avrcp-lib: Add support for parsing GetCurrentPlayerValue PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 08/12] android/avrcp-lib: Add support for parsing SetPlayerValue PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 09/12] android/avrcp-lib: Add support for parsing GetPlayStatus PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 10/12] android/avrcp-lib: Add support for parsing GetElementAttributes PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 11/12] android/avrcp-lib: Add support for parsing ResgisterNotification PDU Luiz Augusto von Dentz
2014-03-17  8:08 ` [PATCH BlueZ 12/12] android/avrcp-lib: Add support for parsing SetAddressedPlayer PDU Luiz Augusto von Dentz
2014-03-17  8:38 ` [PATCH BlueZ 01/12] android/avrcp-lib: Change API to register callbacks instead of PDU handlers Andrei Emeltchenko
2014-03-17  9:22   ` Luiz Augusto von Dentz
2014-03-17 13:01     ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).