zhangyang hace 6 años
padre
commit
1d4cf0ab27

+ 25 - 29
lewaimai_pos_windows/tool/CPosPrinter.cpp

@@ -48,7 +48,7 @@ bool CPosPrinter::InitShouyin()
         Port = szDevicePath[i++];
         LOG_INFO("准备打开端口 Port = " << Port);
 
-        HANDLE hPort = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
+        HANDLE hPort = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
 
         if(hPort == INVALID_HANDLE_VALUE)
         {
@@ -70,7 +70,7 @@ bool CPosPrinter::InitShouyin()
 
         LOG_INFO("打开usb端口,准备进行打印机检测! hPort:" << hPort);
 
-        if(PortTest(hPort) == true)
+        if(PortTest(Port, hPort) == true)
         {
             //端口测试连通,保存起来
             PrinterHandle newHandle;
@@ -89,7 +89,7 @@ bool CPosPrinter::InitShouyin()
     //开始添加并口的端口
     std::wstring LptStr = L"lpt1";
 
-    HANDLE hPort = CreateFile(LptStr.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
+    HANDLE hPort = CreateFile(LptStr.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
 
     if(hPort == INVALID_HANDLE_VALUE)
     {
@@ -110,7 +110,7 @@ bool CPosPrinter::InitShouyin()
         //这个表示并口可以使用
         LOG_INFO("找到并口,准备进行打印机检测! hPort:" << hPort);
 
-        if(PortTest(hPort) == true)
+        if(PortTest(LptStr.c_str(), hPort) == true)
         {
             //并口测试连通,保存起来
             PrinterHandle newHandle;
@@ -1093,7 +1093,7 @@ int CPosPrinter::WriteBuf(const char* buf, int len)
 /*
  *测试这个并口是否连通的
  **/
-bool CPosPrinter::PortTest(HANDLE hPort)
+bool CPosPrinter::PortTest(const TCHAR* Port, HANDLE hPort)
 {
     char chInitCode[3] = { 0x1D, 0x49, 0x42 };
 
@@ -1118,37 +1118,33 @@ bool CPosPrinter::PortTest(HANDLE hPort)
             {
                 LOG_INFO("printer is connect, handle:" << hPort);
 
-				char chBuffer[2];
-				memset(chBuffer, 0, 2);
+				HANDLE hPort_2 = CreateFile(Port, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 
-				OVERLAPPED overlap2 = { 0 };
-
-				overlap2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);;//创建时无信号的事件
-
-				DWORD dwReadSize = 0;
-				BOOL bResult = ReadFile(hPort, chBuffer, 1, &dwReadSize, &overlap2);
-				if (!bResult)
+				if (hPort_2 == INVALID_HANDLE_VALUE)
 				{
-					if (ERROR_IO_PENDING == GetLastError()) //函数返回ERROR_IO_PENDING,表明USB正在进行读操作
-					{
-						WaitForSingleObject(overlap2.hEvent, 2000);
-						DWORD numread;
-						BOOL rc = GetOverlappedResult(hPort, &overlap2, &numread, FALSE);
+					// 打开端口失败
+					DWORD error = GetLastError();
 
-						LOG_INFO("numread:" << numread);
-
-						LOG_INFO("buffer:" << chBuffer);
+					if (error == 2)
+					{
+						//没有指定的文件
+						LOG_INFO("没有找对对应的usb端口");
 					}
-					else
+					else if (error == 5)
 					{
-						int a = GetLastError();
-						int b = a;
+						LOG_INFO("usb端口被占用!");
 					}
+
+					return false;
 				}
-				else
-				{
-					int a = 1;
-				}
+
+				char chBuffer[100];
+				memset(chBuffer, 0, 100);
+
+				DWORD dwReadSize = 0;
+				BOOL bResult = ReadFile(hPort_2, chBuffer, 99, &dwReadSize, NULL);
+
+				LOG_INFO("buffer:" << chBuffer);
 
                 return true;
             }

+ 1 - 1
lewaimai_pos_windows/tool/CPosPrinter.h

@@ -38,7 +38,7 @@ private:
 	int WriteData(string meg);
 	int WriteBuf(const char* buf, int len);
 
-	bool PortTest(HANDLE hPort);
+	bool PortTest(const TCHAR* Port, HANDLE hPort);
 
 	int POS_Reset(void);
 	int POS_FeedLine(void);