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