diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-07-07 23:56:09 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-07-07 23:56:09 +0000 |
| commit | 9982cd52929f624aaeafcc050fa4f94bf4f53f4e (patch) | |
| tree | 0446ebcf4f848351da3897bc783eb3260bf87209 /lib/dvb | |
| parent | 145e4cd8d0cd2e7a24e9ca5971c128902f7da4e1 (diff) | |
| download | enigma2-9982cd52929f624aaeafcc050fa4f94bf4f53f4e.tar.gz enigma2-9982cd52929f624aaeafcc050fa4f94bf4f53f4e.zip | |
add possibility to set rotor turning speed to fast/slow or set a time epoch
for turning fast
add some missing and new translations
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/sec.cpp | 38 | ||||
| -rw-r--r-- | lib/dvb/sec.h | 4 |
2 files changed, 41 insertions, 1 deletions
diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 7f45f576..ff3f9bd0 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -1,6 +1,7 @@ #include <lib/dvb/dvb.h> #include <lib/dvb/sec.h> #include <lib/dvb/rotor_calc.h> +#include <lib/dvb/dvbtime.h> #include <set> @@ -253,6 +254,30 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite return ret; } +bool need_turn_fast(int turn_speed) +{ + if (turn_speed == eDVBSatelliteRotorParameters::FAST) + return true; + else if (turn_speed != eDVBSatelliteRotorParameters::SLOW) + { + int begin = turn_speed >> 16; // high word is start time + int end = turn_speed&0xFFFF; // low word is end time + time_t now_time = eDVBLocalTimeHandler::getInstance()->nowTime(); + tm nowTime; + localtime_r(&now_time, &nowTime); + int now = (nowTime.tm_hour + 1) * 60 + nowTime.tm_min + 1; + bool neg = end <= begin; + if (neg) { + int tmp = begin; + begin = end; + end = tmp; + } + if ((now >= begin && now < end) ^ neg) + return true; + } + return false; +} + #define VOLTAGE(x) (lnb_param.m_increased_voltage ? iDVBFrontend::voltage##x##_5 : iDVBFrontend::voltage##x) RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int slot_id) @@ -678,7 +703,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::IF_NO_MORE_ROTOR_DISEQC_RETRYS_GOTO, +9 ) ); // timeout .. we assume now the rotor is already at the correct position sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -8) ); // goto loop start //////////////////// - sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); + if (need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed)) + sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) ); sec_sequence.push_back( eSecCommand(eSecCommand::SET_TIMEOUT, m_params[MOTOR_RUNNING_TIMEOUT]*20) ); // 2 minutes running timeout // rotor running loop sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) ); // wait 50msec @@ -1072,6 +1098,16 @@ RESULT eDVBSatelliteEquipmentControl::setRotorPosNum(int rotor_pos_num) return 0; } +RESULT eDVBSatelliteEquipmentControl::setRotorTurningSpeed(int speed) +{ + eSecDebug("eDVBSatelliteEquipmentControl::setRotorTurningSpeed(%d)", speed); + if ( currentLNBValid() ) + m_lnbs[m_lnbidx].m_rotor_parameters.m_inputpower_parameters.m_turning_speed = speed; + else + return -ENOENT; + return 0; +} + struct sat_compare { int orb_pos, lofl, lofh; diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index 31415c42..dba55651 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -180,6 +180,7 @@ class eDVBSatelliteRotorParameters #endif public: enum { NORTH, SOUTH, EAST, WEST }; + enum { FAST, SLOW }; #ifndef SWIG eDVBSatelliteRotorParameters() { setDefaultOptions(); } @@ -187,6 +188,7 @@ public: { bool m_use; // can we use rotor inputpower to detect rotor running state ? __u8 m_delta; // delta between running and stopped rotor + unsigned int m_turning_speed; // SLOW, FAST, or fast turning epoch }; eDVBSatelliteRotorInputpowerParameters m_inputpower_parameters; @@ -201,6 +203,7 @@ public: void setDefaultOptions() // set default rotor options { + m_inputpower_parameters.m_turning_speed = FAST; // fast turning m_inputpower_parameters.m_use = true; m_inputpower_parameters.m_delta = 60; m_gotoxx_parameters.m_lo_direction = EAST; @@ -307,6 +310,7 @@ public: RESULT setLaDirection(int direction); RESULT setUseInputpower(bool onoff); RESULT setInputpowerDelta(int delta); // delta between running and stopped rotor + RESULT setRotorTurningSpeed(int speed); // set turning speed.. /* Satellite Specific Parameters */ RESULT addSatellite(int orbital_position); RESULT setVoltageMode(int mode); |
