00001 #include <list>
00002 #include "SlottedAloha.h"
00003
00004 #include "devPktGen.h"
00005
00017 DevPktGen::DevPktGen(SysSAloha *_System, DevAP* _theAP)
00018 : DEDevice(_System), System(_System), theAP(_theAP), counter(0)
00019 {
00020 the_SG_Probe = 0;
00021 };
00022
00023 void DevPktGen::setup(ParamManager *Param, GlobalProbeManager *Results)
00024 {
00025 Param->addClass ("Dev_Test_PktGen", "Data Terminal generator");
00026 Param->addParameter ("Dev_Test_PktGen", new DETimeParameter("MsgInterarrTime", "Mean message interarrival time", "10.0", "(0,inf)" ));
00027 }
00028
00038 void DevPktGen::Initialize()
00039 {
00040 DETime MsgInterarrTime = get<DETimeParameter,DETime>(Param, "MsgInterarrTime", "Dev_Test_PktGen", "");
00041 MsgInterarrTimeGen = ExponentialDETimeRndGen(MsgInterarrTime);
00042
00043 if( the_SG_Probe )
00044 delete( the_SG_Probe );
00045 the_SG_Probe = new ProbeSG( "the_SG" );
00046
00047 list<DevPkt*>::iterator dtListIter;
00048 for( dtListIter=dtList.begin(); dtListIter!=dtList.end(); dtListIter++)
00049 delete (*dtListIter);
00050 dtList.clear();
00051
00052 DevPkt* newPkt = new DevPkt( System, this, theAP, counter++);
00053 the_SG_Probe->Observe_S(1);
00054 newPkt->Initialize();
00055 dtList.push_back(newPkt);
00056
00057 newEvent(new Ev_PktGen_Generation(this), MsgInterarrTimeGen.get());
00058 }
00059
00060
00061
00062
00063 void DevPktGen::HEv_PktGen_Generation()
00064 {
00065 DevPkt* newPkt = new DevPkt( System, this, theAP, counter++);
00066 the_SG_Probe->Observe_S(1);
00067 newPkt->Initialize();
00068 dtList.push_back(newPkt);
00069
00070 newEvent(new Ev_PktGen_Generation(this), MsgInterarrTimeGen.get());
00071 }
00072
00073
00074
00075
00076 void DevPktGen::AddBacklogged()
00077 {
00078 the_SG_Probe->Observe_G(1);
00079 }
00080
00081
00082
00083
00084
00085
00086
00087
00088 void DevPktGen::RemoveTerminal(DevPkt* dt)
00089 {
00090 list<DevPkt*>::iterator dtListIter;
00091 dtListIter = find(dtList.begin(), dtList.end(), dt);
00092 dtList.erase(dtListIter);
00093 }
00094
00095
00096
00097
00098 DevPktGen::~DevPktGen()
00099 {
00100 list<DevPkt*>::iterator dtListIter;
00101 for( dtListIter=dtList.begin(); dtListIter!=dtList.end(); dtListIter++)
00102 delete (*dtListIter);
00103 dtList.clear();
00104 }
00105
00106
00107