using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Windows.Input;
using Aitex.Core.UI.MVVM;
using MECF.Framework.Common.CommonData;
namespace Aitex.Core.Common.DeviceData
{
    [DataContract]
    public enum ServoState
    {
         [EnumMember]
        Unknown,
         [EnumMember]
        NotInitial,
         [EnumMember]
        Idle,
         [EnumMember]
        Moving,
         [EnumMember]
        Error,
    }
    [DataContract]
    [Serializable]
    public class AITServoMotorData : NotifiableItem, IDeviceData
    {
        [DataMember]
        public string Module { get; set; }
        [DataMember]
        public string DeviceName { get; set; }
        /// 
        /// 显示在界面上的名称
        /// 
        [DataMember]
        public string DisplayName { get; set; }
        /// 
        /// IO 表中定义的物理编号,物理追溯使用 比如: V122
        /// 
        [DataMember]
        public string DeviceSchematicId { get; set; }
        [DataMember]
        public bool IsServoOn { get; set; }
        [DataMember]
        public bool IsStopped { get; set; }
        [DataMember]
        public bool IsError { get; set; }
        [DataMember]
        public bool IsRunning { get; set; }
        [DataMember]
        public bool IsEmo { get; set; }
        [DataMember]
        public bool IsAuto { get; set; }
        [DataMember]
        public bool IsManual { get; set; }
        [DataMember]
        public bool IsServoNormal { get; set; }
        [DataMember]
        public bool IsServoNoWarning { get; set; }
        [DataMember]
        public bool IsServoNoAlarm { get; set; }
        [DataMember]
        public bool IsNop { get; set; }
        [DataMember]
        public bool IsPositionComplete { get; set; }
        [DataMember]
        public bool IsNLimit { get; set; }
        [DataMember]
        public bool IsPLimit { get; set; }
        [DataMember]
        public int ErrorCode { get; set; }
        [DataMember]
        public float CurrentPosition { get; set; }
        [DataMember]
        public float CurrentSpeed { get; set; }
        [DataMember]
        public string CurrentStatus { get; set; }
        [DataMember]
        public double JogSpeedSetPoint { get; set; }
        [DataMember]
        public double AutoSpeedSetPoint { get; set; }
        [DataMember]
        public double AccSpeedSetPoint { get; set; }
        [DataMember]
        public ServoState State { get; set; }
        public AITServoMotorData()
        {
            DisplayName = "Undefined Servo Motor";
        }
        public void Update(IDeviceData data)
        {
        }
    }
    public class AITServoMotorOperation
    {
        public const string Home = "Home";
        public const string SetServoOn = "SetServoOn";
        public const string SetServoOff = "SetServoOff";
        public const string MoveTo = "MoveTo";
        public const string MoveBy = "MoveBy";
        public const string Reset = "Reset";
        public const string Stop = "Stop";
    }
    public class AITServoMotorProperty
    {
        public const string IsServoOn = "IsServoOn";
        public const string IsStopped = "IsStopped";
        public const string IsError = "IsError";
        public const string CurrentPosition = "CurrentPosition";
        public const string CurrentStatus = "CurrentStatus";
    }
}