Skip to content

Commit

Permalink
envmod: initialize Facilities from LocalEnvironmentModel
Browse files Browse the repository at this point in the history
This eliminates core library's cyclic dependency on envmod library.

Change-Id: Ibd45d016c2be0635b2316a473b085b65981a0def
  • Loading branch information
riebl committed Apr 4, 2018
1 parent 0bbe5c6 commit 9ec5eba
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 29 deletions.
16 changes: 0 additions & 16 deletions src/artery/application/VehicleMiddleware.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
*/

#include "artery/application/VehicleMiddleware.h"
#include "artery/envmod/LocalEnvironmentModel.h"
#include "artery/envmod/GlobalEnvironmentModel.h"
#include "artery/traci/ControllableVehicle.h"
#include "artery/traci/MobilityBase.h"
#include "inet/common/ModuleAccess.h"
Expand All @@ -23,7 +21,6 @@ void VehicleMiddleware::initialize(int stage)
findHost()->subscribe(MobilityBase::stateChangedSignal, this);
getFacilities().register_const(&mVehicleDataProvider);
initializeVehicleController();
initializeEnvironmentModel();
}

Middleware::initialize(stage);
Expand Down Expand Up @@ -85,19 +82,6 @@ void VehicleMiddleware::initializeVehicleController()
getFacilities().register_mutable(mVehicleController);
}

void VehicleMiddleware::initializeEnvironmentModel()
{
#ifdef WITH_ENVMOD
mLocalEnvironmentModel = inet::findModuleFromPar<artery::LocalEnvironmentModel>(par("localEnvironmentModule"), findHost());
if (mLocalEnvironmentModel) {
mGlobalEnvironmentModel = inet::getModuleFromPar<artery::GlobalEnvironmentModel>(par("globalEnvironmentModule"), findHost());
Facilities& fac = getFacilities();
fac.register_mutable(mLocalEnvironmentModel);
fac.register_mutable(mGlobalEnvironmentModel);
}
#endif
}

void VehicleMiddleware::receiveSignal(cComponent* component, simsignal_t signal, cObject* obj, cObject* details)
{
if (signal == MobilityBase::stateChangedSignal) {
Expand Down
7 changes: 0 additions & 7 deletions src/artery/application/VehicleMiddleware.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@
namespace artery
{

// forward declarations
class GlobalEnvironmentModel;
class LocalEnvironmentModel;

class VehicleMiddleware : public Middleware
{
public:
Expand All @@ -30,14 +26,11 @@ class VehicleMiddleware : public Middleware
void update() override;

private:
void initializeEnvironmentModel();
void initializeVehicleController();
void updatePosition();

traci::VehicleController* mVehicleController;
VehicleDataProvider mVehicleDataProvider;
GlobalEnvironmentModel* mGlobalEnvironmentModel;
LocalEnvironmentModel* mLocalEnvironmentModel;
};

} // namespace artery
Expand Down
3 changes: 0 additions & 3 deletions src/artery/envmod/Car.ned
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ import artery.inet.Car;

module Car extends artery.inet.Car
{
parameters:
*.localEnvironmentModule = default(".environmentModel");

submodules:
environmentModel: LocalEnvironmentModel {
@display("p=214,57");
Expand Down
10 changes: 7 additions & 3 deletions src/artery/envmod/LocalEnvironmentModel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ void LocalEnvironmentModel::initialize(int stage)
if (stage == 0) {
mGlobalEnvironmentModel = inet::getModuleFromPar<GlobalEnvironmentModel>(par("globalEnvironmentModule"), this);
mGlobalEnvironmentModel->subscribe(EnvironmentModelRefreshSignal, this);

auto vehicle = inet::findContainingNode(this);
mMiddleware = inet::getModuleFromPar<Middleware>(par("middlewareModule"), vehicle);
Facilities& fac = mMiddleware->getFacilities();
fac.register_mutable(mGlobalEnvironmentModel);
fac.register_mutable(this);
} else if (stage == 1) {
initializeSensors();
}
Expand Down Expand Up @@ -95,9 +101,7 @@ void LocalEnvironmentModel::initializeSensors()
cXMLElement* sensor_filters = sensor_cfg->getFirstChildWithTag("filters");
bool sensor_applicable = true;
if (sensor_filters) {
auto vehicle = inet::findContainingNode(this);
auto middleware = inet::getModuleFromPar<Middleware>(par("middlewareModule"), vehicle);
auto identity = middleware->getIdentity();
auto identity = mMiddleware->getIdentity();
FilterRules rules(getRNG(0), identity);
sensor_applicable = rules.applyFilterConfig(*sensor_filters);
}
Expand Down
2 changes: 2 additions & 0 deletions src/artery/envmod/LocalEnvironmentModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ namespace artery

class EnvironmentModelObject;
class GlobalEnvironmentModel;
class Middleware;
class Sensor;
class SensorDetection;

Expand Down Expand Up @@ -102,6 +103,7 @@ class LocalEnvironmentModel : public omnetpp::cSimpleModule, public omnetpp::cLi
private:
void initializeSensors();

Middleware* mMiddleware;
GlobalEnvironmentModel* mGlobalEnvironmentModel;
TrackedObjects mObjects;
std::vector<Sensor*> mSensors;
Expand Down

0 comments on commit 9ec5eba

Please sign in to comment.