21 PPROPAGATION_INFO Propagation_Info;
23}propagation_info_for_list, * ptrpropagation_info_for_list;
24ptrpropagation_info_for_list propagation_info_list;
26#define PPROPAGATION_INFO_ALLOC() (struct stru_propagation_info_for_list*)list_alloc(sizeof(struct stru_propagation_info_for_list),offsetof(struct stru_propagation_info_for_list,ele))
27#define PPROPAGATION_INFO_ADD(info,e) (LIST_ADD_LAST(&(info),(e)))
28#define PPROPAGATION_INFO_NEXT(entity) (LIST_NEXT(entity))
29#define PPROPAGATION_INFO_REMOVE(ls, mem) (LIST_FREE((void**)(ls),(mem)))
31void ALOHA_gettxinfo(NETSIM_ID nTxId,
32 NETSIM_ID nTxInterface,
34 NETSIM_ID nRxInterface,
37 PALOHA_PHY_VAR txphy = ALOHA_PHY(nTxId, nTxInterface);
38 PALOHA_PHY_VAR rxphy = ALOHA_PHY(nRxId, nRxInterface);
40 Txinfo->dCentralFrequency = txphy->frequency;
41 Txinfo->dRxAntennaHeight = rxphy->dAntennaHeight;
42 Txinfo->dRxGain = rxphy->dAntennaGain;
43 Txinfo->dTxAntennaHeight = txphy->dAntennaHeight;
44 Txinfo->dTxGain = txphy->dAntennaGain;
45 Txinfo->dTxPower_mw = (double)txphy->tx_power;
46 Txinfo->dTxPower_dbm = MW_TO_DBM(Txinfo->dTxPower_mw);
47 Txinfo->dTx_Rx_Distance = DEVICE_DISTANCE(nTxId, nRxId);
50static void fill_propagation_from_link(NETSIM_ID d, NETSIM_ID in, PPROPAGATION prop)
52 memset(prop, 0,
sizeof * prop);
53 NetSim_LINKS* link = DEVICE_PHYLAYER(d, in)->pstruNetSimLinks;
54 memcpy(prop, link->puniMedProp.pstruWirelessLink.propagation,
sizeof * prop);
55 prop->pathlossVar.d0 = 1;
58bool CheckFrequencyInterfrence(
double dFrequency1,
double dFrequency2,
double bandwidth)
60 if (dFrequency1 > dFrequency2)
62 if ((dFrequency1 - dFrequency2) >= bandwidth)
69 if ((dFrequency2 - dFrequency1) >= bandwidth)
76bool check_interference(NETSIM_ID t, NETSIM_ID ti, NETSIM_ID r, NETSIM_ID ri)
78 PALOHA_PHY_VAR tp = ALOHA_PHY(t, ti);
79 PALOHA_PHY_VAR rp = ALOHA_PHY(r, ri);
80 return CheckFrequencyInterfrence(tp->frequency, rp->frequency, tp->bandwidth);
83ptrpropagation_info_for_list fn_NetSim_Aloha_InitPropagationModel(NETSIM_ID tx, NETSIM_ID rx)
85 ptrpropagation_info_for_list entry = PPROPAGATION_INFO_ALLOC();
89 ALOHA_gettxinfo(tx, 1, rx, 1, &txInfo);
91 fill_propagation_from_link(tx, 1, &prop);
92 entry->Propagation_Info = propagation_create_propagation_info(tx, 1, rx, 1, NULL, &txInfo, &prop);
96PPROPAGATION_INFO find_propagation_info(NETSIM_ID tx, NETSIM_ID rx)
98 ptrpropagation_info_for_list data = propagation_info_list;
101 if (data->TX_ID == tx && data->RX_ID == rx)
103 data->Propagation_Info->txInfo.dTx_Rx_Distance = DEVICE_DISTANCE(tx, rx);
104 return data->Propagation_Info;
107 data = PPROPAGATION_INFO_NEXT(data);
113double get_received_power(NETSIM_ID TX,NETSIM_ID RX,
double time)
115 return _propagation_get_received_power_dbm(find_propagation_info(TX, RX), time);
118double get_rx_power_callbackhandler(NETSIM_ID tx, NETSIM_ID txi,
119 NETSIM_ID rx, NETSIM_ID rxi,
122 return DBM_TO_MW(_propagation_get_received_power_dbm(find_propagation_info(tx, rx), time));
125PPROPAGATION_INFO get_aloha_propagation_info(NETSIM_ID TX, NETSIM_ID RX)
127 return find_propagation_info(TX, RX);
130int fn_NetSim_Aloha_FreePropagationInfo()
134 for (t = 0; t < NETWORK->nDeviceCount; t++)
136 for (ti = 0; ti < DEVICE(t + 1)->nNumOfInterface; ti++)
138 ptrpropagation_info_for_list data = propagation_info_list;
141 ptrpropagation_info_for_list temp = PPROPAGATION_INFO_NEXT(data);
142 PPROPAGATION_INFO_REMOVE(&propagation_info_list, data);
150static void calculate_received_power(PPROPAGATION_INFO info)
152 info->txInfo.Tx_X = DEVICE_POSITION(info->nTxId)->X;
153 info->txInfo.Tx_Y = DEVICE_POSITION(info->nTxId)->Y;
154 info->txInfo.Tx_Z = DEVICE_POSITION(info->nTxId)->Z;
156 info->txInfo.Rx_X = DEVICE_POSITION(info->nRxId)->X;
157 info->txInfo.Rx_Y = DEVICE_POSITION(info->nRxId)->Y;
158 info->txInfo.Rx_Z = DEVICE_POSITION(info->nRxId)->Z;
160 _propagation_calculate_received_power(info, pstruEventDetails->dEventTime);
163int fn_NetSim_Aloha_CalulateReceivedPower()
166 for(i=0;i<NETWORK->nDeviceCount;i++)
168 for (j = 0; j < NETWORK->nDeviceCount; j++)
170 ptrpropagation_info_for_list entry;
171 entry = fn_NetSim_Aloha_InitPropagationModel(i + 1, j + 1);
172 PPROPAGATION_INFO_ADD(propagation_info_list, entry);
173 calculate_received_power(entry->Propagation_Info);
179int fn_NetSim_Aloha_handleMobility(NETSIM_ID d)
181 for (NETSIM_ID i = 0; i < NETWORK->nDeviceCount; i++)
183 if (i + 1 == d) {
continue; }
184 calculate_received_power(find_propagation_info(d, i + 1));
185 calculate_received_power(find_propagation_info(i + 1, d));