Esempio n. 1
0
        /// <summary>
        /// Возвращает запрос на запись данных в память определенного типа (без CRC)
        /// </summary>
        public static byte[] CreateWriteMemoryRequest(MemoryType MemoryType, int controllerAddress, int Address, byte[] Data, Type type)
        {
            List <byte> l = new List <byte>();

            l.Add((byte)controllerAddress);
            byte command       = 0;
            int  AddressLength = 0;

            switch (MemoryType)
            {
            case MemoryType.RAM:
                command       = (byte)0x60;
                AddressLength = 1;
                break;

            case MemoryType.Clock:
                command       = (byte)0x61;
                AddressLength = 1;
                break;

            case MemoryType.EEPROM:
                command       = (byte)0x62;
                AddressLength = 2;
                break;

            case MemoryType.FRAM:
                command       = (byte)0x63;
                AddressLength = 2;
                break;

            case MemoryType.XRAM:
                command       = (byte)0x64;
                AddressLength = 2;
                break;

            case MemoryType.Flash:
                command       = (byte)0x65;
                AddressLength = 2;
                break;

            default:
                throw new Exception("Указанный тип памяти " + MemoryType + " не поддерживается в " + type);
            }
            l.Add(command);
            byte[] a = AppliedMath.IntToBytes(Address);
            l.AddRange(Utils.GetSubArray <byte>(a, a.Length - AddressLength));
            l.AddRange(Data);
            return(l.ToArray());
        }
Esempio n. 2
0
        /// <summary>
        /// Возвращает запрос на запись данных в память определенного типа (без CRC)
        /// </summary>
        private byte[] CreateWriteMemoryRequest(MemoryType MemoryType, int Address, byte[] Data)
        {
            List <byte> request = new List <byte>();

            request.Add((byte)_controllerAddress);
            byte command       = 0;
            int  AddressLength = 0;

            switch (MemoryType)
            {
            case MemoryType.RAM:
                command       = (byte)0xE0;
                AddressLength = 1;
                break;

            case MemoryType.Clock:
                command       = (byte)0xE1;
                AddressLength = 1;
                break;

            case MemoryType.EEPROM:
                command       = (byte)0xE2;
                AddressLength = 2;
                break;

            case MemoryType.FRAM:
                command       = (byte)0xE3;
                AddressLength = 2;
                break;

            case MemoryType.XRAM:
                command       = (byte)0xE4;
                AddressLength = 2;
                break;

            case MemoryType.Flash:
                command       = (byte)0xE5;
                AddressLength = 4;
                if (Data.Length % 2 != 0)
                {
                    // В Relkon4 во Flash можно записывать только четное число байт
                    Array.Resize <byte>(ref Data, Data.Length + 1);
                    Data[Data.Length - 1] = 0xFF;
                }
                break;

            case MemoryType.SDCard:
                command       = (byte)0xE7;
                AddressLength = 4;
                break;
            }
            // Добавление команды
            request.Add(command);
            // Добавление адреса
            byte[] a = AppliedMath.IntToBytes(Address);
            request.AddRange(Utils.GetSubArray <byte>(a, a.Length - AddressLength));
            // Добавление размера буфера
            a = AppliedMath.IntToBytes(Data.Length);
            if (MemoryType == MemoryType.Flash || MemoryType == MemoryType.SDCard)
            {
                AddressLength = 2;
            }
            request.AddRange(Utils.GetSubArray <byte>(a, a.Length - AddressLength));
            // Добавление данных
            request.AddRange(Data);
            return(request.ToArray());
        }
Esempio n. 3
0
        /// <summary>
        /// Возвращает запрос на чтение данных с области памяти определенного типа (без CRC)
        /// </summary>
        private byte[] CreateReadMemoryRequest(MemoryType MemoryType, int Address, int Count)
        {
            List <byte> request = new List <byte>();

            request.Add((byte)_controllerAddress);
            byte command       = 0;
            int  AddressLength = 0;

            switch (MemoryType)
            {
            case MemoryType.RAM:
                command       = (byte)0xD0;
                AddressLength = 1;
                break;

            case MemoryType.Clock:
                command       = (byte)0xD1;
                AddressLength = 1;
                break;

            case MemoryType.EEPROM:
                command       = (byte)0xD2;
                AddressLength = 2;
                break;

            case MemoryType.FRAM:
                command       = (byte)0xD3;
                AddressLength = 2;
                break;

            case MemoryType.XRAM:
                command       = (byte)0xD4;
                AddressLength = 2;
                break;

            case MemoryType.Flash:
                command       = (byte)0xD5;
                AddressLength = 4;
                if (Count % 2 != 0)
                {
                    Count++;     // в Relkon4 из Flash можно читать только четное число байт
                }
                break;

            case MemoryType.SDCard:
                command       = (byte)0xD7;
                AddressLength = 4;
                break;
            }
            // Добавление команды
            request.Add(command);
            // Добавление адреса
            byte[] a = AppliedMath.IntToBytes(Address);
            request.AddRange(Utils.GetSubArray <byte>(a, a.Length - AddressLength));
            // Добавление числа байт
            a = AppliedMath.IntToBytes(Count);
            if (MemoryType == MemoryType.Flash || MemoryType == MemoryType.SDCard)
            {
                AddressLength = 2;
            }
            request.AddRange(Utils.GetSubArray <byte>(a, a.Length - AddressLength));
            return(request.ToArray());
        }