diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-05-15 09:55:58 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-05-15 09:55:58 +0000 |
| commit | 38b8a24b2034c387aa0762eb8a3d96b786fd581b (patch) | |
| tree | 4516e3e8240478e2d8dff619c419822bca3c0172 /lib/dvb/frontend.cpp | |
| parent | ced666c9fc8ae50d23b3836917fdf3cbf501383c (diff) | |
| download | enigma2-38b8a24b2034c387aa0762eb8a3d96b786fd581b.tar.gz enigma2-38b8a24b2034c387aa0762eb8a3d96b786fd581b.zip | |
add support for rolloff and pilot changing (needed for some 8PSK transponders)
this both values are transmitted to the frontend via linux tv api inversion param
hack
bits 0..1 are used for real inversion param (OFF, ON, AUTO)
bits 2..3 are now used for rolloff param (0.35, 0.25, 0.20)
bits 4..5 are now used for pilot param (OFF, ON, AUTO)
this needs a linuxtv api kernel patch, and a driver change (alps_bsbe2.ko)
both are not yet pushed to OE!!
Diffstat (limited to 'lib/dvb/frontend.cpp')
| -rw-r--r-- | lib/dvb/frontend.cpp | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 9f19ada1..d81c455c 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -125,6 +125,7 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto if ( fec != FEC::fNone && fec > FEC::f9_10 ) fec = FEC::fAuto; inversion = Inversion::Unknown; + pilot = Pilot::Unknown; orbital_position = ((descriptor.getOrbitalPosition() >> 12) & 0xF) * 1000; orbital_position += ((descriptor.getOrbitalPosition() >> 8) & 0xF) * 100; orbital_position += ((descriptor.getOrbitalPosition() >> 4) & 0xF) * 10; @@ -138,16 +139,16 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto eDebug("satellite_delivery_descriptor non valid modulation type.. force QPSK"); modulation=QPSK; } - roll_off = descriptor.getRollOff(); + rolloff = descriptor.getRollOff(); if (system == System::DVB_S2) { - eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, roll_off %d", + eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d", frequency, polarisation ? "hor" : "vert", orbital_position, symbol_rate, fec, modulation, - roll_off); + rolloff); } else { @@ -861,8 +862,43 @@ void fillDictWithSatelliteData(ePyObject dict, const FRONTENDPARAMETERS &parm, e PutToDict(dict, "modulation", "QPSK" ); #endif PutToDict(dict, "fec_inner", tmp); - tmp = parm_u_qpsk_fec_inner > FEC_AUTO ? - "DVB-S2" : "DVB-S"; + if (parm_u_qpsk_fec_inner > FEC_AUTO) + { + switch(parm_inversion & 0xc) + { + default: // unknown rolloff + case 0: // 0.35 + tmp = "ROLLOFF_0_35"; + break; + case 4: // 0.25 + tmp = "ROLLOFF_0_25"; + break; + case 8: // 0.20 + tmp = "ROLLOFF_0_20"; + break; + } + PutToDict(dict, "rolloff", tmp); + if (parm_u_qpsk_fec_inner > FEC_S2_QPSK_9_10) + { + switch(parm_inversion & 0x30) + { + case 0: // pilot off + tmp = "PILOT_OFF"; + break; + case 0x10: // pilot on + tmp = "PILOT_ON"; + break; + case 0x20: // pilot auto + tmp = "PILOT_AUTO"; + break; + } + PutToDict(dict, "pilot", tmp); + } + tmp = "DVB-S2"; + } + else + tmp = "DVB-S"; + PutToDict(dict, "system", tmp); } @@ -1657,9 +1693,12 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm, eDebug("no valid fec for DVB-S2 set.. abort !!"); return -EINVAL; } - if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) + parm_inversion |= (feparm.rolloff << 2); // Hack.. we use bit 2..3 of inversion param for rolloff + if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK) { parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)parm_u_qpsk_fec_inner+9); // 8PSK fec driver values are decimal 9 bigger + parm_inversion |= (feparm.pilot << 4); // Hack.. we use bit 4..5 of inversion param for pilot + } } #endif // FIXME !!! get frequency range from tuner |
