From: Andreas Monzner Date: Wed, 12 Jan 2005 21:11:59 +0000 (+0000) Subject: fixes for old api.. not all tested.. X-Git-Tag: 2.6.0~5949 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/967664233fc4ce992405a0e86e0c6cd594dfba57 fixes for old api.. not all tested.. --- diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index da529046..0f8190de 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1,8 +1,25 @@ +#include #include #include +#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 +#include +#include +#else #include #include #include +#endif #include #include @@ -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) { diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index 4522706d..286821c3 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -1,10 +1,16 @@ +#include #include #include #include #include #include +#if HAVE_DVB_API_VERSION < 3 +#include +#else #include +#endif + #include "crc32.h" #include @@ -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; } diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 5b1aaa2a..5eb61077 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -5,7 +6,12 @@ #include #include +#if HAVE_DVB_API_VERSION < 3 +#include +#include +#else #include +#endif #include #include @@ -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 &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; } diff --git a/lib/dvb/frontend.h b/lib/dvb/frontend.h index c179d574..9036dc3e 100644 --- a/lib/dvb/frontend.h +++ b/lib/dvb/frontend.h @@ -1,6 +1,7 @@ #ifndef __dvb_frontend_h #define __dvb_frontend_h +#include #include 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 m_stateChanged; ePtr m_sec; diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index a69f170f..878b3619 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -1,6 +1,10 @@ #ifndef __dvb_idvb_h #define __dvb_idvb_h +#include +#if HAVE_DVB_API_VERSION < 3 +#include +#endif #include #include #include @@ -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 diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index c033266a..1ec1d5a2 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -1,5 +1,10 @@ +#include #include +#if HAVE_DVB_API_VERSION < 3 +#include +#else #include +#endif #include 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; } diff --git a/lib/dvb/sec.h b/lib/dvb/sec.h index 13aa9aa8..18aec679 100644 --- a/lib/dvb/sec.h +++ b/lib/dvb/sec.h @@ -1,6 +1,7 @@ #ifndef __dvb_sec_h #define __dvb_sec_h +#include #include 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