Removed unneeded html files, which contain lots of code inspection issues
This commit is contained in:
@@ -152,7 +152,6 @@
|
|||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
|
|
||||||
<META NAME="CREATED" CONTENT="0;0">
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland">
|
|
||||||
<META NAME="CHANGED" CONTENT="20110918;14150500">
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
TD P.note { background: #33ffff; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P.underline { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal; text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>ASCOM Telescope Driver (C#)</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
<H4>You have just created the skeleton of an ASCOM
|
|
||||||
Telescope driver in C#. It produces an in-process
|
|
||||||
(assembly) based driver.</H4>
|
|
||||||
<HR>
|
|
||||||
<P CLASS="note">Prior to developing your first driver, please
|
|
||||||
familiarize yourself with the <A HREF="http://ascom-standards.org/developer.html">developer
|
|
||||||
information we've provided</A> at the ASCOM Initiative web site
|
|
||||||
(internet required).
|
|
||||||
</P>
|
|
||||||
<P CLASS="underline">You must do the following in order to complete
|
|
||||||
your implementation:</P>
|
|
||||||
<OL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Switch to the Debug configuration
|
|
||||||
and build the template now. It should build without errors.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Add a test project to the
|
|
||||||
solution. There are templates that can be used to add either a
|
|
||||||
console or a Windows Forms application:</P>
|
|
||||||
</OL>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Select the <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Forms App (CS)</FONT> or <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Console App (CS)</FONT> template.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set a name for the test
|
|
||||||
application and click on OK.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">In the Wizard: set the same device
|
|
||||||
type and model name as for the driver and select Create to build the
|
|
||||||
test project.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set the Test Application to Run at
|
|
||||||
Startup.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Click on Debug and the test
|
|
||||||
application should run. You should be able to select your
|
|
||||||
application in the chooser. Selecting Properties should show the
|
|
||||||
default setup dialog for your driver.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Trying to continue will generate
|
|
||||||
errors because the additional properties have not been implemented.</P>
|
|
||||||
</UL>
|
|
||||||
<OL START=4>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Go through the Driver.cs file and
|
|
||||||
replace the System.NotImplemented exceptions with code to implement
|
|
||||||
your driver's functionality. See the ASCOM ITelescopeV3
|
|
||||||
spec. If a property or method is not implemented in your driver the
|
|
||||||
System.NotImplemented exception must be replaced by an
|
|
||||||
ASCOM.PropertyNotImplemented or ASCOM.MethodNotImplemented
|
|
||||||
exception.</P>
|
|
||||||
<LI><P>Customize the Setup Dialog (SetupDialogForm) to provide the
|
|
||||||
settings and other controls for your driver. You can bind settings
|
|
||||||
directly to controls on your dialog form, there's no need to manage
|
|
||||||
settings manually. A custom Settings class takes care of managing
|
|
||||||
your settings behind the scenes.
|
|
||||||
</P>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes:</H3>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Successfully building the driver,
|
|
||||||
as well as using <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm</FONT>
|
|
||||||
on the assembly, registers it for both COM and ASCOM (the Chooser).
|
|
||||||
See the code in the ASCOM Registration region of Driver.vb.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Doing a Clean for the project, as
|
|
||||||
well doing a <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm
|
|
||||||
-u</FONT> on the assembly, unregisters it for both COM and ASCOM
|
|
||||||
(the Chooser).
|
|
||||||
</P>
|
|
||||||
<LI><P>Place a breakpoint in your driver class constructor, then
|
|
||||||
start debugging (go, F5). Your breakpoint will be hit when the test
|
|
||||||
application creates an instance of your driver (after selecting it
|
|
||||||
in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and make changes and additions to
|
|
||||||
activate various parts of your driver during debugging.</P>
|
|
||||||
<LI><P>The project's Debug configuration is already configured (The
|
|
||||||
test application creates an instance of your driver (after selecting
|
|
||||||
it in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and feel free to make changes and
|
|
||||||
additions to activate various parts of your driver during debugging.
|
|
||||||
</P>
|
|
||||||
</UL>
|
|
||||||
<DIV ALIGN=RIGHT>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN=RIGHT WIDTH=48 HEIGHT=56 BORDER=0></TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>See the <A HREF="http://ascom-standards.org/" TARGET="browser">ASCOM
|
|
||||||
web site</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">ASCOM-Talk
|
|
||||||
Yahoo Group</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P><P>
|
|
||||||
<BR><BR>
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
@@ -156,7 +156,6 @@
|
|||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
|
|
||||||
<META NAME="CREATED" CONTENT="0;0">
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland">
|
|
||||||
<META NAME="CHANGED" CONTENT="20110918;14150500">
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
TD P.note { background: #33ffff; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P.underline { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal; text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>ASCOM Focuser Driver (C#)</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
<H4>You have just created the skeleton of an ASCOM
|
|
||||||
Focuser driver in C#. It produces an in-process
|
|
||||||
(assembly) based driver.</H4>
|
|
||||||
<HR>
|
|
||||||
<P CLASS="note">Prior to developing your first driver, please
|
|
||||||
familiarize yourself with the <A HREF="http://ascom-standards.org/developer.html">developer
|
|
||||||
information we've provided</A> at the ASCOM Initiative web site
|
|
||||||
(internet required).
|
|
||||||
</P>
|
|
||||||
<P CLASS="underline">You must do the following in order to complete
|
|
||||||
your implementation:</P>
|
|
||||||
<OL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Switch to the Debug configuration
|
|
||||||
and build the template now. It should build without errors.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Add a test project to the
|
|
||||||
solution. There are templates that can be used to add either a
|
|
||||||
console or a Windows Forms application:</P>
|
|
||||||
</OL>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Select the <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Forms App (CS)</FONT> or <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Console App (CS)</FONT> template.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set a name for the test
|
|
||||||
application and click on OK.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">In the Wizard: set the same device
|
|
||||||
type and model name as for the driver and select Create to build the
|
|
||||||
test project.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set the Test Application to Run at
|
|
||||||
Startup.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Click on Debug and the test
|
|
||||||
application should run. You should be able to select your
|
|
||||||
application in the chooser. Selecting Properties should show the
|
|
||||||
default setup dialog for your driver.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Trying to continue will generate
|
|
||||||
errors because the additional properties have not been implemented.</P>
|
|
||||||
</UL>
|
|
||||||
<OL START=4>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Go through the Driver.cs file and
|
|
||||||
replace the System.NotImplemented exceptions with code to implement
|
|
||||||
your driver's functionality. See the ASCOM IFocuserV3
|
|
||||||
spec. If a property or method is not implemented in your driver the
|
|
||||||
System.NotImplemented exception must be replaced by an
|
|
||||||
ASCOM.PropertyNotImplemented or ASCOM.MethodNotImplemented
|
|
||||||
exception.</P>
|
|
||||||
<LI><P>Customize the Setup Dialog (SetupDialogForm) to provide the
|
|
||||||
settings and other controls for your driver. You can bind settings
|
|
||||||
directly to controls on your dialog form, there's no need to manage
|
|
||||||
settings manually. A custom Settings class takes care of managing
|
|
||||||
your settings behind the scenes.
|
|
||||||
</P>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes:</H3>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Successfully building the driver,
|
|
||||||
as well as using <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm</FONT>
|
|
||||||
on the assembly, registers it for both COM and ASCOM (the Chooser).
|
|
||||||
See the code in the ASCOM Registration region of Driver.vb.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Doing a Clean for the project, as
|
|
||||||
well doing a <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm
|
|
||||||
-u</FONT> on the assembly, unregisters it for both COM and ASCOM
|
|
||||||
(the Chooser).
|
|
||||||
</P>
|
|
||||||
<LI><P>Place a breakpoint in your driver class constructor, then
|
|
||||||
start debugging (go, F5). Your breakpoint will be hit when the test
|
|
||||||
application creates an instance of your driver (after selecting it
|
|
||||||
in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and make changes and additions to
|
|
||||||
activate various parts of your driver during debugging.</P>
|
|
||||||
<LI><P>The project's Debug configuration is already configured (The
|
|
||||||
test application creates an instance of your driver (after selecting
|
|
||||||
it in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and feel free to make changes and
|
|
||||||
additions to activate various parts of your driver during debugging.
|
|
||||||
</P>
|
|
||||||
</UL>
|
|
||||||
<DIV ALIGN=RIGHT>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN=RIGHT WIDTH=48 HEIGHT=56 BORDER=0></TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>See the <A HREF="http://ascom-standards.org/" TARGET="browser">ASCOM
|
|
||||||
web site</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">ASCOM-Talk
|
|
||||||
Yahoo Group</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P><P>
|
|
||||||
<BR><BR>
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
@@ -168,7 +168,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ASCOM.png" />
|
<Content Include="ASCOM.png" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="BootstrapAscomProfileStore.ps1" />
|
<None Include="BootstrapAscomProfileStore.ps1" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
|
|||||||
@@ -1,666 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"/>
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"/>
|
|
||||||
<META NAME="CREATED" CONTENT="0;0"/>
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland"/>
|
|
||||||
<META NAME="CHANGED" CONTENT="20110422;10442800"/>
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland"/>
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
PRE { margin-left: 0.18cm; margin-right: 0.18cm; margin-top: 0.18cm; margin-bottom: 0.18cm; background: #ccffff }
|
|
||||||
PRE.western { font-weight: normal }
|
|
||||||
PRE.cjk { font-family: "NSimSun", monospace; font-weight: normal }
|
|
||||||
PRE.ctl { font-weight: normal }
|
|
||||||
EM.underline { text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH="100%" BORDER="0" CELLPADDING="4" CELLSPACING="0" STYLE="page-break-before: always">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>
|
|
||||||
ASCOM LocalServer (singleton) Host
|
|
||||||
</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
<H4>
|
|
||||||
You have just created a local server (singleton) host for one or
|
|
||||||
more ASCOM driver classes.
|
|
||||||
</H4>
|
|
||||||
<HR/>
|
|
||||||
<P>
|
|
||||||
This project implements an ASCOM host server for one or more
|
|
||||||
driver classes in a single-instance executable. It can be used to
|
|
||||||
serve multiple instances of a single driver class (hub), provide
|
|
||||||
driver services for multiple devices (e.g., Telescope and Focuser) to
|
|
||||||
multiple applications and allow multiple devices of the same type to
|
|
||||||
be connected. In the latter scenario, the multiple driver classes
|
|
||||||
will often share one or more resources such as the serial connection
|
|
||||||
and a microcontroller in the combined device. From the client's
|
|
||||||
perspective, using the drivers served by the local server is exactly
|
|
||||||
the same as if the drivers are loaded into the client's process space
|
|
||||||
(in-proc servers).
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<STRONG>
|
|
||||||
<SPAN STYLE="background: #ffee88">NOTE:</SPAN>
|
|
||||||
</STRONG>
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
Unless you are prepared to handle all of the timing issues that arise
|
|
||||||
when multiple clients are accessing the properties and methods of
|
|
||||||
your driver(s), stop now. Just because the local server serializes
|
|
||||||
the calls to your driver(s)' properties and methods does not mean
|
|
||||||
that there will be no timing or concurrency issues.<BR/>
|
|
||||||
<BR/>For
|
|
||||||
example, suppose the hub serves instances of a Telescope driver. One
|
|
||||||
client sets the TargetRightAscension property, then another sets
|
|
||||||
TargetRightAscension to a different value, then the first client sets
|
|
||||||
TargetDeclination, then the first client calls SlewToTarget()
|
|
||||||
followed by the second client calling SlewToTarget(). Besides the
|
|
||||||
first client's slew command sending the scope to the wrong (and
|
|
||||||
possibly dangerous) coordinates, there is the problem of the second
|
|
||||||
client trying to slew a slewing scope. Local server drivers are
|
|
||||||
tricky to get right. There is no such thing as "ignorance is
|
|
||||||
bliss" here.
|
|
||||||
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
This implementation has changed
|
|
||||||
from what was defined for Platform 5.5 as follows:
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
The drivers are now installed in
|
|
||||||
the same folder as the local server executable. This makes deployment
|
|
||||||
cleaner because the whole driver can exist in a single folder
|
|
||||||
independently of other drivers.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
The ProgId and friendly name as
|
|
||||||
displayed by the Chooser are defined using attributes. This allows
|
|
||||||
driver dlls to be identified clearly and so avoids confusion with
|
|
||||||
other dlls that may be required such as interop dlls.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
Some changes have been made that
|
|
||||||
will facilitate generating multiple drivers of the same type.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
I've put some additional advice and
|
|
||||||
comments in the notes below <I>in italics.</I>
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
You're probably anxious to get going, but you really should read
|
|
||||||
through the <A HREF="#theory">Theory of Operation</A> and <A HREF="#details">
|
|
||||||
Detailed
|
|
||||||
Use and Deployment
|
|
||||||
</A> below.
|
|
||||||
</P>
|
|
||||||
<P>You must do the following in order to complete your local server:</P>
|
|
||||||
<OL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In the local server's project
|
|
||||||
properties, Application tab, change BOTH the AssemblyName and the
|
|
||||||
default assembly name to ASCOM.xxx (e.g., ASCOM.SuperScope). <I>
|
|
||||||
This
|
|
||||||
may be done by default now.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Add one or more driver skeleton
|
|
||||||
projects using the in-proc templates. You may use either the C# or
|
|
||||||
VB templates. Project name is not important (not used in ProgID)
|
|
||||||
choose something like TelescopeDriver. You will be changing the
|
|
||||||
substituted project name in these projects below. If you ensure that
|
|
||||||
the LocalServer and all the driver projects have the same NameSpace
|
|
||||||
e.g. ASCOM.SuperScope the renaming in section 6a will not be
|
|
||||||
required.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Develop and debug these driver
|
|
||||||
projects as normal in-process assemblies. This will be much simpler
|
|
||||||
because the driver and test code can be debugged in the same
|
|
||||||
process.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Build the LocalServer.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Set a reference to the local
|
|
||||||
server <STRONG>project</STRONG> in each of the driver skeleton
|
|
||||||
projects.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">In each skeleton driver project:</P>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Do a Find In Files for the
|
|
||||||
project name of the skeleton driver (e.g., TelescopeDriver) and
|
|
||||||
change it to match the project name of your local server (e.g.
|
|
||||||
SuperScope). You don't have to do this in the ReadMe.html file.
|
|
||||||
Everywhere else, however, is IMPORTANT. This sets the correct
|
|
||||||
namespace, progID, etc. If you're a bit more brave, you can use
|
|
||||||
Replace in Files. <I>
|
|
||||||
This may not be needed if the correct
|
|
||||||
namespace and naming conventions have been followed when the
|
|
||||||
drivers and local server were generated.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties,
|
|
||||||
Application tab, change the assembly name to
|
|
||||||
ASCOM.<EM CLASS="underline">localserverprojectname</EM>.<EM>drivertype</EM>,
|
|
||||||
(e.g., ASCOM.SuperScope.Telescope).
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties,
|
|
||||||
Application tab, click Assembly Information...
|
|
||||||
</P>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Assure that Make assembly COM
|
|
||||||
visible is <STRONG>on</STRONG> (it should already be on).
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Edit the Product Name to be the
|
|
||||||
"friendly name" of your driver as will be shown in the
|
|
||||||
Chooser. <I>
|
|
||||||
Not used now, use the ServedClassName attribute
|
|
||||||
instead.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties, Build tab,
|
|
||||||
turn <STRONG>off</STRONG> Register for COM Interop.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
Modify the driver class declaration to inherit from
|
|
||||||
ReferenceCountedObjectBase. Examples:<BR/>C#:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
public class Telescope :
|
|
||||||
ReferenceCountedObjectBase,
|
|
||||||
ITelescope
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
VB:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
Public Class Telescope
|
|
||||||
'==================================
|
|
||||||
Inherits ReferenceCountedObjectBase
|
|
||||||
Implements ITelescope
|
|
||||||
'==================================
|
|
||||||
</PRE>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In driver.cs/driver.vb, remove
|
|
||||||
the entire ASCOM Registration region
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In driver.cs/driver.vb, remove
|
|
||||||
the private strings for driver ID and driver description. <I>
|
|
||||||
They
|
|
||||||
may be needed internally, and if so should be set from the
|
|
||||||
associated attributes, ServedClassName for the description and
|
|
||||||
ProgId for the driver Id.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Modify the class attributes by
|
|
||||||
adding the ServedClassName and ProgID attributes. The
|
|
||||||
ServedClassName attribute must be the friendly name shown as the
|
|
||||||
device name in the Chooser and the ProgId the progid of the driver
|
|
||||||
e.g. ASCOM.SuperScope.Telescope. The class header should look like
|
|
||||||
this:
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-bottom: 0cm">C#:</P>
|
|
||||||
<PRE CLASS="western" STYLE="margin-right: 0.16cm">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
[<FONT COLOR="#2b91af">Guid</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#a31515">"0AE8B38D-10A1-4A8D-A5B7-1B050F74B48B"</FONT><FONT COLOR="#000000">)] // set by the template</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ProgId</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#a31515">"ASCOM.SuperScope.Telescope"</FONT><FONT COLOR="#000000">)]</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ServedClassName</FONT><FONT COLOR="#000000"> (</FONT><FONT COLOR="#a31515">"Super Scope Telescope"</FONT><FONT COLOR="#000000">)]</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ClassInterface</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#2b91af">ClassInterfaceType</FONT><FONT COLOR="#000000">.None)]</FONT>
|
|
||||||
<FONT COLOR="#0000ff">public </FONT><FONT COLOR="#0000ff">class </FONT><FONT COLOR="#2b91af">Telescope </FONT><FONT COLOR="#000000">: </FONT><FONT COLOR="#2b91af">ReferenceCountedObjectBase</FONT><FONT COLOR="#000000"> , </FONT><FONT COLOR="#2b91af">ITelescope</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<BR/>
|
|
||||||
</P>
|
|
||||||
<OL>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<P>VB:</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
<Guid(“<FONT COLOR="#a31515">0AE8B38D-10A1-4A8D-A5B7-1B050F74B48B</FONT>”)>
|
|
||||||
<ProgId(“ASCOM.SuperScope.Telescope”)>
|
|
||||||
<ServedClassName(“Super Scope Telescope”)>
|
|
||||||
Public Class Telescope
|
|
||||||
'==================================
|
|
||||||
Inherits ReferenceCountedObjectBase
|
|
||||||
Implements ITelescope
|
|
||||||
'==================================
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</OL>
|
|
||||||
</OL>
|
|
||||||
<P STYLE="margin-left: 2.5cm">
|
|
||||||
Add the following line to the driver
|
|
||||||
constructor, this sets the driver ID using the ProgId Attribute:
|
|
||||||
</P>
|
|
||||||
<OL>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<P>C#</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
s_csDriverID = <FONT COLOR="#2b91af">Marshal</FONT><FONT COLOR="#000000">.GenerateProgIdForType(</FONT><FONT COLOR="#0000ff">this</FONT><FONT COLOR="#000000">.GetType());</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
<P>VB:</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
s_csDriverID = <FONT COLOR="#2b91af">Marshal</FONT><FONT COLOR="#000000">.GenerateProgIdForType(</FONT><FONT COLOR="#0000ff">Me</FONT><FONT COLOR="#000000">.GetType())</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</OL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Unless you're writing a
|
|
||||||
single-driver hub, you will have two or more driver types (e.g.
|
|
||||||
Telescope and Focuser) and thus two or more driver assembly projects
|
|
||||||
added. Presumably, these drivers need to share some resources (e.g.
|
|
||||||
a single COM port via Helper.Serial). <U>
|
|
||||||
Put shared resources into
|
|
||||||
the SharedResources class provided
|
|
||||||
</U>. There are some examples that
|
|
||||||
should give a clue, modify and delete these as required.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
A shared serial port is already
|
|
||||||
provided (see SharedResources.cs) as <FONT FACE="Lucida Console, Courier New, Courier, monospace">SharedResources.SharedSerial</FONT>
|
|
||||||
and it is an ASCOM Helper Serial object. You may wish to define
|
|
||||||
additional shared resources in static member variables with public
|
|
||||||
static accessor properties as is already done for SharedSerial.
|
|
||||||
Unfortunately, if you are a Visual Basic programmer, you will have
|
|
||||||
to make these additions in C#.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
If you are writing a hub and don't
|
|
||||||
need the serial port, in SharedResources.cs you can remove the
|
|
||||||
public static SharedSerial property, the m_SharedSerial member in
|
|
||||||
the private data region, and the line in main that initializes it.
|
|
||||||
If you don't need any other shared resources for your hub, then you
|
|
||||||
can remove the SharedResources.cs file completely.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
If you modified the LocalServer,
|
|
||||||
build it again now. This will refresh the stuff that's visible to
|
|
||||||
the drivers.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Build the driver skeletons to
|
|
||||||
verify that you got all of the namespace and other variable changes.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The local server dynamically loads the driver assemblies from
|
|
||||||
the same folder as the local server executable. <BR/>
|
|
||||||
<BR/>During
|
|
||||||
development, you'll need to add a post-build task to each of your
|
|
||||||
driver assembly projects which puts a copy of the driver assembly
|
|
||||||
into the local server executable folder. Here is an example:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western"> copy "$(TargetPath)" "$(SolutionDir)\SuperScope\$(OutDir)\$(TargetFileName)"</PRE>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
This assumes that the server project is called “SuperScope”,
|
|
||||||
and handles using the debug or release build.<BR/>
|
|
||||||
Note the quotes for
|
|
||||||
possible path elements with spaces in them. <I>
|
|
||||||
An alternative is to
|
|
||||||
set the build path to the required destination instead of the
|
|
||||||
default path.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<I>
|
|
||||||
Make sure the drivers are
|
|
||||||
registered through the local server by running it with the /register
|
|
||||||
parameter, see below for details.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<SPAN STYLE="background: #ffff00">IMPORTANT:</SPAN>
|
|
||||||
With a local server based driver (or hub) it is possible for
|
|
||||||
multiple clients to control the device(s). It is up to you to
|
|
||||||
safeguard against abuse. <I>
|
|
||||||
The sort of thing that's needed is to
|
|
||||||
have a counter of the number of connections to a device, the
|
|
||||||
connection is only fully broken when the number of connections is
|
|
||||||
zero. You may also need code to prevent several drivers from talking
|
|
||||||
to the hardware at the same time, the lock pattern is useful for
|
|
||||||
that.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
You may want to add controls and/or status information to the
|
|
||||||
main form frmMain of the local server. Please resist the temptation
|
|
||||||
to turn the local server's main form into a graphical device control
|
|
||||||
panel. Instead, make a separate application that uses the served
|
|
||||||
driver(s). <U>A driver is not a program!</U>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes</H3>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
The local server handles all of
|
|
||||||
the registration and unregistration for each of its served driver
|
|
||||||
classes, including the ASCOM Chooser info and the DCOM/AppID info
|
|
||||||
needed for activation from TheSky. By running the server from a
|
|
||||||
command line and giving /register or /unregister as the command line
|
|
||||||
option, it will register or unregister all served classes
|
|
||||||
(respectively). <SPAN STYLE="background: #ffff00">
|
|
||||||
Never use REGASM
|
|
||||||
on the local server executable!
|
|
||||||
</SPAN> <I>
|
|
||||||
This can be done in the
|
|
||||||
Visual Studio IDE by setting the server project to run as startup
|
|
||||||
and setting the command line argument to /register in Debug –
|
|
||||||
Start Options.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
When you make the installer for
|
|
||||||
your local server based driver/hub, do not let it register the
|
|
||||||
executable for COM. Instead, have it activate the installed local
|
|
||||||
server with the /register option.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The ASCOM registration uses the ServedClassName attribute as
|
|
||||||
the friendly name that will show in the chooser and the ProgId
|
|
||||||
attribute as the driver Id.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The best deployment way is to install all the files in a
|
|
||||||
folder that's a sub folder of the main driver, so the SuperScope
|
|
||||||
driver files will be in the folder ...\ASCOM\Telescope\SuperScope.
|
|
||||||
This can be done in the Inno script by changing the DefaultDirName
|
|
||||||
like this:<BR/>
|
|
||||||
DefaultDirName="{cf}\ASCOM\Telescope\SuperScope"<BR/>then
|
|
||||||
the files can all be installed with DestDir: {app};
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
<H3>
|
|
||||||
<A NAME="theory"></A>Theory of Operation
|
|
||||||
</H3>
|
|
||||||
<P>
|
|
||||||
The local server is an executable which can provide multiple
|
|
||||||
instances of multiple drivers to multiple clients. This capability is
|
|
||||||
needed for two applications:
|
|
||||||
</P>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
A hub, which allows multiple
|
|
||||||
clients to share a single device
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
A device which provides multiple services, such as a
|
|
||||||
telescope which has a focuser built-in where both the telescope and
|
|
||||||
focuser are controlled by the same serial connection and different
|
|
||||||
client programs need to control to the focuser and telescope.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
<P>
|
|
||||||
By simply dropping suitably developed driver assemblies into the
|
|
||||||
same folder as the local server executable, the local server will
|
|
||||||
find them and register them for COM and ASCOM and serve any number of
|
|
||||||
instances of the drivers' interfaces to any number of client
|
|
||||||
programs. It does this by locating and loading the driver assemblies,
|
|
||||||
analysing them to detect their classes and interfaces, and
|
|
||||||
implementing a class factory that can create instances of them for
|
|
||||||
clients.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
A driver is an assembly which contains a class that <EM>implements</EM>
|
|
||||||
one of the ASCOM standard driver interfaces and <EM>inherits</EM> the
|
|
||||||
ReferenceCountedObjectBase class of the local server. Apart from
|
|
||||||
that, driver assemblies are identical to those that are used
|
|
||||||
in-process (DLL-type). The instructions above detail the steps needed
|
|
||||||
to convert an in-process driver into one that can be served by the
|
|
||||||
local server.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
The name of the local server is important, so we provide it as a
|
|
||||||
<EM>template</EM> from which you can create a local server for your
|
|
||||||
produce. To make this clear, let's assume that your company AlphaTech
|
|
||||||
produces a telescope system which contains a microcontroller that is
|
|
||||||
able to control not only the telescope mount, but also a focuser and
|
|
||||||
a camera rotator. The mount, focuser, and rotator are all controlled
|
|
||||||
via commands sent through a common serial line connecting the
|
|
||||||
computer to the microcontroller, so you need a local server. In
|
|
||||||
ASCOM, then, you probably want your system to appear as
|
|
||||||
AlphaTech.Telescope, AlphaTech.Focuser, and AlphaTech.Rotator. Then
|
|
||||||
you would name the local server AlphaTech. Be sure to give this due
|
|
||||||
consideration before creating the template, the project name is the
|
|
||||||
name of your local server. <I>
|
|
||||||
Is this still correct? I get the
|
|
||||||
impression that ASCOM.AlphaTech.Server would be OK.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
The fact that driver classes inherit from the local server's
|
|
||||||
ReferenceCountedObjectBase class allows the local server to maintain
|
|
||||||
a reference count on the driver class. If a client creates an
|
|
||||||
instance of a served driver, the local server automatically starts up
|
|
||||||
and provides an instance of the class to the client. Once started the
|
|
||||||
local server can provide additional instances of any of its served
|
|
||||||
driver classes. If the reference count of all served classes drops to
|
|
||||||
zero as a result of clients releasing their instances, the local
|
|
||||||
server will automatically exit.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
Registration services provided include not only the basic COM
|
|
||||||
class registration, but also DCOM/AppID info needed to use the served
|
|
||||||
classes from outbound connections from Software Bisque's TheSky. It
|
|
||||||
also registers the served classes for the ASCOM Chooser. The
|
|
||||||
"friendly" name of each served driver that appears in the
|
|
||||||
chooser comes from the driver's ServedClassName attribute. This also
|
|
||||||
used to identify a driver so that non driver dlls, such as Interop
|
|
||||||
dlls can be ignored. The COM ProgID for each served driver is
|
|
||||||
specified in the ProgId attribute - ASCOM.<EM>localservername</EM>.<EM>drivertype</EM>,
|
|
||||||
for example, ASCOM.AlphaTech.Telescope, where AlphaTech is the local
|
|
||||||
server name and Telescope is the type of the driver. Unregistering
|
|
||||||
removes all of this information from the system. Specifying the
|
|
||||||
ProgId as an attribute allows multiple driver assemblies to be
|
|
||||||
generated using the same source and namespace. This is used to
|
|
||||||
provide multiple instances of the same driver, each with a different
|
|
||||||
ProgId and so able to be registered separately.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
Driver DLLs are identified for registering/unregistering because
|
|
||||||
they contain a type with the ServedClassName attribute. Only these
|
|
||||||
will be registered for Com and ASCOM. This has changed; in Platform
|
|
||||||
5 there was no attribute and the local server attempted to register
|
|
||||||
all dlls. The new behaviour allows support dlls such as interop dlls
|
|
||||||
to be included without them being registered incorrectly. There was
|
|
||||||
also an interim version where the ServedClassName attribute was on
|
|
||||||
the assembly, not the class. <I>
|
|
||||||
All these previous versions, and the
|
|
||||||
new drivers will operate together with Platform 6, the changes are
|
|
||||||
local to the individual drivers.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
<H3>
|
|
||||||
<A NAME="details"></A>Detailed Use and Deployment
|
|
||||||
</H3>
|
|
||||||
<P>
|
|
||||||
Once you have built your local server and the served driver class
|
|
||||||
assemblies, here's how to use it. To register the served classes,
|
|
||||||
activate the local server from a shell command line with the option
|
|
||||||
/register (or /regserver, for VB6 compatibility):
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
C:\xxx> <EM>localserver</EM>.exe /register
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
To unregister the local server and its drivers, activate the local
|
|
||||||
server from a shell command line with the option /unregister (or
|
|
||||||
/unregserver for VB6 compatibility):
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
C:\xxx> <EM>localserver</EM>.exe /unregister
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
When the operating system starts the local server in response to a
|
|
||||||
client creating one of it's served driver classes, the command option
|
|
||||||
/embedding is included. The local server's code detects this and sets
|
|
||||||
a variable that you can use.
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
When deploying a hub or set of drivers
|
|
||||||
with the local server, you'll have to arrange for the local server
|
|
||||||
and the driver assemblies to be placed together in a folder in the
|
|
||||||
ASCOM driver folder. Any support files, such as Interop DLLs can be
|
|
||||||
put in the same fiolder. That's all you need to do, the local server
|
|
||||||
will find them in the same folder as it is located in.
|
|
||||||
</P>
|
|
||||||
<DIV ALIGN="RIGHT">
|
|
||||||
<TABLE WIDTH="100"% BORDER="0" CELLPADDING="4" CELLSPACING="0">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH="100"% BORDER="0" CELLPADDING="4" CELLSPACING="0">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN="RIGHT" WIDTH="48" HEIGHT="56" BORDER="0"/>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>
|
|
||||||
The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
See the <A HREF="http://ascom-standards.org/" TARGET="browser">
|
|
||||||
ASCOM
|
|
||||||
web site
|
|
||||||
</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">
|
|
||||||
ASCOM-Talk
|
|
||||||
Yahoo Group
|
|
||||||
</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
Reference in New Issue
Block a user