perex 548ba9
From ec73719ec6a7d4ccdd71c32de585217f31a99fb3 Mon Sep 17 00:00:00 2001
perex 548ba9
From: Jaroslav Kysela <perex@t61.perex-int.cz>
perex 548ba9
Date: Thu, 14 Aug 2008 14:57:19 +0200
perex 548ba9
Subject: [PATCH] amixer - fixed TLV dBscale and added dBrange parsing
perex 548ba9
perex 548ba9
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
perex 548ba9
---
perex 548ba9
 amixer/amixer.c |   30 +++++++++++++++++++++++++-----
perex 548ba9
 1 files changed, 25 insertions(+), 5 deletions(-)
perex 548ba9
perex 548ba9
diff --git a/amixer/amixer.c b/amixer/amixer.c
perex 548ba9
index 61259f6..f93fa9e 100644
perex 548ba9
--- a/amixer/amixer.c
perex 548ba9
+++ b/amixer/amixer.c
perex 548ba9
@@ -456,7 +456,7 @@ static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_
perex 548ba9
 	unsigned int type = tlv[0];
perex 548ba9
 	unsigned int size;
perex 548ba9
 	unsigned int idx = 0;
perex 548ba9
-	
perex 548ba9
+
perex 548ba9
 	if (tlv_size < 2 * sizeof(unsigned int)) {
perex 548ba9
 		printf("TLV size error!\n");
perex 548ba9
 		return;
perex 548ba9
@@ -487,12 +487,12 @@ static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_
perex 548ba9
 		printf("dBscale-");
perex 548ba9
 		if (size != 2 * sizeof(unsigned int)) {
perex 548ba9
 			while (size > 0) {
perex 548ba9
-				printf("0x%x", tlv[idx++]);
perex 548ba9
+				printf("0x%08x,", tlv[idx++]);
perex 548ba9
 				size -= sizeof(unsigned int);
perex 548ba9
 			}
perex 548ba9
 		} else {
perex 548ba9
 			printf("min=");
perex 548ba9
-			print_dB(tlv[2]);
perex 548ba9
+			print_dB((int)tlv[2]);
perex 548ba9
 			printf(",step=");
perex 548ba9
 			print_dB(tlv[3] & 0xffff);
perex 548ba9
 			printf(",mute=%i", (tlv[3] >> 16) & 1);
perex 548ba9
@@ -503,7 +503,7 @@ static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_
perex 548ba9
 		printf("dBlinear-");
perex 548ba9
 		if (size != 2 * sizeof(unsigned int)) {
perex 548ba9
 			while (size > 0) {
perex 548ba9
-				printf("0x%x", tlv[idx++]);
perex 548ba9
+				printf("0x%08x,", tlv[idx++]);
perex 548ba9
 				size -= sizeof(unsigned int);
perex 548ba9
 			}
perex 548ba9
 		} else {
perex 548ba9
@@ -514,10 +514,30 @@ static void decode_tlv(unsigned int spaces, unsigned int *tlv, unsigned int tlv_
perex 548ba9
 		}
perex 548ba9
 		break;
perex 548ba9
 #endif
perex 548ba9
+#ifdef SND_CTL_TLVT_DB_RANGE
perex 548ba9
+	case SND_CTL_TLVT_DB_RANGE:
perex 548ba9
+		printf("dBrange-\n");
perex 548ba9
+		if ((size / (6 * sizeof(unsigned int))) != 0) {
perex 548ba9
+			while (size > 0) {
perex 548ba9
+				printf("0x%08x,", tlv[idx++]);
perex 548ba9
+				size -= sizeof(unsigned int);
perex 548ba9
+			}
perex 548ba9
+			break;
perex 548ba9
+		}
perex 548ba9
+		idx = 0;
perex 548ba9
+		while (idx < size) {
perex 548ba9
+			print_spaces(spaces + 2);
perex 548ba9
+			printf("rangemin=%i,", tlv[0]);
perex 548ba9
+			printf(",rangemax=%i\n", tlv[1]);
perex 548ba9
+			decode_tlv(spaces + 4, tlv + 2, 6 * sizeof(unsigned int));
perex 548ba9
+			idx += 6 * sizeof(unsigned int);
perex 548ba9
+		}
perex 548ba9
+		break;
perex 548ba9
+#endif
perex 548ba9
 	default:
perex 548ba9
 		printf("unk-%i-", type);
perex 548ba9
 		while (size > 0) {
perex 548ba9
-			printf("0x%x", tlv[idx++]);
perex 548ba9
+			printf("0x%08x,", tlv[idx++]);
perex 548ba9
 			size -= sizeof(unsigned int);
perex 548ba9
 		}
perex 548ba9
 		break;
perex 548ba9
-- 
perex 548ba9
1.5.5.1
perex 548ba9