-
Notifications
You must be signed in to change notification settings - Fork 0
/
transceiver.cpp
108 lines (94 loc) · 2.8 KB
/
transceiver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*******************************************************************
*
* DESCRIPTION: class Transceiver
*
* AUTHOR: Umar Farooq
*
* EMAIL: ufarooq@sce.carleton.ca
*
* DATE: 17/10/2003
*
*******************************************************************/
/** include files **/
#include <math.h> // fabs( ... )
#include "transceiver.h" // base header
#include "message.h" // InternalMessage ....
#include "mainsimu.h" // class MainSimulator
/*******************************************************************
* Function Name: Transceiver
* Description: constructor
********************************************************************/
Transceiver::Transceiver( const string &name )
: Atomic( name )
, inApp( addInputPort( "inApp" ) )
, inGateway( addInputPort( "inGateway" ) )
, position( addInputPort( "position" ) )
, outApp( addOutputPort( "outApp" ) )
, outGateway1( addOutputPort( "outGateway1" ) )
, outGateway2( addOutputPort( "outGateway2" ) )
, positionSet1( addOutputPort( "positionSet1" ) )
, positionSet2( addOutputPort( "positionSet2" ) )
{ }
Model &Transceiver::initFunction()
{
gatewayID = 1;
inportID = 1;
sendTime = "00:00:01:000";
return *this ;
}
/*******************************************************************
* Function Name: externalFunction
********************************************************************/
Model &Transceiver::externalFunction( const ExternalMessage &msg )
{
if( msg.port() == inApp ){
oid = static_cast< int >( msg.value() ) ;
inportID = 1;
holdIn( active,sendTime) ;
}
else if (msg.port() == position){
gatewayID = static_cast< int >( msg.value() ) ;
inportID = 3;
holdIn(active,Time::Zero);
}
else {
oid = static_cast< int >( msg.value() ) ;
inportID = 2;
holdIn(active,sendTime) ;
}
return *this ;
}
/*******************************************************************
* Function Name: internalFunction
********************************************************************/
Model &Transceiver::internalFunction( const InternalMessage & )
{
passivate();
return *this;
}
/*******************************************************************
* Function Name: outputFunction
********************************************************************/
Model &Transceiver::outputFunction( const InternalMessage &msg )
{
if (inportID == 1){
if(gatewayID == 1){
sendOutput( msg.time(), outGateway1, oid );
}
else{
sendOutput( msg.time(), outGateway2, oid );
}
}
else if (inportID == 2){
sendOutput(msg.time(), outApp, oid);
}
else if (inportID == 3){
if(gatewayID == 1){
sendOutput( msg.time(), positionSet1, gatewayID);
}
else{
sendOutput( msg.time(), positionSet2, gatewayID);
}
}
return *this;
}