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.PUF
{
    public class PufDeviceTimer : BaseDevice, IDevice
    {
        #region 内部变量
        private PeriodicJob _periodicJob;
        private JetAxisBase _puf1FlipAxis;
        private JetAxisBase _puf1RotationAxis;
        private PufVacuum _pufVacuum;
        #endregion
        /// <summary>
        /// 构造函数
        /// </summary>
        public PufDeviceTimer():base("DualPuf", "DualPuf", "DualPuf", "DualPuf")
        {
            _periodicJob = new PeriodicJob(20, OnTimer, "DualPuf.OnTimer", false);
        }
        /// <summary>
        /// 初始化
        /// </summary>
        /// <returns></returns>
        public bool Initialize()
        {
            _puf1FlipAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF1}.Flip");
            _puf1RotationAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF1}.Rotation");
            _pufVacuum = DEVICE.GetDevice<PufVacuum>($"{ModuleName.PUF1}.Vacuum");
            _periodicJob.Start();
            return true;
        }

        public void Monitor()
        {
        }

        public void Reset()
        {

        }
        /// <summary>
        /// 停止
        /// </summary>
        public void Terminate()
        {
            _periodicJob.Stop();
        }

        /// <summary>
        /// 定时器执行
        /// </summary>
        /// <returns></returns>
        private bool OnTimer()
        {
            if (_puf1FlipAxis != null)
            {
                _puf1FlipAxis.OnTimer();
            }
            if (_puf1RotationAxis != null)
            {
                _puf1RotationAxis.OnTimer();
            }
            if (_pufVacuum != null)
            {
                _pufVacuum.OnTimer();
            }
            return true;
        }
    }
}