[Asterisk-cvs] zaptel ztmonitor.c,1.6,1.7
markster at lists.digium.com
markster at lists.digium.com
Wed Jan 28 17:40:47 CST 2004
Update of /usr/cvsroot/zaptel
In directory mongoose.digium.com:/tmp/cvs-serv30805
Modified Files:
ztmonitor.c
Log Message:
ztmonitor enhancements (bug #908)
Index: ztmonitor.c
===================================================================
RCS file: /usr/cvsroot/zaptel/ztmonitor.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- ztmonitor.c 29 Aug 2003 20:33:43 -0000 1.6
+++ ztmonitor.c 28 Jan 2004 23:32:54 -0000 1.7
@@ -138,27 +138,60 @@
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[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));
+ 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[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 @@
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 @@
/* 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[])
@@ -262,6 +319,13 @@
fprintf(stderr, "Unable to monitor: %s\n", strerror(errno));
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 (;;) {
More information about the svn-commits
mailing list