Пример #1
0
 /// <summary>
 /// Преобразует указанный массив из формата RC51ASCII в бинарный формат
 /// (CRC не удаляется)
 /// </summary>
 private byte[] ConvertFromRC51ASCII(byte[] buffer)
 {
     if (buffer[0] != '!')
     {
         this._errorType = ErrorType.DeviceReturnError;
         return(null);
     }
     return(RelkonProtocol.ConvertFromRC51ASCII(buffer));
 }
Пример #2
0
        /// <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);
        }