فهرست منبع

Chroma22293 dll

scbc.sat2 5 سال پیش
والد
کامیت
26b394e8fe

+ 31 - 0
Chroma22293/Chroma22293.sln

@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29324.140
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chroma22293", "Chroma22293\Chroma22293.vcxproj", "{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Debug|x64.ActiveCfg = Debug|x64
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Debug|x64.Build.0 = Debug|x64
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Debug|x86.ActiveCfg = Debug|Win32
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Debug|x86.Build.0 = Debug|Win32
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Release|x64.ActiveCfg = Release|x64
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Release|x64.Build.0 = Release|x64
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Release|x86.ActiveCfg = Release|Win32
+		{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {572E588C-C34B-49D6-930A-51AA3CFD9072}
+	EndGlobalSection
+EndGlobal

+ 486 - 0
Chroma22293/Chroma22293/Chroma22293.cpp

@@ -0,0 +1,486 @@
+// Chroma22293.cpp : 定义 DLL 的导出函数。
+//
+
+#include "stdafx.h"
+#include "framework.h"
+#include "Chroma22293.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+#define READ_LEN 8912
+// 唯一的应用程序对象
+
+CWinApp theApp;
+
+using namespace std;
+
+int main()
+{
+    int nRetCode = 0;
+
+    HMODULE hModule = ::GetModuleHandle(nullptr);
+
+    if (hModule != nullptr)
+    {
+        // 初始化 MFC 并在失败时显示错误
+        if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
+        {
+            // TODO: 在此处为应用程序的行为编写代码。
+            wprintf(L"错误: MFC 初始化失败\n");
+            nRetCode = 1;
+        }
+        else
+        {
+            // TODO: 在此处为应用程序的行为编写代码。
+			if ( OpenDevice(3,115200,8,0,1))
+			{
+				if (GetBufStatus())
+					printf("成功BUF\n");
+
+				GetDeviceSoft();
+				GetDeviceName();
+
+				if (SetPattern(11))
+					printf("SetPattern成功\n");
+
+				if (SetTiming(11))
+					printf("SetTiming成功\n");
+
+				if (SetTimingPattern(11, 11))
+					printf("SetTimingPattern成功\n");
+
+				if (SetBlueOFF())
+					printf("SetBlueOFF成功\n");
+
+				if (SetBuleON())
+					printf("SetBuleON成功\n");
+
+				if (SetGreenOFF())
+					printf("SetGreenOFF成功\n");
+
+				if (SetGreenON())
+					printf("SetGreenON成功\n");
+
+				if (SetRedOFF())
+					printf("SetRedOFF成功\n");
+
+				if (SetRedON())
+					printf("SetRedON成功\n");
+
+				if (SetKeyBoardLock())
+					printf("SetKeyBoardLock成功\n");
+
+				if (SetKeyBoardUnLock())
+					printf("SetKeyBoardUnLock成功\n");
+			}
+
+			CloseDevice();
+        }
+    }
+    else
+    {
+        // TODO: 更改错误代码以符合需要
+        wprintf(L"错误: GetModuleHandle 失败\n");
+        nRetCode = 1;
+    }
+
+	system("pause");
+
+    return nRetCode;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// 全局变量;
+std::string g_strData;
+CSynSerial g_SynSerial;
+
+CHROMA22293_API BOOL OpenDevice(BYTE byCommPort, DWORD dwBaudRate, BYTE bySize, BYTE byParity, BYTE byStopBits)
+{
+	if (g_SynSerial.IsOpen())
+	{
+		g_SynSerial.CloseSerialPort();
+	}
+
+	return g_SynSerial.OpenSerialPort(byCommPort, dwBaudRate, bySize, byParity, byStopBits, 0, 0);
+}
+
+CHROMA22293_API void CloseDevice()
+{
+	g_SynSerial.CloseSerialPort();
+}
+
+CHROMA22293_API BOOL GetBufStatus()
+{
+	std::string data = "dummy;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size() )
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = {0};
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if ( dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("dumy=>%s\n",byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API LPCTSTR GetDeviceSoft()
+{
+	std::string data = "report ver;\r";
+	if (!g_SynSerial.IsOpen())
+		return _T("");
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return _T("");
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return _T("");
+	}
+
+	g_strData = (char*)byData;
+	printf("report ver=>%s\n", byData);
+
+	return g_strData.c_str();
+}
+
+CHROMA22293_API LPCTSTR GetDeviceName()
+{
+	std::string data = "report model;\r";
+	if (!g_SynSerial.IsOpen())
+		return _T("");
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return _T("");
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return _T("");
+	}
+
+	g_strData = (char*)byData;
+	printf("report ver=>%s\n", byData);
+
+	return g_strData.c_str();
+}
+
+CHROMA22293_API BOOL SetPattern(int param)
+{
+	char data[128] = {0};
+	_stprintf_s(data, _T("run ptn %ld;\r"), param);
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data, sizeof(data));
+	if (dwData != sizeof(data))
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("run ptn %d;=>%s\n", param, byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetTiming(int param)
+{
+	char data[128] = { 0 };
+	_stprintf_s(data, _T("run tim %ld;\r"), param);
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data, sizeof(data));
+	if (dwData != sizeof(data))
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("run ptn %d;=>%s\n", param, byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetTimingPattern(int param1, int param2)
+{
+	char data[128] = { 0 };
+	_stprintf_s(data, _T("run tim %ld;run tim %ld;\r"), param1, param2);
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data, strlen(data));
+	if (dwData != strlen(data))
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("run ptn %d;run tim %d=>%s\n", param1, param2, byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\nok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetBlueOFF()
+{
+	std::string data = "b off;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("b off=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetBuleON()
+{
+	std::string data = "b on;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("b on=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetGreenOFF()
+{
+	std::string data = "g off;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("g off=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetGreenON()
+{
+	std::string data = "g on;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("g on=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetRedOFF()
+{
+	std::string data = "r off;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("r off=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetRedON()
+{
+	std::string data = "r on;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("r on=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetKeyBoardLock()
+{
+	std::string data = "kb lock on;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("kb lock on=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API BOOL SetKeyBoardUnLock()
+{
+	std::string data = "kb lock off;\r";
+	if (!g_SynSerial.IsOpen())
+		return FALSE;
+
+	// 写串口数据;
+	DWORD dwData = g_SynSerial.WriteComm((byte*)data.data(), data.size());
+	if (dwData != data.size())
+	{
+		return FALSE;
+	}
+
+	// 读取串口数据;
+	byte byData[READ_LEN] = { 0 };
+	dwData = g_SynSerial.ReadComm(byData, READ_LEN);
+	if (dwData == 0)
+	{
+		return FALSE;
+	}
+
+	printf("kb lock off=>%s\n", byData);
+
+	return !_mbsicmp((const byte*)"ok;\r\n", (const byte*)byData);
+}
+
+CHROMA22293_API void SetCallBack()
+{
+	return CHROMA22293_API void();
+}

+ 60 - 0
Chroma22293/Chroma22293/Chroma22293.h

@@ -0,0 +1,60 @@
+// 下列 ifdef 块是创建使从 DLL 导出更简单的
+// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 {0}_EXPORTS
+// 符号编译的。在使用此 DLL 的
+// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
+// {0}_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
+// 符号视为是被导出的。
+#ifdef CHROMA22293_EXPORTS
+#define CHROMA22293_API __declspec(dllexport)
+#else
+#define CHROMA22293_API __declspec(dllimport)
+#endif
+
+
+// 此类是从 dll 导出的
+class CHROMA22293_API CChroma22293 
+{
+public:
+	CChroma22293();
+	~CChroma22293();
+
+public:
+	// TODO: 在此处添加方法。
+	BOOL OpenDevice(
+		BYTE byCommPort,		// 串口号;
+		DWORD dwBaudRate,		// 波特率;
+		BYTE bySize,			// 数据位;
+		BYTE byParity,		// 校验位;
+		BYTE byStopBits		// 停止位;
+	);
+
+	void CloseDevice();
+};
+
+//
+//extern CHROMA22293_API int nChroma22293;
+//
+//extern "C" CHROMA22293_API int fnChroma22293(void);
+
+
+// 打开串口设备;
+extern "C" CHROMA22293_API BOOL OpenDevice(BYTE byCommPort, DWORD dwBaudRate, BYTE bySize, BYTE byParity, BYTE byStopBits);
+// 关闭串口设备;
+extern "C" CHROMA22293_API void CloseDevice();
+// 发送功能指令,并解析结果;
+extern "C" CHROMA22293_API BOOL GetBufStatus();
+extern "C" CHROMA22293_API LPCTSTR GetDeviceSoft();
+extern "C" CHROMA22293_API LPCTSTR GetDeviceName();
+extern "C" CHROMA22293_API BOOL SetPattern(int param);
+extern "C" CHROMA22293_API BOOL SetTiming(int param);
+extern "C" CHROMA22293_API BOOL SetTimingPattern(int param1, int param2);
+extern "C" CHROMA22293_API BOOL SetBlueOFF();
+extern "C" CHROMA22293_API BOOL SetBuleON();
+extern "C" CHROMA22293_API BOOL SetGreenOFF();
+extern "C" CHROMA22293_API BOOL SetGreenON();
+extern "C" CHROMA22293_API BOOL SetRedOFF();
+extern "C" CHROMA22293_API BOOL SetRedON();
+extern "C" CHROMA22293_API BOOL SetKeyBoardLock();
+extern "C" CHROMA22293_API BOOL SetKeyBoardUnLock();
+// 设置异常回调函数
+extern "C" CHROMA22293_API void SetCallBack();

+ 70 - 0
Chroma22293/Chroma22293/Chroma22293.rc

@@ -0,0 +1,70 @@
+//Microsoft Visual C++ 生成的资源脚本。
+//
+#pragma code_page(65001)
+
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// 从 TEXTINCLUDE 资源生成。
+//
+#include "afxres.h"
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+LANGUAGE 4, 2
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// 字符串表
+//
+
+STRINGTABLE
+BEGIN
+   IDS_APP_TITLE       "Chroma22293"
+END
+
+#endif
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// 从 TEXTINCLUDE 资源生成。
+//
+#ifndef _AFXDLL
+#include "l.CHS\\afxres.rc"
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED

+ 181 - 0
Chroma22293/Chroma22293/Chroma22293.vcxproj

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>16.0</VCProjectVersion>
+    <ProjectGuid>{AB7C4CB9-6CD2-461B-B9B1-931C77DEBD13}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Chroma22293</RootNamespace>
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+    <UseOfMfc>Dynamic</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+    <UseOfMfc>Dynamic</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+    <UseOfMfc>Dynamic</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v142</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <UseOfMfc>Dynamic</UseOfMfc>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <PreprocessorDefinitions>WIN32;_DEBUG;CHROMA22293_EXPORTS;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableUAC>false</EnableUAC>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <PreprocessorDefinitions>_DEBUG;CHROMA22293_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableUAC>false</EnableUAC>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <PreprocessorDefinitions>WIN32;NDEBUG;CHROMA22293_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableUAC>false</EnableUAC>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <PrecompiledHeader>Use</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <PreprocessorDefinitions>NDEBUG;CHROMA22293_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableUAC>false</EnableUAC>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="Chroma22293.h" />
+    <ClInclude Include="framework.h" />
+    <ClInclude Include="stdafx.h" />
+    <ClInclude Include="Resource.h" />
+    <ClInclude Include="SynSerial.h" />
+    <ClInclude Include="targetver.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Chroma22293.cpp" />
+    <ClCompile Include="stdafx.cpp">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="SynSerial.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Chroma22293.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 53 - 0
Chroma22293/Chroma22293/Chroma22293.vcxproj.filters

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="源文件">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="头文件">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
+    </Filter>
+    <Filter Include="资源文件">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="framework.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="targetver.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="Resource.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="Chroma22293.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="SynSerial.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="stdafx.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Chroma22293.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="SynSerial.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="stdafx.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Chroma22293.rc">
+      <Filter>资源文件</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>

+ 16 - 0
Chroma22293/Chroma22293/Resource.h

@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ 生成的包含文件。
+// 使用者 Chroma22293.rc
+
+#define IDS_APP_TITLE			103
+
+// 新对象的下一组默认值
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE	101
+#define _APS_NEXT_COMMAND_VALUE		40001
+#define _APS_NEXT_CONTROL_VALUE		1000
+#define _APS_NEXT_SYMED_VALUE		101
+#endif
+#endif

+ 305 - 0
Chroma22293/Chroma22293/SynSerial.cpp

@@ -0,0 +1,305 @@
+#include "StdAfx.h"
+#include "SynSerial.h"
+
+CSynSerial::CSynSerial(void) :m_hSerialPort(NULL)
+, m_dwInQueue(1024)
+, m_dwOutQueue(1024)
+{
+	memset(&m_dcb, 0, sizeof(DCB));
+	memset(&m_cts, 0, sizeof(COMMTIMEOUTS));
+	memset(&m_szSerialPort, 0, sizeof(TCHAR)*MAX_PORT_LEN);
+}
+
+CSynSerial::~CSynSerial(void)
+{
+	CloseSerialPort();
+}
+
+BOOL CSynSerial::OpenSerialPort(IN CONST BYTE & byCommPort, IN CONST DWORD & dwBaudRate, IN CONST BYTE & bySize, IN CONST BYTE & byParity, IN CONST BYTE & byStopBits, IN CONST BYTE & byStartAddr, IN CONST INT & nInterval)
+{
+	ASSERT(byCommPort);
+	CloseSerialPort();
+
+	_stprintf_s(m_szSerialPort, _T("\\\\.\\com%d"), (int)byCommPort);
+	m_hSerialPort = CreateFile(m_szSerialPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL);
+	if (m_hSerialPort == INVALID_HANDLE_VALUE)
+	{
+		// 打开串口失败;
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	BOOL bResult = FALSE;
+	// SetupComm设置缓冲区大小;
+	bResult = SetupComm(m_hSerialPort, m_dwInQueue, m_dwOutQueue);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 在串口读写之前,清除缓冲区;
+	bResult = PurgeComm(m_hSerialPort, PURGE_TXCLEAR | PURGE_RXCLEAR);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// GetCommState获取设备控制块状态;
+	memset(&m_dcb, 0, sizeof(DCB));
+	bResult = GetCommState(m_hSerialPort, &m_dcb);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	m_dcb.Parity = byParity;
+	if (m_dcb.Parity == NOPARITY)
+		m_dcb.fParity = FALSE;
+	else
+		m_dcb.fParity = TRUE;
+
+	m_dcb.BaudRate = dwBaudRate;
+	m_dcb.ByteSize = bySize;
+	m_dcb.StopBits = byStopBits;
+	if (m_dcb.ByteSize == 8)
+		m_dcb.StopBits = ONESTOPBIT;
+
+	// SetCommState设置设备的控制块状态;
+	memset(&m_cts, 0, sizeof(COMMTIMEOUTS));
+	bResult = SetCommState(m_hSerialPort, &m_dcb);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 获取设备的超时值;
+	bResult = GetCommTimeouts(m_hSerialPort, &m_cts);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 两字符之间最大的延时,设置0表示参数不起作用;
+	m_cts.ReadIntervalTimeout = 50;
+	m_cts.ReadTotalTimeoutMultiplier = 100;
+	m_cts.ReadTotalTimeoutConstant = 8000;
+	m_cts.WriteTotalTimeoutMultiplier = 100;
+	m_cts.WriteTotalTimeoutConstant = 5000;
+
+	// 设置设备的超时值;
+	bResult = SetCommTimeouts(m_hSerialPort, &m_cts);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CSynSerial::ReOpenSerialPort()
+{
+	ASSERT(_tcslen(m_szSerialPort));
+	CloseSerialPort();
+
+	m_hSerialPort = CreateFile(m_szSerialPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL);
+	if (m_hSerialPort == INVALID_HANDLE_VALUE)
+	{
+		// 打开串口失败;
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	BOOL bResult = FALSE;
+	// SetupComm设置缓冲区大小;
+	bResult = SetupComm(m_hSerialPort, m_dwInQueue, m_dwOutQueue);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 在串口读写之前,清除缓冲区;
+	bResult = PurgeComm(m_hSerialPort, PURGE_TXCLEAR | PURGE_RXCLEAR);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// SetCommState设置设备的控制块状态;
+	memset(&m_cts, 0, sizeof(COMMTIMEOUTS));
+	bResult = SetCommState(m_hSerialPort, &m_dcb);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 设置设备的超时值;
+	bResult = SetCommTimeouts(m_hSerialPort, &m_cts);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+void CSynSerial::CloseSerialPort()
+{
+	if (m_hSerialPort != NULL && m_hSerialPort != INVALID_HANDLE_VALUE)
+		CloseHandle(m_hSerialPort);
+	m_hSerialPort = NULL;
+}
+
+BOOL CSynSerial::SetSerialPort(IN CONST DWORD & dwBaudRate, IN CONST BYTE & byByteSize, IN CONST BYTE & byParity, IN CONST BYTE & byStopBits, IN CONST BYTE & byStartAddr, IN CONST DWORD & dwInQueue, IN CONST DWORD & dwOutQueue)
+{
+	if (!IsOpen())
+		return FALSE;
+
+	BOOL bResult = FALSE;
+	// GetCommState获取设备控制块状态;
+	memset(&m_dcb, 0, sizeof(DCB));
+	bResult = GetCommState(m_hSerialPort, &m_dcb);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	m_dcb.Parity = byParity;
+	if (m_dcb.Parity == NOPARITY)
+		m_dcb.fParity = FALSE;
+	else
+		m_dcb.fParity = TRUE;
+
+	m_dcb.BaudRate = dwBaudRate;
+	m_dcb.ByteSize = byByteSize;
+	m_dcb.StopBits = byStopBits;
+	if (m_dcb.ByteSize == 8)
+		m_dcb.StopBits = ONESTOPBIT;
+
+	// SetCommState设置设备的控制块状态;
+	memset(&m_cts, 0, sizeof(COMMTIMEOUTS));
+	bResult = SetCommState(m_hSerialPort, &m_dcb);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 获取设备的超时值;
+	bResult = GetCommTimeouts(m_hSerialPort, &m_cts);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	// 两字符之间最大的延时,设置0表示参数不起作用;
+	m_cts.ReadIntervalTimeout = 50;
+	m_cts.ReadTotalTimeoutMultiplier = 100;
+	m_cts.ReadTotalTimeoutConstant = 8000;
+	m_cts.WriteTotalTimeoutMultiplier = 100;
+	m_cts.WriteTotalTimeoutConstant = 3000;
+
+	// 设置设备的超时值;
+	bResult = SetCommTimeouts(m_hSerialPort, &m_cts);
+	if (!bResult)
+	{
+		DWORD dwError = GetLastError();
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+void CSynSerial::SetSerialDCB(IN CONST DCB & dcb)
+{
+}
+
+void CSynSerial::SetSerialCommTimeouts(IN CONST COMMTIMEOUTS & commTimeouts)
+{
+}
+
+DWORD CSynSerial::WriteComm(IN BYTE * pWirteBuf, IN CONST INT32 nWriteSize)
+{
+	if (!IsOpen())
+		return 0;
+
+	if (pWirteBuf == NULL || !::AfxIsValidAddress(pWirteBuf, nWriteSize, FALSE))
+	{
+		return 0;
+	}
+	
+	DWORD dwErrorFlags;
+	DWORD dwBytesWritten = 0;	// 实际写入的字节数;
+	// 写前, 清除错误;
+	COMSTAT ComStat;
+	ClearCommError(m_hSerialPort, &dwErrorFlags, &ComStat);	
+	// 写前,清空缓存区;
+	PurgeComm(m_hSerialPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
+	if ( !WriteFile(m_hSerialPort, pWirteBuf, nWriteSize, &dwBytesWritten, NULL) )
+	{
+		DWORD dwError = GetLastError();
+	}	
+
+	// 返回写入字节数;
+	return dwBytesWritten;
+}
+
+DWORD CSynSerial::ReadComm(IN BYTE * pReadBuf, IN CONST DWORD & dwReadSize)
+{
+	if (!IsOpen())
+		return 0;
+
+	if (pReadBuf == NULL || !::AfxIsValidAddress(pReadBuf, dwReadSize, FALSE))
+	{
+		return 0;
+	}
+
+	DWORD dwBytesRead = 0;
+	DWORD dwErrorFlags = 0;
+	// ReadFile前,使用ClearCommError清除错误;
+	COMSTAT ComStat = {0};
+	DWORD dwLastLen = 0;
+	ULONGLONG ulTick = GetTickCount64();	
+	// 直到有数据为止,超时3秒;
+	while (true)
+	{// cbInQue表示输入缓冲区的字节数; 
+		Sleep(150);
+		if (GetTickCount64() - ulTick > 3000)
+			break;
+		ClearCommError(m_hSerialPort, &dwErrorFlags, &ComStat);
+		// 防止读一次没读完,再读一次;二次长度一样表示读完;
+		if (ComStat.cbInQue != 0 && dwLastLen == ComStat.cbInQue)
+			break;
+		dwLastLen = ComStat.cbInQue;
+	}
+
+	if (ComStat.cbInQue == 0)
+	{
+		// 串口超时,无数据返回;
+		return 0;
+	}
+
+	dwBytesRead = ComStat.cbInQue;
+	if (dwReadSize < dwBytesRead)
+	{
+		dwBytesRead = dwReadSize;
+	}
+
+	if (ReadFile(m_hSerialPort, pReadBuf, dwBytesRead, &dwBytesRead, NULL))
+	{
+		return (INT)dwBytesRead;
+	}
+
+	return dwBytesRead;
+}

+ 83 - 0
Chroma22293/Chroma22293/SynSerial.h

@@ -0,0 +1,83 @@
+/************************************************************************/
+/*  Copyright (C), 2016-2020, [Home], 保留所有权利;
+/*  模 块 名:同步串口模块;
+/*  描    述:;
+/*
+/*  版    本:[V];
+/*  作    者:[Home];
+/*  日    期:[12/20/2017];
+/*
+/*
+/*  注    意:;
+/*
+/*  修改记录:[Home];
+/*  修改日期:;
+/*  修改版本:;
+/*  修改内容:;
+/************************************************************************/
+
+#ifndef __SYN_SERIAL__
+#define __SYN_SERIAL__
+
+#pragma once
+
+#define MAX_PORT_LEN 10
+
+class CSynSerial
+{
+public:
+	CSynSerial(void);
+	virtual ~CSynSerial(void);
+
+private:
+	DCB		m_dcb;
+	HANDLE	m_hSerialPort;
+	COMMTIMEOUTS	m_cts;
+
+	// 串口号(1~255);
+	TCHAR	m_szSerialPort[MAX_PORT_LEN];
+	// 输入缓存大小(byte);
+	DWORD	m_dwInQueue;
+	// 输出缓存大小(byte);
+	DWORD	m_dwOutQueue;
+
+public:
+	inline BOOL IsOpen() const {
+		return (m_hSerialPort == NULL || m_hSerialPort == INVALID_HANDLE_VALUE) ? FALSE : TRUE;
+	}
+
+	// 打开串口;
+	BOOL OpenSerialPort(
+		IN CONST BYTE& byCommPort,		// 串口号;
+		IN CONST DWORD& dwBaudRate,		// 波特率;
+		IN CONST BYTE& bySize,			// 数据位;
+		IN CONST BYTE& byParity,		// 校验位;
+		IN CONST BYTE& byStopBits,		// 停止位;
+		IN CONST BYTE& byStartAddr,		// 起始地址;
+		IN CONST INT& nInterval			// 间隔时间;
+	);
+	// 重装打开串口;
+	BOOL ReOpenSerialPort();
+	// 关闭串口;
+	void CloseSerialPort();
+	// 设置串口参数;
+	BOOL SetSerialPort(
+		IN CONST DWORD& dwBaudRate,		// 波特率;
+		IN CONST BYTE& byByteSize,		// 数据位;
+		IN CONST BYTE& byParity,		// 校验位;
+		IN CONST BYTE& byStopBits,		// 停止位;
+		IN CONST BYTE& byStartAddr,		// 起始地址;
+		IN CONST DWORD& dwInQueue,		// 输入缓存;
+		IN CONST DWORD& dwOutQueue		// 输出缓存;
+		);
+
+	// 设置dcb参数;
+	void SetSerialDCB(IN CONST DCB &dcb);
+	// 设置commtimeouts参数;
+	void SetSerialCommTimeouts(IN CONST COMMTIMEOUTS &commTimeouts);
+
+	virtual DWORD WriteComm(IN BYTE *pWirteBuf, IN CONST INT32 nWriteSize);
+	virtual DWORD ReadComm(IN BYTE *pReadBuf, IN CONST DWORD& nReadSize);
+};
+
+#endif // __SYN_SERIAL__

+ 24 - 0
Chroma22293/Chroma22293/framework.h

@@ -0,0 +1,24 @@
+#pragma once
+
+#include "targetver.h"
+#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 部分 CString 构造函数将是显式的
+#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS         // 移除对话框中的 MFC 控件支持
+
+#ifndef VC_EXTRALEAN
+#define VC_EXTRALEAN            // 从 Windows 头文件中排除极少使用的内容
+#endif
+
+#include <afx.h>
+#include <afxwin.h>         // MFC 核心组件和标准组件
+#include <afxext.h>         // MFC 扩展
+#ifndef _AFX_NO_OLE_SUPPORT
+#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
+#endif
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h>                     // MFC 对 Windows 公共控件的支持
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+#include <iostream>
+// Windows 头文件
+#include <windows.h>

+ 5 - 0
Chroma22293/Chroma22293/stdafx.cpp

@@ -0,0 +1,5 @@
+// stdafx.cpp: 与预编译标头对应的源文件
+
+#include "stdafx.h"
+
+// 当使用预编译的头时,需要使用此源文件,编译才能成功。

+ 14 - 0
Chroma22293/Chroma22293/stdafx.h

@@ -0,0 +1,14 @@
+// pch.h: 这是预编译标头文件。
+// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
+// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
+// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
+// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
+
+#ifndef PCH_H
+#define PCH_H
+
+// 添加要在此处预编译的标头
+#include "framework.h"
+#include "SynSerial.h"
+
+#endif //PCH_H

+ 6 - 0
Chroma22293/Chroma22293/targetver.h

@@ -0,0 +1,6 @@
+#pragma once
+
+// // 包含 SDKDDKVer.h 可定义可用的最高版本的 Windows 平台。
+// 如果希望为之前的 Windows 平台构建应用程序,在包含 SDKDDKVer.h 之前请先包含 WinSDKVer.h 并
+// 将 _WIN32_WINNT 宏设置为想要支持的平台。
+#include <SDKDDKVer.h>