using Aitex.Core.RT.Device;
using Aitex.Core.Util;
using CyberX8_RT.Devices.AXIS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Devices.Loader
{
    public class LoaderDeviceTimer : BaseDevice, IDevice
    {
        #region 内部变量
        private PeriodicJob _periodicJob;
        private JetAxisBase _shuttleAAxis;
        private JetAxisBase _shuttleBAxis;
        private JetAxisBase _crsAAxis;
        private JetAxisBase _crsBAxis;
        private JetAxisBase _tiltAAxis;
        private JetAxisBase _tiltBAxis;
        private JetAxisBase _rotationAxis;
        private LoaderCommonDevice _commonDevice;
        private LoaderSideDevice _sideADevice;
        private LoaderSideDevice _sideBDevice;
        #endregion
        /// 
        /// 构造函数
        /// 
        public LoaderDeviceTimer(string module) : base(module,module,module,module)
        {
            _periodicJob = new PeriodicJob(20, OnTimer, $"{module}.OnTimer", false);
        }
        /// 
        /// 初始化
        /// 
        /// 
        public bool Initialize()
        {
            _shuttleAAxis = DEVICE.GetDevice($"{Module}.ShuttleA");
            _shuttleBAxis = DEVICE.GetDevice($"{Module}.ShuttleB");
            _tiltAAxis = DEVICE.GetDevice($"{Module}.TiltA");
            _tiltBAxis = DEVICE.GetDevice($"{Module}.TiltB");
            _crsAAxis = DEVICE.GetDevice($"{Module}.LSA");
            _crsBAxis = DEVICE.GetDevice($"{Module}.LSB");
            _rotationAxis = DEVICE.GetDevice($"{Module}.Rotation");
            _commonDevice = DEVICE.GetDevice($"{Module}.Common");
            _sideADevice = DEVICE.GetDevice($"{Module}.SideA");
            _sideBDevice = DEVICE.GetDevice($"{Module}.SideB");
            _periodicJob.Start();
            return true;
        }
        public void Monitor()
        {
        }
        public void Reset()
        {
        }
        public void Terminate()
        {
            _periodicJob.Stop();
        }
        /// 
        /// 定时器执行
        /// 
        /// 
        private bool OnTimer()
        {
            _shuttleAAxis.OnTimer();
            _shuttleBAxis.OnTimer();
            _crsAAxis.OnTimer();
            _crsBAxis.OnTimer();
            _tiltAAxis.OnTimer();
            _tiltBAxis.OnTimer();
            _rotationAxis.OnTimer();
            _commonDevice.OnTimer();
            _sideADevice.OnTimer();
            _sideBDevice.OnTimer();
            return true;
        }
    }
}