using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZEISS.MTB.Api;

namespace ZeissMicroscopeAPI
{
    public interface IMicController
    {
        double GetMaxMoveSpeed      (IMicroscope Manager                    );
        double GetMinMoveSpeed      (IMicroscope Manager                    );
        string GetSpeedUnit         (IMicroscope Manager,int index          );
        int GetSpeedUnitCount       (IMicroscope Manager                    );
        int Move                   (IMicroscope Manager, double moveSpeed  );
        int Stop                   (IMicroscope Manager                    );
        double  GetContinualAcceleration            (IMicroscope Manager                                    );
        string  GetContinualAccelerationUnit        (IMicroscope Manager, int index                         );
        int     GetContinualAccelerationUnitCount   (IMicroscope Manager                                    );
        double  GetContinualSpeed                   (IMicroscope Manager                                    );
        string  GetContinualSpeedUnit               (IMicroscope Manager, int index                         );
        int     GetContinualSpeedUnitCount          (IMicroscope Manager                                    );
        double  GetContinualStartSpeed              (IMicroscope Manager                                    );
        string  GetContinualStartSpeedUnit          (IMicroscope Manager, int index                         );
        int     GetContinualStartSpeedUnitCount     (IMicroscope Manager                                    );
        double  GetMaxContinualAcceleration         (IMicroscope Manager                                    );
        double  GetMaxContinualSpeed                (IMicroscope Manager                                    );
        double  GetMaxContinualStartSpeed           (IMicroscope Manager                                    );
        double  GetMinContinualAcceleration         (IMicroscope Manager                                    );
        double  GetMinContinualSpeed                (IMicroscope Manager                                    );
        double  GetMinContinualStartSpeed           (IMicroscope Manager                                    );
        int     SetContinualAcceleration            (IMicroscope Manager, double continualAcceleration      );
        int     SetContinualSpeed                   (IMicroscope Manager, double continualSpeed             );
        int     SetContinualStartSpeed              (IMicroscope Manager, double continualSpeed             );
        int             IsOnHWLimit                  (IMicroscope Manager                                                               );
        double          AlignPosition                (IMicroscope Manager, double position                                              );
        double          GetMaxPosition               (IMicroscope Manager                                                               );
        double          GetMinPosition               (IMicroscope Manager                                                               );
        double          GetPosition                  (IMicroscope Manager                                                               );
        string          GetPositionUnit              (IMicroscope Manager, int index                                                    );
        int             GetPositionUnitCount         (IMicroscope Manager                                                               );
        double          GetTargetPosition            (IMicroscope Manager                                                               );
        double          MaxDeviation                 (IMicroscope Manager                                                               );
        int             SetPosition                  (IMicroscope Manager, double   position    , int mode                              );
        int             SetPosition                  (IMicroscope Manager, double   position    , int mode      , int timeout           );
        double          StepWidth                    (IMicroscope Manager                                                               );
        double          TypicalDeviation             (IMicroscope Manager                                                               );
        int             HasOnOff                    (IMicroscope Manager                                                                );
        int             HasLoadWork                 (IMicroscope Manager                                                                );
        int             HasSWLimit                  (IMicroscope Manager                                                                );
        int             IsOnSWLimit                 (IMicroscope Manager                                                                );
        int             CoordinateDirection         (IMicroscope Manager                                                                );
        int             ClosedLoop                  (IMicroscope Manager                                                                );
        int             HasHandwheelOnOff           (IMicroscope Manager                                                                );
        int             Calibrate                   (IMicroscope Manager, int       calMode     , int cmdMode                           );
        int             Calibrate                   (IMicroscope Manager, int       calMode     , int cmdMode   , int timeout           );
        int             EnableSWLimit               (IMicroscope Manager, bool      upper       , bool enable                           );
        int             GetHandwheelOnOff           (IMicroscope Manager                                                                );
        double          GetMeasurementOrigin        (IMicroscope Manager                                                                );
        double          GetMeasurementPosition      (IMicroscope Manager                                                                );
        int             GetOnOff                    (IMicroscope Manager                                                                );
        double          GetSWLimit                  (IMicroscope Manager, bool      upper                                               );
        int             IsSWLimitEnabled            (IMicroscope Manager, bool      upper                                               );
        int             SetHandwheelOnOff           (IMicroscope Manager, bool      onOff                                               );
        int             SetMeasurementOrigin        (IMicroscope Manager, double    origin                                              );
        int             SetMeasurementPosition      (IMicroscope Manager, double    position                                            );
        int             SetOnOff                    (IMicroscope Manager, bool      onOff                                               );
        int             SetSWLimit                  (IMicroscope Manager, bool      upper       , double limit                          );
        int             ZDriverIsMonitoring                   (IMicroscope Manager                );
        int             ZDriverIsLocked                       (IMicroscope Manager                );
        int             ZDriverIsBusy                         (IMicroscope Manager                );
        int             ZDriverHasMonitoring                  (IMicroscope Manager                );
        int             ZDriverIsLockedForClient              (IMicroscope Manager                );
        int             ZDriverIsMonitoringForClient          (IMicroscope Manager                );
        int             ZDriverLock                           (IMicroscope Manager                );
        int             ZDriverStartMonitoring                (IMicroscope Manager                );
        int             ZDriverStopMonitoring                 (IMicroscope Manager                );
        int             ZDriverUnlock                         (IMicroscope Manager                );
        int             ZDriverWaitReady                      (IMicroscope Manager, int timeout   );

        int             ObjectiveIsMonitoring                   (IMicroscope Manager                );
        int             ObjectiveIsLocked                       (IMicroscope Manager                );
        int             ObjectiveIsBusy                         (IMicroscope Manager                );
        int             ObjectiveHasMonitoring                  (IMicroscope Manager                );
        int             ObjectiveIsLockedForClient              (IMicroscope Manager                );
        int             ObjectiveIsMonitoringForClient          (IMicroscope Manager                );
        int             ObjectiveLock                           (IMicroscope Manager                );
        int             ObjectiveStartMonitoring                (IMicroscope Manager                );
        int             ObjectiveStopMonitoring                 (IMicroscope Manager                );
        int             ObjectiveUnlock                         (IMicroscope Manager                );
        int             ObjectiveWaitReady                      (IMicroscope Manager, int timeout   );
        int             ObjectiveAbsPosition                    (IMicroscope Manager                                        );      
        int             ObjectiveMinPosition                    (IMicroscope Manager                                        );     
        int             ObjectiveMaxPosition                    (IMicroscope Manager                                        );
        int             ObjectiveSetPosition                    (IMicroscope Manager, int position, int mode, int timeout   );
        int             ObjectiveSetPosition                    (IMicroscope Manager, int position, int mode                );

        int     LampType                    (IMicroscope Manager                                                        );
        int     LampIsActive                (IMicroscope Manager                                                        );
        int     LampLightPathLocation       (IMicroscope Manager                                                        );
        int     LampHasRemote               (IMicroscope Manager                                                        );
        int     LampHasOnOff                (IMicroscope Manager                                                        );
        int     LampHas3200K                (IMicroscope Manager                                                        );
        int     LampGet3200K                (IMicroscope Manager                                                        );
        int     LampGetOnOff                (IMicroscope Manager                                                        );
        int     LampGetRemote               (IMicroscope Manager                                                        );
        int     LampSetRemote               (IMicroscope Manager , bool     onOff                                       );
        int     LampSet3200K                (IMicroscope Manager , bool     onOff       , int mode                      );
        int     LampSetOnOff                (IMicroscope Manager , bool     onOff       , int mode                      );
        int     LampSet3200K                (IMicroscope Manager , bool     onOff       , int mode      , int timeout   );
        int     LampSetOnOff                (IMicroscope Manager , bool     onOff       , int mode      , int timeout   );
        int     LampIsOnHWLimit             (IMicroscope Manager                                                        );
        double  LampGetMaxPosition          (IMicroscope Manager                                                        );
        double  LampGetMinPosition          (IMicroscope Manager                                                        );
        double  LampGetPosition             (IMicroscope Manager                                                        );
        int     LampGetPositionUnitCount    (IMicroscope Manager                                                        );
        double  LampGetTargetPosition       (IMicroscope Manager                                                        );
        double  LampMaxDeviation            (IMicroscope Manager                                                        );
        double  LampStepWidth               (IMicroscope Manager                                                        );
        double  LampTypicalDeviation        (IMicroscope Manager                                                        );
        string  LampGetPositionUnit         (IMicroscope Manager , int      index                                       );
        int     LampSetPosition             (IMicroscope Manager , double   position    , int mode                      );
        int     LampSetPosition             (IMicroscope Manager , double   position    , int mode      , int timeout   );
        int     LampIsMonitoring            (IMicroscope Manager                                                        );
        int     LampIsLocked                (IMicroscope Manager                                                        );
        int     LampIsBusy                  (IMicroscope Manager                                                        );
        int     LampHasMonitoring           (IMicroscope Manager                                                        );
        int     LampIsLockedForClient       (IMicroscope Manager                                                        );
        int     LampIsMonitoringForClient   (IMicroscope Manager                                                        );
        int     LampLock                    (IMicroscope Manager                                                        );
        int     LampStartMonitoring         (IMicroscope Manager                                                        );
        int     LampStopMonitoring          (IMicroscope Manager                                                        );
        int     LampUnlock                  (IMicroscope Manager                                                        );
        int     LampWaitReady               (IMicroscope Manager, int timeout                                           );
        int     SetLampILTLSwitch           (IMicroscope Manager, bool enable, int mode                                 );
        int     GetLampILTLSwitch           (IMicroscope Manager                                                        );
        double  ApblGetMaxMoveSpeed     (IMicroscope Manager                                                                            );
        double  ApblGetMinMoveSpeed     (IMicroscope Manager                                                                            );
        int     ApblGetSpeedUnitCount   (IMicroscope Manager                                                                            );
        int     ApblStop                (IMicroscope Manager                                                                            );
        int     ApblIsOnHWLimit         (IMicroscope Manager                                                                            );
        double  ApblGetMaxPosition      (IMicroscope Manager                                                                            );
        double  ApblGetMinPosition      (IMicroscope Manager                                                                            );
        double  ApblGetPosition         (IMicroscope Manager                                                                            );
        int     ApblGetPositionUnitCount(IMicroscope Manager                                                                            );
        double  ApblGetTargetPosition   (IMicroscope Manager                                                                            );
        double  ApblMaxDeviation        (IMicroscope Manager                                                                            );
        double  ApblStepWidth           (IMicroscope Manager                                                                            );
        double  ApblTypicalDeviation    (IMicroscope Manager                                                                            );
        string  ApblGetSpeedUnit        (IMicroscope Manager                    , int       index                                       );
        string  ApblGetPositionUnit     (IMicroscope Manager                    , int       index                                       );
        int     ApblMove                (IMicroscope Manager                    , double    moveSpeed                                   );
        double  ApblAlignPosition       (IMicroscope Manager                    , double    position                                    );
        int     ApblSetPosition         (IMicroscope Manager                    , double    position    , int mode      , int timeout   );
        int     ApblSetPosition         (IMicroscope Manager                    , double    position    , int mode                      );
        int     ApblIsMonitoring            (IMicroscope Manager                                                        );
        int     ApblIsLocked                (IMicroscope Manager                                                        );
        int     ApblIsBusy                  (IMicroscope Manager                                                        );
        int     ApblHasMonitoring           (IMicroscope Manager                                                        );
        int     ApblIsLockedForClient       (IMicroscope Manager                                                        );
        int     ApblIsMonitoringForClient   (IMicroscope Manager                                                        );
        int     ApblLock                    (IMicroscope Manager                                                        );
        int     ApblStartMonitoring         (IMicroscope Manager                                                        );
        int     ApblStopMonitoring          (IMicroscope Manager                                                        );
        int     ApblUnlock                  (IMicroscope Manager                                                        );
        int     ApblWaitReady               (IMicroscope Manager, int timeout                                           );
    }
}
