private static GXByteBuffer UpdateDataType(XmlNode node, GXDLMSXmlSettings s, int tag)
{
GXByteBuffer preData = null;
switch ((DataType)(tag - GXDLMS.DATA_TYPE_OFFSET))
{
case DataType.Array:
s.data.SetUInt8(DataType.Array);
preData = new GXByteBuffer(s.data);
s.data.Size = 0;
break;
case DataType.Bcd:
GXCommon.SetData(s.settings, s.data, DataType.Bcd, s.ParseShort(GetValue(node, s)));
break;
case DataType.BitString:
GXCommon.SetData(s.settings, s.data, DataType.BitString, GetValue(node, s));
break;
case DataType.Boolean:
GXCommon.SetData(s.settings, s.data, DataType.Boolean, s.ParseShort(GetValue(node, s)));
break;
case DataType.Date:
GXCommon.SetData(s.settings, s.data, DataType.Date, GXDLMSClient.ChangeType(GXCommon.HexToBytes(GetValue(node, s)), DataType.DateTime));
break;
case DataType.DateTime:
GXCommon.SetData(s.settings, s.data, DataType.DateTime, GXDLMSClient.ChangeType(GXCommon.HexToBytes(GetValue(node, s)), DataType.DateTime));
break;
case DataType.Enum:
GXCommon.SetData(s.settings, s.data, DataType.Enum, s.ParseShort(GetValue(node, s)));
break;
case DataType.Float32:
GetFloat32(node, s);
break;
case DataType.Float64:
GetFloat64(node, s);
break;
case DataType.Int16:
GXCommon.SetData(s.settings, s.data, DataType.Int16, s.ParseShort(GetValue(node, s)));
break;
case DataType.Int32:
GXCommon.SetData(s.settings, s.data, DataType.Int32, s.ParseInt(GetValue(node, s)));
break;
case DataType.Int64:
GXCommon.SetData(s.settings, s.data, DataType.Int64, s.ParseLong(GetValue(node, s)));
break;
case DataType.Int8:
GXCommon.SetData(s.settings, s.data, DataType.Int8, s.ParseShort(GetValue(node, s)));
break;
case DataType.None:
GXCommon.SetData(s.settings, s.data, DataType.None, null);
break;
case DataType.OctetString:
GetOctetString(node, s);
break;
case DataType.String:
if (s.showStringAsHex)
{
GXCommon.SetData(s.settings, s.data, DataType.String, GXCommon.HexToBytes(GetValue(node, s)));
}
else
{
GXCommon.SetData(s.settings, s.data, DataType.String, GetValue(node, s));
}
break;
case DataType.StringUTF8:
if (s.showStringAsHex)
{
GXCommon.SetData(s.settings, s.data, DataType.StringUTF8, GXCommon.HexToBytes(GetValue(node, s)));
}
else
{
GXCommon.SetData(s.settings, s.data, DataType.StringUTF8, GetValue(node, s));
}
break;
case DataType.Structure:
s.data.SetUInt8(DataType.Structure);
preData = new GXByteBuffer(s.data);
s.data.Size = 0;
break;
case DataType.Time:
GXCommon.SetData(s.settings, s.data, DataType.Time, GXDLMSClient.ChangeType(GXCommon.HexToBytes(GetValue(node, s)), DataType.DateTime));
break;
case DataType.UInt16:
GXCommon.SetData(s.settings, s.data, DataType.UInt16, s.ParseInt(GetValue(node, s)));
break;
case DataType.UInt32:
GXCommon.SetData(s.settings, s.data, DataType.UInt32, s.ParseLong(GetValue(node, s)));
break;
case DataType.UInt64:
GXCommon.SetData(s.settings, s.data, DataType.UInt64, s.ParseULong(GetValue(node, s)));
break;
case DataType.UInt8:
GXCommon.SetData(s.settings, s.data, DataType.UInt8, s.ParseShort(GetValue(node, s)));
break;
default:
throw new ArgumentException("Invalid node: " + node.Name);
}
return preData;
}