using Aitex.Core.RT.Device;
using Aitex.Core.Util;
using CyberX8_RT.Devices.AXIS;
using MECF.Framework.Common.Equipment;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Devices.SRD
{
    public class SRDDeviceTimer : BaseDevice, IDevice
    {
        #region 常量
        private const string SRD = "Srd";
        #endregion
        #region 内部变量
        private PeriodicJob _periodicJob;
        private JetAxisBase _srd1ArmAxis;
        private JetAxisBase _srd1RotationAxis;
        private JetAxisBase _srd2ArmAxis;
        private JetAxisBase _srd2RotationAxis;
        private SrdCommonDevice _srd1CommonDevice;
        private SrdCommonDevice _srd2CommonDevice;
        #endregion
        /// 
        /// 构造函数
        /// 
        public SRDDeviceTimer():base(SRD,SRD,SRD,SRD)
        {
            _periodicJob = new PeriodicJob(20, OnTimer, $"{SRD}.OnTimer", false);
        }
        /// 
        /// 初始化
        /// 
        /// 
        public bool Initialize()
        {
            _srd1ArmAxis=DEVICE.GetDevice($"{ModuleName.SRD1}.Arm");
            _srd1RotationAxis = DEVICE.GetDevice($"{ModuleName.SRD1}.Rotation");
            _srd2ArmAxis = DEVICE.GetDevice($"{ModuleName.SRD2}.Arm");
            _srd2RotationAxis = DEVICE.GetDevice($"{ModuleName.SRD2}.Rotation");
            _srd1CommonDevice = DEVICE.GetDevice($"{ModuleName.SRD1}.Common");
            _srd2CommonDevice = DEVICE.GetDevice($"{ModuleName.SRD2}.Common");
            _periodicJob.Start();
            return true;
        }
        public void Monitor()
        {
        }
        public void Reset()
        {
        }
        public void Terminate()
        {
            _periodicJob.Stop();
        }
        /// 
        /// 定时器执行
        /// 
        /// 
        private bool OnTimer()
        {
            if (_srd1ArmAxis != null)
            {
                _srd1ArmAxis.OnTimer();
            }
            if(_srd1RotationAxis!=null)
            {
                _srd1RotationAxis.OnTimer();
            }
            if (_srd2ArmAxis != null)
            {
                _srd2ArmAxis.OnTimer();
            }
            if (_srd2RotationAxis != null)
            {
                _srd2RotationAxis.OnTimer();
            }
            if(_srd1CommonDevice != null)
            {
                _srd1CommonDevice.OnTimer();
            }
            if (_srd2CommonDevice!=null)
            {
                _srd2CommonDevice.OnTimer();
            }
            return true;
        }
    }
}