aboutsummaryrefslogtreecommitdiffstats
path: root/util/szap
diff options
context:
space:
mode:
authorMark Purcell <msp@debian.org>2012-05-13 19:42:13 +1000
committeretobi <git@e-tobi.net>2013-09-03 09:48:54 +0200
commita537361120f6d717bfdf2793c82d2435ee0c9126 (patch)
tree73c81bb7e5d5d7e7b604b785d3a3ca7e46537850 /util/szap
parent96bce3638e9b6d3f3bac79494e11d877857de81e (diff)
parent5501530a778ad588a8ccd3f1584ea58f74c0cec9 (diff)
downloadlinux-dvb-apps-debian/1.1.1+rev1483-1.tar.gz
Imported Debian patch 1.1.1+rev1483-1debian/1.1.1+rev1483-1
Diffstat (limited to '')
-rw-r--r--util/szap/Makefile7
-rw-r--r--util/szap/azap.c82
-rw-r--r--util/szap/czap.c25
-rw-r--r--util/szap/lnb.c11
-rw-r--r--util/szap/lnb.h6
-rw-r--r--util/szap/szap.c962
-rw-r--r--util/szap/tzap.c232
-rw-r--r--util/szap/util.c153
8 files changed, 743 insertions, 735 deletions
diff --git a/util/szap/Makefile b/util/szap/Makefile
index 48d7149..837e989 100644
--- a/util/szap/Makefile
+++ b/util/szap/Makefile
@@ -1,5 +1,11 @@
# Makefile for linuxtv.org dvb-apps/util/szap
+# get DVB API version
+VERSION_FILE := "/usr/include/linux/dvb/version.h"
+
+DVB_API_MAJOR := $(word 3, $(shell grep -m1 "DVB_API_VERSION" $(VERSION_FILE)) )
+DVB_API_MINOR := $(word 3, $(shell grep -m1 "DVB_API_VERSION_MINOR" $(VERSION_FILE)) )
+
objects = lnb.o util.o
binaries = azap \
@@ -12,6 +18,7 @@ inst_bin = $(binaries)
.PHONY: all
all: $(binaries)
+$(info DVB API is $(DVB_API_MAJOR).$(DVB_API_MINOR))
$(binaries): $(objects)
diff --git a/util/szap/azap.c b/util/szap/azap.c
index ea13236..230a7b9 100644
--- a/util/szap/azap.c
+++ b/util/szap/azap.c
@@ -21,18 +21,18 @@ static char DEMUX_DEV [80];
#define CHANNEL_FILE "/.azap/channels.conf"
#define ERROR(x...) \
- do { \
- fprintf(stderr, "ERROR: "); \
- fprintf(stderr, x); \
- fprintf (stderr, "\n"); \
- } while (0)
+ do { \
+ fprintf(stderr, "ERROR: "); \
+ fprintf(stderr, x); \
+ fprintf (stderr, "\n"); \
+ } while (0)
#define PERROR(x...) \
- do { \
- fprintf(stderr, "ERROR: "); \
- fprintf(stderr, x); \
- fprintf (stderr, " (%s)\n", strerror(errno)); \
- } while (0)
+ do { \
+ fprintf(stderr, "ERROR: "); \
+ fprintf(stderr, x); \
+ fprintf (stderr, " (%s)\n", strerror(errno)); \
+ } while (0)
typedef struct {
@@ -353,49 +353,49 @@ int main(int argc, char **argv)
return -1;
- if (rec_psi) {
- pmtpid = get_pmt_pid(DEMUX_DEV, sid);
- if (pmtpid <= 0) {
- fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
- return -1;
- }
-
- if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- perror("opening pat demux failed");
- return -1;
- }
- if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0)
- return -1;
-
- if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- perror("opening pmt demux failed");
- return -1;
- }
- if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0)
- return -1;
- }
-
- if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- PERROR("failed opening '%s'", DEMUX_DEV);
- return -1;
- }
+ if (rec_psi) {
+ pmtpid = get_pmt_pid(DEMUX_DEV, sid);
+ if (pmtpid <= 0) {
+ fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
+ return -1;
+ }
+
+ if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ perror("opening pat demux failed");
+ return -1;
+ }
+ if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0)
+ return -1;
+
+ if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ perror("opening pmt demux failed");
+ return -1;
+ }
+ if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0)
+ return -1;
+ }
+
+ if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ PERROR("failed opening '%s'", DEMUX_DEV);
+ return -1;
+ }
printf ("video pid 0x%04x, audio pid 0x%04x\n", vpid, apid);
if (set_pesfilter (video_fd, vpid, DMX_PES_VIDEO, dvr) < 0)
return -1;
if ((audio_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- PERROR("failed opening '%s'", DEMUX_DEV);
- return -1;
- }
+ PERROR("failed opening '%s'", DEMUX_DEV);
+ return -1;
+ }
if (set_pesfilter (audio_fd, apid, DMX_PES_AUDIO, dvr) < 0)
return -1;
check_frontend (frontend_fd);
- close (pat_fd);
- close (pmt_fd);
+ close (pat_fd);
+ close (pmt_fd);
close (audio_fd);
close (video_fd);
close (frontend_fd);
diff --git a/util/szap/czap.c b/util/szap/czap.c
index e04ed4b..8a97d98 100644
--- a/util/szap/czap.c
+++ b/util/szap/czap.c
@@ -242,19 +242,18 @@ int check_frontend (int fe_fd, int human_readable)
static const char *usage =
- "\nusage: %s [options] -l\n"
- " list known channels\n"
- " %s [options] {-n channel-number|channel_name}\n"
- " zap to channel via number or full name (case insensitive)\n"
- " -a number : use given adapter (default 0)\n"
- " -f number : use given frontend (default 0)\n"
- " -d number : use given demux (default 0)\n"
- " -c file : read channels list from 'file'\n"
- " -x : exit after tuning\n"
- " -H : human readable output\n"
- " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
- " -p : add pat and pmt to TS recording (implies -r)\n"
-;
+ "\nusage: %s [options] -l\n"
+ " list known channels\n"
+ " %s [options] {-n channel-number|channel_name}\n"
+ " zap to channel via number or full name (case insensitive)\n"
+ " -a number : use given adapter (default 0)\n"
+ " -f number : use given frontend (default 0)\n"
+ " -d number : use given demux (default 0)\n"
+ " -c file : read channels list from 'file'\n"
+ " -x : exit after tuning\n"
+ " -H : human readable output\n"
+ " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
+ " -p : add pat and pmt to TS recording (implies -r)\n";
int main(int argc, char **argv)
{
diff --git a/util/szap/lnb.c b/util/szap/lnb.c
index 9052d1c..3202da1 100644
--- a/util/szap/lnb.c
+++ b/util/szap/lnb.c
@@ -44,8 +44,7 @@ static struct lnb_types_st lnbs[] = {
* Increment curno each time
*/
-struct lnb_types_st *
-lnb_enum(int curno)
+struct lnb_types_st *lnb_enum(int curno)
{
if (curno >= (int) (sizeof(lnbs) / sizeof(lnbs[0])))
return (struct lnb_types_st *)NULL;
@@ -57,16 +56,16 @@ lnb_enum(int curno)
* otherwise low[,high[,switch]]
*/
-int
-lnb_decode(char *str, struct lnb_types_st *lnbp)
+int lnb_decode(char *str, struct lnb_types_st *lnbp)
{
-int i;
-char *cp, *np;
+ 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)) {
diff --git a/util/szap/lnb.h b/util/szap/lnb.h
index 6370fd4..6cc9e1d 100644
--- a/util/szap/lnb.h
+++ b/util/szap/lnb.h
@@ -10,13 +10,11 @@ struct lnb_types_st {
* Increment curno each time
*/
-struct lnb_types_st *
-lnb_enum(int curno);
+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);
+int lnb_decode(char *str, struct lnb_types_st *lnbp);
diff --git a/util/szap/szap.c b/util/szap/szap.c
index 78da3a6..9de752e 100644
--- a/util/szap/szap.c
+++ b/util/szap/szap.c
@@ -75,46 +75,46 @@ static int exit_after_tuning;
static int interactive;
static char *usage_str =
- "\nusage: szap -q\n"
- " list known channels\n"
- " szap [options] {-n channel-number|channel_name}\n"
- " zap to channel via number or full name (case insensitive)\n"
- " -a number : use given adapter (default 0)\n"
- " -f number : use given frontend (default 0)\n"
- " -d number : use given demux (default 0)\n"
- " -c file : read channels list from 'file'\n"
- " -b : enable Audio Bypass (default no)\n"
- " -x : exit after tuning\n"
- " -H : human readable output\n"
- " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
- " -l lnb-type (DVB-S Only) (use -l help to print types) or \n"
- " -l low[,high[,switch]] in Mhz\n"
- " -i : run interactively, allowing you to type in channel names\n"
- " -p : add pat and pmt to TS recording (implies -r)\n"
- " or -n numbers for zapping\n";
+ "\nusage: szap -q\n"
+ " list known channels\n"
+ " szap [options] {-n channel-number|channel_name}\n"
+ " zap to channel via number or full name (case insensitive)\n"
+ " -a number : use given adapter (default 0)\n"
+ " -f number : use given frontend (default 0)\n"
+ " -d number : use given demux (default 0)\n"
+ " -c file : read channels list from 'file'\n"
+ " -b : enable Audio Bypass (default no)\n"
+ " -x : exit after tuning\n"
+ " -H : human readable output\n"
+ " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
+ " -l lnb-type (DVB-S Only) (use -l help to print types) or \n"
+ " -l low[,high[,switch]] in Mhz\n"
+ " -i : run interactively, allowing you to type in channel names\n"
+ " -p : add pat and pmt to TS recording (implies -r)\n"
+ " or -n numbers for zapping\n";
struct diseqc_cmd {
- struct dvb_diseqc_master_cmd cmd;
- uint32_t wait;
+ struct dvb_diseqc_master_cmd cmd;
+ uint32_t wait;
};
void diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd,
fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b)
{
- if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1)
- perror("FE_SET_TONE failed");
- if (ioctl(fd, FE_SET_VOLTAGE, v) == -1)
- perror("FE_SET_VOLTAGE failed");
- usleep(15 * 1000);
- if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd) == -1)
- perror("FE_DISEQC_SEND_MASTER_CMD failed");
- usleep(cmd->wait * 1000);
- usleep(15 * 1000);
- if (ioctl(fd, FE_DISEQC_SEND_BURST, b) == -1)
- perror("FE_DISEQC_SEND_BURST failed");
- usleep(15 * 1000);
- if (ioctl(fd, FE_SET_TONE, t) == -1)
- perror("FE_SET_TONE failed");
+ if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1)
+ perror("FE_SET_TONE failed");
+ if (ioctl(fd, FE_SET_VOLTAGE, v) == -1)
+ perror("FE_SET_VOLTAGE failed");
+ usleep(15 * 1000);
+ if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd) == -1)
+ perror("FE_DISEQC_SEND_MASTER_CMD failed");
+ usleep(cmd->wait * 1000);
+ usleep(15 * 1000);
+ if (ioctl(fd, FE_DISEQC_SEND_BURST, b) == -1)
+ perror("FE_DISEQC_SEND_BURST failed");
+ usleep(15 * 1000);
+ if (ioctl(fd, FE_SET_TONE, t) == -1)
+ perror("FE_SET_TONE failed");
}
@@ -125,89 +125,89 @@ void diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd,
*/
static int diseqc(int secfd, int sat_no, int pol_vert, int hi_band)
{
- struct diseqc_cmd cmd =
- { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 };
+ struct diseqc_cmd cmd =
+ { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 };
- /* param: high nibble: reset bits, low nibble set bits,
- * bits are: option, position, polarization, band
- */
- cmd.cmd.msg[3] =
- 0xf0 | (((sat_no * 4) & 0x0f) | (hi_band ? 1 : 0) | (pol_vert ? 0 : 2));
+ /* param: high nibble: reset bits, low nibble set bits,
+ * bits are: option, position, polarization, band
+ */
+ cmd.cmd.msg[3] =
+ 0xf0 | (((sat_no * 4) & 0x0f) | (hi_band ? 1 : 0) | (pol_vert ? 0 : 2));
- diseqc_send_msg(secfd, pol_vert ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18,
- &cmd, hi_band ? SEC_TONE_ON : SEC_TONE_OFF,
- sat_no % 2 ? SEC_MINI_B : SEC_MINI_A);
+ diseqc_send_msg(secfd, pol_vert ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18,
+ &cmd, hi_band ? SEC_TONE_ON : SEC_TONE_OFF,
+ sat_no % 2 ? SEC_MINI_B : SEC_MINI_A);
- return TRUE;
+ return TRUE;
}
static int do_tune(int fefd, unsigned int ifreq, unsigned int sr)
{
- struct dvb_frontend_parameters tuneto;
- struct dvb_frontend_event ev;
-
- /* discard stale QPSK events */
- while (1) {
- if (ioctl(fefd, FE_GET_EVENT, &ev) == -1)
- break;
- }
-
- tuneto.frequency = ifreq;
- tuneto.inversion = INVERSION_AUTO;
- tuneto.u.qpsk.symbol_rate = sr;
- tuneto.u.qpsk.fec_inner = FEC_AUTO;
-
- if (ioctl(fefd, FE_SET_FRONTEND, &tuneto) == -1) {
- perror("FE_SET_FRONTEND failed");
- return FALSE;
- }
-
- return TRUE;
+ struct dvb_frontend_parameters tuneto;
+ struct dvb_frontend_event ev;
+
+ /* discard stale QPSK events */
+ while (1) {
+ if (ioctl(fefd, FE_GET_EVENT, &ev) == -1)
+ break;
+ }
+
+ tuneto.frequency = ifreq;
+ tuneto.inversion = INVERSION_AUTO;
+ tuneto.u.qpsk.symbol_rate = sr;
+ tuneto.u.qpsk.fec_inner = FEC_AUTO;
+
+ if (ioctl(fefd, FE_SET_FRONTEND, &tuneto) == -1) {
+ perror("FE_SET_FRONTEND failed");
+ return FALSE;
+ }
+
+ return TRUE;
}
-static
-int check_frontend (int fe_fd, int dvr, int human_readable)
+static int check_frontend (int fe_fd, int dvr, int human_readable)
{
- (void)dvr;
- fe_status_t status;
- uint16_t snr, signal;
- uint32_t ber, uncorrected_blocks;
- int timeout = 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 (human_readable) {
- printf ("status %02x | signal %3u%% | snr %3u%% | ber %d | unc %d | ",
- status, (signal * 100) / 0xffff, (snr * 100) / 0xffff, ber, uncorrected_blocks);
- } else {
- printf ("status %02x | signal %04x | snr %04x | ber %08x | unc %08x | ",
- status, signal, snr, ber, uncorrected_blocks);
- }
+ (void)dvr;
+ fe_status_t status;
+ uint16_t snr, signal;
+ uint32_t ber, uncorrected_blocks;
+ int timeout = 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 (human_readable) {
+ printf ("status %02x | signal %3u%% | snr %3u%% | ber %d | unc %d | ",
+ status, (signal * 100) / 0xffff, (snr * 100) / 0xffff, ber, uncorrected_blocks);
+ } else {
+ printf ("status %02x | signal %04x | snr %04x | ber %08x | unc %08x | ",
+ status, signal, snr, ber, uncorrected_blocks);
+ }
- if (status & FE_HAS_LOCK)
- printf("FE_HAS_LOCK");
- printf("\n");
+ if (status & FE_HAS_LOCK)
+ printf("FE_HAS_LOCK");
+ printf("\n");
- if (exit_after_tuning && ((status & FE_HAS_LOCK) || (++timeout >= 10)))
- break;
+ if (exit_after_tuning && ((status & FE_HAS_LOCK) || (++timeout >= 10)))
+ break;
- usleep(1000000);
- } while (1);
+ usleep(1000000);
+ } while (1);
- return 0;
+ return 0;
}
@@ -217,126 +217,125 @@ int zap_to(unsigned int adapter, unsigned int frontend, unsigned int demux,
unsigned int sr, unsigned int vpid, unsigned int apid, int sid,
int dvr, int rec_psi, int bypass, int human_readable)
{
- char fedev[128], dmxdev[128], auddev[128];
- static int fefd, dmxfda, dmxfdv, audiofd = -1, patfd, pmtfd;
- int pmtpid;
- uint32_t ifreq;
- int hiband, result;
- static struct dvb_frontend_info fe_info;
-
- if (!fefd) {
- snprintf(fedev, sizeof(fedev), FRONTENDDEVICE, adapter, frontend);
- snprintf(dmxdev, sizeof(dmxdev), DEMUXDEVICE, adapter, demux);
- snprintf(auddev, sizeof(auddev), AUDIODEVICE, adapter, demux);
- printf("using '%s' and '%s'\n", fedev, dmxdev);
-
- if ((fefd = open(fedev, O_RDWR | O_NONBLOCK)) < 0) {
- perror("opening frontend failed");
- return FALSE;
- }
-
- result = ioctl(fefd, FE_GET_INFO, &fe_info);
-
- if (result < 0) {
- perror("ioctl FE_GET_INFO failed");
- close(fefd);
- return FALSE;
- }
-
- if (fe_info.type != FE_QPSK) {
- fprintf(stderr, "frontend device is not a QPSK (DVB-S) device!\n");
- close(fefd);
- return FALSE;
- }
-
- if ((dmxfdv = open(dmxdev, O_RDWR)) < 0) {
- perror("opening video demux failed");
- close(fefd);
- return FALSE;
- }
-
- if ((dmxfda = open(dmxdev, O_RDWR)) < 0) {
- perror("opening audio demux failed");
- close(fefd);
- return FALSE;
- }
-
- if (dvr == 0) /* DMX_OUT_DECODER */
- audiofd = open(auddev, O_RDWR);
-
- if (rec_psi){
- if ((patfd = open(dmxdev, O_RDWR)) < 0) {
- perror("opening pat demux failed");
- close(audiofd);
- close(dmxfda);
- close(dmxfdv);
- close(fefd);
- return FALSE;
- }
-
- if ((pmtfd = open(dmxdev, O_RDWR)) < 0) {
- perror("opening pmt demux failed");
- close(patfd);
- close(audiofd);
- close(dmxfda);
- close(dmxfdv);
- close(fefd);
- return FALSE;
- }
- }
- }
-
- hiband = 0;
- if (lnb_type.switch_val && lnb_type.high_val &&
- freq >= lnb_type.switch_val)
- hiband = 1;
-
- if (hiband)
- ifreq = freq - lnb_type.high_val;
- else {
- if (freq < lnb_type.low_val)
- ifreq = lnb_type.low_val - freq;
- else
- ifreq = freq - lnb_type.low_val;
- }
- result = FALSE;
-
- if (diseqc(fefd, sat_no, pol, hiband))
- if (do_tune(fefd, ifreq, sr))
- if (set_pesfilter(dmxfdv, vpid, DMX_PES_VIDEO, dvr))
- if (audiofd >= 0)
- (void)ioctl(audiofd, AUDIO_SET_BYPASS_MODE, bypass);
- if (set_pesfilter(dmxfda, apid, DMX_PES_AUDIO, dvr)) {
- if (rec_psi) {
- pmtpid = get_pmt_pid(dmxdev, sid);
- if (pmtpid < 0) {
- result = FALSE;
- }
- if (pmtpid == 0) {
- fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
- result = FALSE;
- }
- if (set_pesfilter(patfd, 0, DMX_PES_OTHER, dvr))
- if (set_pesfilter(pmtfd, pmtpid, DMX_PES_OTHER, dvr))
- result = TRUE;
- } else {
- result = TRUE;
- }
- }
-
- check_frontend (fefd, dvr, human_readable);
-
- if (!interactive) {
- close(patfd);
- close(pmtfd);
- if (audiofd >= 0)
- close(audiofd);
- close(dmxfda);
- close(dmxfdv);
- close(fefd);
- }
-
- return result;
+ char fedev[128], dmxdev[128], auddev[128];
+ static int fefd, dmxfda, dmxfdv, audiofd = -1, patfd, pmtfd;
+ int pmtpid;
+ uint32_t ifreq;
+ int hiband, result;
+ static struct dvb_frontend_info fe_info;
+
+ if (!fefd) {
+ snprintf(fedev, sizeof(fedev), FRONTENDDEVICE, adapter, frontend);
+ snprintf(dmxdev, sizeof(dmxdev), DEMUXDEVICE, adapter, demux);
+ snprintf(auddev, sizeof(auddev), AUDIODEVICE, adapter, demux);
+ printf("using '%s' and '%s'\n", fedev, dmxdev);
+
+ if ((fefd = open(fedev, O_RDWR | O_NONBLOCK)) < 0) {
+ perror("opening frontend failed");
+ return FALSE;
+ }
+
+ result = ioctl(fefd, FE_GET_INFO, &fe_info);
+ if (result < 0) {
+ perror("ioctl FE_GET_INFO failed");
+ close(fefd);
+ return FALSE;
+ }
+
+ if (fe_info.type != FE_QPSK) {
+ fprintf(stderr, "frontend device is not a QPSK (DVB-S) device!\n");
+ close(fefd);
+ return FALSE;
+ }
+
+ if ((dmxfdv = open(dmxdev, O_RDWR)) < 0) {
+ perror("opening video demux failed");
+ close(fefd);
+ return FALSE;
+ }
+
+ if ((dmxfda = open(dmxdev, O_RDWR)) < 0) {
+ perror("opening audio demux failed");
+ close(fefd);
+ return FALSE;
+ }
+
+ if (dvr == 0) /* DMX_OUT_DECODER */
+ audiofd = open(auddev, O_RDWR);
+
+ if (rec_psi) {
+ if ((patfd = open(dmxdev, O_RDWR)) < 0) {
+ perror("opening pat demux failed");
+ close(audiofd);
+ close(dmxfda);
+ close(dmxfdv);
+ close(fefd);
+ return FALSE;
+ }
+ if ((pmtfd = open(dmxdev, O_RDWR)) < 0) {
+ perror("opening pmt demux failed");
+ close(patfd);
+ close(audiofd);
+ close(dmxfda);
+ close(dmxfdv);
+ close(fefd);
+ return FALSE;
+ }
+ }
+ }
+
+ hiband = 0;
+ if (lnb_type.switch_val && lnb_type.high_val && freq >= lnb_type.switch_val)
+ hiband = 1;
+
+ if (hiband)
+ ifreq = freq - lnb_type.high_val;
+ else {
+ if (freq < lnb_type.low_val)
+ ifreq = lnb_type.low_val - freq;
+ else
+ ifreq = freq - lnb_type.low_val;
+ }
+ result = FALSE;
+
+ if (diseqc(fefd, sat_no, pol, hiband))
+ if (do_tune(fefd, ifreq, sr))
+ if (set_pesfilter(dmxfdv, vpid, DMX_PES_VIDEO, dvr))
+ if (audiofd >= 0)
+ (void)ioctl(audiofd, AUDIO_SET_BYPASS_MODE, bypass);
+
+ if (set_pesfilter(dmxfda, apid, DMX_PES_AUDIO, dvr)) {
+ if (rec_psi) {
+ pmtpid = get_pmt_pid(dmxdev, sid);
+ if (pmtpid < 0) {
+ result = FALSE;
+ }
+ if (pmtpid == 0) {
+ fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
+ result = FALSE;
+ }
+ if (set_pesfilter(patfd, 0, DMX_PES_OTHER, dvr))
+ if (set_pesfilter(pmtfd, pmtpid, DMX_PES_OTHER, dvr))
+ result = TRUE;
+ } else {
+ result = TRUE;
+ }
+ }
+
+ check_frontend (fefd, dvr, human_readable);
+ if (!interactive) {
+ close(patfd);
+ close(pmtfd);
+
+ if (audiofd >= 0)
+ close(audiofd);
+
+ close(dmxfda);
+ close(dmxfdv);
+ close(fefd);
+ }
+
+ return result;
}
@@ -346,165 +345,174 @@ static int read_channels(const char *filename, int list_channels,
unsigned int demux, int dvr, int rec_psi,
int bypass, int human_readable)
{
- FILE *cfp;
- char buf[4096];
- char inp[256];
- char *field, *tmp, *p;
- unsigned int line;
- unsigned int freq, pol, sat_no, sr, vpid, apid, sid;
- int ret;
+ FILE *cfp;
+ char buf[4096];
+ char inp[256];
+ char *field, *tmp, *p;
+ unsigned int line;
+ unsigned int freq, pol, sat_no, sr, vpid, apid, sid;
+ int ret;
again:
- line = 0;
- if (!(cfp = fopen(filename, "r"))) {
- fprintf(stderr, "error opening channel list '%s': %d %m\n",
- filename, errno);
- return FALSE;
- }
+ line = 0;
+ if (!(cfp = fopen(filename, "r"))) {
+ fprintf(stderr, "error opening channel list '%s': %d %m\n",
+ filename, errno);
+ return FALSE;
+ }
+
+ if (interactive) {
+ fprintf(stderr, "\n>>> ");
+
+ if (!fgets(inp, sizeof(inp), stdin)) {
+ printf("\n");
+ return -1;
+ }
+ if (inp[0] == '-' && inp[1] == 'n') {
+ chan_no = strtoul(inp+2, NULL, 0);
+ chan_name = NULL;
+ if (!chan_no) {
+ fprintf(stderr, "bad channel number\n");
+ goto again;
+ }
+ } else {
+ p = strchr(inp, '\n');
+ if (p)
+ *p = '\0';
+ chan_name = inp;
+ chan_no = 0;
+ }
+ }
+
+ while (!feof(cfp)) {
+ if (fgets(buf, sizeof(buf), cfp)) {
+ line++;
+
+ if (chan_no && chan_no != line)
+ continue;
+
+ tmp = buf;
+ field = strsep(&tmp, ":");
+
+ if (!field)
+ goto syntax_err;
+
+ if (list_channels) {
+ printf("%03u %s\n", line, field);
+ continue;
+ }
+
+ if (chan_name && strcasecmp(chan_name, field) != 0)
+ continue;
+
+ printf("zapping to %d '%s':\n", line, field);
+
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
+
+ freq = strtoul(field, NULL, 0);
+
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
+
+ pol = (field[0] == 'h' ? 0 : 1);
+
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
+
+ sat_no = strtoul(field, NULL, 0);
- if (interactive) {
- fprintf(stderr, "\n>>> ");
- if (!fgets(inp, sizeof(inp), stdin)) {
- printf("\n");
- return -1;
- }
- if (inp[0] == '-' && inp[1] == 'n') {
- chan_no = strtoul(inp+2, NULL, 0);
- chan_name = NULL;
- if (!chan_no) {
- fprintf(stderr, "bad channel number\n");
- goto again;
- }
- } else {
- p = strchr(inp, '\n');
- if (p)
- *p = '\0';
- chan_name = inp;
- chan_no = 0;
- }
- }
-
- while (!feof(cfp)) {
- if (fgets(buf, sizeof(buf), cfp)) {
- line++;
-
- if (chan_no && chan_no != line)
- continue;
-
- tmp = buf;
- field = strsep(&tmp, ":");
-
- if (!field)
- goto syntax_err;
-
- if (list_channels) {
- printf("%03u %s\n", line, field);
- continue;
- }
-
- if (chan_name && strcasecmp(chan_name, field) != 0)
- continue;
-
- printf("zapping to %d '%s':\n", line, field);
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- freq = strtoul(field, NULL, 0);
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- pol = (field[0] == 'h' ? 0 : 1);
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- sat_no = strtoul(field, NULL, 0);
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- sr = strtoul(field, NULL, 0) * 1000;
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- vpid = strtoul(field, NULL, 0);
- if (!vpid)
- vpid = 0x1fff;
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- p = strchr(field, ';');
-
- if (p) {
- *p = '\0';
- p++;
- if (bypass) {
- if (!p || !*p)
- goto syntax_err;
- field = p;
- }
- }
-
- apid = strtoul(field, NULL, 0);
- if (!apid)
- apid = 0x1fff;
-
- if (!(field = strsep(&tmp, ":")))
- goto syntax_err;
-
- sid = strtoul(field, NULL, 0);
-
- printf("sat %u, frequency = %u MHz %c, symbolrate %u, "
- "vpid = 0x%04x, apid = 0x%04x sid = 0x%04x\n",
- sat_no, freq, pol ? 'V' : 'H', sr, vpid, apid, sid);
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
- fclose(cfp);
-
- ret = zap_to(adapter, frontend, demux, sat_no, freq * 1000,
- pol, sr, vpid, apid, sid, dvr, rec_psi, bypass, human_readable);
- if (interactive)
- goto again;
+ sr = strtoul(field, NULL, 0) * 1000;
- if (ret)
- return TRUE;
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
- return FALSE;
+ vpid = strtoul(field, NULL, 0);
+ if (!vpid)
+ vpid = 0x1fff;
- syntax_err:
- fprintf(stderr, "syntax error in line %u: '%s'\n", line, buf);
- } else if (ferror(cfp)) {
- fprintf(stderr, "error reading channel list '%s': %d %m\n",
- filename, errno);
- fclose(cfp);
- return FALSE;
- } else
- break;
- }
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
- fclose(cfp);
+ p = strchr(field, ';');
- if (!list_channels) {
- fprintf(stderr, "channel not found\n");
- if (!interactive)
- return FALSE;
- }
- if (interactive)
- goto again;
+ if (p) {
+ *p = '\0';
+ p++;
+ if (bypass) {
+ if (!p || !*p)
+ goto syntax_err;
+ field = p;
+ }
+ }
+ apid = strtoul(field, NULL, 0);
+ if (!apid)
+ apid = 0x1fff;
+
+ if (!(field = strsep(&tmp, ":")))
+ goto syntax_err;
+
+ sid = strtoul(field, NULL, 0);
+
+ printf("sat %u, frequency = %u MHz %c, symbolrate %u, "
+ "vpid = 0x%04x, apid = 0x%04x sid = 0x%04x\n",
+ sat_no, freq, pol ? 'V' : 'H', sr, vpid, apid, sid);
+
+ fclose(cfp);
+
+ ret = zap_to(adapter,
+ frontend,
+ demux,
+ sat_no,
+ freq * 1000,
+ pol,
+ sr,
+ vpid,
+ apid,
+ sid,
+ dvr,
+ rec_psi,
+ bypass,
+ human_readable);
+
+ if (interactive)
+ goto again;
+ if (ret)
+ return TRUE;
+
+ return FALSE;
+syntax_err:
+ fprintf(stderr, "syntax error in line %u: '%s'\n", line, buf);
+ } else if (ferror(cfp)) {
+ fprintf(stderr, "error reading channel list '%s': %d %m\n", filename, errno);
+ fclose(cfp);
+ return FALSE;
+ } else {
+ break;
+ }
+ }
+
+ fclose(cfp);
+ if (!list_channels) {
+ fprintf(stderr, "channel not found\n");
+ if (!interactive)
+ return FALSE;
+ }
+ if (interactive)
+ goto again;
- return TRUE;
+ return TRUE;
}
-void
-bad_usage(char *pname, int prlnb)
+void bad_usage(char *pname, int prlnb)
{
-int i;
-struct lnb_types_st *lnbp;
-char **cp;
+ int i;
+ struct lnb_types_st *lnbp;
+ char **cp;
if (!prlnb) {
fprintf (stderr, usage_str, pname);
@@ -523,107 +531,125 @@ char **cp;
int main(int argc, char *argv[])
{
- const char *home;
- char chanfile[2 * PATH_MAX];
- int list_channels = 0;
- unsigned int chan_no = 0;
- const char *chan_name = NULL;
- unsigned int adapter = 0, frontend = 0, demux = 0, dvr = 0, rec_psi = 0;
- int bypass = 0;
- int opt, copt = 0;
- int human_readable = 0;
-
- lnb_type = *lnb_enum(0);
- while ((opt = getopt(argc, argv, "Hhqrpn:a:f:d:c:l:xib")) != -1) {
- switch (opt)
- {
- case '?':
- case 'h':
- default:
- bad_usage(argv[0], 0);
- case 'b':
- bypass = 1;
- break;
- case 'q':
- list_channels = 1;
- break;
- case 'r':
- dvr = 1;
- break;
- case 'n':
- chan_no = strtoul(optarg, NULL, 0);
- break;
- case 'a':
- adapter = strtoul(optarg, NULL, 0);
- break;
- case 'f':
- frontend = strtoul(optarg, NULL, 0);
- break;
- case 'p':
- rec_psi = 1;
- break;
- case 'd':
- demux = strtoul(optarg, NULL, 0);
- break;
- case 'c':
- copt = 1;
- strncpy(chanfile, optarg, sizeof(chanfile));
- break;
- case 'l':
- if (lnb_decode(optarg, &lnb_type) < 0) {
- bad_usage(argv[0], 1);
+ const char *home;
+ char chanfile[2 * PATH_MAX];
+ int list_channels = 0;
+ unsigned int chan_no = 0;
+ const char *chan_name = NULL;
+ unsigned int adapter = 0, frontend = 0, demux = 0, dvr = 0, rec_psi = 0;
+ int bypass = 0;
+ int opt, copt = 0;
+ int human_readable = 0;
+
+ lnb_type = *lnb_enum(0);
+
+ while ((opt = getopt(argc, argv, "Hhqrpn:a:f:d:c:l:xib")) != -1) {
+ switch (opt) {
+ case '?':
+ case 'h':
+ default:
+ bad_usage(argv[0], 0);
+ case 'b':
+ bypass = 1;
+ break;
+ case 'q':
+ list_channels = 1;
+ break;
+ case 'r':
+ dvr = 1;
+ break;
+ case 'n':
+ chan_no = strtoul(optarg, NULL, 0);
+ break;
+ case 'a':
+ adapter = strtoul(optarg, NULL, 0);
+ break;
+ case 'f':
+ frontend = strtoul(optarg, NULL, 0);
+ break;
+ case 'p':
+ rec_psi = 1;
+ break;
+ case 'd':
+ demux = strtoul(optarg, NULL, 0);
+ break;
+ case 'c':
+ copt = 1;
+ strncpy(chanfile, optarg, sizeof(chanfile));
+ break;
+ case 'l':
+ if (lnb_decode(optarg, &lnb_type) < 0) {
+ bad_usage(argv[0], 1);
+ return -1;
+ }
+ break;
+ case 'x':
+ exit_after_tuning = 1;
+ break;
+ case 'H':
+ human_readable = 1;
+ break;
+ case 'i':
+ interactive = 1;
+ exit_after_tuning = 1;
+ }
+ }
+ lnb_type.low_val *= 1000; /* convert to kiloherz */
+ lnb_type.high_val *= 1000; /* convert to kiloherz */
+ lnb_type.switch_val *= 1000; /* convert to kiloherz */
+
+ if (optind < argc)
+ chan_name = argv[optind];
+
+ if (chan_name && chan_no) {
+ bad_usage(argv[0], 0);
+ return -1;
+ }
+ if (list_channels && (chan_name || chan_no)) {
+ bad_usage(argv[0], 0);
+ return -1;
+ }
+ if (!list_channels && !chan_name && !chan_no && !interactive) {
+ bad_usage(argv[0], 0);
return -1;
- }
- break;
- case 'x':
- exit_after_tuning = 1;
- break;
- case 'H':
- human_readable = 1;
- break;
- case 'i':
- interactive = 1;
- exit_after_tuning = 1;
- }
- }
- lnb_type.low_val *= 1000; /* convert to kiloherz */
- lnb_type.high_val *= 1000; /* convert to kiloherz */
- lnb_type.switch_val *= 1000; /* convert to kiloherz */
- if (optind < argc)
- chan_name = argv[optind];
- if (chan_name && chan_no) {
- bad_usage(argv[0], 0);
- return -1;
- }
- if (list_channels && (chan_name || chan_no)) {
- bad_usage(argv[0], 0);
- return -1;
- }
- if (!list_channels && !chan_name && !chan_no && !interactive) {
- bad_usage(argv[0], 0);
- return -1;
- }
-
- if (!copt) {
- if (!(home = getenv("HOME"))) {
- fprintf(stderr, "error: $HOME not set\n");
- return TRUE;
- }
- snprintf(chanfile, sizeof(chanfile),
- "%s/.szap/%i/%s", home, adapter, CHANNEL_FILE);
- if (access(chanfile, R_OK))
- snprintf(chanfile, sizeof(chanfile),
- "%s/.szap/%s", home, CHANNEL_FILE);
- }
-
- printf("reading channels from file '%s'\n", chanfile);
-
- if (rec_psi)
- dvr=1;
-
- if (!read_channels(chanfile, list_channels, chan_no, chan_name,
- adapter, frontend, demux, dvr, rec_psi, bypass, human_readable))
- return TRUE;
-
- return FALSE;
+ }
+
+ if (!copt) {
+ if (!(home = getenv("HOME"))) {
+ fprintf(stderr, "error: $HOME not set\n");
+ return TRUE;
+ }
+ snprintf(chanfile,
+ sizeof(chanfile),
+ "%s/.szap/%i/%s",
+ home,
+ adapter,
+ CHANNEL_FILE);
+
+ if (access(chanfile, R_OK))
+ snprintf(chanfile,
+ sizeof(chanfile),
+ "%s/.szap/%s",
+ home,
+ CHANNEL_FILE);
+ }
+ printf("reading channels from file '%s'\n", chanfile);
+
+ if (rec_psi)
+ dvr=1;
+
+ if (!read_channels(chanfile,
+ list_channels,
+ chan_no,
+ chan_name,
+ adapter,
+ frontend,
+ demux,
+ dvr,
+ rec_psi,
+ bypass,
+ human_readable))
+ return TRUE;
+
+ return FALSE;
}
diff --git a/util/szap/tzap.c b/util/szap/tzap.c
index b24bc2c..ce63832 100644
--- a/util/szap/tzap.c
+++ b/util/szap/tzap.c
@@ -47,18 +47,18 @@ static int exit_after_tuning;
#define CHANNEL_FILE "channels.conf"
#define ERROR(x...) \
- do { \
- fprintf(stderr, "ERROR: "); \
- fprintf(stderr, x); \
- fprintf (stderr, "\n"); \
- } while (0)
+ do { \
+ fprintf(stderr, "ERROR: "); \
+ fprintf(stderr, x); \
+ fprintf (stderr, "\n"); \
+ } while (0)
#define PERROR(x...) \
- do { \
- fprintf(stderr, "ERROR: "); \
- fprintf(stderr, x); \
- fprintf (stderr, " (%s)\n", strerror(errno)); \
- } while (0)
+ do { \
+ fprintf(stderr, "ERROR: "); \
+ fprintf(stderr, x); \
+ fprintf (stderr, " (%s)\n", strerror(errno)); \
+ } while (0)
typedef struct {
@@ -125,9 +125,7 @@ static const Param transmissionmode_list [] = {
#define LIST_SIZE(x) sizeof(x)/sizeof(Param)
-
-static
-int parse_param (int fd, const Param * plist, int list_size, int *param)
+static int parse_param (int fd, const Param * plist, int list_size, int *param)
{
char c;
int character = 0;
@@ -157,8 +155,7 @@ int parse_param (int fd, const Param * plist, int list_size, int *param)
}
-static
-int parse_int(int fd, int *val)
+static int parse_int(int fd, int *val)
{
char number[11]; /* 2^32 needs 10 digits... */
int character = 0;
@@ -190,8 +187,7 @@ int parse_int(int fd, int *val)
}
-static
-int find_channel(int fd, const char *channel)
+static int find_channel(int fd, const char *channel)
{
int character = 0;
@@ -346,13 +342,11 @@ int parse(const char *fname, const char *channel,
if ((err = try_parse_int(fd, apid, "Audio PID")))
return -13;
-
+
if ((err = try_parse_int(fd, sid, "Service ID")))
return -14;
-
-
- close(fd);
+ close(fd);
return 0;
}
@@ -372,7 +366,7 @@ int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend)
return -1;
}
- if (silent<2)
+ if (silent < 2)
fprintf (stderr,"tuning to %i Hz\n", frontend->frequency);
if (ioctl(fe_fd, FE_SET_FRONTEND, frontend) < 0) {
@@ -383,25 +377,20 @@ int setup_frontend (int fe_fd, struct dvb_frontend_parameters *frontend)
return 0;
}
-static void
-do_timeout(int x)
+static void do_timeout(int x)
{
(void)x;
- if (timeout_flag==0)
- {
- timeout_flag=1;
+ if (timeout_flag == 0) {
+ timeout_flag = 1;
alarm(2);
signal(SIGALRM, do_timeout);
- }
- else
- {
+ } else {
/* something has gone wrong ... exit */
exit(1);
}
}
-static void
-print_frontend_stats (int fe_fd, int human_readable)
+static void print_frontend_stats(int fe_fd, int human_readable)
{
fe_status_t status;
uint16_t snr, _signal;
@@ -446,14 +435,13 @@ int check_frontend (int fe_fd, int human_readable)
}
#define BUFLEN (188*256)
-static
-void copy_to_file(int in_fd, int out_fd)
+static void copy_to_file(int in_fd, int out_fd)
{
char buf[BUFLEN];
int r;
long long int rc = 0LL;
- while(timeout_flag==0)
- {
+
+ while (timeout_flag==0) {
r=read(in_fd,buf,BUFLEN);
if (r < 0) {
if (errno == EOVERFLOW) {
@@ -469,36 +457,36 @@ void copy_to_file(int in_fd, int out_fd)
}
rc+=r;
}
- if (silent<2)
- {
+
+ if (silent<2) {
fprintf(stderr, "copied %lld bytes (%lld Kbytes/sec)\n",rc,rc/(1024*timeout));
}
}
static char *usage =
- "usage:\n"
- " tzap [options] <channel_name>\n"
- " zap to channel channel_name (case insensitive)\n"
- " -a number : use given adapter (default 0)\n"
- " -f number : use given frontend (default 0)\n"
- " -d number : use given demux (default 0)\n"
- " -c file : read channels list from 'file'\n"
- " -x : exit after tuning\n"
- " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
- " -p : add pat and pmt to TS recording (implies -r)\n"
- " -s : only print summary\n"
- " -S : run silently (no output)\n"
- " -H : human readable output\n"
- " -F : set up frontend only, don't touch demux\n"
- " -t number : timeout (seconds)\n"
- " -o file : output filename (use -o - for stdout)\n"
- " -h -? : display this help and exit\n";
+ "usage:\n"
+ " tzap [options] <channel_name>\n"
+ " zap to channel channel_name (case insensitive)\n"
+ " -a number : use given adapter (default 0)\n"
+ " -f number : use given frontend (default 0)\n"
+ " -d number : use given demux (default 0)\n"
+ " -c file : read channels list from 'file'\n"
+ " -x : exit after tuning\n"
+ " -r : set up /dev/dvb/adapterX/dvr0 for TS recording\n"
+ " -p : add pat and pmt to TS recording (implies -r)\n"
+ " -s : only print summary\n"
+ " -S : run silently (no output)\n"
+ " -H : human readable output\n"
+ " -F : set up frontend only, don't touch demux\n"
+ " -t number : timeout (seconds)\n"
+ " -o file : output filename (use -o - for stdout)\n"
+ " -h -? : display this help and exit\n";
int main(int argc, char **argv)
{
struct dvb_frontend_parameters frontend_param;
- char *homedir = getenv ("HOME");
+ char *homedir = getenv("HOME");
char *confname = NULL;
char *channel = NULL;
int adapter = 0, frontend = 0, demux = 0, dvr = 0;
@@ -569,32 +557,37 @@ int main(int argc, char **argv)
return -1;
}
- snprintf (FRONTEND_DEV, sizeof(FRONTEND_DEV),
- "/dev/dvb/adapter%i/frontend%i", adapter, frontend);
+ snprintf(FRONTEND_DEV,
+ sizeof(FRONTEND_DEV),
+ "/dev/dvb/adapter%i/frontend%i",
+ adapter,
+ frontend);
- snprintf (DEMUX_DEV, sizeof(DEMUX_DEV),
- "/dev/dvb/adapter%i/demux%i", adapter, demux);
+ snprintf(DEMUX_DEV,
+ sizeof(DEMUX_DEV),
+ "/dev/dvb/adapter%i/demux%i",
+ adapter,
+ demux);
- snprintf (DVR_DEV, sizeof(DVR_DEV),
- "/dev/dvb/adapter%i/dvr%i", adapter, demux);
+ snprintf(DVR_DEV,
+ sizeof(DVR_DEV),
+ "/dev/dvb/adapter%i/dvr%i",
+ adapter,
+ demux);
- if (silent<2)
+ if (silent < 2)
fprintf (stderr,"using '%s' and '%s'\n", FRONTEND_DEV, DEMUX_DEV);
- if (!confname)
- {
+ if (!confname) {
int len = strlen(homedir) + strlen(CHANNEL_FILE) + 18;
if (!homedir)
ERROR ("$HOME not set");
confname = malloc (len);
- snprintf (confname, len, "%s/.tzap/%i/%s",
- homedir, adapter, CHANNEL_FILE);
+ snprintf(confname, len, "%s/.tzap/%i/%s", homedir, adapter, CHANNEL_FILE);
if (access (confname, R_OK))
- snprintf (confname, len, "%s/.tzap/%s",
- homedir, CHANNEL_FILE);
+ snprintf(confname, len, "%s/.tzap/%s", homedir, CHANNEL_FILE);
}
printf("reading channels from file '%s'\n", confname);
-
memset(&frontend_param, 0, sizeof(struct dvb_frontend_parameters));
if (parse (confname, channel, &frontend_param, &vpid, &apid, &sid))
@@ -612,71 +605,62 @@ int main(int argc, char **argv)
goto just_the_frontend_dude;
if (rec_psi) {
- pmtpid = get_pmt_pid(DEMUX_DEV, sid);
- if (pmtpid <= 0) {
- fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
- return -1;
- }
+ pmtpid = get_pmt_pid(DEMUX_DEV, sid);
+ if (pmtpid <= 0) {
+ fprintf(stderr,"couldn't find pmt-pid for sid %04x\n",sid);
+ return -1;
+ }
- if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- perror("opening pat demux failed");
- return -1;
- }
- if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0)
- return -1;
+ if ((pat_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ perror("opening pat demux failed");
+ return -1;
+ }
+ if (set_pesfilter(pat_fd, 0, DMX_PES_OTHER, dvr) < 0)
+ return -1;
- if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- perror("opening pmt demux failed");
- return -1;
- }
- if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0)
- return -1;
+ if ((pmt_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ perror("opening pmt demux failed");
+ return -1;
+ }
+ if (set_pesfilter(pmt_fd, pmtpid, DMX_PES_OTHER, dvr) < 0)
+ return -1;
}
- if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- PERROR("failed opening '%s'", DEMUX_DEV);
- return -1;
- }
+ if ((video_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
+ PERROR("failed opening '%s'", DEMUX_DEV);
+ return -1;
+ }
if (silent<2)
- fprintf (stderr,"video pid 0x%04x, audio pid 0x%04x\n", vpid, apid);
+ fprintf(stderr,"video pid 0x%04x, audio pid 0x%04x\n", vpid, apid);
- if (set_pesfilter (video_fd, vpid, DMX_PES_VIDEO, dvr) < 0)
+ if (set_pesfilter(video_fd, vpid, DMX_PES_VIDEO, dvr) < 0)
return -1;
if ((audio_fd = open(DEMUX_DEV, O_RDWR)) < 0) {
- PERROR("failed opening '%s'", DEMUX_DEV);
- return -1;
- }
+ PERROR("failed opening '%s'", DEMUX_DEV);
+ return -1;
+ }
- if (set_pesfilter (audio_fd, apid, DMX_PES_AUDIO, dvr) < 0)
+ if (set_pesfilter(audio_fd, apid, DMX_PES_AUDIO, dvr) < 0)
return -1;
signal(SIGALRM,do_timeout);
- if (timeout>0)
+ if (timeout > 0)
alarm(timeout);
-
- if (record)
- {
- if (filename!=NULL)
- {
- if (strcmp(filename,"-")!=0)
- {
- file_fd = open (filename,O_WRONLY|O_LARGEFILE|O_CREAT,0644);
- if (file_fd<0)
- {
+ if (record) {
+ if (filename!=NULL) {
+ if (strcmp(filename,"-")!=0) {
+ file_fd = open(filename,O_WRONLY|O_LARGEFILE|O_CREAT,0644);
+ if (file_fd<0) {
PERROR("open of '%s' failed",filename);
return -1;
}
- }
- else
- {
+ } else {
file_fd=1;
}
- }
- else
- {
+ } else {
PERROR("Record mode but no filename!");
return -1;
}
@@ -686,23 +670,21 @@ int main(int argc, char **argv)
return -1;
}
if (silent<2)
- print_frontend_stats (frontend_fd, human_readable);
+ print_frontend_stats(frontend_fd, human_readable);
copy_to_file(dvr_fd,file_fd);
if (silent<2)
- print_frontend_stats (frontend_fd, human_readable);
- }
- else {
+ print_frontend_stats(frontend_fd, human_readable);
+ } else {
just_the_frontend_dude:
- check_frontend (frontend_fd, human_readable);
+ check_frontend(frontend_fd, human_readable);
}
- close (pat_fd);
- close (pmt_fd);
- close (audio_fd);
- close (video_fd);
- close (frontend_fd);
-
+ close(pat_fd);
+ close(pmt_fd);
+ close(audio_fd);
+ close(video_fd);
+ close(frontend_fd);
return 0;
}
diff --git a/util/szap/util.c b/util/szap/util.c
index 301d666..99d303a 100644
--- a/util/szap/util.c
+++ b/util/szap/util.c
@@ -35,92 +35,89 @@
int set_pesfilter(int dmxfd, int pid, int pes_type, int dvr)
{
- struct dmx_pes_filter_params pesfilter;
+ struct dmx_pes_filter_params pesfilter;
- /* ignore this pid to allow radio services */
- if (pid < 0 ||
- pid >= 0x1fff ||
- (pid == 0 && pes_type != DMX_PES_OTHER))
- return 0;
+ /* ignore this pid to allow radio services */
+ if (pid < 0 || pid >= 0x1fff || (pid == 0 && pes_type != DMX_PES_OTHER))
+ return 0;
+
+ if (dvr) {
+ int buffersize = 64 * 1024;
+ if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1)
+ perror("DMX_SET_BUFFER_SIZE failed");
+ }
- if (dvr) {
- int buffersize = 64 * 1024;
- if (ioctl(dmxfd, DMX_SET_BUFFER_SIZE, buffersize) == -1)
- perror("DMX_SET_BUFFER_SIZE failed");
- }
-
- pesfilter.pid = pid;
- pesfilter.input = DMX_IN_FRONTEND;
- pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
- pesfilter.pes_type = pes_type;
- pesfilter.flags = DMX_IMMEDIATE_START;
-
- if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) {
- fprintf(stderr, "DMX_SET_PES_FILTER failed "
- "(PID = 0x%04x): %d %m\n", pid, errno);
- return -1;
- }
-
- return 0;
+ pesfilter.pid = pid;
+ pesfilter.input = DMX_IN_FRONTEND;
+ pesfilter.output = dvr ? DMX_OUT_TS_TAP : DMX_OUT_DECODER;
+ pesfilter.pes_type = pes_type;
+ pesfilter.flags = DMX_IMMEDIATE_START;
+
+ if (ioctl(dmxfd, DMX_SET_PES_FILTER, &pesfilter) == -1) {
+ fprintf(stderr, "DMX_SET_PES_FILTER failed "
+ "(PID = 0x%04x): %d %m\n", pid, errno);
+ return -1;
+ }
+ return 0;
}
int get_pmt_pid(char *dmxdev, int sid)
{
- int patfd, count;
- int pmt_pid = 0;
- int patread = 0;
- int section_length;
- unsigned char buft[4096];
- unsigned char *buf = buft;
- struct dmx_sct_filter_params f;
-
- memset(&f, 0, sizeof(f));
- f.pid = 0;
- f.filter.filter[0] = 0x00;
- f.filter.mask[0] = 0xff;
- f.timeout = 0;
- f.flags = DMX_IMMEDIATE_START | DMX_CHECK_CRC;
-
- if ((patfd = open(dmxdev, O_RDWR)) < 0) {
- perror("openening pat demux failed");
- return -1;
- }
-
- if (ioctl(patfd, DMX_SET_FILTER, &f) == -1) {
- perror("ioctl DMX_SET_FILTER failed");
- close(patfd);
- return -1;
- }
-
- while (!patread){
- if (((count = read(patfd, buf, sizeof(buft))) < 0) && errno == EOVERFLOW)
- count = read(patfd, buf, sizeof(buft));
- if (count < 0) {
- perror("read_sections: read error");
- close(patfd);
- return -1;
+ int patfd, count;
+ int pmt_pid = 0;
+ int patread = 0;
+ int section_length;
+ unsigned char buft[4096];
+ unsigned char *buf = buft;
+ struct dmx_sct_filter_params f;
+
+ memset(&f, 0, sizeof(f));
+ f.pid = 0;
+ f.filter.filter[0] = 0x00;
+ f.filter.mask[0] = 0xff;
+ f.timeout = 0;
+ f.flags = DMX_IMMEDIATE_START | DMX_CHECK_CRC;
+
+ if ((patfd = open(dmxdev, O_RDWR)) < 0) {
+ perror("openening pat demux failed");
+ return -1;
}
-
- section_length = ((buf[1] & 0x0f) << 8) | buf[2];
- if (count != section_length + 3)
- continue;
-
- buf += 8;
- section_length -= 8;
-
- patread = 1; /* assumes one section contains the whole pat */
- while (section_length > 0) {
- int service_id = (buf[0] << 8) | buf[1];
- if (service_id == sid) {
- pmt_pid = ((buf[2] & 0x1f) << 8) | buf[3];
- section_length = 0;
- }
- buf += 4;
- section_length -= 4;
+
+ if (ioctl(patfd, DMX_SET_FILTER, &f) == -1) {
+ perror("ioctl DMX_SET_FILTER failed");
+ close(patfd);
+ return -1;
}
- }
- close(patfd);
- return pmt_pid;
+ while (!patread) {
+ if (((count = read(patfd, buf, sizeof(buft))) < 0) && errno == EOVERFLOW)
+ count = read(patfd, buf, sizeof(buft));
+
+ if (count < 0) {
+ perror("read_sections: read error");
+ close(patfd);
+ return -1;
+ }
+ section_length = ((buf[1] & 0x0f) << 8) | buf[2];
+ if (count != section_length + 3)
+ continue;
+
+ buf += 8;
+ section_length -= 8;
+
+ patread = 1; /* assumes one section contains the whole pat */
+ while (section_length > 0) {
+ int service_id = (buf[0] << 8) | buf[1];
+
+ if (service_id == sid) {
+ pmt_pid = ((buf[2] & 0x1f) << 8) | buf[3];
+ section_length = 0;
+ }
+ buf += 4;
+ section_length -= 4;
+ }
+ }
+ close(patfd);
+ return pmt_pid;
}