|
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 |
|