00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 #ifndef UWBIR_PHY_LAYER_H
00066 #define UWBIR_PHY_LAYER_H
00067
00068 #include "PhyLayerBattery.h"
00069 #include "RadioUWBIR.h"
00070 #include "UWBIRStochasticPathlossModel.h"
00071 #include "UWBIRIEEE802154APathlossModel.h"
00072 #include "HostState.h"
00073 #include "MacToPhyControlInfo.h"
00074 #include "BaseUtility.h"
00075
00076
00077 class DeciderUWBIRED;
00078 class DeciderUWBIREDSyncOnAddress;
00079 class DeciderUWBIREDSync;
00080
00081 #include "DeciderUWBIRED.h"
00082 #include "DeciderUWBIREDSyncOnAddress.h"
00083 #include "DeciderUWBIREDSync.h"
00084
00118 class PhyLayerUWBIR : public BasePhyLayer
00119 {
00120 friend class DeciderUWBIRED;
00121
00122 public:
00123 void initialize(int stage);
00124 PhyLayerUWBIR() : uwbpathloss(0), ieee802154AChannel(0) {}
00125
00126 void finish();
00127
00128
00129 static cDynamicExpression::Value ghassemzadehNLOSFunc(cComponent *context, cDynamicExpression::Value argv[], int argc) {
00130 const char * ghassemzadehnlosxml =
00131 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
00132 "<root>"
00133 "<AnalogueModels>"
00134 "<AnalogueModel type=\"UWBIRStochasticPathlossModel\"><parameter name=\"PL0\" type=\"double\" value=\"-51\"/>"
00135 "<parameter name=\"mu_gamma\" type=\"double\" value=\"3.5\"/>"
00136 "<parameter name=\"sigma_gamma\" type=\"double\" value=\"0.97\"/>"
00137 "<parameter name=\"mu_sigma\" type=\"double\" value=\"2.7\"/>"
00138 "<parameter name=\"sigma_sigma\" type=\"double\" value=\"0.98\"/>"
00139 "<parameter name=\"isEnabled\" type=\"bool\" value=\"true\"/>"
00140 "<parameter name=\"shadowing\" type=\"bool\" value=\"true\"/>"
00141 "</AnalogueModel>"
00142 "</AnalogueModels>"
00143 "</root>";
00144 cXMLParImpl xmlParser;
00145 xmlParser.parse(ghassemzadehnlosxml);
00146 cDynamicExpression::Value parameters(xmlParser.xmlValue(NULL));
00147 return parameters;
00148 }
00149 typedef cDynamicExpression::Value (*fptr) (cComponent *context, cDynamicExpression::Value argv[], int argc);
00150 static fptr ghassemzadehNLOSFPtr;
00151
00152
00153
00154
00155 protected:
00156
00157 UWBIRStochasticPathlossModel* uwbpathloss;
00158 UWBIRIEEE802154APathlossModel* ieee802154AChannel;
00159 DeciderUWBIRED* uwbdecider;
00160
00161 virtual AirFrame *encapsMsg(cPacket *msg);
00162
00163 virtual AnalogueModel* getAnalogueModelFromName(std::string name, ParameterMap& params);
00164
00165 AnalogueModel* createUWBIRStochasticPathlossModel(ParameterMap & params);
00166 AnalogueModel* createUWBIRIEEE802154APathlossModel(ParameterMap & params);
00167 AnalogueModel* createIntensityModel(ParameterMap & params);
00168 virtual Decider* getDeciderFromName(std::string name, ParameterMap& params);
00169 virtual Radio* initializeRadio();
00170
00171 RadioUWBIR* uwbradio;
00175 virtual void receiveBBItem(int category, const BBItem *details, int scopeModuleId);
00176
00177 virtual void handleAirFrame(cMessage* msg);
00178
00179 virtual void switchRadioToRX() {
00180 Enter_Method_Silent();
00181 uwbradio->startReceivingFrame(simTime());
00182 setRadioCurrent(uwbradio->getCurrentState());
00183 }
00184
00185 virtual void switchRadioToSync() {
00186 Enter_Method_Silent();
00187 uwbradio->finishReceivingFrame(simTime());
00188 setRadioCurrent(radio->getCurrentState());
00189 }
00190
00191 virtual simtime_t setRadioState(int rs);
00192
00194 int numActivities;
00195
00197 double sleepCurrent, rxCurrent, decodingCurrentDelta, txCurrent, syncCurrent;
00198
00200 double setupRxCurrent, setupTxCurrent, rxTxCurrent, txRxCurrent;
00201
00206 enum Activities {
00207 SLEEP_ACCT=0,
00208 RX_ACCT,
00209 TX_ACCT,
00210 SWITCHING_ACCT,
00211 SYNC_ACCT,
00212 };
00213
00214 enum ProtocolIds {
00215 IEEE_802154_UWB = 3200,
00216 };
00217
00218 virtual void setRadioCurrent(int rs);
00219
00220 virtual void setSwitchingCurrent(int from, int to);
00221
00228 virtual void handleHostState(const HostState& state);
00229
00233 virtual void finishRadioSwitching();
00234
00235 };
00236
00237 #endif