如何从inet扩展模块?

时间:2018-08-05 22:46:46

标签: omnet++ inet

有n个Adhoc节点在现场随机部署。由于需要特殊的节点,我应该从AdhocHost扩展新节点,并添加一些参数,例如节点坐标。

MySensorNode.ned

import inet.node.inet.AdhocHost;
import inet.node.inet.INetworkNode;

module MySensorNode extends AdhocHost like INetworkNode
{
  parameters:
      @display("bgb=827.48,663.192;bgu=m;i=misc/transmission_anim");
      @class(inet::MySensorNode);
}

MySensorNode.h

#ifndef __INET_MYSENSORNODE_H
#define __INET_MYSENSORNODE_H


namespace inet {

class MySensorNode : public ***????????what should I write here????***
{
   public:
    bool first_init = true;
        MySensorNode();
        virtual ~MySensorNode();
        virtual void initialize(int stage);
        virtual void changecolor();
        virtual void handleMessage(cMessage *msg);
        ?????????others ?????????

};
} // namespace inet
#endif /* __INET_MYSENSORNODE_H */

MySensorNode.cc

#include "MySensorNode.h"
namespace inet {

Define_Module(MySensorNode);


void MySensorNode::initialize(int stage)
{
    if(first_init)
    {
        changecolor();
    }
}

void MySensorNode::changecolor()
{
???????????????????
}


} // namespace inet

作为问题的第一部分,我想在初始化时更改节点颜色的5%。我该怎么办?

请在上面的代码中提及我的错误。谢谢

1 个答案:

答案 0 :(得分:0)

如果只是要更改颜色,则需要更改显示字符串。

您可以在UDPBasicApp模块的初始化方法(阶段1)中这样做:

getParentModule()->getDisplayString().setTagArg("i", 1, "yellow");

OMNeT ++ Manual

中描述了不同的标签

AdhocHost是一个复合模块。尽管可以使用@class属性覆盖复合模块的C ++类,但这是一项永远不应使用的功能。将代码封装到一个简单的模块中,并将其添加为子模块。阅读this了解更多信息。

要将其添加为子模块,需要更改复合模块。可以这样完成:

module SomeName extends AdhocHost 
{
    submodules:
        mySensorNode: MySensorNode;
}

那么您的MySensorNodecSimpleModule

namespace inet {

class MySensorNode : public cSimpleModule
{
   public:
....

在Stack Overflow和INET Framework中有很多示例,例如inet.linklayer.common.WirelessNic