/// <summary>
        /// Outputs a field to XML using the field format specified in the IEEE XMPP IoT extensions.
        /// </summary>
        /// <param name="Xml">XML output.</param>
        /// <param name="Field">Field to output.</param>
        public static void OutputField(XmlWriter Xml, Field Field)
        {
            FieldType FieldTypes;
            FieldQoS  FieldQoS;
            EnumField EnumField;
            string    FieldDataTypeName;
            bool      First;

            FieldDataTypeName = Field.FieldDataTypeName;

            Xml.WriteStartElement(FieldDataTypeName);
            Xml.WriteAttributeString("n", Field.Name);

            if (Field.Writable)
            {
                Xml.WriteAttributeString("ctr", "true");
            }

            if (!string.IsNullOrEmpty(Field.Module))
            {
                Xml.WriteAttributeString("lns", Field.Module);
            }

            if (Field.StringIdSteps != null && Field.StringIdSteps.Length > 0)
            {
                StringBuilder Value = new StringBuilder();

                First = true;
                foreach (LocalizationStep Step in Field.StringIdSteps)
                {
                    if (First)
                    {
                        First = false;
                    }
                    else
                    {
                        Value.Append(',');
                    }

                    Value.Append(Step.StringId.ToString());

                    if (!string.IsNullOrEmpty(Step.Module) || !string.IsNullOrEmpty(Step.Seed))
                    {
                        Value.Append('|');
                        Value.Append(XML.Encode(Step.Module));

                        if (!string.IsNullOrEmpty(Step.Seed))
                        {
                            Value.Append('|');
                            Value.Append(XML.Encode(Step.Seed));
                        }
                    }
                }

                Xml.WriteAttributeString("loc", Value.ToString());
            }

            FieldTypes = Field.Type;

            if ((FieldTypes & FieldType.All) == FieldType.All)
            {
                Xml.WriteAttributeString("all", "true");
            }
            else
            {
                if (FieldTypes.HasFlag(FieldType.Momentary))
                {
                    Xml.WriteAttributeString("m", "true");
                }

                if (FieldTypes.HasFlag(FieldType.Identity))
                {
                    Xml.WriteAttributeString("i", "true");
                }

                if (FieldTypes.HasFlag(FieldType.Status))
                {
                    Xml.WriteAttributeString("s", "true");
                }

                if (FieldTypes.HasFlag(FieldType.Computed))
                {
                    Xml.WriteAttributeString("c", "true");
                }

                if (FieldTypes.HasFlag(FieldType.Peak))
                {
                    Xml.WriteAttributeString("p", "true");
                }

                if (FieldTypes.HasFlag(FieldType.Historical))
                {
                    Xml.WriteAttributeString("h", "true");
                }
            }

            FieldQoS = Field.QoS;

            if (FieldQoS.HasFlag(FieldQoS.Missing))
            {
                Xml.WriteAttributeString("ms", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.InProgress))
            {
                Xml.WriteAttributeString("pr", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.AutomaticEstimate))
            {
                Xml.WriteAttributeString("ae", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.ManualEstimate))
            {
                Xml.WriteAttributeString("me", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.ManualReadout))
            {
                Xml.WriteAttributeString("mr", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.AutomaticReadout))
            {
                Xml.WriteAttributeString("ar", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.TimeOffset))
            {
                Xml.WriteAttributeString("of", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.Warning))
            {
                Xml.WriteAttributeString("w", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.Error))
            {
                Xml.WriteAttributeString("er", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.Signed))
            {
                Xml.WriteAttributeString("so", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.Invoiced))
            {
                Xml.WriteAttributeString("iv", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.EndOfSeries))
            {
                Xml.WriteAttributeString("eos", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.PowerFailure))
            {
                Xml.WriteAttributeString("pf", "true");
            }

            if (FieldQoS.HasFlag(FieldQoS.InvoiceConfirmed))
            {
                Xml.WriteAttributeString("ic", "true");
            }

            if (Field is QuantityField QuantityField)
            {
                Xml.WriteAttributeString("v", CommonTypes.Encode(QuantityField.Value, QuantityField.NrDecimals));
                Xml.WriteAttributeString("u", QuantityField.Unit);
            }
            else if ((EnumField = Field as EnumField) != null)
            {
                Xml.WriteAttributeString("v", Field.ValueString);
                Xml.WriteAttributeString("t", EnumField.EnumerationType);
            }
            else
            {
                Xml.WriteAttributeString("v", Field.ValueString);
            }

            Xml.WriteEndElement();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Represents one item in a sensor data readout.
        /// </summary>
        /// <param name="Field">Sensor data field.</param>
        public FieldItem(Field Field)
            : base(Colors.Black, Colors.White)
        {
            this.field         = Field;
            this.quantityField = Field as QuantityField;

            FieldQoS QoS = Field.QoS;

            if (QoS.HasFlag(FieldQoS.InvoiceConfirmed) || QoS.HasFlag(FieldQoS.Invoiced))
            {
                this.BackgroundColor = Colors.Gold;
            }
            else if (QoS.HasFlag(FieldQoS.EndOfSeries))
            {
                this.BackgroundColor = Colors.LightBlue;
            }
            else if (QoS.HasFlag(FieldQoS.Signed))
            {
                this.BackgroundColor = Colors.LightGreen;
            }
            else if (QoS.HasFlag(FieldQoS.Error))
            {
                this.BackgroundColor = Colors.LightPink;
            }
            else if (QoS.HasFlag(FieldQoS.PowerFailure) || QoS.HasFlag(FieldQoS.TimeOffset) || QoS.HasFlag(FieldQoS.Warning))
            {
                this.BackgroundColor = Colors.LightYellow;
            }
            else if (QoS.HasFlag(FieldQoS.Missing) || QoS.HasFlag(FieldQoS.InProgress))
            {
                this.BackgroundColor = Colors.LightGray;
            }
            else if (QoS.HasFlag(FieldQoS.AutomaticEstimate) || QoS.HasFlag(FieldQoS.ManualEstimate))
            {
                this.BackgroundColor = Colors.WhiteSmoke;
            }
        }