From 667da1f5fe17f034d68e351a37dffe268ce50c3f Mon Sep 17 00:00:00 2001 From: Rolf Ahrenberg Date: Sat, 7 Feb 2015 17:07:02 +0200 Subject: [PATCH] Check for SAT>IP devices first. --- femonosd.c | 82 ++++++++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/femonosd.c b/femonosd.c index ce74590..415bc30 100644 --- a/femonosd.c +++ b/femonosd.c @@ -725,29 +725,28 @@ void cFemonOsd::Show(void) } if (m_DeviceSource == DEVICESOURCE_DVBAPI) { - cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice()); - m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; - if (m_Frontend >= 0) { - if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { - if (!femonConfig.usesvdrp) - error("cFemonOsd::Show() cannot read frontend info."); - close(m_Frontend); - m_Frontend = -1; - memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo)); + if (!strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) { + cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice()); + m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; + if (m_Frontend >= 0) { + if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { + if (!femonConfig.usesvdrp) + error("cFemonOsd::Show() cannot read frontend info."); + close(m_Frontend); + m_Frontend = -1; + memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo)); + return; + } + } + else if (femonConfig.usesvdrp) { + if (!SvdrpConnect() || !SvdrpTune()) + return; + } + else { + error("cFemonOsd::Show() cannot open frontend device."); return; } } - else if (strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) { - // nop - } - else if (femonConfig.usesvdrp) { - if (!SvdrpConnect() || !SvdrpTune()) - return; - } - else { - error("cFemonOsd::Show() cannot open frontend device."); - return; - } } else m_Frontend = -1; @@ -785,7 +784,7 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); const cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); - if (!liveView || !channelNumber || !channel || channel->Number() != channelNumber) + if (!device || !liveView || !channelNumber || !channel || channel->Number() != channelNumber) return; m_DeviceSource = DEVICESOURCE_DVBAPI; @@ -802,29 +801,28 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber, bool li } if (m_DeviceSource == DEVICESOURCE_DVBAPI) { - cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice()); - m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; - if (m_Frontend >= 0) { - if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { - if (!femonConfig.usesvdrp) - error("cFemonOsd::ChannelSwitch() cannot read frontend info."); - close(m_Frontend); - m_Frontend = -1; - memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo)); + if (!strstr(*device->DeviceType(), SATIP_DEVICE)) { + cDvbDevice *dev = getDvbDevice(cDevice::ActualDevice()); + m_Frontend = dev ? open(*cString::sprintf(FRONTEND_DEVICE, dev->Adapter(), dev->Frontend()), O_RDONLY | O_NONBLOCK) : -1; + if (m_Frontend >= 0) { + if (ioctl(m_Frontend, FE_GET_INFO, &m_FrontendInfo) < 0) { + if (!femonConfig.usesvdrp) + error("cFemonOsd::ChannelSwitch() cannot read frontend info."); + close(m_Frontend); + m_Frontend = -1; + memset(&m_FrontendInfo, 0, sizeof(m_FrontendInfo)); + return; + } + } + else if (femonConfig.usesvdrp) { + if (!SvdrpConnect() || !SvdrpTune()) + return; + } + else { + error("cFemonOsd::ChannelSwitch() cannot open frontend device."); return; } } - else if (strstr(*cDevice::ActualDevice()->DeviceType(), SATIP_DEVICE)) { - // nop - } - else if (femonConfig.usesvdrp) { - if (!SvdrpConnect() || !SvdrpTune()) - return; - } - else { - error("cFemonOsd::ChannelSwitch() cannot open frontend device."); - return; - } } if (m_Receiver) { @@ -917,7 +915,6 @@ bool cFemonOsd::DeviceSwitch(int direction) } // Do the actual switch if valid device found if (d && ValidDevice) { - cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), 0, true); cControl::Shutdown(); if (NeedsDetachAllReceivers) d->DetachAllReceivers(); @@ -936,7 +933,6 @@ bool cFemonOsd::DeviceSwitch(int direction) if (d == cDevice::PrimaryDevice()) d->ForceTransferMode(); cControl::Launch(new cTransferControl(d, channel)); - cStatus::MsgChannelSwitch(cDevice::PrimaryDevice(), channel->Number(), true); return (true); } }