/* metermon.c */
-#include <chan.h>
+#include <common.h>
-#define METERPATH "./IPC/SDR-1000-0-meter.chan"
-#define METERMULT (24)
#define SLEEP (500000)
-jmp_buf here;
+char *cmdsink = "./IPC/SDR-1000-0-commands.fifo",
+ *mtrsrc = "./IPC/SDR-1000-0-meter.fifo";
-void
-onsig(int sig) {
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- longjmp(here, TRUE);
-}
+FILE *cmdfp, *mtrfp;
+
+int label;
+REAL rxm[MAXRX][RXMETERPTS];
+REAL txm[TXMETERPTS];
int
main(int argc, char **argv) {
- Chan ch = 0;
- int i = 0;
- REAL val = 0.0;
-
- signal(SIGHUP, onsig);
- signal(SIGINT, onsig);
- signal(SIGQUIT, onsig);
-
- if (!(ch = openChan(METERPATH, METERMULT * sizeof(REAL))))
- perror("openChan"), exit(1);
-
- while (!setjmp(here)) {
- if (getChan_nowait(ch, (char *) &val, sizeof(REAL))) {
- printf("(%d)", i++);
- do
- printf(" %f", val);
- while (getChan_nowait(ch, (char *) &val, sizeof(REAL)));
+ int i = 0, j, k, lab = getpid();
+
+ if (!(cmdfp = fopen(cmdsink, "r+")))
+ perror(cmdsink), exit(1);
+ if (!(mtrfp = fopen(mtrsrc, "r+")))
+ perror(mtrsrc), exit(1);
+
+ fprintf(stderr, "metermon OK\n");
+
+ for (;;) {
+
+ usleep(SLEEP);
+
+ fprintf(cmdfp, "reqMeter %d\n", lab);
+ fflush(cmdfp);
+
+ if (fread((char *) &label, sizeof(int), 1, mtrfp) != 1)
+ perror("fread meter label"), exit(1);
+
+ if (fread((char *) rxm, sizeof(REAL), MAXRX * RXMETERPTS, mtrfp)
+ != MAXRX * RXMETERPTS)
+ perror("fread meter"), exit(1);
+
+ printf("%d <%d>", i++, label);
+ for (j = 0; j < MAXRX; j++) {
+ for (k = 0; k < RXMETERPTS; k++)
+ printf(" %8.3f", rxm[j][k]);
putchar('\n');
}
- usleep(SLEEP);
+
+ if (fread((char *) txm, sizeof(REAL), TXMETERPTS, mtrfp)
+ != TXMETERPTS)
+ perror("fread meter"), exit(1);
+
+ printf("%d\n", i++);
+ for (k = 0; k < TXMETERPTS; k++)
+ printf(" %8.3f", txm[k]);
+ putchar('\n');
}
- closeChan(ch);
+ fclose(cmdfp);
+ fclose(mtrfp);
+
+ exit(0);
}