using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace arDev
{
    public  partial class MasterK
    {
        public class DataEventArgs : EventArgs
        {
            private byte[] _buffer = null;
            /// 
            /// 바이트배열의 버퍼값
            /// 
            public byte[] Value { get { return _buffer; } }
            public eMsgType Direction { get; set; }
            /// 
            /// 버퍼(바이트배열)의 데이터를 문자로 반환합니다.
            /// 
            public string StrValue
            {
                get
                {
                    if (_buffer == null || _buffer.Length < 1) return string.Empty;
                    return System.Text.Encoding.Default.GetString(_buffer);
                }
            }
            public DataEventArgs(eMsgType dir_, byte[] buffer)
            {
                _buffer = buffer;
                Direction = dir_;
            }
        }
        public class MessageEventArgs : EventArgs
        {
            protected Boolean _isError = false;
            public Boolean IsError { get { return _isError; } }
            protected string _message = string.Empty;
            public string Message { get { return _message; } }
            public MessageEventArgs(Boolean isError, string Message)
            {
                _isError = isError;
                _message = Message;
            }
        }
        public class FrameEventArgs : EventArgs
        {
            public eOpCode OpCode { get; set; }
            public FrameEventArgs(eOpCode opCode_)
            {
                OpCode = opCode_;
            }
        }
        public class IOValueEventArgs : EventArgs
        {
            protected eIOPINDIR _direction;
            protected int _arridx;
            protected Boolean _oldvalue;
            protected Boolean _newvalue;
            public eIOPINDIR Direction { get { return _direction; } }
            public int ArrIDX { get { return _arridx; } }
            public Boolean OldValue { get { return _oldvalue; } }
            public Boolean NewValue { get { return _newvalue; } }
            public IOValueEventArgs(eIOPINDIR dir, int arridx, Boolean oldvalue, Boolean newvalue)
            {
                _direction = dir;
                _arridx = arridx;
                _oldvalue = oldvalue;
                _newvalue = newvalue;
            }
        }
        public class AIValueEventArgs : EventArgs
        {
            public float[] Value { get; protected set; }
            public AIValueEventArgs(float[] value_)
            {
                Value = value_;
            }
        }
        #region "Events"
        /// 
        /// 일반적인 메세지 혹은 오류메세지 이벤트
        /// 
        public event EventHandler Message;
        /// 
        /// 데이터메시이벤트 (Rx,Tx) 별로 구분됩니다.
        /// 
        public event EventHandler DataMessage;
        /// 
        /// 가공되어진 최종 메세지 형태값을 가지고 있습니다.
        /// 
        public event EventHandler ReceiveFrame;
        /// 
        /// ReadProcess에의해서 감시되며 포트의 상태값이 바뀐다면 발생함
        /// 
        public event EventHandler IOValueChanged;
        /// 
        /// AI의 값을 이벤트로 발생합니다.발생주기는 AIInterval을 참고합니다.
        /// 
        public event EventHandler AIValueChanged;
        /// 
        /// 오류발생시 메세지가 발생함
        /// 
        public event EventHandler IOErrorMessage;
        /// 
        /// anlog 관련한 오류 메세지
        /// 
        /// Analog Data Error Message
        public event EventHandler AIErrorMessage;
        #endregion
    }
}