mirror of
https://github.com/tbsdtv/media_build.git
synced 2025-07-23 04:13:02 +02:00
Internal szap-s2, femon-s2 utils.
This commit is contained in:
26
femon-s2/Makefile
Normal file
26
femon-s2/Makefile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
CC=gcc
|
||||||
|
|
||||||
|
SRC=femon-s2.c
|
||||||
|
OBJ=femon-s2.o
|
||||||
|
|
||||||
|
BIND=/usr/local/bin/
|
||||||
|
INCLUDE=-I ../linux/include/uapi
|
||||||
|
|
||||||
|
TARGET=femon-s2
|
||||||
|
|
||||||
|
all: $(TARGET) $(TARGET)
|
||||||
|
|
||||||
|
$(TARGET): $(OBJ)
|
||||||
|
$(CC) $(CFLG) $(OBJ) -o $(TARGET) $(CLIB)
|
||||||
|
|
||||||
|
install: all
|
||||||
|
cp $(TARGET) $(BIND)
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm $(BIND)$(TARGET)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJ) $(TARGET) *~
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(INCLUDE) -c $< -o $@
|
34
femon-s2/README
Normal file
34
femon-s2/README
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
femon -- simple frontend monitoring tool for the Linux DVB.
|
||||||
|
|
||||||
|
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 of the License, 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.
|
||||||
|
|
||||||
|
femon requires Linux DVB driver API version >= 5.0.
|
||||||
|
|
||||||
|
If compiler not found DVB headers in ../s2/linux/include/linux/dvb,
|
||||||
|
then it looks at usual location /usr/include/linux/dvb.
|
||||||
|
|
||||||
|
Install as follows:
|
||||||
|
|
||||||
|
(Option) make
|
||||||
|
make install
|
||||||
|
Uninstall
|
||||||
|
make uninstall
|
||||||
|
|
||||||
|
usage: femon [options]
|
||||||
|
-H : human readable output
|
||||||
|
-a number : use given adapter (default 0)
|
||||||
|
-f number : use given frontend (default 0)
|
||||||
|
-c number : samples to take (default 0 = infinite)
|
||||||
|
|
||||||
|
Igor M. Liplianin (liplianin@me.by)
|
164
femon-s2/femon-s2.c
Normal file
164
femon-s2/femon-s2.c
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
/* femon-s2 -- monitor frontend status
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 convergence GmbH
|
||||||
|
* Johannes Stezenbach <js@convergence.de>
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Igor M. Liplianin <liplianin@me.by>
|
||||||
|
*
|
||||||
|
* 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 of the License, 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.
|
||||||
|
*
|
||||||
|
* femon 2011/06/16
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/poll.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include <linux/dvb/frontend.h>
|
||||||
|
#include <linux/dvb/version.h>
|
||||||
|
|
||||||
|
#if DVB_API_VERSION < 5
|
||||||
|
#error femon-s2 requires Linux DVB driver API version >= 5.0!
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FRONTENDDEVICE "/dev/dvb/adapter%d/frontend%d"
|
||||||
|
|
||||||
|
static char *usage_str =
|
||||||
|
"\nusage: femon-s2 [options]\n"
|
||||||
|
" -H : human readable output\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";
|
||||||
|
|
||||||
|
|
||||||
|
static void usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, usage_str);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int check_frontend (int fe_fd, int human_readable, unsigned int count)
|
||||||
|
{
|
||||||
|
fe_status_t status;
|
||||||
|
uint16_t snr = 10, signal = 10;
|
||||||
|
uint32_t ber = 1, uncorrected_blocks =1;
|
||||||
|
int16_t temp = 0;
|
||||||
|
int timeout = 0;
|
||||||
|
unsigned int samples = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (ioctl(fe_fd, FE_READ_STATUS, &status) == -1)
|
||||||
|
perror("FE_READ_STATUS failed");
|
||||||
|
/* some frontends might not support all these ioctls, thus we
|
||||||
|
* avoid printing errors
|
||||||
|
*/
|
||||||
|
if (ioctl(fe_fd, FE_READ_SIGNAL_STRENGTH, &signal) == -1)
|
||||||
|
signal = -2;
|
||||||
|
if (ioctl(fe_fd, FE_READ_SNR, &snr) == -1)
|
||||||
|
snr = -2;
|
||||||
|
if (ioctl(fe_fd, FE_READ_BER, &ber) == -1)
|
||||||
|
ber = -2;
|
||||||
|
if (ioctl(fe_fd, FE_READ_UNCORRECTED_BLOCKS, &uncorrected_blocks) == -1)
|
||||||
|
uncorrected_blocks = -2;
|
||||||
|
if (ioctl(fe_fd, FE_READ_TEMP, &temp) == -1)
|
||||||
|
ber = -2;
|
||||||
|
|
||||||
|
if (human_readable) {
|
||||||
|
printf ("status %02x | signal %3u%% | snr %3u%% | ber %d | unc %d | temp %d | ",
|
||||||
|
status, (signal * 100) / 0xffff, (snr * 100) / 0xffff, ber, uncorrected_blocks, temp);
|
||||||
|
} else {
|
||||||
|
printf ("status %02x | signal %04x | snr %04x | ber %08x | unc %08x | temp %d | ",
|
||||||
|
status, signal, snr, ber, uncorrected_blocks, temp);
|
||||||
|
}
|
||||||
|
if (status & FE_HAS_LOCK)
|
||||||
|
printf("FE_HAS_LOCK");
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
usleep(1000000);
|
||||||
|
samples++;
|
||||||
|
} while ((!count) || (count-samples));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int do_mon(unsigned int adapter, unsigned int frontend, int human_readable, unsigned int count)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
static int fefd;
|
||||||
|
char fedev[128];
|
||||||
|
|
||||||
|
if (!fefd) {
|
||||||
|
snprintf(fedev, sizeof(fedev), FRONTENDDEVICE, adapter, frontend);
|
||||||
|
|
||||||
|
if ((fefd = open(fedev, O_RDONLY | O_NONBLOCK)) < 0) {
|
||||||
|
perror("opening frontend failed");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO here we may put frontend description */
|
||||||
|
|
||||||
|
result = check_frontend (fefd, human_readable, count);
|
||||||
|
|
||||||
|
close(fefd);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
unsigned int adapter = 0, frontend = 0, count = 0;
|
||||||
|
int human_readable = 0;
|
||||||
|
int opt;
|
||||||
|
|
||||||
|
while ((opt = getopt(argc, argv, "Ha:f:c:")) != -1) {
|
||||||
|
switch (opt)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
adapter = strtoul(optarg, NULL, 0);
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
count = strtoul(optarg, NULL, 0);
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
frontend = strtoul(optarg, NULL, 0);
|
||||||
|
break;
|
||||||
|
case 'H':
|
||||||
|
human_readable = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mon(adapter, frontend, human_readable, count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
37
szap-s2/Makefile
Normal file
37
szap-s2/Makefile
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
CC=gcc
|
||||||
|
|
||||||
|
SRC=lnb.c szap-s2.c tzap-t2.c
|
||||||
|
HED=lnb.h
|
||||||
|
OBJ1=lnb.o szap-s2.o
|
||||||
|
OBJ2=tzap-t2.o lnb.o
|
||||||
|
|
||||||
|
BIND=/usr/local/bin/
|
||||||
|
INCLUDE=-I ../linux/include/uapi
|
||||||
|
|
||||||
|
TARGET1=szap-s2
|
||||||
|
TARGET2=tzap-t2
|
||||||
|
|
||||||
|
all: $(TARGET1) $(TARGET2)
|
||||||
|
|
||||||
|
$(TARGET1): $(OBJ1)
|
||||||
|
$(CC) $(CFLG) $(OBJ1) -o $(TARGET1) $(CLIB)
|
||||||
|
|
||||||
|
$(TARGET2): $(OBJ2)
|
||||||
|
$(CC) $(CFLG) $(OBJ2) -o $(TARGET2) $(CLIB)
|
||||||
|
|
||||||
|
$(OBJ): $(HED)
|
||||||
|
|
||||||
|
install: all
|
||||||
|
cp $(TARGET1) $(BIND)
|
||||||
|
cp $(TARGET2) $(BIND)
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm $(BIND)$(TARGET1)
|
||||||
|
rm $(BIND)$(TARGET2)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJ1) $(TARGET1) *~
|
||||||
|
rm -f $(OBJ2) $(TARGET2) *~
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(INCLUDE) -c $< -o $@
|
62
szap-s2/README
Normal file
62
szap-s2/README
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
szap-s2 -- simple zapping tool for the Linux DVB S2 API
|
||||||
|
|
||||||
|
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 of the License, 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.
|
||||||
|
|
||||||
|
szap-s2 requires Linux DVB driver API version 5.0.
|
||||||
|
|
||||||
|
If compiler not found DVB headers in ../s2/linux/include/linux/dvb,
|
||||||
|
then it looks at usual location /usr/include/linux/dvb.
|
||||||
|
|
||||||
|
Install as follows:
|
||||||
|
|
||||||
|
(Option) make
|
||||||
|
make install
|
||||||
|
Uninstall
|
||||||
|
make uninstall
|
||||||
|
|
||||||
|
location of channel list file is ~/.szap/channels.conf
|
||||||
|
|
||||||
|
one line of the szap channel file has the following format:
|
||||||
|
name:frequency_MHz:polarization[coderate][delivery][modulation][rolloff]:sat_no:symbolrate:vpid:apid:service_id
|
||||||
|
one line of the VDR channel file has the following format:
|
||||||
|
name:frequency_MHz:polarization[coderate][delivery][modulation][rolloff]:sat_no:symbolrate:vpid:apid:?:?:service_id:?:?:?
|
||||||
|
|
||||||
|
usage:
|
||||||
|
szap -q
|
||||||
|
list known channels
|
||||||
|
szap [options] {-n channel-number|channel_name}
|
||||||
|
zap to channel via number or full name (case insensitive)
|
||||||
|
-a number : use given adapter (default 0)
|
||||||
|
-f number : use given frontend (default 0)
|
||||||
|
-d number : use given demux (default 0)
|
||||||
|
-c file : read channels list from 'file'
|
||||||
|
-V : use vdr channels list file format (default zap)
|
||||||
|
-b : enable Audio Bypass (default no)
|
||||||
|
-x : exit after tuning
|
||||||
|
-H : human readable output
|
||||||
|
-D : params debug
|
||||||
|
-r : set up /dev/dvb/adapterX/dvr0 for TS recording
|
||||||
|
-l lnb-type (DVB-S Only) (use -l help to print types) or
|
||||||
|
-l low[,high[,switch]] in Mhz
|
||||||
|
-i : run interactively, allowing you to type in channel names
|
||||||
|
-p : add pat and pmt to TS recording (implies -r)
|
||||||
|
or -n numbers for zapping
|
||||||
|
-S : delivery system type DVB-S=0, DVB-S2=1
|
||||||
|
-M : modulation 1=BPSK 2=QPSK 5=8PSK
|
||||||
|
-C : fec 0=NONE 12=1/2 23=2/3 34=3/4 35=3/5 45=4/5 56=5/6 67=6/7 89=8/9 910=9/10 999=AUTO
|
||||||
|
-O : rolloff 35=0.35 25=0.25 20=0.20 0=UNKNOWN
|
||||||
|
-m : input stream 0-255
|
||||||
|
|
||||||
|
|
||||||
|
Igor M. Liplianin (liplianin@me.by)
|
101
szap-s2/lnb.c
Normal file
101
szap-s2/lnb.c
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include "lnb.h"
|
||||||
|
|
||||||
|
static char *univ_desc[] = {
|
||||||
|
"Europe",
|
||||||
|
"10800 to 11800 MHz and 11600 to 12700 Mhz",
|
||||||
|
"Dual LO, loband 9750, hiband 10600 MHz",
|
||||||
|
(char *)NULL };
|
||||||
|
|
||||||
|
static char *dbs_desc[] = {
|
||||||
|
"Expressvu, North America",
|
||||||
|
"12200 to 12700 MHz",
|
||||||
|
"Single LO, 11250 MHz",
|
||||||
|
(char *)NULL };
|
||||||
|
|
||||||
|
static char *standard_desc[] = {
|
||||||
|
"10945 to 11450 Mhz",
|
||||||
|
"Single LO, 10000 Mhz",
|
||||||
|
(char *)NULL };
|
||||||
|
|
||||||
|
static char *enhan_desc[] = {
|
||||||
|
"Astra",
|
||||||
|
"10700 to 11700 MHz",
|
||||||
|
"Single LO, 9750 MHz",
|
||||||
|
(char *)NULL };
|
||||||
|
|
||||||
|
static char *cband_desc[] = {
|
||||||
|
"Big Dish",
|
||||||
|
"3700 to 4200 MHz",
|
||||||
|
"Single LO, 5150 Mhz",
|
||||||
|
(char *)NULL };
|
||||||
|
|
||||||
|
static struct lnb_types_st lnbs[] = {
|
||||||
|
{"UNIVERSAL", univ_desc, 9750, 10600, 11700 },
|
||||||
|
{"DBS", dbs_desc, 11250, 0, 0 },
|
||||||
|
{"STANDARD", standard_desc, 10000, 0, 0 },
|
||||||
|
{"ENHANCED", enhan_desc, 9750, 0, 0 },
|
||||||
|
{"C-BAND", cband_desc, 5150, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Enumerate through standard types of LNB's until NULL returned.
|
||||||
|
* Increment curno each time
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct lnb_types_st *
|
||||||
|
lnb_enum(int curno)
|
||||||
|
{
|
||||||
|
if (curno >= (int) (sizeof(lnbs) / sizeof(lnbs[0])))
|
||||||
|
return (struct lnb_types_st *)NULL;
|
||||||
|
return &lnbs[curno];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Decode an lnb type, for example given on a command line
|
||||||
|
* If alpha and standard type, e.g. "Universal" then match that
|
||||||
|
* otherwise low[,high[,switch]]
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
lnb_decode(char *str, struct lnb_types_st *lnbp)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *cp, *np;
|
||||||
|
|
||||||
|
memset(lnbp, 0, sizeof(*lnbp));
|
||||||
|
cp = str;
|
||||||
|
while(*cp && isspace(*cp))
|
||||||
|
cp++;
|
||||||
|
if (isalpha(*cp)) {
|
||||||
|
for (i = 0; i < (int)(sizeof(lnbs) / sizeof(lnbs[0])); i++) {
|
||||||
|
if (!strcasecmp(lnbs[i].name, cp)) {
|
||||||
|
*lnbp = lnbs[i];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (*cp == '\0' || !isdigit(*cp))
|
||||||
|
return -1;
|
||||||
|
lnbp->low_val = strtoul(cp, &np, 0);
|
||||||
|
if (lnbp->low_val == 0)
|
||||||
|
return -1;
|
||||||
|
cp = np;
|
||||||
|
while(*cp && (isspace(*cp) || *cp == ','))
|
||||||
|
cp++;
|
||||||
|
if (*cp == '\0')
|
||||||
|
return 1;
|
||||||
|
if (!isdigit(*cp))
|
||||||
|
return -1;
|
||||||
|
lnbp->high_val = strtoul(cp, &np, 0);
|
||||||
|
cp = np;
|
||||||
|
while(*cp && (isspace(*cp) || *cp == ','))
|
||||||
|
cp++;
|
||||||
|
if (*cp == '\0')
|
||||||
|
return 1;
|
||||||
|
if (!isdigit(*cp))
|
||||||
|
return -1;
|
||||||
|
lnbp->switch_val = strtoul(cp, NULL, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
24
szap-s2/lnb.h
Normal file
24
szap-s2/lnb.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
struct lnb_types_st {
|
||||||
|
char *name;
|
||||||
|
char **desc;
|
||||||
|
unsigned long low_val;
|
||||||
|
unsigned long high_val; /* zero indicates no hiband */
|
||||||
|
unsigned long switch_val; /* zero indicates no hiband */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Enumerate through standard types of LNB's until NULL returned.
|
||||||
|
* Increment curno each time
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct lnb_types_st *
|
||||||
|
lnb_enum(int curno);
|
||||||
|
|
||||||
|
/* Decode an lnb type, for example given on a command line
|
||||||
|
* If alpha and standard type, e.g. "Universal" then match that
|
||||||
|
* otherwise low[,high[,switch]]
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
lnb_decode(char *str, struct lnb_types_st *lnbp);
|
||||||
|
|
1127
szap-s2/szap-s2.c
Normal file
1127
szap-s2/szap-s2.c
Normal file
File diff suppressed because it is too large
Load Diff
1089
szap-s2/tzap-t2.c
Normal file
1089
szap-s2/tzap-t2.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user