Beispiel #1
0
        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;
            }
        }