added more or less meaningful descriptions when throwing SystemExceptions
[senf.git] / senf / Socket / Protocols / DVB / DVBFrontendHandle.cc
index deaf5f1..d53ef98 100644 (file)
@@ -2,24 +2,29 @@
 //
 // Copyright (C) 2007
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Anton Gillert <atx@berlios.de>
-//     Thorsten Horstmann <tho@berlios.de>
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Thorsten Horstmann <tho@berlios.de>
+//   Anton Gillert <atx@berlios.de>
 
 /** \file
     \brief DVBFrontendHandle non-inline non-template implementation */
@@ -36,9 +41,9 @@
 
 //#include "DVBFrontendHandle.mpp"
 #define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::DVBFrontendHandle
 using namespace std;
 
@@ -48,7 +53,7 @@ prefix_ void senf::DVBFrontendSocketProtocol::init_client(unsigned short adapter
     string devFrontend = str( boost::format("/dev/dvb/adapter%d/frontend%d") % adapter % device);
     int f = open(devFrontend.c_str(), flags);
     if (f < 0)
-        SENF_THROW_SYSTEM_EXCEPTION("")<< "Could not open frontend device of DVB adapter " << devFrontend << ".";
+        SENF_THROW_SYSTEM_EXCEPTION("Could not open frontend device of DVB adapter ") << devFrontend << ".";
     fd(f);
 }
 
@@ -65,20 +70,20 @@ prefix_ bool senf::DVBFrontendSocketProtocol::eof()
 }
 
 prefix_ void senf::DVBFrontendSocketProtocol::tune(const struct dvb_frontend_parameters & frontend)
-    const 
+    const
 {
     // tuning
     if (::ioctl(fd(), FE_SET_FRONTEND, &frontend) )
-        SENF_THROW_SYSTEM_EXCEPTION("") << "ioctl FE_SET_FRONTEND failed. Socket should initialized with r/w permissions.";;
+        SENF_THROW_SYSTEM_EXCEPTION("ioctl FE_SET_FRONTEND failed. Socket should initialized with r/w permissions.");
 }
 
-prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_T(unsigned int frequency, 
+prefix_ void senf::DVBFrontendSocketProtocol::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 */
-        fe_transmit_mode_t transmission_mode, 
+        fe_transmit_mode_t transmission_mode,
         fe_guard_interval_t guard_interval,
         fe_hierarchy_t hierarchy_information
         )
@@ -86,26 +91,26 @@ prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_T(unsigned int frequency,
 {
     struct dvb_ofdm_parameters ofdm; /* DVB-T Parameters */
     struct dvb_frontend_parameters frontend;
-    
+
     ::memset(&frontend, 0, sizeof(struct dvb_frontend_parameters));
     ::memset(&ofdm, 0, sizeof(struct dvb_ofdm_parameters));
-    
+
     ofdm.bandwidth = bandwidth;
     ofdm.code_rate_HP = code_rate_HP;
     ofdm.code_rate_LP = code_rate_LP;
-    ofdm.constellation = constellation; 
+    ofdm.constellation = constellation;
     ofdm.guard_interval = guard_interval;
     ofdm.hierarchy_information = hierarchy_information;
-    
+
     frontend.frequency = frequency;
     frontend.inversion = inversion;
     frontend.u.ofdm = ofdm;
-    
+
     tune(frontend);
-    
+
 }
-prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_S(unsigned int frequency, 
-        fe_spectral_inversion_t inversion, 
+prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_S(unsigned int frequency,
+        fe_spectral_inversion_t inversion,
         unsigned int symbole_rate, /* symbol rate in Symbols per second */
         fe_code_rate_t fec_inner /* forward error correction (see above) */
     )
@@ -113,21 +118,21 @@ prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_S(unsigned int frequency,
 {
     struct dvb_qpsk_parameters qpsk; /* DVB-S Parameters*/
     struct dvb_frontend_parameters frontend;
-    
+
     ::memset(&frontend, 0, sizeof(struct dvb_frontend_parameters));
     ::memset(&qpsk, 0, sizeof(struct dvb_qpsk_parameters));
-    
+
     qpsk.symbol_rate = symbole_rate;
     qpsk.fec_inner = fec_inner;
-    
+
     frontend.frequency = frequency;
     frontend.inversion = inversion;
     frontend.u.qpsk = qpsk;
-    
+
     tune(frontend);
 }
 
-prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_C(unsigned int frequency, 
+prefix_ void senf::DVBFrontendSocketProtocol::tuneDVB_C(unsigned int frequency,
         fe_spectral_inversion_t inversion,
         unsigned int symbol_rate,
         fe_code_rate_t fec_inner,
@@ -137,22 +142,22 @@ const
 {
     struct dvb_qam_parameters qam; /* DVB-C Parameters*/
     struct dvb_frontend_parameters frontend;
-    
+
     ::memset(&frontend, 0, sizeof(struct dvb_frontend_parameters));
     ::memset(&qam, 0, sizeof(struct dvb_qam_parameters));
-    
+
     qam.symbol_rate = symbol_rate;
     qam.fec_inner = fec_inner;
     qam.modulation = modulation;
-    
-    
+
+
     frontend.frequency = frequency;
     frontend.inversion = inversion;
     frontend.u.qam = qam;
-       
+
     tune(frontend);
 }
-prefix_ void senf::DVBFrontendSocketProtocol::setNonBlock(bool on) 
+prefix_ void senf::DVBFrontendSocketProtocol::setNonBlock(bool on)
     const
 {
    if (on)
@@ -166,18 +171,18 @@ prefix_ dvb_frontend_info senf::DVBFrontendSocketProtocol::getInfo()
 {
     struct dvb_frontend_info info;
     ::memset(&info, 0, sizeof(struct dvb_frontend_info));
-    
+
     if (::ioctl(fd(), FE_GET_INFO, &info)) {
-        SENF_THROW_SYSTEM_EXCEPTION("") << "Could not read on fildescriptor.";
+        SENF_THROW_SYSTEM_EXCEPTION("Could not read on fildescriptor.");
     }
     return info;
 }
 
 prefix_ dvb_frontend_parameters senf::DVBFrontendSocketProtocol::getFrontendParam() const {
     struct dvb_frontend_parameters frontend_;
-    
+
     ::memset(&frontend_, 0, sizeof(struct dvb_frontend_parameters));
-    
+
     if (::ioctl(fd(), FE_GET_FRONTEND, &frontend_)) {
         switch(errno) {
             case EBADF:
@@ -198,9 +203,9 @@ prefix_ dvb_frontend_parameters senf::DVBFrontendSocketProtocol::getFrontendPara
 
 prefix_ dvb_frontend_event senf::DVBFrontendSocketProtocol::getEvent() const{
     struct dvb_frontend_event ev ;
-    
+
     ::memset(&ev, 0, sizeof(struct dvb_frontend_event));
-    
+std::cerr<<"DVBFrontendSocketProtocol::getEvent\n";
     if (::ioctl(fd(), FE_GET_EVENT, &ev)) {
         switch(errno) {
             case EBADF:
@@ -209,6 +214,9 @@ prefix_ dvb_frontend_event senf::DVBFrontendSocketProtocol::getEvent() const{
             case EWOULDBLOCK:
                 SENF_THROW_SYSTEM_EXCEPTION( "No event pending and device is in nonblocking mode." );
                 break;
+            case EINTR:
+                // TODO: ignore EINTR. which might be caused by watchdog signals. This is possibly not the solution, but should work
+                break;
             default:
                 SENF_THROW_SYSTEM_EXCEPTION("Errno: ") << errno;
         }
@@ -226,7 +234,7 @@ prefix_ int16_t senf::DVBFrontendSocketProtocol::signalStrength()
 }
 
 prefix_ int16_t senf::DVBFrontendSocketProtocol::signalNoiseRatio()
-    const 
+    const
 {
     int16_t snr;
     if (::ioctl(fd(), FE_READ_SNR, &snr) < 0)
@@ -263,7 +271,7 @@ prefix_ fe_status_t senf::DVBFrontendSocketProtocol::status()
 }
 
 
-///////////////////////////////cc.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 //#include "DVBFrontendHandle.mpp"