diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/dvb/dvbtime.cpp | 57 | ||||
| -rw-r--r-- | lib/python/Screens/Standby.py | 8 | ||||
| -rw-r--r-- | lib/python/Tools/DreamboxHardware.py | 49 |
3 files changed, 93 insertions, 21 deletions
diff --git a/lib/dvb/dvbtime.cpp b/lib/dvb/dvbtime.cpp index 616363f9..6cfaccc8 100644 --- a/lib/dvb/dvbtime.cpp +++ b/lib/dvb/dvbtime.cpp @@ -15,26 +15,61 @@ static time_t prev_time; void setRTC(time_t time) { - int fd = open("/dev/dbox/fp0", O_RDWR); - if ( fd >= 0 ) + FILE *f = fopen("/proc/stb/fp/rtc", "w"); + if (f) { - if ( ::ioctl(fd, FP_IOCTL_SET_RTC, (void*)&time ) < 0 ) - eDebug("FP_IOCTL_SET_RTC failed(%m)"); + time_t wakeup=0; + FILE *f2 = fopen("/proc/stb/fp/wakeup_time", "r"); + if (f2) + { + fscanf(f2, "%u", &wakeup); + fclose(f2); + } + if (wakeup) // atmel firmware okay? + { + if (fprintf(f, "%u", time)) + prev_time = time; + else + eDebug("write /proc/stb/fp/rtc failed (%m)"); + fclose(f); + } else - prev_time = time; - close(fd); + eDebug("dont set rtc because of buggy atmel firmware!"); + } + else + { + int fd = open("/dev/dbox/fp0", O_RDWR); + if ( fd >= 0 ) + { + if ( ::ioctl(fd, FP_IOCTL_SET_RTC, (void*)&time ) < 0 ) + eDebug("FP_IOCTL_SET_RTC failed(%m)"); + else + prev_time = time; + close(fd); + } } } time_t getRTC() { time_t rtc_time=0; - int fd = open("/dev/dbox/fp0", O_RDWR); - if ( fd >= 0 ) + FILE *f = fopen("/proc/stb/fp/rtc", "r"); + if (f) + { + // sanity check to detect corrupt atmel firmware + if (fscanf(f, "%u", &rtc_time) != 1) + eDebug("read /proc/stb/fp/rtc failed (%m)"); + fclose(f); + } + else { - if ( ::ioctl(fd, FP_IOCTL_GET_RTC, (void*)&rtc_time ) < 0 ) - eDebug("FP_IOCTL_GET_RTC failed(%m)"); - close(fd); + int fd = open("/dev/dbox/fp0", O_RDWR); + if ( fd >= 0 ) + { + if ( ::ioctl(fd, FP_IOCTL_GET_RTC, (void*)&rtc_time ) < 0 ) + eDebug("FP_IOCTL_GET_RTC failed(%m)"); + close(fd); + } } return rtc_time != prev_time ? rtc_time : 0; } diff --git a/lib/python/Screens/Standby.py b/lib/python/Screens/Standby.py index f7c819de..fd7ca8ef 100644 --- a/lib/python/Screens/Standby.py +++ b/lib/python/Screens/Standby.py @@ -93,7 +93,7 @@ from time import time inTryQuitMainloop = False class TryQuitMainloop(MessageBox): - def __init__(self, session, retvalue=1, timeout=-1): + def __init__(self, session, retvalue=1, timeout=-1, default_yes = True): self.retval=retvalue recordings = len(session.nav.getRecordings()) self.connected = False @@ -102,13 +102,13 @@ class TryQuitMainloop(MessageBox): next_rec_time = session.nav.RecordTimer.getNextRecordingTime() if recordings or (next_rec_time > 0 and (next_rec_time - time()) < 360): if retvalue == 1: - MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really shutdown now?"), type = MessageBox.TYPE_YESNO, timeout = timeout) + MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really shutdown now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) elif retvalue == 2: - MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really reboot now?"), type = MessageBox.TYPE_YESNO, timeout = timeout) + MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really reboot now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) elif retvalue == 4: pass else: - MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really restart now?"), type = MessageBox.TYPE_YESNO, timeout = timeout) + MessageBox.__init__(self, session, _("Recording(s) are in progress or coming up in few seconds... really restart now?"), type = MessageBox.TYPE_YESNO, timeout = timeout, default = default_yes) self.skinName = "MessageBox" session.nav.record_event.append(self.getRecordEvent) self.connected = True diff --git a/lib/python/Tools/DreamboxHardware.py b/lib/python/Tools/DreamboxHardware.py index 5eaaeeca..2a0ddeee 100644 --- a/lib/python/Tools/DreamboxHardware.py +++ b/lib/python/Tools/DreamboxHardware.py @@ -1,17 +1,54 @@ +from fcntl import ioctl +from struct import pack, unpack + def getFPVersion(): - from fcntl import ioctl try: fp = open("/dev/dbox/fp0") return ioctl(fp.fileno(),0) except IOError: + print "getFPVersion failed!" return None def setFPWakeuptime(wutime): - from fcntl import ioctl - from struct import pack + try: + open("/proc/stb/fp/wakeup_time", "w").write(str(wutime)) + except IOError: + try: + fp = open("/dev/dbox/fp0") + ioctl(fp.fileno(), 6, pack('L', wutime)) # set wake up + except IOError: + print "setFPWakeupTime failed!" +def getFPWakeuptime(): + ret = 0 try: - fp = open("/dev/dbox/fp0") - ioctl(fp.fileno(), 6, pack('L', wutime)) # set wake up + ret = long(open("/proc/stb/fp/wakeup_time", "r").read()) except IOError: - pass + try: + fp = open("/dev/dbox/fp0") + ret = unpack('L', ioctl(fp.fileno(), 5, ' '))[0] # get wakeuptime + except IOError: + print "getFPWakeupTime failed!" + return ret + +def getFPWasTimerWakeup(): + was_wakeup = False + try: + was_wakeup = int(open("/proc/stb/fp/was_timer_wakeup", "r").read()) and True or False + except: + try: + fp = open("/dev/dbox/fp0") + was_wakeup = unpack('B', ioctl(fp.fileno(), 9, ' '))[0] and True or False + except IOError: + print "wasTimerWakeup failed!" + return was_wakeup + +def clearFPWasTimerWakeup(): + try: + open("/proc/stb/fp/was_timer_wakeup", "w").write('0') + except: + try: + fp = open("/dev/dbox/fp0") + ioctl(fp.fileno(), 10) + except IOError: + print "clearFPWasTimerWakeup failed!" |
