DESERT 4.0.0
uw-csma-aloha-trigger-sink.h
Go to the documentation of this file.
1//
2// Copyright (c) 2017 Regents of the SIGNET lab, University of Padova.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29
39#ifndef UW_CSMA_UW_CS_ALOHA_TRIG_SINK_TRIGGER_SINK_H
40#define UW_CSMA_UW_CS_ALOHA_TRIG_SINK_TRIGGER_SINK_H
41
42#include "mac.h"
43#include "mmac.h"
44#include "mphy.h"
45
46#include <iostream>
47
48#define UW_CS_ALOHA_TRIG_SINK_DROP_REASON_WRONG_RECEIVER \
49 "WRCV"
50#define UW_CS_ALOHA_TRIG_SINK_DROP_REASON_UNKNOWN_TYPE \
51 "UPT"
52#define UW_CS_ALOHA_TRIG_SINK_DROP_REASON_ERROR "ERR"
53#define UW_CS_ALOHA_TRIG_SINK_DROP_REASON_RECEIVING_NOT_ENABLED \
54 "RNE"
56extern packet_t PT_MMAC_TRIGGER;
57
61class UwCsmaAloha_Trigger_SINK : public MMac
62{
63public:
82 virtual int command(int argc, const char *const *argv);
90 virtual int crLayCommand(ClMessage *m);
91
92protected:
102
112
120
124 class GenericTimer : public TimerHandler
125 {
126 public:
132 : TimerHandler()
133 , start_time(0.0)
134 , left_duration(0.0)
135 , counter(0)
136 , module(m)
138 {
139 assert(m != NULL);
140 }
141
146 {
147 }
148
152 virtual void
154 {
156 left_duration -= (NOW - start_time);
157 if (left_duration <= 0.0)
158 left_duration = module->mac2phy_delay_;
159 force_cancel();
161 }
162
167 virtual void
169 {
171 start_time = NOW;
172 assert(left_duration > 0);
173 sched(left_duration);
175 }
176
180 virtual void
182 {
184 force_cancel();
185 }
186
191 virtual void
192 schedule(double val)
193 {
194 start_time = NOW;
195 left_duration = val;
197 resched(val);
198 }
199
204 bool
206 {
208 }
209
214 bool
219
224 bool
229
234 bool
236 {
238 }
239
244 bool
250
254 void
256 {
257 counter = 0;
258 }
259
263 void
265 {
266 ++counter;
267 }
268
273 int
275 {
276 return counter;
277 }
278
283 double
285 {
286 return left_duration;
287 }
288
289 protected:
290 double start_time;
297 *module;
300 };
301
306 {
307 public:
317
322 {
323 }
324
325 protected:
330 virtual void expire(Event *e);
331 };
337 virtual void recvFromUpperLayers(Packet *p);
342 virtual void Mac2PhyStartTx(Packet *p);
347 virtual void Phy2MacEndTx(const Packet *p);
352 virtual void Phy2MacStartRx(const Packet *p);
357 virtual void Phy2MacEndRx(Packet *p);
363 virtual void initPkt(Packet *p, int dest_addr = 0);
364
368 virtual void stateIdle();
372 virtual void stateEnableRx();
376 virtual void stateDisableRx();
377
382 virtual void stateTxTRIGGER();
386 virtual void txTRIGGER(Packet *p);
390 virtual void stateRxData(Packet *p);
394 virtual void stateRxPacketNotForMe(Packet *p);
399 inline void
401 {
402 curr_state = state;
403 }
404
408 inline void
413
418 inline int
420 {
421 return trigger_pkts_tx;
422 }
423
427 virtual void waitForUser();
428
432 virtual void
434 {
435 up_data_pkts_rx++;
436 }
437
441 inline void
446
466};
467
468#endif
Definition uw-csma-aloha-trigger-sink.h:125
UwCsmaAloha_Trigger_SINK *UW_CS_ALOHA_TRIG_SINK_TIMER_STATUS timer_status
Definition uw-csma-aloha-trigger-sink.h:299
virtual void freeze()
Definition uw-csma-aloha-trigger-sink.h:153
virtual void stop()
Definition uw-csma-aloha-trigger-sink.h:181
bool isRunning()
Definition uw-csma-aloha-trigger-sink.h:215
double getDuration()
Definition uw-csma-aloha-trigger-sink.h:284
bool isExpired()
Definition uw-csma-aloha-trigger-sink.h:225
virtual ~GenericTimer()
Definition uw-csma-aloha-trigger-sink.h:145
void incrCounter()
Definition uw-csma-aloha-trigger-sink.h:264
double left_duration
Definition uw-csma-aloha-trigger-sink.h:292
int counter
Definition uw-csma-aloha-trigger-sink.h:294
virtual void schedule(double val)
Definition uw-csma-aloha-trigger-sink.h:192
bool isIdle()
Definition uw-csma-aloha-trigger-sink.h:205
double start_time
Definition uw-csma-aloha-trigger-sink.h:290
bool isActive()
Definition uw-csma-aloha-trigger-sink.h:245
void resetCounter()
Definition uw-csma-aloha-trigger-sink.h:255
bool isFrozen()
Definition uw-csma-aloha-trigger-sink.h:235
GenericTimer(UwCsmaAloha_Trigger_SINK *m)
Definition uw-csma-aloha-trigger-sink.h:131
int getCounter()
Definition uw-csma-aloha-trigger-sink.h:274
virtual void unFreeze()
Definition uw-csma-aloha-trigger-sink.h:168
Definition uw-csma-aloha-trigger-sink.h:306
virtual void expire(Event *e)
Definition uw-csma-aloha-trigger-sink.cpp:66
ReceiveTimer(UwCsmaAloha_Trigger_SINK *m)
Definition uw-csma-aloha-trigger-sink.h:313
virtual ~ReceiveTimer()
Definition uw-csma-aloha-trigger-sink.h:321
Definition uw-csma-aloha-trigger-sink.h:62
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:163
UW_CS_ALOHA_TRIG_SINK_STATUS curr_state
Definition uw-csma-aloha-trigger-sink.h:457
void refreshReason(UW_CS_ALOHA_TRIG_SINK_REASON_STATUS reason)
Definition uw-csma-aloha-trigger-sink.h:409
virtual void recvFromUpperLayers(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:117
int TRIGGER_size
Definition uw-csma-aloha-trigger-sink.h:447
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:173
bool receiving_state_active
Definition uw-csma-aloha-trigger-sink.h:453
UW_CS_ALOHA_TRIG_SINK_REASON_STATUS
Definition uw-csma-aloha-trigger-sink.h:104
@ UW_CS_ALOHA_TRIG_SINK_REASON_PKT_NOT_FOR_ME
Definition uw-csma-aloha-trigger-sink.h:108
@ UW_CS_ALOHA_TRIG_SINK_REASON_TX_TRIGGER
Definition uw-csma-aloha-trigger-sink.h:110
@ UW_CS_ALOHA_TRIG_SINK_REASON_DATA_RX
Definition uw-csma-aloha-trigger-sink.h:105
@ UW_CS_ALOHA_TRIG_SINK_REASON_START_RX
Definition uw-csma-aloha-trigger-sink.h:107
@ UW_CS_ALOHA_TRIG_SINK_REASON_PKT_ERROR
Definition uw-csma-aloha-trigger-sink.h:109
@ UW_CS_ALOHA_TRIG_SINK_REASON_NOT_SET
Definition uw-csma-aloha-trigger-sink.h:106
int buffer_pkts
Definition uw-csma-aloha-trigger-sink.h:448
void incrTRIGGERPacketTx()
Definition uw-csma-aloha-trigger-sink.h:442
int getTriggerMsgSent()
Definition uw-csma-aloha-trigger-sink.h:419
ReceiveTimer receive_timer
Definition uw-csma-aloha-trigger-sink.h:463
double tx_timer_duration
Definition uw-csma-aloha-trigger-sink.h:450
UW_CS_ALOHA_TRIG_SINK_STATUS
Definition uw-csma-aloha-trigger-sink.h:94
@ UW_CS_ALOHA_TRIG_SINK_STATE_DISABLE_RX
Definition uw-csma-aloha-trigger-sink.h:99
@ UW_CS_ALOHA_TRIG_SINK_STATE_ENABLE_RX
Definition uw-csma-aloha-trigger-sink.h:98
@ UW_CS_ALOHA_TRIG_SINK_STATE_TX_TRIGGER
Definition uw-csma-aloha-trigger-sink.h:97
@ UW_CS_ALOHA_TRIG_SINK_STATE_IDLE
Definition uw-csma-aloha-trigger-sink.h:95
@ UW_CS_ALOHA_TRIG_SINK_STATE_NOT_SET
Definition uw-csma-aloha-trigger-sink.h:96
@ UW_CS_ALOHA_TRIG_SINK_STATE_DATA_RX
Definition uw-csma-aloha-trigger-sink.h:100
virtual void stateRxData(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:232
virtual void initPkt(Packet *p, int dest_addr=0)
Definition uw-csma-aloha-trigger-sink.cpp:146
virtual void stateRxPacketNotForMe(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:243
virtual void txTRIGGER(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:279
UW_CS_ALOHA_TRIG_SINK_TIMER_STATUS
Definition uw-csma-aloha-trigger-sink.h:114
@ UW_CS_ALOHA_TRIG_SINK_RUNNING
Definition uw-csma-aloha-trigger-sink.h:116
@ UW_CS_ALOHA_TRIG_SINK_IDLE
Definition uw-csma-aloha-trigger-sink.h:115
@ UW_CS_ALOHA_TRIG_SINK_FROZEN
Definition uw-csma-aloha-trigger-sink.h:117
@ UW_CS_ALOHA_TRIG_SINK_EXPIRED
Definition uw-csma-aloha-trigger-sink.h:118
virtual void waitForUser()
Definition uw-csma-aloha-trigger-sink.cpp:297
virtual void stateTxTRIGGER()
Definition uw-csma-aloha-trigger-sink.cpp:267
virtual void stateIdle()
Definition uw-csma-aloha-trigger-sink.cpp:256
int trigger_pkts_tx
Definition uw-csma-aloha-trigger-sink.h:465
UW_CS_ALOHA_TRIG_SINK_REASON_STATUS last_reason
Definition uw-csma-aloha-trigger-sink.h:461
virtual ~UwCsmaAloha_Trigger_SINK()
Definition uw-csma-aloha-trigger-sink.cpp:87
virtual int crLayCommand(ClMessage *m)
Definition uw-csma-aloha-trigger-sink.cpp:108
void refreshState(UW_CS_ALOHA_TRIG_SINK_STATUS state)
Definition uw-csma-aloha-trigger-sink.h:400
virtual void Mac2PhyStartTx(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:157
virtual int command(int argc, const char *const *argv)
Definition uw-csma-aloha-trigger-sink.cpp:92
virtual void stateDisableRx()
Definition uw-csma-aloha-trigger-sink.cpp:135
virtual void Phy2MacEndRx(Packet *p)
Definition uw-csma-aloha-trigger-sink.cpp:188
virtual void incrUpperDataRx()
Definition uw-csma-aloha-trigger-sink.h:433
virtual void stateEnableRx()
Definition uw-csma-aloha-trigger-sink.cpp:123
UwCsmaAloha_Trigger_SINK()
Definition uw-csma-aloha-trigger-sink.cpp:74
UW_CS_ALOHA_TRIG_SINK_STATUS prev_state
Definition uw-csma-aloha-trigger-sink.h:459
packet_t PT_MMAC_TRIGGER
Definition initlib.cpp:36
std::pair< int, int > counter
Definition uwinterference.h:53