X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/9d1ad359d7baaa92ebd79b1aaa774c39a1d06163..c5fd2f27b90414ea8d6f6227c2ad34dda70c40e7:/lib/dvb/sec.cpp diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 96729306..0c1d79ab 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -28,7 +28,6 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList= eDVBSatelliteDiseqcParameters::V1_0) { if ( di_param.m_committed_cmd < eDVBSatelliteDiseqcParameters::SENDNO ) - { csw = 0xF0 | (csw << 2); - csw |= band; - } + + csw |= band; bool send_csw = (di_param.m_committed_cmd != eDVBSatelliteDiseqcParameters::SENDNO); @@ -329,20 +332,57 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA (di_param.m_toneburst_param != eDVBSatelliteDiseqcParameters::NO); bool changed_burst = send_burst && toneburst != lastToneburst; - bool send_diseqc = changed_ucsw; - if (!send_diseqc) - send_diseqc = changed_burst && (send_ucsw || send_csw); - if (!send_diseqc) + int send_mask = 0; /* + 1 must send csw + 2 must send ucsw + 4 send toneburst first + 8 send toneburst at end */ + if (changed_burst) // toneburst first and toneburst changed { - send_diseqc = changed_csw; - if ( send_diseqc && di_param.m_use_fast && (csw & 0xF0) && (lastcsw & 0xF0) && ((csw / 4) == (lastcsw / 4)) ) + if (di_param.m_command_order&1) { - frontend.setData(0, csw); // needed for linked tuner handling - send_diseqc = false; + send_mask |= 4; + if ( send_csw ) + send_mask |= 1; + if ( send_ucsw ) + send_mask |= 2; } + else + send_mask |= 8; } + if (changed_ucsw) + { + send_mask |= 2; + if ((di_param.m_command_order&4) && send_csw) + send_mask |= 1; + if (di_param.m_command_order==4 && send_burst) + send_mask |= 8; + } + if (changed_csw) + { + if ( di_param.m_use_fast && (lastcsw & 0xF0) && ((csw / 4) == (lastcsw / 4)) ) + eDebug("dont send committed cmd (fast diseqc)"); + else + { + send_mask |= 1; + if (!(di_param.m_command_order&4) && send_ucsw) + send_mask |= 2; + if (!(di_param.m_command_order&1) && send_burst) + send_mask |= 8; + } + } + +#if 0 + eDebugNoNewLine("sendmask: "); + for (int i=3; i >= 0; --i) + if ( send_mask & (1<