/// <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); }