diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-10-26 15:36:40 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-10-26 15:36:40 +0000 |
| commit | e03c732afb410b4d6b9f9540c36c33c941ee38f1 (patch) | |
| tree | 6726b70fe68281c956eb5044e991bd0d5ba074b1 /lib | |
| parent | 2acb4b8b6992707d79f7678f714c711e2c6fce1f (diff) | |
| download | enigma2-e03c732afb410b4d6b9f9540c36c33c941ee38f1.tar.gz enigma2-e03c732afb410b4d6b9f9540c36c33c941ee38f1.zip | |
add auto vcr switching support (needs new drivers (fp.ko))
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/driver/avswitch.cpp | 47 | ||||
| -rw-r--r-- | lib/driver/avswitch.h | 13 | ||||
| -rw-r--r-- | lib/python/Screens/Menu.py | 1 | ||||
| -rw-r--r-- | lib/python/Screens/Scart.py | 41 | ||||
| -rw-r--r-- | lib/python/Screens/ScartLoopThrough.py | 0 | ||||
| -rw-r--r-- | lib/python/Screens/__init__.py | 2 | ||||
| -rw-r--r-- | lib/python/enigma_python.i | 1 |
7 files changed, 86 insertions, 19 deletions
diff --git a/lib/driver/avswitch.cpp b/lib/driver/avswitch.cpp index 199a7855..8233d97e 100644 --- a/lib/driver/avswitch.cpp +++ b/lib/driver/avswitch.cpp @@ -1,5 +1,3 @@ -#include <lib/driver/avswitch.h> - #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> @@ -7,6 +5,8 @@ #include <lib/base/init.h> #include <lib/base/init_num.h> #include <lib/base/eerror.h> +#include <lib/base/ebase.h> +#include <lib/driver/avswitch.h> eAVSwitch *eAVSwitch::instance = 0; @@ -15,6 +15,49 @@ eAVSwitch::eAVSwitch() ASSERT(!instance); instance = this; m_video_mode = 0; + m_fp_fd = open("/dev/dbox/fp0", O_RDONLY|O_NONBLOCK); + if (m_fp_fd == -1) + { + eDebug("couldnt open /dev/dbox/fp0 to monitor vcr scart slow blanking changed!"); + m_fp_notifier=0; + } + else + { + m_fp_notifier = new eSocketNotifier(eApp, m_fp_fd, eSocketNotifier::Read); + CONNECT(m_fp_notifier->activated, eAVSwitch::fp_event); + } +} + +#ifndef FP_IOCTL_GET_EVENT +#define FP_IOCTL_GET_EVENT 20 +#endif + +#ifndef FP_IOCTL_GET_VCR +#define FP_IOCTL_GET_VCR 7 +#endif + +#ifndef FP_EVENT_VCR_SB_CHANGED +#define FP_EVENT_VCR_SB_CHANGED 1 +#endif + +int eAVSwitch::getVCRSlowBlanking() +{ + int val=0; + if (m_fp_fd >= 0) + { + if (ioctl(m_fp_fd, FP_IOCTL_GET_VCR, &val) < 0) + eDebug("FP_GET_VCR failed (%m)"); + } + return val; +} + +void eAVSwitch::fp_event(int what) +{ + int val = FP_EVENT_VCR_SB_CHANGED; // ask only for this event + if (ioctl(m_fp_fd, FP_IOCTL_GET_EVENT, &val) < 0) + eDebug("FP_IOCTL_GET_EVENT failed (%m)"); + else if (val & FP_EVENT_VCR_SB_CHANGED) + /* emit */ vcr_sb_notifier(getVCRSlowBlanking()); } eAVSwitch::~eAVSwitch() diff --git a/lib/driver/avswitch.h b/lib/driver/avswitch.h index d0221d50..2b3b40fb 100644 --- a/lib/driver/avswitch.h +++ b/lib/driver/avswitch.h @@ -1,10 +1,18 @@ #ifndef __avswitch_h #define __avswitch_h -class eAVSwitch +#include <lib/base/object.h> +#include <lib/python/connections.h> + +class eSocketNotifier; + +class eAVSwitch: public Object { static eAVSwitch *instance; int m_video_mode; + eSocketNotifier *m_fp_notifier; + void fp_event(int what); + int m_fp_fd; #ifdef SWIG eAVSwitch(); ~eAVSwitch(); @@ -16,7 +24,7 @@ public: ~eAVSwitch(); #endif static eAVSwitch *getInstance(); - + int getVCRSlowBlanking(); void setFastBlank(int val); void setColorFormat(int format); void setAspectRatio(int ratio); @@ -24,6 +32,7 @@ public: void setInput(int val); void setSlowblank(int val); void setWSS(int val); + PSignal1<void, int> vcr_sb_notifier; }; #endif diff --git a/lib/python/Screens/Menu.py b/lib/python/Screens/Menu.py index d6ec9015..3cc45923 100644 --- a/lib/python/Screens/Menu.py +++ b/lib/python/Screens/Menu.py @@ -24,7 +24,6 @@ from Tools import XMLTools # <item text="TV-Mode">self.setModeTV()</item> # <item text="Radio-Mode">self.setModeRadio()</item> # <item text="File-Mode">self.setModeFile()</item> -# <item text="Scart">self.openDialog(ScartLoopThrough)</item> # <item text="Sleep Timer"></item> diff --git a/lib/python/Screens/Scart.py b/lib/python/Screens/Scart.py index 3bb2ca9c..329300a1 100644 --- a/lib/python/Screens/Scart.py +++ b/lib/python/Screens/Scart.py @@ -6,20 +6,35 @@ from Components.AVSwitch import AVSwitch from enigma import * class Scart(Screen): - def __init__(self, session): + def __init__(self, session, start_visible=True): Screen.__init__(self, session) - + self.avswitch = AVSwitch() - - self.avswitch.setInput("SCART") - - self.onExecBegin.append(self.showMessageBox) - + + if start_visible: + self.onExecBegin.append(self.showMessageBox) + self.msgVisible = None + else: + self.msgVisible = False + def showMessageBox(self): - # only open messagebox on first execBegin - self.onExecBegin.remove(self.showMessageBox) - self.session.openWithCallback(self.switchToTV, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR) - + if self.msgVisible is None: + self.onExecBegin.remove(self.showMessageBox) + self.msgVisible = False + + if not self.msgVisible: + self.msgVisible = True + self.avswitch.setInput("SCART") + self.msgBox = self.session.openWithCallback(self.MsgBoxClosed, MessageBox, _("If you see this, something is wrong with\nyour scart connection. Press OK to return."), MessageBox.TYPE_ERROR) + + def MsgBoxClosed(self, *val): + self.msgBox = None + self.switchToTV() + def switchToTV(self, *val): - self.avswitch.setInput("ENCODER") - self.close() + if self.msgVisible: + if self.msgBox: + self.msgBox.close() # ... MsgBoxClosed -> switchToTV again.. + return + self.avswitch.setInput("ENCODER") + self.msgVisible = False diff --git a/lib/python/Screens/ScartLoopThrough.py b/lib/python/Screens/ScartLoopThrough.py deleted file mode 100644 index e69de29b..00000000 --- a/lib/python/Screens/ScartLoopThrough.py +++ /dev/null diff --git a/lib/python/Screens/__init__.py b/lib/python/Screens/__init__.py index 5eac3b16..9ce0dc6d 100644 --- a/lib/python/Screens/__init__.py +++ b/lib/python/Screens/__init__.py @@ -1,6 +1,6 @@ __all__ = ["ChannelSelection", "ClockDisplay", "ConfigMenu", "InfoBar", "MessageBox", "Menu", "MovieSelection", - "ScartLoopThrough", "Screen", "ServiceScan", "About", + "Screen", "ServiceScan", "About", "TimerEdit", "Setup", "HarddiskSetup", "FixedMenu", "Satconfig", "Scanconfig", "Ci.py", "Volume.py", "Mute.py", "EpgSelection", "EventView", "Standby", "ServiceInfo", diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 103889b9..cb87359e 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -156,6 +156,7 @@ typedef long time_t; %immutable eListbox::selectionChanged; %immutable eDVBCI_UI::ciStateChanged; %immutable eDVBResourceManager::frontendUseMaskChanged; +%immutable eAVSwitch::vcr_sb_notifier; %include <lib/base/console.h> %include <lib/base/nconfig.h> |
