public static bool IsCapable(this Connector connector, HomeDevice homeDevice) { if (connector.ConnectorType == ConnectorTypes.DimmerPassZero) return false; return connector.ConnectorType == homeDevice.ConnectorCapable; }
void statusModule_StateRefreshed(object sender, HomeDevice e) { if (this.pendingRequests.ContainsKey(e)) { this.pendingRequests[e].SetResult(true); } }
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; }
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; }
/// <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; }
public static PinPortConfiguration GetPinPortConfiguration(this Connector connector, HomeDevice homeDevice) { return ProductConfiguration.GetPinPortConfiguration(homeDevice); }
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; }