// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+/** \file
+ \brief DVBSocketController non-inline non-template implementation */
+#include "DVBSocketController.hh"
+
+// Custom includes
+#include <sstream>
#include "senf/Utils/Exception.hh"
#include "senf/Utils/Logger/Logger.hh"
#include "senf/Utils/membind.hh"
-#include "DVBSocketController.hh"
-#include <sstream>
-using namespace std;
#define prefix_
+///////////////////////////////cc.p////////////////////////////////////////
+using namespace std;
-
-senf::DVBSocketController::DVBSocketController(DVBFrontendHandle frontendHandle_, DVBDemuxSectionHandle sectionHandle_ , const Callback & cb_) :
- dir( this ),
- frontendHandle( frontendHandle_ ),
- sectionHandle( sectionHandle_ ),
- type( frontendHandle.protocol().getInfo().type ),
- parser( type ),
- cb( cb_ ),
- event( "senf::DVBSocketController::readEvent", senf::membind(&DVBSocketController::readEvent, this), frontendHandle, senf::scheduler::FdEvent::EV_PRIO, false )
+senf::DVBSocketController::DVBSocketController(DVBFrontendHandle frontendHandle_, DVBDemuxSectionHandle sectionHandle_ , const Callback & cb_)
+ : dir( this ),
+ frontendHandle( frontendHandle_ ),
+ sectionHandle( sectionHandle_ ),
+ type( frontendHandle.protocol().getInfo().type ),
+ parser( type ),
+ cb( cb_ ),
+ event( "senf::DVBSocketController::readEvent", senf::membind(&DVBSocketController::readEvent, this), frontendHandle, senf::scheduler::FdEvent::EV_PRIO, false )
{
initConsole();
}
prefix_ senf::DVBSocketController::~DVBSocketController()
{
}
-prefix_ void senf::DVBSocketController::tuneToCMD(const string & input, const string & mode){
+
+prefix_ void senf::DVBSocketController::tuneToCMD(const string & input, const string & mode)
+{
struct dvb_frontend_parameters frontend;
-
-
+
// no valid configline, so it will be treaten like a channel name
if (input.find(":")==string::npos){
if (mode.c_str()[0]=='a')
}
// add psydo name "foo" to complete configline syntax
frontend = parser.getFrontendParam("foo:"+input);
-
+
if (mode.c_str()[0]=='a'){
switch (type) {
case FE_QPSK:
prefix_ void senf::DVBSocketController::tuneTo(const string & channel)
{
struct dvb_frontend_parameters frontend;
-
+
string configLine = parser.getConfigLine(channel);
-
+
frontend = parser.getFrontendParam(configLine);
switch (type) {
case FE_QPSK:
break;
default:
SENF_THROW_SYSTEM_EXCEPTION("Could not determine type of card.");
- }
+ }
}
-prefix_ void senf::DVBSocketController::tuneDVB_T(unsigned int frequency,
+prefix_ void senf::DVBSocketController::tuneDVB_T(unsigned int frequency,
fe_spectral_inversion_t inversion,
- fe_bandwidth_t bandwidth,
+ fe_bandwidth_t bandwidth,
fe_code_rate_t code_rate_HP, /* high priority stream code rate */
fe_code_rate_t code_rate_LP, /* low priority stream code rate */
fe_modulation_t constellation, /* modulation type (see above) */
- fe_transmit_mode_t transmission_mode,
+ fe_transmit_mode_t transmission_mode,
fe_guard_interval_t guard_interval,
fe_hierarchy_t hierarchy_information
)
{
if(type != FE_OFDM)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-T Card!";
-
+
event.enable();
-
+
frontendHandle.protocol().setNonBlock();
- frontendHandle.protocol().tuneDVB_T(frequency,
- inversion,
- bandwidth,
- code_rate_HP,
- code_rate_LP,
- constellation,
- transmission_mode,
- guard_interval,
+ frontendHandle.protocol().tuneDVB_T(frequency,
+ inversion,
+ bandwidth,
+ code_rate_HP,
+ code_rate_LP,
+ constellation,
+ transmission_mode,
+ guard_interval,
hierarchy_information);
}
-prefix_ void senf::DVBSocketController::tuneDVB_S(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate){
+prefix_ void senf::DVBSocketController::tuneDVB_S(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate)
+{
if(type != FE_QPSK)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-S Card!";
-
+
event.enable();
-
+
frontendHandle.protocol().setNonBlock();
frontendHandle.protocol().tuneDVB_S(frequency, inversion, symbole_rate, code_rate);
}
-prefix_ void senf::DVBSocketController::tuneDVB_C(unsigned int frequency,
+prefix_ void senf::DVBSocketController::tuneDVB_C(unsigned int frequency,
fe_spectral_inversion_t inversion,
unsigned int symbol_rate,
fe_code_rate_t fec_inner,
fe_modulation_t modulation
)
-{
+{
if(type != FE_QAM)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-C Card!";
-
+
event.enable();
-
+
frontendHandle.protocol().setNonBlock();
-
+
frontendHandle.protocol().tuneDVB_C(frequency, inversion, symbol_rate, fec_inner, modulation);
}
struct dvb_frontend_parameters frontend;
dvb_frontend_event ev;
string configLine = parser.getConfigLine(channel);
-
+
frontend = parser.getFrontendParam(configLine);
switch (type) {
case FE_QPSK:
return ev;
}
-prefix_ dvb_frontend_event senf::DVBSocketController::tuneDVB_T_sync(unsigned int frequency,
+prefix_ dvb_frontend_event senf::DVBSocketController::tuneDVB_T_sync(unsigned int frequency,
fe_spectral_inversion_t inversion,
- fe_bandwidth_t bandwidth,
+ fe_bandwidth_t bandwidth,
fe_code_rate_t code_rate_HP, /* high priority stream code rate */
fe_code_rate_t code_rate_LP, /* low priority stream code rate */
fe_modulation_t constellation, /* modulation type (see above) */
- fe_transmit_mode_t transmission_mode,
+ fe_transmit_mode_t transmission_mode,
fe_guard_interval_t guard_interval,
fe_hierarchy_t hierarchy_information
)
{
if(type != FE_OFDM)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-T Card!";
-
+
event.disable();
-
+
frontendHandle.protocol().setNonBlock(false);
-
- frontendHandle.protocol().tuneDVB_T(frequency,
- inversion,
- bandwidth,
- code_rate_HP,
- code_rate_LP,
- constellation,
- transmission_mode,
- guard_interval,
+
+ frontendHandle.protocol().tuneDVB_T(frequency,
+ inversion,
+ bandwidth,
+ code_rate_HP,
+ code_rate_LP,
+ constellation,
+ transmission_mode,
+ guard_interval,
hierarchy_information);
-
+
if(!frontendHandle.waitOOBReadable(senf::ClockService::seconds(2)))
SENF_THROW_SYSTEM_EXCEPTION("Could not tune to channel!");
-
+
return frontendHandle.protocol().getEvent();
}
prefix_ dvb_frontend_event senf::DVBSocketController::tuneDVB_S_sync(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate){
if(type != FE_QPSK)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-S Card!";
-
+
event.disable();
-
+
frontendHandle.protocol().setNonBlock(false);
-
+
frontendHandle.protocol().tuneDVB_S(frequency, inversion, symbole_rate, code_rate);
-
+
if(!frontendHandle.waitOOBReadable(senf::ClockService::seconds(2)))
SENF_THROW_SYSTEM_EXCEPTION("Could not tune to channel!");
return frontendHandle.protocol().getEvent();
}
-prefix_ dvb_frontend_event senf::DVBSocketController::tuneDVB_C_sync(unsigned int frequency,
+prefix_ dvb_frontend_event senf::DVBSocketController::tuneDVB_C_sync(unsigned int frequency,
fe_spectral_inversion_t inversion,
unsigned int symbol_rate,
fe_code_rate_t fec_inner,
fe_modulation_t modulation
)
-{
+{
if(type != FE_QAM)
SENF_THROW_SYSTEM_EXCEPTION("Type of card is: ") << getTypeString() << " for this operation you need a DVB-C Card!";
-
+
event.disable();
-
+
frontendHandle.protocol().setNonBlock(false);
-
+
frontendHandle.protocol().tuneDVB_C(frequency, inversion, symbol_rate, fec_inner, modulation);
if(!frontendHandle.waitOOBReadable(senf::ClockService::seconds(2)))
SENF_THROW_SYSTEM_EXCEPTION("Could not tune to channel!");
}
-prefix_ string senf::DVBSocketController::getTypeString(){
+prefix_ string senf::DVBSocketController::getTypeString()
+{
switch (type) {
case FE_QPSK:
return "DVB-S";
default:
SENF_THROW_SYSTEM_EXCEPTION("Could not determine type of card.");
}
-
}
-prefix_ unsigned int senf::DVBSocketController::bitErrorRate(){
+
+prefix_ unsigned int senf::DVBSocketController::bitErrorRate()
+{
return frontendHandle.protocol().bitErrorRate();
}
-prefix_ unsigned int senf::DVBSocketController::signalToNoiseRatio(){
+prefix_ unsigned int senf::DVBSocketController::signalToNoiseRatio()
+{
return frontendHandle.protocol().signalNoiseRatio();
}
-prefix_ unsigned int senf::DVBSocketController::signalStrength(){
+prefix_ unsigned int senf::DVBSocketController::signalStrength()
+{
return frontendHandle.protocol().signalStrength();
}
-prefix_ string senf::DVBSocketController::getTuneInfo(const string & conf){
+prefix_ string senf::DVBSocketController::getTuneInfo(const string & conf)
+{
const char* cConf = conf.c_str();
stringstream info;
-
+
fe_status_t status;
frontendHandle.protocol().setNonBlock(false);
uint16_t snr, signal;
signal = frontendHandle.protocol().signalStrength();
ber = frontendHandle.protocol().bitErrorRate();
uncorrected_blocks = frontendHandle.protocol().uncorrectedBlocks();
-
+
info << hex;
-
+
for(unsigned int i = 0; i < conf.size(); ++i){
if(i>0)
info << " | ";
case 'S' :
info << "signal " << signal;
break;
- case 's' :
+ case 's' :
info << "snr " << snr;
break;
case 'b' :
}
return info.str();
}
-prefix_ string senf::DVBSocketController::status2String(fe_status_t status){
- string s("");
+
+prefix_ string senf::DVBSocketController::status2String(fe_status_t status)
+{
+ string s("");
if (status & FE_HAS_LOCK)
- return s += "HAS LOCK";
+ return s += "HAS LOCK";
if (status & FE_HAS_CARRIER)
s += "HAS CARRIER ";
if (status & FE_HAS_VITERBI)
return s;
}
-prefix_ void senf::DVBSocketController::setSectionFilter(unsigned short int pid,
+prefix_ void senf::DVBSocketController::setSectionFilter(unsigned short int pid,
u_int8_t filter,
- unsigned int flags,
- u_int8_t mask,
+ unsigned int flags,
+ u_int8_t mask,
u_int8_t mode,
unsigned int timeout)
{
sectionHandle.protocol().setSectionFilter(pid, timeout, flags, filter, mask, mode);
-
+
}
prefix_ void senf::DVBSocketController::setBufferSize(unsigned long size)
sectionHandle.protocol().stopFiltering();
}
-prefix_ fe_type_t senf::DVBSocketController::getType(){
+prefix_ fe_type_t senf::DVBSocketController::getType()
+{
return type;
}
-prefix_ void senf::DVBSocketController::readEvent(int event){
+prefix_ void senf::DVBSocketController::readEvent(int event)
+{
if(cb)
cb(frontendHandle.protocol().getEvent());
}
-prefix_ void senf::DVBSocketController::initConsole(){
+prefix_ void senf::DVBSocketController::initConsole()
+{
// binding functions to console
namespace kw = senf::console::kw;
dir.doc("DVB Controller");
-
+
dir.add("type", &DVBSocketController::getTypeString)
.doc("Shows actual type of card DVB-{T, S, C}");
-
+
dir.add("info", &DVBSocketController::getTuneInfo)
.doc("Returns a string which shows actual tuning status.\n\
\"S\" prints signal strength (in hex)\n\
features may not be supported be your current driver implementation\n\
and could end in throwing an exception!")
.arg("conf", "Ssbuf", kw::default_value = "Ssbuf");
-
+
dir.add("tune", &DVBSocketController::tuneToCMD)
.doc("tunes to channel listet in the configfile.")
.arg("channel", "channel to tune")
.arg("mode", "mode \"sync\" or \"async\"", kw::default_value = "async");
-
+
dir.add("buffersize", &DVBSocketController::setBufferSize)
.doc("Set the size of the circular buffer used for filtered data.")
.arg("size", "in byte");
-
+
dir.add("start", &DVBSocketController::startFiltering)
.doc("Starts filtering");
-
+
dir.add("stop", &DVBSocketController::setBufferSize)
.doc("Stops filtering");
-
+
dir.add("filter", &DVBSocketController::setSectionFilter)
.arg("pid", "pid to filter")
.arg("filter", "filter", kw::default_value = 62, kw::default_doc = "0x3e")
.arg("mode", "mode", kw::default_value = 0, kw::default_doc = "0x00")
.arg("timeout", "timeout", kw::default_value = 0, kw::default_doc = "0x00")
.doc("Sets parameters for section filter.");
-
+
dir.add("stop", &DVBSocketController::setBufferSize)
.doc("Stops filtering");
}
+
+///////////////////////////////cc.e////////////////////////////////////////
+#undef prefix_
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#ifndef DVBSOCKETCONTROLLER_HH_
-#define DVBSOCKETCONTROLLER_HH_
+#ifndef HH_SENF_Socket_Protocols_DVB_DVBSocketController_
+#define HH_SENF_Socket_Protocols_DVB_DVBSocketController_ 1
-#include "DVBFrontendHandle.hh"
-#include "DVBDemuxHandles.hh"
// Custom includes
#include <string>
#include <linux/dvb/frontend.h>
-#include "senf/Scheduler/Scheduler.hh"
+#include "DVBFrontendHandle.hh"
+#include "DVBDemuxHandles.hh"
#include "DVBConfigParser.hh"
-#include "senf/Console.hh"
+#include "../../../Scheduler/Scheduler.hh"
+#include "../../../Utils/Console/Console.hh"
#define MPE_TABLEID 62
namespace senf {
- /** \brief Helperclass for configuration and controlling DVB devices.<br><br>
- *
- * The DVB API provides two methods for tuning. The first method is
- * synchronous, which means e.g. "tuneTo_sync" will return when the tuning operation on the card succeed,
- * no matter how long it takes. The second (preferred) method is to tune asynchronous. The call "tuneTo" will return
- * immediately and (if a callback was set) call the callback when the tuning operation succeeds.
- * <br><br>
- * Note that you may have to take draw backs in using this API. This dues to the implementation of the DVB device driver which you or your kernel choose.
- * It has shown that the completeness of implementations vary from driver to driver.
- * This wrapper provides the full Frontend API which is defined by <a href="http://www.linuxtv.org/docs/dvbapi/DVB_Frontend_API.html">Convergence </a>.
- * You have to find out which parts of these functionality are implemented by your preferred device driver by your own.
- */
+
+/** \brief Helperclass for configuration and controlling DVB devices.
+
+ The DVB API provides two methods for tuning. The first method is
+ synchronous, which means e.g. "tuneTo_sync" will return when the tuning operation on the card
+ succeed, no matter how long it takes. The second (preferred) method is to tune asynchronous.
+ The call "tuneTo" will return immediately and (if a callback was set) call the callback when
+ the tuning operation succeeds. <br>
+
+ Note that you may have to take draw backs in using this API. This dues to the implementation
+ of the DVB device driver which you or your kernel choose. It has shown that the completeness
+ of implementations vary from driver to driver. This wrapper provides the full Frontend API which
+ is defined by <a href="http://www.linuxtv.org/docs/dvbapi/DVB_Frontend_API.html">Convergence</a>.
+ You have to find out which parts of these functionality are implemented by your preferred
+ device driver by your own.
+*/
class DVBSocketController : boost::noncopyable
{
public:
senf::console::ScopedDirectory<DVBSocketController> dir;
-
- typedef boost::function<void (const struct dvb_frontend_event & )> Callback; ///< Callback which is called when an asynchronous tuning succeeds.
- /**< Callback which is called when an asynchronous tuning succeeds.*/
-
+
+ typedef boost::function<void (const struct dvb_frontend_event & )> Callback;
+ ///< Callback which is called when an asynchronous tuning succeeds.
+
DVBSocketController(DVBFrontendHandle frontendHandle_ = DVBFrontendHandle(0,0), DVBDemuxSectionHandle sectionHandle_ = DVBDemuxSectionHandle(0,0), const Callback & cb = NULL);
~DVBSocketController();
- void tuneToCMD( const std::string & input, const std::string & mode = "async");///< Tunes a DVB device given by the type of the DVBFrontendHandle
- /**< Tunes a DVB device by a channel name or complete configuration line. This method was created for use in Senf-Console.
- \param[in] input A channel name or a complete configuration line. If a channel name is given it would be searched in the config file.
- \param[in] mode The mode in which it will tune "sync" or "async"*/
- void tuneTo(const std::string & channel);
- ///< Tunes a DVB device to a channel
- /**< Tunes a DVB device to a channel whose parameters are stored in a configfile. The method determines the type of DVB device by it self.
- \param[in] channel A channel name which will be looked up in config file.*/
+ void tuneToCMD( const std::string & input, const std::string & mode = "async");
+ ///< Tunes a DVB device given by the type of the DVBFrontendHandle
+ /**< Tunes a DVB device by a channel name or complete
+ configuration line. This method was created for use
+ in the SENF-Console.
+ \param[in] input A channel name or a complete
+ configuration line. If a channel name is given
+ it would be searched in the config file.
+ \param[in] mode The mode in which it will tune
+ "sync" or "async"*/
+ void tuneTo(const std::string & channel);
+ ///< Tunes a DVB device to a channel
+ /**< Tunes a DVB device to a channel whose parameters
+ are stored in a config file. The method determines
+ the type of DVB device by it self.
+ \param[in] channel A channel name which will be
+ looked up in config file.*/
void tuneDVB_S(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate);
- ///< Tunes a DVB-S device
- /**< Tunes a DVB-S device in asynchronous mode and calls the callback if existing. Needs full configuration */
+ ///< Tunes a DVB-S device
+ /**< Tunes a DVB-S device in asynchronous mode and calls
+ the callback if existing. Needs full configuration */
+
void tuneDVB_T(unsigned int frequency,
fe_spectral_inversion_t inversion, fe_bandwidth_t bandwidth,
fe_code_rate_t code_rate_HP, /* high priority stream code rate */
fe_modulation_t constellation, /* modulation type (see above) */
fe_transmit_mode_t transmission_mode,
fe_guard_interval_t guard_interval,
- fe_hierarchy_t hierarchy_information); ///< Tunes a DVB-T device
- /**< Tunes a DVB-T device in asynchronous mode and calls the callback if existing. Needs full configuration. */
+ fe_hierarchy_t hierarchy_information);
+ ///< Tunes a DVB-T device
+ /**< Tunes a DVB-T device in asynchronous mode and calls
+ the callback if existing. Needs full configuration. */
+
void tuneDVB_C(unsigned int frequency,
fe_spectral_inversion_t inversion, unsigned int symbol_rate,
- fe_code_rate_t fec_inner, fe_modulation_t modulation);
- ///< Tunes a DVB-C device
- /**< Tunes a DVB-C device in asynchronous mode and calls the callback if existing. Needs full configuration. */
-
+ fe_code_rate_t fec_inner, fe_modulation_t modulation);
+ ///< Tunes a DVB-C device
+ /**< Tunes a DVB-C device in asynchronous mode and calls
+ the callback if existing. Needs full configuration. */
+
dvb_frontend_event tuneTo_sync( const std::string & channel );
- ///< Tunes a DVB device given by the type of the DVBFrontendHandle
- /**< Tunes a DVB device, given by the type of the DVBFrontendHandle, by a channel name in synchronous mode
- \param[in] channel A channel name which will be looked up in config file.
- \returns dvb_frontend_event
- \note The member "dvb_frontend_event.status" should be correct by the
- most device driver implementations. But "dvb_frontend_event.parameters" maybe not and is definitly not set by:
- Cinergy T� (2.6.27), Terratec Cinergy DT USB XS Diversity (2.6.27)
- */
-
+ ///< Tunes a DVB device given by the type of the DVBFrontendHandle
+ /**< Tunes a DVB device, given by the type of the
+ DVBFrontendHandle, by a channel name in synchronous mode
+ \param[in] channel A channel name which will be looked
+ up in config file.
+ \returns dvb_frontend_event
+ \note The member "dvb_frontend_event.status" should be
+ correct by the most device driver implementations.
+ But "dvb_frontend_event.parameters" maybe not and is
+ definitly not set by: Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
dvb_frontend_event tuneDVB_S_sync(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate);
- ///< Tunes a DVB-S device
- /**< Tunes a DVB-S device in synchronous mode. Needs full configuration
- \returns dvb_frontend_event
- \note The member "dvb_frontend_event.status" should be correct by the
- most device driver implementations. But "dvb_frontend_event.parameters" maybe not and is definitly not set by:
- Cinergy T� (2.6.27), Terratec Cinergy DT USB XS Diversity (2.6.27)
- */
+ ///< Tunes a DVB-S device
+ /**< Tunes a DVB-S device in synchronous mode. Needs full configuration
+ \returns dvb_frontend_event
+ \note The member "dvb_frontend_event.status" should be
+ correct by the most device driver implementations.
+ But "dvb_frontend_event.parameters" maybe not and is
+ definitly not set by: Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
dvb_frontend_event tuneDVB_T_sync(unsigned int frequency,
fe_spectral_inversion_t inversion, fe_bandwidth_t bandwidth,
fe_code_rate_t code_rate_HP, /* high priority stream code rate */
fe_modulation_t constellation, /* modulation type (see above) */
fe_transmit_mode_t transmission_mode,
fe_guard_interval_t guard_interval,
- fe_hierarchy_t hierarsourcechy_information);
- ///< Tunes a DVB-T device
- /**< Tunes a DVB-T device in synchronous mode. Needs full configuration
- \returns dvb_frontend_event
- \note The member "dvb_frontend_event.status" should be correct by the
- most device driver implementations. But "dvb_frontend_event.parameters" maybe not and is definitly not set by:
- Cinergy T� (2.6.27), Terratec Cinergy DT USB XS Diversity (2.6.27)
- */
+ fe_hierarchy_t hierarsourcechy_information);
+ ///< Tunes a DVB-T device
+ /**< Tunes a DVB-T device in synchronous mode. Needs full
+ configuration
+ \returns dvb_frontend_event
+ \note The member "dvb_frontend_event.status" should be
+ correct by the most device driver implementations.
+ But "dvb_frontend_event.parameters" maybe not and is
+ definitly not set by: Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
dvb_frontend_event tuneDVB_C_sync(unsigned int frequency,
fe_spectral_inversion_t inversion, unsigned int symbol_rate,
- fe_code_rate_t fec_inner, fe_modulation_t modulation);
- ///< Tunes a DVB-C device
- /**< Tunes a DVB-C device in synchronous mode. Needs full configuration
- \returns dvb_frontend_event
- \note The member "dvb_frontend_event.status" should be correct by the
- most device driver implementations. But "dvb_frontend_event.parameters" maybe not and is definitly not set by:
- Cinergy T� (2.6.27), Terratec Cinergy DT USB XS Diversity (2.6.27)
- */
- fe_type_t getType(); ///< Returns the type of the card. The type is defined in frontend.h
-
- std::string getTypeString(); ///< Returns the type of the card.
- /**< Returns the type of the card but human readable e.g. "DVB-S", "DVB-T" or "DVB-C"*/
-
+ fe_code_rate_t fec_inner, fe_modulation_t modulation);
+ ///< Tunes a DVB-C device
+ /**< Tunes a DVB-C device in synchronous mode. Needs full configuration
+ \returns dvb_frontend_event
+ \note The member "dvb_frontend_event.status" should be
+ correct by the most device driver implementations.
+ But "dvb_frontend_event.parameters" maybe not and is
+ definitly not set by: Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
+ fe_type_t getType(); ///< Returns the type of the card. The type is defined in frontend.h
+
+ std::string getTypeString(); ///< Returns the type of the card.
+ /**< Returns the type of the card but human readable e.g.
+ "DVB-S", "DVB-T" or "DVB-C"*/
+
std::string status2String(fe_status_t status);
- ///< Returns a human readable status information
- /**< Returns a human readable version of fe_status_t (defined by frontend.h)*/
-
- unsigned int bitErrorRate(); ///< Returns the bit error rate
- /**< Returns the bit error rate.
- \note This function may not be implemented by your specific driver implementation. In this case the output is random. This is true for: Cinergy T� (2.6.27), Terratec Cinergy DT USB XS Diversity (2.6.27)*/
- unsigned int signalToNoiseRatio();
- ///< Returns the signal to noise ratio
- /**< Returns the signal to noise ratio
- \note This function may not be implemented by your specific driver implementation. In this case the output is random.*/
- unsigned int signalStrength();
- ///< Returns the signal strength
- /**< Returns the signal to noise ratio
- \note This function may not be implemented by your specific driver implementation. In this case the output is random.*/
-
- void setSectionFilter(unsigned short int pid,
+ ///< Returns a human readable status information
+ /**< Returns a human readable version of fe_status_t
+ (defined by frontend.h)*/
+
+ unsigned int bitErrorRate(); ///< Returns the bit error rate
+ /**< \note This function may not be implemented by your
+ specific driver implementation. In this case the
+ output is random. This is true for:
+ Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
+ unsigned int signalToNoiseRatio(); ///< Returns the signal to noise ratio
+ /**< \note This function may not be implemented by your
+ specific driver implementation. In this case the
+ output is random. This is true for:
+ Cinergy T� (2.6.27),
+ Terratec Cinergy DT USB XS Diversity (2.6.27) */
+
+ unsigned int signalStrength(); ///< Returns the signal strength
+ /**< Returns the signal to noise ratio
+ \note This function may not be implemented by your
+ specific driver implementation. In this case the output is
+ random.*/
+
+ void setSectionFilter(unsigned short int pid,
u_int8_t filter = MPE_TABLEID,
unsigned int flags = DMX_IMMEDIATE_START | DMX_CHECK_CRC,
- u_int8_t mask = 0xff,
+ u_int8_t mask = 0xff,
u_int8_t mode = 0,
unsigned int timeout = 0);
- ///< Set the section filter
- /**< Set the section filter.*/
-
- void setBufferSize(unsigned long size);
- ///< Set the size of the circular buffer used for filtered data.
- /**< The default size is two maximum sized sections, i.e. if this
- function is not called a buffer size of 2 * 4096 bytes will
- be used.
- \param[in] size Size of circular buffer. */
-
- void startFiltering();
- ///< Starts filtering
- /**< Starts filtering.*/
-
- void stopFiltering();
- ///< Stops filtering
- /**< Stops filtering.*/
-
- std::string getTuneInfo(const std::string & conf ="Ssbuf"); ///< Returns a string which shows actual tuning status
- /**< Returns a string which shows actual tuning status.
- <br>"S" prints signal strength (in hex)
- <br>"s" prints singal to noise ration (in hex)
- <br>"b" prints bit error rate (in hex)
- <br>"u" prints uncorrected blocks (in hex)
- <br>"f" prints readable overal status e.g. "Has Lock"<br>
- These characters can be used to form the output. Be aware, some
- features may not be supported be your current driver implementation and
- could end in throwing an exception!*/
+ ///< Set the section filter
+
+ void setBufferSize(unsigned long size);
+ ///< Set the size of the circular buffer used for filtered data.
+ /**< The default size is two maximum sized sections, i.e. if
+ this function is not called a buffer size of 2 * 4096
+ bytes will be used.
+ \param[in] size Size of circular buffer. */
+
+ void startFiltering(); ///< Starts filtering
+
+ void stopFiltering(); ///< Stops filtering
+
+ std::string getTuneInfo(const std::string & conf ="Ssbuf");
+ ///< Returns a string which shows actual tuning status
+ /**< <br>"S" prints signal strength (in hex)
+ <br>"s" prints singal to noise ration (in hex)
+ <br>"b" prints bit error rate (in hex)
+ <br>"u" prints uncorrected blocks (in hex)
+ <br>"f" prints readable overal status e.g. "Has Lock"<br>
+ These characters can be used to form the output. Be
+ aware, some features may not be supported be your
+ current driver implementation and could end in throwing
+ an exception! */
private:
DVBFrontendHandle frontendHandle;
senf::DVBDemuxSectionHandle sectionHandle;
DVBConfigParser parser;
Callback cb;
senf::scheduler::FdEvent event;
-
+
void readEvent(int i);
void initConsole();
};
}
-#endif /*DVBSOCKETCONTROLLER_HH_*/
+#endif