/// <summary>
 /// Create from an input byte array from the power line modem.
 /// </summary>
 /// <param name="data">The input data</param>
 public InsteonPacket(byte[] data)
 {
     FromAddress = new DeviceId(data[0], data[1], data[2]);
     ToAddress   = new DeviceId(data[3], data[4], data[5]);
     Flags       = new InsteonFlags();
     Flags.FromByte(data[6]);
     Command1 = data[7];
     Command2 = data[8];
     UserData = new byte[data.Length - 9];
     Array.Copy(data, 9, UserData, 0, data.Length - 9);
 }
 /// <summary>
 /// Create a new standard length command.
 /// </summary>
 /// <param name="id">id to sent to</param>
 /// <param name="cmd">cmd1 bit</param>
 /// <param name="cmd2">cmd2 bit</param>
 public InsteonPacket(DeviceId id, Command cmd, byte cmd2)
 {
     Command1          = (byte)cmd;
     Command2          = cmd2;
     FromAddress       = id;
     ToAddress         = id;
     flags             = new InsteonFlags();
     flags.MessageType = InsteonFlags.MessageTypeEnum.Direct;
     flags.MaxHops     = 0x3;
     flags.HopsLeft    = 0x3;
 }
 /// <summary>
 /// Create from an input byte array from the power line modem.
 /// </summary>
 /// <param name="data">The input data</param>
 public InsteonPacket(byte[] data)
 {
     FromAddress = new DeviceId(data[0], data[1], data[2]);
     ToAddress = new DeviceId(data[3], data[4], data[5]);
     Flags = new InsteonFlags();
     Flags.FromByte(data[6]);
     Command1 = data[7];
     Command2 = data[8];
     UserData = new byte[data.Length - 9];
     Array.Copy(data, 9, UserData, 0, data.Length - 9);
 }
 /// <summary>
 /// Create a new standard length command.
 /// </summary>
 /// <param name="id">id to sent to</param>
 /// <param name="cmd">cmd1 bit</param>
 /// <param name="cmd2">cmd2 bit</param>
 public InsteonPacket(DeviceId id, Command cmd, byte cmd2)
 {
     Command1 = (byte)cmd;
     Command2 = cmd2;
     FromAddress = id;
     ToAddress = id;
     flags = new InsteonFlags();
     flags.MessageType = InsteonFlags.MessageTypeEnum.Direct;
     flags.MaxHops = 0x3;
     flags.HopsLeft = 0x3;
 }
 /// <summary>
 /// Creates an insteon packet with an extended command.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="cmd"></param>
 public InsteonPacket(DeviceId id, ExtendedCommand cmd, byte cmd2, byte[] data)
 {
     Command1              = (byte)((int)cmd >> 8);
     Command2              = (byte)(((int)cmd & 0xff) | cmd2);
     UserData              = data;
     FromAddress           = id;
     ToAddress             = id;
     flags                 = new InsteonFlags();
     flags.MessageType     = InsteonFlags.MessageTypeEnum.Direct;
     flags.ExtendedMessage = true;
     flags.MaxHops         = 0x3;
     flags.HopsLeft        = 0x3;
 }
 /// <summary>
 /// Creates an insteon packet with an extended command.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="cmd"></param>
 public InsteonPacket(DeviceId id, ExtendedCommand cmd, byte cmd2, byte[] data)
 {
     Command1 = (byte)((int)cmd >> 8);
     Command2 = (byte)(((int)cmd & 0xff) | cmd2);
     UserData = data;
     FromAddress = id;
     ToAddress = id;
     flags = new InsteonFlags();
     flags.MessageType = InsteonFlags.MessageTypeEnum.Direct;
     flags.ExtendedMessage = true;
     flags.MaxHops = 0x3;
     flags.HopsLeft = 0x3;
 }