User Manual, Developers Guide and API Documentation

CSMACA.hpp

Go to the documentation of this file.
00001 /******************************************************************************
00002  * Glue                                                                       *
00003  * __________________________________________________________________________ *
00004  *                                                                            *
00005  * Copyright (C) 2005-2006                                                    *
00006  * Lehrstuhl fuer Kommunikationsnetze (ComNets)                               *
00007  * Kopernikusstr. 16, D-52074 Aachen, Germany                                 *
00008  * phone: ++49-241-80-27910 (phone), fax: ++49-241-80-22242                   *
00009  * email: wns@comnets.rwth-aachen.de                                          *
00010  * www: http://wns.comnets.rwth-aachen.de                                     *
00011  ******************************************************************************/
00012 
00013 #ifndef GLUE_MAC_CSMACA_HPP
00014 #define GLUE_MAC_CSMACA_HPP
00015 
00016 #include <GLUE/mac/Backoff.hpp>
00017 
00018 #include <WNS/ldk/FunctionalUnit.hpp>
00019 #include <WNS/ldk/CommandTypeSpecifier.hpp>
00020 #include <WNS/ldk/Command.hpp>
00021 #include <WNS/ldk/HasReceptor.hpp>
00022 #include <WNS/ldk/HasConnector.hpp>
00023 #include <WNS/ldk/HasDeliverer.hpp>
00024 #include <WNS/ldk/arq/StopAndWait.hpp>
00025 #include <WNS/logger/Logger.hpp>
00026 #include <WNS/Cloneable.hpp>
00027 #include <WNS/service/phy/copper/DataTransmissionFeedback.hpp>
00028 #include <WNS/service/phy/copper/CarrierSensing.hpp>
00029 #include <WNS/Observer.hpp>
00030 #include <WNS/simulator/Time.hpp>
00031 
00032 namespace glue { namespace mac {
00033 
00034     class CSMACACommand :
00035         public wns::ldk::Command
00036     {
00037     public:
00038         struct {
00039         } local;
00040 
00041         struct {
00042         } peer;
00043 
00044         struct {
00045         } magic;
00046     };
00047 
00054     class CSMACA :
00055         public wns::ldk::FunctionalUnit,
00056         public wns::ldk::CommandTypeSpecifier<CSMACACommand>,
00057         public wns::ldk::HasReceptor<>,
00058         public wns::ldk::HasConnector<>,
00059         public wns::ldk::HasDeliverer<>,
00060         public wns::Cloneable<CSMACA>,
00061         public virtual BackoffObserver
00062     {
00063     public:
00064 
00065         CSMACA(wns::ldk::fun::FUN* fun, const wns::pyconfig::View& config);
00066 
00067         virtual
00068         ~CSMACA();
00069 
00070     private:
00071         // FunctionalUnit / CompoundHandlerInterface
00072         virtual bool
00073         doIsAccepting(const wns::ldk::CompoundPtr& _compound) const;
00074 
00075         virtual void
00076         doSendData(const wns::ldk::CompoundPtr& _compound);
00077 
00078         virtual void
00079         doWakeup();
00080 
00081         virtual void
00082         doOnData(const wns::ldk::CompoundPtr& _compound);
00083 
00084         virtual void
00085         onFUNCreated();
00086 
00087         virtual void
00088         backoffExpired();
00089 
00090         virtual void
00091         onCarrierIdle();
00092 
00093         virtual void
00094         sifsExpired();
00095 
00096         wns::logger::Logger logger;
00097 
00098         wns::ldk::CompoundPtr iFrame;
00099         wns::ldk::CompoundPtr ackFrame;
00100 
00101         std::string stopAndWaitARQName;
00102         wns::ldk::arq::StopAndWait* stopAndWaitARQ;
00103 
00104         Backoff backoff;
00105         wns::simulator::Time sifsLength;
00106     };
00107 
00108 
00109     class StopAndWait :
00110         public wns::ldk::arq::StopAndWait,
00111         public wns::Observer<wns::service::phy::copper::DataTransmissionFeedbackInterface>,
00112         public wns::Observer<wns::service::phy::copper::CarrierSensing>
00113     {
00114     public:
00115         StopAndWait(wns::ldk::fun::FUN* fuNet, const wns::pyconfig::View& config);
00116 
00117         virtual wns::ldk::CompoundPtr getData();
00118 
00119         virtual void    onTimeout();
00120 
00121         // observer DataTransmissionFeedbackInterface
00122         virtual void    onDataSent(wns::osi::PDUPtr pdu);
00123 
00124         // observer CarrierSensing
00125         virtual void    onCarrierIdle();
00126         virtual void    onCarrierBusy();
00127         virtual void    onCollision();
00128     
00129     private:
00130         double shortResendTimeout;
00131         double longResendTimeout;
00132         bool waitingForAckTransmission;
00133 
00134         
00135     };
00136 } // mac
00137 } // glue
00138 
00139 #endif // GLUE_MAC_CSMACA_HPP

Generated on Tue May 22 03:31:55 2012 for openWNS by  doxygen 1.5.5