VCI3 driver added
authorIan Tracy <iatr@hms.se>
Mon, 23 Sep 2013 10:20:07 -0400
changeset 787 e13fa74d169c
parent 785 b72a88dbc7c3
child 788 6121ebff4da6
VCI3 driver added
drivers/can_ixxat_win32/can_ixxat_win.c
drivers/can_ixxat_win32/can_ixxat_win32.def
drivers/can_ixxat_win32/can_ixxat_win32.vc10.vcxproj
drivers/can_ixxat_win32/can_ixxat_win32.vc10.vcxproj.filters
drivers/can_ixxat_win32/can_ixxat_win32.vc12.v11.suo
drivers/can_ixxat_win32/can_ixxat_win32.vc12.vcxproj
drivers/can_ixxat_win32/can_ixxat_win32.vc9.vcproj
drivers/can_ixxat_win32/ixxat.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/can_ixxat_win.c	Mon Sep 23 10:20:07 2013 -0400
@@ -0,0 +1,428 @@
+/*
+This file is part of CanFestival, a library implementing CanOpen Stack.
+
+Copyright (C): Edouard TISSERANT and Francis DUPIN
+
+See COPYING file for copyrights details.
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+
+/*
+	Wrapper Layer for CANFestival to interact with IXXAT VCI V3.X.X Drivers (vcisdk.lib)
+	Provides external references for win32 library see win32.c (CanFestival-3)
+
+	http://www.ixxat.com/download_vci_v3_en.html
+
+	Currently the VCI CAN driver for Windows supports the following IXXAT interfaces:
+
+	PC-I 04/PCI
+	iPC-I 320/PCI II
+	iPC-I 165/PCI
+	iPC-I XC16/PCI
+	iPC-I XC16/PMC
+	iPC-I XC16/PCIe
+	USB-to-CAN compact
+	USB-to-CAN II
+	CAN-IB100/PCIe
+	CAN-IB200/PCIe
+	CAN-IB120/PCIe Mini
+	CAN-IB130/PCIe 104
+	CAN-IB230/PCIe 104
+	CAN@net II/VCI
+	CANblue II
+	FR-IB100/PCIe (only in combination with VCI V2.20)
+	tinCAN 161
+
+*/
+
+
+/*************************************************************************
+**    
+**************************************************************************
+**
+**    File: can_ixxat_win32.c
+**    Summary: Wrapper to encapsulate handling of VCI3
+**	  Include vcisdk.lib	
+**
+**************************************************************************
+**************************************************************************
+**
+**  Functions:  canOpen_driver
+**              canReceive_driver
+**              TimerProc1
+**              canClose_driver
+**				canSend_drive
+**				
+**/
+
+#include <stdio.h> 
+#include "can_driver.h"
+#include "def.h"
+#include "winuser.h"
+
+//  Include a path to the following header files provided with VCI V3.X.X
+//      ...sdk/Microsoft_VisualC/inc
+#include "vcinpl.h" 
+#include "VCI3.h"  
+#include "vcitype.h"
+#include "vciguid.h"
+#include "vcierr.h" 
+
+
+
+/************************************************************************
+**   bus status polling cycle  milliseconds
+*************************************************************************/
+#define STATUS_POLLING_CYCLE 1000
+
+/*************************************************************************
+**   function prototypes
+*************************************************************************/
+void CALLBACK TimerProc1(void* lpParametar, BOOL TimerOrWaitFired );
+void Display_Error(HRESULT hResult);
+
+
+/*************************************************************************
+**   static variables 
+*************************************************************************/
+static HANDLE hDevice;       // device handle
+static LONG   lCtrlNo;       // controller number
+static HANDLE hCanCtl;       // controller handle 
+static HANDLE hCanChn;       // channel handle
+static LONG   lMustQuit = 0; // quit flag for the receive thread
+static HANDLE hTimerHandle;  // timer handle 
+
+/*************************************************************************
+**    datatypes
+*************************************************************************/
+ 
+struct sLook_up_table
+{
+	char baud_rate[20];
+	UINT8 bt0;
+	UINT8 bt1; 
+};
+
+struct sInterface_lookup_table
+{
+	char board_num[10];
+	UINT8 num;
+};
+
+/*************************************************************************
+**
+**    Function      : canOpen_driver
+**
+**    Description   : Initializes the Control and Message Channels
+**    Parameters    : s_BOARD *board		- pointer to board information
+**    Returnvalue   : (CAN_HANDLE)board		- handle for CAN controller 
+**   
+*************************************************************************/
+CAN_HANDLE __stdcall canOpen_driver(s_BOARD *board)
+{
+    HANDLE        hEnumerator;     // enumerator handle
+    VCIDEVICEINFO VCIDeviceInfo;   // device info
+	HRESULT hResult;
+	int index,  boardNum; 
+	BOOL bResult; 
+
+	struct sLook_up_table sBitRate_lookup[9] = {
+		{"10K",0x31,0x1C},
+		{"20K",0x18,0x1C},
+		{"50K",0x09,0x1C},
+        {"100K",0x04,0x1C},
+        {"125K",0x03,0x1C},
+        {"250K",0x01,0x1C},
+        {"500K",0x00,0x1C},
+        {"800K",0x00,0x16},
+        {"1M",0x00,0x14}};
+
+	struct sInterface_lookup_table sInterfaceList[4]={
+		{"vcan0",0},
+		{"vcan1",1},
+		{"vcan2",2},
+		{"vcan3",3}};
+	
+	for (boardNum =0 ; boardNum<4;boardNum++)   // determine canline selected 
+	{
+		if (strcmp(sInterfaceList[boardNum].board_num,board->busname )==0)
+			break;
+	}
+
+	for (index = 0; index < 10; ++index)       // determine baudrate 
+	{
+		if (strcmp(sBitRate_lookup[index].baud_rate,board->baudrate)==0)
+          break;
+	}
+
+	if (index == 9)
+	{
+		MSG_ERR_DRV("IXXAT::open: The given baudrate %S is invalid.", baud_rate);
+		return NULL ;
+	}
+
+
+	/*
+	**	The following can be used when the client has multiple CAN interfaces to slect from, and does not wish to use the 
+	**  selection dialog box
+	/*
+
+    /*		 
+	hResult= vciEnumDeviceOpen(&hEnumerator);
+	 // This loop will increment the index of the device list and returns the decription of the CAN line chose by user
+	if (hResult== VCI_OK)
+	{
+		for (index1=0; index1 <= sInterfaceList[boardNum].num; index1++){
+			hResult=vciEnumDeviceNext(hEnumerator, &VCIDeviceInfo);
+		}
+	}
+	printf("Device Selected: %s %s\n",VCIDeviceInfo.Manufacturer, VCIDeviceInfo.Description); 
+	if (hResult== VCI_OK)
+		hResult=vciEnumDeviceClose(hEnumerator);
+	
+	if (hResult== VCI_OK)
+   		hResult= vciDeviceOpen(&VCIDeviceInfo.VciObjectId, &hDevice);
+	*/
+
+
+
+	/* 
+	**  Display Interface Selection Dialog Box 
+	*/
+	hResult= vciDeviceOpenDlg(0, &hDevice);
+
+	/*
+	**  Establish and activate the message Channel 
+	*/
+	if (hResult== VCI_OK)
+		hResult= canChannelOpen(hDevice, 0, TRUE, &hCanChn);
+	//  Select Rx fifo size, Rx threshold, Tx fifo size, Tx threshold
+    if (hResult== VCI_OK)
+		hResult=canChannelInitialize( hCanChn, 1024, 1,128,1);  
+
+    if (hResult== VCI_OK)
+	    hResult=canChannelActivate(hCanChn, TRUE);
+
+
+	/* 
+	** Establish and Activate the Contol Channel 
+	*/
+    if (hResult== VCI_OK)
+		 hResult=canControlOpen(hDevice, 0, &hCanCtl);
+	 
+	//  Select 11 or 29 bit IDs, Select operating mode 
+    if (hResult== VCI_OK)
+		hResult=canControlInitialize( hCanCtl, CAN_OPMODE_STANDARD | CAN_OPMODE_ERRFRAME, sBitRate_lookup[index].bt0, sBitRate_lookup[index].bt1 );
+    
+	
+	//  With VCI it is possible to filter IDs, See VCI V3 manual. The following will accept all IDs
+	if (hResult== VCI_OK)
+	     hResult= canControlSetAccFilter( hCanCtl, FALSE, CAN_ACC_CODE_ALL, CAN_ACC_MASK_ALL);
+    
+	if (hResult== VCI_OK)
+	    hResult=canControlStart(hCanCtl, TRUE);
+  
+	if (hResult!=VCI_OK)
+	{
+		Display_Error(hResult);
+		return NULL; 
+	}
+
+
+	/*
+	**   Create timer to poll bus status 
+	*/  
+	bResult= CreateTimerQueueTimer(
+			& hTimerHandle,
+			NULL,
+			TimerProc1,    // Callback function
+			NULL,
+		    0,
+			STATUS_POLLING_CYCLE,
+			WT_EXECUTEINIOTHREAD
+		    );
+	
+	return (CAN_HANDLE)board;
+}
+
+
+/*************************************************************************
+**
+**    Function      : canReceive_driver 
+**
+**    Description   : Transfers RX messages to Festival application
+**    Parameters    : CAN_HANDLE inst		- handle for CAN controller 
+					  Message *m			- pointer to Message struct
+**    Returnvalue   : hResult				-   VCI_OK if success
+**   
+*************************************************************************/
+UNS8 __stdcall canReceive_driver(CAN_HANDLE inst, Message *m)
+{
+    HRESULT hResult;
+	CANMSG rCanMsg;
+	//Read message from the receive buffer 
+	hResult=canChannelReadMessage( hCanChn, INFINITE, &rCanMsg );
+	if (hResult !=VCI_OK )
+		return 1; 		
+
+	m->cob_id =  rCanMsg.dwMsgId;   
+	m->len = rCanMsg.uMsgInfo.Bits.dlc;
+	m->rtr = rCanMsg.uMsgInfo.Bits.rtr;
+	   if (m->rtr == NOT_A_REQUEST)
+	    	memcpy(m->data, rCanMsg.abData , m->len);
+	return (UNS8)hResult; 
+}
+
+/*************************************************************************
+**
+**    Function      : canSend_driver 
+**
+**    Description   : Transfers RX messages to Interface 
+**    Parameters    : CAN_HANDLE inst		- handle for CAN controller 
+**					  Message *m			- pointer to Message struct
+**    Returnvalue   : hResult				-   VCI_OK if success
+**   
+*************************************************************************/
+UNS8 __stdcall canSend_driver(CAN_HANDLE inst, Message const *m)
+{
+   	HRESULT hResult;
+	CANMSG sCanMsg; 
+
+	sCanMsg.uMsgInfo.Bytes.bType  = CAN_MSGTYPE_DATA;                
+	sCanMsg.uMsgInfo.Bytes.bFlags = CAN_MAKE_MSGFLAGS(8,0,0,0,0);
+	sCanMsg.uMsgInfo.Bits.srr     = 0;
+	sCanMsg.dwTime   = 0;
+	sCanMsg.dwMsgId  = m->cob_id ;                         
+	memcpy(sCanMsg.abData,m->data, m->len);	                     
+	sCanMsg.uMsgInfo.Bits.dlc = m->len;     
+	sCanMsg.uMsgInfo.Bits.rtr=m->rtr; 
+
+	// write the CAN message into the transmit FIFO without waiting for transmission
+	 hResult = canChannelPostMessage(hCanChn, &sCanMsg);
+
+	 return (UNS8)hResult; 
+}
+
+
+
+
+/*************************************************************************
+**
+**    Function      : canClose_driver 
+**
+**    Description   : Close the message and control channel
+**    Parameters    : CAN_HANDLE inst		- handle for CAN controller 
+**    Returnvalue   : 
+**   
+*************************************************************************/
+ int __stdcall canClose_driver(CAN_HANDLE inst)
+   {
+	printf("CAN close \n");
+	canControlReset(hCanCtl);
+	canChannelClose(hCanChn);
+	canControlClose(hCanCtl);
+	vciDeviceClose(hDevice);
+	DeleteTimerQueueTimer(NULL,hTimerHandle,NULL); 
+   return 1;
+   }
+
+ 
+/*************************************************************************
+**
+**    Function      : canChangeBaudRate_driver 
+**
+**    Description   : Changes the Baudrate of the interface (not supported) 
+**    Parameters    : 
+**    Returnvalue   : 
+**   
+*************************************************************************/
+   UNS8 __stdcall canChangeBaudRate_driver( CAN_HANDLE fd, char* baud)
+	{
+	//printf("canChangeBaudRate not yet supported by this driver\n");
+	return 0;
+	}
+
+
+ /*************************************************************************
+**
+**    Function      : TimerProc1 
+**
+**    Description   :  Basic Polling of the  the canline status,
+**					   print debug message for buffer overflow, and BUSOFF condition
+**    Parameters    :  void* lpParametar, BOOL TimerOrWaitFired
+**    Returnvalue   :  none 
+**   
+*************************************************************************/
+   void CALLBACK TimerProc1(void* lpParametar, BOOL TimerOrWaitFired )
+   {
+	   HRESULT hResult;
+	   CANLINESTATUS canStatus;
+	  
+
+	   /* Establish CAN controller status */
+	   hResult = canControlGetStatus ( hCanCtl, &canStatus);
+	   if (hResult!=VCI_OK)
+		   printf("Error did not read CAN STATUS\n"); 
+	   switch ( canStatus.dwStatus)
+	   {
+		   case CAN_STATUS_OVRRUN:
+			   printf("Overrun of the recieve buffer\n");
+			   break;
+		   case CAN_STATUS_ERRLIM:
+				printf("Overrun of the CAN controller error counter \n");
+			   break;
+		   case CAN_STATUS_BUSOFF:
+				printf("CAN status: BUSOFF");
+			   break; 
+		   case CAN_STATUS_ININIT:				
+			   break; 
+		   case (CAN_STATUS_BUSOFF)+(CAN_STATUS_ININIT):
+			   printf("CAN status: BUSOFF\n");
+			    
+	/* 
+	** Bus off recovery should come after a software reset, and 128*11 recessive bits.  
+	** This can only happen when an Error-Active node sends an active error flag,
+	** and other nodes respond with Error Echo Flag
+	*/
+			   break;
+		   default: 
+			   break; 
+	   }
+   };
+
+
+ /*************************************************************************
+**
+**    Function      : Display_Error
+**
+**    Description   :  Display the CANline Error
+**    Parameters    :  HANDLE hResult
+**    Returnvalue   :  none 
+**   
+*************************************************************************/
+	void Display_Error(HRESULT hResult )
+   {
+	char szError[VCI_MAX_ERRSTRLEN];
+	if (hResult != NO_ERROR)
+	{
+		if (hResult == -1)
+			hResult = GetLastError();
+		szError[0] = 0;
+		vciFormatError(hResult, szError, sizeof(szError));
+		printf("Error Establishing CAN channel, Error Code: %s\n",szError); 
+	}
+   }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/can_ixxat_win32.def	Mon Sep 23 10:20:07 2013 -0400
@@ -0,0 +1,30 @@
+; This file is part of CanFestival, a library implementing CanOpen Stack. 
+;
+; CanFestival Copyright (C): Edouard TISSERANT and Francis DUPIN
+; CanFestival Win32 port Copyright (C) 2007 Leonid Tochinski, ChattenAssociates, Inc.
+;
+; See COPYING file for copyrights details.
+; 
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2.1 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+LIBRARY can_ixxat_win32
+
+EXPORTS
+   canReceive_driver
+   canSend_driver
+   canOpen_driver
+   canClose_driver
+   canChangeBaudRate_driver
+
--- a/drivers/can_ixxat_win32/can_ixxat_win32.vc10.vcxproj	Tue May 14 20:22:06 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>can_ixxat_win32</ProjectName>
-    <ProjectGuid>{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}</ProjectGuid>
-    <RootNamespace>can_ixxat_win32</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../Debug\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../Release\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <ProgramDataBaseFileName>$(OutDir)$(ProjectName).pdb</ProgramDataBaseFileName>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>vci11un6.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
-      <ModuleDefinitionFile>IXXAT.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <AdditionalDependencies>vci11un6.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
-      <ModuleDefinitionFile>IXXAT.def</ModuleDefinitionFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="IXXAT.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="async_access_que.h" />
-    <ClInclude Include="autoreleasecs.h" />
-    <ClInclude Include="Vci2.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="IXXAT.def" />
-  </ItemGroup>
-  <ItemGroup>
-    <Library Include="Vci11un6.lib" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/drivers/can_ixxat_win32/can_ixxat_win32.vc10.vcxproj.filters	Tue May 14 20:22:06 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="IXXAT.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="async_access_que.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="autoreleasecs.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="Vci2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="IXXAT.def">
-      <Filter>Source Files</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <Library Include="Vci11un6.lib" />
-  </ItemGroup>
-</Project>
\ No newline at end of file
Binary file drivers/can_ixxat_win32/can_ixxat_win32.vc12.v11.suo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/can_ixxat_win32.vc12.vcxproj	Mon Sep 23 10:20:07 2013 -0400
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>can_ixxat_win32</ProjectName>
+    <ProjectGuid>{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}</ProjectGuid>
+    <RootNamespace>can_ixxat_win32</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>11.0.51106.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>../../Debug\</OutDir>
+    <IntDir>Debug\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>../../Release\</OutDir>
+    <IntDir>Release\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../include;../../include/win32;C:\Program Files\IXXAT\VCI 3.5\sdk\Microsoft_VisualC\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>vcisdk.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+      <ModuleDefinitionFile>can_ixxat_win32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>C:\Program Files\IXXAT\VCI 3.5\sdk\Microsoft_VisualC\lib\ia32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>C:\Program Files\IXXAT\VCI 3.5\sdk\Microsoft_VisualC\inc;../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CASA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PrecompiledHeader />
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>vcisdk.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+      <ModuleDefinitionFile>can_ixxat_win32.def</ModuleDefinitionFile>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Windows</SubSystem>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+      <AdditionalLibraryDirectories>C:\Program Files\IXXAT\VCI 3.5\sdk\Microsoft_VisualC\lib\ia32;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="async_access_que.h" />
+    <ClInclude Include="autoreleasecs.h" />
+    <ClInclude Include="Vci2.h" />
+    <ClInclude Include="vci3.h" />
+    <ClInclude Include="vciCtrlType.h" />
+    <ClInclude Include="vciIdType.h" />
+    <ClInclude Include="vcinpl.h" />
+    <ClInclude Include="vcitype.h" />
+    <ClInclude Include="vciver.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="IXXAT.def" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="can_ixxat_win.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
--- a/drivers/can_ixxat_win32/can_ixxat_win32.vc9.vcproj	Tue May 14 20:22:06 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="windows-1251"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="can_ixxat_win32"
-	ProjectGUID="{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}"
-	RootNamespace="can_ixxat_win32"
-	Keyword="Win32Proj"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="../../Debug"
-			IntermediateDirectory="Debug"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="../../include;../../include/win32"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="false"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="vci11un6.lib"
-				OutputFile="$(OutDir)/$(ProjectName).dll"
-				LinkIncremental="2"
-				ModuleDefinitionFile="IXXAT.def"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
-				SubSystem="2"
-				OptimizeForWindows98="0"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(OutDir)/$(ProjectName).lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="../../Release"
-			IntermediateDirectory="Release"
-			ConfigurationType="2"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../../include;../../include/win32"
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="false"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="vci11un6.lib"
-				OutputFile="$(OutDir)/$(ProjectName).dll"
-				LinkIncremental="1"
-				ModuleDefinitionFile="IXXAT.def"
-				GenerateDebugInformation="true"
-				SubSystem="2"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				OptimizeForWindows98="0"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(OutDir)/$(ProjectName).lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath=".\IXXAT.cpp"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;inc;xsd"
-			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
-			>
-			<File
-				RelativePath=".\async_access_que.h"
-				>
-			</File>
-			<File
-				RelativePath=".\autoreleasecs.h"
-				>
-			</File>
-			<File
-				RelativePath=".\Vci2.h"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
-			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
-			>
-		</Filter>
-		<File
-			RelativePath=".\IXXAT.def"
-			>
-		</File>
-		<File
-			RelativePath=".\Vci11un6.lib"
-			>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/drivers/can_ixxat_win32/ixxat.cpp	Tue May 14 20:22:06 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,417 +0,0 @@
-/*
-This file is part of CanFestival, a library implementing CanOpen Stack.
-
-CanFestival Copyright (C): Edouard TISSERANT and Francis DUPIN
-CanFestival Win32 port Copyright (C) 2007 Leonid Tochinski, ChattenAssociates, Inc.
-
-See COPYING file for copyrights details.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-// pragma based message
-// http://www.codeproject.com/macro/location_pragma.asp
-#define __STR2__(x) #x
-#define __STR1__(x) __STR2__(x)
-#define __LOC2__ __FILE__ "("__STR1__(__LINE__)") : "
-
-
-#pragma message("*********************************************************************************")
-#pragma message("  NOTE: IXXAT Win32 drivers and API should be installed in order to build this project!")
-#pragma message(__LOC2__ "See IXXAT.Cpp header for details.")
-#pragma message("*********************************************************************************")
-
-
-// IXXAT adapter driver for CanFestival-3 Win32 port
-//
-// Notes
-//--------------------------------------------
-// For building of this project you will need 
-// the following IXXAT API files
-// Vci2.h
-// Vci11un6.lib
-//
-// IXXAT Win32 drivers and API can be downloaded from
-// http://www.ixxat.com/download_vci_en,7547,5873.html
-//
-// Copy Vci2.h & Vci11un6.lib files to can_ixxat_win32 folder of add path to them in Project settings.
-
-
-#include <stdio.h>
-extern "C" {
-#include "applicfg.h"
-#include "can_driver.h"
-#include "def.h"
-}
-#include "VCI2.h"
-#include "async_access_que.h"
-
-#define CAN_NUM 0
-
-class IXXAT
-   {
-   public:
-      class error
-        {
-        };
-      IXXAT(s_BOARD *board);
-      ~IXXAT();
-      bool send(const Message *m);
-      bool receive(Message *m);
-
-	  static bool isDriverClosed() {return m_driverClosed;}
-   private:
-      bool open(int board_number, const char* baud_rate);
-      bool close();
-      void receive_queuedata(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj);
-      // VCI2 handler      
-      static void VCI_CALLBACKATTR message_handler(char *msg_str);
-      static void VCI_CALLBACKATTR receive_queuedata_handler(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ* p_obj);
-      static void VCI_CALLBACKATTR exception_handler(VCI_FUNC_NUM func_num, INT32 err_code, UINT16 ext_err, char* err_str);
-      
-      static void CALLBACK canBusWatchdog(HWND hwnd, UINT msg, UINT_PTR idEvent, DWORD dwTime);
-      void watchdog();
-   private:
-      UINT16 m_BoardHdl;
-      UINT16 m_TxQueHdl;
-      UINT16 m_RxQueHdl;
-      async_access_que<VCI_CAN_OBJ> m_RX_Que;
-      static IXXAT* m_callbackPtr;
-
-	  static bool m_driverClosed;
-      static UINT_PTR m_watchdogTimerId;
-      static const unsigned int CAN_BUS_WATCHDOG_INTERVAL_MSEC = 10000;
-
-      /** Bitmask inside sts from VCI_ReadCanStatus() that defines the can bus off state.*/
-      static const unsigned char STS_CAN_BUS_OFF = 0x80;
-
-      /** Bitmask inside sts from VCI_ReadCanStatus() that defines the can data overrun state.*/
-      static const unsigned char STS_CAN_DATA_OVERRUN = 0x20;
-
-      /** Bitmask inside sts from VCI_ReadCanStatus() that defines the remote queue overrun state.*/
-      static const unsigned char STS_REMOTE_QUEUE_OVERRUN = 0x04;
-   };
-
-IXXAT *IXXAT::m_callbackPtr = NULL;
-
-UINT_PTR IXXAT::m_watchdogTimerId = 0;
-
-bool IXXAT::m_driverClosed = false;
-
-IXXAT::IXXAT(s_BOARD *board) : m_BoardHdl(0xFFFF),
-                               m_TxQueHdl(0xFFFF),
-                               m_RxQueHdl(0xFFFF)
-                               
-   {
-   if (!board)
-      {
-      close();
-      throw error();
-      }
-
-   long board_number = 0;
-
-   if (board->busname)
-      {
-      board_number = atol(board->busname);
-      }
-
-   if (!open(board_number, board->baudrate))
-      {
-      close();
-      throw error();
-      }
-   m_callbackPtr = this;
-   }
-
-IXXAT::~IXXAT()
-   {
-   close();
-   m_callbackPtr = 0;
-   }
-
-bool IXXAT::send(const Message *m)
-   {
-   if (m_BoardHdl == 0xFFFF)
-      return true; // true -> NOT OK
-   long res = VCI_ERR;
-   if (m->rtr == NOT_A_REQUEST)
-      res = VCI_TransmitObj(m_BoardHdl, m_TxQueHdl, m->cob_id, m->len, const_cast<unsigned char*>(m->data));
-   else
-      res = VCI_RequestObj(m_BoardHdl, m_TxQueHdl, m->cob_id, m->len);
-
-   return (res == VCI_OK);
-   }
-
-
-bool IXXAT::receive(Message *m)
-   {
-   if (m_BoardHdl == 0xFFFF)
-      return false;
-   VCI_CAN_OBJ obj;
-   if (m_RX_Que.extract_top(obj))
-      {
-      m->cob_id = static_cast<UNS16>(obj.id); //valid for 11Bit ids
-      m->len = obj.len;
-      m->rtr = (obj.rtr == VCI_RX_BUF) ? NOT_A_REQUEST : REQUEST;
-      if (m->rtr == NOT_A_REQUEST)
-         ::memcpy(m->data, obj.a_data, m->len);
-      return true;
-      }
-   return false;
-   }
-
-bool IXXAT::open(int board_number, const char* baud_rate)
-   {
-   // check, if baudrate is supported
-   struct IXXAT_baud_rate_param 
-     { 
-     UINT8  bt0; 
-     UINT8  bt1;
-     };
-   struct IXXAT_look_up_table
-     {
-     char baud_rate[20];
-     IXXAT_baud_rate_param bt;
-     };
-   static const IXXAT_look_up_table br_lut[] = {
-               {"10K",{VCI_10KB}},
-               {"20K",{VCI_20KB}},
-               {"50K",{VCI_50KB}},
-               {"100K",{VCI_100KB}},
-               {"125K",{VCI_125KB}},
-               {"250K",{VCI_250KB}},
-               {"500K",{VCI_500KB}},
-               {"800K",{VCI_800KB}},
-               {"1M",{VCI_1000KB}}
-               };
-   static const long br_lut_size = sizeof (br_lut)/sizeof(IXXAT_look_up_table);
-   int index;
-   for (index = 0; index < br_lut_size; ++index)
-       {
-       if (::strcmp(br_lut[index].baud_rate,baud_rate)==0)
-          break;
-       }
-   if (index == br_lut_size)
-   {
-      MSG_ERR_DRV("IXXAT::open: The given baudrate %S is invalid.", baud_rate);
-      return false;
-   }
-   // close existing board   
-   close();
-   // init IXXAT board
-   long res = VCI2_PrepareBoard(   0,                         // board type, unused in VCI2
-                                   board_number,              // unique board index, see XAT_EnumHwEntry() and XAT_GetConfig()
-                                   NULL,                      // pointer to buffer for additional info 
-                                   0,                         // length of additional info buffer
-                                   message_handler,           // pointer to msg-callbackhandler
-                                   receive_queuedata_handler, // pointer to receive-callbackhandler
-                                   exception_handler);        // pointer to exception-callbackhandler
-   if (res < 0)
-   {
-      MSG_ERR_DRV("IXXAT::open: VCI2_PrepareBoard failed with code '%d'.", res);
-      return false;
-   }
-   m_BoardHdl = (UINT16)res;
-
-   VCI_ResetBoard(m_BoardHdl);
-   
-   // init CAN parameters
-   
-   // initialize CAN-Controller
-   res = VCI_InitCan(m_BoardHdl, CAN_NUM, br_lut[index].bt.bt0,br_lut[index].bt.bt1, VCI_11B);
-   
-   //  definition of Acceptance-Mask (define to receive all IDs)
-   res = VCI_SetAccMask(m_BoardHdl, CAN_NUM, 0x0UL, 0x0UL);
-
-   // definition of Transmit Queue
-   res = VCI_ConfigQueue(m_BoardHdl, CAN_NUM, VCI_TX_QUE, 100 , 0, 0, 0,  &m_TxQueHdl);
-   
-   //  definition of Receive Queue (interrupt mode)
-   res = VCI_ConfigQueue(m_BoardHdl, CAN_NUM, VCI_RX_QUE, 500, 1, 0, 100,  &m_RxQueHdl);
-
-   //  assign the all IDs to the Receive Queue
-   res = VCI_AssignRxQueObj(m_BoardHdl, m_RxQueHdl ,VCI_ACCEPT, 0, 0);
-
-   //  And now start the CAN
-   res = VCI_StartCan(m_BoardHdl, CAN_NUM);
-
-   //Start CAN Bus-Off watchdog
-   m_watchdogTimerId = SetTimer(NULL, NULL, IXXAT::CAN_BUS_WATCHDOG_INTERVAL_MSEC, IXXAT::canBusWatchdog);
-   
-   m_driverClosed = false;
-
-   return true;
-   }
-
-bool IXXAT::close()
-   {
-	m_driverClosed = true;
-   if (m_BoardHdl == 0xFFFF)
-      return true;
-   VCI_ResetBoard(m_BoardHdl);   
-   VCI_CancelBoard(m_BoardHdl);
-   m_BoardHdl = 
-   m_TxQueHdl = 
-   m_RxQueHdl = 0xFFFF;
-   return true;
-   }
-
-void IXXAT::receive_queuedata(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ *p_obj)
-   {
-   for (int i = 0; i < count; ++i)
-       m_RX_Que.append(p_obj[i]); // can packet
-   }
-
-void VCI_CALLBACKATTR IXXAT::receive_queuedata_handler(UINT16 que_hdl, UINT16 count, VCI_CAN_OBJ *p_obj)
-  {
-   if (m_callbackPtr != NULL)
-      m_callbackPtr->receive_queuedata(que_hdl, count, p_obj);
-  }
-
-void VCI_CALLBACKATTR IXXAT::message_handler(char *msg_str)
-  {
-  MSG_ERR_DRV("IXXAT Message: [%S]", msg_str);
-  }
-
-void VCI_CALLBACKATTR IXXAT::exception_handler(VCI_FUNC_NUM func_num, INT32 err_code, UINT16 ext_err, char* err_str)
-  {
-  static const char* Num2Function[] =
-    {
-    "VCI_Init",
-    "VCI_Searchboard",
-    "VCI_Prepareboard",
-    "VCI_Cancel_board",
-    "VCI_Testboard",
-    "VCI_ReadBoardInfo",
-    "VCI_ReadBoardStatus",
-    "VCI_Resetboard",
-    "VCI_ReadCANInfo",
-    "VCI_ReadCANStatus",
-    "VCI_InitCAN",
-    "VCI_SetAccMask",
-    "VCI_ResetCAN",
-    "VCI_StartCAN",
-    "VCI_ResetTimeStamps",
-    "VCI_ConfigQueue",
-    "VCI_AssignRxQueObj",
-    "VCI_ConfigBuffer",
-    "VCI_ReconfigBuffer",
-    "VCI_ConfigTimer",
-    "VCI_ReadQueStatus",
-    "VCI_ReadQueObj",
-    "VCI_ReadBufStatus",
-    "VCI_ReadBufData",
-    "VCI_TransmitObj",
-    "VCI_RequestObj",
-    "VCI_UpdateBufObj",
-    "VCI_CciReqData"
-    };
-
-  MSG_ERR_DRV("IXXAT Exception: %S (%i / %u) [%S]", Num2Function[func_num], err_code, ext_err, err_str);
-  }
-
-  void IXXAT::watchdog()
-  {
-    VCI_CAN_STS sts;
-    long res = VCI_ReadCanStatus(m_BoardHdl, CAN_NUM, &sts);
-
-    if (res < 0)
-    {
-      MSG_ERR_DRV("IXXAT canBusWatchdog: ERROR: Reading the can state failed!");
-    }
-    else
-    {
-      if (sts.sts & (STS_CAN_BUS_OFF | STS_CAN_DATA_OVERRUN | STS_REMOTE_QUEUE_OVERRUN))
-      {
-        if (sts.sts & STS_CAN_BUS_OFF)
-        {
-          MSG_ERR_DRV("IXXAT canBusWatchdog: CAN bus off detected!");
-        }
-        if (sts.sts & STS_CAN_DATA_OVERRUN)
-        {
-          MSG_ERR_DRV("IXXAT canBusWatchdog: CAN data overrun detected!");
-        }
-        if (sts.sts & STS_REMOTE_QUEUE_OVERRUN)
-        {
-          MSG_ERR_DRV("IXXAT canBusWatchdog: Remote queue overrun detected!");
-        }
-
-        res = VCI_ResetCan(m_BoardHdl, CAN_NUM);
-        if (res <= 0)
-        {
-          MSG_ERR_DRV("IXXAT canBusWatchdog: ERROR: Resetting the can module failed with code '%d'!", res);
-        }
-
-        res = VCI_StartCan(m_BoardHdl, CAN_NUM);
-        if (res <= 0)
-        {
-          MSG_ERR_DRV("IXXAT canBusWatchdog: ERROR: Restaring the can module failed with code '%d'!", res);
-        }
-      }
-    }
-
-    if (SetTimer(NULL, m_watchdogTimerId, IXXAT::CAN_BUS_WATCHDOG_INTERVAL_MSEC, IXXAT::canBusWatchdog) == 0)
-    {
-      MSG_ERR_DRV("IXXAT canBusWatchdog: ERROR: Creation of the watchdog timer failed!");
-    }
-  }
-
-void CALLBACK IXXAT::canBusWatchdog(HWND hwnd, UINT msg, UINT_PTR idEvent, DWORD dwTime)
-{
-   if (m_callbackPtr != NULL)
-      m_callbackPtr->watchdog();
-}
-
-//------------------------------------------------------------------------
-extern "C"
-   UNS8 __stdcall canReceive_driver(CAN_HANDLE inst, Message *m)
-   {
-	 if (IXXAT::isDriverClosed()) return 0;
-     return reinterpret_cast<IXXAT*>(inst)->receive(m) ? 0 : 1;
-   }
-                            
-extern "C"
-   UNS8 __stdcall canSend_driver(CAN_HANDLE inst, Message const *m)
-   {
-	 if (IXXAT::isDriverClosed()) return 0;
-     return reinterpret_cast<IXXAT*>(inst)->send(m) ? 0 : 1;
-   }
-
-extern "C"
-   CAN_HANDLE __stdcall canOpen_driver(s_BOARD *board)
-   {
-   try
-      {
-      return new IXXAT(board);
-      }
-   catch (IXXAT::error&)
-      {
-      return 0;
-      }
-   }
-
-extern "C"
-   int __stdcall canClose_driver(CAN_HANDLE inst)
-   {
-   delete reinterpret_cast<IXXAT*>(inst);
-   return 1;
-   }
-   
-extern "C"
-   UNS8 __stdcall canChangeBaudRate_driver( CAN_HANDLE fd, char* baud)
-	{
-	//printf("canChangeBaudRate not yet supported by this driver\n");
-	return 0;
-	}