Circle illusion demo
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Mon, 30 Jul 2012 15:46:20 +0000 (15:46 +0000)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Mon, 30 Jul 2012 15:46:20 +0000 (15:46 +0000)
git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@81 47cf9a05-e0a8-4ed5-9e9b-101a649bc004

17 files changed:
Arduino/wristbandTactons/wristbandTactons.ino
TactonDebug/MagicCircle/MagicCircle.vcxproj [new file with mode: 0644]
TactonDebug/MagicCircle/magiccircle.cpp [new file with mode: 0644]
TactonDebug/MagicCircle/magiccircle.h [new file with mode: 0644]
TactonDebug/MagicCircle/magiccircle.qrc [new file with mode: 0644]
TactonDebug/MagicCircle/magiccircle.ui [new file with mode: 0644]
TactonDebug/MagicCircle/main.cpp [new file with mode: 0644]
TactonDebug/TactonDebug.sln
TactonDebug/TactonDebug.suo
TactonDebug/TactonDebug/TactonDebug.vcxproj
TactonDebug/TactonDebug/main.cpp
TactonDebug/TactonDebug/tactondebug.cpp
TactonLibrary.suo
TactonPlayer/Tacton.hpp
TactonPlayer/TactonPlayer.cpp
TactonPlayer/TactonPlayer.hpp
TactonPlayer/TactonPlayer.vcxproj

index 96bbff9088b86efddf7ff48bd9f68ddd78f6d78a..883d53a582cf06d27d9da63e5d08e4431b4d8c63 100644 (file)
@@ -153,6 +153,7 @@ void loop()
     //stop any vibration
     case 'A':
       manager.stop();
+      command = 0;
       break;
     //unknown command: do nothing
     default:
diff --git a/TactonDebug/MagicCircle/MagicCircle.vcxproj b/TactonDebug/MagicCircle/MagicCircle.vcxproj
new file mode 100644 (file)
index 0000000..29f1bb3
--- /dev/null
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}</ProjectGuid>\r
+    <Keyword>Qt4VSv1.0</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />\r
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>\r
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PreprocessorDefinitions>_USE_MATH_DEFINES;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <Optimization>Disabled</Optimization>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+      <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <AdditionalDependencies>TactonPlayerd.lib;qtmaind.lib;QtCored4.lib;QtGuid4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <PreprocessorDefinitions>_USE_MATH_DEFINES;UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <DebugInformationFormat>\r
+      </DebugInformationFormat>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>\r
+      <AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>false</GenerateDebugInformation>\r
+      <AdditionalDependencies>TactonPlayer.lib;qtmain.lib;QtCore4.lib;QtGui4.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="GeneratedFiles\Debug\moc_magiccircle.cpp">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
+    </ClCompile>\r
+    <ClCompile Include="GeneratedFiles\qrc_magiccircle.cpp">\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+      </PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+      </PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="GeneratedFiles\Release\moc_magiccircle.cpp">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+    </ClCompile>\r
+    <ClCompile Include="magiccircle.cpp" />\r
+    <ClCompile Include="main.cpp" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <CustomBuild Include="magiccircle.h">\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing magiccircle.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -D_USE_MATH_DEFINES -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing magiccircle.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -D_USE_MATH_DEFINES -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui"</Command>\r
+    </CustomBuild>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <CustomBuild Include="magiccircle.ui">\r
+      <FileType>Document</FileType>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>\r
+    </CustomBuild>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="GeneratedFiles\ui_magiccircle.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <CustomBuild Include="magiccircle.qrc">\r
+      <FileType>Document</FileType>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Rcc%27ing %(Identity)...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(FullPath);%(AdditionalInputs)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Rcc%27ing %(Identity)...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\qrc_%(Filename).cpp;%(Outputs)</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -name "%(Filename)" -no-compress "%(FullPath)" -o .\GeneratedFiles\qrc_%(Filename).cpp</Command>\r
+    </CustomBuild>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+  <ProjectExtensions>\r
+    <VisualStudio>\r
+      <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" QtVersion_x0020_Win32="4.8.2" />\r
+    </VisualStudio>\r
+  </ProjectExtensions>\r
+</Project>
\ No newline at end of file
diff --git a/TactonDebug/MagicCircle/magiccircle.cpp b/TactonDebug/MagicCircle/magiccircle.cpp
new file mode 100644 (file)
index 0000000..306cd3d
--- /dev/null
@@ -0,0 +1,109 @@
+#include "magiccircle.h"\r
+\r
+#include <cmath>\r
+\r
+MagicCircle::MagicCircle(QWidget *parent, Qt::WFlags flags)\r
+       : QMainWindow(parent, flags), _timer(this), _angle(0), _clockwise(true)\r
+{\r
+       try\r
+       {\r
+               _tactonPlayer = new TactonPlayer("COM4");\r
+       }\r
+       catch(...)\r
+       {\r
+               _tactonPlayer = NULL;\r
+       }\r
+\r
+       setupUi(this);\r
+\r
+       layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+\r
+       //set initial parameters\r
+       setDirection(_direction->currentText());\r
+       setResolution(_resolution->value());\r
+       setSpeed(_speed->value());\r
+\r
+       connect(_play, SIGNAL(clicked(bool)), this, SLOT(play(bool)));\r
+       connect(_stop, SIGNAL(clicked(bool)), this, SLOT(stop(bool)));\r
+\r
+       connect(_direction, SIGNAL(editTextChanged(const QString &)), this, SLOT(setDirection(const QString &)));\r
+       connect(_speed, SIGNAL(valueChanged(int)), this, SLOT(setSpeed(int)));\r
+       connect(_resolution, SIGNAL(valueChanged(int)), this, SLOT(setResolution(int)));\r
+\r
+       connect(this, SIGNAL(setAngle(float)), SLOT(tactileFeedback(float)));\r
+       connect(this, SIGNAL(setAngle(float)), SLOT(visualFeedback(float)));\r
+\r
+       connect(&_timer, SIGNAL(timeout()), this, SLOT(update()));\r
+}\r
+\r
+MagicCircle::~MagicCircle()\r
+{\r
+       stop(true);\r
+}\r
+\r
+void MagicCircle::play(bool)\r
+{\r
+       _timer.start();\r
+}\r
+\r
+void MagicCircle::stop(bool)\r
+{\r
+       _timer.stop();\r
+       _tactonPlayer->stopBuzz();\r
+}\r
+\r
+void MagicCircle::update()\r
+{\r
+       if (_clockwise)\r
+               _angle -= _stepsize;\r
+       else\r
+               _angle += _stepsize;\r
+\r
+       while (_angle < 0)\r
+               _angle += 360;\r
+\r
+       while (_angle >= 360)\r
+               _angle -= 360;\r
+\r
+       emit setAngle(_angle);\r
+}\r
+\r
+void MagicCircle::setDirection(const QString &direction)\r
+{\r
+       _clockwise = (direction == "Clockwise");\r
+}\r
+\r
+void MagicCircle::setSpeed(int speed)\r
+{\r
+       _timer.setInterval(_stepsize / speed * 1000);\r
+}\r
+\r
+void MagicCircle::setResolution(int res)\r
+{\r
+       _stepsize = 360.0 / res;\r
+       setSpeed(_speed->value());\r
+}\r
+\r
+void MagicCircle::tactileFeedback(float angle)\r
+{\r
+       unsigned char amplitudes[4];\r
+       memset(amplitudes, 0, 4);\r
+\r
+       //vertical\r
+       if (angle < 180)\r
+               amplitudes[1] = 255 * sin(angle * M_PI / 180);\r
+       else\r
+               amplitudes[3] = - 255 * sin(angle * M_PI / 180);\r
+\r
+       //horizontal\r
+       if (angle < 90 ||angle > 270)\r
+               amplitudes[0] = 255 * cos(angle * M_PI / 180);\r
+       else\r
+               amplitudes[2] = - 255 * cos(angle * M_PI / 180);\r
+\r
+       _tactonPlayer->buzz(_frequency->value(), 4, amplitudes);\r
+}\r
+\r
+void MagicCircle::visualFeedback(float)\r
+{\r
+}\r
diff --git a/TactonDebug/MagicCircle/magiccircle.h b/TactonDebug/MagicCircle/magiccircle.h
new file mode 100644 (file)
index 0000000..a8be0b5
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef MAGICCIRCLE_H\r
+#define MAGICCIRCLE_H\r
+\r
+#include <QtGui/QMainWindow>\r
+#include "ui_magiccircle.h"\r
+\r
+#include <QTimer>\r
+\r
+#include <TactonPlayer\TactonPlayer.hpp>\r
+\r
+class MagicCircle : public QMainWindow, Ui::MagicCircleClass\r
+{\r
+       Q_OBJECT\r
+\r
+       public:\r
+               MagicCircle(QWidget *parent = 0, Qt::WFlags flags = 0);\r
+               ~MagicCircle();\r
+\r
+       public slots:\r
+               void play(bool);\r
+               void stop(bool);\r
+               void update();\r
+               \r
+               void setDirection(const QString &);\r
+               void setSpeed(int);\r
+               void setResolution(int);\r
+\r
+               void tactileFeedback(float);\r
+               void visualFeedback(float);\r
+\r
+       signals:\r
+               void setAngle(float a);         \r
+\r
+       private:\r
+               float _angle, _stepsize;\r
+               bool _clockwise;\r
+\r
+               TactonPlayer *_tactonPlayer;\r
+               QTimer _timer;\r
+};\r
+\r
+#endif // MAGICCIRCLE_H\r
diff --git a/TactonDebug/MagicCircle/magiccircle.qrc b/TactonDebug/MagicCircle/magiccircle.qrc
new file mode 100644 (file)
index 0000000..57f6489
--- /dev/null
@@ -0,0 +1,4 @@
+<RCC>\r
+    <qresource prefix="MagicCircle">\r
+    </qresource>\r
+</RCC>\r
diff --git a/TactonDebug/MagicCircle/magiccircle.ui b/TactonDebug/MagicCircle/magiccircle.ui
new file mode 100644 (file)
index 0000000..cc56a5d
--- /dev/null
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>MagicCircleClass</class>\r
+ <widget class="QMainWindow" name="MagicCircleClass">\r
+  <property name="geometry">\r
+   <rect>\r
+    <x>0</x>\r
+    <y>0</y>\r
+    <width>268</width>\r
+    <height>448</height>\r
+   </rect>\r
+  </property>\r
+  <property name="windowTitle">\r
+   <string>MagicCircle</string>\r
+  </property>\r
+  <widget class="QWidget" name="centralWidget">\r
+   <layout class="QVBoxLayout" name="verticalLayout">\r
+    <item>\r
+     <widget class="QGraphicsView" name="_canvas">\r
+      <property name="minimumSize">\r
+       <size>\r
+        <width>250</width>\r
+        <height>250</height>\r
+       </size>\r
+      </property>\r
+      <property name="maximumSize">\r
+       <size>\r
+        <width>250</width>\r
+        <height>250</height>\r
+       </size>\r
+      </property>\r
+     </widget>\r
+    </item>\r
+    <item>\r
+     <layout class="QGridLayout" name="gridLayout_2">\r
+      <item row="2" column="1">\r
+       <widget class="QLabel" name="label_2">\r
+        <property name="text">\r
+         <string>Speed (degrees/s)</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="2" column="2">\r
+       <widget class="QSpinBox" name="_speed">\r
+        <property name="minimum">\r
+         <number>1</number>\r
+        </property>\r
+        <property name="maximum">\r
+         <number>720</number>\r
+        </property>\r
+        <property name="value">\r
+         <number>30</number>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="3" column="1">\r
+       <widget class="QLabel" name="label_3">\r
+        <property name="text">\r
+         <string>Resolution (steps/360°)</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="1" column="2">\r
+       <widget class="QComboBox" name="_direction">\r
+        <item>\r
+         <property name="text">\r
+          <string>Clockwise</string>\r
+         </property>\r
+        </item>\r
+        <item>\r
+         <property name="text">\r
+          <string>Counterclockwise</string>\r
+         </property>\r
+        </item>\r
+       </widget>\r
+      </item>\r
+      <item row="1" column="1">\r
+       <widget class="QLabel" name="label">\r
+        <property name="text">\r
+         <string>Direction</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="3" column="2">\r
+       <widget class="QSpinBox" name="_resolution">\r
+        <property name="minimum">\r
+         <number>4</number>\r
+        </property>\r
+        <property name="maximum">\r
+         <number>360</number>\r
+        </property>\r
+        <property name="value">\r
+         <number>16</number>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="0" column="1">\r
+       <widget class="QLabel" name="label_4">\r
+        <property name="text">\r
+         <string>Frequency</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item row="0" column="2">\r
+       <widget class="QSpinBox" name="_frequency">\r
+        <property name="minimum">\r
+         <number>1</number>\r
+        </property>\r
+        <property name="maximum">\r
+         <number>400</number>\r
+        </property>\r
+        <property name="value">\r
+         <number>250</number>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+     </layout>\r
+    </item>\r
+    <item>\r
+     <layout class="QHBoxLayout" name="horizontalLayout">\r
+      <item>\r
+       <widget class="QPushButton" name="_stop">\r
+        <property name="text">\r
+         <string>Stop</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+      <item>\r
+       <widget class="QPushButton" name="_play">\r
+        <property name="text">\r
+         <string>Play</string>\r
+        </property>\r
+       </widget>\r
+      </item>\r
+     </layout>\r
+    </item>\r
+   </layout>\r
+  </widget>\r
+ </widget>\r
+ <layoutdefault spacing="6" margin="11"/>\r
+ <tabstops>\r
+  <tabstop>_frequency</tabstop>\r
+  <tabstop>_direction</tabstop>\r
+  <tabstop>_speed</tabstop>\r
+  <tabstop>_resolution</tabstop>\r
+  <tabstop>_play</tabstop>\r
+  <tabstop>_stop</tabstop>\r
+  <tabstop>_canvas</tabstop>\r
+ </tabstops>\r
+ <resources>\r
+  <include location="magiccircle.qrc"/>\r
+ </resources>\r
+ <connections/>\r
+</ui>\r
diff --git a/TactonDebug/MagicCircle/main.cpp b/TactonDebug/MagicCircle/main.cpp
new file mode 100644 (file)
index 0000000..288aa7c
--- /dev/null
@@ -0,0 +1,10 @@
+#include "magiccircle.h"\r
+#include <QtGui/QApplication>\r
+\r
+int main(int argc, char *argv[])\r
+{\r
+       QApplication a(argc, argv);\r
+       MagicCircle w;\r
+       w.show();\r
+       return a.exec();\r
+}\r
index 0ab897a17f36b5d35cad343514eabe2b873a0c28..972e2a20ac6ad1acf9c65528fb8d6e4e9e0ebc15 100644 (file)
@@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TactonDebug", "TactonDebug\TactonDebug.vcxproj", "{245FF8C0-7CC0-4A37-9F07-6B3C8E29D089}"\r
 EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MagicCircle", "MagicCircle\MagicCircle.vcxproj", "{E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}"\r
+EndProject\r
 Global\r
        GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
                Debug|Win32 = Debug|Win32\r
@@ -13,6 +15,10 @@ Global
                {245FF8C0-7CC0-4A37-9F07-6B3C8E29D089}.Debug|Win32.Build.0 = Debug|Win32\r
                {245FF8C0-7CC0-4A37-9F07-6B3C8E29D089}.Release|Win32.ActiveCfg = Release|Win32\r
                {245FF8C0-7CC0-4A37-9F07-6B3C8E29D089}.Release|Win32.Build.0 = Release|Win32\r
+               {E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}.Debug|Win32.Build.0 = Debug|Win32\r
+               {E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}.Release|Win32.ActiveCfg = Release|Win32\r
+               {E39CA6E9-BA0B-4C12-8090-D5CE66CADF94}.Release|Win32.Build.0 = Release|Win32\r
        EndGlobalSection\r
        GlobalSection(SolutionProperties) = preSolution\r
                HideSolutionNode = FALSE\r
index d47ffd0d457c61956a5b19f2d5ed811b9e69fdfe..1f131fa54fbafb1a1acf1e3a5440e4abd5524ce0 100644 (file)
Binary files a/TactonDebug/TactonDebug.suo and b/TactonDebug/TactonDebug.suo differ
index 857dc9528db3486ebd2a75f869d1aee22d898ccc..2ae6513b87b8b2b137f0a9221cbc1a98ede1e94f 100644 (file)
@@ -44,7 +44,7 @@
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
-      <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_CORE_LIB;QT_GUI_LIB;QT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;.\;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <Optimization>Disabled</Optimization>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
@@ -61,7 +61,7 @@
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <ClCompile>\r
-      <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>UNICODE;WIN32;QT_LARGEFILE_SUPPORT;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <AdditionalIncludeDirectories>.\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\qtmain;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;.\;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <DebugInformationFormat>\r
       </DebugInformationFormat>\r
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
       <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing %(Identity)...</Message>\r
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"   -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB  "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I.\.." "-I." "-I." "-I." "tactondebug.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL  "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I.\.."</Command>\r
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
       <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing %(Identity)...</Message>\r
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>\r
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"   -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB  "-I." "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I.\.." "-I." "-I." "-I." "tactondebug.h" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"</Command>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_DLL  "-I.\GeneratedFiles" "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\qtmain" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I." "-I.\.."</Command>\r
     </CustomBuild>\r
   </ItemGroup>\r
   <ItemGroup>\r
   </ImportGroup>\r
   <ProjectExtensions>\r
     <VisualStudio>\r
-      <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" QtVersion_x0020_Win32="4.7.3" />\r
+      <UserProperties UicDir=".\GeneratedFiles" MocDir=".\GeneratedFiles\$(ConfigurationName)" MocOptions="" RccDir=".\GeneratedFiles" lupdateOnBuild="0" lupdateOptions="" lreleaseOptions="" QtVersion_x0020_Win32="4.8.2" />\r
     </VisualStudio>\r
   </ProjectExtensions>\r
 </Project>
\ No newline at end of file
index 3ebd253f5e9d6e87e9127b55d22f92cd344c9a8f..5fcd7b964af27d39a26ada9bdbca96da8ea72a0f 100644 (file)
@@ -6,5 +6,6 @@ int main(int argc, char *argv[])
        QApplication a(argc, argv);\r
        TactonDebug w;\r
        w.show();\r
+       w.raise();\r
        return a.exec();\r
 }\r
index 70442adf74aa01e1fafdb670d90dc9dc30baf899..ebad3a9a895965344e7085c8f430465c08497b26 100644 (file)
@@ -9,7 +9,7 @@ TactonDebug::TactonDebug(QWidget *parent, Qt::WFlags flags)
 {\r
        try\r
        {\r
-               _tactonPlayer = new TactonPlayer("COM5");\r
+               _tactonPlayer = new TactonPlayer("COM4");\r
        }\r
        catch(...)\r
        {\r
@@ -17,6 +17,9 @@ TactonDebug::TactonDebug(QWidget *parent, Qt::WFlags flags)
        }\r
 \r
        setupUi(this);\r
+\r
+       layout()->setSizeConstraint(QLayout::SetFixedSize);\r
+\r
        QObject::connect(frequencebox, SIGNAL(textChanged(const QString &)), this, SLOT(setFrequency(const QString &)));\r
        QObject::connect(frequenceslider, SIGNAL(valueChanged(int)), this, SLOT(setFrequency(int)));\r
        QObject::connect(amplitudebox, SIGNAL(textChanged(const QString &)), this, SLOT(setAmplitude(const QString &)));\r
index 6134b9ff7d21aa4f600c1f195dbbfdfed24fab4e..fc693ea9da458169cd32dd130bb656e193ca8ac3 100644 (file)
Binary files a/TactonLibrary.suo and b/TactonLibrary.suo differ
index 60f3ee0a62242e056e19bf638b81a7a98b50f79b..d71859af01d2d1cda576e72520205f0f1c25bfaa 100644 (file)
 #define POS2_LEFT 0x04\r
 #define POS2_DOWN 0x08\r
 \r
+#ifdef __MACOSX__\r
+#define EXPORTED\r
+#else\r
+#define EXPORTED __declspec(dllexport)\r
+#endif\r
+\r
 class Tacton \r
 {\r
        public:\r
@@ -20,46 +26,46 @@ class Tacton
                //2 for the duration\r
                //2 for the frequency\r
                //1 for the amplitude\r
-               __declspec(dllexport) Tacton(unsigned int nbframes, unsigned char *desc);\r
+               EXPORTED Tacton(unsigned int nbframes, unsigned char *desc);\r
                //creates a tacton using the CSV format\r
                //1 field for the number of frames, then 4 fields per frame \r
                //1 for the pattern\r
                //1 for the duration\r
                //1 for the frequency\r
                //1 for the amplitude\r
-               __declspec(dllexport) Tacton(char *desc);\r
-               __declspec(dllexport) Tacton(unsigned int nbframes, unsigned char *patterns, unsigned int *durations, unsigned int *frequencies, unsigned char *amplitudes);\r
+               EXPORTED Tacton(char *desc);\r
+               EXPORTED Tacton(unsigned int nbframes, unsigned char *patterns, unsigned int *durations, unsigned int *frequencies, unsigned char *amplitudes);\r
                //create a simple vibration\r
-               __declspec(dllexport) Tacton(char *pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
-               __declspec(dllexport) Tacton(const char *pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
-               __declspec(dllexport) Tacton(unsigned char pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
-               __declspec(dllexport) Tacton(const Tacton &t);\r
-               __declspec(dllexport) ~Tacton();\r
+               EXPORTED Tacton(char *pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
+               EXPORTED Tacton(const char *pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
+               EXPORTED Tacton(unsigned char pattern, unsigned int duration, unsigned int frequency, unsigned char amplitude);\r
+               EXPORTED Tacton(const Tacton &t);\r
+               EXPORTED ~Tacton();\r
 \r
                //changes the pattern using raw format\r
-               __declspec(dllexport) void setPattern(char pattern);\r
-               __declspec(dllexport) void setPattern(unsigned int frame, char pattern);\r
+               EXPORTED void setPattern(char pattern);\r
+               EXPORTED void setPattern(unsigned int frame, char pattern);\r
                //changes the pattern using string format\r
-               __declspec(dllexport) void setPattern(char *pattern);\r
-               __declspec(dllexport) void setPattern(const char *pattern);\r
-               __declspec(dllexport) void setPattern(unsigned int frame, char *pattern);\r
-               __declspec(dllexport) void setPattern(unsigned int frame, const char *pattern);\r
+               EXPORTED void setPattern(char *pattern);\r
+               EXPORTED void setPattern(const char *pattern);\r
+               EXPORTED void setPattern(unsigned int frame, char *pattern);\r
+               EXPORTED void setPattern(unsigned int frame, const char *pattern);\r
                //changes the duration\r
-               __declspec(dllexport) void setDuration(unsigned int duration);\r
-               __declspec(dllexport) void setDuration(unsigned int frame, unsigned int duration);\r
+               EXPORTED void setDuration(unsigned int duration);\r
+               EXPORTED void setDuration(unsigned int frame, unsigned int duration);\r
                //changes the frequency\r
-               __declspec(dllexport) void setFrequency(unsigned int frequency);\r
-               __declspec(dllexport) void setFrequency(unsigned int frame, unsigned int frequency);\r
+               EXPORTED void setFrequency(unsigned int frequency);\r
+               EXPORTED void setFrequency(unsigned int frame, unsigned int frequency);\r
                //changes the amplitude\r
-               __declspec(dllexport) void setAmplitude(unsigned int amplitude);\r
-               __declspec(dllexport) void setAmplitude(unsigned int frame, unsigned int amplitude);\r
+               EXPORTED void setAmplitude(unsigned int amplitude);\r
+               EXPORTED void setAmplitude(unsigned int frame, unsigned int amplitude);\r
 \r
                \r
                //returns the number of frames\r
-               __declspec(dllexport) const unsigned int getNbFrames() const;\r
+               EXPORTED const unsigned int getNbFrames() const;\r
 \r
                //returns the raw code (useful to send to the serial port)\r
-               __declspec(dllexport) void *rawCode() const;\r
+               EXPORTED void *rawCode() const;\r
 \r
        private:\r
                unsigned int _nbframes;\r
index d2f3be0fbadfacb00e7ed9ebc629ca2d50660507..23f716edf37c29afc76bfa22e7baddc0ab8106df 100644 (file)
@@ -43,6 +43,7 @@ void TactonPlayer::regist(const Tacton &t)
        buffer[0] = 'N';\r
        buffer[1] = (nbframes & 0xff00) >> 8;\r
        buffer[2] = nbframes & 0xff;\r
+\r
        memcpy(buffer + 3, t.rawCode(), 6 * nbframes);\r
        _comport->WriteData(buffer, 3 + 6 * nbframes);\r
        delete []buffer;\r
@@ -118,6 +119,29 @@ void TactonPlayer::schedule(unsigned char index, unsigned long timestamp)
        _comport->WriteData(buffer, 6);\r
 }\r
 \r
+void TactonPlayer::buzz(unsigned int frequency, unsigned int nbtactors, unsigned char *amplitudes)\r
+{\r
+       if (!_comport)\r
+               return;\r
+\r
+       unsigned char *buffer = new unsigned char[4 + nbtactors];\r
+       buffer[0] = 'B';\r
+       buffer[1] = nbtactors;\r
+       buffer[2] = (unsigned char)((frequency & 0x0000ff00) >> 8);\r
+       buffer[3] = (unsigned char)(frequency & 0x000000ff);\r
+       memcpy(buffer + 4, amplitudes, nbtactors);\r
+       _comport->WriteData(buffer, 4 + nbtactors);\r
+       delete[] buffer;\r
+}\r
+\r
+void TactonPlayer::stopBuzz()\r
+{\r
+       if (!_comport)\r
+               return;\r
+\r
+       _comport->WriteData("A", 1);\r
+}\r
+\r
 void TactonPlayer::debugRead(char *res, int nb) const\r
 {\r
        if (_comport)\r
index 3671db2cdd5bd0880ed9a3af99ce70a48c1d0cea..8e520c3a0960618af60a2bf2c53a38b1ebe5eba5 100644 (file)
@@ -1,32 +1,44 @@
 #include "Tacton.hpp"\r
 \r
+#ifdef __MACOSX__\r
+#include <Serial.hpp>\r
+#define EXPORTED\r
+#else\r
 #include <ArduinoSerial\Serial.hpp>\r
+#define EXPORTED __declspec(dllexport)\r
+#endif\r
 \r
 class TactonPlayer\r
 {\r
        public:\r
-                       __declspec(dllexport) TactonPlayer(const char *port = "COM5");\r
-                       __declspec(dllexport) ~TactonPlayer();\r
+                       EXPORTED TactonPlayer(const char *port = "COM5");\r
+                       EXPORTED ~TactonPlayer();\r
 \r
                        //set the timestamp to 0, and watch for scheduled tactons\r
-                       void __declspec(dllexport) start();\r
+                       EXPORTED void start();\r
                        //stop watching scheduled tactons, and erase registered tactons\r
-                       void __declspec(dllexport) stop();\r
+                       EXPORTED void stop();\r
 \r
                        //register a tacton\r
-                       __declspec(dllexport) void regist(const Tacton &t);\r
+                       EXPORTED void regist(const Tacton &t);\r
                        //register a list of tactons in a file, returns the number of tactons loaded\r
-                       __declspec(dllexport) unsigned int registFile(char *filename);\r
+                       EXPORTED unsigned int registFile(char *filename);\r
 \r
                        //play a registered tacton\r
-                       __declspec(dllexport) void play(unsigned char index);\r
+                       EXPORTED void play(unsigned char index);\r
                        //play a specified tacton\r
-                       __declspec(dllexport) void play(const Tacton &t);\r
+                       EXPORTED void play(const Tacton &t);\r
                        //schedule the play of a registered tacton\r
-                       __declspec(dllexport) void schedule(unsigned char index, unsigned long timestamp);\r
+                       EXPORTED void schedule(unsigned char index, unsigned long timestamp);\r
+\r
+                       //sets a given frequency for all vibrators, and an amplitude for each vibrator\r
+                       //vibrates until explicitely stop\r
+                       EXPORTED void buzz(unsigned int frequency, unsigned int nbtactors, unsigned char *amplitudes);\r
+                       //stop any vibration\r
+                       EXPORTED void stopBuzz();\r
 \r
                        //read on the serial port\r
-                       __declspec(dllexport) void debugRead(char *res, int nb) const;\r
+                       EXPORTED void debugRead(char *res, int nb) const;\r
 \r
 private:\r
                Serial *_comport;\r
index 86019d3002dbc588fd6964981f1032cb7e9e8d39..6a08bb8712a001cb3ff3802218450d5ef1c125db 100644 (file)
@@ -39,6 +39,7 @@
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <LinkIncremental>true</LinkIncremental>\r
+    <TargetName>$(ProjectName)d</TargetName>\r
   </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <LinkIncremental>false</LinkIncremental>\r