fixes for old api.. not all tested..
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 12 Jan 2005 21:11:59 +0000 (21:11 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 12 Jan 2005 21:11:59 +0000 (21:11 +0000)
lib/dvb/decoder.cpp
lib/dvb/demux.cpp
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/idvb.h
lib/dvb/sec.cpp
lib/dvb/sec.h

index da52904..0f8190d 100644 (file)
@@ -1,8 +1,25 @@
+#include <config.h>
 #include <lib/base/eerror.h>
 #include <lib/dvb/decoder.h>
+#if HAVE_DVB_API_VERSION < 3 
+#define audioStatus audio_status
+#define videoStatus video_status
+#define pesType pes_type
+#define playState play_state
+#define audioStreamSource_t audio_stream_source_t
+#define videoStreamSource_t video_stream_source_t
+#define streamSource stream_source
+#define dmxPesFilterParams dmx_pes_filter_params
+#define DMX_PES_VIDEO DMX_PES_VIDEO0
+#define DMX_PES_AUDIO DMX_PES_AUDIO0
+#include <ost/dmx.h>
+#include <ost/video.h>
+#include <ost/audio.h>
+#else
 #include <linux/dvb/audio.h>
 #include <linux/dvb/video.h>
 #include <linux/dvb/dmx.h>
+#endif
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -14,11 +31,19 @@ DEFINE_REF(eDVBAudio);
 eDVBAudio::eDVBAudio(eDVBDemux *demux, int dev): m_demux(demux)
 {
        char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(filename, "/dev/dvb/card%d/audio%d", demux->adapter, dev);      
+#else
        sprintf(filename, "/dev/dvb/adapter%d/audio%d", demux->adapter, dev);
+#endif
        m_fd = ::open(filename, O_RDWR);
        if (m_fd < 0)
                eWarning("%s: %m", filename);
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(filename, "/dev/dvb/card%d/demux%d", demux->adapter, demux->demux);
+#else
        sprintf(filename, "/dev/dvb/adapter%d/demux%d", demux->adapter, demux->demux);
+#endif 
        m_fd_demux = ::open(filename, O_RDWR);
        if (m_fd_demux < 0)
                eWarning("%s: %m", filename);
@@ -30,11 +55,10 @@ int eDVBAudio::startPid(int pid)
        if ((m_fd < 0) || (m_fd_demux < 0))
                return -1;
        dmx_pes_filter_params pes;
-       
        pes.pid      = pid;
        pes.input    = DMX_IN_FRONTEND;
        pes.output   = DMX_OUT_DECODER;
-       pes.pes_type = DMX_PES_AUDIO0;
+       pes.pes_type = DMX_PES_AUDIO;  // DMX_PES_AUDIO0
        pes.flags    = 0;
        if (::ioctl(m_fd_demux, DMX_SET_PES_FILTER, &pes) < 0)
        {
@@ -73,11 +97,19 @@ DEFINE_REF(eDVBVideo);
 eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev): m_demux(demux)
 {
        char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(filename, "/dev/dvb/card%d/video%d", demux->adapter, dev);
+#else
        sprintf(filename, "/dev/dvb/adapter%d/video%d", demux->adapter, dev);
+#endif
        m_fd = ::open(filename, O_RDWR);
        if (m_fd < 0)
                eWarning("%s: %m", filename);
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(filename, "/dev/dvb/card%d/demux%d", demux->adapter, demux->demux);
+#else
        sprintf(filename, "/dev/dvb/adapter%d/demux%d", demux->adapter, demux->demux);
+#endif
        m_fd_demux = ::open(filename, O_RDWR);
        if (m_fd_demux < 0)
                eWarning("%s: %m", filename);
@@ -92,7 +124,8 @@ int eDVBVideo::startPid(int pid)
        pes.pid      = pid;
        pes.input    = DMX_IN_FRONTEND;
        pes.output   = DMX_OUT_DECODER;
-       pes.pes_type = DMX_PES_VIDEO0;
+       pes.pes_type = DMX_PES_VIDEO;
+       pes.pes_type = 
        pes.flags    = 0;
        if (::ioctl(m_fd_demux, DMX_SET_PES_FILTER, &pes) < 0)
        {
index 4522706..286821c 100644 (file)
@@ -1,10 +1,16 @@
+#include <config.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <errno.h>
 #include <unistd.h>
 
+#if HAVE_DVB_API_VERSION < 3
+#include <ost/dmx.h>
+#else
 #include <linux/dvb/dmx.h>
+#endif
+
 #include "crc32.h"
 
 #include <lib/base/eerror.h>
@@ -61,7 +67,11 @@ void eDVBSectionReader::data(int)
 eDVBSectionReader::eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res): demux(demux)
 {
        char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(filename, "/dev/dvb/card%d/demux%d", demux->adapter, demux->demux);
+#else
        sprintf(filename, "/dev/dvb/adapter%d/demux%d", demux->adapter, demux->demux);
+#endif
        fd = ::open(filename, O_RDWR);
        
        if (fd >= 0)
@@ -92,11 +102,18 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask)
        if (fd < 0)
                return -ENODEV;
 
+#if HAVE_DVB_API_VERSION < 3
+       dmxSctFilterParams sct;
+#else
        dmx_sct_filter_params sct;
-       
+#endif
        sct.pid     = mask.pid;
        sct.timeout = 0;
+#if HAVE_DVB_API_VERSION < 3
+       sct.flags   = 0;
+#else
        sct.flags   = DMX_IMMEDIATE_START;
+#endif
        if (mask.flags & eDVBSectionFilterMask::rfCRC)
        {
                sct.flags |= DMX_CHECK_CRC;
@@ -106,11 +123,25 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask)
        
        memcpy(sct.filter.filter, mask.data, DMX_FILTER_SIZE);
        memcpy(sct.filter.mask, mask.mask, DMX_FILTER_SIZE);
+#if HAVE_DVB_API_VERSION >= 3
        memcpy(sct.filter.mode, mask.mode, DMX_FILTER_SIZE);
+#endif
        
        res = ::ioctl(fd, DMX_SET_FILTER, &sct);
        if (!res)
+       {
+#if HAVE_DVB_API_VERSION < 3
+               res = ::ioctl(fd, DMX_SET_NEGFILTER_MASK, mask.mode);
+               if (!res)
+               {
+                       res = ::ioctl(fd, DMX_START, 0);
+                       if (!res)
+                               active = 1;
+               }
+#else
                active = 1;
+#endif
+       }
        return res;
 }
 
index 5b1aaa2..5eb6107 100644 (file)
@@ -1,3 +1,4 @@
+#include <config.h>
 #include <lib/dvb/dvb.h>
 #include <lib/base/eerror.h>
 #include <errno.h>
@@ -5,7 +6,12 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 
+#if HAVE_DVB_API_VERSION < 3
+#include <ost/frontend.h>
+#include <ost/sec.h>
+#else
 #include <linux/dvb/frontend.h>
+#endif
 
 #include <lib/dvb_si/satellite_delivery_system_descriptor.h>
 #include <lib/dvb_si/cable_delivery_system_descriptor.h>
@@ -190,14 +196,34 @@ DEFINE_REF(eDVBFrontend);
 
 eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok): m_type(-1)
 {
+#if HAVE_DVB_API_VERSION < 3
+       char sec_filename[128];
+#endif
        char filename[128];
+
        int result;
-       dvb_frontend_info fe_info;
-       
+
        m_sn = 0;
        m_timeout = 0;
-       
+
+#if HAVE_DVB_API_VERSION < 3
+       sprintf(sec_filename, "/dev/dvb/card%d/sec%d", adap, fe);
+       m_secfd = ::open(sec_filename, O_RDWR);
+       if (m_secfd < 0)
+       {
+               eWarning("failed! (%s) %m", sec_filename);
+               ok = 0;
+               return;
+       }
+       else
+               eDebug("m_secfd is %d", m_secfd);
+
+       FrontendInfo fe_info;
+       sprintf(filename, "/dev/dvb/card%d/frontend%d", adap, fe);
+#else
+       dvb_frontend_info fe_info;      
        sprintf(filename, "/dev/dvb/adapter%d/frontend%d", adap, fe);
+#endif
        eDebug("opening frontend.");
        m_fd = ::open(filename, O_RDWR|O_NONBLOCK);
        if (m_fd < 0)
@@ -206,7 +232,7 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok): m_type(-1)
                ok = 0;
                return;
        }
-       
+
        result = ::ioctl(m_fd, FE_GET_INFO, &fe_info);
        
        if (result < 0) {
@@ -262,7 +288,11 @@ void eDVBFrontend::feEvent(int w)
 {
        while (1)
        {
+#if HAVE_DVB_API_VERSION < 3
+               FrontendEvent event;
+#else
                dvb_frontend_event event;
+#endif
                int res;
                int state;
                res = ::ioctl(m_fd, FE_GET_EVENT, &event);
@@ -278,9 +308,13 @@ void eDVBFrontend::feEvent(int w)
                
                if (w < 0)
                        continue;
-               
+
+#if HAVE_DVB_API_VERSION < 3
+               if (event.type == FE_COMPLETION_EV)
+#else
                eDebug("fe event: status %x, inversion %s", event.status, (event.parameters.inversion == INVERSION_ON) ? "on" : "off");
                if (event.status & FE_HAS_LOCK)
+#endif
                {
                        state = stateLock;
                } else
@@ -327,8 +361,12 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
        if (m_type == -1)
                return -ENODEV;
 
+#if HAVE_DVB_API_VERSION < 3
+       FrontendParameters parm;
+#else
        dvb_frontend_parameters parm;
-       
+#endif
+
        feEvent(-1);
        
        switch (m_type)
@@ -351,8 +389,11 @@ RESULT eDVBFrontend::tune(const iDVBFrontendParameters &where)
                res = m_sec->prepare(*this, parm, feparm);
                if (res)
                        return res;
-               
+#if HAVE_DVB_API_VERSION < 3
+               eDebug("tuning to %d mhz", parm.Frequency/1000);
+#else
                eDebug("tuning to %d mhz", parm.frequency/1000);
+#endif
                break;
        }
        case feCable:
@@ -397,8 +438,12 @@ RESULT eDVBFrontend::connectStateChange(const Slot1<void,iDVBFrontend*> &stateCh
 
 RESULT eDVBFrontend::setVoltage(int voltage)
 {
+#if HAVE_DVB_API_VERSION < 3
+       secVoltage vlt;
+#else
        fe_sec_voltage_t vlt;
-       
+#endif
+
        switch (voltage)
        {
        case voltageOff:
@@ -413,8 +458,11 @@ RESULT eDVBFrontend::setVoltage(int voltage)
        default:
                return -ENODEV;
        }
-       
+#if HAVE_DVB_API_VERSION < 3
+       return ::ioctl(m_secfd, SEC_SET_VOLTAGE, vlt);
+#else
        return ::ioctl(m_fd, FE_SET_VOLTAGE, vlt);
+#endif
 }
 
 RESULT eDVBFrontend::getState(int &state)
@@ -425,8 +473,12 @@ RESULT eDVBFrontend::getState(int &state)
 
 RESULT eDVBFrontend::setTone(int t)
 {
+#if HAVE_DVB_API_VERSION < 3
+       secToneMode_t tone;
+#else
        fe_sec_tone_mode_t tone;
-       
+#endif
+
        switch (t)
        {
        case toneOn:
@@ -438,12 +490,48 @@ RESULT eDVBFrontend::setTone(int t)
        default:
                return -ENODEV;
        }
-       
-       return ::ioctl(m_fd, FE_SET_TONE, tone);        
+#if HAVE_DVB_API_VERSION < 3   
+       return ::ioctl(m_secfd, SEC_SET_TONE, tone);
+#else  
+       return ::ioctl(m_fd, FE_SET_TONE, tone);
+#endif
 }
 
 RESULT eDVBFrontend::sendDiseqc(const eDVBDiseqcCommand &diseqc)
 {
+#if HAVE_DVB_API_VERSION < 3
+       secCmdSequence seq;
+       secCommand cmd;
+
+       cmd.type = SEC_CMDTYPE_DISEQC_RAW;
+       cmd.u.diseqc.cmdtype = diseqc.data[0];
+       eDebug("cmdtype is %02x", diseqc.data[0]);
+       cmd.u.diseqc.addr = diseqc.data[1];
+       eDebug("cmdaddr is %02x", diseqc.data[1]);
+       cmd.u.diseqc.cmd = diseqc.data[2];
+       eDebug("cmd is %02x", diseqc.data[2]);
+       cmd.u.diseqc.numParams = diseqc.len-3;
+       eDebug("numparams %d", diseqc.len-3);
+
+       memcpy(cmd.u.diseqc.params, diseqc.data+3, diseqc.len-3);
+       for (int i=0; i < diseqc.len-3; ++i )
+               eDebugNoNewLine("%02x ", diseqc.data[3+i]);
+       eDebug("");
+
+       seq.continuousTone = SEC_TONE_OFF;
+       seq.voltage = SEC_VOLTAGE_13;
+       seq.miniCommand = SEC_MINI_NONE;
+       seq.commands=&cmd;
+       seq.numCommands=1;
+
+
+       if ( ioctl(m_secfd, SEC_SEND_SEQUENCE, &seq) < 0 )
+       {
+               eDebug("SEC_SEND_SEQUENCE failed ( %m )");
+               return -EINVAL;
+       }
+       return 0;
+#else
        struct dvb_diseqc_master_cmd cmd;
        if (::ioctl(m_fd, FE_SET_TONE, SEC_TONE_OFF))
                return -EINVAL;
@@ -454,6 +542,7 @@ RESULT eDVBFrontend::sendDiseqc(const eDVBDiseqcCommand &diseqc)
        if (::ioctl(m_fd, FE_DISEQC_SEND_MASTER_CMD, &cmd))
                return -EINVAL;
        usleep(15 * 1000);
+#endif
        eDebug("diseqc ok");
        return 0;
 }
index c179d57..9036dc3 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __dvb_frontend_h
 #define __dvb_frontend_h
 
+#include <config.h>
 #include <lib/dvb/idvb.h>
 
 class eDVBFrontendParameters: public iDVBFrontendParameters
@@ -35,6 +36,9 @@ class eDVBFrontend: public iDVBFrontend, public Object
        DECLARE_REF;
        int m_type;
        int m_fd;
+#if HAVE_DVB_API_VERSION < 3
+       int m_secfd;
+#endif
        int m_state;
        Signal1<void,iDVBFrontend*> m_stateChanged;
        ePtr<iDVBSatelliteEquipmentControl> m_sec;
index a69f170..878b361 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef __dvb_idvb_h
 #define __dvb_idvb_h
 
+#include <config.h>
+#if HAVE_DVB_API_VERSION < 3
+#include <ost/frontend.h>
+#endif
 #include <lib/base/object.h>
 #include <lib/base/ebase.h>
 #include <lib/service/service.h>
@@ -267,7 +271,11 @@ public:
 class iDVBSatelliteEquipmentControl: public iObject
 {
 public:
+#if HAVE_DVB_API_VERSION < 3
+       virtual RESULT prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat)=0;
+#else
        virtual RESULT prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat)=0;
+#endif
 };
 
 struct eDVBCIRouting
index c033266..1ec1d5a 100644 (file)
@@ -1,5 +1,10 @@
+#include <config.h>
 #include <lib/dvb/sec.h>
+#if HAVE_DVB_API_VERSION < 3
+#include <ost/frontend.h>
+#else
 #include <linux/dvb/frontend.h>
+#endif
 #include <lib/base/eerror.h>
 
 DEFINE_REF(eDVBSatelliteEquipmentControl);
@@ -8,7 +13,11 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl()
 {
 }
 
+#if HAVE_DVB_API_VERSION < 3
+RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat)
+#else
 RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat)
+#endif
 {
        int hi;
        eDebug("(very) ugly and hardcoded eDVBSatelliteEquipmentControl");
@@ -19,24 +28,43 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, struct dvb
                hi = 0;
        
        if (hi)
+#if HAVE_DVB_API_VERSION < 3
+               parm.Frequency = sat.frequency - 10600000;
+#else
                parm.frequency = sat.frequency - 10600000;
+#endif
        else
+#if HAVE_DVB_API_VERSION < 3
+               parm.Frequency = sat.frequency -  9750000;
+#else
                parm.frequency = sat.frequency -  9750000;
+#endif
        
 //     frontend.sentDiseqc(...);
 
+#if HAVE_DVB_API_VERSION < 3
+       parm.Inversion = (!sat.inversion) ? INVERSION_ON : INVERSION_OFF;
+#else
        parm.inversion = (!sat.inversion) ? INVERSION_ON : INVERSION_OFF;
+#endif
 
        switch (sat.fec)
        {
 //             case 1:
 //             case ...:
        default:
+#if HAVE_DVB_API_VERSION < 3
+               parm.u.qpsk.FEC_inner = FEC_AUTO;
+#else
                parm.u.qpsk.fec_inner = FEC_AUTO;
+#endif
                break;
        }
+#if HAVE_DVB_API_VERSION < 3
+       parm.u.qpsk.SymbolRate = sat.symbol_rate;
+#else
        parm.u.qpsk.symbol_rate = sat.symbol_rate;
-       
+#endif
 
        frontend.setVoltage((sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Vertical) ? iDVBFrontend::voltage13 : iDVBFrontend::voltage18);
 
@@ -56,7 +84,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, struct dvb
 
        frontend.sendDiseqc(diseqc);
        frontend.setTone(hi ? iDVBFrontend::toneOn : iDVBFrontend::toneOff);
-       
+
        return 0;
 }
 
index 13aa9aa..18aec67 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __dvb_sec_h
 #define __dvb_sec_h
 
+#include <config.h>
 #include <lib/dvb/idvb.h>
 
 class eDVBSatelliteEquipmentControl: public iDVBSatelliteEquipmentControl
@@ -8,7 +9,11 @@ class eDVBSatelliteEquipmentControl: public iDVBSatelliteEquipmentControl
 public:
        DECLARE_REF;
        eDVBSatelliteEquipmentControl();
+#if HAVE_DVB_API_VERSION < 3
+       RESULT prepare(iDVBFrontend &frontend, FrontendParameters &parm, eDVBFrontendParametersSatellite &sat);
+#else
        RESULT prepare(iDVBFrontend &frontend, struct dvb_frontend_parameters &parm, eDVBFrontendParametersSatellite &sat);
+#endif
 };
 
 #endif