using ProjectManagementSystem.Device.Core;
using ProjectManagementSystem.Device.Extenions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProjectManagementSystem.Device.Command
{
    public class CommandRoller : IDeviceCommand
    {
        private byte[] buffer = new byte[40] { 0x50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x53 };
        public byte TargetID { get; set; }
        public byte Function { get; set; } = 0x11;
        public ushort Operate { get; set; } = 0x0150;
        public ushort ActionCode { get; set; }
        public byte[] Serialization()
        {
            var operateBytes = BitConverter.GetBytes(Operate);
            var actionBytes = BitConverter.GetBytes(ActionCode);

            buffer[0] = 0x50;
            buffer[1] = 0x01;//请求序号
            buffer[2] = 0x15;//本机ID
            buffer[3] = TargetID; //目标ID
            buffer[4] = Function;//功能码
            buffer[5] = 0x20;//数据长度
            buffer[6] = 0x00;//端口输出
            buffer[7] = 0x00;//端口输出
            buffer[8] = 0x00;//端口输出
            buffer[9] = 0x00;//端口输出
            buffer[10] = 0x00;//操作参数2
            buffer[11] = 0x00;//操作参数2
            buffer[12] = 0x00;//操作参数3
            buffer[13] = 0x00;//操作参数3
            buffer[14] = operateBytes[1];//操作码 高位
            buffer[15] = operateBytes[0];//操作码 低位
            buffer[16] = actionBytes[1];//操作内容 高位
            buffer[17] = actionBytes[0];//操作内容 低位
            buffer[18] = 0x01;//操作执行标志 0-停止 1-执行
            buffer[19] = 0x01;//操作中断标志 1-正常 2-暂停
            buffer[20] = 0x00;//备用
            buffer[21] = 0x00;//备用
                              //buffer[22] = 0x75;//滚筒超时
                              //buffer[23] = 0x30;//滚筒超时 1-30000单位0.1s （0对应PLC的默认值，>30000屏蔽）
                              //buffer[24] = 0x00;//滚筒速度
                              //buffer[25] = 0x32;//滚筒速度 0-不选择  全0则使用PLC默认值单位：r / min  0--60
            buffer[22] = 0x00;//滚筒超时
            buffer[23] = 0x00;//滚筒超时 1-30000单位0.1s （0对应PLC的默认值，>30000屏蔽）
            buffer[24] = 0x00;//滚筒速度
            buffer[25] = 0x00;//滚筒速度 0-不选择  全0则使用PLC默认值单位：r / min  0--60
            buffer[26] = 0x00;//备用
            buffer[27] = 0x00;//备用
            buffer[28] = 0x00;//备用
            buffer[29] = 0x00;//备用
            buffer[30] = 0x00;//备用
            buffer[31] = 0x00;//备用
            buffer[32] = 0x00;//备用
            buffer[33] = 0x00;//备用
            buffer[34] = 0x00;//备用
            buffer[35] = 0x00;//备用
            buffer[36] = 0x00;//备用
            buffer[37] = 0x00;//备用
            buffer[38] = buffer.XOR_Check(38);//异或

            return buffer;
        }
    }
}
