Exemplo n.º 1
0
        protected override void OnStart(string[] args)
        {
            x10 = X10Comm.Instance;

            xPL_Base.xPLErrorEventLog = EventLog;
            try
            {
                // Recreate device from settings
                xL = new xPLDevice(Properties.Settings.Default.strDeviceState, false);
            }
            catch
            {
                // recreate failed, so create a new one
                xL = new xPLDevice();
                xL.Configurable   = true;
                xL.VendorID       = VENDORID;
                xL.DeviceID       = DEVICEID;
                xL.InstanceIDType = xPL_Base.InstanceCreation.Randomized;

                xL.ConfigItems.Add("comport", "1", xPL_Base.xPLConfigTypes.xReconf, 1);
            }

            //receive Configuration Done notification
            xL.xPLConfigDone      += new xPLDevice.xPLConfigDoneEventHandler(xL_XplConfigDone);
            xL.xPLReConfigDone    += new xPLDevice.xPLReConfigDoneEventHandler(xL_XplReConfigDone);
            xL.xPLMessageReceived += new xPLDevice.xPLMessageReceivedEventHandler(xL_XplMessageReceived);
            // If config was already done, startup COM port
            if (xL.Configured == true)
            {
                xL_XplConfigDone(null);
            }
            // Startup xPL Communications
            xL.Enable();
        }
Exemplo n.º 2
0
 protected override void OnStop()
 {
     try
     {
         Properties.Settings.Default.strDeviceState = xL.GetState("1.0");
         x10.Dispose();
         x10 = null;
         xL.Dispose();
         xL = null;
     }
     catch (Exception ex)
     {
         EventLog.WriteEntry("Unexpected error: " + ex.Message, EventLogEntryType.Error);
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        protected override void OnStart(string[] args)
        {
            x10 = X10Comm.Instance;

            xPL_Base.xPLErrorEventLog = EventLog;
            try
            {
                // Recreate device from settings
                xL = new xPLDevice(Properties.Settings.Default.strDeviceState, false);
            }
            catch
            {
                // recreate failed, so create a new one
                xL = new xPLDevice();
                xL.Configurable = true;
                xL.VendorID = VENDORID;
                xL.DeviceID = DEVICEID;
                xL.InstanceIDType = xPL_Base.InstanceCreation.Randomized;

                xL.ConfigItems.Add("comport", "1", xPL_Base.xPLConfigTypes.xReconf, 1);
            }

            //receive Configuration Done notification
            xL.xPLConfigDone += new xPLDevice.xPLConfigDoneEventHandler(xL_XplConfigDone);
            xL.xPLReConfigDone += new xPLDevice.xPLReConfigDoneEventHandler(xL_XplReConfigDone);
            xL.xPLMessageReceived += new xPLDevice.xPLMessageReceivedEventHandler(xL_XplMessageReceived);
            // If config was already done, startup COM port
            if (xL.Configured == true)
            {
                xL_XplConfigDone(null);
            }
            // Startup xPL Communications
            xL.Enable();
        }
Exemplo n.º 5
0
 protected override void OnStop()
 {
     try
     {
         Properties.Settings.Default.strDeviceState = xL.GetState("1.0");
         x10.Dispose();
         x10 = null;
         xL.Dispose();
         xL = null;
     }
     catch (Exception ex)
     {
         EventLog.WriteEntry("Unexpected error: " + ex.Message, EventLogEntryType.Error);
     }
 }