123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Reflection;
- using System.Runtime.CompilerServices;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- namespace nisyscfg
- {
- public class NISyscfg
- {
- private bool isinit = false;
- private nint expertEnumHandle = 0;
- private nint sessionHandle = 0;
- private NISysCfgStatus status;
- public NISyscfg(string targetName="localhost", string username="", string password="",NISysCfgLocale language = NISysCfgLocale.NISysCfgLocaleDefault, bool forcePropertyRefresh = true, uint connectTimeoutMsec = 4000)
- {
- TargetName = targetName;
- UserName = username;
- Password = password;
- Language = language;
- ForcePropertyRefresh = forcePropertyRefresh;
- ConnectTimeoutMsec = connectTimeoutMsec;
- }
- public void Init()
- {
- if (isinit) return;
- status = NativeMethods.NISysCfgInitializeSession(TargetName, UserName, Password, Language, ForcePropertyRefresh, ConnectTimeoutMsec, ref expertEnumHandle, ref sessionHandle);
- if (status != NISysCfgStatus.NISysCfg_OK) return;
- Filter = NISysFilter.CreateFilter(sessionHandle);
- }
- public NISysFilter Filter { get; private set; }
- public List<NIHardware> SearchHardware(NISysCfgFilterMode mode = NISysCfgFilterMode.NISysCfgFilterModeMatchValuesAll)
- {
- nint resourceEnumHandle = 0;
- NativeMethods.NISysCfgFindHardware(sessionHandle, mode, Filter.Handle, string.Empty, ref resourceEnumHandle);
- List<NIHardware> hardwares = new List<NIHardware>();
- if (resourceEnumHandle == 0) return hardwares;
- nint h = 0;
- while(NativeMethods.NISysCfgNextResource(sessionHandle, resourceEnumHandle, ref h) == NISysCfgStatus.NISysCfg_OK)
- {
- hardwares.Add(new NIHardware(h));
- }
- NativeMethods.NISysCfgCloseHandle(resourceEnumHandle);
- return hardwares;
- }
- public string TargetName { get; private set; }
- public string UserName { get; private set; }
- public string Password { get; private set; }
- public NISysCfgLocale Language { get; private set; }
- public bool ForcePropertyRefresh { get; private set; }
- public uint ConnectTimeoutMsec { get; private set; }
- public void Close()
- {
- NativeMethods.NISysCfgCloseHandle(sessionHandle);
- NativeMethods.NISysCfgCloseHandle(expertEnumHandle);
- if(Filter!=null)
- {
- NativeMethods.NISysCfgCloseHandle(Filter.Handle);
- }
- }
- }
- public class NIHardware:NISyscfgBase
- {
- [AttributeUsage(AttributeTargets.Property)]
- class HardwarePropertyAttribute:Attribute
- {
- public HardwarePropertyAttribute(NISysCfgResourceProperty property)
- {
- Property = property;
- }
- public NISysCfgResourceProperty Property { get; }
- }
- internal NIHardware(nint ptr):base(ptr)
- {
- typeof(NIHardware).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
- .Where(x => x.GetCustomAttribute<HardwarePropertyAttribute>() != null)
- .ToList()
- .ForEach(x =>
- {
- var pro = x.GetCustomAttribute<HardwarePropertyAttribute>()?.Property;
- if (pro == null) return;
- if(x.PropertyType == typeof(bool))
- {
- bool temp = false;
- NativeMethods.NISysCfgGetResourceProperty(ptr, pro.Value, ref temp);
- x.SetValue(this, temp);
- }
- else if(x.PropertyType == typeof(int) || x.PropertyType.IsEnum)
- {
- int temp = 0;
- NativeMethods.NISysCfgGetResourceProperty(ptr, pro.Value, ref temp);
- x.SetValue(this, temp);
- }
- else if(x.PropertyType == typeof(uint))
- {
- uint temp = 0;
- NativeMethods.NISysCfgGetResourceProperty(ptr, pro.Value, ref temp);
- x.SetValue(this, temp);
- }
- else if(x.PropertyType == typeof(string))
- {
- StringBuilder stringBuilder = new StringBuilder(1024);
- NativeMethods.NISysCfgGetResourceProperty(ptr, pro.Value, stringBuilder);
- x.SetValue(this, stringBuilder.ToString());
- }
- else if (x.PropertyType == typeof(double))
- {
- double temp = 0;
- NativeMethods.NISysCfgGetResourceProperty(ptr, pro.Value, ref Unsafe.As<double,byte>(ref temp));
- x.SetValue(this, temp);
- }
- });
- StringBuilder stringBuilder = new StringBuilder(1024);
- NativeMethods.NISysCfgGetResourceIndexedProperty(ptr, NISysCfgIndexedProperty.NISysCfgIndexedPropertyExpertName, 0, stringBuilder);
- ExpertName = stringBuilder.ToString();
- stringBuilder = new StringBuilder(1024);
- NativeMethods.NISysCfgGetResourceIndexedProperty(ptr, NISysCfgIndexedProperty.NISysCfgIndexedPropertyExpertResourceName, 0, stringBuilder);
- ExpertResourceName = stringBuilder.ToString();
- stringBuilder = new StringBuilder(1024);
- NativeMethods.NISysCfgGetResourceIndexedProperty(ptr, NISysCfgIndexedProperty.NISysCfgIndexedPropertyExpertUserAlias, 0, stringBuilder);
- ExpertUserAlias = stringBuilder.ToString();
- }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyIsDevice)]
- public bool IsDevice { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyIsChassis)]
- public bool IsChassis { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyConnectsToBusType)]
- public NISysCfgBusType ConnectsToBusType { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyVendorId)]
- public uint VendorId { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyVendorName)]
- public string VendorName { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyProductId)]
- public uint ProductId { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyProductName)]
- public string ProductName { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertySerialNumber)]
- public string SerialNumber { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyFirmwareRevision)]
- public string FirmwareRevision { get; private set; }
- [HardwareProperty( NISysCfgResourceProperty.NISysCfgResourcePropertyIsNIProduct)]
- public bool IsNIProduct { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyIsSimulated)]
- public bool IsSimulated { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyConnectsToLinkName)]
- public string ConnectsToLinkName { get;private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyHasDriver)]
- public bool HasDriver { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyIsPresent)]
- public bool IsPresent { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertySlotNumber)]
- public int SlotNumber { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertySupportsInternalCalibration)]
- public bool SupportsInternalCalibration { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertySupportsExternalCalibration)]
- public bool SupportsExternalCalibration { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyCurrentTemp)]
- public double CurrentTemp { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyProvidesBusType)]
- public NISysCfgBusType ProvidesBusType { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyProvidesLinkName)]
- public string ProvidesLinkName { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyNumberOfSlots)]
- public int NumberOfSlots { get; private set; }
- [HardwareProperty(NISysCfgResourceProperty.NISysCfgResourcePropertyHardwareRevision)]
- public string HardwareRevision { get; private set; }
- public string ExpertName { get; private set; }
- public string ExpertUserAlias { get; private set; }
- public string ExpertResourceName { get; private set; }
- }
- public class NISysFilter:NISyscfgBase
- {
- private bool isDevice = false;
- private bool isChassis = false;
- private NISysCfgServiceType serviceType = NISysCfgServiceType.NISysCfgServiceTypemDnsNiSysapi;
- private NISysFilter(nint filterhandle):base(filterhandle)
- {
- }
- public static NISysFilter CreateFilter(nint session)
- {
- nint filter = 0;
- NativeMethods.NISysCfgCreateFilter(session, ref filter);
- return new NISysFilter(filter);
- }
- public bool IsDevice
- {
- get => isDevice;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyIsDevice, value);
- isDevice = value;
- }
- }
- public bool IsChassis
- {
- get => isChassis;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle,NISysCfgFilterProperty.NISysCfgFilterPropertyIsChassis, value);
- isChassis = value;
- }
- }
- public NISysCfgServiceType ServiceType
- {
- get => serviceType;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyServiceType, (int)value);
- serviceType = value;
- }
- }
- private NISysCfgBusType connBusType = NISysCfgBusType.NISysCfgBusTypeBuiltIn;
- public NISysCfgBusType ConnBusType
- {
- get => connBusType;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyConnectsToBusType, (int)value);
- connBusType = value;
- }
- }
- private string connectsToLinkName = "";
- public string ConnectsToLinkName
- {
- get => connectsToLinkName;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyConnectsToLinkName, value);
- connectsToLinkName = value;
- }
- }
- private NISysCfgBusType providesBusType = NISysCfgBusType.NISysCfgBusTypeBuiltIn;
- public NISysCfgBusType ProvidesBusType
- {
- get => providesBusType;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyProvidesBusType, (int)value);
- providesBusType = value;
- }
- }
- private uint vendorId = 0;
- public uint VendorId
- {
- get => vendorId;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyVendorId, value);
- vendorId = value;
- }
- }
- private uint productId = 0;
- public uint ProductId
- {
- get => productId;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyProductId, value);
- productId = value;
- }
- }
- private string serialNumber = "";
- public string SerialNumber
- {
- get => serialNumber;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertySerialNumber, value);
- serialNumber = value;
- }
- }
- private bool isNIProduct = false;
- public bool IsNIProduct
- {
- get => isNIProduct;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyIsNIProduct, value);
- isNIProduct = value;
- }
- }
- private bool isSimulated = false;
- public bool IsSimulated
- {
- get => isSimulated;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyIsSimulated, value);
- isSimulated = value;
- }
- }
- private int slotNumber = 0;
- public int SlotNumber
- {
- get => slotNumber;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertySlotNumber, value);
- slotNumber = value;
- }
- }
- private bool hasDriver = false;
- public bool HasDriver
- {
- get => hasDriver;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyHasDriver, value);
- hasDriver = value;
- }
- }
- private bool isPresent = false;
- public bool IsPresent
- {
- get => isPresent;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyIsPresent, value);
- isPresent = value;
- }
- }
- private bool supportsCalibration = false;
- public bool SupportsCalibration
- {
- get => supportsCalibration;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertySupportsCalibration, value);
- supportsCalibration = value;
- }
- }
- private bool supportsFirmwareUpdate = false;
- public bool SupportsFirmwareUpdate
- {
- get => supportsFirmwareUpdate;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertySupportsFirmwareUpdate, value);
- supportsFirmwareUpdate = value;
- }
- }
- private string providesLinkName = "";
- public string ProvidesLinkName
- {
- get => providesLinkName;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyProvidesLinkName, value);
- providesLinkName = value;
- }
- }
- private string expertName = "";
- public string ExpertName
- {
- get => expertName;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyExpertName, value);
- expertName = value;
- }
- }
- private string resourceName = "";
- public string ResourceName
- {
- get => resourceName;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyResourceName, value);
- resourceName = value;
- }
- }
- public string UserAlias
- {
- get => userAlias;
- set
- {
- NativeMethods.NISysCfgSetFilterProperty(handle, NISysCfgFilterProperty.NISysCfgFilterPropertyUserAlias, value);
- userAlias = value;
- }
- }
- private string userAlias = "";
- }
- public abstract class NISyscfgBase : IDisposable
- {
- internal nint Handle => handle;
- private protected nint handle = 0;
- public NISyscfgBase(nint ptr)
- {
- handle = ptr;
- }
- private bool disposedValue;
- protected virtual void Dispose(bool disposing)
- {
- if (!disposedValue)
- {
- if (disposing)
- {
- // TODO: 释放托管状态(托管对象)
- }
- NativeMethods.NISysCfgCloseHandle(handle);
- // TODO: 释放未托管的资源(未托管的对象)并重写终结器
- // TODO: 将大型字段设置为 null
- disposedValue = true;
- }
- }
- // // TODO: 仅当“Dispose(bool disposing)”拥有用于释放未托管资源的代码时才替代终结器
- // ~NISyscfgBase()
- // {
- // // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
- // Dispose(disposing: false);
- // }
- public void Dispose()
- {
- // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
- Dispose(disposing: true);
- GC.SuppressFinalize(this);
- }
- }
- }
|