/// <summary> /// Attempt to load the requested can festival driver and return a DriverInstance class /// </summary> /// <param name="fileName">Load can festival driver (Windows .Net runtime version) .dll must be appeneded in this case to fileName</param> /// <returns></returns> public DriverInstance loaddriver(string fileName) { IntPtr Handle = LoadLibrary(fileName); if (Handle == IntPtr.Zero) { int errorCode = Marshal.GetLastWin32Error(); throw new Exception(string.Format("Failed to load library (ErrorCode: {0})", errorCode)); } IntPtr funcaddr; funcaddr = GetProcAddress(Handle, "canReceive_driver"); DriverInstance.canReceive_T canReceive = Marshal.GetDelegateForFunctionPointer(funcaddr, typeof(DriverInstance.canReceive_T)) as DriverInstance.canReceive_T; funcaddr = GetProcAddress(Handle, "canSend_driver"); DriverInstance.canSend_T canSend = Marshal.GetDelegateForFunctionPointer(funcaddr, typeof(DriverInstance.canSend_T)) as DriverInstance.canSend_T;; funcaddr = GetProcAddress(Handle, "canOpen_driver"); DriverInstance.canOpen_T canOpen = Marshal.GetDelegateForFunctionPointer(funcaddr, typeof(DriverInstance.canOpen_T)) as DriverInstance.canOpen_T;; funcaddr = GetProcAddress(Handle, "canClose_driver"); DriverInstance.canClose_T canClose = Marshal.GetDelegateForFunctionPointer(funcaddr, typeof(DriverInstance.canClose_T)) as DriverInstance.canClose_T;; funcaddr = GetProcAddress(Handle, "canChangeBaudRate_driver"); DriverInstance.canChangeBaudRate_T canChangeBaudRate = Marshal.GetDelegateForFunctionPointer(funcaddr, typeof(DriverInstance.canChangeBaudRate_T)) as DriverInstance.canChangeBaudRate_T;; driver = new DriverInstance(canReceive, canSend, canOpen, canClose, canChangeBaudRate); return(driver); }
public void enumerate(string drivername) { if (!ports.ContainsKey(drivername)) { ports.Add(drivername, new List <string>()); } driver = loader.loaddriver(drivername); driver.enumerate(); ports[drivername] = DriverInstance.ports; }
/// <summary> /// Open the CAN hardware device via the CanFestival driver, NB this is currently a simple version that will /// not work with drivers that have more complex bus ids so only supports com port (inc usb serial) devices for the moment /// </summary> /// <param name="comport">COM PORT number</param> /// <param name="speed">CAN Bit rate</param> /// <param name="drivername">Driver to use</param> public void open(int comport, BUSSPEED speed, string drivername) { driver = loader.loaddriver(drivername); driver.open(string.Format("COM{0}", comport), speed); driver.rxmessage += Driver_rxmessage; threadrun = true; Thread thread = new Thread(new ThreadStart(asyncprocess)); thread.Name = "CAN Open worker"; thread.Start(); }
/// <summary> /// Open the CAN hardware device via the CanFestival driver, NB this is currently a simple version that will /// not work with drivers that have more complex bus ids so only supports com port (inc usb serial) devices for the moment /// </summary> /// <param name="comport">COM PORT number</param> /// <param name="speed">CAN Bit rate</param> /// <param name="drivername">Driver to use</param> public void open(string comport, BUSSPEED speed, string drivername) { driver = loader.loaddriver(drivername); driver.open(string.Format("{0}", comport), speed); driver.rxmessage += Driver_rxmessage; threadrun = true; Thread thread = new Thread(new ThreadStart(asyncprocess)); thread.Name = "CAN Open worker"; thread.Start(); if (connectionevent != null) { connectionevent(this, new ConnectionChangedEventArgs(true)); } }