X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Examples%2FDVBAdapter%2FULEdec.cc;h=fed227e60956860102fe7e78f7010b4eba01bbbf;hb=6df7613bc4c5a8c27a6af11450d2cb8fbb6ea3a6;hp=395688cfb31d248273472c2a6ffcdeae969ac512;hpb=759310ea14e1fa1eb65f029762efa32d52539e59;p=senf.git diff --git a/Examples/DVBAdapter/ULEdec.cc b/Examples/DVBAdapter/ULEdec.cc index 395688c..fed227e 100644 --- a/Examples/DVBAdapter/ULEdec.cc +++ b/Examples/DVBAdapter/ULEdec.cc @@ -1,30 +1,37 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Thorsten Horstmann +// Fraunhofer Institute for Open Communication Systems (FOKUS) // -// 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 + // Definition of non-inline non-template functions #include "ULEdec.hh" -#include +#include +#include #include #include #include @@ -34,10 +41,10 @@ #define TRANSPORT_PACKET_SIZE 188 // max. payload_pointer = ts packet payload size ( = ts packet size - ts header - payload_pointer) // - 2 bytes min. sndu header -#define MAX_PAYLOAD_POINTER ( TRANSPORT_PACKET_SIZE - 4 - 1 - 2 ) +#define MAX_PAYLOAD_POINTER ( TRANSPORT_PACKET_SIZE - 4 - 1 - 2 ) #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// ULEdec::ULEdec(unsigned short adapter, unsigned short device) @@ -51,47 +58,47 @@ ULEdec::ULEdec(unsigned short adapter, unsigned short device) pes_filter.pes_type = DMX_PES_OTHER; pes_filter.flags = DMX_IMMEDIATE_START; demuxHandle.protocol().setPESFilter( &pes_filter ); - + senf::Scheduler::instance().add( dvrHandle, senf::membind(&ULEdec::handleEvent, this)); - + this->receiver_state = Idle; this->priv_sndu_type_1 = false; } -void ULEdec::handleEvent(senf::FileHandle, senf::Scheduler::EventId event) +void ULEdec::handleEvent(senf::Scheduler::EventId event) { senf::TransportPacket ts_packet ( - senf::TransportPacket::create(188, senf::TransportPacket::noinit)); + senf::TransportPacket::create(188, senf::noinit)); dvrHandle.read( ts_packet.data() ); - + // Check TS error conditions: sync_byte, transport_error_indicator, scrambling_control. - if ( (ts_packet->sync_byte() != TRANSPORT_PACKET_SYNC_BYTE) || - (ts_packet->transport_error_indicator() == true) || - (ts_packet->transport_scrmbl_ctrl() != 0)) + if ( (ts_packet->sync_byte() != senf::TransportPacketType::SYNC_BYTE) || + (ts_packet->transport_error_indicator() == true) || + (ts_packet->transport_scrmbl_ctrl() != 0)) { std::cerr << "invalid ts packet\n"; // drop partly decoded SNDU, reset state, resync on PUSI. return; } - + handleTSPacket(ts_packet); } - + void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) { senf::PacketData & payloadData (ts_packet.next().data()); iterator payload_iter = payloadData.begin(); iterator payload_end = payloadData.end(); - + std::cout << "New TS Packet:\n" << "----------------------------------------------------------------------------\n"; senf::hexdump(payload_iter, payload_end, std::cout); std::cout << "----------------------------------------------------------------------------\n"; - + // Synchronize continuity counter this->priv_tscc = ts_packet->continuity_counter(); - + switch (ts_packet->pusi()) { case 0: { switch (this->receiver_state) { @@ -115,7 +122,7 @@ void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) if ( (*payload_iter++ << 8 | *payload_iter++) != ULE_END_INDICATOR ) std::cerr << "delimiting error\n"; } else { - BOOST_ASSERT( std::distance( payload_iter, payload_end ) == 0 ); + assert( std::distance( payload_iter, payload_end ) == 0 ); } } break; @@ -124,7 +131,7 @@ void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) // a PUSI value of 1 indicates the presence of a Payload Pointer. unsigned char payload_pointer = *payload_iter++; if (payload_pointer > MAX_PAYLOAD_POINTER) { - std::cerr << str( boost::format( + std::cerr << str( boost::format( "invalid payload_pointer (%d)\n") % unsigned(payload_pointer) ) ; this->receiver_state = Idle; return; @@ -143,7 +150,7 @@ void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) std::advance(payload_iter, payload_pointer); } else { payload_iter = readContSNDUPacket( payload_iter, payload_end ); - BOOST_ASSERT( isSDNUPacketComplete() ); + assert( isSDNUPacketComplete() ); try { handleSNDUPacket(); } catch (ULEdecException const & ex) { @@ -158,7 +165,7 @@ void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) do { payload_iter = readNewSNDUPacket( payload_iter, payload_end ); if (! isSDNUPacketComplete()) { - BOOST_ASSERT( std::distance( payload_iter, payload_end ) == 0 ); + assert( std::distance( payload_iter, payload_end ) == 0 ); this->receiver_state = Reassembly; break; } @@ -170,7 +177,7 @@ void ULEdec::handleTSPacket(senf::TransportPacket ts_packet) return; } } - + } // end pusi-switch } @@ -185,7 +192,7 @@ ULEdec::iterator ULEdec::readContSNDUPacket(iterator i, iterator const i_end) ULEdec::iterator ULEdec::readNewSNDUPacket(iterator i, iterator const i_end) -{ +{ bool dbit = false; senf::Packet::size_type sndu_length = *i++ << 8 | *i++; if (sndu_length & 0x8000) { @@ -205,7 +212,7 @@ ULEdec::iterator ULEdec::readNewSNDUPacket(iterator i, iterator const i_end) this->snduPacket->length() = sndu_length; this->snduPacketData_iter = boost::next(this->snduPacket.data().begin(), 2); this->priv_sndu_type_1 = false; - + switch (std::distance(i, i_end)) { case 1: this->priv_sndu_type_1 = true; @@ -213,13 +220,13 @@ ULEdec::iterator ULEdec::readNewSNDUPacket(iterator i, iterator const i_end) this->snduPacketData_iter++; case 0: break; - - default: + + default: this->snduPacket->type() = *i++ << 8 | *i++; std::advance(this->snduPacketData_iter, 2); i = readRawSNDUPacketData(i, i_end); } - + return i; } @@ -240,7 +247,7 @@ void ULEdec::handleSNDUPacket() this->snduPacket.dump(std::cout); std::cout << "----------------------------------------------------------------------------\n\n"; if (this->snduPacket->crc() != this->snduPacket->calcCrc()) { - throw ULEdecException( str( boost::format( + throw ULEdecException( str( boost::format( "CRC Error. received crc:%d calculated crc:%d") % this->snduPacket->crc() % this->snduPacket->calcCrc() ) ); } @@ -249,7 +256,7 @@ void ULEdec::handleSNDUPacket() // nextPacket.data().begin(), // nextPacket.data().end(), // std::cout); - + } @@ -277,10 +284,10 @@ int main(int argc, char const * argv[]) } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ // fill-column: 100