#ifndef TCSHardwareController_idl
#define TCSHardwareController_idl
//
// ALMA - Atacama Large Millimiter Array
// (c) Associated Universities Inc., 2010
//
// 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
//
//


#include <TCSControlDevice.idl>
#include <acscommon.idl>


#pragma prefix "astri"


module tcs
{
    interface TCSHardwareController: tcs::TCSControlDevice
    {
        /// This is the very simple state model for controllers.
        /// If something goes wrong with one of it's subdevices
        /// this will go into the degraded state until the subdevice is fixed.
        enum ControllerState
        {
            Shutdown,
            Operational,
            Degraded
        };

        /// Return the current state
        ControllerState getState();

        /// Put the controller into an Operational state.  This puts all
        /// subdevices into the operational state as well.
        void controllerOperational();

        /// Put the controller in the shutdown state.  All subdevices are put
        /// int the Stop state
        void controllerShutdown();

        /// This returns the referenece name of all subdevices in an Error
        /// state.
        //TCS::BadResourceSeq getBadSubdevices();
    };
};
#endif
