public void OpenPort(bool iscanfd, uint arbitSpeed, uint dataSpeed) { if (iscanfd) { // -------------------- // Set CAN FD config // -------------------- status = CANDriver.XL_OpenPort(ref portHandle, appName, accessMask, ref permissionMask, 16000, XLDefine.XL_InterfaceVersion.XL_INTERFACE_VERSION_V4, XLDefine.XL_BusTypes.XL_BUS_TYPE_CAN); info += "\n\nOpen Port : " + status; XLClass.XLcanFdConf canFdConf = new XLClass.XLcanFdConf(); // arbitration bitrate canFdConf.arbitrationBitRate = arbitSpeed; canFdConf.tseg1Abr = 8; canFdConf.tseg2Abr = 7; canFdConf.sjwAbr = 1; // data bitrate canFdConf.dataBitRate = dataSpeed; canFdConf.tseg1Dbr = 4; canFdConf.tseg2Dbr = 3; canFdConf.sjwDbr = 1; if (canFdModeNoIso > 0) { canFdConf.options = (byte)XLDefine.XL_CANFD_ConfigOptions.XL_CANFD_CONFOPT_NO_ISO; } else { canFdConf.options = 0; } status = CANDriver.XL_CanFdSetConfiguration(portHandle, accessMask, canFdConf); info += "\n\nSet CAN FD Config : " + status; // Get RX event handle status = CANDriver.XL_SetNotification(portHandle, ref eventHandle, 1); info += "Set Notification : " + status; // Activate channel - with reset clock status = CANDriver.XL_ActivateChannel(portHandle, accessMask, XLDefine.XL_BusTypes.XL_BUS_TYPE_CAN, XLDefine.XL_AC_Flags.XL_ACTIVATE_RESET_CLOCK); info += "Activate Channel : " + status; // Get XL Driver configuration to get the actual setup parameter status = CANDriver.XL_GetDriverConfig(ref driverConfig); if (canFdModeNoIso > 0) { info += "CAN FD mode : NO ISO"; } else { info += "CAN FD mode : ISO"; } info += "TX Arb. BitRate : " + driverConfig.channel[txCi].busParams.dataCanFd.arbitrationBitRate + "Bd, Data Bitrate: " + driverConfig.channel[txCi].busParams.dataCanFd.dataBitRate + "Bd"; } else { // -------------------- // Set CAN config // -------------------- status = CANDriver.XL_OpenPort(ref portHandle, appName, accessMask, ref permissionMask, 1024, XLDefine.XL_InterfaceVersion.XL_INTERFACE_VERSION, XLDefine.XL_BusTypes.XL_BUS_TYPE_CAN); info += "\n\nOpen Port : " + status; //check port status = CANDriver.XL_CanRequestChipState(portHandle, accessMask); info += "\nCan Request Chip State: " + status; // Activate channel status = CANDriver.XL_ActivateChannel(portHandle, accessMask, XLDefine.XL_BusTypes.XL_BUS_TYPE_CAN, XLDefine.XL_AC_Flags.XL_ACTIVATE_NONE); info += "\nActivate Channel : " + status; // Initialize EventWaitHandle object with RX event handle provided by DLL int tempInt = -1; status = CANDriver.XL_SetNotification(portHandle, ref tempInt, 1); xlEvWaitHandle.SafeWaitHandle = new SafeWaitHandle(new IntPtr(tempInt), true); info += "\nSet Notification : " + status; // Reset time stamp clock status = CANDriver.XL_ResetClock(portHandle); info += "\nReset Clock : " + status; } }