|
|
@@ -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;
|
|
|
}
|