some clean-ups
[senf.git] / Socket / Protocols / DVB / DVBFrontendHandle.hh
index da71b18..74c58d5 100644 (file)
 /** \file
     \brief DVBFrontendHandle public header */
 
-#ifndef HH_DVBFrontendHandle_
-#define HH_DVBFrontendHandle_ 1
+#ifndef HH_SENF_Socket_Protocols_DVB_DVBFrontendHandle_
+#define HH_SENF_Socket_Protocols_DVB_DVBFrontendHandle_ 1
 
 // Custom includes
 #include <boost/cstdint.hpp>
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
 #include <linux/dvb/frontend.h>
 #include "../../../Socket/FramingPolicy.hh"
 #include "../../../Socket/CommunicationPolicy.hh"
 #include "../../../Socket/ReadWritePolicy.hh"
 #include "../../../Socket/ProtocolClientSocketHandle.hh"
 #include "../../../Socket/SocketProtocol.hh"
+#include <string>
+#include <fstream>
+
+
 
 //#include "DVBFrontendHandle.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
@@ -49,29 +55,94 @@ namespace senf {
         UnconnectedCommunicationPolicy,
         NotReadablePolicy,
         NotWriteablePolicy
-        >::policy DVBFrontend_Policy;   ///< Socket Policy for DVBFrontendSocketProtocol
+>    ::policy DVBFrontend_Policy; ///< Socket Policy for DVBFrontendSocketProtocol
+        
 
     /** \brief SocketProtocol for the dvb frontend device
 
         The DVB frontend device controls the tuner and DVB demodulator hardware.
      */
+    
     class DVBFrontendSocketProtocol
         : public ConcreteSocketProtocol<DVBFrontend_Policy, DVBFrontendSocketProtocol>
     {
+    private: 
+        dvb_frontend_event tune(const struct dvb_frontend_parameters & frontend);
+        struct dvb_frontend_event waitTune(const struct dvb_frontend_parameters & frontend);
+        struct dvb_frontend_event asyncTune(const struct dvb_frontend_parameters & frontend);
+        boost::function<struct dvb_frontend_event (const struct dvb_frontend_parameters & frontend)> cb2_X_Tune;
     public:
         ///////////////////////////////////////////////////////////////////////////
         // internal interface
 
         ///\name Constructors
         ///@{
-
-        void init_client(boost::uint8_t adapter=0, boost::uint8_t device=0) const;
+        void init_client(unsigned const short adapter = 0, unsigned const short device = 0);
                                         ///< Opens the specified frontend device in read-only mode.
                                         /**< \note This member is implicitly called from the
                                              ProtocolClientSocketHandle::ProtocolClientSocketHandle()
                                              constructor */
 
         ///@}
+        
+        void tuneDVB_S(unsigned int frequency, fe_spectral_inversion_t inversion, unsigned int symbole_rate, fe_code_rate_t code_rate);
+                                                                        ///< Tunes a DVB-C device
+                                                                        /**< Tunes a DVB-C device. 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_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_guard_interval_t guard_interval,
+                fe_hierarchy_t hierarchy_information
+                );                                                      ///< Tunes a DVB-T device
+                                                                        /**< Tunes a DVB-T device. 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. Needs full configuration */
+        struct dvb_frontend_info getInfo() const;                     ///< Returns information struct.
+                                                                        /**< Returns information struct, which contains information 
+                                                                             about the device which is associated with the current frontend.*/
+        struct dvb_frontend_parameters getFrontendParam() const;        ///< Returns dvb_frontend_parameters struct.
+                                                                        /**< Returns dvb_frontend_parameters struct, which contains the actual 
+                                                                             configuration of the device.*/
+        void setFrequency(unsigned int frequency);                      ///< Sets frequency
+                                                                        /**< Sets frequency. This can be done for all device types.*/
+        void setInversion(fe_spectral_inversion_t inversion);           ///< Sets inversion
+                                                                        /**< Sets inversion. This can be done for all device types.*/
+        void setCodeRate(fe_code_rate_t fec_inner);                     ///< Sets code rate
+                                                                        /**< Sets code rate. This can be done for all device types. Attention 
+                                                                             for DVB-T devices the high and low priority stream code rate will be set to 
+                                                                             the given value.*/
+        void setSymbolRate(unsigned int symbol_rate);                   ///< Sets symbol rate
+                                                                        /**< Sets symbol rate. This can only be done for DVB-S or DVB-C devices.
+                                                                             Other attempts will throw an exception.*/
+        void setModulation(fe_modulation_t modulation);                 ///< Sets modulation
+                                                                        /**< Sets modulation. This can only be done for DVB-T or DVB-C devices.
+                                                                             Other attempts will throw an exception.*/
+        void setBandwidth(fe_bandwidth_t bandwidth);                    ///< Sets bandwidth
+                                                                        /**< Sets bandwidth. This can only be done for DVB-T devices.
+                                                                             Other attempts will throw an exception.*/
+        void setHighPriorityCodeRate(fe_code_rate_t code_rate_HP);      ///< Sets high priority stream code rate
+                                                                        /**< Sets high priority stream code rate. This can only be done for DVB-T devices.
+                                                                             Other attempts will throw an exception.*/
+        void setLowPriorityCodeRate(fe_code_rate_t code_rate_LP);       ///< Sets low priority stream code rate
+                                                                        /**< Sets low priority stream code rate. This can only be done for DVB-T devices.
+                                                                             Other attempts will throw an exception.*/
+        void setGuardInterval(fe_guard_interval_t guard_interval);      ///< Sets guard interval
+                                                                        /**< Sets guard interval. This can only be done for DVB-T devices.
+                                                                             Other attempts will throw an exception.*/
+        void setHierarchyInformation(fe_hierarchy_t hierarchy_information);  ///< Sets hierarchy information
+                                                                            /**< Sets hierarchy information. This can only be done for DVB-T devices.
+                                                                                 Other attempts will throw an exception.*/
+        
+        
         ///\name Abstract Interface Implementation
         ///@{