private static void ReadBitsFinal( byte slaveAddress, IDictionary <ushort, bool> bitsData, ReadDelegate readDel, string dataName, int readStart, int length, IEnumerable <ushort> addresses) { int byteLength = length / 8; if (length % 8 != 0) { ++byteLength; } var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length); if (bytes == null || bytes.Count != byteLength) { throw new Exception( string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}", dataName, slaveAddress, readStart, length)); } foreach (ushort address in addresses) { int index = address - readStart; bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8)); } }
public async Task <HidDeviceData> FastReadAsync(int timeout = 0) { var readDelegate = new ReadDelegate(FastRead); #if NET20 || NET35 || NET5_0_OR_GREATER return(await Task <HidDeviceData> .Factory.StartNew(() => readDelegate.Invoke(timeout))); #else return(await Task <HidDeviceData> .Factory.FromAsync(readDelegate.BeginInvoke, readDelegate.EndInvoke, timeout, null)); #endif }
/// <summary> /// Подпрограмма считывания принятых данных /// </summary> /// <param name="channel">Номер канала для выдачи (допустимые значения от 1 до 16).</param> /// <param name="data">Массив считанных данных</param> /// <param name="length">Количество считываемых слов (допустимые значения от 1 до 256).</param> /// <param name="readed">Количество считанных слов</param> /// <returns></returns> public int Read(ushort channel, ref uint[] data, int length, out int readed) { // Synchronously wait to enter the Semaphore. SemaphoreSlim.Wait(); // Запращиваемое количество данных var kern_readed = ( uint )length; var gch = GCHandle.Alloc(data, GCHandleType.Pinned); var error = _read?.Invoke(ref _device, channel, gch.AddrOfPinnedObject(), ref kern_readed) ?? int.MaxValue; gch.Free(); readed = ( int )kern_readed; // Release the Semaphore. SemaphoreSlim.Release(); return(error); }
private static void ReadRegistersFinal( IDictionary <KeyValuePair <int, int>, byte[]> registersData, ReadDelegate readDel, int readStart, int length, IEnumerable <KeyValuePair <int, int> > addresses) { var bytes = readDel.Invoke(readStart, length); if (bytes == null || bytes.Count != length * 2) { throw new Exception(string.Join(Environment.NewLine, string.Format("Error when reading registers"), string.Format("Address {0}, Length {1}", readStart, length))); } foreach (var address in addresses) { var index = (address.Key - readStart) * 2; registersData.Add(address, GetBytes(bytes, index, address.Value * 2)); } }
private static void ReadBitsFinal( IDictionary <int, bool> bitsData, ReadDelegate readDel, int readStart, int length, IEnumerable <int> addresses, string label) { var bytes = readDel.Invoke(readStart, length); if (bytes == null || bytes.Count != length / 8) { throw new Exception(string.Join(Environment.NewLine, string.Format("Error when reading merkers"), string.Format("Address {0}{1}, Length {2}", label, readStart, length))); } foreach (var address in addresses) { var index = address - readStart; bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8)); } }
private void ReadRegistersFinal( byte slaveAddress, IDictionary <KeyValuePair <ushort, int>, byte[]> registersData, ReadDelegate readDel, string dataName, int readStart, int length, IEnumerable <KeyValuePair <ushort, int> > addresses) { int byteLength = length * 2; var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length); if (bytes == null || bytes.Count != byteLength) { throw new Exception( string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}", dataName, slaveAddress, readStart, length)); } foreach (var address in addresses) { int index = (address.Key - readStart) * 2; registersData.Add(address, _bytesToRegistersConverter.GetBytes(bytes, index, address.Value)); } }
private void ReadRegistersFinal( byte slaveAddress, IDictionary<KeyValuePair<ushort, int>, byte[]> registersData, ReadDelegate readDel, string dataName, int readStart, int length, IEnumerable<KeyValuePair<ushort, int>> addresses) { var byteLength = length * 2; var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length); if (bytes == null || bytes.Count != byteLength) { throw new Exception( string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}", dataName, slaveAddress, readStart, length)); } foreach (var address in addresses) { var index = (address.Key - readStart) * 2; registersData.Add(address, _bytesToRegistersConverter.GetBytes(bytes, index, address.Value)); } }
private static void ReadBitsFinal( byte slaveAddress, IDictionary<ushort, bool> bitsData, ReadDelegate readDel, string dataName, int readStart, int length, IEnumerable<ushort> addresses) { var byteLength = length / 8; if (length % 8 != 0) ++byteLength; var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length); if (bytes == null || bytes.Count != byteLength) { throw new Exception( string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}", dataName, slaveAddress, readStart, length)); } foreach (var address in addresses) { var index = address - readStart; bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8)); } }
private static void ReadRegistersFinal( IDictionary<KeyValuePair<int, int>, byte[]> registersData, ReadDelegate readDel, int readStart, int length, IEnumerable<KeyValuePair<int, int>> addresses) { var bytes = readDel.Invoke(readStart, length); if (bytes == null || bytes.Count != length * 2) { throw new Exception(string.Join(Environment.NewLine, string.Format("Error when reading registers"), string.Format("Address {0}, Length {1}", readStart, length))); } foreach (var address in addresses) { var index = (address.Key - readStart) * 2; registersData.Add(address, GetBytes(bytes, index, address.Value * 2)); } }
private static void ReadBitsFinal( IDictionary<int, bool> bitsData, ReadDelegate readDel, int readStart, int length, IEnumerable<int> addresses, string label) { var bytes = readDel.Invoke(readStart, length); if (bytes == null || bytes.Count != length/8) { throw new Exception(string.Join(Environment.NewLine, string.Format("Error when reading merkers"), string.Format("Address {0}{1}, Length {2}", label, readStart, length))); } foreach (var address in addresses) { var index = address - readStart; bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8)); } }