Starting things off with a rough draft, completely untested

This commit is contained in:
2019-04-26 21:17:22 +01:00
commit 6f3cf53bc9
37 changed files with 27039 additions and 0 deletions
Binary file not shown.
+25
View File
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.136
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeadeAutostar497", "MeadeAutostar497\MeadeAutostar497.csproj", "{64308775-BD4A-469C-BCAB-3ED830B811AF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{64308775-BD4A-469C-BCAB-3ED830B811AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64308775-BD4A-469C-BCAB-3ED830B811AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64308775-BD4A-469C-BCAB-3ED830B811AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64308775-BD4A-469C-BCAB-3ED830B811AF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FD610065-5DB2-4D32-8760-4E0552901C28}
EndGlobalSection
EndGlobal
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.
+242
View File
@@ -0,0 +1,242 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using ASCOM.DeviceInterface;
using System.Collections;
using System.Threading;
namespace ASCOM.MeadeAutostar497
{
#region Rate class
//
// The Rate class implements IRate, and is used to hold values
// for AxisRates. You do not need to change this class.
//
// The Guid attribute sets the CLSID for ASCOM.MeadeAutostar497.Rate
// The ClassInterface/None addribute prevents an empty interface called
// _Rate from being created and used as the [default] interface
//
[Guid("20c14d35-a61b-4c6a-a6ab-cb9f27997c45")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Rate : ASCOM.DeviceInterface.IRate
{
private double maximum = 0;
private double minimum = 0;
//
// Default constructor - Internal prevents public creation
// of instances. These are values for AxisRates.
//
internal Rate(double minimum, double maximum)
{
this.maximum = maximum;
this.minimum = minimum;
}
#region Implementation of IRate
public void Dispose()
{
// TODO Add any required object cleanup here
}
public double Maximum
{
get { return this.maximum; }
set { this.maximum = value; }
}
public double Minimum
{
get { return this.minimum; }
set { this.minimum = value; }
}
#endregion
}
#endregion
#region AxisRates
//
// AxisRates is a strongly-typed collection that must be enumerable by
// both COM and .NET. The IAxisRates and IEnumerable interfaces provide
// this polymorphism.
//
// The Guid attribute sets the CLSID for ASCOM.MeadeAutostar497.AxisRates
// The ClassInterface/None addribute prevents an empty interface called
// _AxisRates from being created and used as the [default] interface
//
[Guid("ac703603-bcfc-4d98-9de3-c2b9a165756f")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class AxisRates : IAxisRates, IEnumerable
{
private TelescopeAxes axis;
private readonly Rate[] rates;
//
// Constructor - Internal prevents public creation
// of instances. Returned by Telescope.AxisRates.
//
internal AxisRates(TelescopeAxes axis)
{
this.axis = axis;
//
// This collection must hold zero or more Rate objects describing the
// rates of motion ranges for the Telescope.MoveAxis() method
// that are supported by your driver. It is OK to leave this
// array empty, indicating that MoveAxis() is not supported.
//
// Note that we are constructing a rate array for the axis passed
// to the constructor. Thus we switch() below, and each case should
// initialize the array for the rate for the selected axis.
//
switch (axis)
{
case TelescopeAxes.axisPrimary:
// TODO Initialize this array with any Primary axis rates that your driver may provide
// Example: m_Rates = new Rate[] { new Rate(10.5, 30.2), new Rate(54.0, 43.6) }
this.rates = new Rate[0];
break;
case TelescopeAxes.axisSecondary:
// TODO Initialize this array with any Secondary axis rates that your driver may provide
this.rates = new Rate[0];
break;
case TelescopeAxes.axisTertiary:
// TODO Initialize this array with any Tertiary axis rates that your driver may provide
this.rates = new Rate[0];
break;
}
}
#region IAxisRates Members
public int Count
{
get { return this.rates.Length; }
}
public void Dispose()
{
// TODO Add any required object cleanup here
}
public IEnumerator GetEnumerator()
{
return rates.GetEnumerator();
}
public IRate this[int index]
{
get { return this.rates[index - 1]; } // 1-based
}
#endregion
}
#endregion
#region TrackingRates
//
// TrackingRates is a strongly-typed collection that must be enumerable by
// both COM and .NET. The ITrackingRates and IEnumerable interfaces provide
// this polymorphism.
//
// The Guid attribute sets the CLSID for ASCOM.MeadeAutostar497.TrackingRates
// The ClassInterface/None addribute prevents an empty interface called
// _TrackingRates from being created and used as the [default] interface
//
// This class is implemented in this way so that applications based on .NET 3.5
// will work with this .NET 4.0 object. Changes to this have proved to be challenging
// and it is strongly suggested that it isn't changed.
//
[Guid("cb732953-8e5a-4bf0-b3b7-451edb74b5d5")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class TrackingRates : ITrackingRates, IEnumerable, IEnumerator
{
private readonly DriveRates[] trackingRates;
// this is used to make the index thread safe
private readonly ThreadLocal<int> pos = new ThreadLocal<int>(() => { return -1; });
private static readonly object lockObj = new object();
//
// Default constructor - Internal prevents public creation
// of instances. Returned by Telescope.AxisRates.
//
internal TrackingRates()
{
//
// This array must hold ONE or more DriveRates values, indicating
// the tracking rates supported by your telescope. The one value
// (tracking rate) that MUST be supported is driveSidereal!
//
this.trackingRates = new[] { DriveRates.driveSidereal };
// TODO Initialize this array with any additional tracking rates that your driver may provide
}
#region ITrackingRates Members
public int Count
{
get { return this.trackingRates.Length; }
}
public IEnumerator GetEnumerator()
{
pos.Value = -1;
return this as IEnumerator;
}
public void Dispose()
{
// TODO Add any required object cleanup here
}
public DriveRates this[int index]
{
get { return this.trackingRates[index - 1]; } // 1-based
}
#endregion
#region IEnumerable members
public object Current
{
get
{
lock (lockObj)
{
if (pos.Value < 0 || pos.Value >= trackingRates.Length)
{
throw new System.InvalidOperationException();
}
return trackingRates[pos.Value];
}
}
}
public bool MoveNext()
{
lock (lockObj)
{
if (++pos.Value >= trackingRates.Length)
{
return false;
}
return true;
}
}
public void Reset()
{
pos.Value = -1;
}
#endregion
}
#endregion
}
@@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using ASCOM.Utilities;
using ASCOM.MeadeAutostar497;
namespace ASCOM.MeadeAutostar497
{
[ComVisible(false)] // Form not registered for COM!
public partial class SetupDialogForm : Form
{
public SetupDialogForm()
{
InitializeComponent();
// Initialise current values of user settings from the ASCOM Profile
InitUI();
}
private void cmdOK_Click(object sender, EventArgs e) // OK button event handler
{
// Place any validation constraint checks here
// Update the state variables with results from the dialogue
Telescope.comPort = (string)comboBoxComPort.SelectedItem;
Telescope.tl.Enabled = chkTrace.Checked;
}
private void cmdCancel_Click(object sender, EventArgs e) // Cancel button event handler
{
Close();
}
private void BrowseToAscom(object sender, EventArgs e) // Click on ASCOM logo event handler
{
try
{
System.Diagnostics.Process.Start("http://ascom-standards.org/");
}
catch (System.ComponentModel.Win32Exception noBrowser)
{
if (noBrowser.ErrorCode == -2147467259)
MessageBox.Show(noBrowser.Message);
}
catch (System.Exception other)
{
MessageBox.Show(other.Message);
}
}
private void InitUI()
{
chkTrace.Checked = Telescope.tl.Enabled;
// set the list of com ports to those that are currently available
comboBoxComPort.Items.Clear();
comboBoxComPort.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); // use System.IO because it's static
// select the current port if possible
if (comboBoxComPort.Items.Contains(Telescope.comPort))
{
comboBoxComPort.SelectedItem = Telescope.comPort;
}
}
}
}
+149
View File
@@ -0,0 +1,149 @@
namespace ASCOM.MeadeAutostar497
{
partial class SetupDialogForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.cmdOK = new System.Windows.Forms.Button();
this.cmdCancel = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.picASCOM = new System.Windows.Forms.PictureBox();
this.label2 = new System.Windows.Forms.Label();
this.chkTrace = new System.Windows.Forms.CheckBox();
this.comboBoxComPort = new System.Windows.Forms.ComboBox();
((System.ComponentModel.ISupportInitialize)(this.picASCOM)).BeginInit();
this.SuspendLayout();
//
// cmdOK
//
this.cmdOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cmdOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.cmdOK.Location = new System.Drawing.Point(281, 112);
this.cmdOK.Name = "cmdOK";
this.cmdOK.Size = new System.Drawing.Size(59, 24);
this.cmdOK.TabIndex = 0;
this.cmdOK.Text = "OK";
this.cmdOK.UseVisualStyleBackColor = true;
this.cmdOK.Click += new System.EventHandler(this.cmdOK_Click);
//
// cmdCancel
//
this.cmdCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.cmdCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cmdCancel.Location = new System.Drawing.Point(281, 142);
this.cmdCancel.Name = "cmdCancel";
this.cmdCancel.Size = new System.Drawing.Size(59, 25);
this.cmdCancel.TabIndex = 1;
this.cmdCancel.Text = "Cancel";
this.cmdCancel.UseVisualStyleBackColor = true;
this.cmdCancel.Click += new System.EventHandler(this.cmdCancel_Click);
//
// label1
//
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(123, 31);
this.label1.TabIndex = 2;
this.label1.Text = "Construct your driver\'s setup dialog here.";
//
// picASCOM
//
this.picASCOM.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.picASCOM.Cursor = System.Windows.Forms.Cursors.Hand;
this.picASCOM.Image = global::ASCOM.MeadeAutostar497.Properties.Resources.ASCOM;
this.picASCOM.Location = new System.Drawing.Point(292, 9);
this.picASCOM.Name = "picASCOM";
this.picASCOM.Size = new System.Drawing.Size(48, 56);
this.picASCOM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.picASCOM.TabIndex = 3;
this.picASCOM.TabStop = false;
this.picASCOM.Click += new System.EventHandler(this.BrowseToAscom);
this.picASCOM.DoubleClick += new System.EventHandler(this.BrowseToAscom);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(13, 90);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(58, 13);
this.label2.TabIndex = 5;
this.label2.Text = "Comm Port";
//
// chkTrace
//
this.chkTrace.AutoSize = true;
this.chkTrace.Location = new System.Drawing.Point(77, 118);
this.chkTrace.Name = "chkTrace";
this.chkTrace.Size = new System.Drawing.Size(69, 17);
this.chkTrace.TabIndex = 6;
this.chkTrace.Text = "Trace on";
this.chkTrace.UseVisualStyleBackColor = true;
//
// comboBoxComPort
//
this.comboBoxComPort.FormattingEnabled = true;
this.comboBoxComPort.Location = new System.Drawing.Point(77, 87);
this.comboBoxComPort.Name = "comboBoxComPort";
this.comboBoxComPort.Size = new System.Drawing.Size(90, 21);
this.comboBoxComPort.TabIndex = 7;
//
// SetupDialogForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(350, 175);
this.Controls.Add(this.comboBoxComPort);
this.Controls.Add(this.chkTrace);
this.Controls.Add(this.label2);
this.Controls.Add(this.picASCOM);
this.Controls.Add(this.label1);
this.Controls.Add(this.cmdCancel);
this.Controls.Add(this.cmdOK);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "SetupDialogForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "MeadeAutostar497 Setup";
((System.ComponentModel.ISupportInitialize)(this.picASCOM)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button cmdOK;
private System.Windows.Forms.Button cmdCancel;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox picASCOM;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox chkTrace;
private System.Windows.Forms.ComboBox comboBoxComPort;
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
using ASCOM.Utilities.Interfaces;
namespace ASCOM.MeadeAutostar497.Controller
{
public interface ITelescopeController
{
ISerial SerialPort { get; set; }
string Port { get; set; }
bool Connected { get; set; }
string CommandString(string command, bool raw);
}
}
@@ -0,0 +1,86 @@
using System;
using ASCOM.Utilities;
using ASCOM.Utilities.Interfaces;
namespace ASCOM.MeadeAutostar497.Controller
{
public sealed class TelescopeController : ITelescopeController
{
private static readonly Lazy<TelescopeController> lazy = new Lazy<TelescopeController>();
public static TelescopeController Instance => lazy.Value;
private ISerial _serialPort;
public ISerial SerialPort
{
get => _serialPort ?? (_serialPort = new Serial());
set
{
if (_serialPort == value)
return;
if (_serialPort != null)
{
if (_serialPort.Connected)
throw new InvalidOperationException("Please disconnect before changing the port.");
}
_serialPort = value;
}
}
private string _port = "COM1";
public string Port
{
get => _port;
set
{
if (_port == value) return;
if (Connected)
throw new InvalidOperationException("Please disconnect from the scope before changing port.");
_port = value;
}
}
public bool Connected
{
get => SerialPort.Connected;
set
{
if (value == Connected)
return;
if (value)
{
//Connecting
SerialPort.DTREnable = false;
SerialPort.RTSEnable = false;
SerialPort.Speed = SerialSpeed.ps9600;
SerialPort.DataBits = 8;
SerialPort.StopBits = SerialStopBits.One;
SerialPort.Parity = SerialParity.None;
SerialPort.PortName = Port;
SerialPort.Connected = true;
//todo perform test to ensure that connection has been made correctly.
}
else
{
//Disconnecting
SerialPort.Connected = false;
}
}
}
public string CommandString(string command, bool raw)
{
// it's a good idea to put all the low level communication with the device here,
// then all communication calls this function
// you need something to ensure that only one command is in progress at a time
throw new ASCOM.MethodNotImplementedException("CommandString");
}
}
}
+156
View File
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{64308775-BD4A-469C-BCAB-3ED830B811AF}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ASCOM.MeadeAutostar497</RootNamespace>
<AssemblyName>ASCOM.MeadeAutostar497.Telescope</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<ApplicationIcon>ASCOM.ico</ApplicationIcon>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>ASCOMDriverTemplate.snk</AssemblyOriginatorKeyFile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RegisterForComInterop>true</RegisterForComInterop>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<RegisterForComInterop>false</RegisterForComInterop>
</PropertyGroup>
<ItemGroup>
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.Attributes, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.Controls, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.DeviceInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.Exceptions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.SettingsProvider, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.Utilities, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="ASCOM.Utilities.Video, Version=6.1.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AscomClasses\Telescope.cs" />
<Compile Include="Controller\ITelescopeController.cs" />
<Compile Include="Controller\TelescopeController.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
<Compile Include="AscomClasses\Rates.cs" />
<Compile Include="AscomClasses\SetupDialogForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AscomClasses\SetupDialogForm.designer.cs">
<DependentUpon>SetupDialogForm.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="AscomClasses\SetupDialogForm.resx">
<DependentUpon>SetupDialogForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="ASCOM.png" />
<None Include="ASCOMDriverTemplate.snk" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Content Include="ASCOM.ico" />
<Content Include="ReadMe.htm" />
<None Include="Resources\ASCOM.bmp" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -0,0 +1,39 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
// TODO - Add your authorship information here
[assembly: AssemblyTitle("ASCOM.MeadeAutostar497.Telescope")]
[assembly: AssemblyDescription("ASCOM Telescope driver for MeadeAutostar497")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("The ASCOM Initiative")]
[assembly: AssemblyProduct("ASCOM Telescope driver for MeadeAutostar497")]
[assembly: AssemblyCopyright("Copyright © 2019 The ASCOM Initiative")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("55d0f255-cb49-4e6b-bc32-4f8fb874734d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
//
// TODO - Set your driver's version here
[assembly: AssemblyVersion("6.4.0.0")]
[assembly: AssemblyFileVersion("6.4.0.0")]
+96
View File
@@ -0,0 +1,96 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18052
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASCOM.MeadeAutostar497.Properties
{
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if (object.ReferenceEquals(resourceMan, null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ASCOM.MeadeAutostar497.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap ASCOM
{
get
{
object obj = ResourceManager.GetObject("ASCOM", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon DefaultIcon
{
get
{
object obj = ResourceManager.GetObject("DefaultIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}
+127
View File
@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ASCOM" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\ASCOM.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="DefaultIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\ASCOM.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
+30
View File
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18052
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASCOM.MeadeAutostar497.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
@@ -0,0 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings />
</SettingsFile>
+147
View File
@@ -0,0 +1,147 @@
<!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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,93 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ASCOM.Attributes</name>
</assembly>
<members>
<member name="T:ASCOM.DeviceIdAttribute">
<summary>
An attribute for declaratively associating an assembly, class or property with an
ASCOM device ID (and optionally, a display name).
</summary>
<remarks>
This attribute is intended for use in two main situations:
<list type = "number">
<item>
<term>
Settings management and integration with Visual Studio designers
</term>
<description>
When this attribute is placed on the driver's <c>Properties.Settings</c> class, it propagates
down to each of the settings properties. When the setting is passed to the
<c>ASCOM.SettingsProvider</c> class at runtime, the settings provider looks for this attribute
to determine which settings hive to save the value in when it is passed to
<see cref = "T:ASCOM.Utilities.Profile" />.
</description>
</item>
<item>
<term>
Deployment
</term>
<description>
The values in this attribute could be used by an installer custom action to perform
ASCOM registration during setup. Historically this has been handled programmatically,
but there are trends towards a more declarative approach to deployment (for example
WiX, Windows Installer Xml). It is expected that such an installer may need to obtain
registration data by reflecting on the assemblies being installed. Placing this attribute
at the assembly level will assist in this situation.
</description>
</item>
</list>
</remarks>
</member>
<member name="M:ASCOM.DeviceIdAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.DeviceIdAttribute" /> class.
</summary>
<param name = "deviceId">The ASCOM device ID (aka COM ProgID) to be associated with the class.</param>
<remarks>
<para>
Recommended usage is:
<example>
[DeviceId("ASCOM.SuperDuper.Telescope", DeviceName="SuperDuper Deluxe")]
</example>
</para>
<para>
In the event that the DeviceName optional parameter is not set, it will return the DeviceId.
</para>
</remarks>
</member>
<member name="P:ASCOM.DeviceIdAttribute.DeviceId">
<summary>
Gets the ASCOM DeviceID, also known as the COM ProgID.
</summary>
</member>
<member name="P:ASCOM.DeviceIdAttribute.DeviceName">
<summary>
Gets or sets the display name of the device. This would be the short display name, as displayed in the ASCOM Chooser.
</summary>
<value>The name of the device.</value>
</member>
<member name="T:ASCOM.ServedClassNameAttribute">
<summary>
An attribute that confers a 'friendly name' on a class and marks it as loadable by LocalServer.
The 'friendly name' is used by the ASCOM LocalServer to register the class with the ASCOM Chooser.
The 'friendly name' is what gets displayed to the user in the driver selection combo box.
This attribute is also used by the LocalServer to filter the assemblies that it will
attempt to load at runtime. LocalServer will only load classes bearing this attribute.
</summary>
</member>
<member name="M:ASCOM.ServedClassNameAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.ServedClassNameAttribute" /> class.
</summary>
<param name = "servedClassName">The 'friendly name' of the served class.</param>
</member>
<member name="P:ASCOM.ServedClassNameAttribute.DisplayName">
<summary>
Gets or sets the 'friendly name' of the served class, as registered with the ASCOM Chooser.
</summary>
<value>The 'friendly name' of the served class.</value>
</member>
</members>
</doc>
@@ -0,0 +1,513 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ASCOM.Controls</name>
</assembly>
<members>
<member name="T:ASCOM.Controls.TrafficLight">
<summary>
The TrafficLight enumeration may be used in any situation where a Normal/Warning/Error status indication is needed.
</summary>
</member>
<member name="F:ASCOM.Controls.TrafficLight.Green">
<summary>
Green traffic light represents a good or normal status.
</summary>
</member>
<member name="F:ASCOM.Controls.TrafficLight.Yellow">
<summary>
Yellow traffic light represents a warning condition, which does not necessarily prevent continued
operation but which merits further investigation.
</summary>
</member>
<member name="F:ASCOM.Controls.TrafficLight.Red">
<summary>
Red traffic light represents an error condition or a situation that prevents further progress.
</summary>
</member>
<member name="T:ASCOM.Controls.Annunciator">
<summary>
<para>
Wikipedia: An annunciator panel is a group of lights used as a central indicator of status of equipment or systems in an aircraft,
industrial process, building or other installation. Usually the annunciator panel includes a main warning lamp or audible signal
to draw the attention of operating personnel to the annunciator panel for abnormal events or conditions.
</para>
<para>
The Anunciator control provides a simple, standard method of displaying a status notification to the user within a Windows Forms application.
Anunciators are best used with the companion <see cref = "T:ASCOM.Controls.AnnunciatorPanel" /> control, although they can be placed anywhere on a Windows Form.
The control can be used to provide simple On/Off status displays or can be configured to blink with various levels of urgency so that it can
represent alarm conditions.
<example>
An anunciator may represent the slewing state of a telescope. It would be represented by the word "SLEW". When the telescope is stationary,
the anunciator remains inactive. When the telescope begins to slew, the anunciator is set to <see cref = "F:ASCOM.Controls.CadencePattern.BlinkFast" />
to alert the user that the equipment is in motion.
</example>
</para>
<para>
Each anunciator has active and inactive states. When inactive, the control displays in a subdued colour that is readable but does not draw
attention. When active, the control will display in a stronger, more visible colour and will either have a steady state or will blink in one
of a number of predefined cadence patterns. The cadence patterns are fixed and not user-definable, so that a standard 'look and feel'
is promoted accross different applications.
</para>
<para>
Whilst the user is at liberty to choose different colours for both <see cref = "P:ASCOM.Controls.Annunciator.ActiveColor" /> and <see cref = "P:ASCOM.Controls.Annunciator.InactiveColor" />,
The default colours have been chosen to look similar to earlier applications that use similar displays and the defaults are highly
recommended for most circumstances. The control's background colour is inherited from the parent control (which should normally be
an <see cref = "T:ASCOM.Controls.AnnunciatorPanel" />) and is not directly settable by the user.
</para>
</summary>
</member>
<member name="F:ASCOM.Controls.Annunciator.lastState">
<summary>
A flag that records the anunciator's last known state.
</summary>
</member>
<member name="F:ASCOM.Controls.Annunciator.mute">
<summary>
Stores the mute status for the anunciator.
</summary>
</member>
<member name="F:ASCOM.Controls.Annunciator.disposed">
<summary>
Tracks whether this object has been disposed.
</summary>
</member>
<member name="M:ASCOM.Controls.Annunciator.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.Controls.Annunciator" /> class.
</summary>
</member>
<member name="P:ASCOM.Controls.Annunciator.ForeColor">
<summary>
Gets or sets the foreground color of the control. There is little point in setting this value
directly as it will normally be constantly overwritten at runtime.
</summary>
<value></value>
<returns>
The foreground <see cref = "T:System.Drawing.Color" /> of the control. The default is the value of the <see cref = "P:System.Windows.Forms.Control.DefaultForeColor" /> property.
</returns>
<PermissionSet>
<IPermission class = "System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
</PermissionSet>
</member>
<member name="P:ASCOM.Controls.Annunciator.InactiveColor">
<summary>
Gets or sets the color of the anunciator text when inactive.
</summary>
<value></value>
<returns>
The foreground <see cref = "T:System.Drawing.Color" /> of the control. The default is the value of the <see cref = "P:System.Windows.Forms.Control.DefaultForeColor" /> property.
</returns>
<PermissionSet>
<IPermission class = "System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
</PermissionSet>
</member>
<member name="P:ASCOM.Controls.Annunciator.ActiveColor">
<summary>
Gets or sets the color of the anunciator text when active.
</summary>
<value>The color of the anunciator text when active.</value>
</member>
<member name="P:ASCOM.Controls.Annunciator.BackColor">
<summary>
Gets or sets the background color for the control.
</summary>
<value></value>
<returns>
A <see cref = "T:System.Drawing.Color" /> that represents the background color of the control. The default is the value of the <see cref = "P:System.Windows.Forms.Control.DefaultBackColor" /> property.
</returns>
<PermissionSet>
<IPermission class = "System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
</PermissionSet>
</member>
<member name="P:ASCOM.Controls.Annunciator.Mute">
<summary>
Gets or sets a value indicating whether the control can respond to user interaction.
For an anunciator, this affects how it displays. A disabled anunciator will always display in
its <see cref = "P:ASCOM.Controls.Annunciator.InactiveColor" /> regardless of other settings and it will not participate in
cadence updates.
</summary>
<value></value>
<returns><c>true</c> if the control can respond to user interaction; otherwise, <c>false</c>.
The default is <c>true</c>.
</returns>
<PermissionSet>
<IPermission class = "System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
<IPermission class = "System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
<IPermission class = "System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Flags = "UnmanagedCode, ControlEvidence" />
<IPermission class = "System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version = "1" Unrestricted = "true" />
</PermissionSet>
</member>
<member name="M:ASCOM.Controls.Annunciator.StopCadenceUpdates">
<summary>
Unregisters this control from the <see cref="T:ASCOM.Controls.CadenceManager"/> so that it will no longer receive cadence updates.
</summary>
</member>
<member name="M:ASCOM.Controls.Annunciator.StartCadenceUpdates">
<summary>
Registers this control with the <see cref="T:ASCOM.Controls.CadenceManager"/> so that it will receive cadence updates.
</summary>
</member>
<member name="M:ASCOM.Controls.Annunciator.Dispose">
<summary>
Releases all resources used by the <see cref="T:System.ComponentModel.Component"/>.
</summary>
</member>
<member name="M:ASCOM.Controls.Annunciator.Dispose(System.Boolean)">
<summary>
Releases the unmanaged resources used by the <see cref="T:System.Windows.Forms.Label"/> and optionally releases the managed resources.
</summary>
<param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
</member>
<member name="P:ASCOM.Controls.Annunciator.Cadence">
<summary>
Gets or sets the cadence (blink pattern) of the anunciator.
Different cadence patterns imply different levels of urgency or severity.
</summary>
<value>The cadence pattern.</value>
</member>
<member name="M:ASCOM.Controls.Annunciator.CadenceUpdate(System.Boolean)">
<summary>
Updates the anunciator's display, if it has changed since the last update.
</summary>
<param name="newState">The new state of the control's appearance ('on' or 'off').</param>
<remarks>
Implements the <see cref="M:ASCOM.Controls.ICadencedControl.CadenceUpdate(System.Boolean)"/> method.
The <see cref="T:ASCOM.Controls.CadenceManager"/> always calls this method on the GUI thread.
</remarks>
</member>
<member name="M:ASCOM.Controls.Annunciator.AnnunciatorParentChanged(System.Object,System.EventArgs)">
<summary>
Handles the ParentChanged event of the Anunciator control.
Changes the control's background colour to blend in with the parent control.
</summary>
<param name = "sender">The source of the event.</param>
<param name = "e">The <see cref = "T:System.EventArgs" /> instance containing the event data.</param>
</member>
<member name="T:ASCOM.Controls.Annunciator.CadenceUpdateDelegate">
<summary>
Defines the signature for the CadenceUpdateDelegate, used in making thread-safe control updates.
</summary>
</member>
<member name="T:ASCOM.Controls.AnnunciatorPanel">
<summary>
A panel control for grouping and arranging <see cref = "T:ASCOM.Controls.Annunciator" /> controls.
This control inherits most of its behaviour from the <see cref = "T:System.Windows.Forms.FlowLayoutPanel" />
base class, but provides some defaults that are appropriate for use with ASCOM.
</summary>
</member>
<member name="M:ASCOM.Controls.AnnunciatorPanel.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.Controls.AnnunciatorPanel" /> class.
</summary>
</member>
<member name="M:ASCOM.Controls.AnnunciatorPanel.Dispose">
<summary>
Releases all resources used by the <see cref="T:System.ComponentModel.Component"/>.
</summary>
</member>
<member name="T:ASCOM.Controls.CadenceManager">
<summary>
Manages objects that must be toggled on and off in a regular pattern over time. This is known as a cadence.
CadenceManager is intended primarily for Windows Forms controls, but can be used for any item that implements
the <see cref = "T:ASCOM.Controls.ICadencedControl" /> interface.
</summary>
<remarks>
CadenceManager behaves slightly differently if the managed item is a Windows Forms control.
<list type = "bulleted">
<item>Invisible controls do not receive updates until they become visible again.</item>
<item>The <see cref = "M:ASCOM.Controls.ICadencedControl.CadenceUpdate(System.Boolean)" /> method is marshalled to the GUI thread.</item>
</list>
</remarks>
</member>
<member name="F:ASCOM.Controls.CadenceManager.instance">
<summary>
The one and only instance of this class.
</summary>
</member>
<member name="F:ASCOM.Controls.CadenceManager.SyncRoot">
<summary>
An object used for thread synchronization during object initialization.
This ensures that the singleton is thread-safe.
</summary>
</member>
<member name="F:ASCOM.Controls.CadenceManager.UpdateList">
<summary>
A list of all the anunciator controls that have been created which need updating
when the timer ticks.
</summary>
</member>
<member name="F:ASCOM.Controls.CadenceManager.CadenceBitPosition">
<summary>
Indicates the current bit position within the cadence register.
</summary>
</member>
<member name="F:ASCOM.Controls.CadenceManager.CadenceTimer">
<summary>
A timer that triggers updates to anunciators to simulate flashing.
</summary>
</member>
<member name="M:ASCOM.Controls.CadenceManager.#ctor">
<summary>
Initializes a new instance of the <see cref="T:ASCOM.Controls.CadenceManager"/> class.
This constructor is declared private so that no instances of the class can be created
except by the class itself - this is how the singleton pattern ensures there is just a single instance.
</summary>
</member>
<member name="P:ASCOM.Controls.CadenceManager.Instance">
<summary>
Gets a reference to the Singleton.
If the Singleton has not yet be instantiated, this causes the object
to be created and the constructor to execute (lazy loading).
This operation uses the double-checked locking pattern to ensure thread-safety.
</summary>
</member>
<member name="M:ASCOM.Controls.CadenceManager.Add(ASCOM.Controls.ICadencedControl)">
<summary>
Adds the specified <see cref = "T:ASCOM.Controls.ICadencedControl" /> to the list of managed controls.
If this is the first control being added, then the update timer is configured and started.
</summary>
<param name = "control">The control to be managed.</param>
<remarks>
Each control can only appear in the list once (duplicate adds will be silently ignored).
</remarks>
</member>
<member name="M:ASCOM.Controls.CadenceManager.Remove(ASCOM.Controls.ICadencedControl)">
<summary>
Removes a control from the update list.
If no managed controls remain in the list, then the update timer is stopped.
</summary>
<param name="control">
The <see cref="T:ASCOM.Controls.ICadencedControl"/> to be removed from the update list.
</param>
<remarks>
If the control is null, or is not in the update list, no action is taken.
If the update list is empty after the control is removed, then the cadence timer is stopped.
</remarks>
</member>
<member name="M:ASCOM.Controls.CadenceManager.TmrCadenceTick(System.Object,System.Timers.ElapsedEventArgs)">
<summary>
Handles the Tick event of the tmrCadence control.
Computes the new display status for each cadenced control based on its <see cref = "P:ASCOM.Controls.ICadencedControl.Cadence" />
property and requests the control update itself with the new value.
</summary>
<param name = "sender">The source of the event.</param>
<param name = "e">The <see cref = "T:System.EventArgs" /> instance containing the event data.</param>
</member>
<member name="T:ASCOM.Controls.CadenceManager.CadenceUpdateDelegate">
<summary>
Delegate used to make thread-safe control updates.
</summary>
</member>
<member name="T:ASCOM.Controls.CadencePattern">
<summary>
Cadence patterns for blinking LEDs.
Cadences are based on 32-bit unsigned integers, such that the ordinal value
of each item represents a bit mask that can be used directly in an update routine.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.SteadyOff">
<summary>
Permanently off,
appropriate for indication of a non-critical inactive state.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.SteadyOn">
<summary>
Permanently on,
appropriate for indication of a non-critical active state.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.BlinkFast">
<summary>
Fast blink,
appropriate for indicating a state of hightened but non-critical alert.
Usage example: during movement of robotic equipment.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.BlinkSlow">
<summary>
Slow blink,
appropriate for non-critical persistent conditions.
Usage example: image exposure in progress.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.BlinkAlarm">
<summary>
Very fast blink,
appropriate for drawing attention to urgent conditions that require operator intervention.
Usage example: Rain detected
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.Strobe">
<summary>
Strobe is mostly off but with an occasional short blip on,
appropriate for indicating non-critical ongoing steady idle state.
</summary>
</member>
<member name="F:ASCOM.Controls.CadencePattern.Wink">
<summary>
Wink (mostly on with occasional short wink-off),
appropriate for indicating non-critical ongoing steady active state.
</summary>
</member>
<member name="T:ASCOM.Controls.ICadencedControl">
<summary>
Defines the members necessary for a control to register and be managed by the
<see cref = "T:ASCOM.Controls.CadenceManager" /> singleton.
</summary>
</member>
<member name="P:ASCOM.Controls.ICadencedControl.Cadence">
<summary>
Gets or sets the cadence (blink pattern) of the control.
Different cadence patterns imply different levels of urgency or severity.
</summary>
<value>The cadence pattern.</value>
<remarks>
<see cref = "T:ASCOM.Controls.CadencePattern" /> is based on a 64-bit long integer but
only 32-bits are used. This is necessary to achieve CLS compliance, because
32-bit uints are not CLS compliant.
</remarks>
</member>
<member name="M:ASCOM.Controls.ICadencedControl.CadenceUpdate(System.Boolean)">
<summary>
Updates the control's display.
<see cref = "T:ASCOM.Controls.CadenceManager" /> always calls this method on the GUI thread so that control updates are thread-safe.
</summary>
<param name="newState">
The new display state of the control: <c>true</c> for active, <c>false</c> for inactive.
</param>
</member>
<member name="T:ASCOM.Controls.LedIndicator">
<summary>
Provides a status indicator modeled on a bi-colour red/green LED lamp.
The lamp can be red or green and (traffic light colours) and
can be steady or can flash with a choice of different cadences.
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.components">
<summary>
Required designer variable.
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.active">
<summary>
Records the current cadence state of the control.
Used to short-cut display updates when they are unnecessary.
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.bPowerOn">
<summary>
When True, the LED indicator reflects the state of the Red, Green and Cadence settings.
When False, the LED appears inactive (steady off).
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.disposed">
<summary>
True when the instance has been disposed.
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.ledLabel">
<summary>
Internal control used to display the LED's text label.
</summary>
</member>
<member name="F:ASCOM.Controls.LedIndicator.ledPanel">
<summary>
Internal panel control that is used to display the LED's colour.
</summary>
</member>
<member name="P:ASCOM.Controls.LedIndicator.Status">
<summary>
Gets or sets the LED's status (which controls its display colour).
</summary>
</member>
<member name="P:ASCOM.Controls.LedIndicator.LabelText">
<summary>
Sets the text displayed alongside the indicator
</summary>
</member>
<member name="P:ASCOM.Controls.LedIndicator.Enabled">
<summary>
Sets or reads the 'power status' of the LED
When the LED is Enabled, it reflects the current colour settings and cadence.
When disabled, the LED appears off and cadencing is disabled.
</summary>
</member>
<member name="P:ASCOM.Controls.LedIndicator.Cadence">
<summary>
Gets or sets the LED cadence bitmap.
If the cadence has changed and is non-steady and the LED is enabled, then the cadence timer is started.
</summary>
<remarks>
Implements the <see cref = "P:ASCOM.Controls.ICadencedControl.Cadence" /> property.
</remarks>
</member>
<member name="M:ASCOM.Controls.LedIndicator.#ctor">
<summary>
Default constructor for a new LEDIndicator object. Performs the default processing required
by the designer.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.Dispose">
<summary>
Releases all resources used by the <see cref="T:System.ComponentModel.Component"/>.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.Dispose(System.Boolean)">
<summary>
Releases the unmanaged resources and optionally releases the managed resources.
</summary>
<param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
</member>
<member name="M:ASCOM.Controls.LedIndicator.InitializeComponent">
<summary>
Required method for Designer support - do not modify
the contents of this method with the code editor.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.CadenceUpdate(System.Boolean)">
<summary>
Refreshes the LED display, taking account of the power,
colour and cadence settings.
</summary>
<param name = "newstate">The new state of the control's appearance ('on' or 'off').</param>
<remarks>
Implements the <see cref = "M:ASCOM.Controls.ICadencedControl.CadenceUpdate(System.Boolean)" /> method.
The <see cref = "T:ASCOM.Controls.CadenceManager" /> always calls this method on the GUI thread.
</remarks>
</member>
<member name="M:ASCOM.Controls.LedIndicator.RenderOffAppearance">
<summary>
Renders the 'power off' appearance of the LED indicator.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.RenderOnAppearance">
<summary>
Renders the 'power on' appearance of the LED indicator. The exact appearance depends on the <see cref="P:ASCOM.Controls.LedIndicator.Status"/> property.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.SetColour(System.Drawing.Color)">
<summary>
Sets the colour of the LED.
If the colour is changed, then the LED's panel control is invalidated to force a re-draw.
</summary>
<param name = "newColour">The new led colour.</param>
</member>
<member name="M:ASCOM.Controls.LedIndicator.StopCadenceUpdates">
<summary>
Unregister from the <see cref = "T:ASCOM.Controls.CadenceManager" />.
</summary>
</member>
<member name="M:ASCOM.Controls.LedIndicator.StartCadenceUpdates">
<summary>
Register with the <see cref = "T:ASCOM.Controls.CadenceManager" />.
</summary>
</member>
<member name="P:ASCOM.Controls.Properties.Settings.ASCOMStandardsURL">
<summary>
The URL of the ASCOM Standards web site.
</summary>
</member>
</members>
</doc>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,693 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ASCOM.Exceptions</name>
</assembly>
<members>
<member name="T:ASCOM.ActionNotImplementedException">
<summary>
Exception thrown by a driver when it receives an unknown command through the Action method.
</summary>
<remarks>
If you need to throw this error as a COM exception use the error number: 0x8004040C.
</remarks>
</member>
<member name="M:ASCOM.ActionNotImplementedException.#ctor(System.String)">
<summary>
Create a new exception object and identify the specified driver method as the source.
</summary>
<param name = "Action">The name of the action that caused the exception.</param>
</member>
<member name="M:ASCOM.ActionNotImplementedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception object and identify the specified driver method as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "Action">The name of the driver method that caused the exception</param>
<param name = "inner">The caught exception</param>
</member>
<member name="M:ASCOM.ActionNotImplementedException.#ctor">
<summary>
For Code Analysis, please don't use
</summary>
</member>
<member name="M:ASCOM.ActionNotImplementedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:ASCOM.ActionNotImplementedException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">
The <paramref name="info"/> parameter is null.
</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">
The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0).
</exception>
</member>
<member name="P:ASCOM.ActionNotImplementedException.Action">
<summary>
The method that is not implemented
</summary>
</member>
<member name="T:ASCOM.DriverAccessCOMException">
<summary>
Exception thrown by DriverAccess to return a driver COM error to the client. This exception appears as a COMException
to the client having the original exception's description and error number as well as the original exception as
the inner exception.
</summary>
</member>
<member name="M:ASCOM.DriverAccessCOMException.#ctor(System.String,System.Int32,System.Exception)">
<summary>
Creates a new DriverAccessCOException
</summary>
<param name="Message">The error message to display</param>
<param name="ErrorCode">The COM error code to attach to this exception</param>
<param name="InnerException">Any inner exception that is to be attached to the exception, or null if there is no inner exception</param>
</member>
<member name="T:ASCOM.InvalidOperationException">
<summary>
This exception should be raised by the driver to reject a command from the client.
</summary>
<remarks>
<para>The exception is intended to be used for "logical" errors e.g. trying to use a command when the current configuration of the device does
not allow it rather than for device errors such as a communications error.</para>
<para>Its the error to use when the client attempts something, which at another time would be sensible,
but which is not sensible right now. If you expect the condition causing the issue to be short
lived, you may choose to stall the request until the condition is cleared rather than throwing this exception.
Clearly, that is a judgement that you can only make given a specific scenario.</para>
<para>If you need to throw this error as a COM exception use the error number: 0x8004040B.</para>
</remarks>
</member>
<member name="M:ASCOM.InvalidOperationException.#ctor">
<summary>
Default public constructor for NotConnectedException takes no parameters.
</summary>
</member>
<member name="M:ASCOM.InvalidOperationException.#ctor(System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.InvalidOperationException" /> class
from another exception.
</summary>
<param name = "innerException">The inner exception.</param>
</member>
<member name="M:ASCOM.InvalidOperationException.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.InvalidOperationException" /> class
with a non-default error message.
</summary>
<param name = "message">A descriptive human-readable message.</param>
</member>
<member name="M:ASCOM.InvalidOperationException.#ctor(System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.InvalidOperationException" /> class
based on another exception.
</summary>
<param name = "message">Descriptive text documenting the cause or source of the error.</param>
<param name = "innerException">The inner exception the led to the throwing of this exception.</param>
</member>
<member name="M:ASCOM.InvalidOperationException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="T:ASCOM.MethodNotImplementedException">
<summary>
All methods defined by the relevant ASCOM standard interface must exist in each driver. However, those methods do not all have to be <i>implemented</i>. The minimum requirement
for each defined method is to throw the ASCOM.MethodNotImplementedException. Note that no default constructor is supplied. Throwing this requires the the method name.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040400.</para>
</remarks>
</member>
<member name="M:ASCOM.MethodNotImplementedException.#ctor(System.String)">
<summary>
Create a new exception object and identify the specified driver method as the source.
</summary>
<param name = "method">The name of the driver method that caused the exception.</param>
</member>
<member name="M:ASCOM.MethodNotImplementedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception object and identify the specified driver method as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "method">The name of the driver method that caused the exception</param>
<param name = "inner">The caught exception</param>
</member>
<member name="M:ASCOM.MethodNotImplementedException.#ctor">
<summary>
For Code Analysis, please don't use
</summary>
</member>
<member name="M:ASCOM.MethodNotImplementedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref="T:ASCOM.MethodNotImplementedException"/> class.
</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
<exception cref="T:System.ArgumentNullException">
The <paramref name="info"/> parameter is null.
</exception>
<exception cref="T:System.Runtime.Serialization.SerializationException">
The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0).
</exception>
</member>
<member name="P:ASCOM.MethodNotImplementedException.Method">
<summary>
The method that is not implemented
</summary>
</member>
<member name="T:ASCOM.DriverException">
<summary>
This is the generic driver exception. Drivers are permitted to directly throw this
exception as well as any derived exceptions. Note that the Message property is
a member of <see cref = "T:System.Exception" />, the base class of DriverException. The <see cref = "P:System.Exception.HResult" />
property of <see cref = "T:System.Exception" /> is simply renamed to Number.
<para>This exception should only be thrown if there is no other more appropriate exception already defined, e.g. PropertyNotImplemented,
InvalidOperationException, InvalidValueException, NotConnectedException etc. These specific exceptions should be thrown where appropriate
rather than using the more generic DriverException. Conform will not accept DriverExceptions where more appropriate exceptions
are already defined.</para>
<para>As good programming practice, the Message property should not be empty, so that users understand why the exception was thrown.</para>
</summary>
</member>
<member name="M:ASCOM.DriverException.#ctor(System.String,System.Int32)">
<summary>
Create a new ASCOM exception using the specified text message and error code.
</summary>
<param name = "message">Descriptive text describing the cause of the exception</param>
<param name = "number">Error code for the exception (80040400 - 80040FFF).</param>
</member>
<member name="M:ASCOM.DriverException.#ctor(System.String,System.Int32,System.Exception)">
<summary>
Create a new ASCOM exception based on another exception plus additional descriptive text and error code. This member is
required for a well-behaved exception class. For example, if a driver receives an exception
(perhaps a COMException) from some other component yet it wants to report some meaningful
error that <i>resulted</i> from the other error, it can package the original error in the
InnerException member of the exception <i>it</i> generates.
</summary>
<param name = "message">Descriptive text describing the cause of the exception</param>
<param name = "number">Error code for the exception (80040400 - 80040FFF).</param>
<param name = "inner">The inner exception that led to throwing this exception</param>
</member>
<member name="M:ASCOM.DriverException.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.DriverException" /> class that will return the 'unspecified error' number: 0x800404FF.
Sets the COM HResult to <see cref = "F:ASCOM.ErrorCodes.UnspecifiedError" />.
</summary>
</member>
<member name="M:ASCOM.DriverException.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.DriverException" /> class
with a human-readable descriptive message.
</summary>
<param name = "message">The human-readable description of the problem.</param>
</member>
<member name="M:ASCOM.DriverException.#ctor(System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.DriverException" /> class from another caught exception and a human-readable descriptinve message.
</summary>
<param name = "message">The human-readable description of the problem.</param>
<param name = "innerException">The caught (inner) exception.</param>
</member>
<member name="M:ASCOM.DriverException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.DriverException" /> class.
</summary>
<param name = "info">The <see cref = "T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object data about the exception being thrown.</param>
<param name = "context">The <see cref = "T:System.Runtime.Serialization.StreamingContext" /> that contains contextual information about the source or destination.</param>
<exception cref = "T:System.ArgumentNullException">
The <paramref name = "info" /> parameter is null.
</exception>
<exception cref = "T:System.Runtime.Serialization.SerializationException">
The class name is null or <see cref = "P:System.Exception.HResult" /> is zero (0).
</exception>
</member>
<member name="P:ASCOM.DriverException.Number">
<summary>
The COM error code for this exception (hex 80040400 - 800404FF)
</summary>
</member>
<member name="T:ASCOM.ErrorCodes">
<summary>
Error numbers for use by drivers.
</summary>
<remarks>
The range of permitted values falls within the class FACILTY_ITF as
defined by the operating system and COM. These values will never clash with
COM, RPC, or OS error codes.
<para>
Driver developers may extend this class by making use of the <c>partial</c> keyword.
</para>
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.NotImplemented">
<summary>
Reserved error number (0x80040400) for property or method not implemented.
</summary>
<remarks>
See ASCOM.Exception.NotImplementedException.
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.InvalidValue">
<summary>
Reserved error code (0x80040401) for reporting an invalid value.
</summary>
<remarks>
See ASCOM.Exception.InvalidValueException.
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.ValueNotSet">
<summary>
Reserved error code (0x80040402) for reporting that a value has not been set.
</summary>
<remarks>
See ASCOM.Exception.ValueNotSetException.
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.NotConnected">
<summary>
Reserved error code (0x80040407) used to indicate that the communications channel is not connected.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.InvalidWhileParked">
<summary>
Reserved error code (0x80040408) used to indicate that the attempted operation is invalid because the mount
is currently in a Parked state.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.InvalidWhileSlaved">
<summary>
Reserved error code (0x80040409) used to indicate that the attempted operation is invalid because the mount
is currently in a Slaved state.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.SettingsProviderError">
<summary>
Reserved error code (0x8004040A) related to settings.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.InvalidOperationException">
<summary>
Reserved error code (0x8004040B) to indicate that the requested operation can not be undertaken at this time.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.ActionNotImplementedException">
<summary>
Reserved error code (0x8004040C) to indicate that the requested action is not implemented in this driver.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.NotInCacheException">
<summary>
Reserved error code (0x8004040D) to indicate that the requested item is not present in the ASCOM cache.
</summary>
<remarks>
The exception is defined in the ASCOM.Cache component rather than ASCOM.Exceptions.
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.UnspecifiedError">
<summary>
Reserved 'catch-all' error code (0x800404FF) used when nothing else was specified.
</summary>
</member>
<member name="F:ASCOM.ErrorCodes.DriverBase">
<summary>
The starting value (0x80040500) for driver-specific error numbers.
</summary>
<remarks>
Drivers are free to choose their own numbers starting with DriverBase, up to and including DriverMax.
</remarks>
</member>
<member name="F:ASCOM.ErrorCodes.DriverMax">
<summary>
The maximum value (0x80040FFF) for driver-specific error numbers.
</summary>
<remarks>
Drivers are free to choose their own numbers starting with DriverBase, up to and including DriverMax.
</remarks>
</member>
<member name="T:ASCOM.InvalidValueException">
<summary>
Exception to report an invalid value supplied to a driver.
</summary>
<remarks>
<para>The most useful way to use this exception is to inform the user which property/method/parameter received the invalid value and also the range of allowed values.</para>
<para>If you need to throw this error as a COM exception use the error number: 0x80040401.</para>
</remarks>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.String,System.String,System.String,System.String)">
<summary>
Create a new exception object and identify the specified driver property or method as the source.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
<param name = "value">The invalid value that was supplied</param>
<param name="fromValue"></param>
<param name="toValue"></param>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.String,System.String,System.String)">
<summary>
Create a new exception object and identify the specified driver property or method as the source.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
<param name = "value">The invalid value that was supplied</param>
<param name = "range">The valid value range</param>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.String,System.String,System.String,System.Exception)">
<summary>
Create a new exception object and identify the specified driver property as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
<param name = "value">The invalid value that was supplied</param>
<param name = "inner">The caught exception</param>
<param name = "range">The valid value range</param>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.String)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
<param name = "inner">The underlying exception that caused this exception to be thrown.</param>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor">
<summary>
Create a new exception object
</summary>
</member>
<member name="M:ASCOM.InvalidValueException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="P:ASCOM.InvalidValueException.PropertyOrMethod">
<summary>
The property/accessor or method that has an invalid value.
</summary>
</member>
<member name="P:ASCOM.InvalidValueException.Value">
<summary>
The invalid value.
</summary>
</member>
<member name="P:ASCOM.InvalidValueException.Range">
<summary>
The valid range for this property.
</summary>
</member>
<member name="P:ASCOM.InvalidValueException.FromValue">
<summary>
The lower value of the valid range.
</summary>
</member>
<member name="P:ASCOM.InvalidValueException.ToValue">
<summary>
The higher end of the valid range.
</summary>
</member>
<member name="T:ASCOM.NotConnectedException">
<summary>
This exception should be raised when an operation is attempted that requires communication with the device, but the device is disconnected.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040400.</para>
</remarks>
</member>
<member name="M:ASCOM.NotConnectedException.#ctor">
<summary>
Default public constructor for NotConnectedException takes no parameters.
</summary>
</member>
<member name="M:ASCOM.NotConnectedException.#ctor(System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.NotConnectedException" /> class
from another exception.
</summary>
<param name = "innerException">The inner exception.</param>
</member>
<member name="M:ASCOM.NotConnectedException.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.NotConnectedException" /> class
with a non-default error message.
</summary>
<param name = "message">A descriptive human-readable message.</param>
</member>
<member name="M:ASCOM.NotConnectedException.#ctor(System.String,System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.NotConnectedException" /> class
based on another exception.
</summary>
<param name = "message">Descriptive text documenting the cause or source of the error.</param>
<param name = "innerException">The inner exception the led to the throwing of this exception.</param>
</member>
<member name="M:ASCOM.NotConnectedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="T:ASCOM.NotImplementedException">
<summary>
All properties and methods defined by the relevant ASCOM standard interface must exist in each driver. However,
those properties and methods do not all have to be <i>implemented</i>. This exception is a base class for
PropertyNotImplementedException and MethodNotImplementedException, which drivers should use for throwing
the relevant exception(s). This class is intended to be used by clients who wish to catch either of
the two specific exceptions in a single catch() clause.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040400.</para>
</remarks>
</member>
<member name="F:ASCOM.NotImplementedException.csMessage">
<summary>
A format string used to create the exception's human-readable message.
</summary>
</member>
<member name="M:ASCOM.NotImplementedException.#ctor(System.String)">
<summary>
Create a new exception object and identify the specified driver property or method as the source.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
</member>
<member name="M:ASCOM.NotImplementedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception object and identify the specified driver property as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
<param name = "inner">The caught exception</param>
</member>
<member name="M:ASCOM.NotImplementedException.#ctor">
<summary>
Added to keep Code analysis happy, please don't use it.
</summary>
</member>
<member name="M:ASCOM.NotImplementedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="P:ASCOM.NotImplementedException.PropertyOrMethod">
<summary>
The property/accessor or method that is not implemented
</summary>
</member>
<member name="T:ASCOM.ParkedException">
<summary>
This exception should be used to indicate that movement (or other invalid operation) was attempted while the device was in a parked state.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040408.</para>
</remarks>
</member>
<member name="M:ASCOM.ParkedException.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.ParkedException" /> class
using default error text and error codes.
</summary>
</member>
<member name="M:ASCOM.ParkedException.#ctor(System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.ParkedException" /> class
with a caught (inner) exception.
</summary>
<param name = "inner">The inner.</param>
</member>
<member name="M:ASCOM.ParkedException.#ctor(System.String)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
</member>
<member name="M:ASCOM.ParkedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
<param name = "inner">Underlying exception that caused this exception to be thrown.</param>
</member>
<member name="M:ASCOM.ParkedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="T:ASCOM.PropertyNotImplementedException">
<summary>
All properties defined by the relevant ASCOM standard interface must exist in each driver. However, those properties do not all have to be <i>implemented</i>. The minimum requirement
for each defined property is to throw the ASCOM.PropertyNotImplementedException for each of its accessors. Note that no default constructor is supplied. Throwing this requires both the
property name and unimplemented accessor type to be supplied.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040400.</para>
</remarks>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor(System.String,System.Boolean)">
<summary>
Create a new exception object and identify the specified driver property and accessor as the source.
</summary>
<param name = "property">The name of the driver property that caused the exception.</param>
<param name = "accessorSet">True if the exception is being thrown for the 'set' accessor, else false</param>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor(System.String,System.Boolean,System.Exception)">
<summary>
Create a new exception object and identify the specified driver property as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "property">The name of the driver property that caused the exception</param>
<param name = "accessorSet">True if the exception is being thrown for the 'set' accessor, else false</param>
<param name = "inner">The caught exception</param>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
<param name = "inner">Underlying exception that caused this exception to be thrown.</param>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor">
<summary>
Create a new exception
</summary>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor(System.String)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
</member>
<member name="M:ASCOM.PropertyNotImplementedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.PropertyNotImplementedException" /> class.
</summary>
<param name = "info">The <see cref = "T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object data about the exception being thrown.</param>
<param name = "context">The <see cref = "T:System.Runtime.Serialization.StreamingContext" /> that contains contextual information about the source or destination.</param>
<exception cref = "T:System.ArgumentNullException">
The <paramref name = "info" /> parameter is null.
</exception>
<exception cref = "T:System.Runtime.Serialization.SerializationException">
The class name is null or <see cref = "P:System.Exception.HResult" /> is zero (0).
</exception>
</member>
<member name="P:ASCOM.PropertyNotImplementedException.Property">
<summary>
The property that is not implemented
</summary>
</member>
<member name="P:ASCOM.PropertyNotImplementedException.AccessorSet">
<summary>
True if the 'set' accessor is not implemented, else false
</summary>
</member>
<member name="T:ASCOM.SlavedException">
<summary>
This exception should be used to indicate that movement (or other invalid operation) was attempted while the device was in slaved mode. This applies primarily to domes drivers.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040409.</para>
</remarks>
</member>
<member name="M:ASCOM.SlavedException.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.SlavedException" /> class.
</summary>
</member>
<member name="M:ASCOM.SlavedException.#ctor(System.Exception)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.SlavedException" /> class
with a caught (inner) exception.
</summary>
<param name = "inner">Inner exception</param>
</member>
<member name="M:ASCOM.SlavedException.#ctor(System.String)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
</member>
<member name="M:ASCOM.SlavedException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception
</summary>
<param name = "message">Exception description</param>
<param name = "inner">Underlying exception that caused this exception to be thrown.</param>
</member>
<member name="M:ASCOM.SlavedException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Create a new exception
</summary>
<param name = "info">Information required to serialise the exception</param>
<param name = "context">Information of the serialising stream context.</param>
</member>
<member name="T:ASCOM.ValueNotSetException">
<summary>
Exception to report that no value has yet been set for this property.
</summary>
<remarks>
<para>If you need to throw this error as a COM exception use the error number: 0x80040402.</para>
</remarks>
</member>
<member name="M:ASCOM.ValueNotSetException.#ctor(System.String)">
<summary>
Create a new exception object and identify the specified driver property or method as the source.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
</member>
<member name="M:ASCOM.ValueNotSetException.#ctor(System.String,System.Exception)">
<summary>
Create a new exception object and identify the specified driver property as the source,
and include an inner exception object containing a caught exception.
</summary>
<param name = "propertyOrMethod">The name of the driver property/accessor or method that caused the exception</param>
<param name = "inner">The caught exception</param>
</member>
<member name="M:ASCOM.ValueNotSetException.#ctor">
<summary>
Added to keep Code Analysis happy
</summary>
</member>
<member name="M:ASCOM.ValueNotSetException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>
Added to keep Code Analysis happy
</summary>
<param name = "info"></param>
<param name = "context"></param>
</member>
<member name="P:ASCOM.ValueNotSetException.PropertyOrMethod">
<summary>
The property/accessor or method that has no value
</summary>
</member>
</members>
</doc>
@@ -0,0 +1,126 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ASCOM.Internal.Extensions</name>
</assembly>
<members>
<member name="T:ASCOM.Internal.FileInfoExtensions">
<summary>
Extension methods relating to <see cref="T:System.IO.FileInfo"/>.
</summary>
</member>
<member name="F:ASCOM.Internal.FileInfoExtensions.deviceClasses">
<summary>
The recognized ASCOM device classes.
</summary>
<remarks>
This list is specifically intended to support the Template Project Wizard
and contains a list of the device types for which the Wizard can expand
a project template.
</remarks>
</member>
<member name="M:ASCOM.Internal.FileInfoExtensions.IsDeviceSpecific(System.IO.FileInfo)">
<summary>
Determines whether the specified file is device specific.
</summary>
<param name="file">The file.</param>
<returns>
<c>true</c> if it is device specific; otherwise, <c>false</c>.
</returns>
<remarks>
A file is considered 'device specific' if it meets the following criteria:
<list type="number">
<item>
The filename contains at least two dots ('.');
</item>
<item>
The first dot-delimited segment of the filename matches one of the
recognized interface types contained in
</item>
</list>
</remarks>
</member>
<member name="T:ASCOM.Internal.IntExtensions">
<summary>
tring extension methods
</summary>
</member>
<member name="F:ASCOM.Internal.IntExtensions.bitMask">
<summary>
Defines a lookup table of bit masks, for a fast method of determining
a mask for any given bit position.
N.B. It might just be quicker to raise to a power of two,
the compiler might be smart enough to optimize that.
</summary>
</member>
<member name="M:ASCOM.Internal.IntExtensions.Bit(System.UInt32,System.Int32)">
<summary>
Returns a boolean value corresponding to the value at the specified bit position.
</summary>
<param name="register">The register, an unsigned integer, containing bit values.</param>
<param name="bitPosition">The bit position to be tested, where bit 0 is the least significant bit.</param>
<returns>A boolean value corresponding to the bit at the specified bit position.</returns>
</member>
<member name="M:ASCOM.Internal.IntExtensions.Bit(System.Int32,System.Int32)">
<summary>
Returns a boolean value corresponding to the value at the specified bit position.
</summary>
<param name="register">The register, an integer, containing bit values.</param>
<param name="bitPosition">The bit position to be tested, where bit 0 is the least significant bit.</param>
<returns>A boolean value corresponding to the bit at the specified bit position.</returns>
</member>
<member name="T:ASCOM.Internal.StringExtensions">
<summary>
String extension methods.
</summary>
<remarks>
Internal use only. Driver and application developers should not rely on this class,
because the interface and method signatures may change at any time.
</remarks>
</member>
<member name="M:ASCOM.Internal.StringExtensions.Head(System.String,System.Int32)">
<summary>
Returns the specified number of characters from the head of a string.
</summary>
<param name = "source">The source string.</param>
<param name = "length">The number of characters to be returned, must not be greater than the length of the string.</param>
<returns>The specified number of characters from the head of the source string, as a new string.</returns>
<exception cref = "T:System.ArgumentOutOfRangeException">Thrown if the requested number of characters exceeds the string length.</exception>
</member>
<member name="M:ASCOM.Internal.StringExtensions.Tail(System.String,System.Int32)">
<summary>
Returns the specified number of characters from the tail of a string.
</summary>
<param name = "source">The source string.</param>
<param name = "length">The number of characters to be returned, must not be greater than the length of the string.</param>
<returns>The specified number of characters from the tail of the source string, as a new string.</returns>
<exception cref = "T:System.ArgumentOutOfRangeException">Thrown if the requested number of characters exceeds the string length.</exception>
</member>
<member name="M:ASCOM.Internal.StringExtensions.Clean(System.String,System.String)">
<summary>
Cleans (that is, removes all unwanted characters) from the string.
</summary>
<param name = "source">The source string.</param>
<param name = "allowedCharacters">A list of the allowed characters. All other characters will be removed.</param>
<returns>A new string with all of the unwanted characters deleted.</returns>
</member>
<member name="M:ASCOM.Internal.StringExtensions.RemoveHead(System.String,System.Int32)">
<summary>
Remove the head of the string, leaving the tail.
</summary>
<param name="source">The source string.</param>
<param name="length">Number of characters to remove from the head.</param>
<returns>
A new string containing the old string with <paramref name="length"/> characters removed from the head.
</returns>
</member>
<member name="M:ASCOM.Internal.StringExtensions.RemoveTail(System.String,System.Int32)">
<summary>
Remove the tail of the string, leaving the head.
</summary>
<param name = "source">The source string.</param>
<param name = "length">Number of characters to remove from the tail.</param>
<returns>A new string containing the old string with <paramref name="length"/> characters removed from the tail.</returns>
</member>
</members>
</doc>
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
@@ -0,0 +1,188 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ASCOM.SettingsProvider</name>
</assembly>
<members>
<member name="T:TiGra.Diagnostics">
<summary>
The Diagnostics class provides a few helper methods that make it easier to produce coherent
debugging output. The class is implemented as a singleton that is created as soon as the assembly
is loaded. The level of trace output that is produced is controlled by a <see cref="T:System.Diagnostics.TraceSwitch"/>
that in turn loads its configuration from the App.config file. If there is no App.Config file,
the default is to produce verbose output for debug builds and errors/warnings for release builds.
<para>
We recommend SysInternals DbgView for viewing and capturing the trace output.
See http://www.sysinternals.com
</para>
</summary>
</member>
<member name="F:TiGra.Diagnostics.TraceLevels">
<summary>
Text versions of the various trace levels.
</summary>
</member>
<member name="M:TiGra.Diagnostics.#ctor">
<summary>
Construct and initialise diagnostics.
</summary>
</member>
<member name="M:TiGra.Diagnostics.GetInstance">
<summary>
Gets a reference to the one and only instance of this singleton class.
</summary>
<returns>a reference to the one and only instance of this singleton class.</returns>
</member>
<member name="M:TiGra.Diagnostics.TraceError(System.Object)">
<summary>
Send an object to the trace channel at severity level Error.
</summary>
<param name="msg">The object (which may be a string) to display.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceError(System.String,System.Object[])">
<summary>
Format and send a list of objects to the trace channel at severity level Error.
</summary>
<param name="format">Format string used to format the objects.</param>
<param name="items">List of objects to be displayed.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceWarning(System.Object)">
<summary>
Send an object to the trace channel at severity level Warning.
</summary>
<param name="msg">The object (which may be a string) to display.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceWarning(System.String,System.Object[])">
<summary>
Format and send a list of objects to the trace channel at severity level Warning.
</summary>
<param name="format">Format string used to format the objects.</param>
<param name="items">List of objects to be displayed.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceInfo(System.Object)">
<summary>
Send an object to the trace channel at severity level Information.
</summary>
<param name="msg">The object (which may be a string) to display.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceInfo(System.String,System.Object[])">
<summary>
Format and send a list of objects to the trace channel at severity level Information.
</summary>
<param name="format">Format string used to format the objects.</param>
<param name="items">List of objects to be displayed.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceVerbose(System.Object)">
<summary>
Send an object to the trace channel at severity level Verbose Information.
</summary>
<param name="msg">The object (which may be a string) to display.</param>
</member>
<member name="M:TiGra.Diagnostics.TraceVerbose(System.String,System.Object[])">
<summary>
Format and send a list of objects to the trace channel at severity level Verbose Information.
</summary>
<param name="format">Format string used to format the objects.</param>
<param name="items">List of objects to be displayed.</param>
</member>
<member name="T:ASCOM.SettingsProvider">
<summary>
Provides settings storage for ASCOM device drivers.
Settings are persisted in the ASCOM Device Profile store.
</summary>
<remarks>
Original version by Tim Long, March 2009.
Copyright © 2009 TiGra Astronomy, all rights reserved.
http://www.tigranetworks.co.uk/Astronomy
</remarks>
</member>
<member name="F:ASCOM.SettingsProvider.ascomProfile">
<summary>
A reference to an ASCOM profile provider. Normally, this will be the default implementation defined in
<see cref = "T:ASCOM.Utilities.Profile" />, but unit tests can also use dependency injection to provide
a mock provider. This value will be initialized (once) in the constructor.
</summary>
</member>
<member name="F:ASCOM.SettingsProvider.appName">
<summary>
Backing store for the ApplicationName property.
</summary>
</member>
<member name="M:ASCOM.SettingsProvider.#ctor">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.SettingsProvider" /> class with the default
profile provider <see cref = "T:ASCOM.Utilities.Profile" />.
</summary>
</member>
<member name="M:ASCOM.SettingsProvider.#ctor(ASCOM.Utilities.Interfaces.IProfile)">
<summary>
Initializes a new instance of the <see cref = "T:ASCOM.SettingsProvider" /> class with the supplied
Profile Provider. This is useful for injecting a mock profile object during unit testing.
</summary>
<param name = "profileProvider">The <see cref = "T:ASCOM.Utilities.Interfaces.IProfile" /> to be used.</param>
</member>
<member name="P:ASCOM.SettingsProvider.Name">
<summary>
Returns the provider's friendly name used during configuration.
</summary>
</member>
<member name="P:ASCOM.SettingsProvider.Description">
<summary>
Gets the provider's friendly description.
</summary>
</member>
<member name="P:ASCOM.SettingsProvider.ApplicationName">
<summary>
Gets the name of the driver or application for which settings are being managed.
This value is set during provider initialization and cannot be changed thereafter.
</summary>
</member>
<member name="M:ASCOM.SettingsProvider.Initialize(System.String,System.Collections.Specialized.NameValueCollection)">
<summary>
Initializes the ASCOM Settings Provider.
</summary>
<param name = "name">Ignored.</param>
<param name = "config">Not used.</param>
<remarks>
This method is called by <see cref = "T:System.Configuration.ApplicationSettingsBase" /> to initialize the settings provider.
Normally, this will set the provider's <see cref = "P:ASCOM.SettingsProvider.ApplicationName" /> property to the assembly name
of the application. This is later used to determine the storage location of each of the settings.
However, for ASCOM purposes, we can't use the application name and we need to key off the
ASCOM DeviceID of the driver, so in ASCOM.SettingsProvider, the application name is set but never used.
</remarks>
</member>
<member name="M:ASCOM.SettingsProvider.GetPropertyValues(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyCollection)">
<summary>
Retrieves a collection of settings values from the underlying ASCOM Profile store.
</summary>
<param name = "context">Not used.</param>
<param name = "collection">The list of properties to be retrieved.</param>
<returns>
Returns a collection of the retrieved property values as a
<see cref = "T:System.Configuration.SettingsPropertyValueCollection" />.
</returns>
<remarks>
If any properties are absent in the underlying store, or if an error occurs while
retrieving them, then the property's default value is used. This will be the case
if the driver has never been registered with ASCOM.
</remarks>
</member>
<member name="M:ASCOM.SettingsProvider.SetPropertyValues(System.Configuration.SettingsContext,System.Configuration.SettingsPropertyValueCollection)">
<summary>
Persists a collection of settings values to the underlying ASCOM Profile store.
</summary>
<param name = "context">Context to which the settings will be saved</param>
<param name = "collection">Settings to be saved</param>
</member>
<member name="M:ASCOM.SettingsProvider.EnsureRegistered(ASCOM.Utilities.Interfaces.IProfile,System.String)">
<summary>
Checks whether the driver is registered with ASCOM and, if not, registers it.
</summary>
<param name = "ascomProfile">
A reference to a <see cref = "T:ASCOM.Utilities.Profile" /> object
that is used to query the ASCOM Device Profile.
</param>
<param name = "driverId">The full ASCOM DeviceID to be verified.</param>
</member>
</members>
</doc>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,29 @@
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.MeadeAutostar497.Telescope.dll.config
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.MeadeAutostar497.Telescope.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.MeadeAutostar497.Telescope.pdb
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.MeadeAutostar497.Telescope.tlb
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Astrometry.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Attributes.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Controls.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.DeviceInterfaces.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Exceptions.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.SettingsProvider.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Utilities.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Utilities.Video.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Internal.Extensions.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Astrometry.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Attributes.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Controls.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.DeviceInterfaces.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Exceptions.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.SettingsProvider.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Utilities.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\bin\Debug\ASCOM.Internal.Extensions.xml
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\ASCOM.MeadeAutostar497.Properties.Resources.resources
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\ASCOM.MeadeAutostar497.SetupDialogForm.resources
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\MeadeAutostar497.csproj.GenerateResource.cache
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\MeadeAutostar497.csproj.CoreCompileInputs.cache
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\MeadeAutostar497.csproj.CopyComplete
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\ASCOM.MeadeAutostar497.Telescope.dll
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\ASCOM.MeadeAutostar497.Telescope.pdb
D:\Code\BitBucket\cjdSkunkWorks\Ascom\MeadeAutostar497\MeadeAutostar497\obj\Debug\MeadeAutostar497.csprojAssemblyReference.cache