Re: hvr4000-s2api + QAM_AUTO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Le Monday 22 September 2008 01:54:29 Hans Werner, vous avez écrit :
> -------- Original-Nachricht --------
>
> > Datum: Sun, 21 Sep 2008 19:05:34 +0200
> > Von: Christophe Thommeret <hftom@xxxxxxx>
> > An: Steven Toth <stoth@xxxxxxxxxxx>, "linux-dvb" <linux-dvb@xxxxxxxxxxx>
> > Betreff:  hvr4000-s2api + QAM_AUTO
> >
> > Hi Steve,
> >
> > I've managed to add S2 support to kaffeine, so it can scan and zap.
> > However, i have a little problem with DVB-S:
> > Before tuning to S2, S channels tune well with QAM_AUTO.
> > But after having tuned to S2 channels, i can no more lock on S ones until
> > i
> > set modulation to QPSK insteed of QAM_AUTO for these S channels.
> > Is this known?
> >
> > --
> > Christophe Thommeret
>
> Hi Christophe,
> do you mean FEC_AUTO? There is a note in the comments in cx24116.c about
> FEC_AUTO working for QPSK but not for S2 (8PSK or NBC-QPSK).
> Look for "Especially, no auto detect when in S2 mode."

Good to know, but i really mean QAM_AUTO

> I'd be very happy to try out your patch for Kaffeine and give feedback if
> you are ready to share it.

Sure, here it is (patch against current svn 
http://websvn.kde.org/branches/extragear/kde3/multimedia/)

Atm, s2api is only used for S/S2.

P.S.
In order to play H264/HD with kaffeine/xine, you need a fairly recent ffmpeg 
and xine compiled with --with-external-ffmpeg configure option. (and of 
course a quite strong cpu, unlike my old athlon-xp-2600 :)
However, you can still record and/or broadcast without this update.

-- 
Christophe Thommeret
Index: src/kaffeine.cpp
===================================================================
--- src/kaffeine.cpp	(révision 863489)
+++ src/kaffeine.cpp	(copie de travail)
@@ -307,8 +307,10 @@
 	}
 	loadTMP(urls);
 
-	if (args->isSet("fullscreen"))
+	if (args->isSet("fullscreen")) {
+		inplug->showPlayer();
 		fullscreen();
+	}
 
 	if (args->isSet("minimal"))
 		minimal();
@@ -1210,8 +1212,6 @@
 			inplug->fullscreen( false );
 		}
 
-		inplug->showPlayer();
-
 		if (m_haveKWin)
 			KWin::clearState(winId(), NET::FullScreen);
 		else
Index: src/input/dvb/channeleditorui.ui
===================================================================
--- src/input/dvb/channeleditorui.ui	(révision 863489)
+++ src/input/dvb/channeleditorui.ui	(copie de travail)
@@ -9,7 +9,7 @@
             <x>0</x>
             <y>0</y>
             <width>477</width>
-            <height>533</height>
+            <height>541</height>
         </rect>
     </property>
     <property name="caption">
@@ -19,7 +19,7 @@
         <property name="name">
             <cstring>unnamed</cstring>
         </property>
-        <widget class="Line" row="1" column="0">
+        <widget class="Line" row="0" column="1">
             <property name="name">
                 <cstring>line2</cstring>
             </property>
@@ -35,7 +35,7 @@
         </widget>
         <widget class="QLayoutWidget" row="0" column="0">
             <property name="name">
-                <cstring>layout9</cstring>
+                <cstring>layout7</cstring>
             </property>
             <vbox>
                 <property name="name">
@@ -432,22 +432,6 @@
                                 <cstring>transmissionComb</cstring>
                             </property>
                         </widget>
-                        <widget class="QLabel" row="3" column="0">
-                            <property name="name">
-                                <cstring>textLabel11</cstring>
-                            </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>4</hsizetype>
-                                    <vsizetype>5</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                            <property name="text">
-                                <string>Bandwidth:</string>
-                            </property>
-                        </widget>
                         <widget class="QLabel" row="2" column="0">
                             <property name="name">
                                 <cstring>textLabel10</cstring>
@@ -480,11 +464,6 @@
                                 <string>Transmission:</string>
                             </property>
                         </widget>
-                        <widget class="QComboBox" row="3" column="1">
-                            <property name="name">
-                                <cstring>bandwidthComb</cstring>
-                            </property>
-                        </widget>
                         <widget class="QComboBox" row="2" column="1">
                             <property name="name">
                                 <cstring>coderateHComb</cstring>
@@ -511,11 +490,6 @@
                                 <string>FEC low:</string>
                             </property>
                         </widget>
-                        <widget class="QComboBox" row="3" column="3">
-                            <property name="name">
-                                <cstring>guardComb</cstring>
-                            </property>
-                        </widget>
                         <widget class="QLabel" row="3" column="2">
                             <property name="name">
                                 <cstring>textLabel7</cstring>
@@ -595,6 +569,58 @@
                                 <string>Inversion:</string>
                             </property>
                         </widget>
+                        <widget class="QLabel" row="3" column="0">
+                            <property name="name">
+                                <cstring>textLabel11</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>4</hsizetype>
+                                    <vsizetype>5</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>Bandwidth:</string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="3" column="1">
+                            <property name="name">
+                                <cstring>bandwidthComb</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="4" column="0">
+                            <property name="name">
+                                <cstring>textLabel1_3</cstring>
+                            </property>
+                            <property name="text">
+                                <string>Type:</string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="4" column="1">
+                            <property name="name">
+                                <cstring>stypeComb</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="4" column="3">
+                            <property name="name">
+                                <cstring>rolloffComb</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="4" column="2">
+                            <property name="name">
+                                <cstring>textLabel2_4</cstring>
+                            </property>
+                            <property name="text">
+                                <string>Roll off:</string>
+                            </property>
+                        </widget>
+                        <widget class="QComboBox" row="3" column="3">
+                            <property name="name">
+                                <cstring>guardComb</cstring>
+                            </property>
+                        </widget>
                     </grid>
                 </widget>
                 <spacer>
@@ -610,7 +636,7 @@
                     <property name="sizeHint">
                         <size>
                             <width>20</width>
-                            <height>98</height>
+                            <height>166</height>
                         </size>
                     </property>
                 </spacer>
Index: src/input/dvb/channeldesc.h
===================================================================
--- src/input/dvb/channeldesc.h	(révision 863489)
+++ src/input/dvb/channeldesc.h	(copie de travail)
@@ -101,6 +101,8 @@
 	fe_code_rate_t coderateH;
 	fe_bandwidth_t bandwidth;
 	int snr;
+	fe_rolloff_t rolloff;
+	char S2;
 };
 
 class ChannelDesc
Index: src/input/dvb/dvbsi.h
===================================================================
--- src/input/dvb/dvbsi.h	(révision 863489)
+++ src/input/dvb/dvbsi.h	(copie de travail)
@@ -36,6 +36,7 @@
 	bool getSection( int pid, int tid, int timeout=5000 );
 	bool tableNIT( unsigned char* buf );
 	void satelliteDesc( unsigned char* buf, Transponder *trans );
+	void S2satelliteDesc( unsigned char* buf, Transponder *trans );
 	void cableDesc( unsigned char* buf, Transponder *trans );
 	void terrestrialDesc( unsigned char* buf, Transponder *trans );
 	void freqListDesc( unsigned char* buf, Transponder *trans );
Index: src/input/dvb/channeleditor.cpp
===================================================================
--- src/input/dvb/channeleditor.cpp	(révision 863489)
+++ src/input/dvb/channeleditor.cpp	(copie de travail)
@@ -143,6 +143,9 @@
 		else channel->tp.pol = 'h';
 		channel->tp.coderateH = (fe_code_rate_t)(FEC_NONE+coderateHComb->currentItem());
 		channel->tp.inversion = (fe_spectral_inversion_t)(INVERSION_OFF+inversionComb->currentItem());
+		channel->tp.modulation = (fe_modulation_t)(QPSK+modulationComb->currentItem());
+		channel->tp.S2 = stypeComb->currentItem();
+		channel->tp.rolloff = (fe_rolloff_t)(ROLLOFF_20+rolloffComb->currentItem() );
 	}
 	else if ( channel->tp.type==FE_QAM ) {
 		channel->tp.freq = freqSpin->value();
@@ -165,13 +168,7 @@
 	else {
 		channel->tp.freq = freqSpin->value();
 		channel->tp.inversion = (fe_spectral_inversion_t)(INVERSION_OFF+inversionComb->currentItem());
-		switch (modulationComb->currentItem()) {
-		case 0: channel->tp.modulation = QAM_64; break;
-		case 1: channel->tp.modulation = QAM_256; break;
-		case 2: channel->tp.modulation = VSB_8; break;
-		case 3: channel->tp.modulation = VSB_16; break;
-		default: channel->tp.modulation = QAM_AUTO; break;
-		}
+		channel->tp.modulation = (fe_modulation_t)(QPSK+modulationComb->currentItem());
 	}
 
 	done( Accepted );
@@ -187,10 +184,15 @@
 	inversionComb->setCurrentItem( INVERSION_OFF+channel->tp.inversion );
 	coderateHComb->insertStringList( coderateList() );
 	coderateHComb->setCurrentItem( FEC_NONE+channel->tp.coderateH );
+	modulationComb->insertStringList( modulationList() );
+	modulationComb->setCurrentItem( QPSK+channel->tp.modulation );
+	stypeComb->insertStringList( stypeList() );
+	stypeComb->setCurrentItem( channel->tp.S2 );
+	rolloffComb->insertStringList( rolloffList() );
+	rolloffComb->setCurrentItem( ROLLOFF_20+channel->tp.rolloff );
 	transmissionComb->setEnabled( false );
 	coderateLComb->setEnabled( false );
 	bandwidthComb->setEnabled( false );
-	modulationComb->setEnabled( false );
 	hierarchyComb->setEnabled( false );
 	guardComb->setEnabled( false );
 }
@@ -211,6 +213,8 @@
 	bandwidthComb->setEnabled( false );
 	hierarchyComb->setEnabled( false );
 	guardComb->setEnabled( false );
+	stypeComb->setEnabled( false );
+	rolloffComb->setEnabled( false );
 }
 
 void ChannelEditor::initT()
@@ -234,6 +238,8 @@
 	guardComb->setCurrentItem( GUARD_INTERVAL_1_32+channel->tp.guard );
 	srSpin->setEnabled( false );
 	polGroup->setEnabled( false );
+	stypeComb->setEnabled( false );
+	rolloffComb->setEnabled( false );
 }
 
 void ChannelEditor::initA()
@@ -241,14 +247,8 @@
 	freqSpin->setValue( channel->tp.freq );
 	inversionComb->insertStringList( inversionList() );
 	inversionComb->setCurrentItem( INVERSION_OFF+channel->tp.inversion );
-	modulationComb->insertStringList( modulationListAtsc() );
-	switch (channel->tp.modulation) {
-	case QAM_64: modulationComb->setCurrentItem(0); break;
-	case QAM_256: modulationComb->setCurrentItem(1); break;
-	case VSB_8: modulationComb->setCurrentItem(2); break;
-	case VSB_16: modulationComb->setCurrentItem(3); break;
-	default: modulationComb->setCurrentItem(4); break;
-	}
+	modulationComb->insertStringList( modulationList() );
+	modulationComb->setCurrentItem( QPSK+channel->tp.modulation );
 	srSpin->setEnabled( false );
 	polGroup->setEnabled( false );
 	transmissionComb->setEnabled( false );
@@ -257,6 +257,8 @@
 	bandwidthComb->setEnabled( false );
 	hierarchyComb->setEnabled( false );
 	guardComb->setEnabled( false );
+	stypeComb->setEnabled( false );
+	rolloffComb->setEnabled( false );
 }
 
 QStringList ChannelEditor::inversionList()
@@ -271,7 +273,7 @@
 {
 	QStringList list;
 
-	list<<"NONE"<<"1/2"<<"2/3"<<"3/4"<<"4/5"<<"5/6"<<"6/7"<<"7/8"<<"8/9"<<"AUTO";
+	list<<"NONE"<<"1/2"<<"2/3"<<"3/4"<<"4/5"<<"5/6"<<"6/7"<<"7/8"<<"8/9"<<"AUTO"<<"3/5"<<"9/10";
 	return list;
 }
 
@@ -279,18 +281,10 @@
 {
 	QStringList list;
 
-	list<<"QPSK"<<"QAM 16"<<"QAM 32"<<"QAM 64"<<"QAM 128"<<"QAM 256"<<"AUTO";
+	list<<"QPSK"<<"QAM 16"<<"QAM 32"<<"QAM 64"<<"QAM 128"<<"QAM 256"<<"AUTO"<<"VSB-8"<<"VSB-16"<<"8PSK"<<"16APSK"<<"NBC-QPSK"<<"DQPSK";
 	return list;
 }
 
-QStringList ChannelEditor::modulationListAtsc()
-{
-	QStringList list;
-
-	list<<"QAM 64"<<"QAM 256"<<"VSB 8"<<"VSB 16"<<"AUTO";
-	return list;
-}
-
 QStringList ChannelEditor::transmissionList()
 {
 	QStringList list;
@@ -323,6 +317,22 @@
 	return list;
 }
 
+QStringList ChannelEditor::stypeList()
+{
+	QStringList list;
+
+	list<<"DVB-S"<<"DVB-S2";
+	return list;
+}
+
+QStringList ChannelEditor::rolloffList()
+{
+	QStringList list;
+
+	list<<"20"<<"25"<<"35"<<"AUTO";
+	return list;
+}
+
 ChannelEditor::~ChannelEditor()
 {
 }
Index: src/input/dvb/plugins/epg/kaffeinedvbsection.cpp
===================================================================
--- src/input/dvb/plugins/epg/kaffeinedvbsection.cpp	(révision 863489)
+++ src/input/dvb/plugins/epg/kaffeinedvbsection.cpp	(copie de travail)
@@ -141,6 +141,9 @@
 	if ( inSize<1 )
 		return false;
 	cd = iconv_open( "UTF8", table );
+	//check if charset unknown
+	if( cd == (iconv_t)(-1) )
+		return false;
 	inBuf = s.data();
 	outBuf = buffer;
 	outBuf[0] = 0;
Index: src/input/dvb/dvbsi.cpp
===================================================================
--- src/input/dvb/dvbsi.cpp	(révision 863489)
+++ src/input/dvb/dvbsi.cpp	(copie de travail)
@@ -173,6 +173,9 @@
 					fprintf(stderr,"     Found frequency list.\n");
 					freqListDesc( buf, trans );
 					break;
+				case 0x79 :
+					S2satelliteDesc( buf, trans );
+					break;
 				default :
 					break;
 			}
@@ -226,22 +229,61 @@
 		trans->pol = 'v';
 	else
 		trans->pol = 'h';
+	switch ( getBits(buf,70,2) ) {
+		case 0 : trans->modulation = QAM_AUTO; break;
+		case 1 : trans->modulation = QPSK; break;
+		case 2 : trans->modulation = _8PSK; break;
+		case 3 : trans->modulation = QAM_16; break;
+	}
 	s = t.setNum( getBits(buf,72,28), 16 );
 	trans->sr = s.toInt();
 	trans->sr /=10;
 	switch ( getBits(buf,100,4) ) {
+		case 0 : trans->coderateH = FEC_AUTO; break;
 		case 1 : trans->coderateH = FEC_1_2; break;
 		case 2 : trans->coderateH = FEC_2_3; break;
 		case 3 : trans->coderateH = FEC_3_4; break;
 		case 4 : trans->coderateH = FEC_5_6; break;
 		case 5 : trans->coderateH = FEC_7_8; break;
 		case 6 : trans->coderateH = FEC_8_9; break;
-		case 7 : trans->coderateH = FEC_NONE; break;
+		case 7 : trans->coderateH = FEC_3_5; break;
+		case 8 : trans->coderateH = FEC_4_5; break;
+		case 9 : trans->coderateH = FEC_9_10; break;
+		case 15 : trans->coderateH = FEC_NONE; break;
 	}
+	if ( getBits(buf,69,1) ) {
+		fprintf(stderr,"\n\n!!!!!!!!!!!!!!!!!! Found S2 MODULATION SYSTEM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
+		trans->S2 = 1;
+		if ( trans->modulation==QPSK )
+			trans->modulation = NBC_QPSK; //until we find a S2 descriptor, assume NBC.
+		switch ( getBits(buf,67,2) ) {
+			case 0 : trans->rolloff = ROLLOFF_35; break;
+			case 1 : trans->rolloff = ROLLOFF_25; break;
+			case 2 : trans->rolloff = ROLLOFF_20; break;
+		}
+	}
 }
 
 
 
+void NitSection::S2satelliteDesc( unsigned char* buf, Transponder *trans )
+{
+	fprintf(stderr,"\n\n!!!!!!!!!!!!!!!!!! Found S2 DESCRIPTOR !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
+	int scrambling_sequence_selector = getBits(buf,16,1);
+	int multiple_input_stream_flag = getBits(buf,17,1);
+	int backwards_compatibility_indicator = getBits(buf,18,1);
+	if ( backwards_compatibility_indicator && trans->modulation==NBC_QPSK ) /*FIXME*/ // not sure of this
+		trans->modulation = QPSK;
+	int scrambling_sequence_index = 0;
+	if ( scrambling_sequence_selector )
+		scrambling_sequence_index = getBits(buf,30,18);
+	int input_stream_identifier = 0;
+	if ( multiple_input_stream_flag )
+		input_stream_identifier = getBits(buf,48,8);
+}
+
+
+
 void NitSection::cableDesc( unsigned char* buf, Transponder *trans )
 {
 	QString s, t;
@@ -261,13 +303,17 @@
 	trans->sr = s.toInt();
 	trans->sr /=10;
 	switch ( getBits(buf,100,4) ) {
+		case 0 : trans->coderateH = FEC_AUTO; break;
 		case 1 : trans->coderateH = FEC_1_2; break;
 		case 2 : trans->coderateH = FEC_2_3; break;
 		case 3 : trans->coderateH = FEC_3_4; break;
 		case 4 : trans->coderateH = FEC_5_6; break;
 		case 5 : trans->coderateH = FEC_7_8; break;
 		case 6 : trans->coderateH = FEC_8_9; break;
-		case 7 : trans->coderateH = FEC_NONE; break;
+		case 7 : trans->coderateH = FEC_3_5; break;
+		case 8 : trans->coderateH = FEC_4_5; break;
+		case 9 : trans->coderateH = FEC_9_10; break;
+		case 15 : trans->coderateH = FEC_NONE; break;
 	}
 }
 
Index: src/input/dvb/channeldesc.cpp
===================================================================
--- src/input/dvb/channeldesc.cpp	(révision 863489)
+++ src/input/dvb/channeldesc.cpp	(copie de travail)
@@ -115,6 +115,8 @@
 	coderateH=FEC_AUTO;
 	bandwidth=BANDWIDTH_AUTO;
 	snr = 0;
+	rolloff = ROLLOFF_AUTO;
+	S2 = 0;
 }
 
 Transponder::Transponder( const Transponder &trans )
@@ -134,6 +136,8 @@
 	coderateL=trans.coderateL;
 	coderateH=trans.coderateH;
 	bandwidth=trans.bandwidth;
+	rolloff = trans.rolloff;
+	S2 = trans.S2;
 }
 
 bool Transponder::sameAs( Transponder *trans )
Index: src/input/dvb/channeleditor.h
===================================================================
--- src/input/dvb/channeleditor.h	(révision 863489)
+++ src/input/dvb/channeleditor.h	(copie de travail)
@@ -53,11 +53,12 @@
 	QStringList inversionList();
 	QStringList coderateList();
 	QStringList modulationList();
-	QStringList modulationListAtsc();
 	QStringList transmissionList();
 	QStringList bandwidthList();
 	QStringList hierarchyList();
 	QStringList guardList();
+	QStringList stypeList();
+	QStringList rolloffList();
 
 	ChannelDesc *channel;
 	QPtrList<ChannelDesc> *chandesc;
Index: src/input/dvb/dvbstream.cpp
===================================================================
--- src/input/dvb/dvbstream.cpp	(révision 863489)
+++ src/input/dvb/dvbstream.cpp	(copie de travail)
@@ -185,7 +185,7 @@
 		fprintf(stderr,"openFe: fdFrontend != 0\n");
 		return false;
 	}
-	fdFrontend = open( frontendName.ascii(), O_RDWR );
+	fdFrontend = open( frontendName.ascii(), O_RDWR | O_NONBLOCK );
 	if ( fdFrontend<0 ) {
 		perror("openFe:");
 		fdFrontend = 0;
@@ -328,6 +328,9 @@
 	int rotorMove = 0;
 	int loop=0, i;
 
+	struct dtv_property cmdargs[20];
+	struct dtv_properties cmdseq;
+
 	closeFe();
 	if ( !openFe() )
 		return false;
@@ -344,6 +347,9 @@
 	freq*=1000;
 	srate*=1000;
 
+	QTime t1 = QTime::currentTime();
+	QTime t2;
+
 	switch( fe_info.type ) {
 		case FE_OFDM : {
 			if (freq < 1000000)
@@ -404,11 +410,38 @@
 
 			feparams.u.qpsk.symbol_rate=srate;
 			feparams.u.qpsk.fec_inner=chan->tp.coderateH;
-			fprintf(stderr,"inv:%d fecH:%d\n", chan->tp.inversion, chan->tp.coderateH );
+			fprintf(stderr,"inv:%d fecH:%d mod:%d\n", chan->tp.inversion, chan->tp.coderateH, chan->tp.modulation );
 			if ( setDiseqc( lnbPos, chan, hiband, rotorMove, dvr )!=0 ) {
 				closeFe();
 				return false;
 			}
+			if ( chan->tp.S2 ) {
+				fprintf(stderr,"\nTHIS IS DVB-S2 >>>>>>>>>>>>>>>>>>>\n");
+				cmdargs[0].cmd = DTV_DELIVERY_SYSTEM; cmdargs[0].u.data = SYS_DVBS2;
+				cmdargs[1].cmd = DTV_FREQUENCY; cmdargs[1].u.data = feparams.frequency;
+				cmdargs[2].cmd = DTV_MODULATION; cmdargs[2].u.data = chan->tp.modulation;
+				cmdargs[3].cmd = DTV_SYMBOL_RATE; cmdargs[3].u.data = srate;
+				cmdargs[4].cmd = DTV_INNER_FEC; cmdargs[4].u.data = chan->tp.coderateH;
+				cmdargs[5].cmd = DTV_PILOT; cmdargs[5].u.data = PILOT_AUTO;
+				cmdargs[6].cmd = DTV_ROLLOFF; cmdargs[6].u.data = chan->tp.rolloff;
+				cmdargs[7].cmd = DTV_INVERSION; cmdargs[7].u.data = INVERSION_AUTO;
+				cmdargs[8].cmd = DTV_TUNE;
+				cmdseq.num = 9;
+				cmdseq.props = cmdargs;
+			}
+			else {
+				cmdargs[0].cmd = DTV_DELIVERY_SYSTEM; cmdargs[0].u.data = SYS_DVBS;
+				cmdargs[1].cmd = DTV_FREQUENCY; cmdargs[1].u.data = feparams.frequency;
+				cmdargs[2].cmd = DTV_MODULATION; cmdargs[2].u.data = chan->tp.modulation;
+				//if ( chan->tp.modulation==QAM_AUTO )
+				//	cmdargs[2].u.data = QPSK;
+				cmdargs[3].cmd = DTV_SYMBOL_RATE; cmdargs[3].u.data = srate;
+				cmdargs[4].cmd = DTV_INNER_FEC; cmdargs[4].u.data = chan->tp.coderateH;
+				cmdargs[5].cmd = DTV_INVERSION; cmdargs[5].u.data = INVERSION_AUTO;
+				cmdargs[6].cmd = DTV_TUNE;
+				cmdseq.num = 7;
+				cmdseq.props = cmdargs;
+			}
 			break;
 		}
 		case FE_ATSC : {
@@ -433,9 +466,20 @@
 	if ( rotorMove )
 		loop = 2;
 
+	t2 = QTime::currentTime();
+	fprintf( stderr, "Diseqc settings time = %d ms\n", t1.msecsTo( t2 ) );
+	t1 = t2;
+
 	while ( loop>-1 ) {
-		if (ioctl(fdFrontend,FE_SET_FRONTEND,&feparams) < 0) {
-			perror("ERROR tuning \n");
+		if ( /*chan->tp.S2*/ fe_info.type==FE_QPSK ) {
+			if ( ioctl( fdFrontend, FE_SET_PROPERTY, &cmdseq )<0 ) {
+				perror("ERROR tuning\n");
+				closeFe();
+				return false;
+			}
+		}
+		else if (ioctl(fdFrontend,FE_SET_FRONTEND,&feparams) < 0) {
+			perror("ERROR tuning\n");
 			closeFe();
 			return false;
 		}
@@ -462,6 +506,10 @@
 		return false;
 	}
 
+	t2 = QTime::currentTime();
+	fprintf( stderr, "Tuning time = %d ms\n", t1.msecsTo( t2 ) );
+	t1 = t2;
+
 	if ( rotorMove )
 		dvbDevice->lnb[lnbPos].currentSource = chan->tp.source;
 
@@ -482,7 +530,7 @@
 }
 
 
-
+#define DISEQC_X 2
 int DvbStream::setDiseqc( int switchPos, ChannelDesc *chan, int hiband, int &rotor, bool dvr )
 {
 	struct dvb_diseqc_master_cmd switchCmd[] = {
@@ -519,7 +567,7 @@
 		perror("FE_SET_VOLTAGE failed");
 
 	fprintf( stderr, "DiSEqC: %02x %02x %02x %02x %02x %02x\n", switchCmd[ci].msg[0], switchCmd[ci].msg[1], switchCmd[ci].msg[2], switchCmd[ci].msg[3], switchCmd[ci].msg[4], switchCmd[ci].msg[5] );
-	for ( i=0; i<2; ++i ) {
+	for ( i=0; i<DISEQC_X; ++i ) {
 		usleep(15*1000);
 		if ( ioctl(fdFrontend, FE_DISEQC_SEND_MASTER_CMD, &switchCmd[ci]) )
 			perror("FE_DISEQC_SEND_MASTER_CMD failed");
@@ -586,15 +634,17 @@
 		}
 	}
 
-	for ( i=0; i<2; ++i ) {
+	for ( i=0; i<DISEQC_X; ++i ) {
 		usleep(15*1000);
 		if ( ioctl(fdFrontend, FE_DISEQC_SEND_BURST, (ci/4)%2 ? SEC_MINI_B : SEC_MINI_A) )
 			perror("FE_DISEQC_SEND_BURST failed");
 	}
 
-	usleep(15*1000);
-	if ( ioctl(fdFrontend, FE_SET_TONE, (ci/2)%2 ? SEC_TONE_ON : SEC_TONE_OFF) )
-		perror("FE_SET_TONE failed");
+	if ( (ci/2)%2 ) {
+		usleep(15*1000);
+		if ( ioctl(fdFrontend, FE_SET_TONE, SEC_TONE_ON) )
+			perror("FE_SET_TONE failed");
+	}
 
 	return 0;
 }
@@ -692,7 +742,7 @@
 	};
 
 	int i;
-	for ( i=0; i<2; ++i ) {
+	for ( i=0; i<DISEQC_X; ++i ) {
 		usleep(15*1000);
 		if ( ioctl( fdFrontend, FE_DISEQC_SEND_MASTER_CMD, &cmds[cmd] ) )
 			perror("Rotor : FE_DISEQC_SEND_MASTER_CMD failed");
Index: src/input/dvb/dvbpanel.cpp
===================================================================
--- src/input/dvb/dvbpanel.cpp	(révision 863489)
+++ src/input/dvb/dvbpanel.cpp	(copie de travail)
@@ -2263,6 +2263,8 @@
 				case 67 : chan->tp.coderateH = FEC_6_7; break;
 				case 78 : chan->tp.coderateH = FEC_7_8; break;
 				case 89 : chan->tp.coderateH = FEC_8_9; break;
+				case 35 : chan->tp.coderateH = FEC_3_5; break;
+				case 910 : chan->tp.coderateH = FEC_9_10; break;
 				case -1 : chan->tp.coderateH = FEC_AUTO;
 			}
 			s = s.right( s.length()-pos-1 );
@@ -2283,6 +2285,10 @@
 				case 256 : chan->tp.modulation = QAM_256; break;
 				case 108 : chan->tp.modulation = VSB_8; break;
 				case 116 : chan->tp.modulation = VSB_16; break;
+				case 1000 : chan->tp.modulation = _8PSK; break;
+				case 1001 : chan->tp.modulation = _16APSK; break;
+				case 1002 : chan->tp.modulation = NBC_QPSK; break;
+				case 1003 : chan->tp.modulation = DQPSK; break;
 				case -1 : chan->tp.modulation = QAM_AUTO;
 			}
 			s = s.right( s.length()-pos-1 );
@@ -2297,6 +2303,8 @@
 				case 67 : chan->tp.coderateL = FEC_6_7; break;
 				case 78 : chan->tp.coderateL = FEC_7_8; break;
 				case 89 : chan->tp.coderateL = FEC_8_9; break;
+				case 35 : chan->tp.coderateH = FEC_3_5; break;
+				case 910 : chan->tp.coderateH = FEC_9_10; break;
 				case -1 : chan->tp.coderateL = FEC_AUTO;
 			}
 			s = s.right( s.length()-pos-1 );
@@ -2364,6 +2372,17 @@
 			s = s.right( s.length()-pos-1 );
 			pos = s.find("|");
 			chan->tp.nid = s.left(pos).toUShort();
+			s = s.right( s.length()-pos-1 );
+			pos = s.find("|");
+			switch ( s.left(pos).toInt() ) {
+				case 20 : chan->tp.rolloff = ROLLOFF_20; break;
+				case 25 : chan->tp.rolloff = ROLLOFF_25; break;
+				case 35 : chan->tp.rolloff = ROLLOFF_35; break;
+				case -1 : chan->tp.rolloff = ROLLOFF_AUTO;
+			}
+			s = s.right( s.length()-pos-1 );
+			pos = s.find("|");
+			chan->tp.S2 = s.left(pos).toInt();
 
 			if ( chan->tp.source.isEmpty() ) {
 				delete chan;
@@ -2475,6 +2494,8 @@
 				case FEC_6_7 : tt<< "67|"; break;
 				case FEC_7_8 : tt<< "78|"; break;
 				case FEC_8_9 : tt<< "89|"; break;
+				case FEC_3_5 : tt<< "35|"; break;
+				case FEC_9_10 : tt<< "910|"; break;
 				case FEC_AUTO : tt<< "-1|";
 			}
 			switch ( chan->tp.inversion ) {
@@ -2491,6 +2512,10 @@
 				case QAM_256 : tt<< "256|"; break;
 				case VSB_8 : tt<< "108|"; break;
 				case VSB_16 : tt<< "116|"; break;
+				case _8PSK : tt<< "1000|"; break;
+				case _16APSK : tt<< "1001|"; break;
+				case NBC_QPSK : tt<< "1002|"; break;
+				case DQPSK : tt<< "1003|"; break;
 				case QAM_AUTO : tt<< "-1|";
 			}
 			switch ( chan->tp.coderateL ) {
@@ -2503,6 +2528,8 @@
 				case FEC_6_7 : tt<< "67|"; break;
 				case FEC_7_8 : tt<< "78|"; break;
 				case FEC_8_9 : tt<< "89|"; break;
+				case FEC_3_5 : tt<< "35|"; break;
+				case FEC_9_10 : tt<< "910|"; break;
 				case FEC_AUTO : tt<< "-1|";
 			}
 			switch ( chan->tp.bandwidth ) {
@@ -2541,7 +2568,15 @@
 			}
 			tt<< "|";
 			tt<< chan->category+"|";
-			tt<< s.setNum(chan->tp.nid)+"|\n";
+			tt<< s.setNum(chan->tp.nid)+"|";
+			switch ( chan->tp.rolloff ) {
+				case ROLLOFF_20 : tt<< "20|"; break;
+				case ROLLOFF_25 : tt<< "25|"; break;
+				case ROLLOFF_35 : tt<< "35|"; break;
+				case ROLLOFF_AUTO : tt<< "-1|";
+			}
+			tt<< s.setNum(chan->tp.S2)+"|";
+			tt<< "\n";
 		}
 		ret = true;
 		f.close();
_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux