package radio_module;
import device.DeviceWithRadio;
import wisen_simulation.SimulationInputs;
public class RadioDetection {
public static final int SIMPLE_DETECTION = 0;
public static final int POWER_RECEPTION_DETECTION = 1;
public static final int THREED_DETECTION = 2;
public static boolean simpleDetection(DeviceWithRadio device1, DeviceWithRadio device2) {
if (device1.canCommunicateWith(device2)) {
if (SimulationInputs.symmetricalLinks)
return (device1.contains(device2) || device2.contains(device1));
else
return (device1.contains(device2));
}
return false;
}
public static boolean powerReceptionDetection(DeviceWithRadio device1, DeviceWithRadio device2) {
if (device1.canCommunicateWith(device2)) {
if ( getPowerReception(device1, device2) > device2.getRequiredQuality()) {
if (SimulationInputs.symmetricalLinks)
return (device1.contains(device2) || device2.contains(device1)) ;
else
return device1.contains(device2);
}
}
return false;
}
public static boolean threeDDetection(DeviceWithRadio device1, DeviceWithRadio device2) {
if (device1.canCommunicateWith(device2)) {
if ( getPowerReception(((DeviceWithRadio)device1), ((DeviceWithRadio)device2)) > ((DeviceWithRadio)device2).getRequiredQuality())
return true;
}
return false;
}
public static double getPowerReception(DeviceWithRadio device1, DeviceWithRadio device2) {
double pr = device1.getTransmitPower() - getAttenuation(device1, device1.distance(device2));
return pr ;
}
public static double getAttenuation(DeviceWithRadio device, double distance) {
double f = 2.9979e+08;
double lambda = f / device.getCurrentRadioModule().getFrequency();
double attenuation = (20 * Math.log10(4 * Math.PI * distance / lambda)) ;
return attenuation ;
}
}