⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_switch.c

📁 linux TV 源码
💻 C
字号:
/*  * test_switch.c - Test program for new API * * Copyright (C) 2001 Ralph  Metzler <ralph@convergence.de> *                  & Marcus Metzler <marcus@convergence.de>                      for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * 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 Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. * */#include <sys/ioctl.h>#include <stdio.h>#include <stdint.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <time.h>#include <sys/poll.h>#include <linux/dvb/dmx.h>#include <linux/dvb/frontend_old.h>#include <linux/dvb/sec.h>#include <linux/dvb/video.h>int fd_frontend;int fd_sec;int fd_demuxa;int fd_demuxv;int fd_demuxtt;struct dmx_sct_filter_params sctFilterParams;	struct secCommand scmd;struct secCmdSequence scmds;struct dmx_pes_filter_params pesFilterParams; struct dmx_pes_filter_params pesFilterParamsV; struct dmx_pes_filter_params pesFilterParamsA; struct dmx_pes_filter_params pesFilterParamsTT; FrontendParameters frp;int front_type;set_front(void) {	fe_status_t stat = 0;	int i, freq;	uint32_t soff;	  	scmds.miniCommand = SEC_MINI_NONE;	scmds.numCommands = 1;	scmds.commands = &scmd;		soff = frp.u.qpsk.SymbolRate/16000;	if (ioctl(fd_sec, SEC_SEND_SEQUENCE, &scmds) < 0)		perror("setfront sec");	usleep(100000);			freq = frp.Frequency;			while(tune_it(&frp));}	        set_diseqc_nb(int nr) {	scmd.type=0;	scmd.u.diseqc.addr = 0x10;	scmd.u.diseqc.cmd = 0x38;	scmd.u.diseqc.numParams = 1;	scmd.u.diseqc.params[0] = 0xF0 | ((nr * 4) & 0x0F) | 	  (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |	  (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);}set_ttpid(ushort ttpid) {          if (ttpid==0 || ttpid==0xffff || ttpid==0x1fff) {	        ioctl(fd_demuxtt, DMX_STOP, 0);	        return;	}	pesFilterParamsTT.pid     = ttpid;	pesFilterParamsTT.input   = DMX_IN_FRONTEND; 	pesFilterParamsTT.output  = DMX_OUT_DECODER; 	pesFilterParamsTT.pes_type = DMX_PES_TELETEXT; 	pesFilterParamsTT.flags   = DMX_IMMEDIATE_START;	if (ioctl(fd_demuxtt, DMX_SET_PES_FILTER, 		  &pesFilterParamsTT) < 0) {	  printf("PID=%04x\n", ttpid);		perror("set_ttpid");	}}set_vpid(ushort vpid) {          if (vpid==0 || vpid==0xffff || vpid==0x1fff) {	        ioctl(fd_demuxv, DMX_STOP, 0);	        return;	}	pesFilterParamsV.pid     = vpid;	pesFilterParamsV.input   = DMX_IN_FRONTEND; 	pesFilterParamsV.output  = DMX_OUT_DECODER; 	pesFilterParamsV.pes_type = DMX_PES_VIDEO; 	pesFilterParamsV.flags   = DMX_IMMEDIATE_START;	if (ioctl(fd_demuxv, DMX_SET_PES_FILTER, 		  &pesFilterParamsV) < 0)		perror("set_vpid");}set_apid(ushort apid) {          if (apid==0 || apid==0xffff || apid==0x1fff) {	        ioctl(fd_demuxa, DMX_STOP, apid);	        return;	}	pesFilterParamsA.pid = apid;	pesFilterParamsA.input = DMX_IN_FRONTEND; 	pesFilterParamsA.output = DMX_OUT_DECODER; 	pesFilterParamsA.pes_type = DMX_PES_AUDIO; 	pesFilterParamsA.flags = DMX_IMMEDIATE_START;	if (ioctl(fd_demuxa, DMX_SET_PES_FILTER, 		  &pesFilterParamsA) < 0)		perror("set_apid");}int tune_it(FrontendParameters *frp){	fe_status_t stat = 0;	int res;	FrontendEvent event;	int count = 0;	struct pollfd pfd[1];	if (ioctl(fd_frontend, FE_SET_FRONTEND, frp) <0)		perror("setfront front");	pfd[0].fd = fd_frontend;	pfd[0].events = POLLIN;	if (poll(pfd,1,3000)){		if (pfd[0].revents & POLLIN){			printf("Getting QPSK event\n");			if ( ioctl(fd_frontend, FE_GET_EVENT, &event)  			     == -EOVERFLOW){				perror("qpsk get event");				return -1;			}			printf("Received ");			switch(event.type){			case FE_UNEXPECTED_EV:				printf("unexpected event\n");				return -1;			case FE_FAILURE_EV:				printf("failure event\n");				return -1;							case FE_COMPLETION_EV:				printf("completion event\n");			}		}	}	return 0;}set_tp(uint *freq, int ttk, int pol, uint srate, int dis) {	if (*freq < 11700000) {		frp.Frequency = (*freq - 9750000);		scmds.continuousTone = SEC_TONE_OFF;	} else {		frp.Frequency = (*freq - 10600000);		scmds.continuousTone = SEC_TONE_ON;	}	if (pol) scmds.voltage = SEC_VOLTAGE_18;	else scmds.voltage = SEC_VOLTAGE_13;	set_diseqc_nb(dis);	frp.u.qpsk.SymbolRate = srate;	frp.u.qpsk.FEC_inner = 0;}get_front(void) {	set_vpid(0);	set_apid(0);	set_ttpid(0);	scmds.voltage = SEC_VOLTAGE_18; 	scmds.miniCommand = SEC_MINI_NONE;	scmds.continuousTone = SEC_TONE_OFF;	scmds.numCommands=1;	scmds.commands=&scmd;		frp.Frequency=(12073000-10600000);	frp.u.qpsk.SymbolRate=25378000;	frp.u.qpsk.FEC_inner=(fe_code_rate_t)5;}	          void get_sect(int fd){        u_char sec[4096];        int len, i;        uint16_t cpid = 0;        uint16_t length;        struct pollfd pfd;               pfd.fd = fd;        pfd.events = POLLIN;       	while (1){		if (poll(&pfd, 1, 5000) != POLLIN) {			printf("not found\n");			printf("Timeout\n");		} else {			len = read(fd, sec, 4096);			length  = (sec[1]& 0x0F)<<8;			length |= (sec[2]& 0xFF);        			for (i= 0; i < length+3; i++) {				printf("0x%02x ",sec[i]);				if ( !((i+1)%8))					printf("\n");			}			printf("\n");		}	}}int FEReadStatus(int fd, fe_status_t *stat){	int ans;	if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){		perror("FE READ STATUS: ");		return -1;	}	if (*stat & FE_HAS_POWER)		printf("FE HAS POWER\n");	if (*stat & FE_HAS_SIGNAL)		printf("FE HAS SIGNAL\n");	if (*stat & FE_SPECTRUM_INV)		printf("QPSK SPEKTRUM INV\n");	return 0;}int has_signal(){	fe_status_t stat;		FEReadStatus(fd_frontend, &stat);	if (stat & FE_HAS_SIGNAL)		return 1;	else {		printf("Tuning failed\n");		return 0;	}}main(){	int freq;	fd_demuxtt = open("/dev/ost/demux", O_RDWR|O_NONBLOCK);	fd_frontend = open("/dev/ost/frontend", O_RDWR);	fd_sec = open("/dev/ost/sec", O_RDWR);	fd_demuxa = open("/dev/ost/demux", O_RDWR|O_NONBLOCK);	fd_demuxv = open("/dev/ost/demux", O_RDWR|O_NONBLOCK);//	get_front();//        set_vpid(0x7d0);//       set_apid(0x7d2);//	set_ttpid(0);//	freq = 12073000;//	set_tp(&freq, 1, 1, 25378000, 3);//	set_diseqc_nb(dis);	scmds.voltage = SEC_VOLTAGE_18;//	scmds.voltage = SEC_VOLTAGE_13;	scmds.miniCommand = SEC_MINI_NONE;	scmds.continuousTone = SEC_TONE_OFF;	scmds.numCommands=1;	scmds.commands=&scmd;	frp.Frequency = (12073000 - 10600000);//	frp.Frequency = (11975000 - 10600000);	scmds.continuousTone = SEC_TONE_ON; 	frp.u.qpsk.SymbolRate = 25378000;//	frp.u.qpsk.SymbolRate = 27500000;//	frp.u.qpsk.FEC_inner = FEC_AUTO;	frp.u.qpsk.FEC_inner = (fe_code_rate_t)5;	scmd.type=0;	scmd.u.diseqc.addr = 0x10;	scmd.u.diseqc.cmd = 0x38;	scmd.u.diseqc.numParams = 1;	scmd.u.diseqc.params[0] = 0xF0 | ((3 * 4) & 0x0F) | 	  (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |	  (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);	if (ioctl(fd_sec, SEC_SEND_SEQUENCE, &scmds) < 0)		perror("setfront sec");	while(tune_it(&frp));/*	if ((fd_demuxa=open("/dev/ost/demux", O_RDWR|O_NONBLOCK)) 	    < 0){		perror("DEMUX DEVICE: ");		return -1;	}        memset(&sctFilterParams.filter, 0, sizeof(struct dmx_filter));        sctFilterParams.pid                       = 0x1fff;        sctFilterParams.filter.filter[0]          = 0x00;        sctFilterParams.filter.mask[0]            = 0x00;        sctFilterParams.timeout                   = 0;        sctFilterParams.flags                     = DMX_IMMEDIATE_START;        if (ioctl(fd_demuxa, DMX_SET_FILTER, &sctFilterParams) < 0)                  perror("DMX SET FILTER:");	get_sect(fd_demuxa);*/	pesFilterParamsA.pid = 0x1fff;	pesFilterParamsA.input = DMX_IN_FRONTEND; 	pesFilterParamsA.output = DMX_OUT_TS_TAP; 	pesFilterParamsA.pes_type = DMX_PES_OTHER; 	pesFilterParamsA.flags = DMX_IMMEDIATE_START;	if (ioctl(fd_demuxa, DMX_SET_PES_FILTER, 		  &pesFilterParamsA) < 0)		perror("set_apid");	while(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -