#ifndef _ACSVLT_MOUNT_IDL_ #define _ACSVLT_MOUNT_IDL_ /******************************************************************************* * ALMA - Atacama Large Millimiter Array * * (c) European Southern Observatory, 2002 * Copyright by ESO (in the framework of the ALMA collaboration) * and Cosylab 2002, All rights reserved * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * "@(#) $Id: acsVltMount.idl,v 1.3 2004/01/30 16:17:20 dfugate Exp $" * * who when what * -------- -------- ---------------------------------------------- */ #include #include #include /* * This comes AFTER all includes */ #pragma prefix "alma" /** @file acsexmplMount.idl * IDL specification of Mount object for ACS-VLT integration example * * There are 3 different interfaces that show different "interpretations * of a simple telescope mount interface: * - Simple interface with properties and only Synchronous commands * - Also asynchronous commands * - Data published on Notification Channel */ module ACSVLT_MOUNT { /********************************************************************/ /** @interface Mount * A mount interface with properties. * With properties we can have monitors, alarms * and many additional features. * We need now to inherit from the more complex * ACS::CharacteristicComponent interface * For this example we have 2 read only and to read/write properties. */ interface Mount : ACS::CharacteristicComponent { /** * (Pre)sets a new non-moving position for the antenna. * The position coordinates are given in azimuth and elevation. * * @param az position azimuth (degree) * @param elev position elevation (degree) * @htmlonly *

* @endhtmlonly */ void objfix (in double az, in double elev); /** * Current commanded azimuth (degree). */ readonly attribute ACS::RWdouble cmdAz; /** * Current commanded elevation (degree). */ readonly attribute ACS::RWdouble cmdEl; /** * Current actual azimuth speed(degree.s-1). */ readonly attribute ACS::ROdouble actAzSpeed; /** * Current actual azimuth (degree). */ readonly attribute ACS::ROdouble actAz; /** * Current actual elevation (degree). */ readonly attribute ACS::ROdouble actEl; }; /********************************************************************/ /** @interface MountAsync * Defines the interface for controlling and monitoring the antenna position. * This interface also includes aynchronous methods. */ interface MountAsync : ACS::CharacteristicComponent { enum coordType { Mean, Apparent }; /** * (Pre)sets a new equatorial source for the antenna to track. * The source position is given in geocentric equatorial J2000 * coordinates. * Synchronous interface * * @param ra source right ascension (hour) * @param dec source declination (hour) * @param pmRa source sky proper motion in right ascension (arc-sec/year) * @param pmDec source sky proper motion in declination (arc-sec/year) * @param radVel source radial velocity (kilometer/sec) * @param par source parallax correction (arc-sec) * @param type Apparent or Mean * @htmlonly *

* @endhtmlonly */ void obstar (in double ra, in double dec, in double pmRa, in double pmDec, in double radVel, in double par, in coordType type); /** * (Pre)sets a new equatorial source for the antenna to track. * The source position is given in geocentric equatorial J2000 * coordinates. * Asynchronous interface * A callback is used to inform the caller when the * antenna reaches the new position. If a new position is given * before the previous one is reached then the previous callback * immediately receives "aborted". * * @param ra source right ascension (hour) * @param dec source declination (hour) * @param pmRa source sky proper motion in right ascension (arc-sec/year) * @param pmDec source sky proper motion in declination (arc-sec/year) * @param radVel source radial velocity (kilometer/sec) * @param par source parallax correction (arc-sec) * @param type Apparent or Mean * @param callBack callback when position is reached * @param desc is used to negotiate timeouts between client and sever * @htmlonly *

* @endhtmlonly */ void obstar_async (in double ra, in double dec, in double pmRa, in double pmDec, in double radVel, in double par, in coordType type, in ACS::CBvoid callBack, in ACS::CBDescIn desc); /** * (Pre)sets a new non-moving position for the antenna. * The position coordinates are given in azimuth and elevation. * Synchronous interface * * @param az position azimuth (degree) * @param elev position elevation (degree) * @htmlonly *

* @endhtmlonly */ void objfix (in double az, in double elev); /** * (Pre)sets a new non-moving position for the antenna. * The position coordinates are given in azimuth and elevation. * Asynchonous interface. * A callback is used to inform the caller when the antenna reaches the * new position. If a new position is given before the previous one is * reached then the previous callback immediately receives "aborted". * * @param az position azimuth (degree) * @param elev position elevation (degree) * @param callBack callback when position is reached * @param desc is used to negotiate timeouts between client and sever * @htmlonly *

* @endhtmlonly */ void objfix_async (in double az, in double elev, in ACS::CBvoid callBack, in ACS::CBDescIn desc); /** * Current commanded azimuth (degree). */ readonly attribute ACS::ROdouble cmdAz; /** * Current commanded elevation (degree). */ readonly attribute ACS::ROdouble cmdEl; /** * Current actual azimuth (degree). */ readonly attribute ACS::ROdouble actAz; /** * Current actual elevation (degree). */ readonly attribute ACS::ROdouble actEl; }; /********************************************************************/ /** @interface MountNotify * Nearly identical to Mount1 except for the fact that this example * publishes/consumes events from an event channel and that exception * handling has been ommitted. */ interface MountNotify : ACS::ACSComponent { /** * (Pre)sets a new non-moving position for the antenna. * The position coordinates are given in azimuth and elevation. * * @param az position azimuth (degree) * @param elev position elevation (degree) * @htmlonly *

* @endhtmlonly */ void objfix (in double az, in double elev); }; /** * The name of the event channel our interface implementation will * send events to. It is specified in the IDL instead of the implementation * language to make it harder for the developers of Consumer applications * to confuse names (i.e., using "MountChannel" instead of "mountchannel". */ const string MOUNT_CHANNEL = "mountchannel"; /** * This IDL structure defines an "event" type that will sent across the * network to any consumers subscribed to it. */ struct MountEventData { double Azimuth; double Elevation; }; /********************************************************************/ }; #endif