* [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.