public FirmwareUno(Node node, byte systemFlags) { _node = node; _operationTimeRestictionDictionary = new Dictionary<ushort, Operation>(); _operationDictionary = new Dictionary<ushort, Operation[]>(); _systemFlags = systemFlags; _baseConfiguration = node.GetBaseConfiguration(); }
public static Node CreateNode(BaseTypes baseType, ShieldTypes shieldType) { Node node = new Node { Base = baseType, Shield = shieldType, NetworkRetries = 3, }; foreach (var item in ProductConfiguration.GetShieldDictionary(shieldType)) { if(item.Value.Item1 != DataLayer.Entities.Enums.ConnectorTypes.DimmerPassZero) node.Connectors.Add(BusinessConnector.CreateConnector(item.Key, item.Value.Item1)); } return node; }
public async void SendConfiguration(Node node, Home home) { ushort nodeAddress = (ushort)node.Address; bool isNewTransaction = !this.currentWriteTransactions.ContainsKey(nodeAddress); bool isAbortedOrCompletedTransaction = isNewTransaction ? false : this.currentWriteTransactions[nodeAddress].FragmentWriteTransaction.IsAborted || this.currentWriteTransactions[nodeAddress].FragmentWriteTransaction.IsCompleted; if (isNewTransaction || isAbortedOrCompletedTransaction) { // If the last transaction was aborted or completed. Remove it to allow a new one. if (isAbortedOrCompletedTransaction) this.currentWriteTransactions.Remove(nodeAddress); var configuration = node.GetBinaryConfiguration(home); var newTransaction = new FragmentWriteTransaction(this, OperationMessage.OPCodes.ConfigWrite, typeof(ConfigWriteStatusCodes), nodeAddress, configuration.Item2); this.currentWriteTransactions.Add(nodeAddress, new ConfigTransaction() { Checksum = configuration.Item1, FragmentWriteTransaction = newTransaction, TimeFlag = (DateTime)(node.LastChecksumUpdate ?? DateTime.MinValue), }); if (!await newTransaction.StartTransaction()) { //TODO: Check the problem PrintLog(true, string.Format("An error occurred on configuration update for node 0x{0:X4}", nodeAddress)); } } }