cchannel.h Source File¶

API: cchannel.h Source File
API
cchannel.h
1//==========================================================================
2// CCHANNEL.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_CCHANNEL_H
17#define __OMNETPP_CCHANNEL_H
18
19#include "ccomponent.h"
20#include "ccomponenttype.h"
21#include "cmessage.h"
22#include "ctimestampedvalue.h"
23
24namespace omnetpp {
25
26class cGate;
27class cModule;
28struct SendOptions;
29
40
46class SIM_API cChannel : public cComponent //implies noncopyable
47{
48 friend class cModule; // for setting prevSibling/nextSibling
49 protected:
50 cGate *srcGate = nullptr; // gate the channel is attached to
51 int nedConnectionElementId = -1; // for cChannel::getProperties(); usually the NED connection element's id
52
53 public:
54 // internal: called from cGate
55 void setSourceGate(cGate *g) {srcGate=g;}
56
57 // internal: sets/gets nedConnectionElementId
58 void setNedConnectionElementId(int id) {nedConnectionElementId = id;}
59 int getNedConnectionElementId() {return nedConnectionElementId;}
60
61 // internal: called from callInitialize(). Does one stage for this
62 // channel, and returns true if there are more stages to do
63 virtual bool initializeChannel(int stage);
64
65 // internal: overridden to perform additional checks
66 virtual void finalizeParameters() override;
67
68 // internal: calls refreshDisplay() recursively
69 virtual void callRefreshDisplay() override;
70
71 // internal: calls preDelete() recursively
72 virtual void callPreDelete(cComponent *root) override;
73
74 protected:
75 virtual cModule *doFindModuleByPath(const char *s) const override;
76
77 public:
78 typedef ChannelResult Result;
79
84 {
85 public:
86 simtime_t timestamp;
87 cMessage *msg;
88 Result *result;
89 private:
90 void error() const;
91 public:
93 MessageSentSignalValue(simtime_t_cref t, cMessage *m, Result *r) {timestamp=t; msg=m; result=r;}
94
97
98 virtual simtime_t_cref getTimestamp(simsignal_t signalID) const override {return timestamp;}
99
101 virtual SimsignalType getValueType(simsignal_t signalID) const override {return SIMSIGNAL_OBJECT;}
102
104 virtual cObject *objectValue(simsignal_t signalID) const override {return msg;}
106
108 cMessage *getMessage() const {return msg;}
109
111 Result *getChannelResult() const {return result;}
112
115 virtual bool boolValue(simsignal_t signalID) const override {error(); return false;}
116 virtual intval_t intValue(simsignal_t signalID) const override {error(); return 0;}
117 virtual uintval_t uintValue(simsignal_t signalID) const override {error(); return 0;}
118 virtual double doubleValue(simsignal_t signalID) const override {error(); return 0;}
119 virtual SimTime simtimeValue(simsignal_t signalID) const override {error(); return timestamp;}
120 virtual const char *stringValue(simsignal_t signalID) const override {error(); return nullptr;}
122 };
123
124 public:
127
130 explicit cChannel(const char *name=nullptr);
131
138 virtual ~cChannel();
140
143
147 virtual std::string str() const override;
149
156
160 virtual void callInitialize() override;
161
166 virtual bool callInitialize(int stage) override;
167
171 virtual void callFinish() override;
173
176
179 virtual ComponentKind getComponentKind() const override {return KIND_CHANNEL;}
180
188 virtual cModule *getParentModule() const override;
189
194
199 virtual cProperties *getProperties() const override;
200
204 virtual cGate *getSourceGate() const {return srcGate;}
205
212 virtual bool isTransmissionChannel() const = 0;
214
217
241 virtual Result processMessage(cMessage *msg, const SendOptions& options, simtime_t t) = 0;
242
253 virtual double getNominalDatarate() const = 0;
254
277 virtual simtime_t calculateDuration(cMessage *msg) const = 0;
278
288
296 virtual bool isBusy() const;
297
309 [[deprecated]] virtual void forceTransmissionFinishTime(simtime_t t) {}
310
315 virtual bool isDisabled() const { return false; }
317};
318
319
326class SIM_API cIdealChannel : public cChannel //implies noncopyable
327{
328 public:
331
336 explicit cIdealChannel(const char *name=nullptr) : cChannel(name) {}
337
341 virtual ~cIdealChannel() {}
342
347 static cIdealChannel *create(const char *name);
349
352
355 virtual Result processMessage(cMessage *msg, const SendOptions& options, simtime_t t) override {return Result();}
356
360 virtual double getNominalDatarate() const override {return 0;}
361
365 virtual bool isTransmissionChannel() const override {return false;}
366
370 virtual simtime_t calculateDuration(cMessage *msg) const override {return SIMTIME_ZERO;}
371
375 virtual simtime_t getTransmissionFinishTime() const override {return SIMTIME_ZERO;}
376
380 virtual bool isBusy() const override {return false;}
382};
383
384} // namespace omnetpp
385
386
387#endif
Abstract base class for creating a channel of a given type.
Definition ccomponenttype.h:332
Result * getChannelResult() const
Definition cchannel.h:111
cMessage * getMessage() const
Definition cchannel.h:108
virtual SimsignalType getValueType(simsignal_t signalID) const override
Definition cchannel.h:101
virtual simtime_t_cref getTimestamp(simsignal_t signalID) const override
Definition cchannel.h:98
MessageSentSignalValue(simtime_t_cref t, cMessage *m, Result *r)
Definition cchannel.h:93
virtual cObject * objectValue(simsignal_t signalID) const override
Definition cchannel.h:104
virtual cProperties * getProperties() const override
virtual Result processMessage(cMessage *msg, const SendOptions &options, simtime_t t)=0
virtual simtime_t calculateDuration(cMessage *msg) const =0
virtual bool isTransmissionChannel() const =0
cChannel(const char *name=nullptr)
virtual bool isDisabled() const
Definition cchannel.h:315
virtual cModule * getParentModule() const override
virtual void finalizeParameters() override
virtual void callFinish() override
virtual void forceTransmissionFinishTime(simtime_t t)
Definition cchannel.h:309
cChannelType * getChannelType() const
Definition cchannel.h:193
virtual bool callInitialize(int stage) override
virtual std::string str() const override
virtual ~cChannel()
virtual bool isBusy() const
virtual simtime_t getTransmissionFinishTime() const =0
virtual void callInitialize() override
virtual double getNominalDatarate() const =0
virtual ComponentKind getComponentKind() const override
Definition cchannel.h:179
virtual cGate * getSourceGate() const
Definition cchannel.h:204
cComponent(const char *name=nullptr)
virtual cComponentType * getComponentType() const
Represents a module gate.
Definition cgate.h:63
Interface for emitting timestamped values as signals, primarily for result recording.
Definition ctimestampedvalue.h:36
virtual simtime_t getTransmissionFinishTime() const override
Definition cchannel.h:375
virtual bool isBusy() const override
Definition cchannel.h:380
virtual double getNominalDatarate() const override
Definition cchannel.h:360
virtual simtime_t calculateDuration(cMessage *msg) const override
Definition cchannel.h:370
virtual ~cIdealChannel()
Definition cchannel.h:341
static cIdealChannel * create(const char *name)
cIdealChannel(const char *name=nullptr)
Definition cchannel.h:336
virtual bool isTransmissionChannel() const override
Definition cchannel.h:365
virtual Result processMessage(cMessage *msg, const SendOptions &options, simtime_t t) override
Definition cchannel.h:355
The message class in OMNeT++. cMessage objects may represent events, messages, jobs or other entities...
Definition cmessage.h:96
This class represents modules in the simulation.
Definition cmodule.h:49
cObject()
Definition cobject.h:124
A collection of properties (cProperty).
Definition cproperties.h:35
int64_t intval_t
Signed integer type which is guaranteed to be at least 64 bits wide. It is used throughout the librar...
Definition simkerneldefs.h:101
SimsignalType
Signal data types.
Definition clistener.h:48
int simsignal_t
Signal handle.
Definition clistener.h:37
SimTime simtime_t
Represents simulation time.
Definition simtime_t.h:40
const simtime_t & simtime_t_cref
Constant reference to a simtime_t.
Definition simtime_t.h:48
#define SIMTIME_ZERO
Zero simulation time.
Definition simtime_t.h:70
Allows returning multiple values from the processMessage() method.
Definition cchannel.h:34
simtime_t duration
Transmission duration.
Definition cchannel.h:37
bool discard
Whether the channel has lost the message.
Definition cchannel.h:35
simtime_t remainingDuration
Remaining transmission duration (for tx update)
Definition cchannel.h:38
simtime_t delay
Propagation delay.
Definition cchannel.h:36
Options for the cSimpleModule::send() and cSimpleModule::sendDirect() calls.
Definition csimplemodule.h:82