247 lines
9.9 KiB
HTML
247 lines
9.9 KiB
HTML
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||
xmlns:w="urn:schemas-microsoft-com:office:word"
|
||
xmlns="http://www.w3.org/TR/REC-html40">
|
||
|
||
<head>
|
||
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||
<meta name=ProgId content=Word.Document>
|
||
<meta name=Generator content="Microsoft Word 10">
|
||
<meta name=Originator content="Microsoft Word 10">
|
||
<link rel=File-List href="blaster_files/filelist.xml">
|
||
<title>BLASTER - Winsock IrDA Sample Application</title>
|
||
<!--[if gte mso 9]><xml>
|
||
<w:WordDocument>
|
||
<w:Zoom>97</w:Zoom>
|
||
<w:SpellingState>Clean</w:SpellingState>
|
||
<w:GrammarState>Clean</w:GrammarState>
|
||
<w:Compatibility>
|
||
<w:UseFELayout/>
|
||
</w:Compatibility>
|
||
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
|
||
</w:WordDocument>
|
||
</xml><![endif]-->
|
||
<style>
|
||
<!--
|
||
/* Font Definitions */
|
||
@font-face
|
||
{font-family:Courier;
|
||
panose-1:2 7 4 9 2 2 5 2 4 4;
|
||
mso-font-charset:0;
|
||
mso-generic-font-family:modern;
|
||
mso-font-format:other;
|
||
mso-font-pitch:fixed;
|
||
mso-font-signature:3 0 0 0 1 0;}
|
||
@font-face
|
||
{font-family:Wingdings;
|
||
panose-1:5 0 0 0 0 0 0 0 0 0;
|
||
mso-font-charset:2;
|
||
mso-generic-font-family:auto;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:0 268435456 0 0 -2147483648 0;}
|
||
@font-face
|
||
{font-family:"MS Mincho";
|
||
panose-1:2 2 6 9 4 2 5 8 3 4;
|
||
mso-font-alt:"\FF2D\FF33 \660E\671D";
|
||
mso-font-charset:128;
|
||
mso-generic-font-family:modern;
|
||
mso-font-pitch:fixed;
|
||
mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
|
||
@font-face
|
||
{font-family:Verdana;
|
||
panose-1:2 11 6 4 3 5 4 4 2 4;
|
||
mso-font-charset:0;
|
||
mso-generic-font-family:swiss;
|
||
mso-font-pitch:variable;
|
||
mso-font-signature:536871559 0 0 0 415 0;}
|
||
@font-face
|
||
{font-family:"\@MS Mincho";
|
||
panose-1:2 2 6 9 4 2 5 8 3 4;
|
||
mso-font-charset:128;
|
||
mso-generic-font-family:modern;
|
||
mso-font-pitch:fixed;
|
||
mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
|
||
/* Style Definitions */
|
||
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||
{mso-style-parent:"";
|
||
margin:0in;
|
||
margin-bottom:.0001pt;
|
||
mso-pagination:widow-orphan;
|
||
font-size:12.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:"MS Mincho";}
|
||
p
|
||
{font-size:12.0pt;
|
||
font-family:"Times New Roman";
|
||
mso-fareast-font-family:"MS Mincho";}
|
||
pre
|
||
{margin-top:0in;
|
||
margin-bottom:0in;
|
||
margin-bottom:.0001pt;
|
||
font-size:10.0pt;
|
||
font-family:"Courier New";
|
||
mso-fareast-font-family:"MS Mincho";}
|
||
span.SpellE
|
||
{mso-style-name:"";
|
||
mso-spl-e:yes;}
|
||
span.GramE
|
||
{mso-style-name:"";
|
||
mso-gram-e:yes;}
|
||
@page Section1
|
||
{size:8.5in 11.0in;
|
||
margin:1.0in 1.25in 1.0in 1.25in;
|
||
mso-header-margin:.5in;
|
||
mso-footer-margin:.5in;
|
||
mso-paper-source:0;}
|
||
div.Section1
|
||
{page:Section1;}
|
||
/* List Definitions */
|
||
@list l0
|
||
{mso-list-id:2081251339;
|
||
mso-list-template-ids:-1945449268;}
|
||
@list l0:level1
|
||
{mso-level-number-format:bullet;
|
||
mso-level-text:\F0B7;
|
||
mso-level-tab-stop:.5in;
|
||
mso-level-number-position:left;
|
||
text-indent:-.25in;
|
||
mso-ansi-font-size:10.0pt;
|
||
font-family:Symbol;}
|
||
ol
|
||
{margin-bottom:0in;}
|
||
ul
|
||
{margin-bottom:0in;}
|
||
-->
|
||
</style>
|
||
<!--[if gte mso 10]>
|
||
<style>
|
||
/* Style Definitions */
|
||
table.MsoNormalTable
|
||
{mso-style-name:"Table Normal";
|
||
mso-tstyle-rowband-size:0;
|
||
mso-tstyle-colband-size:0;
|
||
mso-style-noshow:yes;
|
||
mso-style-parent:"";
|
||
mso-padding-alt:0in 5.4pt 0in 5.4pt;
|
||
mso-para-margin:0in;
|
||
mso-para-margin-bottom:.0001pt;
|
||
mso-pagination:widow-orphan;
|
||
font-size:10.0pt;
|
||
font-family:"Times New Roman";}
|
||
</style>
|
||
<![endif]-->
|
||
</head>
|
||
|
||
<body lang=EN-US style='tab-interval:.5in'>
|
||
|
||
<div class=Section1>
|
||
|
||
<h2><span style='font-family:Verdana'>BLASTER <20> Winsock IrDA Sample Application<o:p></o:p></span></h2>
|
||
|
||
<h3><span style='font-family:Verdana'>SUMMARY<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Blaster is a simple
|
||
application that illustrates Windows NT 5.0<EFBFBD>s support of the IrDA protocol.
|
||
IrDA provides reliable point to point connectivity between 2 computers equipped
|
||
with infrared transceivers. Blaster uses the WinSock API with the IrDA address
|
||
family to setup a single connection and "blast" random data to a peer
|
||
machine that is also running blaster.<o:p></o:p></span></p>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Blaster can be used
|
||
during the development of Winsock application or OEM IrDA NDIS drivers to get
|
||
an initial impression of performance.<o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>To build BLASTER.EXE,
|
||
select either the checked or free DDK environment, change to the directory
|
||
BLASTER and type BUILD.<o:p></o:p></span></p>
|
||
|
||
<p><b style='mso-bidi-font-weight:normal'><span style='font-size:13.5pt;
|
||
font-family:Verdana'>RUNNING THE SAMPLE<o:p></o:p></span></b></p>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Copy BLASTER.EXE the test
|
||
machine and run it.<o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>RESOURCES<o:p></o:p></span></h3>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>IrDA Winsock applications
|
||
are discussed in greater detail in the .DOC files included in the IrDA section
|
||
of the DDK samples. <o:p></o:p></span></p>
|
||
|
||
<h3><span style='font-family:Verdana'>CODE TOUR<o:p></o:p></span></h3>
|
||
|
||
<h4><span style='font-family:Verdana'>File Manifest<o:p></o:p></span></h4>
|
||
|
||
<pre><u>Files<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>Description<o:p></o:p></u></pre><pre>BLASTER.HTM<span style='mso-spacerun:yes'><EFBFBD><EFBFBD> </span>The documentation for this sample (this file).</pre><pre><span
|
||
class=GramE><span style='font-family:Courier'>SOURCES<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>The generic file for building the code sample.</span></span><span
|
||
style='font-family:Courier'><o:p></o:p></span></pre><pre><span class=GramE><span
|
||
style='font-family:Courier'>BLASTER.C<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>The Source for blaster.</span></span><span
|
||
style='font-family:Courier'><o:p></o:p></span></pre><pre><span
|
||
style='font-family:Courier'>BLASTER.RC<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD> </span>The <span
|
||
class=GramE>resource file</span> for blaster.<o:p></o:p></span></pre><pre><span
|
||
class=GramE><span style='font-family:Courier'>MAKEFILE<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>The standard DDK <span
|
||
class=SpellE>makefile</span>.</span></span><span style='font-family:Courier'><o:p></o:p></span></pre><pre><span
|
||
style='font-family:Courier'>RESOURCE.H<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD> </span>C Defines for blaster.<o:p></o:p></span></pre><pre><span
|
||
style='font-family:Courier'>RESRC1.H<span style='mso-spacerun:yes'><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> </span>More C Defines.<o:p></o:p></span></pre>
|
||
|
||
<h4><span style='font-family:Verdana'>Programming Tour<o:p></o:p></span></h4>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>The major topics covered
|
||
in this tour are: <o:p></o:p></span></p>
|
||
|
||
<ul type=disc>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo1;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>Enumerating Visible Devices <o:p></o:p></span></li>
|
||
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
|
||
mso-list:l0 level1 lfo1;tab-stops:list .5in'><span style='font-size:10.0pt;
|
||
font-family:Verdana'>Bind()<o:p></o:p></span></li>
|
||
</ul>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>The majority of code in
|
||
this sample is actually devoted to window setup. The heart of the application
|
||
and the source of most interest to the reader are the functions <span
|
||
class=SpellE><span class=GramE><b>SendThread</b></span></span><span
|
||
class=GramE><b>(</b></span><b>)</b> and <span class=SpellE><b>RecvThread</b></span><b>()</b>.
|
||
All of the functionality required for IrDA connections are encapsulated there.
|
||
The application itself is very simple. On startup, <span class=SpellE><span
|
||
class=GramE><b>RecvThread</b></span></span><span class=GramE><b>(</b></span><b>)</b>
|
||
creates a socket to listen for incoming IrDA connections. When the user clicks
|
||
the only button in the interface, <span class=SpellE><span class=GramE><b>SendThread</b></span></span><span
|
||
class=GramE><b>(</b></span><b>)</b> is invoked to enumerate available devices
|
||
and establish a connection with the first visible device. It will proceed to <20>blast<73>
|
||
data through this connection, and then close it.<o:p></o:p></span></p>
|
||
|
||
<h4><span style='font-family:Verdana'>Enumerating Visible Devices<o:p></o:p></span></h4>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Infrared Devices which
|
||
are in range will be enumerated when the user calls <span class=SpellE><span
|
||
class=GramE><b>getsockopt</b></span></span><span class=GramE><b>(</b></span><b>)</b>
|
||
with the parameters of <b>SOL_IRLMP</b> and <b>IRLMP_ENUMDEVICES</b>. Note that
|
||
no special coding is required if the computer has more than one IrDA adapter.
|
||
The protocol will automatically query for all visible devices on all IrDA
|
||
adapters present, and return them in a single call. Note that if a device is
|
||
visible to more than one adapter, it may be presented twice in the list.<o:p></o:p></span></p>
|
||
|
||
<h4><span class=GramE><span style='font-family:Verdana'>Bind()</span></span><span
|
||
style='font-family:Verdana'><o:p></o:p></span></h4>
|
||
|
||
<p><span style='font-size:10.0pt;font-family:Verdana'>Special notice is made
|
||
here that, unlike other Winsock protocol families, no call to <span
|
||
class=GramE><b>bind(</b></span><b>)</b> is required before calling <b>connect()</b>.
|
||
<span class=GramE><b>Bind(</b></span><b>)</b> is normally used to insure the
|
||
socket is correctly bound to a local address, generally for cases of multiple
|
||
local adapters. The IrDA protocol abstracts multiple adapters so that this is
|
||
not necessary. All context information needed to force the connection through
|
||
the correct adapter is contained in the <b>SOCKADDR_IRDA</b> structure provided
|
||
to <span class=GramE><b>connect(</b></span><b>)</b>, in these fields: <span
|
||
class=SpellE><b>irdaDeviceID</b></span> and <span class=SpellE><b>irdaDeviceName</b></span>.
|
||
If you do attempt to <span class=GramE><b>bind(</b></span><b>)</b> on an
|
||
outbound connection, the <b>connect() </b>will return an error.<o:p></o:p></span></p>
|
||
|
||
</div>
|
||
|
||
</body>
|
||
|
||
</html>
|