cdataratechannel.h Source File

API: cdataratechannel.h Source File
API
cdataratechannel.h
1//==========================================================================
2// CDATARATECHANNEL.H - header for
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8/*--------------------------------------------------------------*
9 Copyright (C) 1992-2017 Andras Varga
10 Copyright (C) 2006-2017 OpenSim Ltd.
11
12 This file is distributed WITHOUT ANY WARRANTY. See the file
13 `license' for details on this and other legal matters.
14*--------------------------------------------------------------*/
15
16#ifndef __OMNETPP_CDATARATECHANNEL_H
17#define __OMNETPP_CDATARATECHANNEL_H
18
19#include "cchannel.h"
20#include "csimulation.h"
21
22namespace omnetpp {
23
24
69class SIM_API cDatarateChannel : public cChannel //implies noncopyable
70{
71 protected:
72 static simsignal_t channelBusySignal;
73 static simsignal_t messageSentSignal;
74 static simsignal_t messageDiscardedSignal;
75
76 public:
80 enum Mode {
85
90
99 };
100
101 private:
102 enum {
103 FL_ISDISABLED = 1 << 10,
104 FL_DELAY_NONZERO = 1 << 11,
105 FL_DATARATE_PRESENT = 1 << 12,
106 FL_BER_NONZERO = 1 << 13,
107 FL_PER_NONZERO = 1 << 14,
108 };
109
110 // cached values of parameters (note: parameters are non-volatile)
111 simtime_t delay = 0; // propagation delay
112 double datarate = 0; // data rate
113 double ber = 0; // bit error rate
114 double per = 0; // packet error rate
115
116 Mode mode = SINGLE;
117
118 // data of the last/ongoing transmission (only for mode=SINGLE)
119 struct Tx {
120 simtime_t startTime;
121 simtime_t finishTime;
122 txid_t transmissionId = -1;
123 };
124 Tx singleTx; // for SINGLE
125 std::vector<Tx> txList; // for MULTI
126 simtime_t channelFinishTime; // for both SINGLE and MULTI
127
128 private:
129 // internal: checks whether parameters have been set up
130 void checkState() const {if (!parametersFinalized()) throw cRuntimeError(this, E_PARAMSNOTREADY);}
131
132 protected:
133 // internal: update cached copies of parameters
134 void rereadPars();
135
136 // internal: react to parameter changes
137 virtual void handleParameterChange(const char *parname) override;
138
139 // internal: helper to processMessage()
140 virtual void processPacket(cPacket *pkt, const SendOptions& options, simtime_t t, Result& inoutResult);
141
142 // internal: emits last busy signal
143 virtual void finish() override;
144
145 public:
148
154 explicit cDatarateChannel(const char *name=nullptr);
155
159 virtual ~cDatarateChannel() {}
160
165 static cDatarateChannel *create(const char *name);
167
170
174 virtual std::string str() const override;
176
179
182 virtual bool isTransmissionChannel() const override {return true;}
183
188 virtual void setMode(Mode mode);
189
193 virtual void setDelay(double d);
194
200 virtual void setDatarate(double d);
201
207 virtual void setBitErrorRate(double d);
208
214 virtual void setPacketErrorRate(double d);
215
219 virtual void setDisabled(bool d);
220
224 virtual Mode getMode() const {return mode;}
225
230 virtual simtime_t getDelay() const {checkState(); return delay;}
231
238 virtual double getDatarate() const {checkState(); return datarate;}
239
246 virtual double getBitErrorRate() const {checkState(); return ber;}
247
254 virtual double getPacketErrorRate() const {checkState(); return per;}
255
261 virtual bool isDisabled() const override {checkState(); return flags & FL_ISDISABLED;}
263
266
269 virtual double getNominalDatarate() const override {return getDatarate();}
270
278 virtual simtime_t calculateDuration(cMessage *msg) const override;
279
287 virtual simtime_t getTransmissionFinishTime() const override;
288
295 virtual bool isBusy() const override;
296
308 [[deprecated]] virtual void forceTransmissionFinishTime(simtime_t t) override;
310
313
316 virtual void initialize() override;
317
321 virtual Result processMessage(cMessage *msg, const SendOptions& options, simtime_t t) override;
323};
324
325} // namespace omnetpp
326
327#endif
328
329
cChannel(const char *name=nullptr)
virtual void setMode(Mode mode)
virtual simtime_t getTransmissionFinishTime() const override
virtual void handleParameterChange(const char *parname) override
virtual double getBitErrorRate() const
Definition cdataratechannel.h:246
Mode
Definition cdataratechannel.h:80
@ SINGLE
Definition cdataratechannel.h:84
@ MULTI
Definition cdataratechannel.h:89
@ UNCHECKED
Definition cdataratechannel.h:98
cDatarateChannel(const char *name=nullptr)
virtual bool isBusy() const override
virtual ~cDatarateChannel()
Definition cdataratechannel.h:159
virtual double getNominalDatarate() const override
Definition cdataratechannel.h:269
virtual simtime_t calculateDuration(cMessage *msg) const override
virtual void finish() override
virtual void setDelay(double d)
virtual simtime_t getDelay() const
Definition cdataratechannel.h:230
virtual void initialize() override
virtual Mode getMode() const
Definition cdataratechannel.h:224
virtual double getPacketErrorRate() const
Definition cdataratechannel.h:254
virtual bool isDisabled() const override
Definition cdataratechannel.h:261
virtual void setPacketErrorRate(double d)
virtual std::string str() const override
virtual void setDatarate(double d)
virtual double getDatarate() const
Definition cdataratechannel.h:238
virtual void setDisabled(bool d)
virtual bool isTransmissionChannel() const override
Definition cdataratechannel.h:182
virtual Result processMessage(cMessage *msg, const SendOptions &options, simtime_t t) override
virtual void setBitErrorRate(double d)
static cDatarateChannel * create(const char *name)
virtual void forceTransmissionFinishTime(simtime_t t) override
The message class in OMNeT++. cMessage objects may represent events, messages, jobs or other entities...
Definition cmessage.h:96
A subclass of cMessage to represent packets, frames, datagrams, application messages,...
Definition cpacket.h:53
int simsignal_t
Signal handle.
Definition clistener.h:37
SimTime simtime_t
Represents simulation time.
Definition simtime_t.h:40
Options for the cSimpleModule::send() and cSimpleModule::sendDirect() calls.
Definition csimplemodule.h:82