*** empty log message ***
authorleonid
Wed, 08 Aug 2007 01:43:02 +0200
changeset 252 b0dd37421d28
parent 251 cab66ef3e68e
child 253 bf58ce630b88
*** empty log message ***
CanFestival-3.vc8.sln
CanFestival-3.vc8.vcproj
drivers/can_ixxat_win32/async_access_que.h
drivers/can_ixxat_win32/autoreleasecs.h
drivers/can_ixxat_win32/can_ixxat_win32.vc8.vcproj
drivers/can_ixxat_win32/ixxat.cpp
drivers/can_ixxat_win32/ixxat.def
src/pdo.c
src/sync.c
src/win32/CanFestival-3.def
--- a/CanFestival-3.vc8.sln	Tue Aug 07 17:18:03 2007 +0200
+++ b/CanFestival-3.vc8.sln	Wed Aug 08 01:43:02 2007 +0200
@@ -1,64 +1,53 @@
 
 Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual C++ Express 2005
+# Visual Studio 2005
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CanFestival-3", "CanFestival-3.vc8.vcproj", "{50EF2507-9B87-4525-8B19-80EB42E67079}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "can_uvccm_win32", "drivers\can_uvccm_win32\can_uvccm_win32.vcproj", "{39E3300A-29B4-4AA7-AF62-3B181FC26155}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win32test", "examples\win32test\win32test.vcproj", "{BD8B1FE1-89CD-4F89-8275-0F553FA71059}"
+	ProjectSection(ProjectDependencies) = postProject
+		{50EF2507-9B87-4525-8B19-80EB42E67079} = {50EF2507-9B87-4525-8B19-80EB42E67079}
+		{39E3300A-29B4-4AA7-AF62-3B181FC26155} = {39E3300A-29B4-4AA7-AF62-3B181FC26155}
+		{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB} = {8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}
+	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "can_peak_win32", "drivers\can_peak_win32\can_peak_win32.vcproj", "{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestMasterSlave", "examples\TestMasterSlave\TestMasterSlave.vcproj", "{B51A176D-5320-4534-913B-3025CED5B27E}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "can_ixxat_win32", "drivers\can_ixxat_win32\can_ixxat_win32.vc8.vcproj", "{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug UNICODE|Win32 = Debug UNICODE|Win32
 		Debug|Win32 = Debug|Win32
-		Release UNICODE|Win32 = Release UNICODE|Win32
 		Release|Win32 = Release|Win32
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{50EF2507-9B87-4525-8B19-80EB42E67079}.Debug UNICODE|Win32.ActiveCfg = Debug UNICODE|Win32
-		{50EF2507-9B87-4525-8B19-80EB42E67079}.Debug UNICODE|Win32.Build.0 = Debug UNICODE|Win32
 		{50EF2507-9B87-4525-8B19-80EB42E67079}.Debug|Win32.ActiveCfg = Debug|Win32
 		{50EF2507-9B87-4525-8B19-80EB42E67079}.Debug|Win32.Build.0 = Debug|Win32
-		{50EF2507-9B87-4525-8B19-80EB42E67079}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
-		{50EF2507-9B87-4525-8B19-80EB42E67079}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
 		{50EF2507-9B87-4525-8B19-80EB42E67079}.Release|Win32.ActiveCfg = Release|Win32
 		{50EF2507-9B87-4525-8B19-80EB42E67079}.Release|Win32.Build.0 = Release|Win32
-		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Debug UNICODE|Win32.ActiveCfg = Debug UNICODE|Win32
-		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Debug UNICODE|Win32.Build.0 = Debug UNICODE|Win32
 		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Debug|Win32.ActiveCfg = Debug|Win32
 		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Debug|Win32.Build.0 = Debug|Win32
-		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
-		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
 		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Release|Win32.ActiveCfg = Release|Win32
 		{39E3300A-29B4-4AA7-AF62-3B181FC26155}.Release|Win32.Build.0 = Release|Win32
-		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Debug UNICODE|Win32.ActiveCfg = Debug|Win32
-		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Debug UNICODE|Win32.Build.0 = Debug|Win32
 		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Debug|Win32.ActiveCfg = Debug|Win32
 		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Debug|Win32.Build.0 = Debug|Win32
-		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Release UNICODE|Win32.ActiveCfg = Release|Win32
-		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Release UNICODE|Win32.Build.0 = Release|Win32
 		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Release|Win32.ActiveCfg = Release|Win32
 		{BD8B1FE1-89CD-4F89-8275-0F553FA71059}.Release|Win32.Build.0 = Release|Win32
-		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Debug UNICODE|Win32.ActiveCfg = Debug UNICODE|Win32
-		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Debug UNICODE|Win32.Build.0 = Debug UNICODE|Win32
 		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Debug|Win32.Build.0 = Debug|Win32
-		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
-		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
 		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Release|Win32.ActiveCfg = Release|Win32
 		{732EC5B6-C6F1-4783-9BC8-924FFF67BF5A}.Release|Win32.Build.0 = Release|Win32
-		{B51A176D-5320-4534-913B-3025CED5B27E}.Debug UNICODE|Win32.ActiveCfg = Debug|Win32
-		{B51A176D-5320-4534-913B-3025CED5B27E}.Debug UNICODE|Win32.Build.0 = Debug|Win32
 		{B51A176D-5320-4534-913B-3025CED5B27E}.Debug|Win32.ActiveCfg = Debug|Win32
 		{B51A176D-5320-4534-913B-3025CED5B27E}.Debug|Win32.Build.0 = Debug|Win32
-		{B51A176D-5320-4534-913B-3025CED5B27E}.Release UNICODE|Win32.ActiveCfg = Release|Win32
-		{B51A176D-5320-4534-913B-3025CED5B27E}.Release UNICODE|Win32.Build.0 = Release|Win32
 		{B51A176D-5320-4534-913B-3025CED5B27E}.Release|Win32.ActiveCfg = Release|Win32
 		{B51A176D-5320-4534-913B-3025CED5B27E}.Release|Win32.Build.0 = Release|Win32
+		{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}.Debug|Win32.Build.0 = Debug|Win32
+		{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}.Release|Win32.ActiveCfg = Release|Win32
+		{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
--- a/CanFestival-3.vc8.vcproj	Tue Aug 07 17:18:03 2007 +0200
+++ b/CanFestival-3.vc8.vcproj	Wed Aug 08 01:43:02 2007 +0200
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="Windows-1252"?>
 <VisualStudioProject
 	ProjectType="Visual C++"
-	Version="8,00"
+	Version="8.00"
 	Name="CanFestival-3"
 	ProjectGUID="{50EF2507-9B87-4525-8B19-80EB42E67079}"
+	RootNamespace="CanFestival-3"
 	Keyword="Win32Proj"
 	>
 	<Platforms>
@@ -23,6 +24,9 @@
 			CharacterSet="2"
 			>
 			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
 				Name="VCCustomBuildTool"
 			/>
 			<Tool
@@ -94,7 +98,6 @@
 			OutputDirectory="Release"
 			IntermediateDirectory="Release"
 			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 			CharacterSet="2"
 			>
 			<Tool
@@ -162,150 +165,6 @@
 				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
-		<Configuration
-			Name="Release UNICODE|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="./include;./include/win32"
-				PreprocessorDefinitions="WIN32;NDEBUG"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="false"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				ModuleDefinitionFile="./src/win32/CanFestival-3.def"
-				OptimizeForWindows98="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug UNICODE|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories="./include;./include/win32"
-				PreprocessorDefinitions="WIN32;UNICODE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				ProgramDataBaseFileName="$(IntDir)/CanFestival-3.pdb"
-				WarningLevel="3"
-				Detect64BitPortabilityProblems="false"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				ModuleDefinitionFile="./src/win32/CanFestival-3.def"
-				GenerateDebugInformation="true"
-				EnableCOMDATFolding="1"
-				OptimizeForWindows98="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCWebDeploymentTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
 	</Configurations>
 	<References>
 	</References>
@@ -316,6 +175,10 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
+				RelativePath=".\src\dcf.c"
+				>
+			</File>
+			<File
 				RelativePath=".\src\lifegrd.c"
 				>
 			</File>
@@ -370,10 +233,6 @@
 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 			>
 			<File
-				RelativePath=".\include\applicfg.h"
-				>
-			</File>
-			<File
 				RelativePath=".\include\can.h"
 				>
 			</File>
@@ -382,38 +241,22 @@
 				>
 			</File>
 			<File
-				RelativePath=".\include\config.h"
-				>
-			</File>
-			<File
 				RelativePath=".\include\data.h"
 				>
 			</File>
 			<File
+				RelativePath=".\include\dcf.h"
+				>
+			</File>
+			<File
 				RelativePath=".\include\def.h"
 				>
 			</File>
 			<File
-				RelativePath=".\include\led.h"
-				>
-			</File>
-			<File
-				RelativePath=".\include\led_driver.h"
-				>
-			</File>
-			<File
 				RelativePath=".\include\lifegrd.h"
 				>
 			</File>
 			<File
-				RelativePath=".\include\lss.h"
-				>
-			</File>
-			<File
-				RelativePath=".\include\lss_driver.h"
-				>
-			</File>
-			<File
 				RelativePath=".\include\nmtMaster.h"
 				>
 			</File>
@@ -422,14 +265,6 @@
 				>
 			</File>
 			<File
-				RelativePath=".\include\nvram.h"
-				>
-			</File>
-			<File
-				RelativePath=".\include\nvram_driver.h"
-				>
-			</File>
-			<File
 				RelativePath=".\include\objacces.h"
 				>
 			</File>
@@ -494,13 +329,6 @@
 					Name="VCCustomBuildTool"
 				/>
 			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug UNICODE|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/async_access_que.h	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,45 @@
+// thread safe que
+// Tochinski Leonid, Chatten Associayes, Inc.
+#pragma once
+#include <deque>
+#include "AutoReleaseCS.h"
+
+template<typename type>
+class async_access_que
+   {
+   public:
+      async_access_que()
+         {
+         ::InitializeCriticalSection(&m_cs);
+         }
+      ~async_access_que()
+         {
+         ::DeleteCriticalSection(&m_cs);
+         }
+
+      void append(const type& data)
+         {
+         AutoReleaseCS acs(m_cs);
+         m_data.push_back(data);
+         }
+
+      bool extract_top(type& data)
+         {
+         AutoReleaseCS acs(m_cs);
+         if (m_data.empty())
+            return false;
+          data = m_data.front();
+          m_data.pop_front();
+         return true;
+         }
+         
+      void clear()
+         {
+         AutoReleaseCS acs(m_cs);
+         m_data.clear();
+         }
+         
+   protected:
+      std::deque<type> m_data;
+      CRITICAL_SECTION m_cs;
+   };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/autoreleasecs.h	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,17 @@
+// Critical Section Autorelease
+// Tochinski Leonid, Chatten Associates, Inc. 2007
+#pragma once
+
+class AutoReleaseCS
+   {
+   public:
+      AutoReleaseCS(CRITICAL_SECTION& cs) : m_cs(cs)
+         {
+         ::EnterCriticalSection(&m_cs);
+         }
+      ~AutoReleaseCS()
+         {
+         ::LeaveCriticalSection(&m_cs);
+         }
+      CRITICAL_SECTION& m_cs;
+   };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/can_ixxat_win32.vc8.vcproj	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="can_ixxat_win32"
+	ProjectGUID="{8F57E7FF-1B73-4134-A2B2-9C0EADB2AEFB}"
+	RootNamespace="can_ixxat_win32"
+	Keyword="Win32Proj"
+	>
+	<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="1"
+				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="VCWebDeploymentTool"
+			/>
+			<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="1"
+				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="VCWebDeploymentTool"
+			/>
+			<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>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/ixxat.cpp	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,292 @@
+// IXXAT adapter driver for CanFestival-3 Win32 port
+// Copyright (C) 2007 Leonid Tochinski, ChattenAssociates, Inc.
+//
+// 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"
+
+#pragma warning(disable:4996)
+
+#define CAN_NUM 0
+
+class IXXAT
+   {
+   public:
+      class error
+        {
+        };
+      IXXAT(s_BOARD *board);
+      ~IXXAT();
+      bool send(const Message *m);
+      bool receive(Message *m);
+   private:
+      bool open(const char* board_name, 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);
+      
+   private:
+      UINT16 m_BoardHdl;
+      UINT16 m_TxQueHdl;
+      UINT16 m_RxQueHdl;
+      async_access_que<VCI_CAN_OBJ> m_RX_Que;
+      static IXXAT* m_callbackPtr;
+   };
+
+IXXAT *IXXAT::m_callbackPtr = NULL;
+
+IXXAT::IXXAT(s_BOARD *board) : m_BoardHdl(0xFFFF),
+                               m_TxQueHdl(0xFFFF),
+                               m_RxQueHdl(0xFFFF)
+                               
+   {
+   char busname[100];
+   ::strcpy(busname,board->busname);
+   char board_name[100];      
+   long board_number = 0;   
+   char *ptr = ::strrchr(busname,':');
+   if (ptr != 0)
+      {
+      *ptr = 0;
+      ::strcpy(board_name,busname);
+      if (++ptr - busname < (int)::strlen(board->busname))
+         board_number = ::atoi(ptr);
+      }
+   if (!open(board_name,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 false;
+   long res = VCI_ERR;
+   if (m->rtr == NOT_A_REQUEST)
+      res = VCI_TransmitObj(m_BoardHdl, m_TxQueHdl, m->cob_id.w, m->len, const_cast<unsigned char*>(m->data));
+   else
+      res = VCI_RequestObj(m_BoardHdl, m_TxQueHdl, m->cob_id.w, 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.w = obj.id;
+      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(const char* board_name, 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)    
+      return false;
+   // close existing board   
+   close();
+   // init IXXAT board
+   unsigned long board_type = VCI_GetBrdTypeByName(const_cast<char*>(board_name));
+   long res = VCI2_PrepareBoard( board_type,                  // board type
+                                   board_number,              // unique board index
+                                   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)
+      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, 50, 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);
+   
+   return true;
+   }
+
+bool IXXAT::close()
+   {
+   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)
+  {
+  char buf[200];
+  ::sprintf(buf,"IXXAT Message: [%s]\n", msg_str);
+  ::OutputDebugString(buf);
+  }
+
+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"
+    };
+  char buf[200];
+  ::sprintf(buf, "IXXAT Exception: %s (%i / %u) [%s]\n", Num2Function[func_num], err_code, ext_err, err_str);
+  ::OutputDebugString(buf);
+  }
+
+//------------------------------------------------------------------------
+extern "C"
+   UNS8 canReceive_driver(CAN_HANDLE inst, Message *m)
+   {
+   return (UNS8)reinterpret_cast<IXXAT*>(inst)->receive(m);
+   }
+                            
+extern "C"
+   UNS8 canSend_driver(CAN_HANDLE inst, Message *m)
+   {
+   return (UNS8)reinterpret_cast<IXXAT*>(inst)->send(m);
+   }
+
+extern "C"
+   CAN_HANDLE canOpen_driver(s_BOARD *board)
+   {
+   try
+      {
+      return new IXXAT(board);
+      }
+   catch (IXXAT::error&)
+      {
+      return 0;
+      }
+   }
+
+extern "C"
+   int canClose_driver(CAN_HANDLE inst)
+   {
+   delete reinterpret_cast<IXXAT*>(inst);
+   return 1;
+   }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/ixxat.def	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,7 @@
+LIBRARY	IXXAT
+
+EXPORTS
+   canReceive_driver
+   canSend_driver
+   canOpen_driver
+   canClose_driver
--- a/src/pdo.c	Tue Aug 07 17:18:03 2007 +0200
+++ b/src/pdo.c	Wed Aug 08 01:43:02 2007 +0200
@@ -120,9 +120,10 @@
       pwCobId = (UNS32*) d->objdict[offset].pSubindex[1].pObject;
 
       MSG_WAR(0x3930, "sendPDOrequest cobId is : ",*pwCobId);
-
+      {
       Message pdo = {*pwCobId, REQUEST, 0};
       return canSend(d->canHandle,&pdo);
+      }
     }
   }
   MSG_ERR(0x1931, "sendPDOrequest : RPDO Index not found : ", RPDOIndex);
@@ -475,7 +476,10 @@
         /*Reset count of SYNC*/	
 	d->PDO_status[pdoNum].transmit_type_parameter = 0;
 	MSG_WAR(0x3964, "  PDO is on SYNCHRO. Trans type : ", *pTransmissionType);
-	pdo = (Message)Message_Initializer;
+ {
+ Message msg_init = Message_Initializer;
+ pdo = msg_init;
+ }	
         if(buildPDO(d, pdoNum, &pdo))
         {
             MSG_ERR(0x1906, " Couldn't build TPDO number : ", pdoNum);
@@ -500,7 +504,10 @@
                *pTransmissionType == TRANS_EVENT_SPECIFIC )&&
               !(d->PDO_status[pdoNum].transmit_type_parameter & PDO_INHIBITED)) {
 	MSG_WAR(0x3968, "  PDO is on EVENT. Trans type : ", *pTransmissionType);
-	pdo = (Message)Message_Initializer;
+ {
+ Message msg_init = Message_Initializer;
+ pdo = msg_init;
+ }	
         if(buildPDO(d, pdoNum, &pdo))
         {
             MSG_ERR(0x3907, " Couldn't build TPDO number : ", pdoNum);
--- a/src/sync.c	Tue Aug 07 17:18:03 2007 +0200
+++ b/src/sync.c	Wed Aug 08 01:43:02 2007 +0200
@@ -1,165 +1,171 @@
-/*
-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
-*/
-
-/*!
-** @file   sync.c
-** @author Edouard TISSERANT and Francis DUPIN
-** @date   Tue Jun  5 09:32:32 2007
-**
-** @brief
-**
-**
-*/
-
-#include "data.h"
-#include "sync.h"
-#include "canfestival.h"
-
-/* Prototypes for internals functions */
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-** @param id                                                                                       
-**/  
-void SyncAlarm(CO_Data* d, UNS32 id);
-UNS32 OnCOB_ID_SyncUpdate(CO_Data* d, const indextable * unsused_indextable, 
-	UNS8 unsused_bSubindex);
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-** @param id                                                                                       
-**/   
-void SyncAlarm(CO_Data* d, UNS32 id)
-{
-	sendSYNC(d, *d->COB_ID_Sync & 0x1FFFFFFF) ;
-}
-
-/*!                                                                                                
-** This is called when Index 0x1005 is updated.                                                                                                
-**                                                                                                 
-** @param d                                                                                        
-** @param unsused_indextable                                                                       
-** @param unsused_bSubindex                                                                        
-**                                                                                                 
-** @return                                                                                         
-**/  
-UNS32 OnCOB_ID_SyncUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex)
-{
-	startSYNC(d);
-	return 0;
-}
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-**/ 
-void startSYNC(CO_Data* d)
-{
-	RegisterSetODentryCallBack(d, 0x1005, 0, &OnCOB_ID_SyncUpdate);
-	RegisterSetODentryCallBack(d, 0x1006, 0, &OnCOB_ID_SyncUpdate);
-
-	if(d->syncTimer != TIMER_NONE){
-		stopSYNC(d);
-	}
-	
-	if(*d->COB_ID_Sync & 0x40000000 && *d->Sync_Cycle_Period)
-	{
-		d->syncTimer = SetAlarm(
-				d,
-				0 /*No id needed*/,
-				&SyncAlarm,
-				US_TO_TIMEVAL(*d->Sync_Cycle_Period), 
-				US_TO_TIMEVAL(*d->Sync_Cycle_Period));
-	}
-}
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-**/   
-void stopSYNC(CO_Data* d)
-{
-	d->syncTimer = DelAlarm(d->syncTimer);
-}
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-** @param cob_id                                                                                   
-**                                                                                                 
-** @return                                                                                         
-**/  
-UNS8 sendSYNC(CO_Data* d, UNS32 cob_id)
-{
-  Message m;
-  UNS8 resultat ;
-  
-  MSG_WAR(0x3001, "sendSYNC ", 0);
-  
-  m.cob_id.w = cob_id ;
-  m.rtr = NOT_A_REQUEST;
-  m.len = 0;
-  resultat = canSend(d->canHandle,&m) ;
-  proceedSYNC(d, &m) ; 
-  return resultat ;
-}
-
-/*!                                                                                                
-**                                                                                                 
-**                                                                                                 
-** @param d                                                                                        
-** @param m                                                                                        
-**                                                                                                 
-** @return                                                                                         
-**/ 
-UNS8 proceedSYNC(CO_Data* d, Message *m)
-{
-
-  UNS8 res;
-  
-  MSG_WAR(0x3002, "SYNC received. Proceed. ", 0);
-  
-  (*d->post_sync)();
-
-  /* only operational state allows PDO transmission */
-  if(! d->CurrentCommunicationState.csPDO) 
-    return 0;
-
-  res = _sendPDOevent(d, 1 /*isSyncEvent*/ );
-  
-  /*Call user app callback*/
-  (*d->post_TPDO)();
-  
-  return res;
-  
-}
-
-
-void _post_sync(){}
-void _post_TPDO(){}
+/*
+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
+*/
+
+
+/*!
+** @file   sync.c
+** @author Edouard TISSERANT and Francis DUPIN
+** @date   Tue Jun  5 09:32:32 2007
+**
+** @brief
+**
+**
+*/
+
+#include "data.h"
+#include "sync.h"
+#include "canfestival.h"
+
+/* Prototypes for internals functions */
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+** @param id                                                                                       
+**/  
+void SyncAlarm(CO_Data* d, UNS32 id);
+UNS32 OnCOB_ID_SyncUpdate(CO_Data* d, const indextable * unsused_indextable, 
+	UNS8 unsused_bSubindex);
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+** @param id                                                                                       
+**/   
+void SyncAlarm(CO_Data* d, UNS32 id)
+{
+	sendSYNC(d, *d->COB_ID_Sync & 0x1FFFFFFF) ;
+}
+
+/*!                                                                                                
+** This is called when Index 0x1005 is updated.                                                                                                
+**                                                                                                 
+** @param d                                                                                        
+** @param unsused_indextable                                                                       
+** @param unsused_bSubindex                                                                        
+**                                                                                                 
+** @return                                                                                         
+**/  
+UNS32 OnCOB_ID_SyncUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex)
+{
+	startSYNC(d);
+	return 0;
+}
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+**/ 
+void startSYNC(CO_Data* d)
+{
+	RegisterSetODentryCallBack(d, 0x1005, 0, &OnCOB_ID_SyncUpdate);
+	RegisterSetODentryCallBack(d, 0x1006, 0, &OnCOB_ID_SyncUpdate);
+
+	if(d->syncTimer != TIMER_NONE){
+		stopSYNC(d);
+	}
+	
+	if(*d->COB_ID_Sync & 0x40000000 && *d->Sync_Cycle_Period)
+	{
+		d->syncTimer = SetAlarm(
+				d,
+				0 /*No id needed*/,
+				&SyncAlarm,
+				US_TO_TIMEVAL(*d->Sync_Cycle_Period), 
+				US_TO_TIMEVAL(*d->Sync_Cycle_Period));
+	}
+}
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+**/   
+void stopSYNC(CO_Data* d)
+{
+	d->syncTimer = DelAlarm(d->syncTimer);
+}
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+** @param cob_id                                                                                   
+**                                                                                                 
+** @return                                                                                         
+**/  
+UNS8 sendSYNC(CO_Data* d, UNS32 cob_id)
+{
+  Message m;
+  UNS8 resultat ;
+  
+  MSG_WAR(0x3001, "sendSYNC ", 0);
+  
+  m.cob_id.w = cob_id ;
+  m.rtr = NOT_A_REQUEST;
+  m.len = 0;
+  resultat = canSend(d->canHandle,&m) ;
+  proceedSYNC(d, &m) ; 
+  return resultat ;
+}
+
+/*!                                                                                                
+**                                                                                                 
+**                                                                                                 
+** @param d                                                                                        
+** @param m                                                                                        
+**                                                                                                 
+** @return                                                                                         
+**/ 
+UNS8 proceedSYNC(CO_Data* d, Message *m)
+{
+
+  UNS8 res;
+  
+  MSG_WAR(0x3002, "SYNC received. Proceed. ", 0);
+  
+  (*d->post_sync)();
+
+  /* only operational state allows PDO transmission */
+  if(! d->CurrentCommunicationState.csPDO) 
+    return 0;
+
+  res = _sendPDOevent(d, 1 /*isSyncEvent*/ );
+  
+  /*Call user app callback*/
+  (*d->post_TPDO)();
+  
+  return res;
+  
+}
+
+
+void _post_sync(){}
+void _post_TPDO(){}
--- a/src/win32/CanFestival-3.def	Tue Aug 07 17:18:03 2007 +0200
+++ b/src/win32/CanFestival-3.def	Wed Aug 08 01:43:02 2007 +0200
@@ -1,17 +1,30 @@
-; CanFestival-3.def : Declares the module parameters.
+; CanFestival-3.def : Declares DLL exports.
 
 LIBRARY      "CanFestival-3.DLL"
 
 EXPORTS
+
+        ; dsf.h
+        decompo_dcf
+
+        ; lifegrd.h
+        _heartbeatError
         getNodeState
         heartbeatInit
         heartbeatStop
         proceedNODE_GUARD
+        
+        ; nmtMaster.h
         masterSendNMTstateChange
         masterSendNMTnodeguard
         masterRequestNodeState
+        
+        ; nmtSlave.h
         proceedNMTstateChange
         slaveSendBootUp
+        
+        ; objacces.h
+        _storeODSubIndex
         accessDictionaryError
         getODentry
         setODentry
@@ -19,18 +32,27 @@
         readLocalDict
         scanIndexOD
         RegisterSetODentryCallBack
-        sendPDO
-        PDOmGR
-;        buildPDO
+        
+        ; pdo.h
+        buildPDO
         sendPDOrequest
         proceedPDO
-;        sendPDOevent
+        sendPDOevent
+        _sendPDOevent
+		PDOInit
+		PDOStop
+		PDOEventTimerAlarm
+		PDOInhibitTimerAlarm
+		CopyBits
+
+        ; sdo.h
+        SDOTimeoutAlarm
+        resetSDO
         SDOlineToObjdict
         objdictToSDOline
         lineToSDO
         SDOtoLine
         failedSDO
-        resetSDO
         resetSDOline
         initSDOline
         getSDOfreeLine
@@ -42,38 +64,47 @@
         sendSDOabort
         proceedSDO
         writeNetworkDict
+        writeNetworkDictCallBack
         readNetworkDict
         readNetworkDictCallback
         getReadResultNetworkDict
         getWriteResultNetworkDict
+        
+        ; states.h
+        _operational
+        _preOperational
+        _initialisation
+        _stopped
         canDispatch
         getState
         setState
         getNodeId
         setNodeId
-;        initPreOperationalMode
+        ;initPreOperationalMode
+
+        ; sync.h
+        startSYNC
+        stopSYNC
+        _post_sync
+        _post_TPDO
         sendSYNC
         proceedSYNC
+        
+        
+        ; timer.h
         SetAlarm
         DelAlarm
         TimeDispatch
         setTimer
         getElapsedTime
+        
+        ; timers_driver.h
         StartTimerLoop
         StopTimerLoop
         CreateReceiveTask
-        LoadCanDriver
-        canSend
-        canReceive
-        canOpen
-        canClose
-        _post_TPDO
-        _post_sync
-        _heartbeatError
-        _stopped
-        _operational
-        _preOperational
-        _initialisation
-        writeNetworkDictCallBack
-        _storeODSubIndex
-        decompo_dcf
+        
+        ; win32/canfestival.h
+		LoadCanDriver
+		canSend
+		canOpen
+		canClose