#define GUARD_INTERVAL_AUTO (GuardInterval)4
#define HIERARCHY_AUTO (Hierarchy)4
#define parm.frequency parm.Frequency
+#define parm.inversion parm.Inversion
+#define parm.u.qpsk.symbol_rate parm.u.qpsk.SymbolRate
+#define parm.u.qpsk.fec_inner parm.u.qpsk.FEC_inner
#define parm.u.qam.symbol_rate parm.u.qam.SymbolRate
#define parm.u.qam.fec_inner parm.u.qam.FEC_inner
#define parm.u.qam.modulation parm.u.qam.QAM
#define parm.u.ofdm.transmission_mode parm.u.ofdm.TransmissionMode
#define parm.u.ofdm.guard_interval parm.u.ofdm.guardInterval
#define parm.u.ofdm.hierarchy_information parm.u.ofdm.HierarchyInformation
-#define parm.inversion parm.Inversion
#else
#include <linux/dvb/frontend.h>
#endif
return 0;
}
+void PutToDict(PyObject *dict, const char*key, long value)
+{
+ PyObject *item = PyInt_FromLong(value);
+ if (item)
+ {
+ if (PyDict_SetItemString(dict, key, item))
+ eDebug("put %s to dict failed", key);
+ Py_DECREF(item);
+ }
+ else
+ eDebug("could not create PyObject for %s", key);
+}
+
+void PutToDict(PyObject *dict, const char*key, const char *value)
+{
+ PyObject *item = PyString_FromString(value);
+ if (item)
+ {
+ if (PyDict_SetItemString(dict, key, item))
+ eDebug("put %s to dict failed", key);
+ Py_DECREF(item);
+ }
+ else
+ eDebug("could not create PyObject for %s", key);
+}
+
+void fillDictWithSatelliteData(PyObject *dict, const FRONTENDPARAMETERS &parm, eDVBFrontend *fe)
+{
+ int freq_offset=0;
+ int csw=0;
+ const char *fec=0;
+ fe->getData(0, csw);
+ fe->getData(9, freq_offset);
+ int frequency = parm.frequency + freq_offset;
+ PutToDict(dict, "frequency", frequency);
+ PutToDict(dict, "symbol_rate", parm.u.qpsk.symbol_rate);
+
+ switch(parm.u.qpsk.fec_inner)
+ {
+ case FEC_1_2:
+ fec = "FEC_1_2";
+ break;
+ case FEC_2_3:
+ fec = "FEC_2_3";
+ break;
+ case FEC_3_4:
+ fec = "FEC_3_4";
+ break;
+ case FEC_5_6:
+ fec = "FEC_5_6";
+ break;
+ case FEC_7_8:
+ fec = "FEC_7_8";
+ break;
+ default:
+ case FEC_AUTO:
+ fec = "FEC_AUTO";
+ break;
+ }
+ PutToDict(dict, "fec_inner", fec);
+}
+
+void fillDictWithCableData(PyObject *dict, const FRONTENDPARAMETERS &parm)
+{
+ const char *tmp=0;
+ PutToDict(dict, "frequency", parm.frequency/1000);
+ PutToDict(dict, "symbol_rate", parm.u.qam.symbol_rate);
+ switch(parm.u.qam.fec_inner)
+ {
+ case FEC_NONE:
+ tmp = "FEC_NONE";
+ break;
+ case FEC_1_2:
+ tmp = "FEC_1_2";
+ break;
+ case FEC_2_3:
+ tmp = "FEC_2_3";
+ break;
+ case FEC_3_4:
+ tmp = "FEC_3_4";
+ break;
+ case FEC_5_6:
+ tmp = "FEC_5_6";
+ break;
+ case FEC_7_8:
+ tmp = "FEC_7_8";
+ break;
+ case FEC_8_9:
+ tmp = "FEC_8_9";
+ break;
+ default:
+ case FEC_AUTO:
+ tmp = "FEC_AUTO";
+ break;
+ }
+ PutToDict(dict, "fec_inner", tmp);
+ switch(parm.u.qam.modulation)
+ {
+ case QAM_16:
+ tmp = "QAM_16";
+ break;
+ case QAM_32:
+ tmp = "QAM_32";
+ break;
+ case QAM_64:
+ tmp = "QAM_64";
+ break;
+ case QAM_128:
+ tmp = "QAM_128";
+ break;
+ case QAM_256:
+ tmp = "QAM_256";
+ break;
+ default:
+ case QAM_AUTO:
+ tmp = "QAM_AUTO";
+ break;
+ }
+ PutToDict(dict, "modulation", tmp);
+}
+
+void fillDictWithTerrestrialData(PyObject *dict, const FRONTENDPARAMETERS &parm)
+{
+ const char *tmp=0;
+ PutToDict(dict, "frequency", parm.frequency);
+/*
+#define parm.u.ofdm.bandwidth parm.u.ofdm.bandWidth
+#define parm.u.ofdm.code_rate_LP parm.u.ofdm.LP_CodeRate
+#define parm.u.ofdm.code_rate_HP parm.u.ofdm.HP_CodeRate
+#define parm.u.ofdm.constellation parm.u.ofdm.Constellation
+#define parm.u.ofdm.transmission_mode parm.u.ofdm.TransmissionMode
+#define parm.u.ofdm.guard_interval parm.u.ofdm.guardInterval
+#define parm.u.ofdm.hierarchy_information parm.u.ofdm.HierarchyInformation
+*/
+}
+
+PyObject *eDVBFrontend::readTransponderData(bool original)
+{
+ PyObject *ret=PyDict_New();
+
+ if (ret)
+ {
+ bool read=m_fd != -1;
+ const char *tmp=0;
+
+ PutToDict(ret, "tuner_number", m_fe);
+
+ switch(m_type)
+ {
+ case feSatellite:
+ tmp = "DVB-S";
+ break;
+ case feCable:
+ tmp = "DVB-C";
+ break;
+ case feTerrestrial:
+ tmp = "DVB-T";
+ break;
+ default:
+ tmp = "UNKNOWN";
+ read=false;
+ break;
+ }
+ PutToDict(ret, "tuner_type", tmp);
+
+ if (read)
+ {
+ FRONTENDPARAMETERS front;
+
+ tmp = "UNKNOWN";
+ switch(m_state)
+ {
+ case stateIdle:
+ tmp="IDLE";
+ break;
+ case stateTuning:
+ tmp="TUNING";
+ break;
+ case stateFailed:
+ tmp="FAILED";
+ break;
+ case stateLock:
+ tmp="LOCKED";
+ break;
+ case stateLostLock:
+ tmp="LOSTLOCK";
+ break;
+ default:
+ break;
+ }
+ PutToDict(ret, "tuner_state", tmp);
+
+ PutToDict(ret, "tuner_locked", readFrontendData(Locked));
+ PutToDict(ret, "tuner_synced", readFrontendData(Synced));
+ PutToDict(ret, "tuner_bit_error_rate", readFrontendData(bitErrorRate));
+ PutToDict(ret, "tuner_signal_power", readFrontendData(signalPower));
+ PutToDict(ret, "tuner_signal_quality", readFrontendData(signalQuality));
+
+ if (!original && ioctl(m_fd, FE_GET_FRONTEND, &front)<0)
+ eDebug("FE_GET_FRONTEND (%m)");
+ else
+ {
+ tmp = "INVERSION_AUTO";
+ switch(parm.inversion)
+ {
+ case INVERSION_ON:
+ tmp = "INVERSION_ON";
+ break;
+ case INVERSION_OFF:
+ tmp = "INVERSION_OFF";
+ break;
+ default:
+ break;
+ }
+ if (tmp)
+ PutToDict(ret, "inversion", tmp);
+
+ switch(m_type)
+ {
+ case feSatellite:
+ fillDictWithSatelliteData(ret, original?parm:front, this);
+ break;
+ case feCable:
+ fillDictWithCableData(ret, original?parm:front);
+ break;
+ case feTerrestrial:
+ fillDictWithTerrestrialData(ret, original?parm:front);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ Py_INCREF(Py_None);
+ ret = Py_None;
+ }
+ return ret;
+}
+
#ifndef FP_IOCTL_GET_ID
#define FP_IOCTL_GET_ID 0
#endif
}
res = m_sec->prepare(*this, parm, feparm, 1 << m_fe);
if (!res)
+ {
+ parm.u.qpsk.symbol_rate = feparm.symbol_rate;
+ switch (feparm.inversion)
+ {
+ case eDVBFrontendParametersSatellite::Inversion::On:
+ parm.inversion = INVERSION_ON;
+ break;
+ case eDVBFrontendParametersSatellite::Inversion::Off:
+ parm.inversion = INVERSION_OFF;
+ break;
+ default:
+ case eDVBFrontendParametersSatellite::Inversion::Unknown:
+ parm.inversion = INVERSION_AUTO;
+ break;
+ }
+ switch (feparm.fec)
+ {
+ default:
+ case eDVBFrontendParametersSatellite::FEC::fNone:
+ eDebug("no fec set.. assume auto");
+ case eDVBFrontendParametersSatellite::FEC::fAuto:
+ parm.u.qpsk.fec_inner = FEC_AUTO;
+ break;
+ case eDVBFrontendParametersSatellite::FEC::f1_2:
+ parm.u.qpsk.fec_inner = FEC_1_2;
+ break;
+ case eDVBFrontendParametersSatellite::FEC::f2_3:
+ parm.u.qpsk.fec_inner = FEC_2_3;
+ break;
+ case eDVBFrontendParametersSatellite::FEC::f3_4:
+ parm.u.qpsk.fec_inner = FEC_3_4;
+ break;
+ case eDVBFrontendParametersSatellite::FEC::f5_6:
+ parm.u.qpsk.fec_inner = FEC_5_6;
+ break;
+ case eDVBFrontendParametersSatellite::FEC::f7_8:
+ parm.u.qpsk.fec_inner = FEC_7_8;
+ break;
+ }
eDebug("tuning to %d mhz", parm.frequency/1000);
+ }
return res;
}