wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/DAL/DriverLayer/Target.cs
New file
@@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.Text;
using HDL_ON.Entity;
namespace HDL_ON.DriverLayer
{
    /// <summary>
    /// 控制数据包头
    /// bus数据包头
    /// </summary>
    public class Target
    {
        /// <summary>
        /// 目标端口
        /// </summary>
        public System.Net.IPEndPoint IPEndPoint;
        /// <summary>
        /// 本机设备类型
        /// </summary>
        int deviceType = 58037;
        public Target()
        { }
        public Target(System.Net.IPEndPoint ipEndPoint)
        {
            this.IPEndPoint = ipEndPoint;
        }
        /// <summary>
        /// 附加数据
        /// </summary>
        public byte[] AddData;
        /// <summary>
        /// 目标子网号
        /// </summary>
        public byte SubnetID;
        /// <summary>
        /// 目标设备号
        /// </summary>
        public byte DeviceID;
        public byte[] GetGatewayIp_SendBytes;
        public byte [] SendBytes {
            get {
                if (2 + 9 + AddData.Length + 2 <= 81&&Command!=Command.SuperGatewayAgent) {
                    byte [] bytes = new byte [16 + 9 + AddData.Length + 2];
                    string [] ipAddress = "192.168.1.20".Split ('.');//new Net.NetWiFi().IpAddress.ToString().Split('.');
                    bytes [0] = byte.Parse (ipAddress [0]);
                    bytes [1] = byte.Parse (ipAddress [1]);
                    bytes [2] = byte.Parse (ipAddress [2]);
                    bytes [3] = byte.Parse (ipAddress [3]);
                    bytes [4] = (byte)'H';//H
                    bytes [5] = (byte)'D';//D
                    bytes [6] = (byte)'L';//L
                    bytes [7] = (byte)'M';//M
                    bytes [8] = (byte)'I';//I
                    bytes [9] = (byte)'R';//R
                    bytes [10] = (byte)'A';//A
                    bytes [11] = (byte)'C';//C
                    bytes [12] = (byte)'L';//L
                    bytes [13] = (byte)'E';//E
                    bytes [14] = 0xAA;
                    bytes [15] = 0xAA;
                    bytes [16] = (byte)(11 + AddData.Length);
                    bytes [17] = 0; //源子网号
                    bytes [18] = 252; //源设备号
                    bytes [19] = (byte)(deviceType/256);
                    bytes [20] = (byte)(deviceType%256);
                    bytes [21] = (byte)((int)this.Command / 256);
                    bytes [22] = (byte)((int)this.Command % 256);
                    bytes [23] = this.SubnetID;//目标子网号
                    bytes [24] = this.DeviceID;//目标设备号
                    Array.Copy (AddData, 0, bytes, 25, AddData.Length);
                    //CRC校验位
                    bytes [bytes.Length - 2] = 0;
                    bytes [bytes.Length - 1] = 0;
                    CRC.ConCRC (ref bytes, 16, bytes.Length - 2);
                    return bytes;
                } else {
                    byte [] bytes = new byte [16 + 9 + 2 + AddData.Length];
                    string [] ipAddress = "192.168.1.20".Split ('.');//new Net.NetWiFi().IpAddress.ToString().Split('.');
                    bytes [0] = byte.Parse (ipAddress [0]);
                    bytes [1] = byte.Parse (ipAddress [1]);
                    bytes [2] = byte.Parse (ipAddress [2]);
                    bytes [3] = byte.Parse (ipAddress [3]);
                    bytes [4] = (byte)'H';//H
                    bytes [5] = (byte)'D';//D
                    bytes [6] = (byte)'L';//L
                    bytes [7] = (byte)'M';//M
                    bytes [8] = (byte)'I';//I
                    bytes [9] = (byte)'R';//R
                    bytes [10] = (byte)'A';//A
                    bytes [11] = (byte)'C';//C
                    bytes [12] = (byte)'L';//L
                    bytes [13] = (byte)'E';//E
                    bytes [14] = 0xAA;
                    bytes [15] = 0xAA;
                    bytes [16] = 0xFF;//数据包长度
                    bytes [17] = 0;//源子网号
                    bytes [18] = 252;//源设备号
                    bytes [19] = (byte)(deviceType/256);
                    bytes [20] = (byte)(deviceType%256);
                    bytes [21] = (byte)((int)this.Command / 256);
                    bytes [22] = (byte)((int)this.Command % 256);
                    bytes [23] = this.SubnetID;
                    bytes [24] = this.DeviceID;
                    //
                    bytes [25] = (byte)(AddData.Length / 256);
                    //
                    bytes [26] = (byte)(AddData.Length % 256);
                    Array.Copy (AddData, 0, bytes, 27, AddData.Length);
                    return bytes;
                }
            }
        }
        /// <summary>
        /// 操作码
        /// </summary>
        public Command Command;
    }
}