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