blob: cb723f945c7bfcee0f08b8c62a7d4e732ff314b0 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
namespace org.apache.plc4net.types
{
using System;
using System.Collections.Generic;
/// <summary>
/// The supported types of PlcValues.
/// </summary>
public class PlcValueType
{
public static readonly PlcValueType NULL = new PlcValueType(0x00, null);
public static readonly PlcValueType BOOL = new PlcValueType(0x01, typeof(bool));
public static readonly PlcValueType BYTE = new PlcValueType(0x02, typeof(byte));
public static readonly PlcValueType WORD = new PlcValueType(0x03, typeof(ushort));
public static readonly PlcValueType DWORD = new PlcValueType(0x04, typeof(uint));
public static readonly PlcValueType LWORD = new PlcValueType(0x05, typeof(ulong));
public static readonly PlcValueType USINT = new PlcValueType(0x11, typeof(byte));
public static readonly PlcValueType UINT = new PlcValueType(0x12, typeof(ushort));
public static readonly PlcValueType UDINT = new PlcValueType(0x13, typeof(uint));
public static readonly PlcValueType ULINT = new PlcValueType(0x14, typeof(System.Numerics.BigInteger));
public static readonly PlcValueType SINT = new PlcValueType(0x21, typeof(sbyte));
public static readonly PlcValueType INT = new PlcValueType(0x22, typeof(short));
public static readonly PlcValueType DINT = new PlcValueType(0x23, typeof(int));
public static readonly PlcValueType LINT = new PlcValueType(0x24, typeof(long));
public static readonly PlcValueType REAL = new PlcValueType(0x31, typeof(float));
public static readonly PlcValueType LREAL = new PlcValueType(0x32, typeof(double));
public static readonly PlcValueType CHAR = new PlcValueType(0x41, typeof(char));
public static readonly PlcValueType WCHAR = new PlcValueType(0x42, typeof(char));
public static readonly PlcValueType STRING = new PlcValueType(0x43, typeof(string));
public static readonly PlcValueType WSTRING = new PlcValueType(0x44, typeof(string));
public static readonly PlcValueType TIME = new PlcValueType(0x51, typeof(TimeSpan));
public static readonly PlcValueType LTIME = new PlcValueType(0x52, typeof(TimeSpan));
public static readonly PlcValueType DATE = new PlcValueType(0x53, typeof(DateOnly));
public static readonly PlcValueType LDATE = new PlcValueType(0x54, typeof(DateOnly));
public static readonly PlcValueType TIME_OF_DAY = new PlcValueType(0x55, typeof(TimeOnly));
public static readonly PlcValueType LTIME_OF_DAY = new PlcValueType(0x56, typeof(TimeOnly));
public static readonly PlcValueType DATE_AND_TIME = new PlcValueType(0x57, typeof(DateTime));
public static readonly PlcValueType DATE_AND_LTIME = new PlcValueType(0x58, typeof(DateTime));
public static readonly PlcValueType LDATE_AND_TIME = new PlcValueType(0x59, typeof(DateTime));
public static readonly PlcValueType Struct = new PlcValueType(0x61, typeof(Dictionary<string, object>));
public static readonly PlcValueType List = new PlcValueType(0x62, typeof(List<object>));
public static readonly PlcValueType RAW_BYTE_ARRAY = new PlcValueType(0x71, typeof(byte[]));
private static readonly Dictionary<short, PlcValueType> map = new Dictionary<short, PlcValueType>();
static PlcValueType()
{
foreach (var field in typeof(PlcValueType).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public))
{
if (field.GetValue(null) is PlcValueType value)
{
map[value.Value] = value;
}
}
}
public short Value { get; }
public Type? DefaultDotNetType { get; }
private PlcValueType(short value, Type? defaultDotNetType)
{
Value = value;
DefaultDotNetType = defaultDotNetType;
}
public static PlcValueType? EnumForValue(short value)
{
map.TryGetValue(value, out var result);
return result;
}
public static bool IsDefined(short value)
{
return map.ContainsKey(value);
}
public override string ToString() => $"PlcValueType(0x{Value:X}, {DefaultDotNetType?.Name ?? "null"})";
}
}