Acoustical mode for femon

Maximilian Seesslen <[email protected]>
Newsgroups gmane.linux.drivers.dvb
Organization MES
Message-ID <[email protected]>
Hi List,

find attached a patch that adds a "Acoustical mode" to femon.
The monitoring application produces a sound indicating the signal quality. The 
higher the beep the better the signal quality.
This is useful while mounting the antenna for finding the best position without 
having to look at the monitor or without even having a monitor.


--
Maximilian Seeßlen
Ludwigstrasse 9
D-87437 Kempten

+49 831 687 510 2
+49 174 233 644 3
seesslen.net

_______________________________________________
linux-dvb users mailing list
For V4L/DVB development, please use instead [email protected]
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
femon.diff (text/x-patch, 2.6 KB)
diff -r dd1b701fcacc util/femon/femon.c
--- a/util/femon/femon.c	Sat Dec 05 22:51:46 2009 +0100
+++ b/util/femon/femon.c	Wed Dec 23 22:17:40 2009 +0100
@@ -42,10 +42,17 @@
 static char *usage_str =
     "\nusage: femon [options]\n"
     "     -H        : human readable output\n"
+    "     -A        : Acoustical mode. A sound indicates the signal quality.\n"
+    "     -r        : If 'Acoustical mode' is active it tells the application\n"
+    "                 is called remotely via ssh. The sound is heard on the 'real'\n"
+    "                 machine but. The user has to be root.\n"
     "     -a number : use given adapter (default 0)\n"
     "     -f number : use given frontend (default 0)\n"
     "     -c number : samples to take (default 0 = infinite)\n\n";
 
+int sleep_time=1000000;
+int acoustical_mode=0;
+int remote=0;
 
 static void usage(void)
 {
@@ -59,6 +66,27 @@
 {
 	struct dvbfe_info fe_info;
 	unsigned int samples = 0;
+	FILE *ttyFile=NULL;
+	
+	// We dont write the "beep"-codes to stdout but to /dev/tty1.
+	// This is neccessary for Thin-Client-Systems or Streaming-Boxes
+	// where the computer does not have a monitor and femon is called via ssh.
+	if(acoustical_mode)
+	{
+	    if(remote)
+	    {
+		ttyFile=fopen("/dev/tty1","w");
+	        if(!ttyFile)
+		{
+		    fprintf(stderr, "Could not open /dev/tty1. No access rights?\n");
+		    exit(-1);
+		}
+	    }
+	    else
+	    {
+		ttyFile=stdout;
+	    }
+	}
 
 	do {
 		if (dvbfe_get_info(fe, FE_STATUS_PARAMS, &fe_info, DVBFE_INFO_QUERYTYPE_IMMEDIATE, 0) != FE_STATUS_PARAMS) {
@@ -94,12 +122,24 @@
 		if (fe_info.lock)
 			printf("FE_HAS_LOCK");
 
+		// create beep if acoustical_mode enabled
+		if(acoustical_mode)
+		{
+		    int signal=(fe_info.signal_strength * 100) / 0xffff;
+		    fprintf( ttyFile, "\033[10;%d]\a", 500+(signal*2));
+		    // printf("Variable : %d\n", signal);
+		    fflush(ttyFile);
+		}
+
 		printf("\n");
 		fflush(stdout);
-		usleep(1000000);
+		usleep(sleep_time);
 		samples++;
 	} while ((!count) || (count-samples));
-
+	
+	if(ttyFile)
+	    fclose(ttyFile);
+	
 	return 0;
 }
 
@@ -148,7 +188,7 @@
 	int human_readable = 0;
 	int opt;
 
-       while ((opt = getopt(argc, argv, "Ha:f:c:")) != -1) {
+       while ((opt = getopt(argc, argv, "rAHa:f:c:")) != -1) {
 		switch (opt)
 		{
 		default:
@@ -166,6 +206,15 @@
 		case 'H':
 			human_readable = 1;
 			break;
+		case 'A':
+			// Acoustical mode: we have to reduce the delay between
+			// checks in order to hear nice sound
+			sleep_time=5000;
+			acoustical_mode=1;
+			break;
+		case 'r':
+			remote=1;
+			break;
 		}
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.