<?php
    // my wireless lan calculator

    $fudge = 20;

    $frequency = 2437;

    $sensitivity['cisco_340']['11'] = -85;
    $sensitivity['cisco_340']['5.5'] = -89;
    $sensitivity['cisco_340']['2'] = -91;
    $sensitivity['cisco_340']['1'] = -94;
    $output['cisco_340'] = mw2dbm(30);
    
    $sensitivity['cisco_350']['11'] = -84;
    $sensitivity['cisco_350']['5.5'] = -87;
    $sensitivity['cisco_350']['2'] = -88;
    $sensitivity['cisco_350']['1'] = -90;
    $output['cisco_350'] = mw2dbm(100);

    $sensitivity['proxim_harmony']['11'] = -83;
    $sensitivity['proxim_harmony']['5.5'] = -86;
    $sensitivity['proxim_harmony']['2'] = -89;
    $sensitivity['proxim_harmony']['1'] = -91;
    $output['proxim_harmony'] = 16;

    $sensitivity['teletronics_wl11000']['11'] = -83;
    $sensitivity['teletronics_wl11000']['5.5'] = -86;
    $sensitivity['teletronics_wl11000']['2'] = -89;
    $sensitivity['teletronics_wl11000']['1'] = -91;
    $output['teletronics_wl11000'] = 17;

    $sensitivity['orinoco']['11'] = -82;
    $sensitivity['orinoco']['5.5'] = -87;
    $sensitivity['orinoco']['2'] = -91;
    $sensitivity['orinoco']['1'] = -94;
    $output['orinoco'] = mw2dbm(30);

    $sensitivity['breezecom']['11'] = -83;
    $sensitivity['breezecom']['5.5'] = -87;
    $sensitivity['breezecom']['2'] = -86;
    $sensitivity['breezecom']['1'] = -89;
    $output['breezecom'] = mw2dbm(30);

    $sensitivity['intel']['11'] = -81;
    $sensitivity['intel']['5.5'] = -84;
    $sensitivity['intel']['2'] = -85;
    $sensitivity['intel']['1'] = -87;
    $output['intel'] = mw2dbm(30);

    $sensitivity['addtron']['11'] = -76;
    $sensitivity['addtron']['5.5'] = -80;
    $sensitivity['addtron']['2'] = -80;
    $sensitivity['addtron']['1'] = -80;
    $output['addtron'] = mw2dbm(30);

    $sensitivity['dlink']['11'] = -78;
    $sensitivity['dlink']['5.5'] = -81;
    $sensitivity['dlink']['2'] = -82;
    $sensitivity['dlink']['1'] = -84;
    $output['dlink'] = mw2dbm(30);

    if (!$radio) { $radio = 'orinoco'; }
    if (!$pigtail) { $pigtail = 1; }
    if (!$arrestor) { $arrestor = 1.25; }
    if (!$connector) { $connector = 0.25; }
    if (!$cable) { $cable = 0.22; }

    if (!$gaina) { $gaina = 15; }
    if (!$gainb) { $gainb = 12; }
    if (!$distance) { $distance = 5; }

    $sidea = $output[$radio] - $pigtail - $arrestor - $connector - $cable - $connector + $gaina;
    $sideb = $output[$radio] - $pigtail - $arrestor - $connector - $cable - $connector + $gainb;

    $loss = (20*log10($distance)) + (20*log10($frequency)) + 36.6;
    $newloss = ($sidea + $sideb) - $loss;

    function mw2dbm($x) {
        return 10*log10($x);
    }
    function checkfor($var, $val) {
        global ${$var};
        if (${$var} == $val) { return "checked"; }
    }

    function testfor($val) {
        global $newloss, $fudge, $sensitivity, $radio;
        $x = number_format($newloss - $fudge - $sensitivity[$radio][$val], 2);
        if (($x) >= 0) {
            return "<b>Successful</b> (within $x dB)";
        }
        else {
            return "<b>Unsuccessful</b> (within $x dB)";
        }
    }

?>
<html><head><title>Long Distance 802.11b Worksheet</title></head>
<body>

<h1>Long Distance 802.11b Worksheet</h1>
<p>Given a distance (in miles) and the antenna gain of each end (in dBi), this will predict theoretical success rates.
These numbers are based on publically available specs for power output and receiver sensitivity.  You can view the source <a href="wlan.phps">here</a>.</p>
<p>We'll assume you're using one meter of LMR-400 and a lightning arrestor on each side, allowing 0.25dB loss for each connector, and 1dB for each pigtail.</p>
<p>A more detailed worksheet can be found at: <a href="http://www.gbonline.com/~multiplx/wireless/wireless.main.cgi">http://www.gbonline.com/~multiplx/wireless/wireless.main.cgi</a></p>

<form action="<?php echo $PHP_SELF?>">
<table>
 <tr>
  <td valign="top"><b>Distance</b></td>
  <td><input name="distance" value="<?php echo $distance?>" size=5> mi.</td>
 </tr>
 <tr>
  <td valign="top"><b>Antenna Gains</b></td>
  <td>
   <input name="gaina" value="<?php echo $gaina?>" size=5 /> dBi<br />
   <input name="gainb" value="<?php echo $gainb?>" size=5 /> dBi
  </td>
 </tr>
 <tr>
  <td valign="top"><b>Base Stations</b></td>
  <td>
   <input type=radio name=radio value="dlink" <?=checkfor('radio', 'dlink')?>> D-Link <br />
   <input type=radio name=radio value="addtron" <?=checkfor('radio', 'addtron')?>> Addtron <br />
   <input type=radio name=radio value="intel" <?=checkfor('radio', 'intel')?>> Intel <br />
   <input type=radio name=radio value="breezecom" <?=checkfor('radio', 'breezecom')?>> Breezecom <br />
   <input type=radio name=radio value="orinoco" <?=checkfor('radio', 'orinoco')?>> Orinoco / Lucent / Avaya <br />
   <input type=radio name=radio value="cisco_340" <?=checkfor('radio', 'cisco_340')?>> Cisco 340 <br />
   <input type=radio name=radio value="proxim_harmony" <?=checkfor('radio', 'proxim_harmony')?>> Proxim Harmony <br />
   <input type=radio name=radio value="teletronics_wl11000" <?=checkfor('radio', 'teletronics_wl11000')?>> Teletronics WL11000 <br />
   <input type=radio name=radio value="cisco_350" <?=checkfor('radio', 'cisco_350')?>> Cisco 350 <br />
  </td>
 </tr>
 <tr>
  <td colspan="2">
   <input type="submit" value="Check Values">
  </td>
 </tr>
</table>
</form>

<table>
 <tr>
  <td><b>11Mbps</b></td>
  <td><?=testfor('11')?></td>
 </tr>
 <tr>
  <td><b>5.5Mbps</b></td>
  <td><?=testfor('5.5')?></td>
 </tr>
 <tr>
  <td><b>2Mbps</b></td>
  <td><?=testfor('2')?></td>
 </tr>
 <tr>
  <td><b>1Mbps</b></td>
  <td><?=testfor('1')?></td>
 </tr>
</table>

<address>
 <a href=mailto:chris@screwdriver.net>Christopher Heschong</a>
</address>

</body>
</html>
