Beispiel #1
0
        /// <summary>
        /// Create packet from arguments
        /// </summary>
        /// <param name="address">Device address</param>
        /// <param name="command">Command</param>
        /// <param name="data">Data</param>
        /// <returns>Packet bytes</returns>
        private byte[] newPacket(int address, byte[] data)
        {
            string res = "";

            byte[] resByte = new byte[0];
            //if (address.Length > 0)                     // check correct address
            {
                ushort frameType = (ushort)(49152 + data.Length + 6);
                if (data.Length > 1626)
                {
                    return(new byte[0]);                         // check max. data length
                }
                ushort packetType = (ushort)(2432);

                byte[] array = BitConverter.GetBytes(address);

                ushort[] addr = ArrayConv.ToUShort(array);

                array = data; //Encoding.Default.GetBytes(data);
                Array.Reverse(array);
                ushort[] shortData = ArrayConv.ToUShort(array);


                List <ushort> items = new List <ushort>();
                items.Add(frameType);
                items.Add(packetType);
                items.Add(addr[1]);
                items.Add(addr[0]);
                for (int i = shortData.Length - 1; i >= 0; i--)
                {
                    items.Add(shortData[i]);
                }

                ushort crc = 0;
                for (int i = 0; i < items.Count; i++)
                {
                    crc ^= items[i];
                }
                items.Add(crc);

                res = "\\x";
                for (int i = 0; i < items.Count; i++)
                {
                    res += items[i].ToString("X4");
                }
                resByte = new byte[items.Count * 2];
                byte[] numberBytes;
                for (int i = 0; i < items.Count; i++)
                {
                    numberBytes = BitConverter.GetBytes(items[i]);
                    if (BitConverter.IsLittleEndian)
                    {
                        Array.Reverse(numberBytes);
                    }
                    for (int j = 0; j < numberBytes.Length; j++)
                    {
                        resByte[2 * i + j] = numberBytes[j];
                    }
                }
                //string hexData = data.ToCharArray()
                //ushort[] shortData = Conv.HexToUShorts(hexData);
            }
            return(resByte);
        }