summaryrefslogtreecommitdiff
path: root/ztmonitor.c
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2004-01-28 23:32:54 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2004-01-28 23:32:54 +0000
commitf78e1e5d455e68b70edf21743a36e01dc9b1027b (patch)
treefc2bc7db213b8ff143d478c20a2292938a36f863 /ztmonitor.c
parenta857655f51d2f0d14cf58900e19eb7c5735cef6f (diff)
ztmonitor enhancements (bug #908)
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@303 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'ztmonitor.c')
-rwxr-xr-xztmonitor.c102
1 files 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));