static public R14Register GetIDs(ITransport transport) { #region /Проверка аргументов/ if (transport == null) { throw new ArgumentNullException("transport"); } #endregion /Проверка аргументов/ RegistersProtocolW32R16 protocol = new RegistersProtocolW32R16(transport); protocol.ClearRequest(); R14Register res = new R14Register(); protocol.SendRequestAndReadRegister(res); return(res); }
private void ReadFromEEPROM(ushort address, int count, byte[] dest, int start, bool resetFIFO) { #region /Проверка аргументов/ if (_Protocol.Transport == null) { throw new ArgumentNullException("protocol", "Не задан транспорт для протокола"); } if (!_Protocol.Transport.Connected) { throw new IOException("Связь с устройством не установлена"); } if (address >= _EEPROMSize) { throw new ArgumentOutOfRangeException("address"); } if (dest == null) { throw new ArgumentNullException("dest"); } if (start < 0 || start >= dest.Length) { throw new ArgumentOutOfRangeException("start"); } if (count < 1 || count > _EEPROMBlockSize || (address + count) > _EEPROMSize || (start + count) > dest.Length) { throw new ArgumentOutOfRangeException("count"); } #endregion /Проверка аргументов/ if (resetFIFO) { // сбрасываем FIFO DoAction(EnumAction.Reset, false); } //конфигурируем доступ к eeprom W10Register w10 = new W10Register(W10Register.EnumEEPROMAction.Read, (ushort)count, address); _Protocol.PrepareWriteRequest(w10); R4RegisterBase r4 = new R4RegisterBase(); double maxTryTime = 1; //сек DateTime startTime = DateTime.Now; while (true) { _Protocol.SendRequestAndReadRegister(r4); if ((DateTime.Now - startTime).TotalSeconds > maxTryTime) { throw new IOException("Превышено время ожидания завершения операции"); } if (!r4.EEPROMStatus) { throw new IOException("Ошибка записи/чтения EEPROM"); } if (r4.EEPROMReady) { break; } } Register <ushort> r15 = new Register <ushort>(15, _EEPROMBlockSize); _Protocol.SendRequestAndReadRegister(r15); for (int i = 0; i < count; i++) { dest[start + i] = (byte)r15.Data[i]; } }