/// <summary> /// Преобразует указанный массив из формата RC51ASCII в бинарный формат /// (CRC не удаляется) /// </summary> private byte[] ConvertFromRC51ASCII(byte[] buffer) { if (buffer[0] != '!') { this._errorType = ErrorType.DeviceReturnError; return(null); } return(RelkonProtocol.ConvertFromRC51ASCII(buffer)); }
/// <summary> /// Преобразует указанный массив из формату текущего протокола /// </summary> public static byte[] ConvertFromCurrentProtocolType(byte[] buffer, ProtocolType protocol, ErrorType errorType) { byte[] res = buffer; switch (protocol) { case ProtocolType.RC51ASCII: case ProtocolType.RC51BIN: // Проверяем буфер на наличие ошибок if ((protocol == ProtocolType.RC51BIN && buffer.Length == 4 && buffer[1] == 0xFF) || buffer.Length < 3 || (protocol == ProtocolType.RC51ASCII && (buffer[buffer.Length - 1] != 0x0d || buffer[0] != '!'))) { errorType = ErrorType.DeviceReturnError; res = null; } if (res != null) { if (protocol == ProtocolType.RC51ASCII) { res = RelkonProtocol.ConvertFromRC51ASCII(buffer); } // Проверяем crc (если crc верна, то crc от буффера с crc = 0) if (RelkonProtocol.GetCRC(res) != 0) { errorType = ErrorType.InvalidCRC; res = null; } else { res = Utils.GetSubArray <byte>(res, 0, res.Length - 2); } } break; case ProtocolType.ATCommand: res = Utils.GetSubArray <byte>(res, 0, res.Length - 2); break; } return(res); }