24#ifndef _NETSIM_IEEE802_11_PHY_H_
25#define _NETSIM_IEEE802_11_PHY_H_
30#include "IEEE802_11.h"
31#include "ErrorModel.h"
34#define BATTERY_RECHARGING_CURRENT_MA_DEFAULT 0
35#define BATTERY_VOLTAGE_V_DEFAULT 0
36#define BATTERY_INITIAL_ENERGY_DEFAULT 0
37#define BATTERY_TRANSMITTING_CURRENT_MA_DEFAULT 0
38#define BATTERY_RECEIVING_CURRENT_MA_DEFAULT 0
39#define BATTERY_IDLEMODE_CURRENT_MA_DEFAULT 0
40#define BATTERY_SLEEPMODE_CURRENT_MA_DEFAULT 0
44#include "IEEE802_11_HTPhy.h"
45#include "IEEE802_11_HEPhy.h"
60 static const char* strIEEE802_11_ANTENNA_TYPE[] =
61 {
"Omnidirectional Antenna",
"Sector Antenna", };
64 typedef enum enum_802_11_DSSS_PLCP_SIGNAL_Field
68 Rate_5dot5Mbps = 0x37,
70 }IEEE802_11_DSSS_PLCP_SIGNAL;
75 PHY_MODULATION modulation;
77 IEEE802_11_DSSS_PLCP_SIGNAL dsssrate;
78 double dProcessingGain;
79 }IEEE802_11_DSSS_PHY,*PIEEE802_11_DSSS_PHY;
85 PHY_MODULATION modulation;
89 }IEEE802_11_OFDM_PHY,*PIEEE802_11_OFDM_PHY;
105 UINT aPHY_RX_START_Delay;
106 UINT aRxTxTurnaroundTime;
109 UINT aRxTxSwitchTime;
114 UINT aAirPropagationTime;
115 UINT aMACProcessingDelay;
116 UINT aPreambleLength;
117 UINT aPLCPHeaderLength;
118 UINT aMPDUDurationFactor;
122 }PLME_CHARACTERISTICS,*PPLME_CHARACTERISTICS;
123#define getSlotTime(phy) (phy->plmeCharacteristics.aSlotTime)
124#define getSIFSTime(phy) (phy->plmeCharacteristics.aSIFSTime)
128 PHY_TX_STATUS radioState;
130 UINT64 transmissionId;
132 }IEEE802_11_RADIO, *ptrIEEE802_11_RADIO;
138 IEEE802_11_PROTOCOL PhyProtocol;
139 IEEE802_11_PHY_TYPE PhyType;
140 UINT16 usnChannelNumber;
142 double dFrequencyBand;
143 double dChannelBandwidth;
144 double dAntennaHeight;
153 ANTENNA_TYPE antennaType;
154 double boresightAngle;
157 double frontToBackRatio;
159 PLME_CHARACTERISTICS plmeCharacteristics;
162 void* rateAdaptationData;
165 double dControlFrameDataRate;
166 double dBroadcastFrameDataRate;
169 IEEE802_11_CCAMODE ccaMode;
173 IEEE802_11_RADIO radio;
184 double dCurrentRxSensitivity_dbm;
188 IEEE802_11_DSSS_PHY dsssPhy;
189 IEEE802_11_OFDM_PHY ofdmPhy;
190 IEEE802_11_OFDM_MIMO ofdmPhy_11n;
191 IEEE802_11_OFDM_MIMO ofdmPhy_11ac;
192 IEEE802_11_OFDM_MIMO_HE ofdmPhy_11ax;
199 unsigned int N_HT_DLTF;
201 unsigned short int nN_HT_DLTF;
202 unsigned int N_HT_ELTF;
203 unsigned int N_HT_LTF;
206 unsigned int N_HE_LTF;
207 PACKET_STATUS firstpacketstatus;
217 BER_MODEL_TYPE Ber_Model;
221 int Fixed_Data_Rate_MCS;
223 ptrpropagation_info_for_list propagation_info_list;
225 UINT64 transmissionId;
226 }IEEE802_PHY_VAR,*PIEEE802_11_PHY_VAR;
228#define IEEE802_11_CURR_PHY IEEE802_11_PHY(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId)
231 double GET_RX_POWER_dbm(NETSIM_ID tx, NETSIM_ID txi, NETSIM_ID rx, NETSIM_ID rxi,
double time);
232#define GET_RX_POWER_mw(tx, txi, rx, rxi, time) (DBM_TO_MW(GET_RX_POWER_dbm(tx, txi, rx, rxi, time)))
235 int fn_NetSim_IEEE802_11_PHY_Init(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId);
236 bool isMediumIdle(NETSIM_ID, NETSIM_ID);
237 void fn_NetSim_IEEE802_11_Add_Phy_Header(NetSim_PACKET* packet, UINT64* transmissionId);
238 double get_preamble_time(PIEEE802_11_PHY_VAR phy);
239 int fn_NetSim_IEEE802_11_PhyOut();
240 int fn_NetSim_IEEE802_11_PhyIn();
241 bool fn_NetSim_IEEE802_11_TransmitFrame(NetSim_PACKET* pstruPacket, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
242 bool fn_NetSim_IEEE802_11_TransmitBroadcastFrame(NetSim_PACKET* pstruPacket, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
243 int fn_NetSim_IEEE802_11_SetDataRate(NETSIM_ID txId, NETSIM_ID txIf,
244 NETSIM_ID rxId, NETSIM_ID rxIf,
245 NetSim_PACKET* packet,
double time);
246 void free_ieee802_11_phy_header(NetSim_PACKET* packet);
247 void copy_ieee802_11_phy_header(NetSim_PACKET* d, NetSim_PACKET* s);
248 int fn_NetSim_IEEE802_11_PropagationModel(NETSIM_ID nodeId,
double time);
249 void fn_Update_TxInfo_TxRxPos(NETSIM_ID devId);
250 double fn_NetSim_IEEE802_11_CalculateTransmissionTime(
double size, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
251 double fn_NetSim_IEEE802_11_HTPhy_getCtrlFrameDataRate(PIEEE802_11_PHY_VAR pstruPhy);
252 double fn_NetSim_IEEE802_11_GetMinRxSensitivity(NETSIM_ID txId, NETSIM_ID txIf);
255 bool is_radio_idle(PIEEE802_11_PHY_VAR phy);
256 bool set_radio_state(NETSIM_ID d,
260 UINT64 transmissionId);
261 PHY_TX_STATUS get_radio_state(PIEEE802_11_PHY_VAR phy);
262 void set_mac_state_after_txend(PIEEE802_11_MAC_VAR mac);
263 bool CheckFrequencyInterfrence(
double dFrequency1,
double dFrequency2,
double bandwidth);
266 void fn_NetSim_IEEE802_11_DSSPhy_SetEDThreshold(PIEEE802_11_PHY_VAR phy);
267 int fn_NetSim_IEEE802_11_DSSPhy_UpdateParameter();
268 int fn_NetSim_IEEE802_11_DSSSPhy_DataRate(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NETSIM_ID nReceiverId,NetSim_PACKET* packet,
double time);
269 unsigned int get_dsss_phy_max_index();
270 unsigned int get_dsss_phy_min_index();
271 void get_dsss_phy_all_rate(
double* rate, UINT* len);
274 void fn_NetSim_IEEE802_11_OFDMPhy_SetEDThreshold(PIEEE802_11_PHY_VAR phy);
275 int fn_NetSim_IEEE802_11_OFDMPhy_UpdateParameter();
276 int fn_NetSim_IEEE802_11_OFDMPhy_DataRate(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NETSIM_ID nReceiverId,NetSim_PACKET* packet,
double time);
277 unsigned int get_ofdm_phy_max_index();
278 unsigned int get_ofdm_phy_min_index();
279 void get_ofdm_phy_all_rate(
int bandwidth_MHz,
double* rate, UINT* len);
282 void fn_NetSim_IEEE802_11_HTPhy_SetEDThreshold(PIEEE802_11_PHY_VAR phy);
283 int fn_NetSim_IEEE802_11_HTPhy_UpdateParameter();
284 void fn_NetSim_IEEE802_11n_OFDM_MIMO_init(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId);
285 double get_11n_preamble_time(PIEEE802_11_PHY_VAR phy);
286 double fn_NetSim_IEEE802_11n_TxTimeCalculation(NetSim_PACKET *pstruPacket, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
287 int fn_NetSim_IEEE802_11_HTPhy_DataRate(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NETSIM_ID nReceiverId,NetSim_PACKET* packet,
double time);
288 unsigned int get_ht_phy_max_index(IEEE802_11_PROTOCOL protocol,UINT);
289 unsigned int get_ht_phy_min_index(IEEE802_11_PROTOCOL protocol,UINT);
292 void fn_NetSim_IEEE802_11ac_OFDM_MIMO_init(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId);
293 double get_11ac_preamble_time(PIEEE802_11_PHY_VAR phy);
294 double fn_NetSim_IEEE802_11ac_TxTimeCalculation(NetSim_PACKET *pstruPacket, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
299 void fn_NetSim_IEEE802_11_HEPhy_SetEDThreshold(PIEEE802_11_PHY_VAR phy);
300 int fn_NetSim_IEEE802_11_HEPhy_UpdateParameter();
301 void fn_NetSim_IEEE802_11ax_OFDM_MIMO_init(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId);
302 double get_11ax_preamble_time(PIEEE802_11_PHY_VAR phy);
303 double fn_NetSim_IEEE802_11ax_TxTimeCalculation(NetSim_PACKET *pstruPacket, NETSIM_ID nDevId, NETSIM_ID nInterfaceId);
304 int fn_NetSim_IEEE802_11_HEPhy_DataRate(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NETSIM_ID nReceiverId,NetSim_PACKET* packet,
double time);
305 unsigned int get_he_phy_max_index(IEEE802_11_PROTOCOL protocol,UINT);
306 unsigned int get_he_phy_min_index(IEEE802_11_PROTOCOL protocol,UINT);
307 double fn_NetSim_IEEE802_11_HEPhy_getCtrlFrameDataRate(PIEEE802_11_PHY_VAR pstruPhy);
313 PIEEE802_11_PHY_VAR IEEE802_11_PHY(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId);
314 void SET_IEEE802_11_PHY(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId, PIEEE802_11_PHY_VAR phy);
317 void IEEE_802_11RadioMeasurements_Init();
318 void IEEE_802_11RadioMeasurements_Finish();
319 void IEEE_802_11RadioMeasurements_Log(NetSim_PACKET* packet, NETSIM_ID txid, NETSIM_ID txif, NETSIM_ID rxid, NETSIM_ID rxif);
Data structure for physical layer parameters.
Data structure for physical layer parameters.