You are on page 1of 5

#!

/usr/bin/perl -T
#!/usr/local/bin/perl -T
## --> Minimum Jammer Power, jammin.cgi
## --> Green Bay Professional Packet Radio, www.gbppr.org
## This file Copyright 2003 <contact@gbppr.org> under the GPL
## NO WARRANTY. Please send bug reports / patches / reports.
# Setup
#
use Math::Complex;
select STDOUT;
$| = 1;
my $pic = "pics/jammin.png";
# Print MIME
#
print "Content-type:text/html\n\n";
# Read environment
#
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
my $pt = $FORM{'pt'};
my $pt_val = $FORM{'pt_val'};
my $ht = $FORM{'ht'};
my $ht_val = $FORM{'ht_val'};
my $dt = $FORM{'dt'};
my $dt_val = $FORM{'dt_val'};
my $hj = $FORM{'hj'};
my $hj_val = $FORM{'hj_val'};
my $dj = $FORM{'dj'};
my $dj_val = $FORM{'dj_val'};
my $n = $FORM{'n'};
# Clean up user input data
#
# Power
#
$pt =~ tr/0-9.-//csd;
if ($pt == 0) {
$pt = 0.001;
}

if ($pt_val eq "dBm") {
$pt = 10 ** (($pt - 30) / 10); # dBm to W
}
$pt_w = sprintf "%.3f", $pt;
$pt_dbm = sprintf "%.3f", (10 * log10($pt_w)) + 30;
# Elevation
#
$ht =~ tr/0-9.//csd;
if (!$ht) {
$ht = 385; # 385 meters
}
if ($ht_val eq "feet") {
$ht = $ht * 0.3048; # ft to m
}
$ht_m = sprintf "%.3f", $ht;
$ht_ft = sprintf "%.3f", $ht * 3.2808399;
$hj =~ tr/0-9.//csd;
if (!$hj) {
$hj = 386; # 386 meters
}
if ($hj_val eq "feet") {
$hj = $hj * 0.3048; # ft to m
}
$hj_m = sprintf "%.3f", $hj;
$hj_ft = sprintf "%.3f", $hj * 3.2808399;
# Distance
#
$dj =~ tr/0-9.//csd;
if (!$dj) {
$dj = 17; # 17 kilometers
}
if ($dj_val eq "miles") {
$dj = $dj * 1.609344; # mi to km
}
$dj_km = sprintf "%.3f", $dj;
$dj_mi = sprintf "%.3f", $dj * 0.62137119;
$dt =~ tr/0-9.//csd;
if (!$dt) {
$dt = 9; # 9 kilometers
}
if ($dt_val eq "miles") {
$dt = $dt * 1.609344; # mi to km

}
$dt_km = sprintf "%.3f", $dt;
$dt_mi = sprintf "%.3f", $dt * 0.62137119;
if ($n eq "Level terrain (over water, sea, lakes, and ponds) - good conductivity
") {
$nv = 2;
}
elsif ($n eq "Rolling hills (farmland type terrain) - good conductivity") {
$nv = 3;
}
elsif ($n eq "Moderately rough terrain (rolling to high hills, forested farmland
) - fair/good conductivity") {
$nv = 4;
}
elsif ($n eq "Very rough terrain (rocky mountains or desert) - poor conductivity
") {
$nv = 5;
}
# Start calculations
#
%hash = (
"0.05" =>
"0.10" =>
"0.15" =>
"0.20" =>
"0.25" =>
"0.30" =>
"0.35" =>
"0.40" =>
"0.45" =>
"0.50" =>
"0.55" =>
"0.60" =>
"0.65" =>
"0.70" =>
"0.75" =>
"0.80" =>
"0.85" =>
"0.90" =>
"0.95" =>
"1.00" =>
"1.05" =>
"1.10" =>
"1.15" =>
"1.20" =>
"1.25" =>
"1.30" =>
"1.35" =>
"1.40" =>
"1.45" =>
"1.50" =>
"1.55" =>
"1.60" =>
"1.65" =>
"1.70" =>
"1.75" =>

400.0,
44.5,
25.0,
16.0,
11.2,
8.2,
6.3,
5.0,
4.0,
3.4,
2.8,
2.4,
2.3,
2.1,
1.8,
1.6,
1.4,
1.3,
1.2,
1.0,
0.91,
0.83,
0.76,
0.70,
0.64,
0.60,
0.55,
0.52,
0.48,
0.45,
0.42,
0.40,
0.37,
0.35,
0.40,

"1.80"
"1.85"
"1.90"
"1.95"
"2.00"
"2.05"
"2.10"
"2.15"
"2.20"
"2.25"
"2.30"
"2.35"
"2.40"
"2.45"
"2.50"
"2.55"
"2.60"
"2.65"
"2.70"
"2.75"
"2.80"
"2.85"
"2.90"
"2.95"
"3.00"
);
$A
$B
$E
$F

=
=
=
=

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

0.37,
0.35,
0.33,
0.28,
0.25,
0.24,
0.23,
0.22,
0.21,
0.20,
0.19,
0.18,
0.17,
0.17,
0.16,
0.15,
0.15,
0.14,
0.14,
0.13,
0.13,
0.12,
0.12,
0.11,
0.11,

($hj_m / $ht_m) * 100;


sprintf "%3.0f", $A;
($B - ($B % 5)) / 100;
sprintf "%1.2f",$E;

$gta = (($dj_km / $dt_km) ** $nv) * 2;


if ($F > "3.00") {
$elev_f = 0.11;
}
elsif ($F < "0.05") {
$elev_f = 400.0;
}
else {
$elev_f = $hash{$F};
}
$pj = $elev_f * $gta * $pt_w;
$pj_w = sprintf "%.3f", $pj;
$pj_dbm = sprintf "%.3f", (10 * log10($pj_w)) + 30;
$elev_f = sprintf "%.2f", $elev_f;
$nv = sprintf "%.2f", $nv;
# Make all pretty
#
$date = scalar gmtime;
# Draw me a web page
#
$g = "<font color=\"green\">";

$r = "<font color=\"red\">";
$b = "<font color=\"blue\">";
$e = "</font>";
print <<EOF;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>Minimum Jammer Power Results</title>
</head>
<body bgcolor="#D3D3D3" text="#000000" link="blue">
<center>
<h2>Minimum Jammer Power Results</h2>
</center>
<hr noshade>
<center><img src="$pic" alt="[jammin]"></center>
<hr noshade>
<pre>
$r Power Output of the Enemy Transmitter
dbm$r dBm) $e
$r Elevation of the Enemy Transmitter Location (AMSL)
_ft$r feet) $e
$r Enemy Transmitter-to-Target Receiver Distance
$e$dt_mi$r miles) $e
<br>
$g Elevation of the Jammer Transmitter Location (AMSL)
_ft$g feet) $e
$g Jammer Location-to-Target Receiver Distance
$e$dj_mi$g miles) $e
<br>
$b Terrain and Ground Conductivity Factor
$b Elevation Factor
$b Minimum Jammer Output Power
dbm$b dBm) $e
</pre>

: $e$pt_w$r Watts ($e$pt_


: $e$ht_m$r meters ($e$ht
: $e$dt_km$r kilometers (
: $e$hj_m$g meters ($e$hj
: $e$dj_km$g kilometers (
: $e$nv
: $e$elev_f
: $e$pj_w$b Watts ($e$pj_

<hr noshade size="5">


<blockquote>
<p>Jammer's antenna gain is <i>not</i> taken into account.&nbsp;&nbsp;Cut <b>Min
imum Jammer Output Power</b> in half for every 3 dB of antenna gain.&nbsp;&nbsp;
(Assuming the jammer's antenna is pointed in the right direction, dumbass!)</p>
</blockquote>
<p><font size="-1">Calculated on $date GMT</font></p>
</body>
</html>
EOF

You might also like