From f78e1e5d455e68b70edf21743a36e01dc9b1027b Mon Sep 17 00:00:00 2001 From: markster Date: Wed, 28 Jan 2004 23:32:54 +0000 Subject: ztmonitor enhancements (bug #908) git-svn-id: http://svn.digium.com/svn/zaptel/trunk@303 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- ztmonitor.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 83 insertions(+), 19 deletions(-) diff --git a/ztmonitor.c b/ztmonitor.c index d915ece..642ce2a 100755 --- a/ztmonitor.c +++ b/ztmonitor.c @@ -138,27 +138,60 @@ int pseudo_open(void) return fd; } -void draw_bar(char *label, int avg) +#define barlen 35 +#define baroptimal 3250 +//define barlevel 200 +#define barlevel ((baroptimal/barlen)*2) +#define maxlevel (barlen*barlevel) + +void draw_barheader() +{ + char bar[barlen+5]; + + memset(bar, '-', sizeof(bar)); + memset(bar, '<', 1); + memset(bar+barlen+2, '>', 1); + memset(bar+barlen+3, '\0', 1); + + strncpy(bar+(barlen/2), "(RX)", 4); + printf("%s", bar); + + strncpy(bar+(barlen/2), "(TX)", 4); + printf(" %s\n", bar); +} + +void draw_bar(int avg, int max) { - char bar[35]; - int left; - if (avg > 7500) - avg = 7500; - memset(bar, '#', sizeof(bar)); - bar[sizeof(bar) - 1] = '\0'; - avg /= 200; - left = sizeof(bar) - 1 - avg; - if (left > 0) - memset(bar + avg, ' ', left); - printf("%s %s", label, bar); + char bar[barlen+5]; + + memset(bar, ' ', sizeof(bar)); + + max /= barlevel; + avg /= barlevel; + if (avg > barlen) + avg = barlen; + if (max > barlen) + max = barlen; + + if (avg > 0) + memset(bar, '#', avg); + if (max > 0) + memset(bar + max, '*', 1); + + bar[barlen+1] = '\0'; + printf("%s", bar); fflush(stdout); } void visualize(short *tx, short *rx, int cnt) { int x; - int txavg = 0; - int rxavg = 0; + float txavg = 0; + float rxavg = 0; + static int txmax = 0; + static int rxmax = 0; + static int sametxmax = 0; + static int samerxmax = 0; static int txbest = 0; static int rxbest = 0; int ms; @@ -171,8 +204,8 @@ void visualize(short *tx, short *rx, int cnt) txavg += abs(tx[x]); rxavg += abs(rx[x]); } - txavg /= cnt; - rxavg /= cnt; + txavg = abs(txavg / cnt); + rxavg = abs(rxavg / cnt); if (txavg > txbest) txbest = txavg; @@ -182,14 +215,38 @@ void visualize(short *tx, short *rx, int cnt) /* Update no more than 10 times a second */ if (ms < 100) return; + + /* Save as max levels, if greater */ + if (txbest > txmax) { + txmax = txbest; + sametxmax = 0; + } + if (rxbest > rxmax) { + rxmax = rxbest; + samerxmax = 0; + } memcpy(&last, &tv, sizeof(last)); + /* Clear screen */ - printf("\r"); - draw_bar("Rx", rxbest); - draw_bar("Tx", txbest); + printf("\r "); + draw_bar(rxbest, rxmax); + printf(" "); + draw_bar(txbest, txmax); txbest = 0; rxbest = 0; + + /* If we have had the same max hits for x times, clear the values */ + sametxmax++; + samerxmax++; + if (sametxmax > 6) { + txmax = 0; + sametxmax = 0; + } + if (samerxmax > 6) { + rxmax = 0; + samerxmax = 0; + } } int main(int argc, char *argv[]) @@ -263,6 +320,13 @@ int main(int argc, char *argv[]) exit(1); } } + if (visual) { + printf("\nVisual Audio Levels.\n"); + printf("--------------------\n"); + printf(" Use zapata.conf file to adjust the gains if needed.\n\n"); + printf("( # = Audio Level * = Max Audio Hit )\n"); + draw_barheader(); + } /* Now, copy from pseudo to audio */ for (;;) { res = read(pfd, buf, sizeof(buf)); -- cgit v1.2.3