From 610611e178c9e8b73e3aa2c56559a7ed506eb1ad Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Sun, 22 Jun 2003 19:31:24 +0000 Subject: [lcd4linux @ 2003-06-22 19:31:24 by reinelt] added dvb.c dvb.h --- dvb.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 dvb.c (limited to 'dvb.c') diff --git a/dvb.c b/dvb.c new file mode 100644 index 0000000..be01168 --- /dev/null +++ b/dvb.c @@ -0,0 +1,98 @@ +/* $Id $ + * + * DVB specific functions + * + * Copyright 2003 by Michael Reinelt (reinelt@eunet.at) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * $Log + */ + +/* + * exported functions: + * + * DVB (int *strength, int *snr) + * returns 0 if ok, -1 if error + * sets *strength to the signal strength + * sets *snr to the signal/noise ratio + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "dvb.h" +#include "filter.h" + +int DVB (double *strength, double *snr) +{ + static time_t now=0; + static int fd=-2; + static double strength0=0.0; + static double snr0=0.0; + + unsigned short raw_strength; + unsigned short raw_snr; + + *strength=strength0; + *snr=snr0; + + if (fd==-1) return -1; + + if (time(NULL)==now) return 0; + time(&now); + + if (fd==-2) { + fd = open("/dev/dvb/adapter0/frontend0", O_RDONLY); + if (fd==-1) { + error ("open(/dev/dvb/adapter0/frontend0) failed: %s", strerror(errno)); + return -1; + } + debug ("open (/dev/dvb/adapter0/frontend0)=%d", fd); + } + + if (ioctl(fd, FE_READ_SIGNAL_STRENGTH, &raw_strength)) { + error("ioctl(FE_READ_SIGNAL_STRENGTH) failed: %s", strerror(errno)); + fd=-1; + return -1; + } + + if (ioctl(fd, FE_READ_SNR, &raw_snr)) { + error("ioctl(FE_READ_SNR) failed: %s", strerror(errno)); + fd=-1; + return -1; + } + + // Normalize to 1.0 + strength0=raw_strength/65535.0; + snr0=raw_snr/65535.0; + + *strength=strength0; + *snr=snr0; + + return 0; +} + -- cgit v1.2.3