--- 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