ASCOM.DeviceInterfaces A strongly-typed resource class, for looking up localized strings, etc. Returns the cached ResourceManager instance used by this class. Overrides the current thread's CurrentUICulture property for all resource lookups using this strongly typed resource class. The alignment mode of the mount. Altitude-Azimuth alignment. Polar (equatorial) mount other than German equatorial. German equatorial mount. Well-known telescope tracking rates. Sidereal tracking rate (15.041 arcseconds per second). Lunar tracking rate (14.685 arcseconds per second). Solar tracking rate (15.0 arcseconds per second). King tracking rate (15.0369 arcseconds per second). Equatorial coordinate systems used by telescopes. Only used with telescope interface versions 2 and 3 In June 2018 the name equLocalTopocentric was deprecated in favour of equTopocentric, both names return the same value (1). The rationale for this change is set out in the Astronomical Coordinates section. Custom or unknown equinox and/or reference frame. Topocentric coordinates. Coordinates of the object at the current date having allowed for annual aberration, precession and nutation. This is the most common coordinate type for amateur telescopes. J2000 equator/equinox. Coordinates of the object at mid-day on 1st January 2000, ICRS reference frame. J2050 equator/equinox, ICRS reference frame. B1950 equinox, FK4 reference frame. Please use equTopocentric instead - see Astronomical Coordinates for an explanation. The direction in which the guide-rate motion is to be made. North (+ declination/altitude). South (- declination/altitude). East (+ right ascension/azimuth). West (- right ascension/azimuth) The telescope axes Only used with if the telescope interface version is 2 or 3 Primary axis (e.g., Right Ascension or Azimuth). Secondary axis (e.g., Declination or Altitude). Tertiary axis (e.g. imager rotator/de-rotator). The pointing state of the mount Pier side is a GEM-specific term that has historically caused much confusion. As of Platform 6, the PierSide property is defined to refer to the telescope pointing state. Please see for much more information on this topic. In order to support Dome slaving, where it is important to know on which side of the pier the mount is actually located, ASCOM has adopted the convention that the Normal pointing state will be the state where the mount is on the East side of the pier, looking West with the counterweights below the optical assembly. Only used with telescope interface versions 2 and later. Normal pointing state - Mount on the East side of pier (looking West) Unknown or indeterminate. Through the pole pointing state - Mount on the West side of pier (looking East) ASCOM Dome ShutterState status values. Dome shutter status open Dome shutter status closed Dome shutter status opening Dome shutter status closing Dome shutter status error ASCOM Camera status values. Camera status idle Camera status waiting Camera status exposing Camera status reading Camera status download Camera status error Sensor type, identifies the type of colour sensor V2 cameras only ] Camera produces monochrome array with no Bayer encoding Camera produces color image directly, requiring not Bayer decoding Camera produces RGGB encoded Bayer array images Camera produces CMYG encoded Bayer array images Camera produces CMYG2 encoded Bayer array images Camera produces Kodak TRUESENSE Bayer LRGB array images A collection of rates at which the telescope may be moved about the specified axis by the method. This is only used if the telescope interface version is 2 or 3 See the description of the method for more information. This method must return an empty collection if is not supported. The values used in members must be non-negative; forward and backward motion is achieved by the application applying an appropriate sign to the returned values in the command. Return information about the rates at which the telescope may be moved about the specified axis by the method. The axis about which rate information is desired Collection of Rate objects describing the supported rates of motion that can be supplied to the method for the specified axis. Collection of Rate objects The (symbolic) values for Index () are:
  • 0 Primary axis (e.g., Hour Angle or Azimuth)
  • 1 Secondary axis (e.g., Declination or Altitude)
  • 2 Tertiary axis (e.g. imager rotator/de-rotator)
  • Number of items in the returned collection Number of items Integer number of items Disposes of the object and cleans up Returns an enumerator for the collection An enumerator Defines the ICamera Interface The camera state diagram is shown here: Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented, must not throw a MethodNotImplementedException.

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    May throw a MethodNotImplementedException if the device does not support any actions.

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented, must not throw a PropertyNotImplementedException.

    This method must return an empty arraylist if no actions are supported. This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    May throw a MethodNotImplementedException.

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    May throw a MethodNotImplementedException.

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    May throw a MethodNotImplementedException.

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Aborts the current exposure, if any, and returns the camera to Idle state.

    Must be implemented, must not throw a MethodNotImplementedException.

    NOTES: Must throw exception if camera is not idle and abort is unsuccessful (or not possible, e.g. during download). Must throw exception if hardware or communications error occurs. Must NOT throw an exception if the camera is already idle.
    Thrown if the driver is not connected. Thrown if abort is not currently possible (e.g. during download). Thrown if a communications error occurs, or if the abort fails.
    Sets the binning factor for the X axis, also returns the current value. Should default to 1 when the camera connection is established. Note: driver does not check for compatible subframe values when this value is set; rather they are checked upon StartExposure. The X binning value Must throw an exception for illegal binning values Sets the binning factor for the Y axis, also returns the current value. Should default to 1 when the camera connection is established. Note: driver does not check for compatible subframe values when this value is set; rather they are checked upon StartExposure. The Y binning value. Must throw an exception for illegal binning values Returns the current camera operational state Returns one of the following status information: Value State Meaning 0 CameraIdle At idle state, available to start exposure 1 CameraWaiting Exposure started but waiting (for shutter, trigger, filter wheel, etc.) 2 CameraExposing Exposure currently in progress 3 CameraReading CCD array is being read out (digitized) 4 CameraDownload Downloading data to PC 5 CameraError Camera error condition serious enough to prevent further operations (connection fail, etc.). The state of the camera. Must return an exception if the camera status is unavailable. Returns the width of the CCD camera chip in unbinned pixels. The size of the camera X. Must throw exception if the value is not known Returns the height of the CCD camera chip in unbinned pixels. The size of the camera Y. Must throw exception if the value is not known Returns true if the camera can abort exposures; false if not. true if this instance can abort exposure; otherwise, false. Thrown if the driver is not connected.

    Must be implemented, must not throw a PropertyNotImplementedException.

    Returns a flag showing whether this camera supports asymmetric binning

    Must be implemented, must not throw a PropertyNotImplementedException.

    If true, the camera can have different binning on the X and Y axes, as determined by and . If false, the binning must be equal on the X and Y axes.
    true if this instance can asymmetric bin; otherwise, false. Must throw exception if the value is not known (n.b. normally only occurs if no connection established and camera must be queried)
    If true, the camera's cooler power setting can be read. true if this instance can get cooler power; otherwise, false. Thrown if the driver is not connected.

    Must be implemented, must not throw a PropertyNotImplementedException.

    Returns a flag indicating whether this camera supports pulse guiding

    Must be implemented, must not throw a PropertyNotImplementedException.

    Returns true if the camera can send autoguider pulses to the telescope mount; false if not. Note: this does not provide any indication of whether the autoguider cable is actually connected.
    true if this instance can pulse guide; otherwise, false. Thrown if the driver is not connected.
    Returns a flag indicatig whether this camera supports setting the CCD temperature

    Must be implemented, must not throw a PropertyNotImplementedException.

    If true, the camera's cooler setpoint can be adjusted. If false, the camera either uses open-loop cooling or does not have the ability to adjust temperature from software, and setting the property has no effect.
    true if this instance can set CCD temperature; otherwise, false. Thrown if the driver is not connected.
    Returns a flag indicating whether this camera can stop an exposure that is in progress

    Must be implemented, must not throw a PropertyNotImplementedException.

    Some cameras support , which allows the exposure to be terminated before the exposure timer completes, but will still read out the image. Returns true if is available, false if not.
    true if the camera can stop the exposure; otherwise, false. an error condition such as connection failure is present
    Returns the current CCD temperature in degrees Celsius. The CCD temperature. Must throw exception if data unavailable. Must throw exception if not supported. Turns on and off the camera cooler, and returns the current on/off state. Warning: turning the cooler off when the cooler is operating at high delta-T (typically >20C below ambient) may result in thermal shock. Repeated thermal shock may lead to damage to the sensor or cooler stack. Please consult the documentation supplied with the camera for further information. true if the cooler is on; otherwise, false. not supported an error condition such as connection failure is present Returns the present cooler power level, in percent. Returns zero if is false. The cooler power. not supported an error condition such as connection failure is present Returns the gain of the camera in photoelectrons per A/D unit. Some cameras have multiple gain modes; these should be selected via the and thus are static during a session. The electrons per ADU. Must throw exception if data unavailable. Reports the full well capacity of the camera in electrons, at the current camera settings (binning, SetupDialog settings, etc.) The full well capacity. Must throw exception if data unavailable. Returns a flag indicating whether this camera has a mechanical shutter If true, the camera has a mechanical shutter. If false, the camera does not have a shutter. If there is no shutter, the StartExposure command will ignore the Light parameter. true if this instance has shutter; otherwise, false. Thrown if the driver is not connected. Returns the current heat sink temperature (called "ambient temperature" by some manufacturers) in degrees Celsius. Only valid if is true. The heat sink temperature. Must throw exception if data unavailable. Returns a safearray of int of size * containing the pixel values from the last exposure. The application must inspect the Safearray parameters to determine the dimensions. Note: if or is changed after a call to StartExposure it will have no effect on the size of this array. This is the preferred method for programs (not scripts) to download iamges since it requires much less memory. For color or multispectral cameras, will produce an array of * * NumPlanes. If the application cannot handle multispectral images, it should use just the first plane. The image array. Must throw exception if data unavailable. Returns a safearray of Variant of size * containing the pixel values from the last exposure. The application must inspect the Safearray parameters to determine the dimensions. Note: if or is changed after a call to StartExposure it will have no effect on the size of this array. This property should only be used from scripts due to the extremely high memory utilization on large image arrays (26 bytes per pixel). Pixels values should be in Short, int, or Double format. For color or multispectral cameras, will produce an array of * * NumPlanes. If the application cannot handle multispectral images, it should use just the first plane. The image array variant. Must throw exception if data unavailable. Returns a flag indicating whether the image is ready to be downloaded fom the camera If true, there is an image from the camera available. If false, no image is available and attempts to use the method will produce an exception . true if [image ready]; otherwise, false. hardware or communications connection error has occurred. Returns a flag indicating whether the camera is currrently in a PulseGuide operation. If true, pulse guiding is in progress. Required if the PulseGuide method (which is non-blocking) is implemented. See the PulseGuide method. true if this instance is pulse guiding; otherwise, false. hardware or communications connection error has occurred. Reports the actual exposure duration in seconds (i.e. shutter open time). This may differ from the exposure time requested due to shutter latency, camera timing precision, etc. The last duration of the exposure. Must throw an exception if not supported If called before any exposure has been taken Reports the actual exposure start in the FITS-standard CCYY-MM-DDThh:mm:ss[.sss...] format. The start time must be UTC. The last exposure start time in UTC. Must throw an exception if not supported If called before any exposure has been taken Reports the maximum ADU value the camera can produce. The maximum ADU. Must throw exception if data unavailable. Returns the maximum allowed binning for the X camera axis If = false, returns the maximum allowed binning factor. If = true, returns the maximum allowed binning factor for the X axis. The max bin X. Must throw exception if data unavailable. Returns the maximum allowed binning for the Y camera axis If = false, equals . If = true, returns the maximum allowed binning factor for the Y axis. The max bin Y. Must throw exception if data unavailable. Sets the subframe width. Also returns the current value. If binning is active, value is in binned pixels. No error check is performed when the value is set. Should default to . The num X. Sets the subframe height. Also returns the current value. If binning is active, value is in binned pixels. No error check is performed when the value is set. Should default to . The num Y. Returns the width of the CCD chip pixels in microns. The pixel size X. Must throw exception if data unavailable. Returns the height of the CCD chip pixels in microns. The pixel size Y. Must throw exception if data unavailable. Activates the Camera's mount control sytem to instruct the mount to move in a particular direction for a given period of time

    May throw a not implemented exception if this camera does not support PulseGuide

    This method returns only after the move has completed. The (symbolic) values for GuideDirections are: Constant Value Description guideNorth 0 North (+ declination/elevation) guideSouth 1 South (- declination/elevation) guideEast 2 East (+ right ascension/azimuth) guideWest 3 West (+ right ascension/azimuth) Note: directions are nominal and may depend on exact mount wiring. must be opposite , and must be opposite .
    The direction of movement. The duration of movement in milli-seconds. PulseGuide command is unsupported PulseGuide command is unsuccessful Thrown if the driver is not connected.
    Sets the camera cooler setpoint in degrees Celsius, and returns the current setpoint. The driver should throw an if an attempt is made to set outside the valid range for the camera. As an assitance to driver authors, to protect equipment and prevent harm to individuals, Conform will report an issue if it is possible to set below -280C or above +100C. Note: Camera hardware and/or driver should perform cooler ramping, to prevent thermal shock and potential damage to the CCD array or cooler stack. The set CCD temperature. Must throw exception if command not successful. Must throw an InvalidValueException if an attempt is made to set a value is outside the camera's valid termperature setpoint range. Must throw exception if is false. Thrown if the driver is not connected. Starts an exposure. Use to check when the exposure is complete.

    Must be implemented, must not throw a MethodNotImplementedException.

    A dark frame or bias exposure may be shorter than the V2 value and for a bias frame can be zero. Check the value of Light and allow exposures down to 0 seconds if Light is false. If the hardware will not support an exposure duration of zero then, for dark and bias frames, set it to the minimum that is possible. Some applications will set an exposure time of zero for bias frames so it's important that the driver allows this.
    Duration of exposure in seconds, can be zero if Light is false true for light frame, false for dark frame (ignored if no shutter) , , , , , , or Duration parameters are invalid. is false and != the exposure cannot be started for any reason, such as a hardware or communications error
    Sets the subframe start position for the X axis (0 based) and returns the current value.

    Must be implemented, must not throw a PropertyNotImplementedException.

    If binning is active, value is in binned pixels.
    The start X. Thrown if the driver is not connected.
    Sets the subframe start position for the Y axis (0 based). Also returns the current value.

    Must be implemented, must not throw a PropertyNotImplementedException.

    If binning is active, value is in binned pixels.
    The start Y. Thrown if the driver is not connected.
    Stops the current exposure, if any.

    May throw a not implemented exception

    If an exposure is in progress, the readout process is initiated. Ignored if readout is already in process.
    Must throw an exception if CanStopExposure is false Must throw an exception if the camera or connection has an error condition Must throw an exception if for any reason no image readout will be available.
    Returns the X offset of the Bayer matrix, as defined in . The Bayer colour matrix X offset, as defined in . Monochrome cameras must throw this exception, colour cameras must not. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    Must be implemented by colour cameras, monochrome cameras must throw a PropertyNotImplementedException

    Since monochrome cameras don't have a bayer colour matrix by definition, such cameras shold throw a . Colour cameras should always return a value and must not throw a The value returned must be in the range 0 to M-1 where M is the width of the Bayer matrix. The offset is relative to the 0,0 pixel in the sensor array, and does not change to reflect subframe settings. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Returns the Y offset of the Bayer matrix, as defined in . The Bayer colour matrix Y offset, as defined in . Monochrome cameras must throw this exception, colour cameras must not. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    Must be implemented by colour cameras, monochrome cameras must throw a PropertyNotImplementedException

    Since monochrome cameras don't have a bayer colour matrix by definition, such cameras shold throw a . Colour cameras should always return a value and must not throw a The value returned must be in the range 0 to M-1 where M is the width of the Bayer matrix. The offset is relative to the 0,0 pixel in the sensor array, and does not change to reflect subframe settings. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Camera has a fast readout mode Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) true when the camera supports a fast readout mode

    Must be implemented, must not throw a PropertyNotImplementedException.

    It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Returns the maximum exposure time supported by StartExposure. The maximum exposure time, in seconds, that the camera supports Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    Must be implemented, must not throw a PropertyNotImplementedException.

    It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Minimium exposure time The minimum exposure time, in seconds, that the camera supports through StartExposure Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    Must be implemented, must not throw a PropertyNotImplementedException.

    This must be a non-zero number representing the shortest possible exposure time supported by the camera model. Please note that for bias frame acquisition an even shorter exposure may be possible; please see StartExposure for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Exposure resolution The smallest increment in exposure time supported by StartExposure. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    Must be implemented, must not throw a PropertyNotImplementedException.

    This can be used, for example, to specify the resolution of a user interface "spin control" used to dial in the exposure time. Please note that the Duration provided to StartExposure does not have to be an exact multiple of this number; the driver should choose the closest available value. Also in some cases the resolution may not be constant over the full range of exposure times; in this case the smallest increment would be appropriate. A value of 0.0 shall indicate that there is no minimum resulution except that imposed by the resolution of the double value itself. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Gets or sets Fast Readout Mode true for fast readout mode, false for normal mode Thrown if is false. Thrown if the driver is not connected and a connection is required to obtain this information.

    Must throw a PropertyNotImplementedException if CanFastReadout is false or return a boolean value if CanFastReadout is true.

    Must thrown an exception if no connection is established to the camera. Must throw a if returns false. Many cameras have a "fast mode" intended for use in focusing. When set to true, the camera will operate in Fast mode; when set false, the camera will operate normally. This property, if implemented, should default to False. Please note that this function may in some cases interact with ; for example, there may be modes where the Fast/Normal switch is meaningless. In this case, it may be preferable to use the function to control fast/normal switching. If this feature is not available, then must return false. This is only available for the Camera Interface Version 2
    Index into the array for the selected camera gain Short integer index for the current camera gain in the string array. Index into the Gains array for the selected camera gain Must throw an exception if gain is not supported Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid.

    May throw a PropertyNotImplementedException if Gain is not supported by the camera.

    can be used to adjust the gain setting of the camera, if supported. There are two typical usage scenarios:
    • DSLR Cameras - will return a 0-based array of strings, which correspond to different gain settings such as "ISO 800". must be set to an integer in this range. and must thrown an exception if this mode is used.
    • Adjustable gain CCD cameras - and return integers, which specify the valid range for and .
    The driver must default to a valid value. Please note that may in some cases affect the gain of the camera; if so the driver must be written such that the two properties do not conflict if both are used. This is only available for the Camera Interface Version 2
    Maximum value of Short integer representing the maximum gain value supported by the camera. The maximum gain value that this camera supports Must throw an exception if GainMax is not supported Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    May throw a PropertyNotImplementedException if GainMax is not supported by the camera..

    When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Minimum value of The minimum gain value that this camera supports Must throw an exception if GainMin is not supported Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    May throw a PropertyNotImplementedException if GainMin is not supported by the camera.

    When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Gains supported by the camera An ArrayList of gain names Must throw an exception if Gains is not supported Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    May throw a PropertyNotImplementedException if Gains is not supported by the camera.

    provides a 0-based array of available gain settings. This is often used to specify ISO settings for DSLR cameras. Typically the application software will display the available gain settings in a drop list. The application will then supply the selected index to the driver via the property. The setting may alternatively be specified using integer values; if this mode is used then is invalid and must throw an exception. Please see and for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Percent conpleted, Interface Version 2 only A value between 0 and 100% indicating the completeness of this operation Must throw an exception if PercentCompleted is not supported Thrown when it is inappropriate to call

    May throw a PropertyNotImplementedException if PercentCompleted is not supported by the camera.

    If valid, returns an integer between 0 and 100, where 0 indicates 0% progress (function just started) and 100 indicates 100% progress (i.e. completion). At the discretion of the driver author, may optionally be valid when is in any or all of the following states: , , or . In all other states an exception shall be thrown. Typically the application user interface will show a progress bar based on the value. Please note that client applications are not required to use this value, and in some cases may display status information based on other information, such as time elapsed. This is only available for the Camera Interface Version 2
    Readout mode, Interface Version 2 only Short integer index into the ReadoutModes array of string readout mode names indicating the camera's current readout mode. Must throw an exception if set to an illegal or unavailable mode. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    Must be implemented if CanFastReadout is false, must throw a PropertyNotImplementedException if CanFastReadout is true.

    is an index into the array , and selects the desired readout mode for the camera. Defaults to 0 if not set. Throws an exception if the selected mode is not available. It is strongly recommended, but not required, that driver authors make the 0-index mode suitable for standard imaging operations, since it is the default. Please see for additional information. This is only available for the Camera Interface Version 2
    List of available readout modes, Interface Version 2 only An ArrayList of readout mode names Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    Must be implemented if CanFastReadout is false, must throw a PropertyNotImplementedException if CanFastReadout is true.

    This property provides an array of strings, each of which describes an available readout mode of the camera. At least one string must be present in the list. The user interface of a control application will typically present to the user a drop-list of modes. The choice of available modes made available is entirely at the discretion of the driver author. Please note that if the camera has many different modes of operation, then the most commonly adjusted settings should be in ; additional settings may be provided using . To select a mode, the application will set to the index of the desired mode. The index is zero-based. This property should only be read while a connection to the camera is actually established. Drivers often support multiple cameras with different capabilities, which are not known until the connection is made. If the available readout modes are not known because no connection has been established, this property shall throw an exception. Please note that the default setting is 0. It is strongly recommended, but not required, that driver authors use the 0-index mode for standard imaging operations, since it is the default. This feature may be used in parallel with ; however, care should be taken to ensure that the two features work together consistently. If there are modes that are inconsistent having a separate fast/normal switch, then it may be better to simply list Fast as one of the . It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Sensor name, Interface Version 2 only ## Mandatory must return an empty string if the sensor is unknown The name of the sensor used within the camera. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    May throw a PropertyNotImplementedException if the sensor's name is not known.

    Returns the name (datasheet part number) of the sensor, e.g. ICX285AL. The format is to be exactly as shown on manufacturer data sheet, subject to the following rules: All letters shall be uppercase. Spaces shall not be included. Any extra suffixes that define region codes, package types, temperature range, coatings, grading, color/monochrome, etc. shall not be included. For color sensors, if a suffix differentiates different Bayer matrix encodings, it shall be included. The call shall return an empty string if the sensor name is not known. Examples: ICX285AL-F shall be reported as ICX285 KAF-8300-AXC-CD-AA shall be reported as KAF-8300 Note: The most common usage of this property is to select approximate color balance parameters to be applied to the Bayer matrix of one-shot color sensors. Application authors should assume that an appropriate IR cutoff filter is in place for color sensors. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. This is only available for the Camera Interface Version 2
    Type of colour information returned by the the camera sensor, Interface Version 2 only The enum value of the camera sensor Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    May throw a PropertyNotImplementedException if the sensor type is not known.

    This is only available for the Camera Interface Version 2 returns a value indicating whether the sensor is monochrome, or what Bayer matrix it encodes. If this value cannot be determined by interrogating the camera, the appropriate value may be set through the user setup dialogue or the property may return a . Please note that for some cameras, changing , or may change the apparent type of the sensor and so you should change the value returned here to match if this is the case for your camera. The following values are defined:
    Value Enumeration Meaning
    0 Monochrome Camera produces monochrome array with no Bayer encoding
    1 Colour Camera produces color image directly, requiring not Bayer decoding
    2 RGGB Camera produces RGGB encoded Bayer array images
    3 CMYG Camera produces CMYG encoded Bayer array images
    4 CMYG2 Camera produces CMYG2 encoded Bayer array images
    5 LRGB Camera produces Kodak TRUESENSE Bayer LRGB array images
    Please note that additional values may be defined in future updates of the standard, as new Bayer matrices may be created by sensor manufacturers in the future. If this occurs, then a new enumeration value shall be defined. The pre-existing enumeration values shall not change. can possibly change between exposures, for example if Camera.ReadoutMode is changed, and should always be checked after each exposure. In the following definitions, R = red, G = green, B = blue, C = cyan, M = magenta, Y = yellow. The Bayer matrix is defined with X increasing from left to right, and Y increasing from top to bottom. The pattern repeats every N x M pixels for the entire pixel array, where N is the height of the Bayer matrix, and M is the width. RGGB indicates the following matrix:
    X = 0 X = 1
    Y = 0 R G
    Y = 1 G B
    CMYG indicates the following matrix:
    X = 0 X = 1
    Y = 0 Y C
    Y = 1 G M
    CMYG2 indicates the following matrix:
    X = 0 X = 1
    Y = 0 C Y
    Y = 1 M G
    Y = 2 C Y
    Y = 3 G M
    LRGB indicates the following matrix (Kodak TRUESENSE):
    X = 0 X = 1 X = 2 X = 3
    Y = 0 L R L G
    Y = 1 R L G L
    Y = 2 L G L B
    Y = 3 G L B L
    The alignment of the array may be modified by and . The offset is measured from the 0,0 position in the sensor array to the upper left corner of the Bayer matrix table. Please note that the Bayer offset values are not affected by subframe settings. For example, if a CMYG2 sensor has a Bayer matrix offset as shown below, is 0 and is 1:
    X = 0 X = 1
    Y = 0 G M
    Y = 1 C Y
    Y = 2 M G
    Y = 3 C Y
    It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model.
    Defines the IDome Interface This interface is used to handle a dome, with or without a controllable shutter, and also a roll off roof. The dome implentation should be self explanatory. A roll off roof is implemented using the shutter control as the roof. The properties and methods shoud be implented as follows: OpenShutter and CloseShutter open and close the roof. CanFindHome, CanPark,CanSetAltitude, CanSetAzimuth, CanSetPark, CanSlave and CanSyncAzimuth all return false. CanSetShutter returns true. ShutterStatus is implemented. Slewing always returns false. AbortSlew should stop the shutter moving. FindHome, Park, SetPark, SlewToAltitude, SlewToAzimuth and SyncToAzimuth all throw the Altitude and Azimuth throw the . Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Immediately cancel current dome operation.

    Must be implemented, must not throw a MethodNotImplementedException.

    Calling this method will immediately disable hardware slewing ( will become False). Raises an error if a communications failure occurs, or if the command is known to have failed.
    The dome altitude (degrees, horizon zero and increasing positive to 90 zenith). If the property is not implemented Raises an error only if no altitude control. If actual dome altitude can not be read, then reports back the last slew position. Indicates whether the dome is in the home position. Raises an error if not supported. This is normally used following a operation. The value is reset with any azimuth slew operation that moves the dome away from the home position. may also become true durng normal slew operations, if the dome passes through the home position and the dome controller hardware is capable of detecting that; or at the end of a slew operation if the dome comes to rest at the home position. If the property is not implemented The home position is normally defined by a hardware sensor positioned around the dome circumference and represents a fixed, known azimuth reference. For some devices, the home position may represent a small range of azimuth values, rather than a discrete value, since dome inertia, the resolution of the home position sensor and/or the azimuth encoder may be insufficient to return the exact same azimuth value on each occasion. Some dome controllers, on the other hand, will always force the azimuth reading to a fixed value whenever the home position sensor is active. Because of these potential differences in behaviour, applications should not rely on the reported azimuth position being identical each time is set true. [ASCOM-135] TPL - Updated documentation True if the dome is in the programmed park position. If the property is not implemented Set only following a operation and reset with any slew operation. Raises an error if not supported. The dome azimuth (degrees, North zero and increasing clockwise, i.e., 90 East, 180 South, 270 West) If the property is not implemented Raises an error only if no azimuth control. If actual dome azimuth can not be read, then reports back last slew position True if driver can do a search for home position.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if driver is capable of setting dome altitude.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if driver is capable of setting dome altitude.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if driver is capable of setting dome azimuth.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if driver can set the dome park position.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if driver is capable of automatically operating shutter.

    Must be implemented, must not throw a PropertyNotImplementedException.

    True if the dome hardware supports slaving to a telescope.

    Must be implemented, must not throw a PropertyNotImplementedException.

    See the notes for the property.
    True if driver is capable of synchronizing the dome azimuth position using the method.

    Must be implemented, must not throw a PropertyNotImplementedException.

    Close shutter or otherwise shield telescope from the sky. If the method is not implemented Start operation to search for the dome home position. If the method is not implemented After Home position is established initializes to the default value and sets the flag. Exception if not supported or communications failure. Raises an error if is True. Open shutter or otherwise expose telescope to the sky. If the method is not implemented Raises an error if not supported or if a communications failure occurs. Rotate dome in azimuth to park position. If the method is not implemented After assuming programmed park position, sets flag. Raises an error if is True, or if not supported, or if a communications failure has occurred. Set the current azimuth, altitude position of dome to be the park position. If the method is not implemented Raises an error if not supported or if a communications failure occurs. Status of the dome shutter or roll-off roof. If the property is not implemented Raises an error only if no shutter control. If actual shutter status can not be read, then reports back the last shutter state. True if the dome is slaved to the telescope in its hardware, else False.

    Slaved Read must be implemented and must not throw a PropertyNotImplementedException.

    Slaved Write can throw a PropertyNotImplementedException.

    Set this property to True to enable dome-telescope hardware slaving, if supported (see ). Raises an exception on any attempt to set this property if hardware slaving is not supported). Always returns False if hardware slaving is not supported.
    True if any part of the dome is currently moving, False if all dome components are steady.

    Slewing must be implemented and must not throw a PropertyNotImplementedException.

    Raises an error if is True, if not supported, if a communications failure occurs, or if the dome can not reach indicated azimuth.
    Slew the dome to the given altitude position. If the method is not implemented If the supplied altitude is outside the range 0..90 degrees. Raises an error if is True, if not supported, if a communications failure occurs, or if the dome can not reach indicated altitude. Target dome altitude (degrees, horizon zero and increasing positive to 90 zenith) Slew the dome to the given azimuth position. If the method is not implemented If the supplied azimuth is outside the range 0..360 degrees. Raises an error if is True, if not supported, if a communications failure occurs, or if the dome can not reach indicated azimuth. Target azimuth (degrees, North zero and increasing clockwise. i.e., 90 East, 180 South, 270 West) Synchronize the current position of the dome to the given azimuth. If the method is not implemented If the supplied azimuth is outside the range 0..360 degrees. Raises an error if not supported or if a communications failure occurs. Target azimuth (degrees, North zero and increasing clockwise. i.e., 90 East, 180 South, 270 West) Defines the IFilterWheel Interface Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Focus offset of each filter in the wheel

    Must be implemented, must not throw a PropertyNotImplementedException.

    For each valid slot number (from 0 to N-1), reports the focus offset for the given filter position. These values are focuser and filter dependent, and would usually be set up by the user via the SetupDialog. The number of slots N can be determined from the length of the array. If focuser offsets are not available, then it should report back 0 for all array values.
    Name of each filter in the wheel

    Must be implemented, must not throw a PropertyNotImplementedException.

    For each valid slot number (from 0 to N-1), reports the name given to the filter position. These names would usually be set up by the user via the SetupDialog. The number of slots N can be determined from the length of the array. If filter names are not available, then it should report back "Filter 1", "Filter 2", etc.
    Sets or returns the current filter wheel position Must throw an InvalidValueException if an invalid position is set Must throw an exception if the Filter Wheel is not connected

    Must be implemented, must not throw a PropertyNotImplementedException.

    Write a position number between 0 and N-1, where N is the number of filter slots (see ). Starts filter wheel rotation immediately when written. Reading the property gives current slot number (if wheel stationary) or -1 if wheel is moving. Returning a position of -1 is mandatory while the filter wheel is in motion; valid slot numbers must not be reported back while the filter wheel is rotating past filter positions. Note Some filter wheels are built into the camera (one driver, two interfaces). Some cameras may not actually rotate the wheel until the exposure is triggered. In this case, the written value is available immediately as the read value, and -1 is never produced.
    Provides universal access to Focuser drivers Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error. The Connected property is not implemented in Version 1 drivers; these use the property and will raise a Not Implemented exception for this property. Version 2 drivers must implement both Connected and Link. Applications should check that InterfaceVersion returns 2 or more before using Connected.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. True if the focuser is capable of absolute position; that is, being commanded to a specific step location. If the driver must be connected in order to determine the property value. Must throw an exception if the call was not successful

    Must be implemented

    Immediately stop any focuser motion due to a previous method call. Focuser does not support this method. If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Some focusers may not support this function, in which case an exception will be raised. Recommendation: Host software should call this method upon initialization and, if it fails, disable the Halt button in the user interface.
    True if the focuser is currently moving to a new position. False if the focuser is stationary. If the driver is not connected. Must throw an exception if the call was not successful

    Must be implemented

    State of the connection to the focuser. Must throw an exception if the call was not successful

    Must be implemented

    Set True to start the connection to the focuser; set False to terminate the connection. The current connection status can also be read back through this property. An exception will be raised if the link fails to change state for any reason. Note The FocuserV1 interface was the only interface to name its "Connect" method "Link" all others named their "Connect" method as "Connected". All interfaces including Focuser now have a method and this is the recommended method to use to "Connect" to Focusers exposing the V2 and later interfaces. Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed.
    Maximum increment size allowed by the focuser; i.e. the maximum number of steps allowed in one move operation. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    For most focusers this is the same as the property. This is normally used to limit the Increment display in the host software.
    Maximum step position permitted. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    The focuser can step between 0 and . If an attempt is made to move the focuser beyond these limits, it will automatically stop at the limit.
    Moves the focuser by the specified amount or to the specified position depending on the value of the property. Step distance or absolute position, depending on the value of the property. If a Move operation is requested when is True If the device is not connected. Must throw an exception if the call was not successful

    Must be implemented

    If the property is True, then this is an absolute positioning focuser. The Move command tells the focuser to move to an exact step position, and the Position parameter of the Move method is an integer between 0 and . If the property is False, then this is a relative positioning focuser. The Move command tells the focuser to move in a relative direction, and the Position parameter of the Move method (in this case, step distance) is an integer between minus and plus .
    Current focuser position, in steps. If the property is not available for this device. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Valid only for absolute positioning focusers (see the property). A PropertyNotImplementedException exception must be thrown if this device is a relative positioning focuser rather than an absolute position focuser.
    Step size (microns) for the focuser. If the focuser does not intrinsically know what the step size is. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Must throw an exception if the focuser does not intrinsically know what the step size is.
    The state of temperature compensation mode (if available), else always False. If is False and an attempt is made to set to true. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    TempComp Read must be implemented and must not throw a PropertyNotImplementedException.

    TempComp Write can throw a PropertyNotImplementedException.

    If the property is True, then setting to True puts the focuser into temperature tracking mode. While in temperature tracking mode, Move commands will be rejected by the focuser. Set to False to turn off temperature tracking. If temperature compensation is not available, this property must always return False. A exception must be thrown if is False and an attempt is made to set to true.
    True if focuser has temperature compensation available. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Will be True only if the focuser's temperature compensation can be turned on and off via the property.
    Current ambient temperature as measured by the focuser. If the property is not available for this device. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Raises an exception if ambient temperature is not available. Commonly available on focusers with a built-in temperature compensation mode.
    Provides universal access to Focuser drivers - Updated to IFocuserV3 - see remarks below SPECIFICATION REVISION - Platform 6.4 The method signatures in the revised interface specification are identical to the preceeding IFocuserV2, however, the IFocuserV3.Move command must no longer throw an InvalidOperationException exception if a Move is attempted when temperature compensation is enabled. Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error. The Connected property is not implemented in Version 1 drivers; these use the property and will raise a Not Implemented exception for this property. Version 2 drivers must implement both Connected and Link. Applications should check that InterfaceVersion returns 2 or more before using Connected.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 3 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. True if the focuser is capable of absolute position; that is, being commanded to a specific step location. If the driver must be connected in order to determine the property value. Must throw an exception if the call was not successful

    Must be implemented

    Immediately stop any focuser motion due to a previous method call. Focuser does not support this method. If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Some focusers may not support this function, in which case an exception will be raised. Recommendation: Host software should call this method upon initialization and, if it fails, disable the Halt button in the user interface.
    True if the focuser is currently moving to a new position. False if the focuser is stationary. If the driver is not connected. Must throw an exception if the call was not successful

    Must be implemented

    State of the connection to the focuser. Must throw an exception if the call was not successful

    Must be implemented

    Set True to start the connection to the focuser; set False to terminate the connection. The current connection status can also be read back through this property. An exception will be raised if the link fails to change state for any reason. Note The FocuserV1 interface was the only interface to name its "Connect" method "Link" all others named their "Connect" method as "Connected". All interfaces including Focuser now have a method and this is the recommended method to use to "Connect" to Focusers exposing the V2 and later interfaces. Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed.
    Maximum increment size allowed by the focuser; i.e. the maximum number of steps allowed in one move operation. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    For most focusers this is the same as the property. This is normally used to limit the Increment display in the host software.
    Maximum step position permitted. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    The focuser can step between 0 and . If an attempt is made to move the focuser beyond these limits, it will automatically stop at the limit.
    Moves the focuser by the specified amount or to the specified position depending on the value of the property. Step distance or absolute position, depending on the value of the property. If the device is not connected. Must throw an exception if the call was not successful

    Must be implemented

    If the property is True, then this is an absolute positioning focuser. The Move command tells the focuser to move to an exact step position, and the Position parameter of the Move method is an integer between 0 and . If the property is False, then this is a relative positioning focuser. The Move command tells the focuser to move in a relative direction, and the Position parameter of the Move method (in this case, step distance) is an integer between minus and plus . BEHAVIOURAL CHANGE - Platform 6.4 Prior to Platform 6.4, the interface specification mandated that drivers must throw an if a move was attempted when was True, even if the focuser was able to execute the move safely without disrupting temperature compensation. Following discussion on ASCOM-Talk in January 2018, the Focuser interface specification has been revised to IFocuserV3, removing the requrement to throw the InvalidOperationException exception. IFocuserV3 compliant drivers are expected to execute Move requests when temperature compensation is active and to hide any specific actions required by the hardware from the client. For example this could be achieved by disabling temperature compensation, moving the focuser and re-enabling temperature compensation or simply by moving the focuser with compensation enabled if the hardware supports this. Conform will continue to pass IFocuserV2 drivers that throw InvalidOperationException exceptions. However, Conform will now fail IFocuserV3 drivers that throw InvalidOperationException exceptions, in line with this revised specification.
    Current focuser position, in steps. If the property is not available for this device. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Valid only for absolute positioning focusers (see the property). A PropertyNotImplementedException exception must be thrown if this device is a relative positioning focuser rather than an absolute position focuser.
    Step size (microns) for the focuser. If the focuser does not intrinsically know what the step size is. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Must throw an exception if the focuser does not intrinsically know what the step size is.
    The state of temperature compensation mode (if available), else always False. If is False and an attempt is made to set to true. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    TempComp Read must be implemented and must not throw a PropertyNotImplementedException.

    TempComp Write can throw a PropertyNotImplementedException.

    If the property is True, then setting to True puts the focuser into temperature tracking mode; setting it to False will turn off temperature tracking. If temperature compensation is not available, this property must always return False. A exception must be thrown if is False and an attempt is made to set to true. BEHAVIOURAL CHANGE - Platform 6.4 Prior to Platform 6.4, the interface specification mandated that drivers must throw an if a move was attempted when was True, even if the focuser was able to execute the move safely without disrupting temperature compensation. Following discussion on ASCOM-Talk in January 2018, the Focuser interface specification has been revised to IFocuserV3, removing the requrement to throw the InvalidOperationException exception. IFocuserV3 compliant drivers are expected to execute Move requests when temperature compensation is active and to hide any specific actions required by the hardware from the client. For example this could be achieved by disabling temperature compensation, moving the focuser and re-enabling temperature compensation or simply by moving the focuser with compensation enabled if the hardware supports this. Conform will continue to pass IFocuserV2 drivers that throw InvalidOperationException exceptions. However, Conform will now fail IFocuserV3 drivers that throw InvalidOperationException exceptions, in line with this revised specification.
    True if focuser has temperature compensation available. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Will be True only if the focuser's temperature compensation can be turned on and off via the property.
    Current ambient temperature as measured by the focuser. If the property is not available for this device. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Raises an exception if ambient temperature is not available. Commonly available on focusers with a built-in temperature compensation mode.
    Defines the IObservingConditions Interface. This interface provides a limited set of values that are useful for astronomical purposes for things such as determining if it is safe to open or operate the observing system, for recording astronomical data or determining refraction corrections. It is NOT intended as a general purpose environmental sensor system. The Action method and SupportedActions property can be used to extend your driver to present any further sensors that you need. Set to True to connect to the device hardware. Set to False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and model number. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Must return 1 for this interface version.

    Must be implemented

    This value will be incremented if the interface specification is extended in the future.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property. For ObservingConditions drivers the following conventions are recommended: The "ActionName" should be the name of a sensor in a form that makes sense to the user. This must not be changed in the driver. The "ActionParameter" should be "Value" to return the sensor value and "Description" to return the sensor description. The description must return a valid description, even if not connected.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM. See Action for advice on how th implement this for ObservingConditions drivers.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Gets And sets the time period over which observations will be averaged Time period (hours) over which to average sensor readings If the value set is not available for this driver. All drivers must accept 0.0 to specify that an instantaneous value is available. If the device is not connected and this information is only available when connected.

    Mandatory property, must be implemented, can NOT throw a PropertyNotImplementedException

    This property should return the time period (hours) over which sensor readings will be averaged. If your driver is delivering instantaneous sensor readings this property should return a value of 0.0. Please resist the temptation to throw exceptions when clients query sensor properties when insufficient time has passed to get a true average reading. A best estimate of the average sensor value should be returned in these situations.
    Amount of sky obscured by cloud percentage of the sky covered by cloud If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    This property should return a value between 0.0 and 100.0 where 0.0 = clear sky and 100.0 = 100% cloud coverage
    Atmospheric dew point at the observatory Atmospheric dew point reported in °C. If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException when the property also throws a PropertyNotImplementedException.

    Mandatory property, must NOT throw a PropertyNotImplementedException when the property is implemented.

    The units of this property are degrees Celsius. Driver and application authors can use the method to convert these units to and from degrees Farenhheit. The ASCOM specification requires that DewPoint and Humidity are either both implemented or both throw PropertyNotImplementedExceptions. It is not allowed for one to be implemented and the other to throw a PropertyNotImplementedException. The Utilities component contains methods ( and ) to convert DewPoint to Humidity and vice versa given the ambient temperature.
    Atmospheric humidity at the observatory Atmospheric humidity (%) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException when the property also throws a PropertyNotImplementedException.

    Mandatory property, must NOT throw a PropertyNotImplementedException when the property is implemented.

    The ASCOM specification requires that DewPoint and Humidity are either both implemented or both throw PropertyNotImplementedExceptions. It is not allowed for one to be implemented and the other to throw a PropertyNotImplementedException. The Utilities component contains methods ( and ) to convert DewPoint to Humidity and vice versa given the ambient temperature. This property should return a value between 0.0 and 100.0 where 0.0 = 0% relative humidity and 100.0 = 100% relative humidity.
    Atmospheric pressure at the observatory Atmospheric presure at the observatory (hPa) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are hectoPascals. Client and driver authors can use the method to convert these units to and from milliBar, mm of mercury and inches of mercury. This must be the pressure at the observatory altitude and not the adjusted pressure at sea level. Please check whether your pressure sensor delivers local observatory pressure or sea level pressure and, if it returns sea level pressure, adjust this to actual pressure at the observatory's altitude before returning a value to the client. The method can be used to effect this adjustment.
    Rain rate at the observatory Rain rate (mm / hour) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are millimetres per hour. Client and driver authors can use the method to convert these units to and from inches per hour. This property can be interpreted as 0.0 = Dry any positive nonzero value = wet. Rainfall intensity is classified according to the rate of precipitation: Light rain — when the precipitation rate is less than 2.5 mm (0.098 in) per hour Moderate rain — when the precipitation rate is between 2.5 mm (0.098 in) and 10 mm (0.39 in) per hour Heavy rain — when the precipitation rate is between 10 mm (0.39 in) and 50 mm (2.0 in) per hour Violent rain — when the precipitation rate is > 50 mm (2.0 in) per hour
    Sky brightness at the observatory Sky brightness (Lux) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    This property returns the sky brightness measured in Lux. Luminance Examples in Lux IlluminanceSurfaces illuminated by: 0.0001 luxMoonless, overcast night sky (starlight) 0.002 luxMoonless clear night sky with airglow 0.27–1.0 luxFull moon on a clear night 3.4 luxDark limit of civil twilight under a clear sky 50 luxFamily living room lights (Australia, 1998) 80 luxOffice building hallway/toilet lighting 100 luxVery dark overcast day 320–500 luxOffice lighting 400 luxSunrise or sunset on a clear day. 1000 luxOvercast day; typical TV studio lighting 10000–25000 luxFull daylight (not direct sun) 32000–100000 luxDirect sunlight
    Sky quality at the observatory Sky quality measured in magnitudes per square arc second If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    Sky quality is typically measured in units of magnitudes per square arc second. A sky quality of 20 magnitudes per square arc second means that the overall sky appears with a brightness equivalent to having 1 magnitude 20 star in each square arc second of sky. Examples of typical sky quality values were published by Sky and Telescope (http://www.skyandtelescope.com/astronomy-resources/rate-your-skyglow/) and, in slightly adpated form, are reproduced below:
    Sky Quality (mag/arcsec2) Description
    22.0 By convention, this is often assumed to be the average brightness of a moonless night sky that's completely free of artificial light pollution.
    21.0 This is typical for a rural area with a medium-sized city not far away. It's comparable to the glow of the brightest section of the northern Milky Way, from Cygnus through Perseus.
    20.0 This is typical for the outer suburbs of a major metropolis. The summer Milky Way is readily visible but severely washed out.
    19.0 Typical for a suburb with widely spaced single-family homes. It's a little brighter than a remote rural site at the end of nautical twilight, when the Sun is 12° below the horizon.
    18.0 Bright suburb or dark urban neighborhood. It's also a typical zenith skyglow at a rural site when the Moon is full. The Milky Way is invisible, or nearly so.
    17.0 Typical near the center of a major city.
    13.0 The zenith skyglow at the end of civil twilight, roughly a half hour after sunset, when the Sun is 6° below the horizon. Venus and Jupiter are easy to see, but bright stars are just beginning to appear.
    7.0 The zenith skyglow at sunrise or sunset
    Seeing at the observatory measured as star full width half maximum (FWHM) in arc secs. Seeing reported as star full width half maximum (arc seconds) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    Sky temperature at the observatory Sky temperature in °C If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are degrees Celsius. Driver and application authors can use the method to convert these units to and from degrees Farenhheit. This is expected to be returned by an infra-red sensor looking at the sky. The lower the temperature the more the sky is likely to be clear.
    Temperature at the observatory Temperature in °C If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are degrees Celsius. Driver and application authors can use the method to convert these units to and from degrees Farenhheit. This is expected to be the ambient temperature at the observatory.
    Wind direction at the observatory Wind direction (degrees, 0..360.0) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The returned value must be between 0.0 and 360.0, interpreted according to the metereological standard, where a special value of 0.0 is returned when the wind speed is 0.0. Wind direction is measured clockwise from north, through east, where East=90.0, South=180.0, West=270.0 and North=360.0.
    Peak 3 second wind gust at the observatory over the last 2 minutes Wind gust (m/s) Peak 3 second wind speed over the last 2 minutes If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are metres per second. Driver and application authors can use the method to convert these units to and from miles per hour or knots.
    Wind speed at the observatory Wind speed (m/s) If this property is not available. If the device is not connected and this information is only available when connected.

    Optional property, can throw a PropertyNotImplementedException

    The units of this property are metres per second. Driver and application authors can use the method to convert these units to and from miles per hour or knots.
    Provides the time since the sensor value was last updated Name of the property whose time since last update is required Time in seconds since the last sensor update for this property If the sensor is not implemented. If the device is not connected and this information is only available when connected. If an invalid property name parameter is supplied.

    Must Not throw a MethodNotImplementedException when the specified sensor Is implemented but must throw a MethodNotImplementedException when the specified sensor Is Not implemented.

    PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. Return a negative value to indicate that no valid value has ever been received from the hardware. If an empty string is supplied as the PropertyName, the driver must return the time since the most recent update of any sensor. A MethodNotImplementedException must not be thrown in this circumstance.
    Provides a description of the sensor providing the requested property Name of the sensor whose description is required The description of the specified sensor. If the sensor is not implemented. If the device is not connected and this information is only available when connected. If an invalid property name parameter is supplied.

    Must Not throw a MethodNotImplementedException when the specified sensor Is implemented but must throw a MethodNotImplementedException when the specified sensor Is Not implemented.

    PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. If the sensor is implemented, this must return a valid string, even if the driver is not connected, so that applications can use this to determine what sensors are available. If the sensor is not implemented, this must throw a MethodNotImplementedException.
    Forces the driver to immediately query its attached hardware to refresh sensor values If this method is not available. If the device is not connected.

    Optional method, can throw a MethodNotImplementedException

    Describes a range of rates supported by the method (degrees/per second) These are contained within an collection and serve to describe one or more supported ranges of rates of motion about a mechanical axis. It is possible that the and properties will be equal. In this case, the object expresses a single discrete rate. Both the and properties are always expressed in units of degrees per second. This is only using for Telescope InterfaceVersions 2 and 3 Values used must be non-negative and are scalar values. You do not need to supply complementary negative rates for each positive rate that you specify. Movement in both directions is achieved by the application applying an appropriate positive or negative sign to the rate when it is used in the command. Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. The maximum rate (degrees per second) This must always be a positive number. It indicates the maximum rate in either direction about the axis. The minimum rate (degrees per second) This must always be a positive number. It indicates the maximum rate in either direction about the axis. Defines the IRotator Interface Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Indicates whether the Rotator supports the method. True if the Rotator supports the method.

    Must be implemented and must not throw a PropertyNotImplementedException.

    Immediately stop any Rotator motion due to a previous Move or MoveAbsolute method call. This is an optional method. Raises an error if not supported. Throw a MethodNotImplementedException if the rotator cannot halt. Indicates whether the rotator is currently moving True if the Rotator is moving to a new position. False if the Rotator is stationary. If the property is not implemented. Rotation is asynchronous, that is, when the Move method is called, it starts the rotation, then returns immediately. During rotation, must be True, else it must be False. Causes the rotator to move Position degrees relative to the current value. If the method is not implemented. If Position is invalid. Relative position to move in degrees from current . Calling Move causes the property to change to the sum of the current angular position and the value of the parameter (modulo 360 degrees), then starts rotation to . Causes the rotator to move the absolute position of degrees. Absolute position in degrees. If the method is not implemented. If Position is invalid. Calling MoveAbsolute causes the property to change to the value of the parameter, then starts rotation to . Current instantaneous Rotator position, in degrees. If the property is not implemented. The position is expressed as an angle from 0 up to but not including 360 degrees, counter-clockwise against the sky. This is the standard definition of Position Angle. However, the rotator does not need to (and in general will not) report the true Equatorial Position Angle, as the attached imager may not be precisely aligned with the rotator's indexing. It is up to the client to determine any offset between mechanical rotator position angle and the true Equatorial Position Angle of the imager, and compensate for any difference. The optional property is provided in order to manage rotators being used on optics with odd or even number of reflections. With the Reverse switch in the correct position for the optics, the reported position angle must be counter-clockwise against the sky. Sets or Returns the rotator’s Reverse state. True if the rotation and angular direction must be reversed for the optics Throw a PropertyNotImplementedException if the rotator cannot reverse and CanReverse is False. See the definition of . Raises an error if not supported. The minimum StepSize, in degrees. Throw a PropertyNotImplementedException if the rotator does not know its step size. Raises an exception if the rotator does not intrinsically know what the step size is. The destination position angle for Move() and MoveAbsolute(). The destination position angle forMove and MoveAbsolute. If the property is not implemented. Upon calling Move or MoveAbsolute, this property immediately changes to the position angle to which the rotator is moving. The value is retained until a subsequent call to Move or MoveAbsolute. Defines the ISwitchV2 Interface The Switch interface is used to define a number of 'switch devices'. A switch device can be used to control something, such as a power switch or may be used to sense the state of something, such as a limit switch. This SwitchV2 interface is an extension of the original Switch interface. The changes allow devices to have more than two states and to distinguish between devices that are writable and those that are read only. Compatibility between Switch and SwitchV2 interfaces: Switch devices that implemented the original Switch interface and client applications that use the original interface will still work together. Client applications that implement the original Switch interface should still work with drivers that implement the new interface. Client applications that use the new features in this interface will not work with drivers that do not implement the new interface. Each device has a CanWrite method, this is true if it can be written to or false if the device can only be read. The new MinSwitchValue, MaxSwitchValue and SwitchStep methods are used to define the range and values that a device can handle. This also defines the number of different values - states - that a device can have, from two for a traditional on-off switch, through those with a small number of states to those which have many states. The SetSwitchValue and GetSwitchValue methods are used to set and get the value of a device as a double. There is no fundamental difference between devices with different numbers of states. Naming Conventions Each device handled by a Switch is known as a device or switch device for general cases, a controller device if it can alter the state of the device and a sensor device if it can only be read. For convenience devices are referred to as boolean if the device can only have two states, and multi-state if it can have more than two values. These are treated the same in the interface definition. Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. The number of switch devices managed by this driver The number of devices managed by this driver.

    Must be implemented, must not throw a

    Devices are numbered from 0 to - 1

    Return the name of switch device n. The device number (0 to - 1) The name of the device If id is outside the range 0 to - 1

    Must be implemented, must not throw an ASCOM.MethodNotImplementedException

    Devices are numbered from 0 to - 1
    Set a switch device name to a specified value. The device number (0 to - 1) The name of the device If the device name cannot be set in the application code. If id is outside the range 0 to - 1

    Can throw a if the device name can not be set by the application.

    Devices are numbered from 0 to - 1
    Gets the description of the specified switch device. This is to allow a fuller description of the device to be returned, for example for a tool tip. The device number (0 to - 1) String giving the device description. If id is outside the range 0 to - 1

    Must be implemented, must not throw an ASCOM.MethodNotImplementedException

    Decices are numbered from 0 to - 1 This is a Version 2 method.
    Reports if the specified switch device can be written to, default true. This is false if the device cannot be written to, for example a limit switch or a sensor. The device number (0 to - 1) true if the device can be written to, otherwise false. If id is outside the range 0 to - 1

    Must be implemented, must not throw an ASCOM.MethodNotImplementedException

    Devices are numbered from 0 to - 1 This is a Version 2 method, version 1 switch devices can be assumed to be writable.
    Return the state of switch device id as a boolean The device number (0 to - 1) True or false If id is outside the range 0 to - 1 If there is a temporary condition that prevents the device value being returned.

    Must be implemented, must not throw a .

    All devices must implement this. A multi-state device will return true if the device is at the maximum value, false if the value is at the minumum and either true or false as specified by the driver developer for intermediate values. Some devices do not support reading their state although they do allow state to be set. In these cases, on startup, the driver can not know the hardware state and it is recommended that the driver either: Sets the device to a known state on connection Throws an until the client software has set the device state for the first time In both cases the driver should save a local copy of the state which it last set and return this through and Devices are numbered from 0 to - 1
    Sets a switch controller device to the specified state, true or false. The device number (0 to - 1) The required control state If id is outside the range 0 to - 1 If is false.

    Can throw a if is False.

    must return if the set state is true and if the set state is false. Devices are numbered from 0 to - 1
    Returns the maximum value for this switch device, this must be greater than . The device number (0 to - 1) The maximum value to which this device can be set or which a read only sensor will return. If id is outside the range 0 to - 1

    Must be implemented, must not throw a .

    If a two state device cannot report its state, should return the value 1.0. Devices are numbered from 0 to - 1. This is a Version 2 method.
    Returns the minimum value for this switch device, this must be less than The device number (0 to - 1) The minimum value to which this device can be set or which a read only sensor will return. If id is outside the range 0 to - 1

    Must be implemented, must not throw a .

    If a two state device cannot report its state, should return the value 0.0. Devices are numbered from 0 to - 1. This is a Version 2 method.
    Returns the step size that this device supports (the difference between successive values of the device). The device number (0 to - 1) The step size for this device. If id is outside the range 0 to - 1

    Must be implemented, must not throw .

    SwitchStep, MinSwitchValue and MaxSwitchValue can be used to determine the way the device is controlled and/or displayed, for example by setting the number of decimal places or number of states for a display. must be greater than zero and the number of steps can be calculated as: (( - ) / ) + 1. The switch range ( - ) must be an exact multiple of . If a two state device cannot report its state, should return the value 1.0. Devices are numbered from 0 to - 1. This is a Version 2 method.
    Returns the value for switch device id as a double The device number (0 to - 1) The value for this switch, this is expected to be between and . If there is a temporary condition that prevents the device value being returned. If id is outside the range 0 to - 1

    Must be implemented, must not throw a .

    Some devices do not support reading their state although they do allow state to be set. In these cases, on startup, the driver can not know the hardware state and it is recommended that the driver either: Sets the device to a known state on connection Throws an until the client software has set the device state for the first time In both cases the driver should save a local copy of the state which it last set and return this through and Devices are numbered from 0 to - 1. This is a Version 2 method.
    Set the value for this device as a double. The device number (0 to - 1) The value to be set, between and If id is outside the range 0 to - 1 If value is outside the range to If is false.

    Can throw a if is False.

    If the value is more than or less than then the method must throw an . A set value that is intermediate between the values specified by should result in the device being set to an achievable value close to the requested set value. Devices are numbered from 0 to - 1. This is a Version 2 method.
    Defines the ITelescope Interface Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 3 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Stops a slew in progress. If the method is not implemented Effective only after a call to , , , or . Does nothing if no slew/motion is in progress. Tracking is returned to its pre-slew state. Raises an error if is true. The alignment mode of the mount (Alt/Az, Polar, German Polar). If the property is not implemented This is only available for telescope InterfaceVersions 2 and 3 The Altitude above the local horizon of the telescope's current position (degrees, positive up) If the property is not implemented The area of the telescope's aperture, taking into account any obstructions (square meters) This is only available for telescope InterfaceVersions 2 and 3 If the property is not implemented The telescope's effective aperture diameter (meters) This is only available for telescope InterfaceVersions 2 and 3 If the property is not implemented True if the telescope is stopped in the Home position. Set only following a operation, and reset with any slew operation. This property must be False if the telescope does not support homing.

    Must be implemented, must not throw a PropertyNotImplementedException.

    This is only available for telescope InterfaceVersions 2 and 3
    True if the telescope has been put into the parked state by the seee method. Set False by calling the Unpark() method.

    Must be implemented, must not throw a PropertyNotImplementedException.

    AtPark is True when the telescope is in the parked state. This is achieved by calling the method. When AtPark is true, the telescope movement is stopped (or restricted to a small safe range of movement) and all calls that would cause telescope movement (e.g. slewing, changing Tracking state) must not do so, and must raise an error. The telescope is taken out of parked state by calling the method. If the telescope cannot be parked, then AtPark must always return False. This is only available for telescope InterfaceVersions 2 and 3
    Determine the rates at which the telescope may be moved about the specified axis by the method. The axis about which rate information is desired (TelescopeAxes value) Collection of rate objects If an invalid Axis is specified.

    Must be implemented, must not throw a MethodNotImplementedException.

    See the description of for more information. This method must return an empty collection if is not supported. This is only available for telescope InterfaceVersions 2 and 3 Please note that the rate objects must contain absolute non-negative values only. Applications determine the direction by applying a positive or negative sign to the rates provided. This obviates the need for the driver to to present a duplicate set of negative rates as well as the positive rates.
    The azimuth at the local horizon of the telescope's current position (degrees, North-referenced, positive East/clockwise). If the property is not implemented True if this telescope is capable of programmed finding its home position ( method).

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    True if this telescope can move the requested axis Primary, Secondary or Tertiary axis Boolean indicating can or can not move the requested axis If an invalid Axis is specified.

    Must be implemented, must not throw a MethodNotImplementedException.

    This is only available for telescope InterfaceVersions 2 and 3
    True if this telescope is capable of programmed parking (method)

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    True if this telescope is capable of software-pulsed guiding (via the method)

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if the property can be changed to provide offset tracking in the declination axis.

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if the guide rate properties used for can ba adjusted.

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    True if this telescope is capable of programmed setting of its park position ( method)

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    True if the property can be set, meaning that the mount can be forced to flip.

    Must be implemented, must not throw a PropertyNotImplementedException.

    This will always return False for non-German-equatorial mounts that do not have to be flipped. May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    True if the property can be changed to provide offset tracking in the right ascension axis.

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if the property can be changed, turning telescope sidereal tracking on and off.

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed slewing (synchronous or asynchronous) to equatorial coordinates

    Must be implemented, must not throw a PropertyNotImplementedException.

    If this is true, then only the synchronous equatorial slewing methods are guaranteed to be supported. See the property for the asynchronous slewing capability flag. May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed slewing (synchronous or asynchronous) to local horizontal coordinates

    Must be implemented, must not throw a PropertyNotImplementedException.

    If this is true, then only the synchronous local horizontal slewing methods are guaranteed to be supported. See the property for the asynchronous slewing capability flag. May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed asynchronous slewing to local horizontal coordinates

    Must be implemented, must not throw a PropertyNotImplementedException.

    This indicates the the asynchronous local horizontal slewing methods are supported. If this is True, then will also be true. May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed asynchronous slewing to equatorial coordinates.

    Must be implemented, must not throw a PropertyNotImplementedException.

    This indicates the the asynchronous equatorial slewing methods are supported. If this is True, then will also be true. May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed synching to equatorial coordinates.

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed synching to local horizontal coordinates

    Must be implemented, must not throw a PropertyNotImplementedException.

    May raise an error if the telescope is not connected.
    True if this telescope is capable of programmed unparking ( method).

    Must be implemented, must not throw a PropertyNotImplementedException.

    If this is true, then will also be true. May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and 3
    The declination (degrees) of the telescope's current equatorial coordinates, in the coordinate system given by the property. Reading the property will raise an error if the value is unavailable.

    Must be implemented, must not throw a PropertyNotImplementedException.

    The declination tracking rate (arcseconds per SI second, default = 0.0) If DeclinationRate Write is not implemented.

    DeclinationRate Read must be implemented and must not throw a PropertyNotImplementedException.

    DeclinationRate Write can throw a PropertyNotImplementedException.

    This property, together with , provides support for "offset tracking". Offset tracking is used primarily for tracking objects that move relatively slowly against the equatorial coordinate system. It also may be used by a software guiding system that controls rates instead of using the PulseGuide method. NOTES: The property value represents an offset from zero motion. If is False, this property will always return 0. To discover whether this feature is supported, test the property. The supported range of this property is telescope specific, however, if this feature is supported, it can be expected that the range is sufficient to allow correction of guiding errors caused by moderate misalignment and periodic error. If this property is non-zero when an equatorial slew is initiated, the telescope should continue to update the slew destination coordinates at the given offset rate. This will allow precise slews to a fast-moving target with a slow-slewing telescope. When the slew completes, the and properties should reflect the final (adjusted) destination. The units of this property are arcseconds per SI (atomic) second. Please note that for historic reasons the units of the property are seconds of RA per sidereal second. This is not a required feature of this specification, however it is desirable.
    Predict side of pier for German equatorial mounts The destination right ascension (hours). The destination declination (degrees, positive North). The side of the pier on which the telescope would be on if a slew to the given equatorial coordinates is performed at the current instant of time. If the method is not implemented If an invalid RightAscension or Declination is specified. This is only available for telescope InterfaceVersions 2 and 3 True if the telescope or driver applies atmospheric refraction to coordinates. Either read or write or both properties can throw PropertyNotImplementedException if not implemented If this property is True, the coordinates sent to, and retrieved from, the telescope are unrefracted. This is only available for telescope InterfaceVersions 2 and 3 NOTES: If the driver does not know whether the attached telescope does its own refraction, and if the driver does not itself calculate refraction, this property (if implemented) must raise an error when read. Writing to this property is optional. Often, a telescope (or its driver) calculates refraction using standard atmospheric parameters. If the client wishes to calculate a more accurate refraction, then this property could be set to False and these client-refracted coordinates used. If disabling the telescope or driver's refraction is not supported, the driver must raise an error when an attempt to set this property to False is made. Setting this property to True for a telescope or driver that does refraction, or to False for a telescope or driver that does not do refraction, shall not raise an error. It shall have no effect. Equatorial coordinate system used by this telescope (e.g. Topocentric or J2000).

    Must be implemented, must not throw a PropertyNotImplementedException.

    Most amateur telescopes use topocentric coordinates. This coordinate system is simply the apparent position in the sky (possibly uncorrected for atmospheric refraction) for "here and now", thus these are the coordinates that one would use with digital setting circles and most amateur scopes. More sophisticated telescopes use one of the standard reference systems established by professional astronomers. The most common is the Julian Epoch 2000 (J2000). These instruments apply corrections for precession,nutation, abberration, etc. to adjust the coordinates from the standard system to the pointing direction for the time and location of "here and now". This is only available for telescope InterfaceVersions 2 and 3
    Locates the telescope's "home" position (synchronous) If the method is not implemented and is False Returns only after the home position has been found. At this point the property will be True. Raises an error if there is a problem. Raises an error if AtPark is true. This is only available for telescope InterfaceVersions 2 and 3 The telescope's focal length, meters If the property is not implemented This property may be used by clients to calculate telescope field of view and plate scale when combined with detector pixel size and geometry. This is only available for telescope InterfaceVersions 2 and 3 The current Declination movement rate offset for telescope guiding (degrees/sec) If the property is not implemented If an invalid guide rate is set. This is the rate for both hardware/relay guiding and the PulseGuide() method. This is only available for telescope InterfaceVersions 2 and 3 NOTES: To discover whether this feature is supported, test the property. The supported range of this property is telescope specific, however, if this feature is supported, it can be expected that the range is sufficient to allow correction of guiding errors caused by moderate misalignment and periodic error. If a telescope does not support separate guiding rates in Right Ascension and Declination, then it is permissible for and GuideRateDeclination to be tied together. In this case, changing one of the two properties will cause a change in the other. Mounts must start up with a known or default declination guide rate, and this property must return that known/default guide rate until changed. The current Right Ascension movement rate offset for telescope guiding (degrees/sec) If the property is not implemented If an invalid guide rate is set. This is the rate for both hardware/relay guiding and the PulseGuide() method. This is only available for telescope InterfaceVersions 2 and 3 NOTES: To discover whether this feature is supported, test the property. The supported range of this property is telescope specific, however, if this feature is supported, it can be expected that the range is sufficient to allow correction of guiding errors caused by moderate misalignment and periodic error. If a telescope does not support separate guiding rates in Right Ascension and Declination, then it is permissible for GuideRateRightAscension and to be tied together. In this case, changing one of the two properties will cause a change in the other. Mounts must start up with a known or default right ascension guide rate, and this property must return that known/default guide rate until changed. True if a command is in progress, False otherwise If is False Raises an error if the value of the property is false (the driver does not support the method). Move the telescope in one axis at the given rate. The physical axis about which movement is desired The rate of motion (deg/sec) about the specified axis If the method is not implemented. If an invalid axis or rate is given. This method supports control of the mount about its mechanical axes. The telescope will start moving at the specified rate about the specified axis and continue indefinitely. This method can be called for each axis separately, and have them all operate concurrently at separate rates of motion. Set the rate for an axis to zero to restore the motion about that axis to the rate set by the property. Tracking motion (if enabled, see note below) is suspended during this mode of operation. Raises an error if is true. This must be implemented for the if the property returns True for the given axis. This is only available for telescope InterfaceVersions 2 and 3 NOTES: The movement rate must be within the value(s) obtained from a object in the the collection. This is a signed value with negative rates moving in the oposite direction to positive rates. The values specified in are absolute, unsigned values and apply to both directions, determined by the sign used in this command. The value of must be True if the telescope is moving about any of its axes as a result of this method being called. This can be used to simulate a handbox by initiating motion with the MouseDown event and stopping the motion with the MouseUp event. When the motion is stopped by setting the rate to zero the scope will be set to the previous or to no movement, depending on the state of the property. It may be possible to implement satellite tracking by using the method to move the scope in the required manner to track a satellite. Move the telescope to its park position, stop all motion (or restrict to a small safe range), and set to True. If the method is not implemented and is False Raises an error if there is a problem communicating with the telescope or if parking fails. Parking should put the telescope into a state where its pointing accuracy will not be lost if it is power-cycled (without moving it).Some telescopes must be power-cycled before unparking. Others may be unparked by simply calling the method. Calling this with = True does nothing (harmless) Moves the scope in the given direction for the given interval or time at the rate given by the corresponding guide rate property The direction in which the guide-rate motion is to be made The duration of the guide-rate motion (milliseconds) If the method is not implemented and is False If an invalid direction or duration is given. This method returns immediately if the hardware is capable of back-to-back moves, i.e. dual-axis moves. For hardware not having the dual-axis capability, the method returns only after the move has completed. NOTES: Raises an error if is true. The property must be be True during pulse-guiding. The rate of motion for movements about the right ascension axis is specified by the property. The rate of motion for movements about the declination axis is specified by the property. These two rates may be tied together into a single rate, depending on the driver's implementation and the capabilities of the telescope. The right ascension (hours) of the telescope's current equatorial coordinates, in the coordinate system given by the EquatorialSystem property

    Must be implemented, must not throw a PropertyNotImplementedException.

    Reading the property will raise an error if the value is unavailable.
    The right ascension tracking rate offset from sidereal (seconds per sidereal second, default = 0.0) If RightAscensionRate Write is not implemented. If an invalid rate is set.

    RightAscensionRate Read must be implemented and must not throw a PropertyNotImplementedException.

    RightAscensionRate Write can throw a PropertyNotImplementedException.

    This property, together with , provides support for "offset tracking". Offset tracking is used primarily for tracking objects that move relatively slowly against the equatorial coordinate system. It also may be used by a software guiding system that controls rates instead of using the PulseGuide method. NOTES: The property value represents an offset from the currently selected . If this property is zero, tracking will be at the selected . If is False, this property must always return 0. To discover whether this feature is supported, test the property. The units of this property are seconds of right ascension per sidereal second. Please note that for historic reasons the units of the property are arcseconds per SI second. To convert a given rate in (the more common) units of sidereal seconds per UTC (clock) second, multiply the value by 0.9972695677 (the number of UTC seconds in a sidereal second) then set the property. Please note that these units were chosen for the Telescope V1 standard, and in retrospect, this was an unfortunate choice. However, to maintain backwards compatibility, the units cannot be changed. A simple multiplication is all that's needed, as noted. The supported range of this property is telescope specific, however, if this feature is supported, it can be expected that the range is sufficient to allow correction of guiding errors caused by moderate misalignment and periodic error. If this property is non-zero when an equatorial slew is initiated, the telescope should continue to update the slew destination coordinates at the given offset rate. This will allow precise slews to a fast-moving target with a slow-slewing telescope. When the slew completes, the and properties should reflect the final (adjusted) destination. This is not a required feature of this specification, however it is desirable. Use the property to enable and disable sidereal tracking (if supported).
    Sets the telescope's park position to be its current position. If the method is not implemented and is False Indicates the pointing state of the mount. If the property is not implemented. If an invalid side of pier is set. For historical reasons, this property's name does not reflect its true meaning. The name will not be changed (so as to preserve compatibility), but the meaning has since become clear. All conventional mounts have two pointing states for a given equatorial (sky) position. Mechanical limitations often make it impossible for the mount to position the optics at given HA/Dec in one of the two pointing states, but there are places where the same point can be reached sensibly in both pointing states (e.g. near the pole and close to the meridian). In order to understand these pointing states, consider the following (thanks to Patrick Wallace for this info): All conventional telescope mounts have two axes nominally at right angles. For an equatorial, the longitude axis is mechanical hour angle and the latitude axis is mechanical declination. Sky coordinates and mechanical coordinates are two completely separate arenas. This becomes rather more obvious if your mount is an altaz, but it's still true for an equatorial. Both mount axes can in principle move over a range of 360 deg. This is distinct from sky HA/Dec, where Dec is limited to a 180 deg range (+90 to -90). Apart from practical limitations, any point in the sky can be seen in two mechanical orientations. To get from one to the other the HA axis is moved 180 deg and the Dec axis is moved through the pole a distance twice the sky codeclination (90 - sky declination). Mechanical zero HA/Dec will be one of the two ways of pointing at the intersection of the celestial equator and the local meridian. In order to support Dome slaving, where it is important to know which side of the pier the mount is actually on, ASCOM has adopted the convention that the Normal pointing state will be the state where a German Equatorial mount is on the East side of the pier, looking West, with the counterweights below the optical assembly and that will represent this pointing state. Move your scope to this position and consider the two mechanical encoders zeroed. The two pointing states are, then: Normal ()Where the mechanical Dec is in the range -90 deg to +90 deg Beyond the pole ()Where the mechanical Dec is in the range -180 deg to -90 deg or +90 deg to +180 deg. "Side of pier" is a "consequence" of the former definition, not something fundamental. Apart from mechanical interference, the telescope can move from one side of the pier to the other without the mechanical Dec having changed: you could track Polaris forever with the telescope moving from west of pier to east of pier or vice versa every 12h. Thus, "side of pier" is, in general, not a useful term (except perhaps in a loose, descriptive, explanatory sense). All this applies to a fork mount just as much as to a GEM, and it would be wrong to make the "beyond pole" state illegal for the former. Your mount may not be able to get there if your camera hits the fork, but it's possible on some mounts. Whether this is useful depends on whether you're in Hawaii or Finland. To first order, the relationship between sky and mechanical HA/Dec is as follows: Normal state: HA_sky = HA_mech Dec_sky = Dec_mech Beyond the pole HA_sky = HA_mech + 12h, expressed in range ± 12h Dec_sky = 180d - Dec_mech, expressed in range ± 90d Astronomy software often needs to know which which pointing state the mount is in. Examples include setting guiding polarities and calculating dome opening azimuth/altitude. The meaning of the SideOfPier property, then is: pierEastNormal pointing state pierWestBeyond the pole pointing state If the mount hardware reports neither the true pointing state (or equivalent) nor the mechanical declination axis position (which varies from -180 to +180), a driver cannot calculate the pointing state, and *must not* implement SideOfPier. If the mount hardware reports only the mechanical declination axis position (-180 to +180) then a driver can calculate SideOfPier as follows: pierEast = abs(mechanical dec) <= 90 deg pierWest = abs(mechanical Dec) > 90 deg It is allowed (though not required) that this property may be written to force the mount to flip. Doing so, however, may change the right ascension of the telescope. During flipping, Telescope.Slewing must return True. This property is only available in telescope InterfaceVersions 2 and 3. Pointing State and Side of Pier - Help for Driver Developers A further document, "Pointing State and Side of Pier", is installed in the Developer Documentation folder by the ASCOM Developer Components installer. This further explains the pointing state concept and includes diagrams illustrating how it relates to physical side of pier for German equatorial telescopes. It also includes details of the tests performed by Conform to determine whether the driver correctly reports the pointing state as defined above. The local apparent sidereal time from the telescope's internal clock (hours, sidereal)

    Must be implemented, must not throw a PropertyNotImplementedException.

    It is required for a driver to calculate this from the system clock if the telescope has no accessible source of sidereal time. Local Apparent Sidereal Time is the sidereal time used for pointing telescopes, and thus must be calculated from the Greenwich Mean Sidereal time, longitude, nutation in longitude and true ecliptic obliquity.
    The elevation above mean sea level (meters) of the site at which the telescope is located If the property is not implemented. If an invalid elevation is set. If the application must set the elevation before reading it, but has not. Setting this property will raise an error if the given value is outside the range -300 through +10000 metres. Reading the property will raise an error if the value has never been set or is otherwise unavailable. This is only available for telescope InterfaceVersions 2 and 3 The geodetic(map) latitude (degrees, positive North, WGS84) of the site at which the telescope is located. If the property is not implemented. If an invalid latitude is set. If the application must set the latitude before reading it, but has not. Setting this property will raise an error if the given value is outside the range -90 to +90 degrees. Reading the property will raise an error if the value has never been set or is otherwise unavailable. This is only available for telescope InterfaceVersions 2 and 3 The longitude (degrees, positive East, WGS84) of the site at which the telescope is located. If the property is not implemented. If an invalid longitude is set. If the application must set the longitude before reading it, but has not. Setting this property will raise an error if the given value is outside the range -180 to +180 degrees. Reading the property will raise an error if the value has never been set or is otherwise unavailable. Note that West is negative! This is only available for telescope InterfaceVersions 2 and 3 True if telescope is currently moving in response to one of the Slew methods or the method, False at all other times. If the property is not implemented. Reading the property will raise an error if the value is unavailable. If the telescope is not capable of asynchronous slewing, this property will always be False. The definition of "slewing" excludes motion caused by sidereal tracking, PulseGuide, , and . It reflects only motion caused by one of the Slew commands, flipping caused by changing the property, or . Specifies a post-slew settling time (sec.). If the property is not implemented. If an invalid settle time is set. Adds additional time to slew operations. Slewing methods will not return, and the property will not become False, until the slew completes and the SlewSettleTime has elapsed. This feature (if supported) may be used with mounts that require extra settling time after a slew. Move the telescope to the given local horizontal coordinates, return when slew is complete If the method is not implemented and is False If an invalid azimuth or elevation is given. This Method must be implemented if returns True. Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. The and properties are not changed by this method. Raises an error if is True, or if is True. This is only available for telescope InterfaceVersions 2 and 3 Target azimuth (degrees, North-referenced, positive East/clockwise). Target altitude (degrees, positive up) This Method must be implemented if returns True. Azimuth to which to move Altitude to which to move to If the method is not implemented and is False If an invalid azimuth or elevation is given. This method should only be implemented if the properties , , , and can be read while the scope is slewing. Raises an error if starting the slew fails. Returns immediately after starting the slew. The client may monitor the progress of the slew by reading the , , and properties during the slew. When the slew completes, Slewing becomes False. The slew may fail if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. The and properties are not changed by this method. Raises an error if is True, or if is True. This is only available for telescope InterfaceVersions 2 and 3 Move the telescope to the given equatorial coordinates, return when slew is complete If an invalid right ascension or declination is given. The destination right ascension (hours). Copied to . The destination declination (degrees, positive North). Copied to . If the method is not implemented and is False This Method must be implemented if returns True. Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. The target coordinates are copied to and whether or not the slew succeeds. Raises an error if is True, or if is False. Move the telescope to the given equatorial coordinates, return immediately after starting the slew. The destination right ascension (hours). Copied to . The destination declination (degrees, positive North). Copied to . If the method is not implemented and is False If an invalid right ascension or declination is given. This method must be implemented if returns True. Raises an error if starting the slew failed. Returns immediately after starting the slew. The client may monitor the progress of the slew by reading the , , and properties during the slew. When the slew completes, becomes False. The slew may fail to start if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. The target coordinates are copied to and whether or not the slew succeeds. Raises an error if is True, or if is False. Move the telescope to the and coordinates, return when slew complete. If the method is not implemented and is False This Method must be implemented if returns True. Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. Raises an error if is True, or if is False. Move the telescope to the and coordinates, returns immediately after starting the slew. If the method is not implemented and is False This Method must be implemented if returns True. Raises an error if starting the slew failed. Returns immediately after starting the slew. The client may monitor the progress of the slew by reading the RightAscension, Declination, and Slewing properties during the slew. When the slew completes, becomes False. The slew may fail to start if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. Raises an error if is True, or if is False. Matches the scope's local horizontal coordinates to the given local horizontal coordinates. Target azimuth (degrees, North-referenced, positive East/clockwise) Target altitude (degrees, positive up) If the method is not implemented and is False If an invalid azimuth or altitude is given. This must be implemented if the property is True. Raises an error if matching fails. Raises an error if is True, or if is True. This is only available for telescope InterfaceVersions 2 and 3 Matches the scope's equatorial coordinates to the given equatorial coordinates. The corrected right ascension (hours). Copied to the property. The corrected declination (degrees, positive North). Copied to the property. If the method is not implemented and is False If an invalid right ascension or declination is given. This must be implemented if the property is True. Raises an error if matching fails. Raises an error if AtPark is True, or if is False. The way that Sync is implemented is mount dependent and it should only be relied on to improve pointing for positions close to the position at which the sync is done. Matches the scope's equatorial coordinates to the given equatorial coordinates. If the method is not implemented and is False This must be implemented if the property is True. Raises an error if matching fails. Raises an error if AtPark is True, or if is False. The way that Sync is implemented is mount dependent and it should only be relied on to improve pointing for positions close to the position at which the sync is done. The declination (degrees, positive North) for the target of an equatorial slew or sync operation If the property is not implemented. If an invalid declination is set. If the property is read before being set for the first time. Setting this property will raise an error if the given value is outside the range -90 to +90 degrees. Reading the property will raise an error if the value has never been set or is otherwise unavailable. The right ascension (hours) for the target of an equatorial slew or sync operation If the property is not implemented. If an invalid right ascension is set. If the property is read before being set for the first time. Setting this property will raise an error if the given value is outside the range 0 to 24 hours. Reading the property will raise an error if the value has never been set or is otherwise unavailable. The state of the telescope's sidereal tracking drive. If Tracking Write is not implemented.

    Tracking Read must be implemented and must not throw a PropertyNotImplementedException.

    Tracking Write can throw a PropertyNotImplementedException.

    Changing the value of this property will turn the sidereal drive on and off. However, some telescopes may not support changing the value of this property and thus may not support turning tracking on and off. See the property.
    The current tracking rate of the telescope's sidereal drive If TrackingRate Write is not implemented. If an invalid drive rate is set.

    TrackingRate Read must be implemented and must not throw a PropertyNotImplementedException.

    TrackingRate Write can throw a PropertyNotImplementedException.

    Supported rates (one of the values) are contained within the collection. Values assigned to TrackingRate must be one of these supported rates. If an unsupported value is assigned to this property, it will raise an error. The currently selected tracking rate can be further adjusted via the and properties. These rate offsets are applied to the currently selected tracking rate. Mounts must start up with a known or default tracking rate, and this property must return that known/default tracking rate until changed. If the mount's current tracking rate cannot be determined (for example, it is a write-only property of the mount's protocol), it is permitted for the driver to force and report a default rate on connect. In this case, the preferred default is Sidereal rate. This is only available for telescope InterfaceVersions 2 and 3
    Returns a collection of supported values that describe the permissible values of the property for this telescope type.

    Must be implemented and must not throw a PropertyNotImplementedException.

    At a minimum, this must contain an item for . This is only available for telescope InterfaceVersions 2 and 3
    Takes telescope out of the Parked state. If the method is not implemented and is False The state of after unparking is undetermined. Valid only after . Applications must check and change Tracking as needed after unparking. Raises an error if unparking fails. Calling this with = False does nothing (harmless) The UTC date/time of the telescope's internal clock If UTCDate Write is not implemented. If an invalid is set. When UTCDate is read and the mount cannot provide this property itslef and a value has not yet be established by writing to the property.

    UTCDate Read must be implemented and must not throw a PropertyNotImplementedException.

    UTCDate Write can throw a PropertyNotImplementedException.

    The driver must calculate this from the system clock if the telescope has no accessible source of UTC time. In this case, the property must not be writeable (this would change the system clock!) and will instead raise an error. However, it is permitted to change the telescope's internal UTC clock if it is being used for this property. This allows clients to adjust the telescope's UTC clock as needed for accuracy. Reading the property will raise an error if the value has never been set or is otherwise unavailable.
    Returns a collection of supported DriveRate values that describe the permissible values of the TrackingRate property for this telescope type. Returns a specified item from the collection Number of the item to return A collection of supported DriveRate values that describe the permissible values of the TrackingRate property for this telescope type. Returns a collection of supported DriveRate values This is only used by telescope interface versions 2 and 3 Number of DriveRates supported by the Telescope Number of DriveRates supported by the Telescope Integer count Returns an enumerator for the collection An enumerator Disposes of the TrackingRates object ASCOM Video Camera supported frame rates. This is a video camera that supports variable frame rates. 25 frames per second (fps) corresponding to a PAL (colour) or CCIR (black and white) video standard. 29.97 frames per second (fps) corresponding to an NTSC (colour) or EIA (black and white) video standard. ASCOM Video Camera status values. Camera status running. The video is receiving signal and video frames are available for viewing or recording. Camera status recording. The video camera is recording video to the file system. Video frames are available for viewing. Camera status error. The video camera is in a state of an error and cannot continue its operation. Usually a reset will be required to resolve the error condition. Defines the IVideoFrame Interface. Returns a safearray of int32 containing the pixel values from the video frame. The array could be one of: ImageArray[Pixels], ImageArray[Height, Width], ImageArray[NumPlane, Pixels] or ImageArray[NumPlane, Height, Width].

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The application must inspect the Safearray parameters to determine the dimensions and also the to determine if the image is Color or not. The following table should be used to determine the format of the data:
    Dimensions SensorType Array Format
    1; int[] Monochrome, RGGB, CMYG, CMYG2, LRGB A row major ImageArray[Pixels] of * elements. The pixels in the array start from the top left part of the image and are listed by horizontal lines/rows. The second pixel in the array is the second pixel from the first horizontal row and the second last pixel in the array is the second last pixels from the last horizontal row.
    1; int[] Color

    Invalid configuration.

    2; int[,] Monochrome, RGGB, CMYG, CMYG2, LRGB ImageArray[Height, Width] of x elements.
    2; int[,] Color ImageArray[NumPlane, Pixels] of NumPlanes x * elements. The order of the three colour planes is first is R, the second is G and third is B. The pixels in second dimension of the array start from the top left part of the image and are listed by horizontal lines/rows. The second pixel is the second pixel from the first horizontal row and the second last pixel is the second last pixels from the last horizontal row.
    3; int[,,] Monochrome, RGGB, CMYG, CMYG2, LRGB

    Invalid configuration.

    3; int[,,] Color ImageArray[NumPlane, Height, Width] of NumPlanes x x elements. The order of the three colour planes is first is R, the second is G and third is B.
    In Color SensorType mode, if the application cannot handle multispectral images, it should use just the first plane.
    The image array.
    Returns a preview bitmap for the last video frame as an array of byte. The following code can be used to create a Bitmap from the returned byte array using (var memStr = new MemoryStream(frame.PreviewBitmap)) { bmp = (Bitmap)Image.FromStream(memStr); } Using memStr = New MemoryStream(frame.PreviewBitmap) bmp = DirectCast(Image.FromStream(memStr), Bitmap) End Using

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The application can use this bitmap to show a preview image of the last video frame when required. This is a convenience property for those applications that don't require to process the but usually only adjust the video camera settings and then record a video file. When a 24bit RGB image can be returned by the driver this should be the preferred format.
    The preview bitmap image.
    Returns the frame number.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The frame number of the first exposed frame may not be zero and is dependent on the device and/or the driver. The frame number increases with each acquired frame not with each requested frame by the client.
    The frame number of the current video frame.
    Returns the actual exposure duration in seconds (i.e. shutter open time). This may differ from the exposure time corresponding to the requested frame exposure due to shutter latency, camera timing precision, etc. The duration of the frame exposure. Must throw an exception if not implemented. Returns the actual exposure start time in the FITS-standard CCYY-MM-DDThh:mm:ss[.sss...] format, if supported. The frame exposure start time. Must throw an exception if not implemented. Returns additional information associated with the video frame as a list of named variables.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The returned object contains entries for each value. For each entry, the Key property is the value's name, and the Value property is the string value itself. This property must return an empty list if no video frame metadata is provided. The Keys is a single word, or multiple words joined by underscore characters, that sensibly describes the variable. It is recommended that Keys should be a maximum of 16 characters for legibility and all upper case. The KeyValuePair objects are instances of the KeyValuePair class
    An ArrayList of KeyValuePair objects.
    Defines the IVideo Interface. Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and model number. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 1 for this interface version. Must throw an exception if the call was not successful.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The short name of the driver, for display purposes. Must throw an exception if the call was not successful.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are supported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful. Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    May throw a MethodNotImplementedException if the device does not support any actions.

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of "General" will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    This method must return an empty arraylist if no actions are supported. This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. The name of the video capture device when such a device is used. Must throw an exception if not implemented. For analogue video this is usually the video capture card or dongle attached to the computer. Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The maximum supported exposure (integration time) in seconds.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure.
    The minimum supported exposure (integration time) in seconds.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure.
    The frame rate at which the camera is running.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Analogue cameras run in one of the two fixed frame rates - 25fps for PAL video and 29.97fps for NTSC video. Digital cameras usually can run at a variable frame rate. This value is for information purposes only and cannot be set. The FrameRate has the same value during the entire operation of the device. Changing the property may change the actual variable frame rate but cannot changethe return value of this property.
    Returns the list of integration rates supported by the video camera. Digital and integrating analogue video cameras allow the effective exposure of a frame to be changed. If the camera supports setting the exposure directly i.e. 2.153 sec then the driver must only return a range of useful supported exposures. For many video cameras the supported exposures (integration rates) increase by a factor of 2 from a base exposure e.g. 1, 2, 4, 8, 16 sec or 0.04, 0.08, 0.16, 0.32, 0.64, 1.28, 2.56, 5.12, 10.24 sec. If the camers supports only one exposure that cannot be changed (such as all non integrating PAL or NTSC video cameras) then this property must throw . The list of supported integration rates in seconds. Must throw exception if data unavailable. Must throw exception if camera supports only one integration rate (exposure) that cannot be changed. Index into the array for the selected camera integration rate. Integer index for the current camera integration rate in the string array. Index into the SupportedIntegrationRates array for the selected camera integration rate. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid. Must throw an exception if the camera supports only one integration rate (exposure) that cannot be changed. can be used to adjust the integration rate (exposure) of the camera, if supported. A 0-based array of strings - , which correspond to different discrete integration rate settings supported by the camera will be returned. must be set to an integer in this range. The driver must default to a valid value when integration rate is supported by the camera. Returns an with its property populated. The current video frame. Must throw exception if data unavailable. If called before any video frame has been taken.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Sensor name. The name of sensor used within the camera. Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw exception if not implemented. Returns the name (datasheet part number) of the sensor, e.g. ICX285AL. The format is to be exactly as shown on manufacturer data sheet, subject to the following rules. All letter shall be uppercase. Spaces shall not be included. Any extra suffixes that define region codes, package types, temperature range, coatings, grading, color/monochrome, etc. shall not be included. For color sensors, if a suffix differentiates different Bayer matrix encodings, it shall be included. Examples: ICX285AL-F shall be reported as ICX285 KAF-8300-AXC-CD-AA shall be reported as KAF-8300 Note: The most common usage of this property is to select approximate color balance parameters to be applied to the Bayer matrix of one-shot color sensors. Application authors should assume that an appropriate IR cutoff filter is in place for color sensors. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Type of colour information returned by the the camera sensor. The enum value of the camera sensor Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.)

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    returns a value indicating whether the sensor is monochrome, or what Bayer matrix it encodes. The following values are defined:
    Value Enumeration Meaning
    0 Monochrome Camera produces monochrome array with no Bayer encoding
    1 Colour Camera produces color image directly, requiring not Bayer decoding. The monochome pixels for the R, G and B channels are returned in this order in the .
    2 RGGB Camera produces RGGB encoded Bayer array images
    3 CMYG Camera produces CMYG encoded Bayer array images
    4 CMYG2 Camera produces CMYG2 encoded Bayer array images
    5 LRGB Camera produces Kodak TRUESENSE Bayer LRGB array images
    Please note that additional values may be defined in future updates of the standard, as new Bayer matrices may be created by sensor manufacturers in the future. If this occurs, then a new enumeration value shall be defined. The pre-existing enumeration values shall not change. In the following definitions, R = red, G = green, B = blue, C = cyan, M = magenta, Y = yellow. The Bayer matrix is defined with X increasing from left to right, and Y increasing from top to bottom. The pattern repeats every N x M pixels for the entire pixel array, where N is the height of the Bayer matrix, and M is the width. RGGB indicates the following matrix:
    X = 0 X = 1
    Y = 0 R G
    Y = 1 G B
    CMYG indicates the following matrix:
    X = 0 X = 1
    Y = 0 Y C
    Y = 1 G M
    CMYG2 indicates the following matrix:
    X = 0 X = 1
    Y = 0 C Y
    Y = 1 M G
    Y = 2 C Y
    Y = 3 G M
    LRGB indicates the following matrix (Kodak TRUESENSE):
    X = 0 X = 1 X = 2 X = 3
    Y = 0 L R L G
    Y = 1 R L G L
    Y = 2 L G L B
    Y = 3 G L B L
    It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model.
    Returns the width of the video frame in pixels. The video frame width. Must throw exception if the value is not known.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    For analogue video cameras working via a frame grabber the dimensions of the video frames may be different than the dimension of the CCD chip
    Returns the height of the video frame in pixels. The video frame height. Must throw exception if the value is not known.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    For analogue video cameras working via a frame grabber the dimensions of the video frames may be different than the dimension of the CCD chip
    Returns the width of the CCD chip pixels in microns. The pixel size X if known. Must throw exception if not implemented. Returns the height of the CCD chip pixels in microns. The pixel size Y if known. Must throw exception if not implemented. Reports the bit depth the camera can produce. The bit depth per pixel. Typical analogue videos are 8-bit while some digital cameras can provide 12, 14 or 16-bit images. Must throw exception if data unavailable.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Returns the video codec used to record the video file. Must throw exception if not implemented. For AVI files this is usually the FourCC identifier of the codec- e.g. XVID, DVSD, YUY2, HFYU etc. If the recorded video file doesn't use codecs an empty string must be returned. Returns the file format of the recorded video file, e.g. AVI, MPEG, ADV etc.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    The size of the video frame buffer. The size of the video frame buffer.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    When retrieving video frames using the property the driver may use a buffer to queue the frames waiting to be read by the client. This property returns the size of the buffer in frames or if no buffering is supported then the value of less than 2 should be returned. The size of the buffer can be controlled by the end user from the driver setup dialog.
    Starts recording a new video file. The file name requested by the client. Some systems may not allow the file name to be controlled directly and they should ignore this parameter. The actual file name of the file that is being recorded. Must throw exception if not implemented. Must throw exception if not connected. Must throw exception if the current camera state doesn't allow to begin recording a file. Must throw exception if there is any other problem as result of which the recording cannot begin. Stops the recording of a video file. Must throw exception if not implemented. Must throw exception if not connected. Must throw exception if the current camera state doesn't allow to stop recording the file or no file is currently being recorded. Must throw exception if there is any other problem as result of which the recording cannot stop. Returns the current camera operational state.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Returns one of the following status information: Value State Meaning 0 CameraRunning The camera is running and video frames are available for viewing and recording 1 CameraRecording The camera is running and recording a video 2 CameraError Camera error condition serious enough to prevent further operations (connection fail, etc.). CameraIdle and CameraBusy are optional states. Free running cameras cannot be stopped and don't have a CameraIdle state. When those cameras are powered they immediately enter CameraRunning state. Some digital cameras or vdeo systems may suport operations that take longer to complete. Whlie those longer operations are running the camera will remain in the state it was before the operation started. The video camera state diagram is shown below:
    The state of the camera. Must return an exception if the camera status is unavailable.
    Maximum value of . Short integer representing the maximum gain value supported by the camera. The maximum gain value that this camera supports Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if GainMax is not supported. When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Minimum value of . The minimum gain value that this camera supports Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if GainMin is not supported. When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Index into the array for the selected camera gain. Short integer index for the current camera gain in the string array. Index into the Gains array for the selected camera gain Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid. Must throw an exception if gain is not supported. can be used to adjust the gain setting of the camera, if supported. There are two typical usage scenarios:
    • Discrete gain video cameras will return a 0-based array of strings - , which correspond to different discrete gain settings supported by the camera. must be set to an integer in this range. and must thrown an exception if this mode is used.
    • Adjustable gain video cameras - and return integers, which specify the valid range for .
    The driver must default to a valid value.
    Gains supported by the camera. An ArrayList of gain names or values Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if Gains is not supported provides a 0-based array of available gain settings. Typically the application software will display the available gain settings in a drop list. The application will then supply the selected index to the driver via the property. The setting may alternatively be specified using integer values; if this mode is used then is invalid and must throw an exception. Please see and for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Maximum value of . Short integer representing the maximum gamma value supported by the camera. The maximum gain value that this camera supports Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if GammaMax is not supported When specifying the gamma setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Minimum value of . The minimum gamma value that this camera supports Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if GammaMin is not supported. When specifying the gamma setting with an integer value, is used in conjunction with to specify the range of valid settings. shall be greater than . If either is available, then both must be available. Please see for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Index into the array for the selected camera gamma. Short integer index for the current camera gamma in the string array. Index into the Gammas array for the selected camera gamma Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if not valid. Must throw an exception if Gamma is not supported. can be used to adjust the gamma setting of the camera, if supported. There are two typical usage scenarios:
    • Discrete gamma video cameras will return a 0-based array of strings - , which correspond to different discrete gamma settings supported by the camera. must be set to an integer in this range. and must thrown an exception if this mode is used.
    • Adjustable gain video cameras - and return integers, which specify the valid range for .
    The driver must default to a valid value.
    Gammas supported by the camera. An ArrayList of gamma names or values Must throw an exception if the information is not available. (Some drivers may require an active connection in order to retrieve necessary information from the camera.) Must throw an exception if Gammas is not supported provides a 0-based array of available gamma settings. This list can contain the widely used values of OFF, LO and HI that correspond to gammas of 1.00, 0.45 and 0.35 as well as other extended values. Typically the application software will display the available gamma settings in a drop list. The application will then supply the selected index to the driver via the property. The setting may alternatively be specified using integer values; if this mode is used then is invalid and must throw an exception. Please see and for more information. It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. Returns True if the driver supports custom device properties configuration via the method.

    Must be implemented, must not throw an ASCOM.PropertyNotImplementedException.

    Displays a device properties configuration dialog that allows the configuration of specialized settings. Must throw an exception if the camera is not connected. Must throw an exception if not implemented. The dialog could also provide buttons for cameras that can be controlled via 'on screen display' menues and a set of navigation buttons such as Up, Down, Left, Right and Enter. This dialog is not intended to be used in unattended mode but can give greater control over video cameras that provide special features. The dialog may also allow changing standard interface settings such as Gamma and Gain. If a client software displays any interface settings then it should take care to keep in sync the values changed by this method and those changed directly via the interface. To support automated and unattended control over the specialized device settings or functions available on this dialog the driver should also allow their control via . This dialog is meant to be used by the applications to allow the user to adjust specialized device settings when those applications don't specifically use the specialized settings in their functionality. Examples for specialized settings that could be supported are white balance and sharpness. Defines the ISafetyMonitor Interface Set True to connect to the device hardware. Set False to disconnect from the device hardware. You can also read the property to check whether it is connected. This reports the current hardware state. true if connected to the hardware; otherwise, false. Must throw an exception if the call was not successful

    Must be implemented

    Do not use a NotConnectedException here, that exception is for use in other methods that require a connection in order to succeed. The Connected property sets and reports the state of connection to the device hardware. For a hub this means that Connected will be true when the first driver connects and will only be set to false when all drivers have disconnected. A second driver may find that Connected is already true and setting Connected to false does not report Connected as false. This is not an error because the physical state is that the hardware connection is still true. Multiple calls setting Connected to true or false will not cause an error.
    Returns a description of the device, such as manufacturer and modelnumber. Any ASCII characters may be used. The description. If the device is not connected and this information is only available when connected. Must throw an exception if the call was not successful

    Must be implemented

    Descriptive and version information about this ASCOM driver. Must throw an exception if the call was not successful

    Must be implemented

    This string may contain line endings and may be hundreds to thousands of characters long. It is intended to display detailed information on the ASCOM driver, including version and copyright data. See the property for information on the device itself. To get the driver version in a parseable string, use the property.
    A string containing only the major and minor version of the driver. Must throw an exception if the call was not successful

    Must be implemented

    This must be in the form "n.n". It should not to be confused with the property, which is the version of this specification supported by the driver.
    The interface version number that this device supports. Should return 2 for this interface version. Must throw an exception if the call was not successful

    Must be implemented

    Clients can detect legacy V1 drivers by trying to read ths property. If the driver raises an error, it is a V1 driver. V1 did not specify this property. A driver may also return a value of 1. In other words, a raised error or a return value of 1 indicates that the driver is a V1 driver.
    The short name of the driver, for display purposes Must throw an exception if the call was not successful

    Must be implemented

    Launches a configuration dialog box for the driver. The call will not return until the user clicks OK or cancel manually. Must throw an exception if the call was not successful

    Must be implemented

    Invokes the specified device-specific action. A well known name agreed by interested parties that represents the action to be carried out. List of required parameters or an Empty String if none are required. A string response. The meaning of returned strings is set by the driver author. Throws this exception if no actions are suported. It is intended that the SupportedActions method will inform clients of driver capabilities, but the driver must still throw an ASCOM.ActionNotImplemented exception if it is asked to perform an action that it does not support. If the driver is not connected. Must throw an exception if the call was not successful Suppose filter wheels start to appear with automatic wheel changers; new actions could be “FilterWheel:QueryWheels” and “FilterWheel:SelectWheel”. The former returning a formatted list of wheel names and the second taking a wheel name and making the change, returning appropriate values to indicate success or failure.

    Can throw a not implemented exception

    This method is intended for use in all current and future device types and to avoid name clashes, management of action names is important from day 1. A two-part naming convention will be adopted - DeviceType:UniqueActionName where: DeviceType is the same value as would be used by e.g. Telescope, Camera, Switch etc. UniqueActionName is a single word, or multiple words joined by underscore characters, that sensibly describes the action to be performed. It is recommended that UniqueActionNames should be a maximum of 16 characters for legibility. Should the same function and UniqueActionName be supported by more than one type of device, the reserved DeviceType of “General” will be used. Action names will be case insensitive, so FilterWheel:SelectWheel, filterwheel:selectwheel and FILTERWHEEL:SELECTWHEEL will all refer to the same action. The names of all supported actions must be returned in the property.
    Returns the list of action names supported by this driver. An ArrayList of strings (SafeArray collection) containing the names of supported actions. Must throw an exception if the call was not successful

    Must be implemented

    This method must return an empty arraylist if no actions are supported. Please do not throw a . This is an aid to client authors and testers who would otherwise have to repeatedly poll the driver to determine its capabilities. Returned action names may be in mixed case to enhance presentation but will be recognised case insensitively in the Action method. An array list collection has been selected as the vehicle for action names in order to make it easier for clients to determine whether a particular action is supported. This is easily done through the Contains method. Since the collection is also ennumerable it is easy to use constructs such as For Each ... to operate on members without having to be concerned about hom many members are in the collection. Collections have been used in the Telescope specification for a number of years and are known to be compatible with COM. Within .NET the ArrayList is the correct implementation to use as the .NET Generic methods are not compatible with COM.
    Transmits an arbitrary string to the device and does not wait for a response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a boolean response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the interpreted boolean response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Transmits an arbitrary string to the device and waits for a string response. Optionally, protocol framing characters may be added to the string before transmission. The literal command string to be transmitted. if set to true the string is transmitted 'as-is'. If set to false then protocol framing characters may be added prior to transmission. Returns the string response received from the device. If the method is not implemented If the driver is not connected. Must throw an exception if the call was not successful

    Can throw a not implemented exception

    Dispose the late-bound interface, if needed. Will release it via COM if it is a COM object, else if native .NET will just dereference it for GC. Indicates whether the monitored state is safe for use. True if the state is safe, False if it is unsafe.

    Must be implemented and must not throw a PropertyNotImplementedException.