/// <summary> /// Преобразует состояние CAN-адаптера NIM-351 в обобщённое состояние /// </summary> /// <param name="state">Состояние CAN-адаптера NIM-351</param> /// <returns>Общее состояние для CAN-портов</returns> public static CanPortStatus ConvertToCanPortStatus(F_CAN_STATE state) { String msg; switch (state) { case F_CAN_STATE.CAN_STATE_BUS_OFF: { return(CanPortStatus.IsPassive); } case F_CAN_STATE.CAN_STATE_ERROR_ACTIVE: { return(CanPortStatus.IsActive); } case F_CAN_STATE.CAN_STATE_ERROR_PASSIVE: { return(CanPortStatus.IsActive); } case F_CAN_STATE.CAN_STATE_ERROR_WARNING: { return(CanPortStatus.IsActive); } case F_CAN_STATE.CAN_STATE_INIT: { return(CanPortStatus.IsPassive); } case F_CAN_STATE.CAN_STATE_STOPPED: { return(CanPortStatus.IsClosed); } case F_CAN_STATE.CAN_STATE_SLEEPING: { throw new NotImplementedException( "Не поддреживается производителем устройства"); } default: { msg = String.Format( "Преобразование {0} в значение CANPORTSTATUS не поддерживается", state.ToString()); throw new InvalidCastException(msg); } } }
/// <summary> /// Читает текущий статус адаптера и сравнивает с предыдущим. Если /// отличается генерирует событие и сохраняет новый статус /// </summary> /// <returns>true - если статус изменился</returns> private Boolean UpdatePortStatus() { F_CAN_STATE newStatus; Boolean result; if (this.IsOpen) { newStatus = this.GetPortStatus(); if (this._PortStatus != newStatus) { // Статус изменился. this._PortStatus = newStatus; this.OnPortChangesStatus(ConvertNim351.ConvertToCanPortStatus(this._PortStatus)); result = true; } else { result = false; } } else { // Если порт закрыт, есго статус должен быть F_CAN_STATE.CAN_STATE_STOPPED. // Если это не так, то устанавливаем и генерируем событие if (this._PortStatus == F_CAN_STATE.CAN_STATE_STOPPED) { result = false; } else { // Статус изменился. this._PortStatus = F_CAN_STATE.CAN_STATE_STOPPED; this.OnPortChangesStatus(ConvertNim351.ConvertToCanPortStatus(this._PortStatus)); result = true; } } return(result); }
public static extern F_CAN_RESULT fw_can_get_controller_state( SafeFileHandle hDev, out F_CAN_STATE pState);
/// <summary> /// Читает текущий статус адаптера и сравнивает с предыдущим. Если /// отличается генерирует событие и сохраняет новый статус /// </summary> /// <returns>true - если статус изменился</returns> private Boolean UpdatePortStatus() { F_CAN_STATE newStatus; Boolean result; if (this.IsOpen) { newStatus = this.GetPortStatus(); if (this._PortStatus != newStatus) { // Статус изменился. this._PortStatus = newStatus; this.OnPortChangesStatus(ConvertNim351.ConvertToCanPortStatus(this._PortStatus)); result = true; } else { result = false; } } else { // Если порт закрыт, есго статус должен быть F_CAN_STATE.CAN_STATE_STOPPED. // Если это не так, то устанавливаем и генерируем событие if (this._PortStatus == F_CAN_STATE.CAN_STATE_STOPPED) { result = false; } else { // Статус изменился. this._PortStatus = F_CAN_STATE.CAN_STATE_STOPPED; this.OnPortChangesStatus(ConvertNim351.ConvertToCanPortStatus(this._PortStatus)); result = true; } } return result; }
/// <summary> /// Преобразует состояние CAN-адаптера NIM-351 в обобщённое состояние /// </summary> /// <param name="state">Состояние CAN-адаптера NIM-351</param> /// <returns>Общее состояние для CAN-портов</returns> public static CanPortStatus ConvertToCanPortStatus(F_CAN_STATE state) { String msg; switch (state) { case F_CAN_STATE.CAN_STATE_BUS_OFF: { return CanPortStatus.IsPassive; } case F_CAN_STATE.CAN_STATE_ERROR_ACTIVE: { return CanPortStatus.IsActive; } case F_CAN_STATE.CAN_STATE_ERROR_PASSIVE: { return CanPortStatus.IsActive; } case F_CAN_STATE.CAN_STATE_ERROR_WARNING: { return CanPortStatus.IsActive; } case F_CAN_STATE.CAN_STATE_INIT: { return CanPortStatus.IsPassive; } case F_CAN_STATE.CAN_STATE_STOPPED: { return CanPortStatus.IsClosed; } case F_CAN_STATE.CAN_STATE_SLEEPING: { throw new NotImplementedException( "Не поддреживается производителем устройства"); } default: { msg = String.Format( "Преобразование {0} в значение CANPORTSTATUS не поддерживается", state.ToString()); throw new InvalidCastException(msg); } } }
public static extern F_CAN_RESULT fw_can_get_controller_state( SafeFileHandle hDev, out F_CAN_STATE pState);