Example #1
0
        /// <summary>
        /// Открывает драйвер порта
        /// </summary>
        /// <exception cref="InvalidOperationException"></exception>
        public override void Open()
        {
            String msg;
            F_CAN_RESULT result;
            F_CAN_SETTINGS settings;

            settings = new F_CAN_SETTINGS();
            settings.acceptance_code = 0;
            settings.acceptance_mask = 0;
            settings.baud_rate = ConvertNim351.ConvertToF_CAN_BAUDRATE(this.BitRate);
            //settings.error_mask = CAN_OPMODE_ERRFRAME.CAN_ERR_CRTL | CAN_OPMODE_ERRFRAME.CAN_ERR_BUSOFF ;
            settings.error_mask = 0xFFFF;

            settings.opmode = (UInt16)Api.OpModeBuilder(this.Mode, this.FrameFormat, this.ErrorFrameEnable);

            // Инициализация библиотеки
            result = Api.fw_can_init();
            if (!Api.f_can_success(result))
            {
                msg = String.Format("Ошибка при иницилизации fwcan.dll, Error: {0}", result);
                throw new InvalidOperationException(msg);
            }

            // Открываем адаптер CAN и получаем дескриптор порта
            result = Api.fw_can_open(Api.GetPortNumber(this.PortName), out this._DeviceHandle);
            if (!Api.f_can_success(result))
            {
                msg = String.Format("Ошибка при открытии CAN адаптера, Error: {0}", result);
                throw new InvalidOperationException(msg);
            }

            // Конфигурируем контроллер
            result = Api.fw_can_set_controller_config(_DeviceHandle, ref settings);
            if (!Api.f_can_success(result))
            {
                msg = String.Format("Ошибка при записи настроек в контроллер. Error: {0}", result);
                throw new InvalidOperationException(msg);
            }

            // Конфигурируем таймауты
            result = Api.fw_can_set_timeouts(_DeviceHandle, ref _Timeouts);
            if (!Api.f_can_success(result))
            {
                msg = String.Format("Ошибка при установке таймаутов. Error: {0}", result);
                throw new InvalidOperationException(msg);
            }

            // Обновляем и проверяем статус порта
            if (!this.UpdatePortStatus())
            {
                msg = String.Format("Ошибка. При открытии порта его статус остался неизменным: {0}", 
                    this.PortStatus);
                throw new Exception(msg);
            }

            return;
        }
Example #2
0
File: Api.cs Project: serialbus/NGK
 public static extern F_CAN_RESULT fw_can_get_controller_config(
     SafeFileHandle hDev,
     out F_CAN_SETTINGS pDcb);
Example #3
0
File: Api.cs Project: serialbus/NGK
 public static extern F_CAN_RESULT fw_can_get_controller_config(
     SafeFileHandle hDev,
     out F_CAN_SETTINGS pDcb);