private void GetAccessRights(GXDLMSObject item, GXByteBuffer data) { data.SetUInt8((byte)DataType.Structure); data.SetUInt8((byte)2); data.SetUInt8((byte)DataType.Array); GXAttributeCollection attributes = item.Attributes; int cnt = (item as IGXDLMSBase).GetAttributeCount(); data.SetUInt8((byte)cnt); for (int pos = 0; pos != cnt; ++pos) { GXDLMSAttributeSettings att = attributes.Find(pos + 1); data.SetUInt8((byte)DataType.Structure); //attribute_access_item data.SetUInt8((byte)3); GXCommon.SetData(data, DataType.Int8, pos + 1); //If attribute is not set return read only. if (att == null) { GXCommon.SetData(data, DataType.Enum, AccessMode.Read); } else { GXCommon.SetData(data, DataType.Enum, att.Access); } GXCommon.SetData(data, DataType.None, null); } data.SetUInt8((byte)DataType.Array); attributes = item.MethodAttributes; cnt = (item as IGXDLMSBase).GetMethodCount(); data.SetUInt8((byte)cnt); for (int pos = 0; pos != cnt; ++pos) { GXDLMSAttributeSettings att = attributes.Find(pos + 1); data.SetUInt8((byte)DataType.Structure); //attribute_access_item data.SetUInt8((byte)2); GXCommon.SetData(data, DataType.Int8, pos + 1); //If method attribute is not set return no access. if (att == null) { GXCommon.SetData(data, DataType.Enum, MethodAccessMode.NoAccess); } else { GXCommon.SetData(data, DataType.Enum, att.MethodAccess); } } }
List<byte> GetAccessRights(GXDLMSObject item) { GXAttributeCollection attribs = new GXAttributeCollection(); attribs.AddRange(item.Attributes); PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(item); foreach (PropertyDescriptor it in pdc) { GXDLMSAttribute att = it.Attributes[typeof(GXDLMSAttribute)] as GXDLMSAttribute; if (att != null && attribs.Find(att.Index) == null) { attribs.Add(att); } } List<byte> data = new List<byte>(); data.Add((byte)DataType.Structure); data.Add(2); data.Add((byte)DataType.Array); data.Add((byte)attribs.Count); foreach (GXDLMSAttributeSettings att in attribs) { data.Add((byte)DataType.Structure); //attribute_access_item data.Add(3); GXCommon.SetData(data, DataType.Int8, att.Index); GXCommon.SetData(data, DataType.Enum, att.Access); GXCommon.SetData(data, DataType.None, 0); } data.Add((byte)DataType.Array); data.Add((byte)item.MethodAttributes.Count); foreach (GXDLMSAttributeSettings it in item.MethodAttributes) { data.Add((byte)DataType.Structure); //attribute_access_item data.Add(2); GXCommon.SetData(data, DataType.Int8, it.Index); GXCommon.SetData(data, DataType.Enum, it.MethodAccess); } return data; }