From: tho Date: Mon, 23 Jul 2007 14:14:26 +0000 (+0000) Subject: added first structure for Transport-Stream Packets X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=dfdc2f4338b1f366548033dd494db573a1032276;p=senf.git added first structure for Transport-Stream Packets git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@341 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Examples/DVBAdapter/ULEdec.cc b/Examples/DVBAdapter/ULEdec.cc index b41c3a8..02c5c31 100644 --- a/Examples/DVBAdapter/ULEdec.cc +++ b/Examples/DVBAdapter/ULEdec.cc @@ -31,7 +31,7 @@ #include "Scheduler/Scheduler.hh" #include "Packets/DefaultBundle/EthernetPacket.hh" -#include "Packets/MPEGDVBBundle/DatagramSection.hh" +#include "Packets/MPEGDVBBundle/TransportPacket.hh" #include "Utils/membind.hh" #include "Socket/DVBDemuxHandles.hh" #include "Packets/ParseInt.hh" @@ -111,11 +111,10 @@ private: void dumpSection(senf::FileHandle /* ignored */, senf::Scheduler::EventId event) { std::string data (dvrHandle.read()); - std::cout << data.length() << "\n"; - //senf::DatagramSection section (senf::DatagramSection::create(data)); - //section.dump(std::cout); - //senf::PacketData & datagramData (section.last().data()); - //hexdump(datagramData.begin(), datagramData.end(), std::cout); + senf::TransportPacket packet (senf::TransportPacket::create(data)); + packet.dump(std::cout); + senf::PacketData & packetData (packet.last().data()); + hexdump(packetData.begin(), packetData.end(), std::cout); } }; diff --git a/Packets/MPEGDVBBundle/TransportPacket.cc b/Packets/MPEGDVBBundle/TransportPacket.cc new file mode 100644 index 0000000..7cb4c29 --- /dev/null +++ b/Packets/MPEGDVBBundle/TransportPacket.cc @@ -0,0 +1,62 @@ +// $Id:DatagramSection.cc 327 2007-07-20 10:03:44Z tho $ +// +// Copyright (C) 2007 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Stefan Bund +// +// 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. +// +// 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. +// +// 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. + +// Definition of non-inline non-template functions + +#include "TransportPacket.hh" +//#include "TransportPacket.ih" + +// Custom includes +#include + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +prefix_ void senf::TransportPacketType::dump(packet p, std::ostream & os) +{ + os << "TransportPacket:\n" + << std::hex + << " syncByte: 0x" << unsigned(p->syncByte()) << "\n" + << " transport_error_indicator: 0x" << unsigned(p->transport_error_indicator()) << "\n" + << " payload_unit_start_indicator (pusi): 0x" << unsigned(p->pusi()) << "\n" + << " transport_priority: 0x" << unsigned(p->transport_priority()) << "\n" + << std::dec + << " pid: " << unsigned(p->pid()) << "\n" + << std::hex + << " transport_scrambling_control: 0x" << unsigned(p->transport_scrmbl_ctrl()) << "\n" + << " adaptation_field_control: 0x" << unsigned(p->adaptation_field_ctrl()) << "\n" + << " continuity_counter: 0x" << unsigned(p->continuity_counter()) << "\n"; +} + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: diff --git a/Packets/MPEGDVBBundle/TransportPacket.hh b/Packets/MPEGDVBBundle/TransportPacket.hh new file mode 100644 index 0000000..86dba04 --- /dev/null +++ b/Packets/MPEGDVBBundle/TransportPacket.hh @@ -0,0 +1,106 @@ +// $Id:DatagramSection.hh 327 2007-07-20 10:03:44Z tho $ +// +// Copyright (C) 2007 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Stefan Bund +// +// 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. +// +// 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. +// +// 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. + +#ifndef HH_TransportPacket_ +#define HH_TransportPacket_ 1 + +// Custom includes +#include +#include "Packets/PacketType.hh" +#include "Packets/ParseInt.hh" +#include "Packets/PacketRegistry.hh" +#include "Packets/PacketParser.hh" + +//#include "TransportPacket.mpp" +///////////////////////////////hh.p//////////////////////////////////////// + +namespace senf { + + ///\addtogroup protocolbundle_mpegdvb + ///@{ + + struct Parse_TransportPacket : public PacketParserBase + { + SENF_PACKET_PARSER_INIT(Parse_TransportPacket); + + typedef Parse_Flag < 0 > Parse_tei; // transport_error_indicator + typedef Parse_Flag < 1 > Parse_pusi; // payload_unit_start_indicator + typedef Parse_Flag < 2 > Parse_transportPrio; // transport_priority + typedef Parse_UIntField < 2, 16 > Parse_pid; + typedef Parse_UIntField < 0, 2 > Parse_tsc; // transport_scrambling_control + typedef Parse_UIntField < 2, 4 > Parse_adaptCtrl; // adaptation_field_control + typedef Parse_UIntField < 4, 8 > Parse_contCounter; // continuity_counter + + /////////////////////////////////////////////////////////////////////////// + + SENF_PACKET_PARSER_DEFINE_FIXED_FIELDS( + ((Field ) ( syncByte, Parse_UInt8 )) + ((OverlayField) ( transport_error_indicator, Parse_tei )) + ((OverlayField) ( pusi, Parse_pusi )) + ((OverlayField) ( transport_priority, Parse_transportPrio )) + ((Field ) ( pid, Parse_pid )) + ((OverlayField) ( transport_scrmbl_ctrl, Parse_tsc )) + ((OverlayField) ( adaptation_field_ctrl, Parse_adaptCtrl )) + ((Field ) ( continuity_counter, Parse_contCounter )) + ); + + }; + + struct TransportPacketType + : public PacketTypeBase, + public PacketTypeMixin + { + typedef PacketTypeMixin mixin; + typedef ConcretePacket packet; + typedef Parse_TransportPacket parser; + + using mixin::nextPacketRange; + // using mixin::nextPacketType; + using mixin::init; + using mixin::initSize; + + static void dump(packet p, std::ostream & os); + }; + + typedef TransportPacketType::packet TransportPacket; + + ///@} + +} + + +///////////////////////////////hh.e//////////////////////////////////////// +//#include "TransportPacket.cci" +//#include "TransportPacket.ct" +//#include "TransportPacket.cti" +#endif + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: