/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command sent/received</param> /// <param name="Brightness">Brightness, range 0-100%</param> /// <param name="data1">Extended data byte 1, range 0-255</param> /// <param name="data2">Extended data byte 2, range 0-255</param> /// <param name="ResultCode">Resultcode of X10 commands send, 0 if success, 1 if failure.</param> public X10EventArgs(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2, int ResultCode) { mDevices = Devices; mX10Command = X10Command; mBrightness = Brightness; mData1 = data1; mData2 = data2; mResultCode = ResultCode; }
private void AsyncSendX10(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2) { X10Message x10c = new X10Message(Devices, X10Command, Brightness, data1, data2); lock (arX10ToSend.SyncRoot) { arX10ToSend.Add(x10c); } RunSendX10(); }
private string X10Enum2String(X10_COMMANDS cmd) { string command; switch ((X10_COMMANDS)cmd) { case X10_COMMANDS.ALL_LIGHTS_OFF: command = "ALL_LIGHTS_OFF"; break; case X10_COMMANDS.ALL_LIGHTS_ON: command = "ALL_LIGHTS_ON"; break; case X10_COMMANDS.ON: command = "ON"; break; case X10_COMMANDS.OFF: command = "OFF"; break; case X10_COMMANDS.DIM: command = "DIM"; break; case X10_COMMANDS.BRIGHT: command = "BRIGHT"; break; case X10_COMMANDS.ALL_UNITS_OFF: command = "ALL_UNITS_OFF"; break; case X10_COMMANDS.EXTENDED: command = "EXTENDED"; break; case X10_COMMANDS.HAIL_REQ: command = "HAIL_REQ"; break; case X10_COMMANDS.HAIL_ACK: command = "HAIL_ACK"; break; case X10_COMMANDS.PRESET_DIM1: command = "PREDIM1"; break; case X10_COMMANDS.PRESET_DIM2: command = "PREDIM2"; break; case X10_COMMANDS.EXTENDED_DATA: command = "EXTENDED_DATA"; break; case X10_COMMANDS.STATUS_ON: command = "STATUS_ON"; break; case X10_COMMANDS.STATUS_OFF: command = "STATUS_OFF"; break; case X10_COMMANDS.STATUS_REQUEST: command = "STATUS"; break; default: command = "unknown"; break; } return(command); }
/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> /// <param name="Brightness">Brightness, range 0-100%</param> /// <param name="data1">Extended data byte 1, range 0-255</param> /// <param name="data2">Extended data byte 2, range 0-255</param> public X10Message(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2) { mDevices0 = Devices; mHouseCode = Convert.ToChar(Devices.Substring(0, 1).ToUpper()); string[] tmp = Devices.Substring(1).ToUpper().Split(','); mDevices = new byte[tmp.Length]; for (int i = 0; i < tmp.Length; i++) { mDevices[i] = Convert.ToByte(tmp[i]); } mX10Command = X10Command; mBrightness = (byte)Math.Floor((int)Brightness * 0.22); mBrightness100 = Brightness; mData1 = data1; mData2 = data2; mInRetryCount = 0; mInCollision = false; }
/// <summary>Enqueues an X10 command for transmission</summary> /// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> /// <param name="data1">Extended data byte 1, range 0-255</param> /// <param name="data2">Extended data byte 2, range 0-255</param> public void AsyncSendX10(string Devices, X10_COMMANDS X10Command, byte data1, byte data2) { AsyncSendX10(Devices, X10Command, 0, data1, data2); }
/// <summary>Enqueues an X10 command for transmission</summary> /// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> /// <param name="Brightness">Brightness, range 0-100%</param> public void AsyncSendX10(string Devices, X10_COMMANDS X10Command, byte Brightness) { AsyncSendX10(Devices, X10Command, Brightness, 0, 0); }
/// <summary>Enqueues an X10 command for transmission</summary> /// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> public void AsyncSendX10(string Devices, X10_COMMANDS X10Command) { AsyncSendX10(Devices, X10Command, 0, 0, 0); }
/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> /// <param name="Brightness">Brightness, range 0-100%</param> public X10Message(string Devices, X10_COMMANDS X10Command, byte Brightness) : this(Devices, X10Command, Brightness, 0, 0) { }
/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command sent/received</param> /// <param name="Brightness">Brightness, range 0-100%</param> /// <param name="data1">Extended data byte 1, range 0-255</param> /// <param name="data2">Extended data byte 2, range 0-255</param> public X10EventArgs(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2) : this(Devices, X10Command, Brightness, data1, data2, 0) { }
/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> /// <param name="Brightness">Brightness, range 0-100%</param> /// <param name="data1">Extended data byte 1, range 0-255</param> /// <param name="data2">Extended data byte 2, range 0-255</param> public X10Message(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2) { mDevices0 = Devices; mHouseCode = Convert.ToChar(Devices.Substring(0,1).ToUpper()); string[] tmp = Devices.Substring(1).ToUpper().Split(','); mDevices = new byte[tmp.Length]; for (int i=0; i<tmp.Length; i++) mDevices[i] = Convert.ToByte(tmp[i]); mX10Command = X10Command; mBrightness = (byte) Math.Floor((int)Brightness * 0.22); mBrightness100 = Brightness; mData1 = data1; mData2 = data2; mInRetryCount = 0; mInCollision = false; }
/// <param name="Devices">A string starting with a housecode, followed by a comma separated list of /// device numbers. Eg. "A1,2,3" represents a command to be sent to devices A1, A2 and A3. Only 1 /// housecode per command is supported.</param> /// <param name="X10Command">X10 command to be sent</param> public X10Message(string Devices, X10_COMMANDS X10Command) : this(Devices, X10Command, 0, 0, 0) { }
private void AsyncSendX10(string Devices, X10_COMMANDS X10Command, byte Brightness, byte data1, byte data2) { X10Message x10c = new X10Message(Devices, X10Command, Brightness, data1, data2); lock(arX10ToSend.SyncRoot) { arX10ToSend.Add(x10c); } RunSendX10(); }
private string X10Enum2String(X10_COMMANDS cmd) { string command; switch ((X10_COMMANDS) cmd) { case X10_COMMANDS.ALL_LIGHTS_OFF: command = "ALL_LIGHTS_OFF"; break; case X10_COMMANDS.ALL_LIGHTS_ON: command = "ALL_LIGHTS_ON"; break; case X10_COMMANDS.ON: command = "ON"; break; case X10_COMMANDS.OFF: command = "OFF"; break; case X10_COMMANDS.DIM: command = "DIM"; break; case X10_COMMANDS.BRIGHT: command = "BRIGHT"; break; case X10_COMMANDS.ALL_UNITS_OFF: command = "ALL_UNITS_OFF"; break; case X10_COMMANDS.EXTENDED: command = "EXTENDED"; break; case X10_COMMANDS.HAIL_REQ: command = "HAIL_REQ"; break; case X10_COMMANDS.HAIL_ACK: command = "HAIL_ACK"; break; case X10_COMMANDS.PRESET_DIM1: command = "PREDIM1"; break; case X10_COMMANDS.PRESET_DIM2: command = "PREDIM2"; break; case X10_COMMANDS.EXTENDED_DATA: command = "EXTENDED_DATA"; break; case X10_COMMANDS.STATUS_ON: command = "STATUS_ON"; break; case X10_COMMANDS.STATUS_OFF: command = "STATUS_OFF"; break; case X10_COMMANDS.STATUS_REQUEST: command = "STATUS"; break; default: command = "unknown"; break; } return command; }
private void xL_XplMessageReceived(object sender, xPLDevice.xPLEventArgs e) { try { if (e.XplMsg.MsgType == xPL_Base.xPLMessageTypeEnum.Command) // only act on CMD, no longer on TRIG { X10_COMMANDS command = 0; string scmd = e.XplMsg.KeyValueList["command"].ToUpper(); switch (scmd) { case "ALL_LIGHTS_OFF": command = X10_COMMANDS.ALL_LIGHTS_OFF; break; case "ALL_LIGHTS_ON": command = X10_COMMANDS.ALL_LIGHTS_ON; break; case "ON": command = X10_COMMANDS.ON; break; case "OFF": command = X10_COMMANDS.OFF; break; case "DIM": command = X10_COMMANDS.DIM; break; case "BRIGHT": command = X10_COMMANDS.BRIGHT; break; case "ALL_UNITS_OFF": command = X10_COMMANDS.ALL_UNITS_OFF; break; case "EXTENDED": command = X10_COMMANDS.EXTENDED; break; case "HAIL_REQ": command = X10_COMMANDS.HAIL_REQ; break; case "HAIL_ACK": command = X10_COMMANDS.HAIL_ACK; break; case "PREDIM1": command = X10_COMMANDS.PRESET_DIM1; break; case "PREDIM2": command = X10_COMMANDS.PRESET_DIM2; break; case "EXTENDED_DATA": command = X10_COMMANDS.EXTENDED_DATA; break; case "STATUS_ON": command = X10_COMMANDS.STATUS_ON; break; case "STATUS_OFF": command = X10_COMMANDS.STATUS_OFF; break; case "STATUS": command = X10_COMMANDS.STATUS_REQUEST; break; default: throw new Exception("Unknown x10 command received: " + scmd); } string alldevices = e.XplMsg.KeyValueList["device"]; if (alldevices.Length < 2) { throw new Exception("Invalid device(s): " + alldevices); } string[] ardev = alldevices.ToUpper().Split(','); int i = 0; //verify device addresses while (i < ardev.Length) { if (ardev[i].Length < 2 || ardev[i].Length > 3) { throw new Exception("Invalid device: " + ardev[i]); } if (Convert.ToChar(ardev[i].Substring(0, 1)) < 'A' || Convert.ToChar(ardev[i].Substring(0, 1)) > 'P') { throw new Exception("Housecode out of range: " + ardev[i]); } try { int devicenr = Int32.Parse(ardev[i].Substring(1)); if (devicenr < 1 || devicenr > 16) { throw new Exception(); } } catch { throw new Exception("Devicecode out of range: " + ardev[i]); } i++; } //verify other attributes if applicable byte level = 0; byte data1 = 0; byte data2 = 0; if (command == X10_COMMANDS.BRIGHT || command == X10_COMMANDS.DIM || command == X10_COMMANDS.PRESET_DIM1 || command == X10_COMMANDS.PRESET_DIM2) { try { level = Byte.Parse(e.XplMsg.KeyValueList["level"]); if (level < 0 || level > 100) { throw new Exception(); } } catch { throw new Exception("Level out of range: " + e.XplMsg.KeyValueList["level"]); } } if (command == X10_COMMANDS.EXTENDED) { try { data1 = Byte.Parse(e.XplMsg.KeyValueList["data1"]); data2 = Byte.Parse(e.XplMsg.KeyValueList["data2"]); if (data1 < 0 || data1 > 255 || data2 < 0 || data2 > 255) { throw new Exception(); } } catch { throw new Exception("Extended data out of range: data1=" + e.XplMsg.KeyValueList["data1"] + " data2=" + e.XplMsg.KeyValueList["data2"]); } } i = 0; while (i < ardev.Length) { //group devices of the same housecode string devices = ardev[i]; int j = i + 1; while (j < ardev.Length && ardev[j].Substring(0, 1) == devices.Substring(0, 1)) { devices += "," + ardev[j].Substring(1); j++; } i = j; if (command == X10_COMMANDS.BRIGHT || command == X10_COMMANDS.DIM || command == X10_COMMANDS.PRESET_DIM1 || command == X10_COMMANDS.PRESET_DIM2) { x10.AsyncSendX10(devices, command, level); } else if (command == X10_COMMANDS.EXTENDED) { x10.AsyncSendX10(devices, command, data1, data2); } else { x10.AsyncSendX10(devices, command); } } } } catch (Exception Ex) { EventLog.WriteEntry("Error parsing xpl command: " + Ex.Message, EventLogEntryType.Error); } }