/// <summary> /// For discovery purposes /// </summary> public List <string> ListAllProperties() { List <string> result = new List <string>(); List <PropertyContextRecord> properties = GetAllProperties(); foreach (PropertyContextRecord record in properties) { string value; switch (record.wPropType) { case PropertyTypeName.PtypBoolean: value = GetBooleanProperty(record.wPropId).ToString(); break; case PropertyTypeName.PtypInteger16: value = GetInt16Property(record.wPropId).ToString() + " (Int16)"; break; case PropertyTypeName.PtypInteger32: value = GetInt32Property(record.wPropId).ToString(); break; case PropertyTypeName.PtypInteger64: value = GetInt64Property(record.wPropId).ToString() + " (Int64)"; break; case PropertyTypeName.PtypFloating32: value = GetFloat32Property(record.wPropId).ToString() + " (Float32)"; break; case PropertyTypeName.PtypFloating64: value = GetFloat64Property(record.wPropId).ToString() + " (Float64)"; break; case PropertyTypeName.PtypTime: value = GetDateTimeProperty(record.wPropId).ToString(); break; case PropertyTypeName.PtypString: value = GetStringProperty(record.wPropId); break; case PropertyTypeName.PtypMultiString: value = "Unsupported type: MultiString"; break; case PropertyTypeName.PtypBinary: { try { byte[] bytes = GetBytesProperty((PropertyID)record.wPropId); value = StringHelper.GetByteArrayString(bytes); } catch (MissingSubnodeException) { value = "Missing (Binary)"; } break; } case PropertyTypeName.PtypObject: { PropertyContext pc = GetObjectProperty((PropertyID)record.wPropId).PC; value = "Subnode PC:\r\n"; if (pc != null) { List <string> subProperies = pc.ListAllProperties(); foreach (string line in subProperies) { value += "\t" + line + "\r\n"; } } break; } default: value = "unknown type: 0x" + record.wPropType.ToString("x"); break; } string propertyIDString = GetPropertyIDString((ushort)record.wPropId); result.Add(propertyIDString + ": " + value); } return(result); }