All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH hcidump 1/3] Add basic AVCTP parsing
@ 2011-06-22 14:22 Luiz Augusto von Dentz
  2011-06-22 14:22 ` [PATCH hcidump 2/3] Add basic AVRCP parsing Luiz Augusto von Dentz
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2011-06-22 14:22 UTC (permalink / raw)
  To: linux-bluetooth

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

---
 parser/avctp.c  |   29 +++++++++++++++++++++++++++--
 parser/parser.h |    1 +
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/parser/avctp.c b/parser/avctp.c
index 4a8876c..aa2def1 100644
--- a/parser/avctp.c
+++ b/parser/avctp.c
@@ -36,10 +36,35 @@
 
 #include "parser.h"
 
+static char *pt2str(uint8_t hdr)
+{
+	switch (hdr & 0x0c) {
+	case 0x00:
+		return "";
+	case 0x04:
+		return "Start";
+	case 0x08:
+		return "Cont";
+	case 0x0c:
+		return "End";
+	default:
+		return "Unk";
+	}
+}
+
 void avctp_dump(int level, struct frame *frm)
 {
+	uint8_t hdr;
+	uint16_t pid;
+
 	p_indent(level, frm);
-	printf("AVCTP:\n");
 
-	raw_dump(level, frm);
+	hdr = get_u8(frm);
+	pid = get_u16(frm);
+
+	printf("AVCTP: %s %s: pt 0x%02x transaction %d pid 0x%04x \n",
+				hdr & 0x02 ? "Response" : "Command",
+				pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
+
+	raw_dump(level + 1, frm);
 }
diff --git a/parser/parser.h b/parser/parser.h
index bbdfc01..cf40034 100644
--- a/parser/parser.h
+++ b/parser/parser.h
@@ -231,6 +231,7 @@ void hidp_dump(int level, struct frame *frm);
 void hcrp_dump(int level, struct frame *frm);
 void avdtp_dump(int level, struct frame *frm);
 void avctp_dump(int level, struct frame *frm);
+void avrcp_dump(int level, struct frame *frm);
 void att_dump(int level, struct frame *frm);
 void smp_dump(int level, struct frame *frm);
 
-- 
1.7.5.4


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

* [PATCH hcidump 2/3] Add basic AVRCP parsing
  2011-06-22 14:22 [PATCH hcidump 1/3] Add basic AVCTP parsing Luiz Augusto von Dentz
@ 2011-06-22 14:22 ` Luiz Augusto von Dentz
  2011-06-22 14:22 ` [PATCH hcidump 3/3] Add basic parsing support for AVRCP PDU Luiz Augusto von Dentz
  2011-06-24  9:24 ` [PATCH hcidump 1/3] Add basic AVCTP parsing Szymon Janc
  2 siblings, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2011-06-22 14:22 UTC (permalink / raw)
  To: linux-bluetooth

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

This add support for AV/C Panel passthrough headers
---
 Makefile.am    |    1 +
 parser/avctp.c |    6 +-
 parser/avrcp.c |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 266 insertions(+), 1 deletions(-)
 create mode 100644 parser/avrcp.c

diff --git a/Makefile.am b/Makefile.am
index 5835403..3d86705 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,6 +15,7 @@ parser_sources =  parser/parser.h parser/parser.c \
 					parser/hcrp.c \
 					parser/avdtp.c \
 					parser/avctp.c \
+					parser/avrcp.c \
 					parser/obex.c \
 					parser/capi.c \
 					parser/ppp.c \
diff --git a/parser/avctp.c b/parser/avctp.c
index aa2def1..fc6f796 100644
--- a/parser/avctp.c
+++ b/parser/avctp.c
@@ -35,6 +35,7 @@
 #include <netinet/in.h>
 
 #include "parser.h"
+#include "sdp.h"
 
 static char *pt2str(uint8_t hdr)
 {
@@ -66,5 +67,8 @@ void avctp_dump(int level, struct frame *frm)
 				hdr & 0x02 ? "Response" : "Command",
 				pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
 
-	raw_dump(level + 1, frm);
+	if (pid == SDP_UUID_AV_REMOTE || pid == SDP_UUID_AV_REMOTE_TARGET)
+		avrcp_dump(level + 1, frm);
+	else
+		raw_dump(level + 1, frm);
 }
diff --git a/parser/avrcp.c b/parser/avrcp.c
new file mode 100644
index 0000000..203d1d0
--- /dev/null
+++ b/parser/avrcp.c
@@ -0,0 +1,260 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2011 Intel Corporation.
+ *
+ *
+ *  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 <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#include "parser.h"
+
+/* ctype entries */
+#define AVC_CTYPE_CONTROL		0x0
+#define AVC_CTYPE_STATUS		0x1
+#define AVC_CTYPE_SPECIFIC_INQUIRY	0x2
+#define AVC_CTYPE_NOTIFY		0x3
+#define AVC_CTYPE_GENERAL_INQUIRY	0x4
+#define AVC_CTYPE_NOT_IMPLEMENTED	0x8
+#define AVC_CTYPE_ACCEPTED		0x9
+#define AVC_CTYPE_REJECTED		0xA
+#define AVC_CTYPE_IN_TRANSITION		0xB
+#define AVC_CTYPE_STABLE		0xC
+#define AVC_CTYPE_CHANGED		0xD
+#define AVC_CTYPE_INTERIM		0xF
+
+/* subunit type */
+#define AVC_SUBUNIT_MONITOR		0x00
+#define AVC_SUBUNIT_AUDIO		0x01
+#define AVC_SUBUNIT_PRINTER		0x02
+#define AVC_SUBUNIT_DISC		0x03
+#define AVC_SUBUNIT_TAPE		0x04
+#define AVC_SUBUNIT_TURNER		0x05
+#define AVC_SUBUNIT_CA			0x06
+#define AVC_SUBUNIT_CAMERA		0x07
+#define AVC_SUBUNIT_PANEL		0x09
+#define AVC_SUBUNIT_BULLETIN_BOARD	0x0a
+#define AVC_SUBUNIT_CAMERA_STORAGE	0x0b
+#define AVC_SUBUNIT_VENDOR_UNIQUE	0x0c
+#define AVC_SUBUNIT_EXTENDED		0x1e
+#define AVC_SUBUNIT_UNIT		0x1f
+
+/* opcodes */
+#define AVC_OP_VENDORDEP		0x00
+#define AVC_OP_UNITINFO			0x30
+#define AVC_OP_SUBUNITINFO		0x31
+#define AVC_OP_PASSTHROUGH		0x7c
+
+/* operands in passthrough commands */
+#define AVC_PANEL_VOLUME_UP		0x41
+#define AVC_PANEL_VOLUME_DOWN		0x42
+#define AVC_PANEL_MUTE			0x43
+#define AVC_PANEL_PLAY			0x44
+#define AVC_PANEL_STOP			0x45
+#define AVC_PANEL_PAUSE			0x46
+#define AVC_PANEL_RECORD		0x47
+#define AVC_PANEL_REWIND		0x48
+#define AVC_PANEL_FAST_FORWARD		0x49
+#define AVC_PANEL_EJECT			0x4a
+#define AVC_PANEL_FORWARD		0x4b
+#define AVC_PANEL_BACKWARD		0x4c
+
+static const char *ctype2str(uint8_t ctype)
+{
+	switch (ctype & 0x0f) {
+	case AVC_CTYPE_CONTROL:
+		return "Control";
+	case AVC_CTYPE_STATUS:
+		return "Status";
+	case AVC_CTYPE_SPECIFIC_INQUIRY:
+		return "Specific Inquiry";
+	case AVC_CTYPE_NOTIFY:
+		return "Notify";
+	case AVC_CTYPE_GENERAL_INQUIRY:
+		return "General Inquiry";
+	case AVC_CTYPE_NOT_IMPLEMENTED:
+		return "Not Implemented";
+	case AVC_CTYPE_ACCEPTED:
+		return "Accepted";
+	case AVC_CTYPE_REJECTED:
+		return "Rejected";
+	case AVC_CTYPE_IN_TRANSITION:
+		return "In Transition";
+	case AVC_CTYPE_STABLE:
+		return "Stable";
+	case AVC_CTYPE_CHANGED:
+		return "Changed";
+	case AVC_CTYPE_INTERIM:
+		return "Interim";
+	default:
+		return "Unknown";
+	}
+}
+
+static const char *opcode2str(uint8_t opcode)
+{
+	switch (opcode) {
+	case AVC_OP_VENDORDEP:
+		return "Vendor Dependent";
+	case AVC_OP_UNITINFO:
+		return "Unit Info";
+	case AVC_OP_SUBUNITINFO:
+		return "Subunit Info";
+	case AVC_OP_PASSTHROUGH:
+		return "Passthrough";
+	default:
+		return "Unknown";
+	}
+}
+
+static char *op2str(uint8_t op)
+{
+	switch (op & 0x7f) {
+	case AVC_PANEL_VOLUME_UP:
+		return "VOLUME UP";
+	case AVC_PANEL_VOLUME_DOWN:
+		return "VOLUME DOWN";
+	case AVC_PANEL_MUTE:
+		return "MUTE";
+	case AVC_PANEL_PLAY:
+		return "PLAY";
+	case AVC_PANEL_STOP:
+		return "STOP";
+	case AVC_PANEL_PAUSE:
+		return "PAUSE";
+	case AVC_PANEL_RECORD:
+		return "RECORD";
+	case AVC_PANEL_REWIND:
+		return "REWIND";
+	case AVC_PANEL_FAST_FORWARD:
+		return "FAST FORWARD";
+	case AVC_PANEL_EJECT:
+		return "EJECT";
+	case AVC_PANEL_FORWARD:
+		return "FORWARD";
+	case AVC_PANEL_BACKWARD:
+		return "BACKWARD";
+	default:
+		return "UNKNOWN";
+	}
+}
+
+
+static void avrcp_passthrough_dump(int level, struct frame *frm)
+{
+	uint8_t op, len;
+
+	p_indent(level, frm);
+
+	op = get_u8(frm);
+	printf("Operation: 0x%02x (%s %s)\n", op, op2str(op),
+					op & 0x80 ? "Released" : "Pressed");
+
+	p_indent(level, frm);
+
+	len = get_u8(frm);
+
+	printf("Lenght: 0x%02x\n", len);
+
+	raw_dump(level, frm);
+}
+
+static const char *subunit2str(uint8_t subunit)
+{
+	switch (subunit) {
+	case AVC_SUBUNIT_MONITOR:
+		return "Monitor";
+	case AVC_SUBUNIT_AUDIO:
+		return "Audio";
+	case AVC_SUBUNIT_PRINTER:
+		return "Printer";
+	case AVC_SUBUNIT_DISC:
+		return "Disc";
+	case AVC_SUBUNIT_TAPE:
+		return "Tape";
+	case AVC_SUBUNIT_TURNER:
+		return "Turner";
+	case AVC_SUBUNIT_CA:
+		return "CA";
+	case AVC_SUBUNIT_CAMERA:
+		return "Camera";
+	case AVC_SUBUNIT_PANEL:
+		return "Panel";
+	case AVC_SUBUNIT_BULLETIN_BOARD:
+		return "Bulleting Board";
+	case AVC_SUBUNIT_CAMERA_STORAGE:
+		return "Camera Storage";
+	case AVC_SUBUNIT_VENDOR_UNIQUE:
+		return "Vendor Unique";
+	case AVC_SUBUNIT_EXTENDED:
+		return "Extended to next byte";
+	case AVC_SUBUNIT_UNIT:
+		return "Unit";
+	default:
+		return "Reserved";
+	}
+}
+
+void avrcp_dump(int level, struct frame *frm)
+{
+	uint8_t ctype, address, subunit, opcode;
+
+	p_indent(level, frm);
+
+	ctype = get_u8(frm);
+	address = get_u8(frm);
+	opcode = get_u8(frm);
+
+	printf("AV/C: %s: address 0x%02x opcode 0x%02x\n", ctype2str(ctype),
+							address, opcode);
+
+	p_indent(level + 1, frm);
+
+	subunit = address >> 3;
+	printf("Subunit: %s\n", subunit2str(subunit));
+
+	p_indent(level + 1, frm);
+
+	printf("Opcode: %s\n", opcode2str(opcode));
+
+	/* Skip non-panel subunit packets */
+	if (subunit != AVC_SUBUNIT_PANEL) {
+		raw_dump(level, frm);
+		return;
+	}
+
+	switch (opcode) {
+	case AVC_OP_PASSTHROUGH:
+		avrcp_passthrough_dump(level + 1, frm);
+		break;
+	default:
+		raw_dump(level, frm);
+	}
+}
-- 
1.7.5.4


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

* [PATCH hcidump 3/3] Add basic parsing support for AVRCP PDU
  2011-06-22 14:22 [PATCH hcidump 1/3] Add basic AVCTP parsing Luiz Augusto von Dentz
  2011-06-22 14:22 ` [PATCH hcidump 2/3] Add basic AVRCP parsing Luiz Augusto von Dentz
@ 2011-06-22 14:22 ` Luiz Augusto von Dentz
  2011-06-24  9:24 ` [PATCH hcidump 1/3] Add basic AVCTP parsing Szymon Janc
  2 siblings, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2011-06-22 14:22 UTC (permalink / raw)
  To: linux-bluetooth

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

---
 parser/avrcp.c |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 109 insertions(+), 1 deletions(-)

diff --git a/parser/avrcp.c b/parser/avrcp.c
index 203d1d0..0fa38d1 100644
--- a/parser/avrcp.c
+++ b/parser/avrcp.c
@@ -86,6 +86,31 @@
 #define AVC_PANEL_FORWARD		0x4b
 #define AVC_PANEL_BACKWARD		0x4c
 
+/* pdu ids */
+#define AVRCP_GET_CAPABILITIES		0x10
+#define AVRCP_LIST_PLAYER_ATTRIBUTES	0x11
+#define AVRCP_LIST_PLAYER_VALUES	0x12
+#define AVRCP_GET_CURRENT_PLAYER_VALUE	0x13
+#define AVRCP_SET_PLAYER_VALUE		0x14
+#define AVRCP_GET_PLAYER_ATTRIBUTE_TEXT	0x15
+#define AVRCP_GET_PLAYER_VALUE_TEXT	0x16
+#define AVRCP_DISPLAYABLE_CHARSET	0x17
+#define AVRCP_CT_BATTERY_STATUS		0x18
+#define AVRCP_GET_ELEMENT_ATTRIBUTES	0x20
+#define AVRCP_GET_PLAY_STATUS		0x30
+#define AVRCP_REGISTER_NOTIFICATION	0x31
+#define AVRCP_REQUEST_CONTINUING	0x40
+#define AVRCP_ABORT_CONTINUING		0x41
+#define AVRCP_SET_ABSOLUTE_VOLUME	0x50
+#define AVRCP_SET_ADDRESSED_PLAYER	0x60
+#define AVRCP_SET_BROWSED_PLAYER	0x70
+#define AVRCP_GET_FOLDER_ITEMS		0x71
+#define AVRCP_CHANGE_PATH		0x72
+#define AVRCP_GET_ITEM_ATTRIBUTES	0x73
+#define AVRCP_PLAY_ITEM			0x74
+#define AVRCP_SEARCH			0x80
+#define AVRCP_ADD_TO_NOW_PLAYING	0x90
+
 static const char *ctype2str(uint8_t ctype)
 {
 	switch (ctype & 0x0f) {
@@ -134,6 +159,76 @@ static const char *opcode2str(uint8_t opcode)
 	}
 }
 
+static const char *pdu2str(uint8_t pduid)
+{
+	switch (pduid) {
+	case AVRCP_GET_CAPABILITIES:
+		return "GetCapabilities";
+	case AVRCP_LIST_PLAYER_ATTRIBUTES:
+		return "ListPlayerApplicationSettingAttributes";
+	case AVRCP_LIST_PLAYER_VALUES:
+		return "ListPlayerApplicationSettingValues";
+	case AVRCP_GET_CURRENT_PLAYER_VALUE:
+		return "GetCurrentPlayerApplicationSettingValue";
+	case AVRCP_SET_PLAYER_VALUE:
+		return "SetPlayerApplicationSettingValue";
+	case AVRCP_GET_PLAYER_ATTRIBUTE_TEXT:
+		return "GetPlayerApplicationSettingAttributeText";
+	case AVRCP_GET_PLAYER_VALUE_TEXT:
+		return "GetPlayerApplicationSettingValueText";
+	case AVRCP_DISPLAYABLE_CHARSET:
+		return "InformDisplayableCharacterSet";
+	case AVRCP_CT_BATTERY_STATUS:
+		return "InformBatteryStatusOfCT";
+	case AVRCP_GET_ELEMENT_ATTRIBUTES:
+		return "GetElementAttributes";
+	case AVRCP_GET_PLAY_STATUS:
+		return "GetPlayStatus";
+	case AVRCP_REGISTER_NOTIFICATION:
+		return "RegisterNotification";
+	case AVRCP_REQUEST_CONTINUING:
+		return "RequestContinuingResponse";
+	case AVRCP_ABORT_CONTINUING:
+		return "AbortContinuingResponse";
+	case AVRCP_SET_ABSOLUTE_VOLUME:
+		return "SetAbsoluteVolume";
+	case AVRCP_SET_ADDRESSED_PLAYER:
+		return "SetAddressedPlayer";
+	case AVRCP_SET_BROWSED_PLAYER:
+		return "SetBrowsedPlayer";
+	case AVRCP_GET_FOLDER_ITEMS:
+		return "GetFolderItems";
+	case AVRCP_CHANGE_PATH:
+		return "ChangePath";
+	case AVRCP_GET_ITEM_ATTRIBUTES:
+		return "GetItemAttributes";
+	case AVRCP_PLAY_ITEM:
+		return "PlayItem";
+	case AVRCP_SEARCH:
+		return "Search";
+	case AVRCP_ADD_TO_NOW_PLAYING:
+		return "AddToNowPlaying";
+	default:
+		return "Unknown";
+	}
+}
+
+static void avrcp_pdu_dump(int level, struct frame *frm, uint8_t ctype)
+{
+	uint8_t pduid, pt;
+	uint16_t len;
+
+	p_indent(level, frm);
+
+	pduid = get_u8(frm);
+	pt = get_u8(frm);
+	len = get_u16(frm);
+
+	printf("AVRCP: %s: pt 0x%02x len 0x%04x\n", pdu2str(pduid), pt, len);
+
+	raw_dump(level, frm);
+}
+
 static char *op2str(uint8_t op)
 {
 	switch (op & 0x7f) {
@@ -224,7 +319,8 @@ static const char *subunit2str(uint8_t subunit)
 
 void avrcp_dump(int level, struct frame *frm)
 {
-	uint8_t ctype, address, subunit, opcode;
+	uint8_t ctype, address, subunit, opcode, company[3];
+	int i;
 
 	p_indent(level, frm);
 
@@ -254,6 +350,18 @@ void avrcp_dump(int level, struct frame *frm)
 	case AVC_OP_PASSTHROUGH:
 		avrcp_passthrough_dump(level + 1, frm);
 		break;
+	case AVC_OP_VENDORDEP:
+		p_indent(level + 1, frm);
+
+		printf("Company ID: 0x");
+		for (i = 0; i < 3; i++) {
+			company[i] = get_u8(frm);
+			printf("%02x", company[i]);
+		}
+		printf("\n");
+
+		avrcp_pdu_dump(level + 1, frm, ctype);
+		break;
 	default:
 		raw_dump(level, frm);
 	}
-- 
1.7.5.4


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

* Re: [PATCH hcidump 1/3] Add basic AVCTP parsing
  2011-06-22 14:22 [PATCH hcidump 1/3] Add basic AVCTP parsing Luiz Augusto von Dentz
  2011-06-22 14:22 ` [PATCH hcidump 2/3] Add basic AVRCP parsing Luiz Augusto von Dentz
  2011-06-22 14:22 ` [PATCH hcidump 3/3] Add basic parsing support for AVRCP PDU Luiz Augusto von Dentz
@ 2011-06-24  9:24 ` Szymon Janc
  2011-06-24 12:02   ` Luiz Augusto von Dentz
  2 siblings, 1 reply; 5+ messages in thread
From: Szymon Janc @ 2011-06-24  9:24 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Hi Luiz,

> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> ---
>  parser/avctp.c  |   29 +++++++++++++++++++++++++++--
>  parser/parser.h |    1 +
>  2 files changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/parser/avctp.c b/parser/avctp.c
> index 4a8876c..aa2def1 100644
> --- a/parser/avctp.c
> +++ b/parser/avctp.c
> @@ -36,10 +36,35 @@
>  
>  #include "parser.h"
>  
> +static char *pt2str(uint8_t hdr)
> +{
> +	switch (hdr & 0x0c) {
> +	case 0x00:
> +		return "";
> +	case 0x04:
> +		return "Start";
> +	case 0x08:
> +		return "Cont";
> +	case 0x0c:
> +		return "End";
> +	default:
> +		return "Unk";
> +	}
> +}
> +
>  void avctp_dump(int level, struct frame *frm)
>  {
> +	uint8_t hdr;
> +	uint16_t pid;
> +
>  	p_indent(level, frm);
> -	printf("AVCTP:\n");
>  
> -	raw_dump(level, frm);
> +	hdr = get_u8(frm);
> +	pid = get_u16(frm);
> +
> +	printf("AVCTP: %s %s: pt 0x%02x transaction %d pid 0x%04x \n",
> +				hdr & 0x02 ? "Response" : "Command",
> +				pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
> +
> +	raw_dump(level + 1, frm);
>  }
> diff --git a/parser/parser.h b/parser/parser.h
> index bbdfc01..cf40034 100644
> --- a/parser/parser.h
> +++ b/parser/parser.h
> @@ -231,6 +231,7 @@ void hidp_dump(int level, struct frame *frm);
>  void hcrp_dump(int level, struct frame *frm);
>  void avdtp_dump(int level, struct frame *frm);
>  void avctp_dump(int level, struct frame *frm);
> +void avrcp_dump(int level, struct frame *frm);

Shouldn't this go to "[PATCH hcidump 2/3] Add basic AVRCP parsing" ?

>  void att_dump(int level, struct frame *frm);
>  void smp_dump(int level, struct frame *frm);
>  

-- 
BR
Szymon Janc

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

* Re: [PATCH hcidump 1/3] Add basic AVCTP parsing
  2011-06-24  9:24 ` [PATCH hcidump 1/3] Add basic AVCTP parsing Szymon Janc
@ 2011-06-24 12:02   ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2011-06-24 12:02 UTC (permalink / raw)
  To: Szymon Janc; +Cc: linux-bluetooth

Hi,

On Fri, Jun 24, 2011 at 12:24 PM, Szymon Janc <szymon.janc@tieto.com> wrote:
> Hi Luiz,
>
>> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>>
>> ---
>>  parser/avctp.c  |   29 +++++++++++++++++++++++++++--
>>  parser/parser.h |    1 +
>>  2 files changed, 28 insertions(+), 2 deletions(-)
>>
>> diff --git a/parser/avctp.c b/parser/avctp.c
>> index 4a8876c..aa2def1 100644
>> --- a/parser/avctp.c
>> +++ b/parser/avctp.c
>> @@ -36,10 +36,35 @@
>>
>>  #include "parser.h"
>>
>> +static char *pt2str(uint8_t hdr)
>> +{
>> +     switch (hdr & 0x0c) {
>> +     case 0x00:
>> +             return "";
>> +     case 0x04:
>> +             return "Start";
>> +     case 0x08:
>> +             return "Cont";
>> +     case 0x0c:
>> +             return "End";
>> +     default:
>> +             return "Unk";
>> +     }
>> +}
>> +
>>  void avctp_dump(int level, struct frame *frm)
>>  {
>> +     uint8_t hdr;
>> +     uint16_t pid;
>> +
>>       p_indent(level, frm);
>> -     printf("AVCTP:\n");
>>
>> -     raw_dump(level, frm);
>> +     hdr = get_u8(frm);
>> +     pid = get_u16(frm);
>> +
>> +     printf("AVCTP: %s %s: pt 0x%02x transaction %d pid 0x%04x \n",
>> +                             hdr & 0x02 ? "Response" : "Command",
>> +                             pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
>> +
>> +     raw_dump(level + 1, frm);
>>  }
>> diff --git a/parser/parser.h b/parser/parser.h
>> index bbdfc01..cf40034 100644
>> --- a/parser/parser.h
>> +++ b/parser/parser.h
>> @@ -231,6 +231,7 @@ void hidp_dump(int level, struct frame *frm);
>>  void hcrp_dump(int level, struct frame *frm);
>>  void avdtp_dump(int level, struct frame *frm);
>>  void avctp_dump(int level, struct frame *frm);
>> +void avrcp_dump(int level, struct frame *frm);
>
> Shouldn't this go to "[PATCH hcidump 2/3] Add basic AVRCP parsing" ?

Opps, gonna fix it, thanks.

-- 
Luiz Augusto von Dentz

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

end of thread, other threads:[~2011-06-24 12:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-22 14:22 [PATCH hcidump 1/3] Add basic AVCTP parsing Luiz Augusto von Dentz
2011-06-22 14:22 ` [PATCH hcidump 2/3] Add basic AVRCP parsing Luiz Augusto von Dentz
2011-06-22 14:22 ` [PATCH hcidump 3/3] Add basic parsing support for AVRCP PDU Luiz Augusto von Dentz
2011-06-24  9:24 ` [PATCH hcidump 1/3] Add basic AVCTP parsing Szymon Janc
2011-06-24 12:02   ` Luiz Augusto von Dentz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.