コード例 #1
0
        public static bool IsCapable(this Connector connector, HomeDevice homeDevice)
        {
            if (connector.ConnectorType == ConnectorTypes.DimmerPassZero)
                return false;

            return connector.ConnectorType == homeDevice.ConnectorCapable;
        }
コード例 #2
0
 void statusModule_StateRefreshed(object sender, HomeDevice e)
 {
     if (this.pendingRequests.ContainsKey(e))
     {
         this.pendingRequests[e].SetResult(true);
     }
 }
コード例 #3
0
        public async Task<bool> RefreshHomeDevice(HomeDevice homeDevice, TimeSpan timeout)
        {
            //TODO: To be implemented
            OperationMessage refreshMessage = homeDevice.RefreshState();

            //If the home device can't be updated. Return true.
            if (refreshMessage == null)
                return true;

            if (!this.pendingRequests.ContainsKey(homeDevice))
            {
                this.pendingRequests.Add(homeDevice, new TaskCompletionSource<bool>());

                bool sent = await this.SendMessage(refreshMessage);

                if (sent)
                {
                    var pendingConfirmationTask = this.pendingRequests[homeDevice];

                    //Await for a confirmation with timeout
                    Task delayTask = Task.Delay((int)timeout.TotalMilliseconds);
                    Task firstTask = await Task.WhenAny(pendingConfirmationTask.Task, delayTask);

                    bool result = false;

                    if (firstTask == delayTask)
                    {
                        //Timeout
                        this.PrintLog(true, "TIMEOUT during HD update");
                        pendingConfirmationTask.SetCanceled();
                        this.pendingRequests.Remove(homeDevice);
                    }
                    else
                    {
                        result = pendingConfirmationTask.Task.Result;
                        this.pendingRequests.Remove(homeDevice);
                    }

                    return result;
                }
            }
            else
            {
                return await this.pendingRequests[homeDevice].Task;
            }

            return false;
        }
コード例 #4
0
        public static PinPortConfiguration GetPinPortConfiguration(HomeDevice homeDevice)
        {
            PinPortConfiguration configuration = DefaultPinPortConfiguration();

            if (homeDevice is Button)
            {
                configuration.Output = false;
                configuration.Digital = true;
                configuration.ChangeTypeD = PinPortConfiguration.Trigger.FallingEdge;
            }
            else if (homeDevice is SwitchButton)
            {
                configuration.Output = false;
                configuration.Digital = true;
                configuration.ChangeTypeD = PinPortConfiguration.Trigger.Both;
            }
            else if (homeDevice is Light || homeDevice is WallPlug)
            {
                configuration.Output = true;
                configuration.Digital = true;
                configuration.DefaultValueD = false;
            }
            else if (homeDevice is Dimmable)
            {
                configuration.Output = true;
                configuration.Digital = false;
                configuration.DefaultValueA = 0x00;
            }
            else if (homeDevice is PresenceSensor)
            {
                configuration.Output = false;
                configuration.Digital = true;
                configuration.ChangeTypeD = PinPortConfiguration.Trigger.RisingEdge;
            }
            else if (homeDevice is DoorLock)
            {
                configuration.Output = true;
                configuration.Digital = true;
            }

            return configuration;
        }
コード例 #5
0
 /// <summary>
 /// Connect without checks the connector with the homeDevice
 /// </summary>
 /// <param name="connector"></param>
 /// <param name="homeDevice"></param>
 public static void LinkHomeDevice(this Connector connector, HomeDevice homeDevice)
 {
     connector.HomeDevices = new List<HomeDevice> { homeDevice };
     connector.Product = null;
 }
コード例 #6
0
 public static PinPortConfiguration GetPinPortConfiguration(this Connector connector, HomeDevice homeDevice)
 {
     return ProductConfiguration.GetPinPortConfiguration(homeDevice);
 }
コード例 #7
0
        private byte GetLogicConfiguration(Connector connector, HomeDevice homeDevice)
        {
            PinPortConfiguration ppc = connector.GetPinPortConfiguration(homeDevice);
            byte res = 0x00;
            if (ppc.Output)
                res |= (byte)(0x01 << 3);
            if (ppc.DefaultValueD)
                res |= (byte)(0x01 << 2);
            res |= (byte)ppc.ChangeTypeD;

            return res;
        }