示例#1
0
        /// <summary>
        /// Получает список крейтов и их состояний (процедурой LTR_GetListOfIPCrates)
        /// </summary>
        /// <param name="tLTR">Управляющая структура TLTR</param>
        public unsafe void GetCratesStatus(_LTRNative.TLTR tLTR)
        {
            //максимальное число крейтов
            const uint max_entires = 16;
            //IP-адрес сети (192.168.1.0)
            uint ip_net = 0xC0A80100;
            //маска подсети (255.255.255.0)
            uint ip_mask = 0xFFFFFF00;
            //количество найденных крейтов, соответствующих сетевым настройкам
            uint entires_found;
            //количество записей в массиве infoArray (возвращаемое процедурой)
            uint entires_returned;
            //выделение памяти
            int structSize = Marshal.SizeOf(typeof(_LTRNative.TIPCRATE_ENTRY));
            IntPtr info_array = Marshal.AllocHGlobal(structSize * (int)max_entires);
            Marshal.StructureToPtr(new _LTRNative.TIPCRATE_ENTRY(), info_array, true);
            //запрашиваем список крейтов
            _LTRNative.LTR_GetListOfIPCrates(ref tLTR, max_entires, ip_net, ip_mask, out entires_found, out entires_returned, info_array);
            //подготавливаем контейнер для хранения списка крейтов
            _LTRNative.TIPCRATE_ENTRY[] cratesArray = new _LTRNative.TIPCRATE_ENTRY[entires_returned];
            cratesStatesList = new TIPCRATE_ENTRY_EXTEND[entires_returned];
            //заполняем массив - считываем поочередно структуры из памяти со сдвигом structSize
            //firstMemoryAddress - это количество байт после адреса info_array для последовательного чтения содержимого памяти
            int firstMemoryAddress = 0;
            for (int i = 0; i < entires_found; i++)
            {
                cratesArray[i] = (_LTRNative.TIPCRATE_ENTRY)Marshal.PtrToStructure(info_array + firstMemoryAddress, typeof(_LTRNative.TIPCRATE_ENTRY));
                //передвигаемся в памяти на struct_size байт
                firstMemoryAddress += structSize;
            }
            //освобождаем память
            Marshal.FreeHGlobal(info_array);

            //переносим полученный массив в новый
            for (int i = 0; i < entires_returned; i++)
                cratesStatesList[i] = new TIPCRATE_ENTRY_EXTEND(cratesArray[i]);
        }
示例#2
0
            public TIPCRATE_ENTRY_EXTEND(_LTRNative.TIPCRATE_ENTRY baseStruct)
            {
                ip_addr = LTRInfo.UnpackIPAddress(baseStruct.ip_addr);

                foreach (char symb in baseStruct.serial_number)
                    if (symb != '\0')
                        this.serial_number += symb;

                this.status = (LTRInfo.CrateIPStatus)baseStruct.status;
            }
示例#3
0
 /// <summary>
 /// Процедура проверки статуса операции с крейтом (модулем)
 /// </summary>
 /// <param name="errorCode">код ошибки</param>
 /// <param name="message">сообщение об ошибке</param>
 public static void CheckOperationStatus(_LTRNative.LTRERROR errorCode, string message)
 {
     if (errorCode != _LTRNative.LTRERROR.OK)
         //не получилось выполнить операцию с крейтом, вызываем исключение
         throw new Exception(String.Format("{0}: {1}", message, errorCode.ToString()));
 }