Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
authorFraxinas <andreas.frisch@multimedia-labs.de>
Thu, 4 Dec 2008 10:21:28 +0000 (11:21 +0100)
committerFraxinas <andreas.frisch@multimedia-labs.de>
Thu, 4 Dec 2008 10:21:28 +0000 (11:21 +0100)
lib/dvb/dvbtime.cpp
lib/dvb/dvbtime.h
lib/dvb/sec.cpp
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py
lib/python/Plugins/Extensions/GraphMultiEPG/plugin.py

index c43357959b16165052d86f71acdc3b378aacf45d..d879cface8b8c73204c03fb341fbadd4f458c327 100644 (file)
@@ -11,6 +11,8 @@
 #define FP_IOCTL_SET_RTC         0x101
 #define FP_IOCTL_GET_RTC         0x102
 
+#define TIME_UPDATE_INTERVAL (30*60*1000)
+
 static time_t prev_time;
 
 void setRTC(time_t time)
@@ -143,7 +145,7 @@ eDVBLocalTimeHandler *eDVBLocalTimeHandler::instance;
 DEFINE_REF(eDVBLocalTimeHandler);
 
 eDVBLocalTimeHandler::eDVBLocalTimeHandler()
-       :m_time_ready(false)
+       :m_time_ready(false), m_updateNonTunedTimer(eTimer::create(eApp))
 {
        if ( !instance )
                instance=this;
@@ -164,6 +166,7 @@ eDVBLocalTimeHandler::eDVBLocalTimeHandler()
                        /*emit*/ m_timeUpdated();
                }
        }
+       CONNECT(m_updateNonTunedTimer->timeout, eDVBLocalTimeHandler::updateNonTuned);
 }
 
 eDVBLocalTimeHandler::~eDVBLocalTimeHandler()
@@ -211,6 +214,12 @@ void eDVBLocalTimeHandler::writeTimeOffsetData( const char* filename )
        }
 }
 
+void eDVBLocalTimeHandler::updateNonTuned()
+{
+       updateTime(-1, 0, 0);
+       m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
+}
+
 void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count )
 {
        int time_difference;
@@ -397,7 +406,7 @@ void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int up
                        int updateCount = it->second.tdt->getUpdateCount();
                        it->second.tdt = 0;
                        it->second.tdt = new TDT(chan, updateCount);
-                       it->second.tdt->startTimer(60*60*1000);  // restart TDT for this transponder in 60min
+                       it->second.tdt->startTimer(TIME_UPDATE_INTERVAL);  // restart TDT for this transponder in 30min
                }
        }
 }
@@ -430,12 +439,15 @@ void eDVBLocalTimeHandler::DVBChannelStateChanged(iDVBChannel *chan)
                        {
                                case iDVBChannel::state_ok:
                                        eDebug("[eDVBLocalTimerHandler] channel %p running", chan);
+                                       m_updateNonTunedTimer->stop();
                                        it->second.tdt = new TDT(it->second.channel);
                                        it->second.tdt->start();
                                        break;
                                case iDVBChannel::state_release:
                                        eDebug("[eDVBLocalTimerHandler] remove channel %p", chan);
                                        m_knownChannels.erase(it);
+                                       if (m_knownChannels.empty())
+                                               m_updateNonTunedTimer->start(TIME_UPDATE_INTERVAL, true);
                                        break;
                                default: // ignore all other events
                                        return;
index f403ffd4d17985c7fd3f341e54f3d05e157b3ef9..3f8d9b7dec1204bcdcde8473739741f816e82e1f 100644 (file)
@@ -54,6 +54,7 @@ class eDVBLocalTimeHandler: public Object
                ePtr<eConnection> m_stateChangedConn;
                int m_prevChannelState;
        };
+       ePtr<eTimer> m_updateNonTunedTimer;
        friend class TDT;
        std::map<iDVBChannel*, channel_data> m_knownChannels;
        std::map<eDVBChannelID,int> m_timeOffsetMap;
@@ -66,6 +67,7 @@ class eDVBLocalTimeHandler: public Object
        void readTimeOffsetData(const char*);
        void writeTimeOffsetData(const char*);
        void updateTime(time_t tp_time, eDVBChannel*, int updateCount);
+       void updateNonTuned();
        static eDVBLocalTimeHandler *instance;
 #ifdef SWIG
        eDVBLocalTimeHandler();
index 39124b34b8a1cb7ec357d8dca3656528d31270b7..751a545358015e1492f27074981ba23646e09ef2 100644 (file)
@@ -283,7 +283,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite
                                                eSecDebugNoSimulate("ret5 %d", ret);
                                        }
 
-                               if (ret && rotor && curRotorPos != -1 && (direct_connected || satpos_depends_ptr == -1) )  // direct conntected or loopthrough!
+                               if (ret && rotor && curRotorPos != -1)
                                        ret -= abs(curRotorPos-sat.orbital_position);
 
                                eSecDebugNoSimulate("ret6 %d", ret);
@@ -797,17 +797,22 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                                        bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
                                                        eSecCommand::rotor cmd;
                                                        eSecCommand::pair compare;
-                                                       compare.voltage = VOLTAGE(18);
+                                                       if (turn_fast)
+                                                               compare.voltage = VOLTAGE(18);
+                                                       else
+                                                               compare.voltage = VOLTAGE(13);
                                                        compare.steps = +3;
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, compare.voltage) );
 // measure idle power values
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
-                                                       compare.val = 1;
                                                        compare.steps = -2;
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
-                                                       sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                                       if (turn_fast) {
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec after voltage change
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 1) );
+                                                               compare.val = 1;
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::IF_MEASURE_IDLE_WAS_NOT_OK_GOTO, compare) );
+                                                               sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(13)) );
+                                                       }
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER]) );  // wait 150msec before measure
                                                        sec_sequence.push_back( eSecCommand(eSecCommand::MEASURE_IDLE_INPUTPOWER, 0) );
                                                        compare.val = 0;
index 7f422c968cec5706c0c5641407344e40f185194a..441cb5d89b03f97839015514421124d201e2bb84 100644 (file)
@@ -93,13 +93,13 @@ class EPGList(HTMLComponent, GUIComponent):
                return event
 
        def getCurrent(self):
-               if self.cur_service is None or self.cur_event is None:
+               if self.cur_service is None:
                        return ( None, None )
                old_service = self.cur_service  #(service, service_name, events)
                events = self.cur_service[2]
                refstr = self.cur_service[0]
-               if not events or not len(events):
-                       return ( None, None )
+               if self.cur_event is None or not events or not len(events):
+                       return ( None, ServiceReference(refstr) )
                event = events[self.cur_event] #(event_id, event_title, begin_time, duration)
                eventid = event[0]
                service = ServiceReference(refstr)
@@ -204,7 +204,13 @@ class EPGList(HTMLComponent, GUIComponent):
        def buildEntry(self, service, service_name, events):
                r1=self.service_rect
                r2=self.event_rect
-               res = [ None, MultiContentEntryText(pos = (r1.left(),r1.top()), size = (r1.width(), r1.height()), font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER, text = service_name, color = self.foreColorService, backcolor = self.backColorService) ]
+               res = [ None, MultiContentEntryText(
+                                               pos = (r1.left(),r1.top()),
+                                               size = (r1.width(), r1.height()),
+                                               font = 0, flags = RT_HALIGN_LEFT | RT_VALIGN_CENTER,
+                                               text = service_name,
+                                               color = self.foreColorService,
+                                               backcolor = self.backColorService) ]
 
                if events:
                        start = self.time_base+self.offs*self.time_epoch*60
@@ -222,9 +228,16 @@ class EPGList(HTMLComponent, GUIComponent):
                        for ev in events:  #(event_id, event_title, begin_time, duration)
                                rec=ev[2] and self.timer.isInTimer(ev[0], ev[2], ev[3], service) > ((ev[3]/10)*8)
                                xpos, ewidth = self.calcEntryPosAndWidthHelper(ev[2], ev[3], start, end, width)
-                               res.append(MultiContentEntryText(pos = (left+xpos, top), size = (ewidth, height), font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP, text = ev[1], color = foreColor, color_sel = foreColorSelected, backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor))
+                               res.append(MultiContentEntryText(
+                                       pos = (left+xpos, top), size = (ewidth, height),
+                                       font = 1, flags = RT_HALIGN_CENTER | RT_VALIGN_CENTER | RT_WRAP,
+                                       text = ev[1], color = foreColor, color_sel = foreColorSelected,
+                                       backcolor = backColor, backcolor_sel = backColorSelected, border_width = 1, border_color = borderColor))
                                if rec and ewidth > 23:
-                                       res.append(MultiContentEntryPixmapAlphaTest(pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21), png = self.clock_pixmap, backcolor = backColor, backcolor_sel = backColorSelected))
+                                       res.append(MultiContentEntryPixmapAlphaTest(
+                                               pos = (left+xpos+ewidth-22, top+height-22), size = (21, 21),
+                                               png = self.clock_pixmap, backcolor = backColor,
+                                               backcolor_sel = backColorSelected))
                return res
 
        def selEntry(self, dir, visible=True):
@@ -278,8 +291,13 @@ class EPGList(HTMLComponent, GUIComponent):
                        self.time_base = int(stime)
                        test = [ (service.ref.toString(), 0, self.time_base, self.time_epoch) for service in services ]
                test.insert(0, 'XRnITBD')
+               print "BEFORE:"
+               for x in test:
+                       print x
                epg_data = self.queryEPG(test)
-
+               print "EPG:"
+               for x in epg_data:
+                       print x
                self.list = [ ]
                tmp_list = None
                service = ""
index 0ebcafca07b08108a7d79f18df06ed2a0a915949..adb7015dd8edda6e1b63d76b76c43e428faf821b 100644 (file)
@@ -69,6 +69,7 @@ def changeBouquetCB(direction, epg):
                bouquet = bouquetSel.getCurrent()
                services = getBouquetServices(bouquet)
                if len(services):
+                       global epg_bouquet
                        epg_bouquet = bouquet
                        epg.setServices(services)