Compare commits
90 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ab9cfb9c8 | |||
| 894b78d9f1 | |||
| b9522ae2a2 | |||
| 07665b7617 | |||
| 6130cb6d64 | |||
| d925312403 | |||
| 5a18577552 | |||
| c7f1a4272f | |||
| 6601fa6205 | |||
| e2abda2d14 | |||
| 97810b5575 | |||
| 1185770a94 | |||
| 25d88b0609 | |||
| 85c77787ce | |||
| 2181ff5602 | |||
| 9505468efc | |||
| 2cbb1fb68c | |||
| ba0ae056ea | |||
| dff7bce6b0 | |||
| a155e27eac | |||
| 438ec779b4 | |||
| 307517ded0 | |||
| 8efa8752df | |||
| 7f6f478dfc | |||
| 7a92581fa8 | |||
| 7f8c2cb559 | |||
| 3dc87e3724 | |||
| 670a5ccf81 | |||
| 9af0613183 | |||
| 5df0e21a58 | |||
| 149bad2d31 | |||
| 276f0352e3 | |||
| f22e9cdd02 | |||
| ee3862f949 | |||
| 2972ae31aa | |||
| 79cdd60d07 | |||
| f92f21ab72 | |||
| 2a56cfa700 | |||
| babb2a7492 | |||
| 23960d8c7c | |||
| cb97358100 | |||
| 28889bdb49 | |||
| 5efde9f6e0 | |||
| 12e46edc74 | |||
| 9969fce375 | |||
| 97e77c839a | |||
| 0ea195e073 | |||
| 4aa5cf233e | |||
| eb775bba18 | |||
| 4ff193fadf | |||
| a61915a3b5 | |||
| f33ca49592 | |||
| 1c4d65bec3 | |||
| 300e042340 | |||
| ec48f1f36e | |||
| 13176cb286 | |||
| 970b1f1571 | |||
| 7465260354 | |||
| 2a13fcd40a | |||
| 19f831695d | |||
| 07bf72a8c3 | |||
| 7905da9651 | |||
| ecd9813f8a | |||
| 0e0ea2d2b0 | |||
| 272fdb58d1 | |||
| 4489a91eb7 | |||
| 013c2fd672 | |||
| 6394e08c4c | |||
| 15bf977458 | |||
| b8faab13b3 | |||
| 0bbfa5f9c3 | |||
| 69fbb14410 | |||
| 101784adb3 | |||
| ca982edbf8 | |||
| e782ac36fb | |||
| b962420b94 | |||
| 0594355072 | |||
| aec6cc19ab | |||
| 58b0e1395c | |||
| 274ecbab6b | |||
| 544cdd826b | |||
| fc68a788ac | |||
| 9c689f1179 | |||
| 6e7ff70862 | |||
| 0a0072ce43 | |||
| 0e31149e31 | |||
| d332243772 | |||
| d9aa68f1e9 | |||
| 2cc27788c8 | |||
| 5a0b3bba25 |
@@ -39,7 +39,7 @@
|
|||||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -56,8 +56,8 @@
|
|||||||
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Moq, Version=4.12.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
<Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Moq.4.12.0\lib\net45\Moq.dll</HintPath>
|
<HintPath>..\packages\Moq.4.13.0\lib\net45\Moq.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
@@ -65,8 +65,8 @@
|
|||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
|||||||
@@ -113,11 +113,13 @@ namespace AstroMath.UnitTests
|
|||||||
{
|
{
|
||||||
var latitude = 52.0;
|
var latitude = 52.0;
|
||||||
|
|
||||||
EquatorialCoordinates equatorialCoordinates = new EquatorialCoordinates();
|
var equatorialCoordinates = new EquatorialCoordinates
|
||||||
equatorialCoordinates.RightAscension = 5.862222222222222;//5 51' 44"
|
{
|
||||||
equatorialCoordinates.Declination = 23.21944444444444;//23 13' 10"
|
RightAscension = 5.862222222222222, //5 51' 44"
|
||||||
|
Declination = 23.21944444444444 //23 13' 10"
|
||||||
|
};
|
||||||
|
|
||||||
var hourAngle = 5.682222;
|
const double hourAngle = 5.682222;
|
||||||
|
|
||||||
var altAz = _astroMath.ConvertEqToHoz(hourAngle, latitude, equatorialCoordinates);
|
var altAz = _astroMath.ConvertEqToHoz(hourAngle, latitude, equatorialCoordinates);
|
||||||
|
|
||||||
@@ -131,9 +133,11 @@ namespace AstroMath.UnitTests
|
|||||||
DateTime dateTime = new DateTime(2019, 05, 18, 22, 26, 15, DateTimeKind.Utc);
|
DateTime dateTime = new DateTime(2019, 05, 18, 22, 26, 15, DateTimeKind.Utc);
|
||||||
var longitude = -1.7833333333333332;
|
var longitude = -1.7833333333333332;
|
||||||
var latitude = 52.0;
|
var latitude = 52.0;
|
||||||
EquatorialCoordinates equatorialCoordinates = new EquatorialCoordinates();
|
EquatorialCoordinates equatorialCoordinates = new EquatorialCoordinates
|
||||||
equatorialCoordinates.RightAscension = 4.15361111111111;
|
{
|
||||||
equatorialCoordinates.Declination = 30.0019444444444;
|
RightAscension = 4.15361111111111,
|
||||||
|
Declination = 30.0019444444444
|
||||||
|
};
|
||||||
|
|
||||||
var hourAngle = _astroMath.RightAscensionToHourAngle(dateTime, longitude, equatorialCoordinates.RightAscension);
|
var hourAngle = _astroMath.RightAscensionToHourAngle(dateTime, longitude, equatorialCoordinates.RightAscension);
|
||||||
var altaz = _astroMath.ConvertEqToHoz(hourAngle, latitude, equatorialCoordinates);
|
var altaz = _astroMath.ConvertEqToHoz(hourAngle, latitude, equatorialCoordinates);
|
||||||
|
|||||||
@@ -6,6 +6,10 @@
|
|||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Castle.Core" version="4.4.0" targetFramework="net472" />
|
<package id="Castle.Core" version="4.4.0" targetFramework="net472" />
|
||||||
<package id="Moq" version="4.12.0" targetFramework="net472" />
|
<package id="Moq" version="4.13.0" targetFramework="net472" />
|
||||||
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>ASCOM.MeadeGeneric</RootNamespace>
|
<RootNamespace>ASCOM.MeadeGeneric</RootNamespace>
|
||||||
<AssemblyName>ASCOM.MeadeGeneric.Test</AssemblyName>
|
<AssemblyName>ASCOM.MeadeGeneric.Test</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>
|
<TargetFrameworkProfile>
|
||||||
</TargetFrameworkProfile>
|
</TargetFrameworkProfile>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
@@ -36,6 +36,26 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ASCOM.DeviceInterfaces, 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.DriverAccess, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
|
<Reference Include="ASCOM.DriverAccess, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ using ASCOM.DriverAccess;
|
|||||||
|
|
||||||
namespace ASCOM.MeadeGeneric
|
namespace ASCOM.MeadeGeneric
|
||||||
{
|
{
|
||||||
class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
public static void Main()
|
||||||
{
|
{
|
||||||
// Uncomment the code that's required
|
// Uncomment the code that's required
|
||||||
#if UseChooser
|
#if UseChooser
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
using ASCOM;
|
using ASCOM;
|
||||||
using ASCOM.DeviceInterface;
|
using ASCOM.DeviceInterface;
|
||||||
using ASCOM.Meade.net;
|
using ASCOM.Meade.net;
|
||||||
@@ -6,7 +7,6 @@ using ASCOM.Meade.net.Wrapper;
|
|||||||
using ASCOM.Utilities.Interfaces;
|
using ASCOM.Utilities.Interfaces;
|
||||||
using Moq;
|
using Moq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NotImplementedException = System.NotImplementedException;
|
|
||||||
|
|
||||||
namespace Meade.net.Focuser.UnitTests
|
namespace Meade.net.Focuser.UnitTests
|
||||||
{
|
{
|
||||||
@@ -23,11 +23,13 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[SetUp]
|
[SetUp]
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
_profileProperties = new ProfileProperties();
|
_profileProperties = new ProfileProperties
|
||||||
_profileProperties.TraceLogger = false;
|
{
|
||||||
_profileProperties.ComPort = "TestCom1";
|
TraceLogger = false,
|
||||||
_profileProperties.GuideRateArcSecondsPerSecond = 1.23;
|
ComPort = "TestCom1",
|
||||||
_profileProperties.Precision = "Unchanged";
|
GuideRateArcSecondsPerSecond = 1.23,
|
||||||
|
Precision = "Unchanged"
|
||||||
|
};
|
||||||
|
|
||||||
_utilMock = new Mock<IUtil>();
|
_utilMock = new Mock<IUtil>();
|
||||||
|
|
||||||
@@ -84,7 +86,11 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
{
|
{
|
||||||
var actionName = "Action";
|
var actionName = "Action";
|
||||||
|
|
||||||
var exception = Assert.Throws<ActionNotImplementedException>(() => { var actualResult = _focuser.Action(actionName, string.Empty); });
|
Assert.Throws<ActionNotImplementedException>(() =>
|
||||||
|
{
|
||||||
|
var actualResult = _focuser.Action(actionName, string.Empty);
|
||||||
|
Assert.Fail($"{actualResult} should not have a value");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -175,7 +181,7 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
_sharedResourcesWrapperMock.Setup(x => x.FirmwareVersion).Returns(firmware);
|
_sharedResourcesWrapperMock.Setup(x => x.FirmwareVersion).Returns(firmware);
|
||||||
_focuser.Connected = true;
|
_focuser.Connected = true;
|
||||||
|
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.Connect("Serial", It.IsAny<string>()), Times.Once);
|
_sharedResourcesWrapperMock.Verify(x => x.Connect("Serial", It.IsAny<string>(), It.IsAny<ITraceLogger>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -183,20 +189,20 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
public void Connected_Set_SettingTrueWhenTrue_ThenDoesNothing()
|
public void Connected_Set_SettingTrueWhenTrue_ThenDoesNothing()
|
||||||
{
|
{
|
||||||
ConnectFocuser();
|
ConnectFocuser();
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ITraceLogger>()), Times.Once);
|
||||||
|
|
||||||
//act
|
//act
|
||||||
_focuser.Connected = true;
|
_focuser.Connected = true;
|
||||||
|
|
||||||
//assert
|
//assert
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ITraceLogger>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void Connected_Set_SettingFalseWhenTrue_ThenDisconnects()
|
public void Connected_Set_SettingFalseWhenTrue_ThenDisconnects()
|
||||||
{
|
{
|
||||||
ConnectFocuser();
|
ConnectFocuser();
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
_sharedResourcesWrapperMock.Verify(x => x.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ITraceLogger>()), Times.Once);
|
||||||
|
|
||||||
//act
|
//act
|
||||||
_focuser.Connected = false;
|
_focuser.Connected = false;
|
||||||
@@ -234,7 +240,7 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void DriverVersion_Get()
|
public void DriverVersion_Get()
|
||||||
{
|
{
|
||||||
Version version = System.Reflection.Assembly.GetAssembly(typeof(ASCOM.Meade.net.Focuser)).GetName().Version;
|
Version version = Assembly.GetAssembly(typeof(ASCOM.Meade.net.Focuser)).GetName().Version;
|
||||||
|
|
||||||
string exptectedDriverInfo = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}";
|
string exptectedDriverInfo = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}";
|
||||||
|
|
||||||
@@ -246,8 +252,6 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void DriverInfo_Get()
|
public void DriverInfo_Get()
|
||||||
{
|
{
|
||||||
Version version = System.Reflection.Assembly.GetAssembly(typeof(ASCOM.Meade.net.Focuser)).GetName().Version;
|
|
||||||
|
|
||||||
string exptectedDriverInfo = $"{_focuser.Description} .net driver. Version: {_focuser.DriverVersion}";
|
string exptectedDriverInfo = $"{_focuser.Description} .net driver. Version: {_focuser.DriverVersion}";
|
||||||
|
|
||||||
var driverInfo = _focuser.DriverInfo;
|
var driverInfo = _focuser.DriverInfo;
|
||||||
@@ -277,7 +281,11 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Absolute_Get_WhenNotConnected_ThenThrowsException()
|
public void Absolute_Get_WhenNotConnected_ThenThrowsException()
|
||||||
{
|
{
|
||||||
var exception = Assert.Throws<NotConnectedException>(() => { var result = _focuser.Absolute; });
|
var exception = Assert.Throws<NotConnectedException>(() =>
|
||||||
|
{
|
||||||
|
var result = _focuser.Absolute;
|
||||||
|
Assert.Fail($"{result} should not have a value");
|
||||||
|
});
|
||||||
Assert.That(exception.Message, Is.EqualTo("Not connected to focuser when trying to execute: Absolute Get"));
|
Assert.That(exception.Message, Is.EqualTo("Not connected to focuser when trying to execute: Absolute Get"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,13 +401,13 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
|
|
||||||
if (position < 0)
|
if (position < 0)
|
||||||
{
|
{
|
||||||
_sharedResourcesWrapperMock.Verify( x => x.SendBlind(":F-#"), Times.AtLeastOnce);
|
_sharedResourcesWrapperMock.Verify( x => x.SendBlind("#:F-#"), Times.AtLeastOnce);
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.SendBlind(":F+#"), Times.Never);
|
_sharedResourcesWrapperMock.Verify(x => x.SendBlind("#:F+#"), Times.Never);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.SendBlind(":F-#"), Times.Never);
|
_sharedResourcesWrapperMock.Verify(x => x.SendBlind("#:F-#"), Times.Never);
|
||||||
_sharedResourcesWrapperMock.Verify(x => x.SendBlind(":F+#"), Times.AtLeastOnce);
|
_sharedResourcesWrapperMock.Verify(x => x.SendBlind("#:F+#"), Times.AtLeastOnce);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sharedResourcesWrapperMock.Verify( x => x.Lock(It.IsAny<Action>()), Times.Once);
|
_sharedResourcesWrapperMock.Verify( x => x.Lock(It.IsAny<Action>()), Times.Once);
|
||||||
@@ -413,14 +421,22 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Position_WhenCalled_ThenThrowsException()
|
public void Position_WhenCalled_ThenThrowsException()
|
||||||
{
|
{
|
||||||
var exception = Assert.Throws<PropertyNotImplementedException>(() => { var result = _focuser.Position; });
|
var exception = Assert.Throws<PropertyNotImplementedException>(() =>
|
||||||
|
{
|
||||||
|
var result = _focuser.Position;
|
||||||
|
Assert.Fail($"{result} should not have a value");
|
||||||
|
});
|
||||||
Assert.That(exception.Message, Is.EqualTo("Property read Position is not implemented in this driver."));
|
Assert.That(exception.Message, Is.EqualTo("Property read Position is not implemented in this driver."));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void StepSize_WhenCalled_ThenThrowsException()
|
public void StepSize_WhenCalled_ThenThrowsException()
|
||||||
{
|
{
|
||||||
var exception = Assert.Throws<PropertyNotImplementedException>(() => { var result = _focuser.StepSize; });
|
var exception = Assert.Throws<PropertyNotImplementedException>(() =>
|
||||||
|
{
|
||||||
|
var result = _focuser.StepSize;
|
||||||
|
Assert.Fail($"{result} should not have a value");
|
||||||
|
});
|
||||||
Assert.That(exception.Message, Is.EqualTo("Property read StepSize is not implemented in this driver."));
|
Assert.That(exception.Message, Is.EqualTo("Property read StepSize is not implemented in this driver."));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,7 +464,11 @@ namespace Meade.net.Focuser.UnitTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void Temperature_WhenCalled_ThenThrowsException()
|
public void Temperature_WhenCalled_ThenThrowsException()
|
||||||
{
|
{
|
||||||
var exception = Assert.Throws<PropertyNotImplementedException>(() => { var result = _focuser.Temperature; });
|
var exception = Assert.Throws<PropertyNotImplementedException>(() =>
|
||||||
|
{
|
||||||
|
var result = _focuser.Temperature;
|
||||||
|
Assert.Fail($"{result} should not have a value");
|
||||||
|
});
|
||||||
Assert.That(exception.Message, Is.EqualTo("Property read Temperature is not implemented in this driver."));
|
Assert.That(exception.Message, Is.EqualTo("Property read Temperature is not implemented in this driver."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@@ -71,8 +71,8 @@
|
|||||||
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Moq, Version=4.12.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
<Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Moq.4.12.0\lib\net45\Moq.dll</HintPath>
|
<HintPath>..\packages\Moq.4.13.0\lib\net45\Moq.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
@@ -80,8 +80,8 @@
|
|||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
|||||||
@@ -6,6 +6,10 @@
|
|||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||||
|
</dependentAssembly>
|
||||||
</assemblyBinding>
|
</assemblyBinding>
|
||||||
</runtime>
|
</runtime>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="ASCOM.Platform" version="6.4.2" targetFramework="net472" />
|
<package id="ASCOM.Platform" version="6.4.2" targetFramework="net472" />
|
||||||
<package id="Castle.Core" version="4.4.0" targetFramework="net472" />
|
<package id="Castle.Core" version="4.4.0" targetFramework="net472" />
|
||||||
<package id="Moq" version="4.12.0" targetFramework="net472" />
|
<package id="Moq" version="4.13.0" targetFramework="net472" />
|
||||||
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
||||||
Binary file not shown.
@@ -18,41 +18,6 @@
|
|||||||
Vital="yes"
|
Vital="yes"
|
||||||
Assembly=".net"
|
Assembly=".net"
|
||||||
AssemblyApplication="filFocuserDriverAssembly" />
|
AssemblyApplication="filFocuserDriverAssembly" />
|
||||||
<!-- Registry entries suitable for a LocalServer served class -->
|
|
||||||
<!-- HKCR\CLSID\{driver-guid} -->
|
|
||||||
<RegistryKey Root="HKCR" Key="CLSID">
|
|
||||||
<RegistryKey Key="$(var.FocuserDriverClassId)">
|
|
||||||
<RegistryValue Value="$(var.FocuserDriverProgId)" Type="string"/>
|
|
||||||
<RegistryValue Name="AppId" Value="$(var.LocalServerAppId)" Type="string"/>
|
|
||||||
<RegistryKey Key="Implemented Categories">
|
|
||||||
<RegistryKey Key="{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}"
|
|
||||||
ForceCreateOnInstall="yes"
|
|
||||||
ForceDeleteOnUninstall="yes"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Key="ProgId">
|
|
||||||
<RegistryValue Value="$(var.FocuserDriverProgId)" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Key="Programmable"
|
|
||||||
ForceCreateOnInstall="yes"
|
|
||||||
ForceDeleteOnUninstall="yes" />
|
|
||||||
<RegistryKey Key="LocalServer32">
|
|
||||||
<RegistryValue Value="[#filLocalServerAssembly]" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
|
|
||||||
<!-- HKCR\{driver-prog-id} -->
|
|
||||||
<RegistryKey Root="HKCR" Key="$(var.FocuserDriverProgId)">
|
|
||||||
<RegistryValue Value="$(var.FocuserDriverDescription)" Type="string"/>
|
|
||||||
<RegistryKey Key="CLSID">
|
|
||||||
<RegistryValue Value="$(var.FocuserDriverClassId)" Type="string" />
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
|
|
||||||
<!--Register the driver with the ASCOM Profile-->
|
|
||||||
<RegistryKey Root="HKLM" Key="SOFTWARE\ASCOM\Focuser Drivers\$(var.FocuserDriverProgId)">
|
|
||||||
<RegistryValue Value="$(var.FocuserDriverDescription)" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
</Component>
|
</Component>
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
|
|||||||
@@ -12,21 +12,31 @@
|
|||||||
Assembly=".net"
|
Assembly=".net"
|
||||||
AssemblyApplication="filLocalServerAssembly" />
|
AssemblyApplication="filLocalServerAssembly" />
|
||||||
</Component>
|
</Component>
|
||||||
<Component Id="cmpLocalServerRegistry" Win64="no">
|
|
||||||
<!-- LocalServer32 COM Registration -->
|
|
||||||
<RegistryKey Root="HKCR" Key="AppID" >
|
|
||||||
<!-- HKCR\AppID\{my-app-id} -->
|
|
||||||
<RegistryKey Key="$(var.LocalServerAppId)">
|
|
||||||
<RegistryValue Value="$(var.InstallName)" Type="string"/>
|
|
||||||
<RegistryValue Name="AppID" Value="$(var.LocalServerAppId)" Type="string"/>
|
|
||||||
<RegistryValue Name="AuthenticationLevel" Value="1" Type="integer"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<!-- HKCR\AppID\{exe-name} -->
|
|
||||||
<RegistryKey Key="$(var.Meade.net.TargetFileName)">
|
|
||||||
<RegistryValue Name="AppID" Value="$(var.LocalServerAppId)" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
</Component>
|
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
|
|
||||||
|
<CustomAction Id="RegisterEXE"
|
||||||
|
Directory="INSTALLFOLDER"
|
||||||
|
ExeCommand=""[#filLocalServerAssembly]" /register"
|
||||||
|
Execute="deferred"
|
||||||
|
Return="ignore"
|
||||||
|
Impersonate="no"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<CustomAction Id="UnRegisterEXE"
|
||||||
|
Directory="INSTALLFOLDER"
|
||||||
|
ExeCommand=""[#filLocalServerAssembly]" /unregister"
|
||||||
|
Execute="deferred"
|
||||||
|
Return="ignore"
|
||||||
|
Impersonate="no"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<InstallExecuteSequence>
|
||||||
|
<Custom Action='RegisterEXE' Before="InstallFinalize">
|
||||||
|
<![CDATA[(NOT Installed)]]>
|
||||||
|
</Custom>
|
||||||
|
<Custom Action="UnRegisterEXE" After="InstallInitialize">
|
||||||
|
<![CDATA[(REMOVE ~= "ALL" AND NOT UPGRADINGPRODUCTCODE)]]>
|
||||||
|
</Custom>
|
||||||
|
</InstallExecuteSequence>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
</Wix>
|
</Wix>
|
||||||
@@ -18,41 +18,6 @@
|
|||||||
Vital="yes"
|
Vital="yes"
|
||||||
Assembly=".net"
|
Assembly=".net"
|
||||||
AssemblyApplication="filTelescopeDriverAssembly" />
|
AssemblyApplication="filTelescopeDriverAssembly" />
|
||||||
<!-- Registry entries suitable for a LocalServer served class -->
|
|
||||||
<!-- HKCR\CLSID\{driver-guid} -->
|
|
||||||
<RegistryKey Root="HKCR" Key="CLSID">
|
|
||||||
<RegistryKey Key="$(var.TelescopeDriverClassId)">
|
|
||||||
<RegistryValue Value="$(var.TelescopeDriverProgId)" Type="string"/>
|
|
||||||
<RegistryValue Name="AppId" Value="$(var.LocalServerAppId)" Type="string"/>
|
|
||||||
<RegistryKey Key="Implemented Categories">
|
|
||||||
<RegistryKey Key="{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}"
|
|
||||||
ForceCreateOnInstall="yes"
|
|
||||||
ForceDeleteOnUninstall="yes"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Key="ProgId">
|
|
||||||
<RegistryValue Value="$(var.TelescopeDriverProgId)" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<RegistryKey Key="Programmable"
|
|
||||||
ForceCreateOnInstall="yes"
|
|
||||||
ForceDeleteOnUninstall="yes" />
|
|
||||||
<RegistryKey Key="LocalServer32">
|
|
||||||
<RegistryValue Value="[#filLocalServerAssembly]" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
|
|
||||||
<!-- HKCR\{driver-prog-id} -->
|
|
||||||
<RegistryKey Root="HKCR" Key="$(var.TelescopeDriverProgId)">
|
|
||||||
<RegistryValue Value="$(var.TelescopeDriverDescription)" Type="string"/>
|
|
||||||
<RegistryKey Key="CLSID">
|
|
||||||
<RegistryValue Value="$(var.TelescopeDriverClassId)" Type="string" />
|
|
||||||
</RegistryKey>
|
|
||||||
</RegistryKey>
|
|
||||||
|
|
||||||
<!--Register the driver with the ASCOM Profile-->
|
|
||||||
<RegistryKey Root="HKLM" Key="SOFTWARE\ASCOM\Telescope Drivers\$(var.TelescopeDriverProgId)">
|
|
||||||
<RegistryValue Value="$(var.TelescopeDriverDescription)" Type="string"/>
|
|
||||||
</RegistryKey>
|
|
||||||
</Component>
|
</Component>
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
|
|||||||
@@ -25,9 +25,9 @@
|
|||||||
<![CDATA[Installed OR ASCOMPLATFORMVERSION >= "6.4.1"]]>
|
<![CDATA[Installed OR ASCOMPLATFORMVERSION >= "6.4.1"]]>
|
||||||
</Condition>
|
</Condition>
|
||||||
|
|
||||||
<PropertyRef Id="NETFRAMEWORK40FULL"/>
|
<PropertyRef Id="NETFRAMEWORK45"/>
|
||||||
<Condition Message="This application requires .NET Framework 4.0 or higher. Please install the .NET Framework then run this installer again.">
|
<Condition Message="This application requires .NET Framework 4.5 or higher. Please install the .NET Framework then run this installer again.">
|
||||||
<![CDATA[Installed OR NETFRAMEWORK40FULL]]>
|
<![CDATA[Installed OR NETFRAMEWORK45]]>
|
||||||
</Condition>
|
</Condition>
|
||||||
|
|
||||||
<!-- <Condition Message="Please use the correct installer for your operating system - x86 for 32-bit, x64 for 64-bit.">
|
<!-- <Condition Message="Please use the correct installer for your operating system - x86 for 32-bit, x64 for 64-bit.">
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@@ -92,8 +92,8 @@
|
|||||||
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Moq, Version=4.12.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
<Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Moq.4.12.0\lib\net45\Moq.dll</HintPath>
|
<HintPath>..\packages\Moq.4.13.0\lib\net45\Moq.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NUnit.3.12.0\lib\net40\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.3.12.0\lib\net40\nunit.framework.dll</HintPath>
|
||||||
@@ -101,8 +101,8 @@
|
|||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
|||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
|
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||||
</dependentAssembly>
|
</dependentAssembly>
|
||||||
<dependentAssembly>
|
<dependentAssembly>
|
||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
<packages>
|
<packages>
|
||||||
<package id="ASCOM.Platform" version="6.4.2" targetFramework="net472" />
|
<package id="ASCOM.Platform" version="6.4.2" targetFramework="net472" />
|
||||||
<package id="Castle.Core" version="4.4.0" targetFramework="net45" />
|
<package id="Castle.Core" version="4.4.0" targetFramework="net45" />
|
||||||
<package id="Moq" version="4.12.0" targetFramework="net45" />
|
<package id="Moq" version="4.13.0" targetFramework="net472" />
|
||||||
<package id="NUnit" version="3.12.0" targetFramework="net40" requireReinstallation="true" />
|
<package id="NUnit" version="3.12.0" targetFramework="net40" requireReinstallation="true" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net45" requireReinstallation="true" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
||||||
@@ -9,7 +9,7 @@ namespace ASCOM.Meade.net.AstroMaths
|
|||||||
//returns the decimal hour angle for given right ascension on a given datetime for a given logitude.
|
//returns the decimal hour angle for given right ascension on a given datetime for a given logitude.
|
||||||
public double RightAscensionToHourAngle(DateTime utcDateTime, double longitude, double rightAscension)
|
public double RightAscensionToHourAngle(DateTime utcDateTime, double longitude, double rightAscension)
|
||||||
{
|
{
|
||||||
var ut = DateTimeToDecimalHours( utcDateTime);
|
//var ut = DateTimeToDecimalHours( utcDateTime);
|
||||||
var gst = UTtoGst( utcDateTime);
|
var gst = UTtoGst( utcDateTime);
|
||||||
var lst = GsTtoLst( gst, longitude);
|
var lst = GsTtoLst( gst, longitude);
|
||||||
var raHours = rightAscension;
|
var raHours = rightAscension;
|
||||||
@@ -22,7 +22,7 @@ namespace ASCOM.Meade.net.AstroMaths
|
|||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double HourAngleToRightAscension(DateTime utcDateTime, double longitude, double hourAngle )
|
private double HourAngleToRightAscension(DateTime utcDateTime, double longitude, double hourAngle )
|
||||||
{
|
{
|
||||||
var gst = UTtoGst(utcDateTime);
|
var gst = UTtoGst(utcDateTime);
|
||||||
var lst = GsTtoLst( gst, longitude);
|
var lst = GsTtoLst( gst, longitude);
|
||||||
@@ -82,10 +82,11 @@ namespace ASCOM.Meade.net.AstroMaths
|
|||||||
var upperA = Math.Atan2(y, x);
|
var upperA = Math.Atan2(y, x);
|
||||||
var upperB = RadiansToDegrees(upperA);
|
var upperB = RadiansToDegrees(upperA);
|
||||||
|
|
||||||
var horizonCoordinates = new HorizonCoordinates();
|
var horizonCoordinates = new HorizonCoordinates
|
||||||
horizonCoordinates.Altitude = RadiansToDegrees(Math.Asin(sinA));
|
{
|
||||||
|
Altitude = RadiansToDegrees(Math.Asin(sinA)), Azimuth = upperB
|
||||||
|
};
|
||||||
|
|
||||||
horizonCoordinates.Azimuth = upperB;
|
|
||||||
|
|
||||||
if (upperB < 0)
|
if (upperB < 0)
|
||||||
{
|
{
|
||||||
@@ -106,7 +107,7 @@ namespace ASCOM.Meade.net.AstroMaths
|
|||||||
public double RadiansToDegrees(double radians)
|
public double RadiansToDegrees(double radians)
|
||||||
{
|
{
|
||||||
double degrees = (180 / Math.PI) * radians;
|
double degrees = (180 / Math.PI) * radians;
|
||||||
return (degrees);
|
return degrees;
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo convert to extension method
|
//todo convert to extension method
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ namespace ASCOM.Meade.net.AstroMaths
|
|||||||
public interface IAstroMaths
|
public interface IAstroMaths
|
||||||
{
|
{
|
||||||
double RightAscensionToHourAngle(DateTime utcDateTime, double longitude, double rightAscension);
|
double RightAscensionToHourAngle(DateTime utcDateTime, double longitude, double rightAscension);
|
||||||
double HourAngleToRightAscension(DateTime utcDateTime, double longitude, double hourAngle );
|
//double HourAngleToRightAscension(DateTime utcDateTime, double longitude, double hourAngle );
|
||||||
EquatorialCoordinates ConvertHozToEq( DateTime utcDateTime, double latitude, double longitude, HorizonCoordinates altAz);
|
EquatorialCoordinates ConvertHozToEq( DateTime utcDateTime, double latitude, double longitude, HorizonCoordinates altAz);
|
||||||
HorizonCoordinates ConvertEqToHoz(double hourAngle, double latitude, EquatorialCoordinates raDec);
|
HorizonCoordinates ConvertEqToHoz(double hourAngle, double latitude, EquatorialCoordinates raDec);
|
||||||
double DegreesToRadians(double degrees);
|
//double DegreesToRadians(double degrees);
|
||||||
double RadiansToDegrees(double radians);
|
//double RadiansToDegrees(double radians);
|
||||||
double DateTimeToDecimalHours( DateTime utcDateTime);
|
//double DateTimeToDecimalHours( DateTime utcDateTime);
|
||||||
double UTtoGst(DateTime utcDateTime);
|
//double UTtoGst(DateTime utcDateTime);
|
||||||
double GsTtoLst(double gst, double longitude);
|
//double GsTtoLst(double gst, double longitude);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace ASCOM.Meade.net
|
||||||
|
{
|
||||||
|
public enum ComparisonResult
|
||||||
|
{
|
||||||
|
Lower,
|
||||||
|
Equals,
|
||||||
|
Greater
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,5 +10,18 @@ namespace ASCOM.Meade.net
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ComparisonResult Compare(this double value, double comparison)
|
||||||
|
{
|
||||||
|
var result = value.CompareTo(comparison);
|
||||||
|
|
||||||
|
if (result < 0)
|
||||||
|
return ComparisonResult.Lower;
|
||||||
|
|
||||||
|
if (result == 0)
|
||||||
|
return ComparisonResult.Equals;
|
||||||
|
|
||||||
|
return ComparisonResult.Greater;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<UpgradeBackupLocation>
|
<UpgradeBackupLocation>
|
||||||
</UpgradeBackupLocation>
|
</UpgradeBackupLocation>
|
||||||
<OldToolsVersion>3.5</OldToolsVersion>
|
<OldToolsVersion>3.5</OldToolsVersion>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<ApplicationIcon>ASCOM.ico</ApplicationIcon>
|
<ApplicationIcon>ASCOM.ico</ApplicationIcon>
|
||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>ASCOMDriverTemplate.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>ASCOMDriverTemplate.snk</AssemblyOriginatorKeyFile>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<RegisterForComInterop>true</RegisterForComInterop>
|
<RegisterForComInterop>true</RegisterForComInterop>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
@@ -62,10 +62,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
<OutputPath>..\bin\Release\</OutputPath>
|
<OutputPath>..\bin\Release\</OutputPath>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
<OutputPath>..\bin\Debug\</OutputPath>
|
<OutputPath>..\bin\Debug\</OutputPath>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
@@ -118,6 +120,7 @@
|
|||||||
<Compile Include="AstroMaths\EquatorialCoordinates.cs" />
|
<Compile Include="AstroMaths\EquatorialCoordinates.cs" />
|
||||||
<Compile Include="AstroMaths\HorizonCoordinates.cs" />
|
<Compile Include="AstroMaths\HorizonCoordinates.cs" />
|
||||||
<Compile Include="AstroMaths\IAstroMaths.cs" />
|
<Compile Include="AstroMaths\IAstroMaths.cs" />
|
||||||
|
<Compile Include="ComparisonResult.cs" />
|
||||||
<Compile Include="DoubleExtensions.cs" />
|
<Compile Include="DoubleExtensions.cs" />
|
||||||
<Compile Include="StringExtensions.cs" />
|
<Compile Include="StringExtensions.cs" />
|
||||||
<Compile Include="Telescope.cs" />
|
<Compile Include="Telescope.cs" />
|
||||||
@@ -152,7 +155,6 @@
|
|||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using System.Runtime.InteropServices;
|
|||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
// 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
|
// to COM components. If you need to access a type in this assembly from
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
[assembly: ComVisible(true)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
[assembly: Guid("8b9fccb9-87ae-42f7-90af-079e13de6efb")]
|
[assembly: Guid("8b9fccb9-87ae-42f7-90af-079e13de6efb")]
|
||||||
|
|||||||
@@ -79,5 +79,32 @@ namespace ASCOM.Meade.net.Properties {
|
|||||||
return ((System.Drawing.Icon)(obj));
|
return ((System.Drawing.Icon)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Site out of range.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Telescope_GetSiteName_Site_out_of_range {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Telescope_GetSiteName_Site_out_of_range", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Site cannot be higher than 4.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Telescope_SelectSite_Site_cannot_be_higher_than_4 {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Telescope_SelectSite_Site_cannot_be_higher_than_4", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Site cannot be lower than 1.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Telescope_SelectSite_Site_cannot_be_lower_than_1 {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Telescope_SelectSite_Site_cannot_be_lower_than_1", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,4 +124,13 @@
|
|||||||
<data name="DefaultIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<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>
|
<value>..\ASCOM.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Telescope_SelectSite_Site_cannot_be_lower_than_1" xml:space="preserve">
|
||||||
|
<value>Site cannot be lower than 1</value>
|
||||||
|
</data>
|
||||||
|
<data name="Telescope_SelectSite_Site_cannot_be_higher_than_4" xml:space="preserve">
|
||||||
|
<value>Site cannot be higher than 4</value>
|
||||||
|
</data>
|
||||||
|
<data name="Telescope_GetSiteName_Site_out_of_range" xml:space="preserve">
|
||||||
|
<value>Site out of range</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Runtime.InteropServices;
|
using System.Collections;
|
||||||
using ASCOM.DeviceInterface;
|
using System.Runtime.InteropServices;
|
||||||
using System.Collections;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using ASCOM.DeviceInterface;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -19,17 +19,14 @@ namespace ASCOM.Meade.net
|
|||||||
[ComVisible(true)]
|
[ComVisible(true)]
|
||||||
public class Rate : IRate
|
public class Rate : IRate
|
||||||
{
|
{
|
||||||
private double _maximum = 0;
|
|
||||||
private double _minimum = 0;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Default constructor - Internal prevents public creation
|
// Default constructor - Internal prevents public creation
|
||||||
// of instances. These are values for AxisRates.
|
// of instances. These are values for AxisRates.
|
||||||
//
|
//
|
||||||
internal Rate(double minimum, double maximum)
|
internal Rate(double minimum, double maximum)
|
||||||
{
|
{
|
||||||
_maximum = maximum;
|
Maximum = maximum;
|
||||||
_minimum = minimum;
|
Minimum = minimum;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Implementation of IRate
|
#region Implementation of IRate
|
||||||
@@ -39,17 +36,9 @@ namespace ASCOM.Meade.net
|
|||||||
// TODO Add any required object cleanup here
|
// TODO Add any required object cleanup here
|
||||||
}
|
}
|
||||||
|
|
||||||
public double Maximum
|
public double Maximum { get; set; }
|
||||||
{
|
|
||||||
get => _maximum;
|
|
||||||
set => _maximum = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double Minimum
|
public double Minimum { get; set; }
|
||||||
{
|
|
||||||
get => _minimum;
|
|
||||||
set => _minimum = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -93,16 +82,17 @@ namespace ASCOM.Meade.net
|
|||||||
switch (axis)
|
switch (axis)
|
||||||
{
|
{
|
||||||
case TelescopeAxes.axisPrimary:
|
case TelescopeAxes.axisPrimary:
|
||||||
|
case TelescopeAxes.axisSecondary:
|
||||||
// TODO Initialize this array with any Primary axis rates that your driver may provide
|
// 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) }
|
// Example: m_Rates = new Rate[] { new Rate(10.5, 30.2), new Rate(54.0, 43.6) }
|
||||||
//this.rates = new Rate[0];
|
//this.rates = new Rate[0];
|
||||||
_rates = new Rate[] { new Rate(1, 1), new Rate(2, 2), new Rate(3, 3), new Rate(4, 4) };
|
_rates = new[] { new Rate(1, 1), new Rate(2, 2), new Rate(3, 3), new Rate(4, 4) };
|
||||||
break;
|
|
||||||
case TelescopeAxes.axisSecondary:
|
|
||||||
// TODO Initialize this array with any Secondary axis rates that your driver may provide
|
|
||||||
//this.rates = new Rate[0];
|
|
||||||
_rates = new Rate[] { new Rate(1, 1), new Rate(2, 2), new Rate(3, 3), new Rate(4, 4) };
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//// TODO Initialize this array with any Secondary axis rates that your driver may provide
|
||||||
|
////this.rates = new Rate[0];
|
||||||
|
//_rates = new[] { new Rate(1, 1), new Rate(2, 2), new Rate(3, 3), new Rate(4, 4) };
|
||||||
|
//break;
|
||||||
case TelescopeAxes.axisTertiary:
|
case TelescopeAxes.axisTertiary:
|
||||||
// TODO Initialize this array with any Tertiary axis rates that your driver may provide
|
// TODO Initialize this array with any Tertiary axis rates that your driver may provide
|
||||||
_rates = new Rate[0];
|
_rates = new Rate[0];
|
||||||
@@ -152,7 +142,7 @@ namespace ASCOM.Meade.net
|
|||||||
private readonly DriveRates[] _trackingRates;
|
private readonly DriveRates[] _trackingRates;
|
||||||
|
|
||||||
// this is used to make the index thread safe
|
// this is used to make the index thread safe
|
||||||
private readonly ThreadLocal<int> _pos = new ThreadLocal<int>(() => { return -1; });
|
private readonly ThreadLocal<int> _pos = new ThreadLocal<int>(() => -1);
|
||||||
private static readonly object LockObj = new object();
|
private static readonly object LockObj = new object();
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -176,8 +166,12 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
public IEnumerator GetEnumerator()
|
public IEnumerator GetEnumerator()
|
||||||
{
|
{
|
||||||
_pos.Value = -1;
|
lock (LockObj)
|
||||||
return this as IEnumerator;
|
{
|
||||||
|
_pos.Value = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -220,7 +214,10 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
_pos.Value = -1;
|
lock (LockObj)
|
||||||
|
{
|
||||||
|
_pos.Value = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
|
|
||||||
<META NAME="CREATED" CONTENT="0;0">
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland">
|
|
||||||
<META NAME="CHANGED" CONTENT="20110918;14150500">
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
TD P.note { background: #33ffff; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P.underline { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal; text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>ASCOM Telescope Driver (C#)</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
<H4>You have just created the skeleton of an ASCOM
|
|
||||||
Telescope driver in C#. It produces an in-process
|
|
||||||
(assembly) based driver.</H4>
|
|
||||||
<HR>
|
|
||||||
<P CLASS="note">Prior to developing your first driver, please
|
|
||||||
familiarize yourself with the <A HREF="http://ascom-standards.org/developer.html">developer
|
|
||||||
information we've provided</A> at the ASCOM Initiative web site
|
|
||||||
(internet required).
|
|
||||||
</P>
|
|
||||||
<P CLASS="underline">You must do the following in order to complete
|
|
||||||
your implementation:</P>
|
|
||||||
<OL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Switch to the Debug configuration
|
|
||||||
and build the template now. It should build without errors.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Add a test project to the
|
|
||||||
solution. There are templates that can be used to add either a
|
|
||||||
console or a Windows Forms application:</P>
|
|
||||||
</OL>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Select the <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Forms App (CS)</FONT> or <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Console App (CS)</FONT> template.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set a name for the test
|
|
||||||
application and click on OK.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">In the Wizard: set the same device
|
|
||||||
type and model name as for the driver and select Create to build the
|
|
||||||
test project.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set the Test Application to Run at
|
|
||||||
Startup.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Click on Debug and the test
|
|
||||||
application should run. You should be able to select your
|
|
||||||
application in the chooser. Selecting Properties should show the
|
|
||||||
default setup dialog for your driver.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Trying to continue will generate
|
|
||||||
errors because the additional properties have not been implemented.</P>
|
|
||||||
</UL>
|
|
||||||
<OL START=4>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Go through the Driver.cs file and
|
|
||||||
replace the System.NotImplemented exceptions with code to implement
|
|
||||||
your driver's functionality. See the ASCOM ITelescopeV3
|
|
||||||
spec. If a property or method is not implemented in your driver the
|
|
||||||
System.NotImplemented exception must be replaced by an
|
|
||||||
ASCOM.PropertyNotImplemented or ASCOM.MethodNotImplemented
|
|
||||||
exception.</P>
|
|
||||||
<LI><P>Customize the Setup Dialog (SetupDialogForm) to provide the
|
|
||||||
settings and other controls for your driver. You can bind settings
|
|
||||||
directly to controls on your dialog form, there's no need to manage
|
|
||||||
settings manually. A custom Settings class takes care of managing
|
|
||||||
your settings behind the scenes.
|
|
||||||
</P>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes:</H3>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Successfully building the driver,
|
|
||||||
as well as using <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm</FONT>
|
|
||||||
on the assembly, registers it for both COM and ASCOM (the Chooser).
|
|
||||||
See the code in the ASCOM Registration region of Driver.vb.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Doing a Clean for the project, as
|
|
||||||
well doing a <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm
|
|
||||||
-u</FONT> on the assembly, unregisters it for both COM and ASCOM
|
|
||||||
(the Chooser).
|
|
||||||
</P>
|
|
||||||
<LI><P>Place a breakpoint in your driver class constructor, then
|
|
||||||
start debugging (go, F5). Your breakpoint will be hit when the test
|
|
||||||
application creates an instance of your driver (after selecting it
|
|
||||||
in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and make changes and additions to
|
|
||||||
activate various parts of your driver during debugging.</P>
|
|
||||||
<LI><P>The project's Debug configuration is already configured (The
|
|
||||||
test application creates an instance of your driver (after selecting
|
|
||||||
it in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and feel free to make changes and
|
|
||||||
additions to activate various parts of your driver during debugging.
|
|
||||||
</P>
|
|
||||||
</UL>
|
|
||||||
<DIV ALIGN=RIGHT>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN=RIGHT WIDTH=48 HEIGHT=56 BORDER=0></TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>See the <A HREF="http://ascom-standards.org/" TARGET="browser">ASCOM
|
|
||||||
web site</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">ASCOM-Talk
|
|
||||||
Yahoo Group</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P><P>
|
|
||||||
<BR><BR>
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
@@ -7,10 +7,10 @@ namespace ASCOM.Meade.net
|
|||||||
return int.Parse(str);
|
return int.Parse(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double ToDouble(this string str)
|
//public static double ToDouble(this string str)
|
||||||
{
|
//{
|
||||||
return double.Parse(str);
|
// return double.Parse(str);
|
||||||
}
|
//}
|
||||||
|
|
||||||
public static int Position(this string str, char find, int instance)
|
public static int Position(this string str, char find, int instance)
|
||||||
{
|
{
|
||||||
|
|||||||
+444
-325
File diff suppressed because it is too large
Load Diff
@@ -5,4 +5,4 @@
|
|||||||
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
|
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
|
||||||
</sectionGroup>
|
</sectionGroup>
|
||||||
</configSections>
|
</configSections>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<#
|
||||||
|
This script initializes a bare minimum set of registry entries required for ASCOM.Utilities.Profile to work
|
||||||
|
without throwing any exceptions. When building on a build server, or on a computer without the ASCOM Platform installed,
|
||||||
|
it may be useful to execute this script as a build step prior to running any unit tests, or calling any code that relies on
|
||||||
|
ASCOM.Utilities.Profile. The alternative is to install the ASCOM Platform on the build agent.
|
||||||
|
|
||||||
|
NOTE: This script equires elevated permissions because it creates registry keys in the LocalMachine hive.
|
||||||
|
#>
|
||||||
|
|
||||||
|
$wow = Test-Path HKLM:\SOFTWARE\Wow6432Node
|
||||||
|
if ($wow)
|
||||||
|
{
|
||||||
|
$root = "HKLM:\SOFTWARE\Wow6432Node"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$root = "HKLM:\SOFTWARE"
|
||||||
|
}
|
||||||
|
$ascomRoot = $root + "\ASCOM"
|
||||||
|
|
||||||
|
if (Test-Path $ascomRoot)
|
||||||
|
{
|
||||||
|
<# Don't upset an already-existing ASCOM registry #>
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
<# Create the ASCOM root key and set it's ACL to allow all users read/write access #>
|
||||||
|
New-Item -Path $root -Name ASCOM –Force
|
||||||
|
$ascomAcl = Get-Acl $ascomRoot
|
||||||
|
$aclRule = New-Object System.Security.AccessControl.RegistryAccessRule ("Users","FullControl","Allow")
|
||||||
|
$ascomAcl.SetAccessRule($aclRule)
|
||||||
|
$ascomAcl | Set-Acl -Path $ascomRoot
|
||||||
|
|
||||||
|
<# Now create the bare minimum keys required so that ASCOM.Utilities.Profile doesn't crash and burn #>
|
||||||
|
New-ItemProperty -Path $ascomRoot -Name PlatformVersion -Value "6.1" -PropertyType String –Force
|
||||||
|
New-ItemProperty -Path $ascomRoot -Name SerTraceFile -Value "C:\SerialTraceAuto.txt" -PropertyType String –Force
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Meade.net.UnitTests</RootNamespace>
|
||||||
|
<AssemblyName>Meade.net.UnitTests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Astrometry.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Attributes, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Attributes.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Cache, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Cache.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Controls, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Controls.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.DeviceInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DeviceInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.DriverAccess, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DriverAccess.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Exceptions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Exceptions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Internal.Extensions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Internal.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.SettingsProvider, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.SettingsProvider.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Utilities, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ASCOM.Utilities.Video, Version=6.1.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.Video.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Moq, Version=4.13.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Moq.4.13.0\lib\net45\Moq.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="nunit.framework, Version=3.12.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="SharedResourcesUnitTests.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Meade.net\Meade.net.csproj">
|
||||||
|
<Project>{3689a2cb-94c5-4012-a5cf-7e7d1dd27143}</Project>
|
||||||
|
<Name>Meade.net</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="BootstrapAscomProfileStore.ps1" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" />
|
||||||
|
</Target>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
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.
|
||||||
|
[assembly: AssemblyTitle("Meade.net.UnitTests")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Meade.net.UnitTests")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||||
|
[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(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("21ef28b4-d574-4a2d-a61d-5df96af46ab2")]
|
||||||
|
|
||||||
|
// 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 Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
@@ -0,0 +1,320 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using ASCOM.Meade.net;
|
||||||
|
using ASCOM.Meade.net.Wrapper;
|
||||||
|
using ASCOM.Utilities.Interfaces;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace Meade.net.UnitTests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class SharedResourcesUnitTests
|
||||||
|
{
|
||||||
|
private Mock<ISerial> _serialMock;
|
||||||
|
private Mock<ITraceLogger> _traceLoggerMock;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
_serialMock = new Mock<ISerial>();
|
||||||
|
_serialMock.SetupAllProperties();
|
||||||
|
|
||||||
|
_traceLoggerMock = new Mock<ITraceLogger>();
|
||||||
|
|
||||||
|
SharedResources.SharedSerial = _serialMock.Object;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CheckThatSerialPortIsSetToUseMock()
|
||||||
|
{
|
||||||
|
Assert.That(SharedResources.SharedSerial,Is.EqualTo(_serialMock.Object));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SendBlind_WhenCalled_Then_ClearsBuffersAndSendsMessage()
|
||||||
|
{
|
||||||
|
var expectedMessage = "Test";
|
||||||
|
|
||||||
|
SharedResources.SendBlind(expectedMessage);
|
||||||
|
|
||||||
|
_serialMock.Verify(x=> x.ClearBuffers(), Times.Once);
|
||||||
|
_serialMock.Verify(x=>x.Transmit(expectedMessage), Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SendChar_WhenCalled_ThenSendsMessageAndReadsExpectedNumberOfCharacters()
|
||||||
|
{
|
||||||
|
var expectedMessage = "Test";
|
||||||
|
var expectedResult = "A";
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.ReceiveCounted(1)).Returns(expectedResult);
|
||||||
|
|
||||||
|
var result = SharedResources.SendChar(expectedMessage);
|
||||||
|
|
||||||
|
_serialMock.Verify(x => x.ClearBuffers(), Times.Once);
|
||||||
|
_serialMock.Verify(x => x.Transmit(expectedMessage), Times.Once);
|
||||||
|
_serialMock.Verify(x => x.ReceiveCounted(1), Times.Once);
|
||||||
|
Assert.That(result, Is.EqualTo(expectedResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SendString_WhenCalled_ThenSendsMessageAndReadsResultUntilTerminatorFound()
|
||||||
|
{
|
||||||
|
var expectedMessage = "Test";
|
||||||
|
var expectedResult = "TestMessage#";
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(expectedResult);
|
||||||
|
|
||||||
|
var result = SharedResources.SendString(expectedMessage);
|
||||||
|
|
||||||
|
_serialMock.Verify(x => x.ClearBuffers(), Times.Once);
|
||||||
|
_serialMock.Verify(x => x.Transmit(expectedMessage), Times.Once);
|
||||||
|
_serialMock.Verify(x => x.ReceiveTerminated("#"), Times.Once);
|
||||||
|
Assert.That(result, Is.EqualTo(expectedResult.TrimEnd('#')));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ReadTerminated_WhenCalled_ThenReadsResultUntilTerminatorFound()
|
||||||
|
{
|
||||||
|
var expectedResult = "TestMessage#";
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(expectedResult);
|
||||||
|
|
||||||
|
var result = SharedResources.ReadTerminated();
|
||||||
|
|
||||||
|
_serialMock.Verify(x => x.ReceiveTerminated("#"), Times.Once);
|
||||||
|
Assert.That(result, Is.EqualTo(expectedResult));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ReadCharacters_WhenCalled_ThenReadsSpecificNumberOfCharacters()
|
||||||
|
{
|
||||||
|
var numberOfCharacters = 5;
|
||||||
|
|
||||||
|
SharedResources.ReadCharacters(numberOfCharacters);
|
||||||
|
|
||||||
|
_serialMock.Verify(x => x.ReceiveCounted(numberOfCharacters), Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void WriteProfile_WhenCalled_WritesExpectedProfileSettings()
|
||||||
|
{
|
||||||
|
string DriverId = "ASCOM.MeadeGeneric.Telescope";
|
||||||
|
|
||||||
|
Mock<IProfileWrapper> profileWrapperMock = new Mock<IProfileWrapper>();
|
||||||
|
profileWrapperMock.SetupAllProperties();
|
||||||
|
|
||||||
|
IProfileWrapper profeWrapper = profileWrapperMock.Object;
|
||||||
|
|
||||||
|
Mock<IProfileFactory> profileFactoryMock = new Mock<IProfileFactory>();
|
||||||
|
profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object);
|
||||||
|
|
||||||
|
SharedResources.ProfileFactory = profileFactoryMock.Object;
|
||||||
|
|
||||||
|
var profileProperties = new ProfileProperties
|
||||||
|
{
|
||||||
|
TraceLogger = false,
|
||||||
|
ComPort = "TestComPort"
|
||||||
|
};
|
||||||
|
|
||||||
|
SharedResources.WriteProfile(profileProperties);
|
||||||
|
|
||||||
|
Assert.That(profeWrapper.DeviceType, Is.EqualTo("Telescope"));
|
||||||
|
profileWrapperMock.Verify( x => x.WriteValue(DriverId, "Trace Level", profileProperties.TraceLogger.ToString()), Times.Once);
|
||||||
|
profileWrapperMock.Verify(x => x.WriteValue(DriverId, "COM Port", profileProperties.ComPort), Times.Once);
|
||||||
|
profileWrapperMock.Verify(x => x.WriteValue(DriverId, "Guide Rate Arc Seconds Per Second", profileProperties.GuideRateArcSecondsPerSecond.ToString(CultureInfo.CurrentCulture)), Times.Once);
|
||||||
|
profileWrapperMock.Verify(x => x.WriteValue(DriverId, "Precision", profileProperties.Precision), Times.Once);
|
||||||
|
profileWrapperMock.Verify(x => x.WriteValue(DriverId, "Guiding Style", profileProperties.GuidingStyle), Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ReadProfile_WhenCalled_ReturnsExpectedDefaultValues()
|
||||||
|
{
|
||||||
|
string DriverId = "ASCOM.MeadeGeneric.Telescope";
|
||||||
|
|
||||||
|
string ComPortDefault = "COM1";
|
||||||
|
string TraceStateDefault = "false";
|
||||||
|
string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
||||||
|
string PrecisionDefault = "Unchanged";
|
||||||
|
string GuidingStyleDefault = "Auto";
|
||||||
|
|
||||||
|
Mock<IProfileWrapper> profileWrapperMock = new Mock<IProfileWrapper>();
|
||||||
|
profileWrapperMock.SetupAllProperties();
|
||||||
|
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(DriverId, "Trace Level", string.Empty, TraceStateDefault))
|
||||||
|
.Returns(TraceStateDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(DriverId, "COM Port", string.Empty, ComPortDefault))
|
||||||
|
.Returns(ComPortDefault);
|
||||||
|
profileWrapperMock
|
||||||
|
.Setup(x => x.GetValue(DriverId, "Guide Rate Arc Seconds Per Second", string.Empty,
|
||||||
|
GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(DriverId, "Precision", string.Empty, PrecisionDefault))
|
||||||
|
.Returns(PrecisionDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(DriverId, "Guiding Style", string.Empty, GuidingStyleDefault))
|
||||||
|
.Returns(GuidingStyleDefault);
|
||||||
|
|
||||||
|
IProfileWrapper profeWrapper = profileWrapperMock.Object;
|
||||||
|
|
||||||
|
Mock<IProfileFactory> profileFactoryMock = new Mock<IProfileFactory>();
|
||||||
|
profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object);
|
||||||
|
|
||||||
|
SharedResources.ProfileFactory = profileFactoryMock.Object;
|
||||||
|
|
||||||
|
var profileProperties = SharedResources.ReadProfile();
|
||||||
|
|
||||||
|
Assert.That(profeWrapper.DeviceType, Is.EqualTo("Telescope"));
|
||||||
|
Assert.That(profileProperties.ComPort, Is.EqualTo(ComPortDefault));
|
||||||
|
Assert.That(profileProperties.GuideRateArcSecondsPerSecond,
|
||||||
|
Is.EqualTo(double.Parse(GuideRateProfileNameDefault)));
|
||||||
|
Assert.That(profileProperties.TraceLogger, Is.EqualTo(bool.Parse(TraceStateDefault)));
|
||||||
|
Assert.That(profileProperties.Precision, Is.EqualTo(PrecisionDefault));
|
||||||
|
Assert.That(profileProperties.GuidingStyle, Is.EqualTo(GuidingStyleDefault));
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("TCP")]
|
||||||
|
[TestCase("Carrier Pigeon")]
|
||||||
|
public void Connect_WhenDeviceIdIsNotSerial_ThenThrowsException( string deviceId)
|
||||||
|
{
|
||||||
|
var result = Assert.Throws<ArgumentException>( () => { SharedResources.Connect(deviceId, string.Empty, _traceLoggerMock.Object); } );
|
||||||
|
|
||||||
|
Assert.That( result.Message, Is.EqualTo($"deviceId {deviceId} not currently supported") );
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Connect_WhenDeviceIdIsSerialButGVPEchos_ThenThrowsException()
|
||||||
|
{
|
||||||
|
string deviceId = "Serial";
|
||||||
|
|
||||||
|
string driverDriverId = "ASCOM.MeadeGeneric.Telescope";
|
||||||
|
|
||||||
|
string ComPortDefault = "COM1";
|
||||||
|
string TraceStateDefault = "false";
|
||||||
|
string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
||||||
|
string PrecisionDefault = "Unchanged";
|
||||||
|
|
||||||
|
Mock<IProfileWrapper> profileWrapperMock = new Mock<IProfileWrapper>();
|
||||||
|
profileWrapperMock.SetupAllProperties();
|
||||||
|
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault))
|
||||||
|
.Returns(TraceStateDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault))
|
||||||
|
.Returns(ComPortDefault);
|
||||||
|
profileWrapperMock
|
||||||
|
.Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty,
|
||||||
|
GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault))
|
||||||
|
.Returns(PrecisionDefault);
|
||||||
|
|
||||||
|
Mock<IProfileFactory> profileFactoryMock = new Mock<IProfileFactory>();
|
||||||
|
profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object);
|
||||||
|
|
||||||
|
SharedResources.ProfileFactory = profileFactoryMock.Object;
|
||||||
|
|
||||||
|
string serialPortReturn = string.Empty;
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { serialPortReturn = ":GVP#"; });
|
||||||
|
_serialMock.Setup(x => x.ReceiveTerminated("#")).Returns( () => serialPortReturn);
|
||||||
|
|
||||||
|
var result = Assert.Throws<Exception>(() => { SharedResources.Connect(deviceId, string.Empty, _traceLoggerMock.Object); });
|
||||||
|
Assert.That(result.Message, Is.EqualTo("Serial port is looping back data, something is wrong with the hardware."));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Connect_WhenDeviceIdIsSerialButGVPNotSupported_ThenConnectsAndSetsProductToLX200Classic()
|
||||||
|
{
|
||||||
|
string deviceId = "Serial";
|
||||||
|
|
||||||
|
string driverDriverId = "ASCOM.MeadeGeneric.Telescope";
|
||||||
|
|
||||||
|
string ComPortDefault = "COM1";
|
||||||
|
string TraceStateDefault = "false";
|
||||||
|
string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
||||||
|
string PrecisionDefault = "Unchanged";
|
||||||
|
|
||||||
|
Mock<IProfileWrapper> profileWrapperMock = new Mock<IProfileWrapper>();
|
||||||
|
profileWrapperMock.SetupAllProperties();
|
||||||
|
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault))
|
||||||
|
.Returns(TraceStateDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault))
|
||||||
|
.Returns(ComPortDefault);
|
||||||
|
profileWrapperMock
|
||||||
|
.Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty,
|
||||||
|
GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault))
|
||||||
|
.Returns(PrecisionDefault);
|
||||||
|
|
||||||
|
Mock<IProfileFactory> profileFactoryMock = new Mock<IProfileFactory>();
|
||||||
|
profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object);
|
||||||
|
|
||||||
|
SharedResources.ProfileFactory = profileFactoryMock.Object;
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { });
|
||||||
|
_serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(() => throw new Exception("Testerror"));
|
||||||
|
|
||||||
|
var connectionResult = SharedResources.Connect(deviceId, string.Empty, _traceLoggerMock.Object);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
Assert.That(connectionResult.SameDevice, Is.EqualTo(1));
|
||||||
|
Assert.That(SharedResources.ProductName, Is.EqualTo(TelescopeList.LX200CLASSIC));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
SharedResources.Disconnect(deviceId, String.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Connect_WhenDeviceIdIsSerialButGVPIsAutostar_ThenConnectsAndSetsProductToAutostarAndFirmware()
|
||||||
|
{
|
||||||
|
string deviceId = "Serial";
|
||||||
|
|
||||||
|
string driverDriverId = "ASCOM.MeadeGeneric.Telescope";
|
||||||
|
|
||||||
|
string ComPortDefault = "COM1";
|
||||||
|
string TraceStateDefault = "false";
|
||||||
|
string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
||||||
|
string PrecisionDefault = "Unchanged";
|
||||||
|
|
||||||
|
Mock<IProfileWrapper> profileWrapperMock = new Mock<IProfileWrapper>();
|
||||||
|
profileWrapperMock.SetupAllProperties();
|
||||||
|
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault))
|
||||||
|
.Returns(TraceStateDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault))
|
||||||
|
.Returns(ComPortDefault);
|
||||||
|
profileWrapperMock
|
||||||
|
.Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty,
|
||||||
|
GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault);
|
||||||
|
profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault))
|
||||||
|
.Returns(PrecisionDefault);
|
||||||
|
|
||||||
|
Mock<IProfileFactory> profileFactoryMock = new Mock<IProfileFactory>();
|
||||||
|
profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object);
|
||||||
|
|
||||||
|
SharedResources.ProfileFactory = profileFactoryMock.Object;
|
||||||
|
|
||||||
|
string serialPortReturn = string.Empty;
|
||||||
|
|
||||||
|
_serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { serialPortReturn = TelescopeList.Autostar497; });
|
||||||
|
_serialMock.Setup(x => x.Transmit(":GVN#")).Callback(() => { serialPortReturn = TelescopeList.Autostar497_43Eg; });
|
||||||
|
_serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(() => serialPortReturn);
|
||||||
|
|
||||||
|
var connectionResult = SharedResources.Connect(deviceId, string.Empty, _traceLoggerMock.Object);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Assert.That(connectionResult.SameDevice, Is.EqualTo(1));
|
||||||
|
Assert.That(SharedResources.ProductName, Is.EqualTo(TelescopeList.Autostar497));
|
||||||
|
Assert.That(SharedResources.FirmwareVersion, Is.EqualTo(TelescopeList.Autostar497_43Eg));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
SharedResources.Disconnect(deviceId, String.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="ASCOM.Platform" version="6.4.2" targetFramework="net472" />
|
||||||
|
<package id="Castle.Core" version="4.4.0" targetFramework="net472" />
|
||||||
|
<package id="Moq" version="4.13.0" targetFramework="net472" />
|
||||||
|
<package id="NUnit" version="3.12.0" targetFramework="net472" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.3" targetFramework="net472" />
|
||||||
|
</packages>
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
#define Focuser
|
#define Focuser
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using ASCOM.Utilities;
|
|
||||||
using ASCOM.DeviceInterface;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using ASCOM.DeviceInterface;
|
||||||
using ASCOM.Meade.net.Wrapper;
|
using ASCOM.Meade.net.Wrapper;
|
||||||
|
using ASCOM.Utilities;
|
||||||
using ASCOM.Utilities.Interfaces;
|
using ASCOM.Utilities.Interfaces;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
@@ -28,8 +28,9 @@ namespace ASCOM.Meade.net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Guid("a32ac647-bf0f-42f9-8ab0-d166fa5884ad")]
|
[Guid("a32ac647-bf0f-42f9-8ab0-d166fa5884ad")]
|
||||||
[ProgId("ASCOM.MeadeGeneric.focuser")]
|
[ProgId("ASCOM.MeadeGeneric.focuser")]
|
||||||
[ServedClassName("Meade.net Focuser")]
|
[ServedClassName("Meade Generic")]
|
||||||
[ClassInterface(ClassInterfaceType.None)]
|
[ClassInterface(ClassInterfaceType.None)]
|
||||||
|
[ComVisible(true)]
|
||||||
public class Focuser : ReferenceCountedObjectBase, IFocuserV3
|
public class Focuser : ReferenceCountedObjectBase, IFocuserV3
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -54,7 +55,7 @@ namespace ASCOM.Meade.net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Variable to hold the trace logger object (creates a diagnostic log file with information that you specify)
|
/// Variable to hold the trace logger object (creates a diagnostic log file with information that you specify)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static TraceLogger Tl;
|
private static TraceLogger _tl;
|
||||||
|
|
||||||
private readonly ISharedResourcesWrapper _sharedResourcesWrapper;
|
private readonly ISharedResourcesWrapper _sharedResourcesWrapper;
|
||||||
|
|
||||||
@@ -83,7 +84,7 @@ namespace ASCOM.Meade.net
|
|||||||
private void Initialise()
|
private void Initialise()
|
||||||
{
|
{
|
||||||
//todo move the TraceLogger out to a factory class.
|
//todo move the TraceLogger out to a factory class.
|
||||||
Tl = new TraceLogger("", "Meade.Generic.focusser");
|
_tl = new TraceLogger("", "Meade.Generic.focusser");
|
||||||
|
|
||||||
ReadProfile(); // Read device configuration from the ASCOM Profile store
|
ReadProfile(); // Read device configuration from the ASCOM Profile store
|
||||||
|
|
||||||
@@ -108,17 +109,17 @@ namespace ASCOM.Meade.net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void SetupDialog()
|
public void SetupDialog()
|
||||||
{
|
{
|
||||||
Tl.LogMessage("SetupDialog", "Opening setup dialog");
|
_tl.LogMessage("SetupDialog", "Opening setup dialog");
|
||||||
_sharedResourcesWrapper.SetupDialog();
|
_sharedResourcesWrapper.SetupDialog();
|
||||||
ReadProfile();
|
ReadProfile();
|
||||||
Tl.LogMessage("SetupDialog", "complete");
|
_tl.LogMessage("SetupDialog", "complete");
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList SupportedActions
|
public ArrayList SupportedActions
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("SupportedActions Get", "Returning empty arraylist");
|
_tl.LogMessage("SupportedActions Get", "Returning empty arraylist");
|
||||||
return new ArrayList();
|
return new ArrayList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,9 +164,9 @@ namespace ASCOM.Meade.net
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
// Clean up the tracelogger and util objects
|
// Clean up the tracelogger and util objects
|
||||||
Tl.Enabled = false;
|
_tl.Enabled = false;
|
||||||
Tl.Dispose();
|
_tl.Dispose();
|
||||||
Tl = null;
|
_tl = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Connected
|
public bool Connected
|
||||||
@@ -177,7 +178,7 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Connected", "Set {0}", value);
|
_tl.LogMessage("Connected", "Set {0}", value);
|
||||||
if (value == IsConnected)
|
if (value == IsConnected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -186,7 +187,7 @@ namespace ASCOM.Meade.net
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
ReadProfile();
|
ReadProfile();
|
||||||
_sharedResourcesWrapper.Connect("Serial", DriverId);
|
_sharedResourcesWrapper.Connect("Serial", DriverId, _tl);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IsConnected = true;
|
IsConnected = true;
|
||||||
@@ -216,7 +217,7 @@ namespace ASCOM.Meade.net
|
|||||||
// TODO customise this device description
|
// TODO customise this device description
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Description Get", DriverDescription);
|
_tl.LogMessage("Description Get", DriverDescription);
|
||||||
return DriverDescription;
|
return DriverDescription;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -259,7 +260,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
//string name = "Short driver name - please customise";
|
//string name = "Short driver name - please customise";
|
||||||
string name = DriverDescription;
|
string name = DriverDescription;
|
||||||
Tl.LogMessage("Name Get", name);
|
_tl.LogMessage("Name Get", name);
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,14 +275,14 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
CheckConnected("Absolute Get");
|
CheckConnected("Absolute Get");
|
||||||
|
|
||||||
Tl.LogMessage("Absolute Get", false.ToString());
|
_tl.LogMessage("Absolute Get", false.ToString());
|
||||||
return false; // This is a relative focuser
|
return false; // This is a relative focuser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Halt()
|
public void Halt()
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Halt", "Halting");
|
_tl.LogMessage("Halt", "Halting");
|
||||||
|
|
||||||
CheckConnected("Halt");
|
CheckConnected("Halt");
|
||||||
|
|
||||||
@@ -302,7 +303,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("IsMoving Get", false.ToString());
|
_tl.LogMessage("IsMoving Get", false.ToString());
|
||||||
return false; // This focuser always moves instantaneously so no need for IsMoving ever to be True
|
return false; // This focuser always moves instantaneously so no need for IsMoving ever to be True
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -311,12 +312,12 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Link Get", Connected.ToString());
|
_tl.LogMessage("Link Get", Connected.ToString());
|
||||||
return Connected; // Direct function to the connected method, the Link method is just here for backwards compatibility
|
return Connected; // Direct function to the connected method, the Link method is just here for backwards compatibility
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Link Set", value.ToString());
|
_tl.LogMessage("Link Set", value.ToString());
|
||||||
Connected = value; // Direct function to the connected method, the Link method is just here for backwards compatibility
|
Connected = value; // Direct function to the connected method, the Link method is just here for backwards compatibility
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,7 +327,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("MaxIncrement Get", _maxIncrement.ToString());
|
_tl.LogMessage("MaxIncrement Get", _maxIncrement.ToString());
|
||||||
return _maxIncrement; // Maximum change in one move
|
return _maxIncrement; // Maximum change in one move
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,14 +337,14 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("MaxStep Get", _maxStep.ToString());
|
_tl.LogMessage("MaxStep Get", _maxStep.ToString());
|
||||||
return _maxStep;
|
return _maxStep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Move(int position)
|
public void Move(int position)
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Move", position.ToString());
|
_tl.LogMessage("Move", position.ToString());
|
||||||
CheckConnected("Move");
|
CheckConnected("Move");
|
||||||
|
|
||||||
//todo implement backlash compensation
|
//todo implement backlash compensation
|
||||||
@@ -365,7 +366,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
_sharedResourcesWrapper.Lock(() =>
|
_sharedResourcesWrapper.Lock(() =>
|
||||||
{
|
{
|
||||||
//_sharedResourcesWrapper.SendBlind(":FF#");
|
//_sharedResourcesWrapper.SendBlind("#:FF#");
|
||||||
//:FF# Set Focus speed to fastest setting
|
//:FF# Set Focus speed to fastest setting
|
||||||
//Returns: Nothing
|
//Returns: Nothing
|
||||||
|
|
||||||
@@ -382,7 +383,7 @@ namespace ASCOM.Meade.net
|
|||||||
Stopwatch stopwatch = Stopwatch.StartNew();
|
Stopwatch stopwatch = Stopwatch.StartNew();
|
||||||
while (stopwatch.ElapsedMilliseconds < steps)
|
while (stopwatch.ElapsedMilliseconds < steps)
|
||||||
{
|
{
|
||||||
_sharedResourcesWrapper.SendBlind(directionOut ? ":F+#" : ":F-#");
|
_sharedResourcesWrapper.SendBlind(directionOut ? "#:F+#" : "#:F-#");
|
||||||
//:F+# Start Focuser moving inward (toward objective)
|
//:F+# Start Focuser moving inward (toward objective)
|
||||||
//Returns: None
|
//Returns: None
|
||||||
|
|
||||||
@@ -405,7 +406,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("StepSize Get", "Not implemented");
|
_tl.LogMessage("StepSize Get", "Not implemented");
|
||||||
throw new PropertyNotImplementedException("StepSize", false);
|
throw new PropertyNotImplementedException("StepSize", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -414,13 +415,13 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("TempComp Get", false.ToString());
|
_tl.LogMessage("TempComp Get", false.ToString());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// ReSharper disable once ValueParameterNotUsed
|
// ReSharper disable once ValueParameterNotUsed
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
Tl.LogMessage("TempComp Set", "Not implemented");
|
_tl.LogMessage("TempComp Set", "Not implemented");
|
||||||
throw new PropertyNotImplementedException("TempComp", false);
|
throw new PropertyNotImplementedException("TempComp", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -429,7 +430,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("TempCompAvailable Get", false.ToString());
|
_tl.LogMessage("TempCompAvailable Get", false.ToString());
|
||||||
return false; // Temperature compensation is not available in this driver
|
return false; // Temperature compensation is not available in this driver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -438,7 +439,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
Tl.LogMessage("Temperature Get", "Not implemented");
|
_tl.LogMessage("Temperature Get", "Not implemented");
|
||||||
throw new PropertyNotImplementedException("Temperature", false);
|
throw new PropertyNotImplementedException("Temperature", false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -451,6 +452,13 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
#region ASCOM Registration
|
#region ASCOM Registration
|
||||||
|
|
||||||
|
private static IProfileFactory _profileFactory;
|
||||||
|
public static IProfileFactory ProfileFactory
|
||||||
|
{
|
||||||
|
get => _profileFactory ?? (_profileFactory = new ProfileFactory());
|
||||||
|
set => _profileFactory = value;
|
||||||
|
}
|
||||||
|
|
||||||
// Register or unregister driver for ASCOM. This is harmless if already
|
// Register or unregister driver for ASCOM. This is harmless if already
|
||||||
// registered or unregistered.
|
// registered or unregistered.
|
||||||
//
|
//
|
||||||
@@ -461,7 +469,7 @@ namespace ASCOM.Meade.net
|
|||||||
/// <param name="bRegister">If <c>true</c>, registers the driver, otherwise unregisters it.</param>
|
/// <param name="bRegister">If <c>true</c>, registers the driver, otherwise unregisters it.</param>
|
||||||
private static void RegUnregAscom(bool bRegister)
|
private static void RegUnregAscom(bool bRegister)
|
||||||
{
|
{
|
||||||
using (var p = new Profile())
|
using (IProfileWrapper p = ProfileFactory.Create())
|
||||||
{
|
{
|
||||||
p.DeviceType = "Focuser";
|
p.DeviceType = "Focuser";
|
||||||
if (bRegister)
|
if (bRegister)
|
||||||
@@ -546,10 +554,10 @@ namespace ASCOM.Meade.net
|
|||||||
private void ReadProfile()
|
private void ReadProfile()
|
||||||
{
|
{
|
||||||
var profileProperties = _sharedResourcesWrapper.ReadProfile();
|
var profileProperties = _sharedResourcesWrapper.ReadProfile();
|
||||||
Tl.Enabled = profileProperties.TraceLogger;
|
_tl.Enabled = profileProperties.TraceLogger;
|
||||||
_comPort = profileProperties.ComPort;
|
_comPort = profileProperties.ComPort;
|
||||||
|
|
||||||
LogMessage("ReadProfile", $"Trace logger enabled: {Tl.Enabled}");
|
LogMessage("ReadProfile", $"Trace logger enabled: {_tl.Enabled}");
|
||||||
LogMessage("ReadProfile", $"Com Port: {_comPort}");
|
LogMessage("ReadProfile", $"Com Port: {_comPort}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -562,7 +570,7 @@ namespace ASCOM.Meade.net
|
|||||||
private static void LogMessage(string identifier, string message, params object[] args)
|
private static void LogMessage(string identifier, string message, params object[] args)
|
||||||
{
|
{
|
||||||
var msg = string.Format(message, args);
|
var msg = string.Format(message, args);
|
||||||
Tl.LogMessage(identifier, msg);
|
_tl.LogMessage(identifier, msg);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<UpgradeBackupLocation>
|
<UpgradeBackupLocation>
|
||||||
</UpgradeBackupLocation>
|
</UpgradeBackupLocation>
|
||||||
<OldToolsVersion>3.5</OldToolsVersion>
|
<OldToolsVersion>3.5</OldToolsVersion>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<ApplicationIcon>ASCOM.ico</ApplicationIcon>
|
<ApplicationIcon>ASCOM.ico</ApplicationIcon>
|
||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
<AssemblyOriginatorKeyFile>ASCOMDriverTemplate.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>ASCOMDriverTemplate.snk</AssemblyOriginatorKeyFile>
|
||||||
@@ -66,9 +66,10 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<RegisterForComInterop>true</RegisterForComInterop>
|
<RegisterForComInterop>true</RegisterForComInterop>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
<OutputPath>..\bin\Release\</OutputPath>
|
<OutputPath>..\bin\Release\</OutputPath>
|
||||||
@@ -78,6 +79,7 @@
|
|||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
@@ -156,7 +158,6 @@
|
|||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
</None>
|
</None>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ using System.Runtime.InteropServices;
|
|||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
// 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
|
// to COM components. If you need to access a type in this assembly from
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
[assembly: ComVisible(true)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
[assembly: Guid("4ad7a6d4-6d54-4a9a-bbf3-895353e318f8")]
|
[assembly: Guid("4ad7a6d4-6d54-4a9a-bbf3-895353e318f8")]
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)">
|
|
||||||
<META NAME="CREATED" CONTENT="0;0">
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland">
|
|
||||||
<META NAME="CHANGED" CONTENT="20110918;14150500">
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
TD P.note { background: #33ffff; font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P.underline { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal; text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>ASCOM Focuser Driver (C#)</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
<H4>You have just created the skeleton of an ASCOM
|
|
||||||
Focuser driver in C#. It produces an in-process
|
|
||||||
(assembly) based driver.</H4>
|
|
||||||
<HR>
|
|
||||||
<P CLASS="note">Prior to developing your first driver, please
|
|
||||||
familiarize yourself with the <A HREF="http://ascom-standards.org/developer.html">developer
|
|
||||||
information we've provided</A> at the ASCOM Initiative web site
|
|
||||||
(internet required).
|
|
||||||
</P>
|
|
||||||
<P CLASS="underline">You must do the following in order to complete
|
|
||||||
your implementation:</P>
|
|
||||||
<OL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Switch to the Debug configuration
|
|
||||||
and build the template now. It should build without errors.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Add a test project to the
|
|
||||||
solution. There are templates that can be used to add either a
|
|
||||||
console or a Windows Forms application:</P>
|
|
||||||
</OL>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Select the <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Forms App (CS)</FONT> or <FONT FACE="Consolas, monospace">ASCOM
|
|
||||||
Test Console App (CS)</FONT> template.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set a name for the test
|
|
||||||
application and click on OK.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">In the Wizard: set the same device
|
|
||||||
type and model name as for the driver and select Create to build the
|
|
||||||
test project.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Set the Test Application to Run at
|
|
||||||
Startup.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Click on Debug and the test
|
|
||||||
application should run. You should be able to select your
|
|
||||||
application in the chooser. Selecting Properties should show the
|
|
||||||
default setup dialog for your driver.</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Trying to continue will generate
|
|
||||||
errors because the additional properties have not been implemented.</P>
|
|
||||||
</UL>
|
|
||||||
<OL START=4>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Go through the Driver.cs file and
|
|
||||||
replace the System.NotImplemented exceptions with code to implement
|
|
||||||
your driver's functionality. See the ASCOM IFocuserV3
|
|
||||||
spec. If a property or method is not implemented in your driver the
|
|
||||||
System.NotImplemented exception must be replaced by an
|
|
||||||
ASCOM.PropertyNotImplemented or ASCOM.MethodNotImplemented
|
|
||||||
exception.</P>
|
|
||||||
<LI><P>Customize the Setup Dialog (SetupDialogForm) to provide the
|
|
||||||
settings and other controls for your driver. You can bind settings
|
|
||||||
directly to controls on your dialog form, there's no need to manage
|
|
||||||
settings manually. A custom Settings class takes care of managing
|
|
||||||
your settings behind the scenes.
|
|
||||||
</P>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes:</H3>
|
|
||||||
<UL>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Successfully building the driver,
|
|
||||||
as well as using <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm</FONT>
|
|
||||||
on the assembly, registers it for both COM and ASCOM (the Chooser).
|
|
||||||
See the code in the ASCOM Registration region of Driver.vb.
|
|
||||||
</P>
|
|
||||||
<LI><P STYLE="margin-bottom: 0cm">Doing a Clean for the project, as
|
|
||||||
well doing a <FONT FACE="Lucida Console, Courier New, Courier, monospace">regasm
|
|
||||||
-u</FONT> on the assembly, unregisters it for both COM and ASCOM
|
|
||||||
(the Chooser).
|
|
||||||
</P>
|
|
||||||
<LI><P>Place a breakpoint in your driver class constructor, then
|
|
||||||
start debugging (go, F5). Your breakpoint will be hit when the test
|
|
||||||
application creates an instance of your driver (after selecting it
|
|
||||||
in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and make changes and additions to
|
|
||||||
activate various parts of your driver during debugging.</P>
|
|
||||||
<LI><P>The project's Debug configuration is already configured (The
|
|
||||||
test application creates an instance of your driver (after selecting
|
|
||||||
it in the Chooser). You can now single step, examine variables, etc.
|
|
||||||
Please review the test application and feel free to make changes and
|
|
||||||
additions to activate various parts of your driver during debugging.
|
|
||||||
</P>
|
|
||||||
</UL>
|
|
||||||
<DIV ALIGN=RIGHT>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH=100% BORDER=0 CELLPADDING=4 CELLSPACING=0>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN=RIGHT WIDTH=48 HEIGHT=56 BORDER=0></TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>See the <A HREF="http://ascom-standards.org/" TARGET="browser">ASCOM
|
|
||||||
web site</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">ASCOM-Talk
|
|
||||||
Yahoo Group</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P><BR><BR>
|
|
||||||
</P><P>
|
|
||||||
<BR><BR>
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
|
<section name="ASCOM.DeviceName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
|
||||||
</sectionGroup>
|
</sectionGroup>
|
||||||
</configSections>
|
</configSections>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||||
|
|||||||
+24
-6
@@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.Telescope.UnitTes
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.Focuser.UnitTests", "Meade.net.Focuser.UnitTests\Meade.net.Focuser.UnitTests.csproj", "{A3991FA7-23C3-405A-96F9-5AB03AC58F30}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.Focuser.UnitTests", "Meade.net.Focuser.UnitTests\Meade.net.Focuser.UnitTests.csproj", "{A3991FA7-23C3-405A-96F9-5AB03AC58F30}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.UnitTests", "Meade.net.UnitTests\Meade.net.UnitTests.csproj", "{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -71,21 +73,23 @@ Global
|
|||||||
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x64.Build.0 = Release|Any CPU
|
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x86.ActiveCfg = Release|x86
|
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x86.ActiveCfg = Release|x86
|
||||||
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x86.Build.0 = Release|x86
|
{A97E3AEC-F11D-49DA-B259-DE99DA813A86}.Release|x86.Build.0 = Release|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|Any CPU.ActiveCfg = Debug|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x64.ActiveCfg = Debug|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x64.ActiveCfg = Debug|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x64.Build.0 = Debug|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x64.Build.0 = Debug|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x86.ActiveCfg = Debug|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x86.Build.0 = Debug|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Debug|x86.Build.0 = Debug|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|Any CPU.ActiveCfg = Release|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x64.ActiveCfg = Release|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x64.ActiveCfg = Release|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x86.ActiveCfg = Release|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x86.ActiveCfg = Release|x86
|
||||||
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x86.Build.0 = Release|x86
|
{D5207217-61C7-4E94-8097-91DBACE57D2A}.Release|x86.Build.0 = Release|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|Any CPU.ActiveCfg = Debug|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x64.ActiveCfg = Debug|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x64.ActiveCfg = Debug|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x64.Build.0 = Debug|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x64.Build.0 = Debug|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x86.ActiveCfg = Debug|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x86.Build.0 = Debug|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Debug|x86.Build.0 = Debug|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|Any CPU.ActiveCfg = Release|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x64.ActiveCfg = Release|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x64.ActiveCfg = Release|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x86.ActiveCfg = Release|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x86.ActiveCfg = Release|x86
|
||||||
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x86.Build.0 = Release|x86
|
{AABC96B8-C462-4B3A-9B5F-2929E3CB7A49}.Release|x86.Build.0 = Release|x86
|
||||||
@@ -101,12 +105,13 @@ Global
|
|||||||
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x64.Build.0 = Release|Any CPU
|
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x86.ActiveCfg = Release|x86
|
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x86.ActiveCfg = Release|x86
|
||||||
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x86.Build.0 = Release|x86
|
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95}.Release|x86.Build.0 = Release|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|Any CPU.Build.0 = Debug|x64
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|Any CPU.Build.0 = Debug|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x64.ActiveCfg = Debug|x64
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x86.ActiveCfg = Debug|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x86.Build.0 = Debug|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Debug|x86.Build.0 = Debug|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|Any CPU.ActiveCfg = Release|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|Any CPU.Build.0 = Release|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x64.ActiveCfg = Release|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x64.ActiveCfg = Release|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x86.ActiveCfg = Release|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x86.ActiveCfg = Release|x86
|
||||||
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x86.Build.0 = Release|x86
|
{8EEB5C25-8394-4257-8E57-CDED47CB6F1B}.Release|x86.Build.0 = Release|x86
|
||||||
@@ -134,6 +139,18 @@ Global
|
|||||||
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x64.Build.0 = Release|Any CPU
|
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.ActiveCfg = Release|Any CPU
|
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.Build.0 = Release|Any CPU
|
{A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -144,6 +161,7 @@ Global
|
|||||||
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
{AD4959DD-33D7-4C3F-8DB0-7361D8E74A95} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
||||||
{B7EEEEFD-5BFF-443D-981C-7B8AB5DFDE33} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
{B7EEEEFD-5BFF-443D-981C-7B8AB5DFDE33} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
||||||
{A3991FA7-23C3-405A-96F9-5AB03AC58F30} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
{A3991FA7-23C3-405A-96F9-5AB03AC58F30} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
||||||
|
{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2} = {0958D817-269C-44BE-BEFB-F3E6A409DE91}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {3C0509DC-C7F5-48DC-920D-DCFD9C879BD2}
|
SolutionGuid = {3C0509DC-C7F5-48DC-920D-DCFD9C879BD2}
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
<Settings>
|
<Settings>
|
||||||
<AllowParallelTestExecution>True</AllowParallelTestExecution>
|
<AllowParallelTestExecution>True</AllowParallelTestExecution>
|
||||||
<CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
|
<CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
|
||||||
|
<MetricsExclusionList>
|
||||||
|
<Value>FocuserTestConsole\FocuserTestConsole.csproj</Value>
|
||||||
|
<Value>TelescopeTestConsole\TelescopeTestConsole.csproj</Value>
|
||||||
|
</MetricsExclusionList>
|
||||||
<SolutionConfigured>True</SolutionConfigured>
|
<SolutionConfigured>True</SolutionConfigured>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SolutionConfiguration>
|
</SolutionConfiguration>
|
||||||
@@ -11,6 +11,6 @@
|
|||||||
<ShowUnexecutedTestsMenuOption>true</ShowUnexecutedTestsMenuOption>
|
<ShowUnexecutedTestsMenuOption>true</ShowUnexecutedTestsMenuOption>
|
||||||
<ShowIgnoredTestsMenuOption>false</ShowIgnoredTestsMenuOption>
|
<ShowIgnoredTestsMenuOption>false</ShowIgnoredTestsMenuOption>
|
||||||
</TestsWindowMenuOptions>
|
</TestsWindowMenuOptions>
|
||||||
<TestsWindowSplitterDistance>451</TestsWindowSplitterDistance>
|
<TestsWindowSplitterDistance>544</TestsWindowSplitterDistance>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SolutionConfiguration>
|
</SolutionConfiguration>
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace ASCOM.Meade.net
|
||||||
|
{
|
||||||
|
public class AssemblyInfo
|
||||||
|
{
|
||||||
|
// The assembly information values.
|
||||||
|
//public readonly string Title = string.Empty;
|
||||||
|
//public readonly string Description = string.Empty;
|
||||||
|
//public readonly string Company = string.Empty;
|
||||||
|
public readonly string Product = string.Empty;
|
||||||
|
//public readonly string Copyright = string.Empty;
|
||||||
|
//public readonly string Trademark = string.Empty;
|
||||||
|
public readonly string AssemblyVersion;
|
||||||
|
//public readonly string FileVersion = string.Empty;
|
||||||
|
//public readonly string Guid = string.Empty;
|
||||||
|
//public readonly string NeutralLanguage = string.Empty;
|
||||||
|
//public readonly bool IsComVisible;
|
||||||
|
|
||||||
|
// Return a particular assembly attribute value.
|
||||||
|
private T GetAssemblyAttribute<T>(Assembly assembly)
|
||||||
|
where T : Attribute
|
||||||
|
{
|
||||||
|
// Get attributes of this type.
|
||||||
|
object[] attributes = assembly.GetCustomAttributes(typeof(T), true);
|
||||||
|
|
||||||
|
// If we didn't get anything, return null.
|
||||||
|
if (attributes.Length == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Convert the first attribute value into
|
||||||
|
// the desired type and return it.
|
||||||
|
return (T)attributes[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructors.
|
||||||
|
public AssemblyInfo()
|
||||||
|
: this(Assembly.GetExecutingAssembly())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private AssemblyInfo(Assembly assembly)
|
||||||
|
{
|
||||||
|
// Get values from the assembly.
|
||||||
|
//var titleAttr = GetAssemblyAttribute<AssemblyTitleAttribute>(assembly);
|
||||||
|
//if (titleAttr != null)
|
||||||
|
// Title = titleAttr.Title;
|
||||||
|
|
||||||
|
//var assemblyAttr = GetAssemblyAttribute<AssemblyDescriptionAttribute>(assembly);
|
||||||
|
//if (assemblyAttr != null)
|
||||||
|
// Description = assemblyAttr.Description;
|
||||||
|
|
||||||
|
//var companyAttr =GetAssemblyAttribute<AssemblyCompanyAttribute>(assembly);
|
||||||
|
//if (companyAttr != null)
|
||||||
|
// Company = companyAttr.Company;
|
||||||
|
|
||||||
|
var productAttr = GetAssemblyAttribute<AssemblyProductAttribute>(assembly);
|
||||||
|
if (productAttr != null)
|
||||||
|
Product = productAttr.Product;
|
||||||
|
|
||||||
|
//var copyrightAttr = GetAssemblyAttribute<AssemblyCopyrightAttribute>(assembly);
|
||||||
|
//if (copyrightAttr != null)
|
||||||
|
// Copyright = copyrightAttr.Copyright;
|
||||||
|
|
||||||
|
//var trademarkAttr = GetAssemblyAttribute<AssemblyTrademarkAttribute>(assembly);
|
||||||
|
//if (trademarkAttr != null)
|
||||||
|
// Trademark = trademarkAttr.Trademark;
|
||||||
|
|
||||||
|
var version = assembly.GetName().Version;
|
||||||
|
AssemblyVersion = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}";
|
||||||
|
|
||||||
|
|
||||||
|
//var fileVersionAttr = GetAssemblyAttribute<AssemblyFileVersionAttribute>(assembly);
|
||||||
|
//if (fileVersionAttr != null) FileVersion =
|
||||||
|
// fileVersionAttr.Version;
|
||||||
|
|
||||||
|
//var guidAttr = GetAssemblyAttribute<GuidAttribute>(assembly);
|
||||||
|
//if (guidAttr != null)
|
||||||
|
// Guid = guidAttr.Value;
|
||||||
|
|
||||||
|
//var languageAttr = GetAssemblyAttribute<NeutralResourcesLanguageAttribute>(assembly);
|
||||||
|
//if (languageAttr != null)
|
||||||
|
// NeutralLanguage = languageAttr.CultureName;
|
||||||
|
|
||||||
|
//var comAttr = GetAssemblyAttribute<ComVisibleAttribute>(assembly);
|
||||||
|
//if (comAttr != null)
|
||||||
|
// IsComVisible = comAttr.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+20
-21
@@ -1,6 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
// ReSharper disable UnusedMember.Local
|
||||||
|
// ReSharper disable UnusedMember.Global
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -33,8 +35,8 @@ namespace ASCOM.Meade.net
|
|||||||
#region Access to ole32.dll functions for class factories
|
#region Access to ole32.dll functions for class factories
|
||||||
|
|
||||||
// Define two common GUID objects for public usage.
|
// Define two common GUID objects for public usage.
|
||||||
private static readonly Guid _iidIUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
|
private static readonly Guid IidIUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");
|
||||||
private static readonly Guid _iidIDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
|
private static readonly Guid IidIDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
enum Clsctx : uint
|
enum Clsctx : uint
|
||||||
@@ -113,16 +115,16 @@ namespace ASCOM.Meade.net
|
|||||||
private Guid _mClassId;
|
private Guid _mClassId;
|
||||||
private readonly ArrayList _mInterfaceTypes;
|
private readonly ArrayList _mInterfaceTypes;
|
||||||
private uint _mCookie;
|
private uint _mCookie;
|
||||||
private readonly string _mProgid;
|
//private readonly string _mProgid;
|
||||||
|
|
||||||
public ClassFactory(Type type)
|
public ClassFactory(Type type)
|
||||||
{
|
{
|
||||||
if (type == null)
|
if (type == null)
|
||||||
throw new ArgumentNullException("type");
|
throw new ArgumentNullException(nameof(type));
|
||||||
_mClassType = type;
|
_mClassType = type;
|
||||||
|
|
||||||
//PWGS Get the ProgID from the MetaData
|
//PWGS Get the ProgID from the MetaData
|
||||||
_mProgid = Marshal.GenerateProgIdForType(type);
|
//_mProgid = Marshal.GenerateProgIdForType(type);
|
||||||
_mClassId = Marshal.GenerateGuidForType(type); // Should be nailed down by [Guid(...)]
|
_mClassId = Marshal.GenerateGuidForType(type); // Should be nailed down by [Guid(...)]
|
||||||
ClassContext = (uint)Clsctx.ClsctxLocalServer; // Default
|
ClassContext = (uint)Clsctx.ClsctxLocalServer; // Default
|
||||||
Flags = (uint)Regcls.RegclsMultipleuse | // Default
|
Flags = (uint)Regcls.RegclsMultipleuse | // Default
|
||||||
@@ -135,7 +137,8 @@ namespace ASCOM.Meade.net
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Common ClassFactory Methods
|
#region Common ClassFactory Methods
|
||||||
public uint ClassContext { get; }
|
|
||||||
|
private uint ClassContext { get; }
|
||||||
|
|
||||||
public Guid ClassId
|
public Guid ClassId
|
||||||
{
|
{
|
||||||
@@ -143,7 +146,7 @@ namespace ASCOM.Meade.net
|
|||||||
set => _mClassId = value;
|
set => _mClassId = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint Flags { get; }
|
private uint Flags { get; }
|
||||||
|
|
||||||
public bool RegisterClassObject()
|
public bool RegisterClassObject()
|
||||||
{
|
{
|
||||||
@@ -156,25 +159,22 @@ namespace ASCOM.Meade.net
|
|||||||
Flags,
|
Flags,
|
||||||
out _mCookie
|
out _mCookie
|
||||||
);
|
);
|
||||||
return (i == 0);
|
return i == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool RevokeClassObject()
|
public void RevokeClassObject()
|
||||||
{
|
{
|
||||||
int i = CoRevokeClassObject(_mCookie);
|
CoRevokeClassObject(_mCookie);
|
||||||
return (i == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ResumeClassObjects()
|
public static void ResumeClassObjects()
|
||||||
{
|
{
|
||||||
int i = CoResumeClassObjects();
|
CoResumeClassObjects();
|
||||||
return (i == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SuspendClassObjects()
|
public static void SuspendClassObjects()
|
||||||
{
|
{
|
||||||
int i = CoSuspendClassObjects();
|
CoSuspendClassObjects();
|
||||||
return (i == 0);
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -201,12 +201,11 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
// Handle requests for IDispatch or IUnknown on the class
|
// Handle requests for IDispatch or IUnknown on the class
|
||||||
//
|
//
|
||||||
if (riid == _iidIDispatch)
|
if (riid == IidIDispatch)
|
||||||
{
|
{
|
||||||
ppvObject = Marshal.GetIDispatchForObject(Activator.CreateInstance(_mClassType));
|
ppvObject = Marshal.GetIDispatchForObject(Activator.CreateInstance(_mClassType));
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if (riid == _iidIUnknown)
|
else if (riid == IidIUnknown)
|
||||||
{
|
{
|
||||||
ppvObject = Marshal.GetIUnknownForObject(Activator.CreateInstance(_mClassType));
|
ppvObject = Marshal.GetIUnknownForObject(Activator.CreateInstance(_mClassType));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
public class ConnectionInfo
|
public class ConnectionInfo
|
||||||
{
|
{
|
||||||
public int Connections { get; set; }
|
//public int Connections { get; set; }
|
||||||
public int SameDevice { get; set; }
|
public int SameDevice { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,7 @@ namespace ASCOM.Meade.net
|
|||||||
_mEventThreadEnded.Set();
|
_mEventThreadEnded.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected bool ContinueThread()
|
private bool ContinueThread()
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
|
|||||||
+96
-140
@@ -12,82 +12,38 @@
|
|||||||
// Modified by Chris Rowland and Peter Simpson to allow use with multiple devices of the same type March 2011
|
// Modified by Chris Rowland and Peter Simpson to allow use with multiple devices of the same type March 2011
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Runtime.InteropServices;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security.Principal;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using ASCOM.Meade.net.Properties;
|
||||||
using ASCOM.Utilities;
|
using ASCOM.Utilities;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System.Threading;
|
|
||||||
using System.Security.Principal;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
public static class Server
|
public static class Server
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private const string DriverName = "Meade Generic";
|
||||||
|
|
||||||
#region Access to kernel32.dll, user32.dll, and ole32.dll functions
|
#region Access to kernel32.dll, user32.dll, and ole32.dll functions
|
||||||
[Flags]
|
|
||||||
enum Clsctx : uint
|
|
||||||
{
|
|
||||||
ClsctxInprocServer = 0x1,
|
|
||||||
ClsctxInprocHandler = 0x2,
|
|
||||||
ClsctxLocalServer = 0x4,
|
|
||||||
ClsctxInprocServer16 = 0x8,
|
|
||||||
ClsctxRemoteServer = 0x10,
|
|
||||||
ClsctxInprocHandler16 = 0x20,
|
|
||||||
ClsctxReserved1 = 0x40,
|
|
||||||
ClsctxReserved2 = 0x80,
|
|
||||||
ClsctxReserved3 = 0x100,
|
|
||||||
ClsctxReserved4 = 0x200,
|
|
||||||
ClsctxNoCodeDownload = 0x400,
|
|
||||||
ClsctxReserved5 = 0x800,
|
|
||||||
ClsctxNoCustomMarshal = 0x1000,
|
|
||||||
ClsctxEnableCodeDownload = 0x2000,
|
|
||||||
ClsctxNoFailureLog = 0x4000,
|
|
||||||
ClsctxDisableAaa = 0x8000,
|
|
||||||
ClsctxEnableAaa = 0x10000,
|
|
||||||
ClsctxFromDefaultContext = 0x20000,
|
|
||||||
ClsctxInproc = ClsctxInprocServer | ClsctxInprocHandler,
|
|
||||||
ClsctxServer = ClsctxInprocServer | ClsctxLocalServer | ClsctxRemoteServer,
|
|
||||||
ClsctxAll = ClsctxServer | ClsctxInprocHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
[Flags]
|
//// CoInitializeEx() can be used to set the apartment model
|
||||||
enum Coinit : uint
|
//// of individual threads.
|
||||||
{
|
//[DllImport("ole32.dll")]
|
||||||
/// Initializes the thread for multi-threaded object concurrency.
|
//static extern int CoInitializeEx(IntPtr pvReserved, uint dwCoInit);
|
||||||
CoinitMultithreaded = 0x0,
|
|
||||||
/// Initializes the thread for apartment-threaded object concurrency.
|
|
||||||
CoinitApartmentthreaded = 0x2,
|
|
||||||
/// Disables DDE for Ole1 support.
|
|
||||||
CoinitDisableOle1Dde = 0x4,
|
|
||||||
/// Trades memory for speed.
|
|
||||||
CoinitSpeedOverMemory = 0x8
|
|
||||||
}
|
|
||||||
|
|
||||||
[Flags]
|
//// CoUninitialize() is used to uninitialize a COM thread.
|
||||||
enum Regcls : uint
|
//[DllImport("ole32.dll")]
|
||||||
{
|
//static extern void CoUninitialize();
|
||||||
RegclsSingleuse = 0,
|
|
||||||
RegclsMultipleuse = 1,
|
|
||||||
RegclsMultiSeparate = 2,
|
|
||||||
RegclsSuspended = 4,
|
|
||||||
RegclsSurrogate = 8
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CoInitializeEx() can be used to set the apartment model
|
|
||||||
// of individual threads.
|
|
||||||
[DllImport("ole32.dll")]
|
|
||||||
static extern int CoInitializeEx(IntPtr pvReserved, uint dwCoInit);
|
|
||||||
|
|
||||||
// CoUninitialize() is used to uninitialize a COM thread.
|
|
||||||
[DllImport("ole32.dll")]
|
|
||||||
static extern void CoUninitialize();
|
|
||||||
|
|
||||||
// PostThreadMessage() allows us to post a Windows Message to
|
// PostThreadMessage() allows us to post a Windows Message to
|
||||||
// a specific thread (identified by its thread id).
|
// a specific thread (identified by its thread id).
|
||||||
@@ -107,8 +63,8 @@ namespace ASCOM.Meade.net
|
|||||||
#region Private Data
|
#region Private Data
|
||||||
private static int _objsInUse; // Keeps a count on the total number of objects alive.
|
private static int _objsInUse; // Keeps a count on the total number of objects alive.
|
||||||
private static int _serverLocks; // Keeps a lock count on this application.
|
private static int _serverLocks; // Keeps a lock count on this application.
|
||||||
private static FrmMain _sMainForm = null; // Reference to our main form
|
private static FrmMain _sMainForm; // Reference to our main form
|
||||||
private static ArrayList _sComObjectAssys; // Dynamically loaded assemblies containing served COM objects
|
//private static ArrayList _sComObjectAssys; // Dynamically loaded assemblies containing served COM objects
|
||||||
private static ArrayList _sComObjectTypes; // Served COM object types
|
private static ArrayList _sComObjectTypes; // Served COM object types
|
||||||
private static ArrayList _sClassFactories; // Served COM object class factories
|
private static ArrayList _sClassFactories; // Served COM object class factories
|
||||||
private static string _sAppId = "{4e68ec46-5ffc-49e7-b298-38a548df0bfd}"; // Our AppId
|
private static string _sAppId = "{4e68ec46-5ffc-49e7-b298-38a548df0bfd}"; // Our AppId
|
||||||
@@ -116,15 +72,15 @@ namespace ASCOM.Meade.net
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
// This property returns the main thread's id.
|
// This property returns the main thread's id.
|
||||||
public static uint MainThreadId { get; private set; } // Stores the main thread's thread id.
|
private static uint MainThreadId { get; set; } // Stores the main thread's thread id.
|
||||||
|
|
||||||
// Used to tell if started by COM or manually
|
// Used to tell if started by COM or manually
|
||||||
public static bool StartedByCom { get; private set; } // True if server started by COM (-embedding)
|
private static bool StartedByCom { get; set; } // True if server started by COM (-embedding)
|
||||||
|
|
||||||
|
|
||||||
#region Server Lock, Object Counting, and AutoQuit on COM startup
|
#region Server Lock, Object Counting, and AutoQuit on COM startup
|
||||||
// Returns the total number of objects alive currently.
|
// Returns the total number of objects alive currently.
|
||||||
public static int ObjectsCount
|
private static int ObjectsCount
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -136,21 +92,21 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This method performs a thread-safe incrementation of the objects count.
|
// This method performs a thread-safe incrementation of the objects count.
|
||||||
public static int CountObject()
|
public static void CountObject()
|
||||||
{
|
{
|
||||||
// Increment the global count of objects.
|
// Increment the global count of objects.
|
||||||
return Interlocked.Increment(ref _objsInUse);
|
Interlocked.Increment(ref _objsInUse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method performs a thread-safe decrementation the objects count.
|
// This method performs a thread-safe decrementation the objects count.
|
||||||
public static int UncountObject()
|
public static void UncountObject()
|
||||||
{
|
{
|
||||||
// Decrement the global count of objects.
|
// Decrement the global count of objects.
|
||||||
return Interlocked.Decrement(ref _objsInUse);
|
Interlocked.Decrement(ref _objsInUse);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the current server lock count.
|
// Returns the current server lock count.
|
||||||
public static int ServerLockCount
|
private static int ServerLockCount
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -163,18 +119,18 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
// This method performs a thread-safe incrementation the
|
// This method performs a thread-safe incrementation the
|
||||||
// server lock count.
|
// server lock count.
|
||||||
public static int CountLock()
|
public static void CountLock()
|
||||||
{
|
{
|
||||||
// Increment the global lock count of this server.
|
// Increment the global lock count of this server.
|
||||||
return Interlocked.Increment(ref _serverLocks);
|
Interlocked.Increment(ref _serverLocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method performs a thread-safe decrementation the
|
// This method performs a thread-safe decrementation the
|
||||||
// server lock count.
|
// server lock count.
|
||||||
public static int UncountLock()
|
public static void UncountLock()
|
||||||
{
|
{
|
||||||
// Decrement the global lock count of this server.
|
// Decrement the global lock count of this server.
|
||||||
return Interlocked.Decrement(ref _serverLocks);
|
Interlocked.Decrement(ref _serverLocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttemptToTerminateServer() will check to see if the objects count and the server
|
// AttemptToTerminateServer() will check to see if the objects count and the server
|
||||||
@@ -213,12 +169,14 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
private static bool LoadComObjectAssemblies()
|
private static bool LoadComObjectAssemblies()
|
||||||
{
|
{
|
||||||
_sComObjectAssys = new ArrayList();
|
//_sComObjectAssys = new ArrayList();
|
||||||
_sComObjectTypes = new ArrayList();
|
_sComObjectTypes = new ArrayList();
|
||||||
|
|
||||||
// put everything into one folder, the same as the server.
|
// put everything into one folder, the same as the server.
|
||||||
string assyPath = Assembly.GetEntryAssembly().Location;
|
string assyPath = Assembly.GetEntryAssembly()?.Location;
|
||||||
assyPath = Path.GetDirectoryName(assyPath);
|
assyPath = Path.GetDirectoryName(assyPath);
|
||||||
|
if (assyPath == null)
|
||||||
|
throw new System.InvalidOperationException();
|
||||||
|
|
||||||
DirectoryInfo d = new DirectoryInfo(assyPath);
|
DirectoryInfo d = new DirectoryInfo(assyPath);
|
||||||
foreach (FileInfo fi in d.GetFiles("*.dll"))
|
foreach (FileInfo fi in d.GetFiles("*.dll"))
|
||||||
@@ -244,7 +202,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
//MessageBox.Show("Adding Type: " + type.Name + " " + type.FullName);
|
//MessageBox.Show("Adding Type: " + type.Name + " " + type.FullName);
|
||||||
_sComObjectTypes.Add(type); //PWGS - much simpler
|
_sComObjectTypes.Add(type); //PWGS - much simpler
|
||||||
_sComObjectAssys.Add(so);
|
//_sComObjectAssys.Add(so);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -252,15 +210,13 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
// Probably an attempt to load a Win32 DLL (i.e. not a .net assembly)
|
// Probably an attempt to load a Win32 DLL (i.e. not a .net assembly)
|
||||||
// Just swallow the exception and continue to the next item.
|
// Just swallow the exception and continue to the next item.
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Failed to load served COM class assembly " + fi.Name + " - " + e.Message,
|
MessageBox.Show(string.Format(Resources.Server_LoadComObjectAssemblies_Failed_to_load_served_COM_class_assembly__0_____1_, fi.Name, e.Message),
|
||||||
"Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
DriverName, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -285,22 +241,22 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
private static void ElevateSelf(string arg)
|
private static void ElevateSelf(string arg)
|
||||||
{
|
{
|
||||||
ProcessStartInfo si = new ProcessStartInfo();
|
var si = new ProcessStartInfo
|
||||||
si.Arguments = arg;
|
|
||||||
si.WorkingDirectory = Environment.CurrentDirectory;
|
|
||||||
si.FileName = Application.ExecutablePath;
|
|
||||||
si.Verb = "runas";
|
|
||||||
try { Process.Start(si); }
|
|
||||||
catch (System.ComponentModel.Win32Exception)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("The Meade.net was not " + (arg == "/register" ? "registered" : "unregistered") +
|
Arguments = arg,
|
||||||
" because you did not allow it.", "Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
WorkingDirectory = Environment.CurrentDirectory,
|
||||||
|
FileName = Application.ExecutablePath,
|
||||||
|
Verb = "runas"
|
||||||
|
};
|
||||||
|
try { Process.Start(si); }
|
||||||
|
catch (Win32Exception)
|
||||||
|
{
|
||||||
|
MessageBox.Show(string.Format(Resources.Server_ElevateSelf_The__0__was_not__1__because_you_did_not_allow_it_, DriverName, (arg == "/register" ? "registered" : "unregistered")), DriverName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show(ex.ToString(), "Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
MessageBox.Show(ex.ToString(), DriverName, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -341,28 +297,25 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey("APPID\\" + _sAppId))
|
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey("APPID\\" + _sAppId))
|
||||||
{
|
{
|
||||||
key.SetValue(null, assyDescription);
|
key?.SetValue(null, assyDescription);
|
||||||
key.SetValue("AppID", _sAppId);
|
key?.SetValue("AppID", _sAppId);
|
||||||
key.SetValue("AuthenticationLevel", 1, RegistryValueKind.DWord);
|
key?.SetValue("AuthenticationLevel", 1, RegistryValueKind.DWord);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// HKCR\APPID\exename.ext
|
// HKCR\APPID\exename.ext
|
||||||
//
|
//
|
||||||
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(string.Format("APPID\\{0}",
|
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(
|
||||||
Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1))))
|
$"APPID\\{Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1)}"))
|
||||||
{
|
{
|
||||||
key.SetValue("AppID", _sAppId);
|
key?.SetValue("AppID", _sAppId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Error while registering the server:\n" + ex.ToString(),
|
MessageBox.Show(string.Format(Resources.Server_RegisterObjects_, ex),
|
||||||
"Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
DriverName, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// For each of the driver assemblies
|
// For each of the driver assemblies
|
||||||
@@ -380,22 +333,22 @@ namespace ASCOM.Meade.net
|
|||||||
//PWGS Generate device type from the Class name
|
//PWGS Generate device type from the Class name
|
||||||
string deviceType = type.Name;
|
string deviceType = type.Name;
|
||||||
|
|
||||||
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(string.Format("CLSID\\{0}", clsid)))
|
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey($"CLSID\\{clsid}"))
|
||||||
{
|
{
|
||||||
key.SetValue(null, progid); // Could be assyTitle/Desc??, but .NET components show ProgId here
|
key?.SetValue(null, progid); // Could be assyTitle/Desc??, but .NET components show ProgId here
|
||||||
key.SetValue("AppId", _sAppId);
|
key?.SetValue("AppId", _sAppId);
|
||||||
using (RegistryKey key2 = key.CreateSubKey("Implemented Categories"))
|
using (RegistryKey key2 = key.CreateSubKey("Implemented Categories"))
|
||||||
{
|
{
|
||||||
key2.CreateSubKey("{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}");
|
key2?.CreateSubKey("{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}");
|
||||||
}
|
}
|
||||||
using (RegistryKey key2 = key.CreateSubKey("ProgId"))
|
using (RegistryKey key2 = key.CreateSubKey("ProgId"))
|
||||||
{
|
{
|
||||||
key2.SetValue(null, progid);
|
key2?.SetValue(null, progid);
|
||||||
}
|
}
|
||||||
key.CreateSubKey("Programmable");
|
key.CreateSubKey("Programmable");
|
||||||
using (RegistryKey key2 = key.CreateSubKey("LocalServer32"))
|
using (RegistryKey key2 = key.CreateSubKey("LocalServer32"))
|
||||||
{
|
{
|
||||||
key2.SetValue(null, Application.ExecutablePath);
|
key2?.SetValue(null, Application.ExecutablePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -403,16 +356,16 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progid))
|
using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progid))
|
||||||
{
|
{
|
||||||
key.SetValue(null, assyTitle);
|
key?.SetValue(null, assyTitle);
|
||||||
using (RegistryKey key2 = key.CreateSubKey("CLSID"))
|
using (RegistryKey key2 = key.CreateSubKey("CLSID"))
|
||||||
{
|
{
|
||||||
key2.SetValue(null, clsid);
|
key2?.SetValue(null, clsid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// ASCOM
|
// ASCOM
|
||||||
//
|
//
|
||||||
assy = type.Assembly;
|
//assy = type.Assembly;
|
||||||
|
|
||||||
// Pull the display name from the ServedClassName attribute.
|
// Pull the display name from the ServedClassName attribute.
|
||||||
attr = Attribute.GetCustomAttribute(type, typeof(ServedClassNameAttribute)); //PWGS Changed to search type for attribute rather than assembly
|
attr = Attribute.GetCustomAttribute(type, typeof(ServedClassNameAttribute)); //PWGS Changed to search type for attribute rather than assembly
|
||||||
@@ -425,13 +378,11 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
MessageBox.Show("Error while registering the server:\n" + ex.ToString(),
|
MessageBox.Show(string.Format(Resources.Server_RegisterObjects_, ex),
|
||||||
"Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
DriverName, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
bFail = true;
|
bFail = true;
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if (bFail) break;
|
if (bFail) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -453,9 +404,9 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
// Local server's DCOM/AppID information
|
// Local server's DCOM/AppID information
|
||||||
//
|
//
|
||||||
Registry.ClassesRoot.DeleteSubKey(string.Format("APPID\\{0}", _sAppId), false);
|
Registry.ClassesRoot.DeleteSubKey($"APPID\\{_sAppId}", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(string.Format("APPID\\{0}",
|
Registry.ClassesRoot.DeleteSubKey(
|
||||||
Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1)), false);
|
$"APPID\\{Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1)}", false);
|
||||||
|
|
||||||
//
|
//
|
||||||
// For each of the driver assemblies
|
// For each of the driver assemblies
|
||||||
@@ -471,17 +422,17 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
// HKCR\progid
|
// HKCR\progid
|
||||||
//
|
//
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("{0}\\CLSID", progid), false);
|
Registry.ClassesRoot.DeleteSubKey($"{progid}\\CLSID", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(progid, false);
|
Registry.ClassesRoot.DeleteSubKey(progid, false);
|
||||||
//
|
//
|
||||||
// HKCR\CLSID\clsid
|
// HKCR\CLSID\clsid
|
||||||
//
|
//
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Implemented Categories\\{{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}}", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}\\Implemented Categories\\{{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}}", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Implemented Categories", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}\\Implemented Categories", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\ProgId", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}\\ProgId", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\LocalServer32", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}\\LocalServer32", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Programmable", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}\\Programmable", false);
|
||||||
Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}", clsid), false);
|
Registry.ClassesRoot.DeleteSubKey($"CLSID\\{clsid}", false);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -493,7 +444,10 @@ namespace ASCOM.Meade.net
|
|||||||
p.Unregister(progid);
|
p.Unregister(progid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -504,7 +458,7 @@ namespace ASCOM.Meade.net
|
|||||||
// that we serve. This requires the class facgtory name to be
|
// that we serve. This requires the class facgtory name to be
|
||||||
// equal to the served class name + "ClassFactory".
|
// equal to the served class name + "ClassFactory".
|
||||||
//
|
//
|
||||||
private static bool RegisterClassFactories()
|
private static void RegisterClassFactories()
|
||||||
{
|
{
|
||||||
_sClassFactories = new ArrayList();
|
_sClassFactories = new ArrayList();
|
||||||
foreach (Type type in _sComObjectTypes)
|
foreach (Type type in _sComObjectTypes)
|
||||||
@@ -513,13 +467,12 @@ namespace ASCOM.Meade.net
|
|||||||
_sClassFactories.Add(factory);
|
_sClassFactories.Add(factory);
|
||||||
if (!factory.RegisterClassObject())
|
if (!factory.RegisterClassObject())
|
||||||
{
|
{
|
||||||
MessageBox.Show("Failed to register class factory for " + type.Name,
|
MessageBox.Show(string.Format(Resources.Server_RegisterClassFactories_Failed_to_register_class_factory_for__0_, type.Name),
|
||||||
"Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
DriverName, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClassFactory.ResumeClassObjects(); // Served objects now go live
|
ClassFactory.ResumeClassObjects(); // Served objects now go live
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RevokeClassFactories()
|
private static void RevokeClassFactories()
|
||||||
@@ -569,8 +522,9 @@ namespace ASCOM.Meade.net
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
MessageBox.Show("Unknown argument: " + args[0] + "\nValid are : -register, -unregister and -embedding",
|
MessageBox.Show(
|
||||||
"Meade.net", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
string.Format(Resources.Server_ProcessArguments_, args[0]),
|
||||||
|
DriverName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -609,9 +563,11 @@ namespace ASCOM.Meade.net
|
|||||||
RegisterClassFactories();
|
RegisterClassFactories();
|
||||||
|
|
||||||
// Start up the garbage collection thread.
|
// Start up the garbage collection thread.
|
||||||
GarbageCollection garbageCollector = new GarbageCollection(1000);
|
var garbageCollector = new GarbageCollection(1000);
|
||||||
Thread gcThread = new Thread(new ThreadStart(garbageCollector.GcWatch));
|
var gcThread = new Thread(garbageCollector.GcWatch)
|
||||||
gcThread.Name = "Garbage Collection Thread";
|
{
|
||||||
|
Name = "Garbage Collection Thread"
|
||||||
|
};
|
||||||
gcThread.Start();
|
gcThread.Start();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
using System.Globalization;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Resources;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace ASCOM.Meade.net.Localization
|
|
||||||
{
|
|
||||||
internal class LocalisationHelper
|
|
||||||
{
|
|
||||||
private const string LocalizationNamespace = "LocalisationTest.Localization.Resources.Localization";
|
|
||||||
private readonly ResourceManager _resourceManager;
|
|
||||||
|
|
||||||
public LocalisationHelper()
|
|
||||||
{
|
|
||||||
_resourceManager = new ResourceManager(LocalizationNamespace, Assembly.GetExecutingAssembly());
|
|
||||||
|
|
||||||
SetLocalisation(CultureInfo.CurrentCulture.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void SetLocalisation(string name)
|
|
||||||
{
|
|
||||||
var cultureInfo = new CultureInfo(name);
|
|
||||||
|
|
||||||
//CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
|
|
||||||
//CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
|
|
||||||
|
|
||||||
Thread.CurrentThread.CurrentCulture = cultureInfo;
|
|
||||||
Thread.CurrentThread.CurrentUICulture = cultureInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal string GetString(string key)
|
|
||||||
{
|
|
||||||
return _resourceManager.GetString(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>ASCOM.Meade.net</RootNamespace>
|
<RootNamespace>ASCOM.Meade.net</RootNamespace>
|
||||||
<AssemblyName>ASCOM.Meade.net.Server</AssemblyName>
|
<AssemblyName>ASCOM.Meade.net.Server</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<FileUpgradeFlags>
|
<FileUpgradeFlags>
|
||||||
</FileUpgradeFlags>
|
</FileUpgradeFlags>
|
||||||
<OldToolsVersion>2.0</OldToolsVersion>
|
<OldToolsVersion>2.0</OldToolsVersion>
|
||||||
@@ -43,6 +43,7 @@
|
|||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@@ -68,7 +69,7 @@
|
|||||||
<OutputPath>..\bin\Debug\</OutputPath>
|
<OutputPath>..\bin\Debug\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
<Reference Include="ASCOM.Astrometry, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL">
|
||||||
@@ -121,6 +123,7 @@
|
|||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="AssemblyInfo.cs" />
|
||||||
<Compile Include="ClassFactory.cs" />
|
<Compile Include="ClassFactory.cs" />
|
||||||
<Compile Include="ConnectionInfo.cs" />
|
<Compile Include="ConnectionInfo.cs" />
|
||||||
<Compile Include="frmMain.cs">
|
<Compile Include="frmMain.cs">
|
||||||
@@ -130,12 +133,13 @@
|
|||||||
<DependentUpon>frmMain.cs</DependentUpon>
|
<DependentUpon>frmMain.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="GarbageCollection.cs" />
|
<Compile Include="GarbageCollection.cs" />
|
||||||
<Compile Include="Localization\LocalisationHelper.cs" />
|
|
||||||
<Compile Include="LocalServer.cs" />
|
<Compile Include="LocalServer.cs" />
|
||||||
|
<Compile Include="ProfileFactory.cs" />
|
||||||
<Compile Include="ProfileProperties.cs" />
|
<Compile Include="ProfileProperties.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="TelescopeList.cs" />
|
<Compile Include="TelescopeList.cs" />
|
||||||
<Compile Include="Win32Utilities.cs" />
|
<Compile Include="Win32Utilities.cs" />
|
||||||
|
<Compile Include="Wrapper\IProfileWrapper.cs" />
|
||||||
<Compile Include="Wrapper\SharedResourcesWrapper.cs" />
|
<Compile Include="Wrapper\SharedResourcesWrapper.cs" />
|
||||||
<EmbeddedResource Include="frmMain.resx">
|
<EmbeddedResource Include="frmMain.resx">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@@ -166,7 +170,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="ASCOM.ico" />
|
<Content Include="ASCOM.ico" />
|
||||||
<Content Include="ASCOM.png" />
|
<Content Include="ASCOM.png" />
|
||||||
<Content Include="ReadMe.htm" />
|
|
||||||
<None Include="BootstrapAscomProfileStore.ps1" />
|
<None Include="BootstrapAscomProfileStore.ps1" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Resources\ASCOM.bmp" />
|
<None Include="Resources\ASCOM.bmp" />
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using ASCOM.Meade.net.Wrapper;
|
||||||
|
|
||||||
|
namespace ASCOM.Meade.net
|
||||||
|
{
|
||||||
|
public interface IProfileFactory
|
||||||
|
{
|
||||||
|
IProfileWrapper Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ProfileFactory : IProfileFactory
|
||||||
|
{
|
||||||
|
public IProfileWrapper Create()
|
||||||
|
{
|
||||||
|
return new ProfileWrapper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,5 +7,6 @@ namespace ASCOM.Meade.net
|
|||||||
public bool TraceLogger { get; set; }
|
public bool TraceLogger { get; set; }
|
||||||
public double GuideRateArcSecondsPerSecond { get; set; }
|
public double GuideRateArcSecondsPerSecond { get; set; }
|
||||||
public string Precision { get; set; }
|
public string Precision { get; set; }
|
||||||
|
public string GuidingStyle { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyDescription("ASCOM multi-interface server for Meade.net")]
|
[assembly: AssemblyDescription("ASCOM multi-interface server for Meade.net")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("cjdawson.com")]
|
[assembly: AssemblyCompany("cjdawson.com")]
|
||||||
[assembly: AssemblyProduct("")]
|
[assembly: AssemblyProduct("ASCOM Meade Generic")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019 cjdawson.com")]
|
[assembly: AssemblyCopyright("Copyright © 2019 cjdawson.com")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
@@ -23,4 +23,4 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyVersion("0.0.0.0")]
|
[assembly: AssemblyVersion("0.0.0.0")]
|
||||||
[assembly: AssemblyFileVersion("0.0.0.0")]
|
[assembly: AssemblyFileVersion("0.0.0.0")]
|
||||||
|
|
||||||
[assembly: ComVisibleAttribute(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|||||||
+66
@@ -69,5 +69,71 @@ namespace ASCOM.Meade.net.Properties {
|
|||||||
return ((System.Drawing.Bitmap)(obj));
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The {0} was not {1} because you did not allow it..
|
||||||
|
/// </summary>
|
||||||
|
internal static string Server_ElevateSelf_The__0__was_not__1__because_you_did_not_allow_it_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Server_ElevateSelf_The__0__was_not__1__because_you_did_not_allow_it_", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Failed to load served COM class assembly {0} - {1}.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Server_LoadComObjectAssemblies_Failed_to_load_served_COM_class_assembly__0_____1_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Server_LoadComObjectAssemblies_Failed_to_load_served_COM_class_assembly__0_____1_" +
|
||||||
|
"", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Unknown argument: {0}
|
||||||
|
///Valid are : -register, -unregister and -embedding.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Server_ProcessArguments_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Server_ProcessArguments_", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Failed to register class factory for {0}.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Server_RegisterClassFactories_Failed_to_register_class_factory_for__0_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Server_RegisterClassFactories_Failed_to_register_class_factory_for__0_", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Error while registering the server:
|
||||||
|
///{0}.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Server_RegisterObjects_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Server_RegisterObjects_", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to {0} Settings ({1}).
|
||||||
|
/// </summary>
|
||||||
|
internal static string SetupDialogForm_SetupDialogForm__0__Settings___1__ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("SetupDialogForm_SetupDialogForm__0__Settings___1__", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to ({0:00.0}% of sidereal rate).
|
||||||
|
/// </summary>
|
||||||
|
internal static string SetupDialogForm_TextBox1_TextChanged___0_00_0___of_sidereal_rate_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("SetupDialogForm_TextBox1_TextChanged___0_00_0___of_sidereal_rate_", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,4 +121,27 @@
|
|||||||
<data name="ASCOM" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="ASCOM" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\ASCOM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\ASCOM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Server_ProcessArguments_" xml:space="preserve">
|
||||||
|
<value>Unknown argument: {0}
|
||||||
|
Valid are : -register, -unregister and -embedding</value>
|
||||||
|
</data>
|
||||||
|
<data name="Server_RegisterClassFactories_Failed_to_register_class_factory_for__0_" xml:space="preserve">
|
||||||
|
<value>Failed to register class factory for {0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="Server_RegisterObjects_" xml:space="preserve">
|
||||||
|
<value>Error while registering the server:
|
||||||
|
{0}</value>
|
||||||
|
</data>
|
||||||
|
<data name="Server_ElevateSelf_The__0__was_not__1__because_you_did_not_allow_it_" xml:space="preserve">
|
||||||
|
<value>The {0} was not {1} because you did not allow it.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Server_LoadComObjectAssemblies_Failed_to_load_served_COM_class_assembly__0_____1_" xml:space="preserve">
|
||||||
|
<value>Failed to load served COM class assembly {0} - {1}</value>
|
||||||
|
</data>
|
||||||
|
<data name="SetupDialogForm_TextBox1_TextChanged___0_00_0___of_sidereal_rate_" xml:space="preserve">
|
||||||
|
<value>({0:00.0}% of sidereal rate)</value>
|
||||||
|
</data>
|
||||||
|
<data name="SetupDialogForm_SetupDialogForm__0__Settings___1__" xml:space="preserve">
|
||||||
|
<value>{0} Settings ({1})</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,666 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
||||||
<HTML>
|
|
||||||
<HEAD>
|
|
||||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"/>
|
|
||||||
<TITLE>Untitled Document</TITLE>
|
|
||||||
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"/>
|
|
||||||
<META NAME="CREATED" CONTENT="0;0"/>
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland"/>
|
|
||||||
<META NAME="CHANGED" CONTENT="20110422;10442800"/>
|
|
||||||
<META NAME="CHANGEDBY" CONTENT="Chris Rowland"/>
|
|
||||||
<STYLE TYPE="text/css">
|
|
||||||
<!--
|
|
||||||
@page { margin: 2cm }
|
|
||||||
P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
TD P { font-family: "Verdana", "Arial", "Helvetica", sans-serif; font-weight: normal }
|
|
||||||
H3 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H2 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
H4 { font-family: "Arial", "Helvetica", sans-serif }
|
|
||||||
PRE { margin-left: 0.18cm; margin-right: 0.18cm; margin-top: 0.18cm; margin-bottom: 0.18cm; background: #ccffff }
|
|
||||||
PRE.western { font-weight: normal }
|
|
||||||
PRE.cjk { font-family: "NSimSun", monospace; font-weight: normal }
|
|
||||||
PRE.ctl { font-weight: normal }
|
|
||||||
EM.underline { text-decoration: underline }
|
|
||||||
-->
|
|
||||||
</STYLE>
|
|
||||||
</HEAD>
|
|
||||||
<BODY LANG="en-GB" DIR="LTR">
|
|
||||||
<TABLE WIDTH="100%" BORDER="0" CELLPADDING="4" CELLSPACING="0" STYLE="page-break-before: always">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H2>
|
|
||||||
ASCOM LocalServer (singleton) Host
|
|
||||||
</H2>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
<H4>
|
|
||||||
You have just created a local server (singleton) host for one or
|
|
||||||
more ASCOM driver classes.
|
|
||||||
</H4>
|
|
||||||
<HR/>
|
|
||||||
<P>
|
|
||||||
This project implements an ASCOM host server for one or more
|
|
||||||
driver classes in a single-instance executable. It can be used to
|
|
||||||
serve multiple instances of a single driver class (hub), provide
|
|
||||||
driver services for multiple devices (e.g., Telescope and Focuser) to
|
|
||||||
multiple applications and allow multiple devices of the same type to
|
|
||||||
be connected. In the latter scenario, the multiple driver classes
|
|
||||||
will often share one or more resources such as the serial connection
|
|
||||||
and a microcontroller in the combined device. From the client's
|
|
||||||
perspective, using the drivers served by the local server is exactly
|
|
||||||
the same as if the drivers are loaded into the client's process space
|
|
||||||
(in-proc servers).
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<STRONG>
|
|
||||||
<SPAN STYLE="background: #ffee88">NOTE:</SPAN>
|
|
||||||
</STRONG>
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
Unless you are prepared to handle all of the timing issues that arise
|
|
||||||
when multiple clients are accessing the properties and methods of
|
|
||||||
your driver(s), stop now. Just because the local server serializes
|
|
||||||
the calls to your driver(s)' properties and methods does not mean
|
|
||||||
that there will be no timing or concurrency issues.<BR/>
|
|
||||||
<BR/>For
|
|
||||||
example, suppose the hub serves instances of a Telescope driver. One
|
|
||||||
client sets the TargetRightAscension property, then another sets
|
|
||||||
TargetRightAscension to a different value, then the first client sets
|
|
||||||
TargetDeclination, then the first client calls SlewToTarget()
|
|
||||||
followed by the second client calling SlewToTarget(). Besides the
|
|
||||||
first client's slew command sending the scope to the wrong (and
|
|
||||||
possibly dangerous) coordinates, there is the problem of the second
|
|
||||||
client trying to slew a slewing scope. Local server drivers are
|
|
||||||
tricky to get right. There is no such thing as "ignorance is
|
|
||||||
bliss" here.
|
|
||||||
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
This implementation has changed
|
|
||||||
from what was defined for Platform 5.5 as follows:
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
The drivers are now installed in
|
|
||||||
the same folder as the local server executable. This makes deployment
|
|
||||||
cleaner because the whole driver can exist in a single folder
|
|
||||||
independently of other drivers.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
The ProgId and friendly name as
|
|
||||||
displayed by the Chooser are defined using attributes. This allows
|
|
||||||
driver dlls to be identified clearly and so avoids confusion with
|
|
||||||
other dlls that may be required such as interop dlls.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
Some changes have been made that
|
|
||||||
will facilitate generating multiple drivers of the same type.
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-left: 0.42cm; margin-right: 0.42cm; border: 1px solid #000000; padding: 0.21cm">
|
|
||||||
<SPAN STYLE="background: #ffee88">
|
|
||||||
I've put some additional advice and
|
|
||||||
comments in the notes below <I>in italics.</I>
|
|
||||||
</SPAN>
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
You're probably anxious to get going, but you really should read
|
|
||||||
through the <A HREF="#theory">Theory of Operation</A> and <A HREF="#details">
|
|
||||||
Detailed
|
|
||||||
Use and Deployment
|
|
||||||
</A> below.
|
|
||||||
</P>
|
|
||||||
<P>You must do the following in order to complete your local server:</P>
|
|
||||||
<OL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In the local server's project
|
|
||||||
properties, Application tab, change BOTH the AssemblyName and the
|
|
||||||
default assembly name to ASCOM.xxx (e.g., ASCOM.SuperScope). <I>
|
|
||||||
This
|
|
||||||
may be done by default now.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Add one or more driver skeleton
|
|
||||||
projects using the in-proc templates. You may use either the C# or
|
|
||||||
VB templates. Project name is not important (not used in ProgID)
|
|
||||||
choose something like TelescopeDriver. You will be changing the
|
|
||||||
substituted project name in these projects below. If you ensure that
|
|
||||||
the LocalServer and all the driver projects have the same NameSpace
|
|
||||||
e.g. ASCOM.SuperScope the renaming in section 6a will not be
|
|
||||||
required.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Develop and debug these driver
|
|
||||||
projects as normal in-process assemblies. This will be much simpler
|
|
||||||
because the driver and test code can be debugged in the same
|
|
||||||
process.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Build the LocalServer.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Set a reference to the local
|
|
||||||
server <STRONG>project</STRONG> in each of the driver skeleton
|
|
||||||
projects.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">In each skeleton driver project:</P>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Do a Find In Files for the
|
|
||||||
project name of the skeleton driver (e.g., TelescopeDriver) and
|
|
||||||
change it to match the project name of your local server (e.g.
|
|
||||||
SuperScope). You don't have to do this in the ReadMe.html file.
|
|
||||||
Everywhere else, however, is IMPORTANT. This sets the correct
|
|
||||||
namespace, progID, etc. If you're a bit more brave, you can use
|
|
||||||
Replace in Files. <I>
|
|
||||||
This may not be needed if the correct
|
|
||||||
namespace and naming conventions have been followed when the
|
|
||||||
drivers and local server were generated.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties,
|
|
||||||
Application tab, change the assembly name to
|
|
||||||
ASCOM.<EM CLASS="underline">localserverprojectname</EM>.<EM>drivertype</EM>,
|
|
||||||
(e.g., ASCOM.SuperScope.Telescope).
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties,
|
|
||||||
Application tab, click Assembly Information...
|
|
||||||
</P>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Assure that Make assembly COM
|
|
||||||
visible is <STRONG>on</STRONG> (it should already be on).
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Edit the Product Name to be the
|
|
||||||
"friendly name" of your driver as will be shown in the
|
|
||||||
Chooser. <I>
|
|
||||||
Not used now, use the ServedClassName attribute
|
|
||||||
instead.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In project properties, Build tab,
|
|
||||||
turn <STRONG>off</STRONG> Register for COM Interop.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
Modify the driver class declaration to inherit from
|
|
||||||
ReferenceCountedObjectBase. Examples:<BR/>C#:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
public class Telescope :
|
|
||||||
ReferenceCountedObjectBase,
|
|
||||||
ITelescope
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
VB:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
Public Class Telescope
|
|
||||||
'==================================
|
|
||||||
Inherits ReferenceCountedObjectBase
|
|
||||||
Implements ITelescope
|
|
||||||
'==================================
|
|
||||||
</PRE>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In driver.cs/driver.vb, remove
|
|
||||||
the entire ASCOM Registration region
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
In driver.cs/driver.vb, remove
|
|
||||||
the private strings for driver ID and driver description. <I>
|
|
||||||
They
|
|
||||||
may be needed internally, and if so should be set from the
|
|
||||||
associated attributes, ServedClassName for the description and
|
|
||||||
ProgId for the driver Id.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Modify the class attributes by
|
|
||||||
adding the ServedClassName and ProgID attributes. The
|
|
||||||
ServedClassName attribute must be the friendly name shown as the
|
|
||||||
device name in the Chooser and the ProgId the progid of the driver
|
|
||||||
e.g. ASCOM.SuperScope.Telescope. The class header should look like
|
|
||||||
this:
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-bottom: 0cm">C#:</P>
|
|
||||||
<PRE CLASS="western" STYLE="margin-right: 0.16cm">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
[<FONT COLOR="#2b91af">Guid</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#a31515">"0AE8B38D-10A1-4A8D-A5B7-1B050F74B48B"</FONT><FONT COLOR="#000000">)] // set by the template</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ProgId</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#a31515">"ASCOM.SuperScope.Telescope"</FONT><FONT COLOR="#000000">)]</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ServedClassName</FONT><FONT COLOR="#000000"> (</FONT><FONT COLOR="#a31515">"Super Scope Telescope"</FONT><FONT COLOR="#000000">)]</FONT>
|
|
||||||
<FONT COLOR="#000000">[</FONT><FONT COLOR="#2b91af">ClassInterface</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#2b91af">ClassInterfaceType</FONT><FONT COLOR="#000000">.None)]</FONT>
|
|
||||||
<FONT COLOR="#0000ff">public </FONT><FONT COLOR="#0000ff">class </FONT><FONT COLOR="#2b91af">Telescope </FONT><FONT COLOR="#000000">: </FONT><FONT COLOR="#2b91af">ReferenceCountedObjectBase</FONT><FONT COLOR="#000000"> , </FONT><FONT COLOR="#2b91af">ITelescope</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<BR/>
|
|
||||||
</P>
|
|
||||||
<OL>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<P>VB:</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
<Guid(“<FONT COLOR="#a31515">0AE8B38D-10A1-4A8D-A5B7-1B050F74B48B</FONT>”)>
|
|
||||||
<ProgId(“ASCOM.SuperScope.Telescope”)>
|
|
||||||
<ServedClassName(“Super Scope Telescope”)>
|
|
||||||
Public Class Telescope
|
|
||||||
'==================================
|
|
||||||
Inherits ReferenceCountedObjectBase
|
|
||||||
Implements ITelescope
|
|
||||||
'==================================
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</OL>
|
|
||||||
</OL>
|
|
||||||
<P STYLE="margin-left: 2.5cm">
|
|
||||||
Add the following line to the driver
|
|
||||||
constructor, this sets the driver ID using the ProgId Attribute:
|
|
||||||
</P>
|
|
||||||
<OL>
|
|
||||||
<OL TYPE="a">
|
|
||||||
<P>C#</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
s_csDriverID = <FONT COLOR="#2b91af">Marshal</FONT><FONT COLOR="#000000">.GenerateProgIdForType(</FONT><FONT COLOR="#0000ff">this</FONT><FONT COLOR="#000000">.GetType());</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
<P>VB:</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
<FONT FACE="Consolas" SIZE="2" STYLE="font-size: 9pt">
|
|
||||||
s_csDriverID = <FONT COLOR="#2b91af">Marshal</FONT><FONT COLOR="#000000">.GenerateProgIdForType(</FONT><FONT COLOR="#0000ff">Me</FONT><FONT COLOR="#000000">.GetType())</FONT>
|
|
||||||
</FONT>
|
|
||||||
</PRE>
|
|
||||||
</OL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Unless you're writing a
|
|
||||||
single-driver hub, you will have two or more driver types (e.g.
|
|
||||||
Telescope and Focuser) and thus two or more driver assembly projects
|
|
||||||
added. Presumably, these drivers need to share some resources (e.g.
|
|
||||||
a single COM port via Helper.Serial). <U>
|
|
||||||
Put shared resources into
|
|
||||||
the SharedResources class provided
|
|
||||||
</U>. There are some examples that
|
|
||||||
should give a clue, modify and delete these as required.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
A shared serial port is already
|
|
||||||
provided (see SharedResources.cs) as <FONT FACE="Lucida Console, Courier New, Courier, monospace">SharedResources.SharedSerial</FONT>
|
|
||||||
and it is an ASCOM Helper Serial object. You may wish to define
|
|
||||||
additional shared resources in static member variables with public
|
|
||||||
static accessor properties as is already done for SharedSerial.
|
|
||||||
Unfortunately, if you are a Visual Basic programmer, you will have
|
|
||||||
to make these additions in C#.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
If you are writing a hub and don't
|
|
||||||
need the serial port, in SharedResources.cs you can remove the
|
|
||||||
public static SharedSerial property, the m_SharedSerial member in
|
|
||||||
the private data region, and the line in main that initializes it.
|
|
||||||
If you don't need any other shared resources for your hub, then you
|
|
||||||
can remove the SharedResources.cs file completely.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
If you modified the LocalServer,
|
|
||||||
build it again now. This will refresh the stuff that's visible to
|
|
||||||
the drivers.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
Build the driver skeletons to
|
|
||||||
verify that you got all of the namespace and other variable changes.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The local server dynamically loads the driver assemblies from
|
|
||||||
the same folder as the local server executable. <BR/>
|
|
||||||
<BR/>During
|
|
||||||
development, you'll need to add a post-build task to each of your
|
|
||||||
driver assembly projects which puts a copy of the driver assembly
|
|
||||||
into the local server executable folder. Here is an example:
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western"> copy "$(TargetPath)" "$(SolutionDir)\SuperScope\$(OutDir)\$(TargetFileName)"</PRE>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
This assumes that the server project is called “SuperScope”,
|
|
||||||
and handles using the debug or release build.<BR/>
|
|
||||||
Note the quotes for
|
|
||||||
possible path elements with spaces in them. <I>
|
|
||||||
An alternative is to
|
|
||||||
set the build path to the required destination instead of the
|
|
||||||
default path.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<I>
|
|
||||||
Make sure the drivers are
|
|
||||||
registered through the local server by running it with the /register
|
|
||||||
parameter, see below for details.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
<SPAN STYLE="background: #ffff00">IMPORTANT:</SPAN>
|
|
||||||
With a local server based driver (or hub) it is possible for
|
|
||||||
multiple clients to control the device(s). It is up to you to
|
|
||||||
safeguard against abuse. <I>
|
|
||||||
The sort of thing that's needed is to
|
|
||||||
have a counter of the number of connections to a device, the
|
|
||||||
connection is only fully broken when the number of connections is
|
|
||||||
zero. You may also need code to prevent several drivers from talking
|
|
||||||
to the hardware at the same time, the lock pattern is useful for
|
|
||||||
that.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
You may want to add controls and/or status information to the
|
|
||||||
main form frmMain of the local server. Please resist the temptation
|
|
||||||
to turn the local server's main form into a graphical device control
|
|
||||||
panel. Instead, make a separate application that uses the served
|
|
||||||
driver(s). <U>A driver is not a program!</U>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</OL>
|
|
||||||
<H3>Notes</H3>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
The local server handles all of
|
|
||||||
the registration and unregistration for each of its served driver
|
|
||||||
classes, including the ASCOM Chooser info and the DCOM/AppID info
|
|
||||||
needed for activation from TheSky. By running the server from a
|
|
||||||
command line and giving /register or /unregister as the command line
|
|
||||||
option, it will register or unregister all served classes
|
|
||||||
(respectively). <SPAN STYLE="background: #ffff00">
|
|
||||||
Never use REGASM
|
|
||||||
on the local server executable!
|
|
||||||
</SPAN> <I>
|
|
||||||
This can be done in the
|
|
||||||
Visual Studio IDE by setting the server project to run as startup
|
|
||||||
and setting the command line argument to /register in Debug –
|
|
||||||
Start Options.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
When you make the installer for
|
|
||||||
your local server based driver/hub, do not let it register the
|
|
||||||
executable for COM. Instead, have it activate the installed local
|
|
||||||
server with the /register option.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The ASCOM registration uses the ServedClassName attribute as
|
|
||||||
the friendly name that will show in the chooser and the ProgId
|
|
||||||
attribute as the driver Id.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
The best deployment way is to install all the files in a
|
|
||||||
folder that's a sub folder of the main driver, so the SuperScope
|
|
||||||
driver files will be in the folder ...\ASCOM\Telescope\SuperScope.
|
|
||||||
This can be done in the Inno script by changing the DefaultDirName
|
|
||||||
like this:<BR/>
|
|
||||||
DefaultDirName="{cf}\ASCOM\Telescope\SuperScope"<BR/>then
|
|
||||||
the files can all be installed with DestDir: {app};
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
<H3>
|
|
||||||
<A NAME="theory"></A>Theory of Operation
|
|
||||||
</H3>
|
|
||||||
<P>
|
|
||||||
The local server is an executable which can provide multiple
|
|
||||||
instances of multiple drivers to multiple clients. This capability is
|
|
||||||
needed for two applications:
|
|
||||||
</P>
|
|
||||||
<UL>
|
|
||||||
<LI>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
A hub, which allows multiple
|
|
||||||
clients to share a single device
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
<LI>
|
|
||||||
<P>
|
|
||||||
A device which provides multiple services, such as a
|
|
||||||
telescope which has a focuser built-in where both the telescope and
|
|
||||||
focuser are controlled by the same serial connection and different
|
|
||||||
client programs need to control to the focuser and telescope.
|
|
||||||
</P>
|
|
||||||
</LI>
|
|
||||||
</UL>
|
|
||||||
<P>
|
|
||||||
By simply dropping suitably developed driver assemblies into the
|
|
||||||
same folder as the local server executable, the local server will
|
|
||||||
find them and register them for COM and ASCOM and serve any number of
|
|
||||||
instances of the drivers' interfaces to any number of client
|
|
||||||
programs. It does this by locating and loading the driver assemblies,
|
|
||||||
analysing them to detect their classes and interfaces, and
|
|
||||||
implementing a class factory that can create instances of them for
|
|
||||||
clients.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
A driver is an assembly which contains a class that <EM>implements</EM>
|
|
||||||
one of the ASCOM standard driver interfaces and <EM>inherits</EM> the
|
|
||||||
ReferenceCountedObjectBase class of the local server. Apart from
|
|
||||||
that, driver assemblies are identical to those that are used
|
|
||||||
in-process (DLL-type). The instructions above detail the steps needed
|
|
||||||
to convert an in-process driver into one that can be served by the
|
|
||||||
local server.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
The name of the local server is important, so we provide it as a
|
|
||||||
<EM>template</EM> from which you can create a local server for your
|
|
||||||
produce. To make this clear, let's assume that your company AlphaTech
|
|
||||||
produces a telescope system which contains a microcontroller that is
|
|
||||||
able to control not only the telescope mount, but also a focuser and
|
|
||||||
a camera rotator. The mount, focuser, and rotator are all controlled
|
|
||||||
via commands sent through a common serial line connecting the
|
|
||||||
computer to the microcontroller, so you need a local server. In
|
|
||||||
ASCOM, then, you probably want your system to appear as
|
|
||||||
AlphaTech.Telescope, AlphaTech.Focuser, and AlphaTech.Rotator. Then
|
|
||||||
you would name the local server AlphaTech. Be sure to give this due
|
|
||||||
consideration before creating the template, the project name is the
|
|
||||||
name of your local server. <I>
|
|
||||||
Is this still correct? I get the
|
|
||||||
impression that ASCOM.AlphaTech.Server would be OK.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
The fact that driver classes inherit from the local server's
|
|
||||||
ReferenceCountedObjectBase class allows the local server to maintain
|
|
||||||
a reference count on the driver class. If a client creates an
|
|
||||||
instance of a served driver, the local server automatically starts up
|
|
||||||
and provides an instance of the class to the client. Once started the
|
|
||||||
local server can provide additional instances of any of its served
|
|
||||||
driver classes. If the reference count of all served classes drops to
|
|
||||||
zero as a result of clients releasing their instances, the local
|
|
||||||
server will automatically exit.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
Registration services provided include not only the basic COM
|
|
||||||
class registration, but also DCOM/AppID info needed to use the served
|
|
||||||
classes from outbound connections from Software Bisque's TheSky. It
|
|
||||||
also registers the served classes for the ASCOM Chooser. The
|
|
||||||
"friendly" name of each served driver that appears in the
|
|
||||||
chooser comes from the driver's ServedClassName attribute. This also
|
|
||||||
used to identify a driver so that non driver dlls, such as Interop
|
|
||||||
dlls can be ignored. The COM ProgID for each served driver is
|
|
||||||
specified in the ProgId attribute - ASCOM.<EM>localservername</EM>.<EM>drivertype</EM>,
|
|
||||||
for example, ASCOM.AlphaTech.Telescope, where AlphaTech is the local
|
|
||||||
server name and Telescope is the type of the driver. Unregistering
|
|
||||||
removes all of this information from the system. Specifying the
|
|
||||||
ProgId as an attribute allows multiple driver assemblies to be
|
|
||||||
generated using the same source and namespace. This is used to
|
|
||||||
provide multiple instances of the same driver, each with a different
|
|
||||||
ProgId and so able to be registered separately.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
Driver DLLs are identified for registering/unregistering because
|
|
||||||
they contain a type with the ServedClassName attribute. Only these
|
|
||||||
will be registered for Com and ASCOM. This has changed; in Platform
|
|
||||||
5 there was no attribute and the local server attempted to register
|
|
||||||
all dlls. The new behaviour allows support dlls such as interop dlls
|
|
||||||
to be included without them being registered incorrectly. There was
|
|
||||||
also an interim version where the ServedClassName attribute was on
|
|
||||||
the assembly, not the class. <I>
|
|
||||||
All these previous versions, and the
|
|
||||||
new drivers will operate together with Platform 6, the changes are
|
|
||||||
local to the individual drivers.
|
|
||||||
</I>
|
|
||||||
</P>
|
|
||||||
<H3>
|
|
||||||
<A NAME="details"></A>Detailed Use and Deployment
|
|
||||||
</H3>
|
|
||||||
<P>
|
|
||||||
Once you have built your local server and the served driver class
|
|
||||||
assemblies, here's how to use it. To register the served classes,
|
|
||||||
activate the local server from a shell command line with the option
|
|
||||||
/register (or /regserver, for VB6 compatibility):
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
C:\xxx> <EM>localserver</EM>.exe /register
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
To unregister the local server and its drivers, activate the local
|
|
||||||
server from a shell command line with the option /unregister (or
|
|
||||||
/unregserver for VB6 compatibility):
|
|
||||||
</P>
|
|
||||||
<PRE CLASS="western">
|
|
||||||
C:\xxx> <EM>localserver</EM>.exe /unregister
|
|
||||||
</PRE>
|
|
||||||
<P>
|
|
||||||
When the operating system starts the local server in response to a
|
|
||||||
client creating one of it's served driver classes, the command option
|
|
||||||
/embedding is included. The local server's code detects this and sets
|
|
||||||
a variable that you can use.
|
|
||||||
</P>
|
|
||||||
<P STYLE="margin-bottom: 0cm">
|
|
||||||
When deploying a hub or set of drivers
|
|
||||||
with the local server, you'll have to arrange for the local server
|
|
||||||
and the driver assemblies to be placed together in a folder in the
|
|
||||||
ASCOM driver folder. Any support files, such as Interop DLLs can be
|
|
||||||
put in the same fiolder. That's all you need to do, the local server
|
|
||||||
will find them in the same folder as it is located in.
|
|
||||||
</P>
|
|
||||||
<DIV ALIGN="RIGHT">
|
|
||||||
<TABLE WIDTH="100"% BORDER="0" CELLPADDING="4" CELLSPACING="0">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<TABLE WIDTH="100"% BORDER="0" CELLPADDING="4" CELLSPACING="0">
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<H3>ASCOM Initiative</H3>
|
|
||||||
</TD>
|
|
||||||
<TD>
|
|
||||||
<IMG SRC="ASCOM.png" NAME="graphics1" ALIGN="RIGHT" WIDTH="48" HEIGHT="56" BORDER="0"/>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
<TR>
|
|
||||||
<TD>
|
|
||||||
<P>
|
|
||||||
The ASCOM Initiative consists of a group of astronomy software
|
|
||||||
developers and instrument vendors whose goals are to promote the
|
|
||||||
driver/client model and scripting automation.
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
See the <A HREF="http://ascom-standards.org/" TARGET="browser">
|
|
||||||
ASCOM
|
|
||||||
web site
|
|
||||||
</A> for more information. Please participate in the
|
|
||||||
<A HREF="http://tech.groups.yahoo.com/group/ASCOM-Talk" TARGET="browser">
|
|
||||||
ASCOM-Talk
|
|
||||||
Yahoo Group
|
|
||||||
</A>.
|
|
||||||
</P>
|
|
||||||
</TD>
|
|
||||||
</TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
<P>
|
|
||||||
<BR/>
|
|
||||||
<BR/>
|
|
||||||
|
|
||||||
</P>
|
|
||||||
</BODY>
|
|
||||||
</HTML>
|
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO.Ports;
|
||||||
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using ASCOM.Meade.net.Properties;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -13,6 +16,16 @@ namespace ASCOM.Meade.net
|
|||||||
public SetupDialogForm()
|
public SetupDialogForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
var assemblyInfo = new AssemblyInfo();
|
||||||
|
|
||||||
|
Text = string.Format(Resources.SetupDialogForm_SetupDialogForm__0__Settings___1__, assemblyInfo.Product, assemblyInfo.AssemblyVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed override string Text
|
||||||
|
{
|
||||||
|
get => base.Text;
|
||||||
|
set => base.Text = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cmdCancel_Click(object sender, EventArgs e) // Cancel button event handler
|
private void cmdCancel_Click(object sender, EventArgs e) // Cancel button event handler
|
||||||
@@ -24,7 +37,7 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
System.Diagnostics.Process.Start("http://ascom-standards.org/");
|
Process.Start("http://ascom-standards.org/");
|
||||||
}
|
}
|
||||||
catch (Win32Exception noBrowser)
|
catch (Win32Exception noBrowser)
|
||||||
{
|
{
|
||||||
@@ -42,15 +55,14 @@ namespace ASCOM.Meade.net
|
|||||||
chkTrace.Checked = profileProperties.TraceLogger;
|
chkTrace.Checked = profileProperties.TraceLogger;
|
||||||
// set the list of com ports to those that are currently available
|
// set the list of com ports to those that are currently available
|
||||||
comboBoxComPort.Items.Clear();
|
comboBoxComPort.Items.Clear();
|
||||||
comboBoxComPort.Items.AddRange(System.IO.Ports.SerialPort
|
comboBoxComPort.Items.AddRange(SerialPort.GetPortNames().ToArray<object>()); // use System.IO because it's static
|
||||||
.GetPortNames()); // use System.IO because it's static
|
|
||||||
// select the current port if possible
|
// select the current port if possible
|
||||||
if (comboBoxComPort.Items.Contains(profileProperties.ComPort))
|
if (comboBoxComPort.Items.Contains(profileProperties.ComPort))
|
||||||
{
|
{
|
||||||
comboBoxComPort.SelectedItem = profileProperties.ComPort;
|
comboBoxComPort.SelectedItem = profileProperties.ComPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
txtGuideRate.Text = profileProperties.GuideRateArcSecondsPerSecond.ToString();
|
txtGuideRate.Text = profileProperties.GuideRateArcSecondsPerSecond.ToString(CultureInfo.CurrentCulture);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
cboPrecision.SelectedItem = profileProperties.Precision;
|
cboPrecision.SelectedItem = profileProperties.Precision;
|
||||||
@@ -59,6 +71,16 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
cboPrecision.SelectedItem = "Unchanged";
|
cboPrecision.SelectedItem = "Unchanged";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cboGuidingStyle.SelectedItem = profileProperties.GuidingStyle;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
cboGuidingStyle.SelectedItem = "Auto";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileProperties GetProfile()
|
public ProfileProperties GetProfile()
|
||||||
@@ -68,7 +90,8 @@ namespace ASCOM.Meade.net
|
|||||||
TraceLogger = chkTrace.Checked,
|
TraceLogger = chkTrace.Checked,
|
||||||
ComPort = comboBoxComPort.SelectedItem.ToString(),
|
ComPort = comboBoxComPort.SelectedItem.ToString(),
|
||||||
GuideRateArcSecondsPerSecond = double.Parse(txtGuideRate.Text.Trim()),
|
GuideRateArcSecondsPerSecond = double.Parse(txtGuideRate.Text.Trim()),
|
||||||
Precision = cboPrecision.SelectedItem.ToString()
|
Precision = cboPrecision.SelectedItem.ToString(),
|
||||||
|
GuidingStyle = cboGuidingStyle.SelectedItem.ToString()
|
||||||
};
|
};
|
||||||
|
|
||||||
return profileProperties;
|
return profileProperties;
|
||||||
@@ -84,15 +107,14 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
private void TextBox1_TextChanged(object sender, EventArgs e)
|
private void TextBox1_TextChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
//const double SIDRATE = 0.9972695677; //synodic/solar seconds per sidereal second
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
double newGuideRate = double.Parse(txtGuideRate.Text.Trim());
|
double newGuideRate = double.Parse(txtGuideRate.Text.Trim());
|
||||||
|
|
||||||
const double siderealArcSecondsPerSecond = 15.041;
|
const double siderealArcSecondsPerSecond = 15.041;
|
||||||
var percentOfSideReal = (newGuideRate / siderealArcSecondsPerSecond * 100);
|
var percentOfSideReal = newGuideRate / siderealArcSecondsPerSecond * 100;
|
||||||
|
|
||||||
lblPercentOfSiderealRate.Text = $"({percentOfSideReal:00.0}% of sidereal rate)";
|
lblPercentOfSiderealRate.Text = string.Format(Resources.SetupDialogForm_TextBox1_TextChanged___0_00_0___of_sidereal_rate_, percentOfSideReal);
|
||||||
_guideRateValid = true;
|
_guideRateValid = true;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
@@ -101,17 +123,32 @@ namespace ASCOM.Meade.net
|
|||||||
_guideRateValid = false;
|
_guideRateValid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateOKButton();
|
UpdateOkButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateOKButton()
|
private void UpdateOkButton()
|
||||||
{
|
{
|
||||||
cmdOK.Enabled = _guideRateValid && (comboBoxComPort.SelectedItem != null);
|
cmdOK.Enabled = _guideRateValid && (comboBoxComPort.SelectedItem != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ComboBoxComPort_SelectedValueChanged(object sender, EventArgs e)
|
private void ComboBoxComPort_SelectedValueChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
UpdateOKButton();
|
UpdateOkButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetReadOnlyMode()
|
||||||
|
{
|
||||||
|
foreach (Control control in Controls)
|
||||||
|
{
|
||||||
|
control.Enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdCancel.Enabled = true;
|
||||||
|
//cmdOK.Enabled = false;
|
||||||
|
//comboBoxComPort.Enabled = false;
|
||||||
|
//chkTrace.Enabled = false;
|
||||||
|
//txtGuideRate.Enabled = false;
|
||||||
|
//cboPrecision.Enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+39
-14
@@ -1,3 +1,6 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
partial class SetupDialogForm
|
partial class SetupDialogForm
|
||||||
@@ -5,7 +8,7 @@ namespace ASCOM.Meade.net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required designer variable.
|
/// Required designer variable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private System.ComponentModel.IContainer components = null;
|
private IContainer components = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Clean up any resources being used.
|
/// Clean up any resources being used.
|
||||||
@@ -42,6 +45,8 @@ namespace ASCOM.Meade.net
|
|||||||
this.lblPercentOfSiderealRate = new System.Windows.Forms.Label();
|
this.lblPercentOfSiderealRate = new System.Windows.Forms.Label();
|
||||||
this.label5 = new System.Windows.Forms.Label();
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
this.cboPrecision = new System.Windows.Forms.ComboBox();
|
this.cboPrecision = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
|
this.cboGuidingStyle = new System.Windows.Forms.ComboBox();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.picASCOM)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.picASCOM)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -130,10 +135,28 @@ namespace ASCOM.Meade.net
|
|||||||
resources.ApplyResources(this.cboPrecision, "cboPrecision");
|
resources.ApplyResources(this.cboPrecision, "cboPrecision");
|
||||||
this.cboPrecision.Name = "cboPrecision";
|
this.cboPrecision.Name = "cboPrecision";
|
||||||
//
|
//
|
||||||
|
// label6
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.label6, "label6");
|
||||||
|
this.label6.Name = "label6";
|
||||||
|
//
|
||||||
|
// cboGuidingStyle
|
||||||
|
//
|
||||||
|
this.cboGuidingStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.cboGuidingStyle.FormattingEnabled = true;
|
||||||
|
this.cboGuidingStyle.Items.AddRange(new object[] {
|
||||||
|
resources.GetString("cboGuidingStyle.Items"),
|
||||||
|
resources.GetString("cboGuidingStyle.Items1"),
|
||||||
|
resources.GetString("cboGuidingStyle.Items2")});
|
||||||
|
resources.ApplyResources(this.cboGuidingStyle, "cboGuidingStyle");
|
||||||
|
this.cboGuidingStyle.Name = "cboGuidingStyle";
|
||||||
|
//
|
||||||
// SetupDialogForm
|
// SetupDialogForm
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.cboGuidingStyle);
|
||||||
|
this.Controls.Add(this.label6);
|
||||||
this.Controls.Add(this.cboPrecision);
|
this.Controls.Add(this.cboPrecision);
|
||||||
this.Controls.Add(this.label5);
|
this.Controls.Add(this.label5);
|
||||||
this.Controls.Add(this.lblPercentOfSiderealRate);
|
this.Controls.Add(this.lblPercentOfSiderealRate);
|
||||||
@@ -162,18 +185,20 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.Button cmdOK;
|
private Button cmdOK;
|
||||||
private System.Windows.Forms.Button cmdCancel;
|
private Button cmdCancel;
|
||||||
private System.Windows.Forms.Label label1;
|
private Label label1;
|
||||||
private System.Windows.Forms.PictureBox picASCOM;
|
private PictureBox picASCOM;
|
||||||
private System.Windows.Forms.Label label2;
|
private Label label2;
|
||||||
private System.Windows.Forms.CheckBox chkTrace;
|
private CheckBox chkTrace;
|
||||||
private System.Windows.Forms.ComboBox comboBoxComPort;
|
private ComboBox comboBoxComPort;
|
||||||
private System.Windows.Forms.Label label3;
|
private Label label3;
|
||||||
private System.Windows.Forms.TextBox txtGuideRate;
|
private TextBox txtGuideRate;
|
||||||
private System.Windows.Forms.Label label4;
|
private Label label4;
|
||||||
private System.Windows.Forms.Label lblPercentOfSiderealRate;
|
private Label lblPercentOfSiderealRate;
|
||||||
private System.Windows.Forms.Label label5;
|
private Label label5;
|
||||||
private System.Windows.Forms.ComboBox cboPrecision;
|
private ComboBox cboPrecision;
|
||||||
|
private Label label6;
|
||||||
|
private ComboBox cboGuidingStyle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root>
|
<root>
|
||||||
<!--
|
<!--
|
||||||
Microsoft ResX Schema
|
Microsoft ResX Schema
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="cmdOK.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cmdOK.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>281, 225</value>
|
<value>281, 250</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmdOK.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cmdOK.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>59, 24</value>
|
<value>59, 24</value>
|
||||||
@@ -145,13 +145,13 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cmdOK.ZOrder" xml:space="preserve">
|
<data name=">>cmdOK.ZOrder" xml:space="preserve">
|
||||||
<value>12</value>
|
<value>14</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmdCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
<data name="cmdCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||||
<value>Bottom, Right</value>
|
<value>Bottom, Right</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmdCancel.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cmdCancel.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>281, 255</value>
|
<value>281, 280</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cmdCancel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cmdCancel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>59, 25</value>
|
<value>59, 25</value>
|
||||||
@@ -172,13 +172,13 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cmdCancel.ZOrder" xml:space="preserve">
|
<data name=">>cmdCancel.ZOrder" xml:space="preserve">
|
||||||
<value>11</value>
|
<value>13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>12, 9</value>
|
<value>12, 9</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>123, 31</value>
|
<value>274, 31</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
@@ -196,7 +196,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||||
<value>10</value>
|
<value>12</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="picASCOM.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
<data name="picASCOM.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||||
<value>Top, Right</value>
|
<value>Top, Right</value>
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>picASCOM.ZOrder" xml:space="preserve">
|
<data name=">>picASCOM.ZOrder" xml:space="preserve">
|
||||||
<value>9</value>
|
<value>11</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@@ -250,13 +250,13 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||||
<value>8</value>
|
<value>10</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkTrace.AutoSize" type="System.Boolean, mscorlib">
|
<data name="chkTrace.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkTrace.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="chkTrace.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>77, 136</value>
|
<value>86, 136</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="chkTrace.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="chkTrace.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>69, 17</value>
|
<value>69, 17</value>
|
||||||
@@ -277,10 +277,10 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>chkTrace.ZOrder" xml:space="preserve">
|
<data name=">>chkTrace.ZOrder" xml:space="preserve">
|
||||||
<value>7</value>
|
<value>9</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="comboBoxComPort.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="comboBoxComPort.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>77, 87</value>
|
<value>86, 87</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="comboBoxComPort.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="comboBoxComPort.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>90, 21</value>
|
<value>90, 21</value>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>comboBoxComPort.ZOrder" xml:space="preserve">
|
<data name=">>comboBoxComPort.ZOrder" xml:space="preserve">
|
||||||
<value>6</value>
|
<value>8</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@@ -325,10 +325,10 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||||
<value>5</value>
|
<value>7</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtGuideRate.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtGuideRate.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>77, 159</value>
|
<value>86, 159</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtGuideRate.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="txtGuideRate.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>46, 20</value>
|
<value>46, 20</value>
|
||||||
@@ -349,13 +349,13 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>txtGuideRate.ZOrder" xml:space="preserve">
|
<data name=">>txtGuideRate.ZOrder" xml:space="preserve">
|
||||||
<value>4</value>
|
<value>6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>129, 162</value>
|
<value>138, 162</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>122, 13</value>
|
<value>122, 13</value>
|
||||||
@@ -376,13 +376,13 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||||
<value>3</value>
|
<value>5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblPercentOfSiderealRate.AutoSize" type="System.Boolean, mscorlib">
|
<data name="lblPercentOfSiderealRate.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblPercentOfSiderealRate.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="lblPercentOfSiderealRate.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>129, 175</value>
|
<value>138, 175</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblPercentOfSiderealRate.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="lblPercentOfSiderealRate.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>105, 13</value>
|
<value>105, 13</value>
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>lblPercentOfSiderealRate.ZOrder" xml:space="preserve">
|
<data name=">>lblPercentOfSiderealRate.ZOrder" xml:space="preserve">
|
||||||
<value>2</value>
|
<value>4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
@@ -430,7 +430,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>label5.ZOrder" xml:space="preserve">
|
<data name=">>label5.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cboPrecision.Items" xml:space="preserve">
|
<data name="cboPrecision.Items" xml:space="preserve">
|
||||||
<value>Unchanged</value>
|
<value>Unchanged</value>
|
||||||
@@ -442,7 +442,7 @@
|
|||||||
<value>High</value>
|
<value>High</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cboPrecision.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cboPrecision.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>77, 191</value>
|
<value>86, 191</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cboPrecision.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cboPrecision.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>90, 21</value>
|
<value>90, 21</value>
|
||||||
@@ -460,6 +460,66 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>cboPrecision.ZOrder" xml:space="preserve">
|
<data name=">>cboPrecision.ZOrder" xml:space="preserve">
|
||||||
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>13, 221</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>67, 13</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>14</value>
|
||||||
|
</data>
|
||||||
|
<data name="label6.Text" xml:space="preserve">
|
||||||
|
<value>Guiding style</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label6.Name" xml:space="preserve">
|
||||||
|
<value>label6</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label6.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label6.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||||
|
<value>1</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.Items" xml:space="preserve">
|
||||||
|
<value>Auto</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.Items1" xml:space="preserve">
|
||||||
|
<value>Guide rate slew</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.Items2" xml:space="preserve">
|
||||||
|
<value>Pulse guiding</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>86, 218</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>90, 21</value>
|
||||||
|
</data>
|
||||||
|
<data name="cboGuidingStyle.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>15</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cboGuidingStyle.Name" xml:space="preserve">
|
||||||
|
<value>cboGuidingStyle</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cboGuidingStyle.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cboGuidingStyle.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>cboGuidingStyle.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
@@ -469,7 +529,7 @@
|
|||||||
<value>6, 13</value>
|
<value>6, 13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>350, 288</value>
|
<value>350, 313</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||||
<value>CenterScreen</value>
|
<value>CenterScreen</value>
|
||||||
|
|||||||
+88
-120
@@ -13,9 +13,14 @@
|
|||||||
// Written by: Bob Denny 29-May-2007
|
// Written by: Bob Denny 29-May-2007
|
||||||
// Modified by Chris Rowland and Peter Simpson to hamdle multiple hardware devices March 2011
|
// Modified by Chris Rowland and Peter Simpson to hamdle multiple hardware devices March 2011
|
||||||
//
|
//
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using ASCOM.Meade.net.Wrapper;
|
||||||
using ASCOM.Utilities;
|
using ASCOM.Utilities;
|
||||||
|
using ASCOM.Utilities.Interfaces;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -33,7 +38,7 @@ namespace ASCOM.Meade.net
|
|||||||
private static readonly object LockObject = new object();
|
private static readonly object LockObject = new object();
|
||||||
|
|
||||||
// Shared serial port. This will allow multiple drivers to use one single serial port.
|
// Shared serial port. This will allow multiple drivers to use one single serial port.
|
||||||
private static Serial _sSharedSerial; // Shared serial port
|
private static ISerial _sSharedSerial; // Shared serial port
|
||||||
|
|
||||||
//
|
//
|
||||||
// Public access to shared resources
|
// Public access to shared resources
|
||||||
@@ -56,14 +61,19 @@ namespace ASCOM.Meade.net
|
|||||||
//
|
//
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Shared serial port
|
/// Shared serial port. Do not directly access this method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Serial SharedSerial => _sSharedSerial ?? (_sSharedSerial = new Serial());
|
public static ISerial SharedSerial
|
||||||
|
{
|
||||||
|
get => _sSharedSerial ?? (_sSharedSerial = new Serial());
|
||||||
|
set => _sSharedSerial = value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
public static IProfileFactory ProfileFactory
|
||||||
/// number of connections to the shared serial port
|
{
|
||||||
/// </summary>
|
get => _profileFactory ?? ( _profileFactory = new ProfileFactory());
|
||||||
public static int Connections { get; set; } = 0;
|
set => _profileFactory = value;
|
||||||
|
}
|
||||||
|
|
||||||
public static void SendBlind(string message)
|
public static void SendBlind(string message)
|
||||||
{
|
{
|
||||||
@@ -74,12 +84,6 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool SendBool(string message)
|
|
||||||
{
|
|
||||||
SharedSerial.ClearBuffers();
|
|
||||||
return SendChar(message) == "1";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Example of a shared SendMessage method, the lock
|
/// Example of a shared SendMessage method, the lock
|
||||||
/// prevents different drivers tripping over one another.
|
/// prevents different drivers tripping over one another.
|
||||||
@@ -116,47 +120,14 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ReadCharacters(int throwAwayCharacters)
|
public static void ReadCharacters(int throwAwayCharacters)
|
||||||
{
|
{
|
||||||
lock (LockObject)
|
lock (LockObject)
|
||||||
{
|
{
|
||||||
return SharedSerial.ReceiveCounted(throwAwayCharacters);
|
SharedSerial.ReceiveCounted(throwAwayCharacters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Example of handling connecting to and disconnection from the
|
|
||||||
/// shared serial port.
|
|
||||||
/// Needs error handling
|
|
||||||
/// the port name etc. needs to be set up first, this could be done by the driver
|
|
||||||
/// checking Connected and if it's false setting up the port before setting connected to true.
|
|
||||||
/// It could also be put here.
|
|
||||||
/// </summary>
|
|
||||||
public static bool Connected
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (LockObject)
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
if (Connections == 0)
|
|
||||||
SharedSerial.Connected = true;
|
|
||||||
Connections++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Connections--;
|
|
||||||
if (Connections <= 0)
|
|
||||||
{
|
|
||||||
SharedSerial.Connected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
get => SharedSerial.Connected;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Profile
|
#region Profile
|
||||||
@@ -168,18 +139,20 @@ namespace ASCOM.Meade.net
|
|||||||
private const string TraceStateProfileName = "Trace Level";
|
private const string TraceStateProfileName = "Trace Level";
|
||||||
private const string GuideRateProfileName = "Guide Rate Arc Seconds Per Second";
|
private const string GuideRateProfileName = "Guide Rate Arc Seconds Per Second";
|
||||||
private const string PrecisionProfileName = "Precision";
|
private const string PrecisionProfileName = "Precision";
|
||||||
|
private const string GuidingStyleProfileName = "Guiding Style";
|
||||||
|
|
||||||
public static void WriteProfile(ProfileProperties profileProperties)
|
public static void WriteProfile(ProfileProperties profileProperties)
|
||||||
{
|
{
|
||||||
lock (LockObject)
|
lock (LockObject)
|
||||||
{
|
{
|
||||||
using (Profile driverProfile = new Profile())
|
using (IProfileWrapper driverProfile = ProfileFactory.Create())
|
||||||
{
|
{
|
||||||
driverProfile.DeviceType = "Telescope";
|
driverProfile.DeviceType = "Telescope";
|
||||||
driverProfile.WriteValue(DriverId, TraceStateProfileName, profileProperties.TraceLogger.ToString());
|
driverProfile.WriteValue(DriverId, TraceStateProfileName, profileProperties.TraceLogger.ToString());
|
||||||
driverProfile.WriteValue(DriverId, ComPortProfileName, profileProperties.ComPort);
|
driverProfile.WriteValue(DriverId, ComPortProfileName, profileProperties.ComPort);
|
||||||
driverProfile.WriteValue(DriverId, GuideRateProfileName, profileProperties.GuideRateArcSecondsPerSecond.ToString());
|
driverProfile.WriteValue(DriverId, GuideRateProfileName, profileProperties.GuideRateArcSecondsPerSecond.ToString(CultureInfo.InvariantCulture));
|
||||||
driverProfile.WriteValue(DriverId, PrecisionProfileName, profileProperties.Precision);
|
driverProfile.WriteValue(DriverId, PrecisionProfileName, profileProperties.Precision);
|
||||||
|
driverProfile.WriteValue(DriverId, GuidingStyleProfileName, profileProperties.GuidingStyle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,19 +161,22 @@ namespace ASCOM.Meade.net
|
|||||||
private const string TraceStateDefault = "false";
|
private const string TraceStateDefault = "false";
|
||||||
private const string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
private const string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate
|
||||||
private const string PrecisionDefault = "Unchanged";
|
private const string PrecisionDefault = "Unchanged";
|
||||||
|
private const string GuidingStyleDefault = "Auto";
|
||||||
|
|
||||||
|
|
||||||
public static ProfileProperties ReadProfile()
|
public static ProfileProperties ReadProfile()
|
||||||
{
|
{
|
||||||
lock (LockObject)
|
lock (LockObject)
|
||||||
{
|
{
|
||||||
ProfileProperties profileProperties = new ProfileProperties();
|
ProfileProperties profileProperties = new ProfileProperties();
|
||||||
using (Profile driverProfile = new Profile())
|
using (IProfileWrapper driverProfile = ProfileFactory.Create())
|
||||||
{
|
{
|
||||||
driverProfile.DeviceType = "Telescope";
|
driverProfile.DeviceType = "Telescope";
|
||||||
profileProperties.ComPort = driverProfile.GetValue(DriverId, ComPortProfileName, string.Empty, ComPortDefault);
|
profileProperties.ComPort = driverProfile.GetValue(DriverId, ComPortProfileName, string.Empty, ComPortDefault);
|
||||||
profileProperties.TraceLogger = Convert.ToBoolean(driverProfile.GetValue(DriverId, TraceStateProfileName, string.Empty, TraceStateDefault));
|
profileProperties.TraceLogger = Convert.ToBoolean(driverProfile.GetValue(DriverId, TraceStateProfileName, string.Empty, TraceStateDefault));
|
||||||
profileProperties.GuideRateArcSecondsPerSecond = double.Parse(driverProfile.GetValue(DriverId, GuideRateProfileName, string.Empty, GuideRateProfileNameDefault));
|
profileProperties.GuideRateArcSecondsPerSecond = double.Parse(driverProfile.GetValue(DriverId, GuideRateProfileName, string.Empty, GuideRateProfileNameDefault), NumberFormatInfo.InvariantInfo);
|
||||||
profileProperties.Precision = driverProfile.GetValue(DriverId, PrecisionProfileName, string.Empty, PrecisionDefault);
|
profileProperties.Precision = driverProfile.GetValue(DriverId, PrecisionProfileName, string.Empty, PrecisionDefault);
|
||||||
|
profileProperties.GuidingStyle = driverProfile.GetValue(DriverId, GuidingStyleProfileName, string.Empty, GuidingStyleDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
return profileProperties;
|
return profileProperties;
|
||||||
@@ -213,22 +189,19 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
public static void SetupDialog()
|
public static void SetupDialog()
|
||||||
{
|
{
|
||||||
// consider only showing the setup dialog if not connected
|
|
||||||
// or call a different dialog if connected
|
|
||||||
if (Connections > 0)
|
|
||||||
{
|
|
||||||
System.Windows.Forms.MessageBox.Show("Already connected, please disconnect before altering settings");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var profileProperties = ReadProfile();
|
var profileProperties = ReadProfile();
|
||||||
|
|
||||||
using (SetupDialogForm f = new SetupDialogForm())
|
using (SetupDialogForm f = new SetupDialogForm())
|
||||||
{
|
{
|
||||||
f.SetProfile(profileProperties);
|
f.SetProfile(profileProperties);
|
||||||
|
|
||||||
|
if (IsConnected())
|
||||||
|
{
|
||||||
|
f.SetReadOnlyMode();
|
||||||
|
}
|
||||||
|
|
||||||
var result = f.ShowDialog();
|
var result = f.ShowDialog();
|
||||||
if (result == System.Windows.Forms.DialogResult.OK)
|
if (result == DialogResult.OK)
|
||||||
{
|
{
|
||||||
profileProperties = f.GetProfile();
|
profileProperties = f.GetProfile();
|
||||||
|
|
||||||
@@ -258,9 +231,10 @@ namespace ASCOM.Meade.net
|
|||||||
/// The Key is the connection number that identifies the device, it could be the COM port name,
|
/// The Key is the connection number that identifies the device, it could be the COM port name,
|
||||||
/// USB ID or IP Address, the Value is the DeviceHardware class
|
/// USB ID or IP Address, the Value is the DeviceHardware class
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly Dictionary<string, DeviceHardware> _connectedDevices = new Dictionary<string, DeviceHardware>();
|
private static readonly Dictionary<string, DeviceHardware> ConnectedDevices = new Dictionary<string, DeviceHardware>();
|
||||||
|
|
||||||
private static readonly Dictionary<string, DeviceHardware> _connectedDeviceIds = new Dictionary<string, DeviceHardware>();
|
private static readonly Dictionary<string, DeviceHardware> ConnectedDeviceIds = new Dictionary<string, DeviceHardware>();
|
||||||
|
private static IProfileFactory _profileFactory ;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -268,21 +242,21 @@ namespace ASCOM.Meade.net
|
|||||||
/// it add the device id to the list of devices if it's not there and increments the device count.
|
/// it add the device id to the list of devices if it's not there and increments the device count.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="deviceId"></param>
|
/// <param name="deviceId"></param>
|
||||||
public static ConnectionInfo Connect(string deviceId, string driverId)
|
/// <param name="driverId"></param>
|
||||||
|
/// <param name="traceLogger"></param>
|
||||||
|
public static ConnectionInfo Connect(string deviceId, string driverId, ITraceLogger traceLogger)
|
||||||
{
|
{
|
||||||
lock (LockObject)
|
lock (LockObject)
|
||||||
{
|
{
|
||||||
if (!_connectedDevices.ContainsKey(deviceId))
|
if (!ConnectedDevices.ContainsKey(deviceId))
|
||||||
_connectedDevices.Add(deviceId, new DeviceHardware());
|
ConnectedDevices.Add(deviceId, new DeviceHardware());
|
||||||
_connectedDevices[deviceId].Count++; // increment the value
|
|
||||||
|
|
||||||
if (!_connectedDeviceIds.ContainsKey(driverId))
|
if (!ConnectedDeviceIds.ContainsKey(driverId))
|
||||||
_connectedDeviceIds.Add(driverId, new DeviceHardware());
|
ConnectedDeviceIds.Add(driverId, new DeviceHardware());
|
||||||
_connectedDeviceIds[driverId].Count++; // increment the value
|
|
||||||
|
|
||||||
if (deviceId == "Serial")
|
if (deviceId == "Serial")
|
||||||
{
|
{
|
||||||
if (_connectedDevices[deviceId].Count == 1)
|
if (ConnectedDevices[deviceId].Count == 0)
|
||||||
{
|
{
|
||||||
var profileProperties = ReadProfile();
|
var profileProperties = ReadProfile();
|
||||||
SharedSerial.PortName = profileProperties.ComPort;
|
SharedSerial.PortName = profileProperties.ComPort;
|
||||||
@@ -295,15 +269,38 @@ namespace ASCOM.Meade.net
|
|||||||
SharedSerial.Handshake = SerialHandshake.None;
|
SharedSerial.Handshake = SerialHandshake.None;
|
||||||
SharedSerial.Connected = true;
|
SharedSerial.Connected = true;
|
||||||
|
|
||||||
ProductName = SendString(":GVP#");
|
try
|
||||||
FirmwareVersion = SendString(":GVN#");
|
{
|
||||||
|
ProductName = SendString(":GVP#");
|
||||||
|
FirmwareVersion = SendString(":GVN#");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
traceLogger.LogIssue("Connect", $"Error getting telescope information \"{ex.Message}\" setting to LX200 Classic mode.");
|
||||||
|
ProductName = TelescopeList.LX200CLASSIC;
|
||||||
|
FirmwareVersion = "Unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ProductName == ":GVP")
|
||||||
|
{
|
||||||
|
traceLogger.LogIssue("Connect", "Serial port is looping back data, something is wrong with the hardware.");
|
||||||
|
//This means that the serial port is looping back what's been sent, something is very wrong.
|
||||||
|
SharedSerial.Connected = false;
|
||||||
|
|
||||||
|
throw new Exception("Serial port is looping back data, something is wrong with the hardware.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
throw new ArgumentException($"deviceId {deviceId} not currently supported");
|
||||||
|
|
||||||
|
ConnectedDevices[deviceId].Count++; // increment the value
|
||||||
|
ConnectedDeviceIds[driverId].Count++; // increment the value
|
||||||
|
|
||||||
return new ConnectionInfo
|
return new ConnectionInfo
|
||||||
{
|
{
|
||||||
Connections = _connectedDevices[deviceId].Count,
|
//Connections = ConnectedDevices[deviceId].Count,
|
||||||
SameDevice = _connectedDeviceIds[driverId].Count
|
SameDevice = ConnectedDeviceIds[driverId].Count
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -312,12 +309,12 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
lock (LockObject)
|
lock (LockObject)
|
||||||
{
|
{
|
||||||
if (_connectedDevices.ContainsKey(deviceId))
|
if (ConnectedDevices.ContainsKey(deviceId))
|
||||||
{
|
{
|
||||||
_connectedDevices[deviceId].Count--;
|
ConnectedDevices[deviceId].Count--;
|
||||||
if (_connectedDevices[deviceId].Count <= 0)
|
if (ConnectedDevices[deviceId].Count <= 0)
|
||||||
{
|
{
|
||||||
_connectedDevices.Remove(deviceId);
|
ConnectedDevices.Remove(deviceId);
|
||||||
if (deviceId == "Serial")
|
if (deviceId == "Serial")
|
||||||
{
|
{
|
||||||
SharedSerial.Connected = false;
|
SharedSerial.Connected = false;
|
||||||
@@ -325,19 +322,22 @@ namespace ASCOM.Meade.net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_connectedDeviceIds.ContainsKey(driverId))
|
if (ConnectedDeviceIds.ContainsKey(driverId))
|
||||||
{
|
{
|
||||||
_connectedDeviceIds[driverId].Count--;
|
ConnectedDeviceIds[driverId].Count--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsConnected(string deviceId)
|
private static bool IsConnected()
|
||||||
{
|
{
|
||||||
if (_connectedDevices.ContainsKey(deviceId))
|
foreach (var device in ConnectedDevices)
|
||||||
return (_connectedDevices[deviceId].Count > 0);
|
{
|
||||||
else
|
if (device.Value.Count > 0)
|
||||||
return false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -362,46 +362,14 @@ namespace ASCOM.Meade.net
|
|||||||
/// Skeleton of a hardware class, all this does is hold a count of the connections,
|
/// Skeleton of a hardware class, all this does is hold a count of the connections,
|
||||||
/// in reality extra code will be needed to handle the hardware in some way
|
/// in reality extra code will be needed to handle the hardware in some way
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DeviceHardware
|
private class DeviceHardware
|
||||||
{
|
{
|
||||||
private int _count;
|
internal int Count { set; get; }
|
||||||
|
|
||||||
internal int Count
|
|
||||||
{
|
|
||||||
set => _count = value;
|
|
||||||
get => _count;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal DeviceHardware()
|
internal DeviceHardware()
|
||||||
{
|
{
|
||||||
Count = 0;
|
Count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region ServedClassName attribute
|
|
||||||
///// <summary>
|
|
||||||
///// This is only needed if the driver is targeted at platform 5.5, it is included with Platform 6
|
|
||||||
///// </summary>
|
|
||||||
//[global::System.AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
|
|
||||||
//public sealed class ServedClassNameAttribute : Attribute
|
|
||||||
//{
|
|
||||||
// // See the attribute guidelines at
|
|
||||||
// // http://go.microsoft.com/fwlink/?LinkId=85236
|
|
||||||
|
|
||||||
// /// <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>
|
|
||||||
// public string DisplayName { get; private set; }
|
|
||||||
// /// <summary>
|
|
||||||
// /// Initializes a new instance of the <see cref="ServedClassNameAttribute"/> class.
|
|
||||||
// /// </summary>
|
|
||||||
// /// <param name="servedClassName">The 'friendly name' of the served class.</param>
|
|
||||||
// public ServedClassNameAttribute(string servedClassName)
|
|
||||||
// {
|
|
||||||
// DisplayName = servedClassName;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+16
-13
@@ -1,30 +1,33 @@
|
|||||||
using System;
|
namespace ASCOM.Meade.net
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.NetworkInformation;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
|
||||||
{
|
{
|
||||||
public static class TelescopeList
|
public static class TelescopeList
|
||||||
{
|
{
|
||||||
#region Autostar 497/Audiostar
|
#region Autostar 497/Audiostar
|
||||||
|
|
||||||
public readonly static string Autostar497 = "Autostar";
|
public static readonly string Autostar497 = "Autostar";
|
||||||
|
|
||||||
//Autostar/Audiostar firmware revisions
|
//Autostar/Audiostar firmware revisions
|
||||||
public readonly static string Autostar497_30Ee = "30Ee";
|
// ReSharper disable once InconsistentNaming
|
||||||
public readonly static string Autostar497_31Ee = "31Ee";
|
public static readonly string Autostar497_30Ee = "30Ee";
|
||||||
public readonly static string Autostar497_43Eg = "43Eg";
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public static readonly string Autostar497_31Ee = "31Ee";
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public static readonly string Autostar497_43Eg = "43Eg";
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region LX200GPS
|
#region LX200GPS
|
||||||
|
|
||||||
public readonly static string LX200GPS = "LX2001";
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public static readonly string LX200GPS = "LX2001";
|
||||||
|
|
||||||
public readonly static string LX200GPS_42G = "4.2G";
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public static readonly string LX200GPS_42G = "4.2G";
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region LX200EMC
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
public static readonly string LX200CLASSIC = "LX200 Classic"; //GVP command is not supported!
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
// ReSharper disable UnusedMember.Global
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -34,32 +35,73 @@ namespace ASCOM.Meade.net
|
|||||||
static extern bool BringWindowToTop(IntPtr hWnd);
|
static extern bool BringWindowToTop(IntPtr hWnd);
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, Int32 nMaxCount);
|
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, Int32 nMaxCount);
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private static extern int GetWindowThreadProcessId(IntPtr hWnd, ref Int32 lpdwProcessId);
|
private static extern int GetWindowThreadProcessId(IntPtr hWnd, ref Int32 lpdwProcessId);
|
||||||
|
|
||||||
[DllImport("User32.dll")]
|
[DllImport("User32.dll")]
|
||||||
public static extern IntPtr GetParent(IntPtr hWnd);
|
public static extern IntPtr GetParent(IntPtr hWnd);
|
||||||
|
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private const int SW_HIDE = 0;
|
private const int SW_HIDE = 0;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWNORMAL = 1;
|
private const int SW_SHOWNORMAL = 1;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private const int SW_NORMAL = 1;
|
private const int SW_NORMAL = 1;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWMINIMIZED = 2;
|
private const int SW_SHOWMINIMIZED = 2;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWMAXIMIZED = 3;
|
private const int SW_SHOWMAXIMIZED = 3;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private const int SW_MAXIMIZE = 3;
|
private const int SW_MAXIMIZE = 3;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWNOACTIVATE = 4;
|
private const int SW_SHOWNOACTIVATE = 4;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
private const int SW_SHOW = 5;
|
private const int SW_SHOW = 5;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private const int SW_MINIMIZE = 6;
|
private const int SW_MINIMIZE = 6;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWMINNOACTIVE = 7;
|
private const int SW_SHOWMINNOACTIVE = 7;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWNA = 8;
|
private const int SW_SHOWNA = 8;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
private const int SW_RESTORE = 9;
|
private const int SW_RESTORE = 9;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SW_SHOWDEFAULT = 10;
|
private const int SW_SHOWDEFAULT = 10;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once UnusedMember.Local
|
||||||
private const int SW_MAX = 10;
|
private const int SW_MAX = 10;
|
||||||
|
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const uint SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000;
|
private const uint SPI_GETFOREGROUNDLOCKTIMEOUT = 0x2000;
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const uint SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001;
|
private const uint SPI_SETFOREGROUNDLOCKTIMEOUT = 0x2001;
|
||||||
|
|
||||||
|
// ReSharper disable once InconsistentNaming
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
private const int SPIF_SENDCHANGE = 0x2;
|
private const int SPIF_SENDCHANGE = 0x2;
|
||||||
|
|
||||||
|
|
||||||
@@ -77,11 +119,11 @@ namespace ASCOM.Meade.net
|
|||||||
// Published in The Delphi Magazine 55, page 16
|
// Published in The Delphi Magazine 55, page 16
|
||||||
// Converted to C# by Kevin Gale
|
// Converted to C# by Kevin Gale
|
||||||
IntPtr foregroundWindow = GetForegroundWindow();
|
IntPtr foregroundWindow = GetForegroundWindow();
|
||||||
IntPtr Dummy = IntPtr.Zero;
|
IntPtr dummy = IntPtr.Zero;
|
||||||
|
|
||||||
uint foregroundThreadId = GetWindowThreadProcessId(foregroundWindow, Dummy);
|
uint foregroundThreadId = GetWindowThreadProcessId(foregroundWindow, dummy);
|
||||||
|
|
||||||
uint thisThreadId = GetWindowThreadProcessId(hWnd, Dummy);
|
uint thisThreadId = GetWindowThreadProcessId(hWnd, dummy);
|
||||||
|
|
||||||
if (AttachThreadInput(thisThreadId, foregroundThreadId, true))
|
if (AttachThreadInput(thisThreadId, foregroundThreadId, true))
|
||||||
{
|
{
|
||||||
@@ -94,12 +136,12 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
// Code by Daniel P. Stasinski
|
// Code by Daniel P. Stasinski
|
||||||
// Converted to C# by Kevin Gale
|
// Converted to C# by Kevin Gale
|
||||||
IntPtr Timeout = IntPtr.Zero;
|
IntPtr timeout = IntPtr.Zero;
|
||||||
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, Timeout, 0);
|
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, timeout, 0);
|
||||||
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Dummy, SPIF_SENDCHANGE);
|
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, dummy, SPIF_SENDCHANGE);
|
||||||
BringWindowToTop(hWnd); // IE 5.5 related hack
|
BringWindowToTop(hWnd); // IE 5.5 related hack
|
||||||
SetForegroundWindow(hWnd);
|
SetForegroundWindow(hWnd);
|
||||||
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Timeout, SPIF_SENDCHANGE);
|
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, timeout, SPIF_SENDCHANGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,139 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using ASCOM.Utilities;
|
||||||
|
using ASCOM.Utilities.Interfaces;
|
||||||
|
|
||||||
|
namespace ASCOM.Meade.net.Wrapper
|
||||||
|
{
|
||||||
|
public interface IProfileWrapper : IProfile, IProfileExtra, IDisposable
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ProfileWrapper : IProfileWrapper
|
||||||
|
{
|
||||||
|
private readonly Profile _profile = new Profile();
|
||||||
|
|
||||||
|
public ArrayList RegisteredDevices(string deviceType)
|
||||||
|
{
|
||||||
|
return _profile.RegisteredDevices(deviceType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsRegistered(string driverId)
|
||||||
|
{
|
||||||
|
return _profile.IsRegistered(driverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Register(string driverId, string descriptiveName)
|
||||||
|
{
|
||||||
|
_profile.Register(driverId, descriptiveName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Unregister(string driverId)
|
||||||
|
{
|
||||||
|
_profile.Unregister(driverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetValue(string driverId, string name, string subKey, string defaultValue)
|
||||||
|
{
|
||||||
|
return _profile.GetValue(driverId, name, subKey, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteValue(string driverId, string name, string value, string subKey)
|
||||||
|
{
|
||||||
|
_profile.WriteValue(driverId, name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList Values(string driverId, string subKey)
|
||||||
|
{
|
||||||
|
return _profile.Values(driverId, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteValue(string driverId, string name, string subKey)
|
||||||
|
{
|
||||||
|
_profile.DeleteValue(driverId, name, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateSubKey(string driverId, string subKey)
|
||||||
|
{
|
||||||
|
_profile.CreateSubKey(driverId, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList SubKeys(string driverId, string subKey)
|
||||||
|
{
|
||||||
|
return _profile.SubKeys(driverId, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteSubKey(string driverId, string subKey)
|
||||||
|
{
|
||||||
|
_profile.DeleteSubKey(driverId, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetProfileXML(string deviceId)
|
||||||
|
{
|
||||||
|
return _profile.GetProfileXML(deviceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetProfileXML(string deviceId, string xml)
|
||||||
|
{
|
||||||
|
_profile.SetProfileXML(deviceId, xml);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DeviceType
|
||||||
|
{
|
||||||
|
get => _profile.DeviceType;
|
||||||
|
set => _profile.DeviceType = value;
|
||||||
|
}
|
||||||
|
public ArrayList RegisteredDeviceTypes => _profile.RegisteredDeviceTypes;
|
||||||
|
|
||||||
|
public void MigrateProfile(string currentPlatformVersion)
|
||||||
|
{
|
||||||
|
_profile.MigrateProfile(currentPlatformVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteValue(string driverId, string name)
|
||||||
|
{
|
||||||
|
_profile.DeleteValue(driverId, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetValue(string driverId, string name)
|
||||||
|
{
|
||||||
|
return _profile.GetValue(driverId, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetValue(string driverId, string name, string subKey)
|
||||||
|
{
|
||||||
|
return _profile.GetValue(driverId, name, subKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList SubKeys(string driverId)
|
||||||
|
{
|
||||||
|
return _profile.SubKeys(driverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList Values(string driverId)
|
||||||
|
{
|
||||||
|
return _profile.Values(driverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteValue(string driverId, string name, string value)
|
||||||
|
{
|
||||||
|
_profile.WriteValue(driverId, name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ASCOMProfile GetProfile(string driverId)
|
||||||
|
{
|
||||||
|
return _profile.GetProfile(driverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetProfile(string driverId, ASCOMProfile xmlProfileKey)
|
||||||
|
{
|
||||||
|
_profile.SetProfile(driverId, xmlProfileKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_profile.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using ASCOM.Utilities.Interfaces;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net.Wrapper
|
namespace ASCOM.Meade.net.Wrapper
|
||||||
{
|
{
|
||||||
public interface ISharedResourcesWrapper
|
public interface ISharedResourcesWrapper
|
||||||
{
|
{
|
||||||
ConnectionInfo Connect(string deviceId, string driverId);
|
ConnectionInfo Connect(string deviceId, string driverId, ITraceLogger traceLogger);
|
||||||
void Disconnect(string deviceId, string driverId);
|
void Disconnect(string deviceId, string driverId);
|
||||||
|
|
||||||
string ProductName { get; }
|
string ProductName { get; }
|
||||||
@@ -24,14 +25,14 @@ namespace ASCOM.Meade.net.Wrapper
|
|||||||
|
|
||||||
void SetupDialog();
|
void SetupDialog();
|
||||||
void WriteProfile(ProfileProperties profileProperties);
|
void WriteProfile(ProfileProperties profileProperties);
|
||||||
string ReadCharacters(int throwAwayCharacters);
|
void ReadCharacters(int throwAwayCharacters);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SharedResourcesWrapper : ISharedResourcesWrapper
|
public class SharedResourcesWrapper : ISharedResourcesWrapper
|
||||||
{
|
{
|
||||||
public ConnectionInfo Connect(string deviceId, string driverId)
|
public ConnectionInfo Connect(string deviceId, string driverId, ITraceLogger traceLogger)
|
||||||
{
|
{
|
||||||
return SharedResources.Connect(deviceId, driverId);
|
return SharedResources.Connect(deviceId, driverId, traceLogger);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Disconnect(string deviceId, string driverId)
|
public void Disconnect(string deviceId, string driverId)
|
||||||
@@ -73,9 +74,9 @@ namespace ASCOM.Meade.net.Wrapper
|
|||||||
return SharedResources.ReadTerminated();
|
return SharedResources.ReadTerminated();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ReadCharacters(int throwAwayCharacters)
|
public void ReadCharacters(int throwAwayCharacters)
|
||||||
{
|
{
|
||||||
return SharedResources.ReadCharacters(throwAwayCharacters);
|
SharedResources.ReadCharacters(throwAwayCharacters);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileProperties ReadProfile()
|
public ProfileProperties ReadProfile()
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||||
|
|||||||
Generated
+4
-3
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System.ComponentModel;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
@@ -7,7 +8,7 @@ namespace ASCOM.Meade.net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required designer variable.
|
/// Required designer variable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private System.ComponentModel.IContainer components = null;
|
private IContainer components = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Clean up any resources being used.
|
/// Clean up any resources being used.
|
||||||
@@ -56,7 +57,7 @@ namespace ASCOM.Meade.net
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.Label label1;
|
private Label label1;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ namespace ASCOM.Meade.net
|
|||||||
{
|
{
|
||||||
public partial class FrmMain : Form
|
public partial class FrmMain : Form
|
||||||
{
|
{
|
||||||
delegate void SetTextCallback(string text);
|
|
||||||
|
|
||||||
public FrmMain()
|
public FrmMain()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root>
|
<root>
|
||||||
<!--
|
<!--
|
||||||
Microsoft ResX Schema
|
Microsoft ResX Schema
|
||||||
|
|||||||
@@ -9,25 +9,29 @@
|
|||||||
#define UseChooser
|
#define UseChooser
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using ASCOM.DeviceInterface;
|
||||||
|
using ASCOM.DriverAccess;
|
||||||
|
|
||||||
namespace ASCOM.Meade.net
|
namespace ASCOM.Meade.net
|
||||||
{
|
{
|
||||||
class Program
|
public static class Program
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
public static void Main()
|
||||||
{
|
{
|
||||||
// Uncomment the code that's required
|
// Uncomment the code that's required
|
||||||
#if UseChooser
|
//#if UseChooser
|
||||||
// choose the device
|
// choose the device
|
||||||
string id = DriverAccess.Telescope.Choose("ASCOM.MeadeGeneric.Telescope");
|
string id = Telescope.Choose("ASCOM.Meade.net.Telescope");
|
||||||
if (string.IsNullOrEmpty(id))
|
if (string.IsNullOrEmpty(id))
|
||||||
return;
|
return;
|
||||||
// create this device
|
// create this device
|
||||||
DriverAccess.Telescope device = new DriverAccess.Telescope(id);
|
Telescope device = new Telescope(id);
|
||||||
#else
|
//#else
|
||||||
// this can be replaced by this code, it avoids the chooser and creates the driver class directly.
|
// this can be replaced by this code, it avoids the chooser and creates the driver class directly.
|
||||||
ASCOM.DriverAccess.Telescope device = new ASCOM.DriverAccess.Telescope("ASCOM.Meade.net.Telescope");
|
//ASCOM.DriverAccess.Telescope device = new ASCOM.DriverAccess.Telescope("ASCOM.Meade.net.Telescope");
|
||||||
#endif
|
//#endif
|
||||||
// now run some tests, adding code to your driver so that the tests will pass.
|
// now run some tests, adding code to your driver so that the tests will pass.
|
||||||
// these first tests are common to all drivers.
|
// these first tests are common to all drivers.
|
||||||
|
|
||||||
@@ -49,8 +53,45 @@ namespace ASCOM.Meade.net
|
|||||||
//Console.WriteLine($"Ra {device.RightAscension}");
|
//Console.WriteLine($"Ra {device.RightAscension}");
|
||||||
//Console.WriteLine($"Dec {device.Declination}");
|
//Console.WriteLine($"Dec {device.Declination}");
|
||||||
|
|
||||||
Console.WriteLine($"Altitude {device.Altitude}");
|
//Console.WriteLine($"Altitude {device.Altitude}");
|
||||||
Console.WriteLine($"Azimuth {device.Azimuth}");
|
//Console.WriteLine($"Azimuth {device.Azimuth}");
|
||||||
|
|
||||||
|
var seconds = 10;
|
||||||
|
|
||||||
|
Console.WriteLine("Slewing tests 10 second in each direction");
|
||||||
|
Console.WriteLine("test 1");
|
||||||
|
device.MoveAxis(TelescopeAxes.axisPrimary, 4);
|
||||||
|
Thread.Sleep(seconds * 1000);
|
||||||
|
device.MoveAxis(TelescopeAxes.axisPrimary, 0);
|
||||||
|
Console.WriteLine("test 2");
|
||||||
|
device.MoveAxis(TelescopeAxes.axisPrimary, -4);
|
||||||
|
Thread.Sleep(seconds * 1000);
|
||||||
|
device.MoveAxis(TelescopeAxes.axisPrimary, 0);
|
||||||
|
|
||||||
|
Console.WriteLine("test 3");
|
||||||
|
device.MoveAxis(TelescopeAxes.axisSecondary, 4);
|
||||||
|
Thread.Sleep(seconds * 1000);
|
||||||
|
device.MoveAxis(TelescopeAxes.axisSecondary, 0);
|
||||||
|
|
||||||
|
Console.WriteLine("test 4");
|
||||||
|
device.MoveAxis(TelescopeAxes.axisSecondary, -4);
|
||||||
|
Thread.Sleep(seconds * 1000);
|
||||||
|
device.MoveAxis(TelescopeAxes.axisSecondary, 0);
|
||||||
|
Console.WriteLine("Slewing tests complete");
|
||||||
|
|
||||||
|
|
||||||
|
seconds = 120;
|
||||||
|
|
||||||
|
Console.WriteLine($"Guiding for {seconds} seconds!");
|
||||||
|
|
||||||
|
foreach( var direction in Enum.GetValues(typeof(GuideDirections)).Cast<GuideDirections>())
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{direction.ToString()}");
|
||||||
|
device.PulseGuide(direction, seconds* 1000);
|
||||||
|
}
|
||||||
|
Console.WriteLine("Guiding Finished");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
device.Connected = false;
|
device.Connected = false;
|
||||||
Console.WriteLine("Press Enter to finish");
|
Console.WriteLine("Press Enter to finish");
|
||||||
|
|||||||
@@ -10,13 +10,13 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>ASCOM.Meade.net</RootNamespace>
|
<RootNamespace>ASCOM.Meade.net</RootNamespace>
|
||||||
<AssemblyName>ASCOM.Meade.net.Test</AssemblyName>
|
<AssemblyName>ASCOM.Meade.net.Test</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>
|
<TargetFrameworkProfile>
|
||||||
</TargetFrameworkProfile>
|
</TargetFrameworkProfile>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
@@ -36,6 +36,26 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ASCOM.DeviceInterfaces, 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.DriverAccess, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
|
<Reference Include="ASCOM.DriverAccess, Version=6.0.0.0, Culture=neutral, PublicKeyToken=565de7938946fba7, processorArchitecture=MSIL" />
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||||
|
|||||||
Reference in New Issue
Block a user