|
|
@@ -48,7 +48,7 @@ bool CPosPrinter::InitShouyin()
|
|
|
Port = szDevicePath[i++];
|
|
|
LOG_INFO("准备打开端口 Port = " << Port);
|
|
|
|
|
|
- HANDLE hPort = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
|
|
+ HANDLE hPort = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
|
|
|
|
|
|
if(hPort == INVALID_HANDLE_VALUE)
|
|
|
{
|
|
|
@@ -348,10 +348,6 @@ int CPosPrinter::GetPrinterType(wstring vid, wstring pid)
|
|
|
//佳博标签打印机
|
|
|
return 2;
|
|
|
}
|
|
|
- else if (vid == L"0fe6" && pid == L"811e")
|
|
|
- {
|
|
|
- return 2;
|
|
|
- }
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
@@ -1063,6 +1059,8 @@ int CPosPrinter::WriteBuf(const char* buf, int len)
|
|
|
//LOG_INFO("Request queued, waiting... handle:" << hPort);
|
|
|
WaitForSingleObject(hPort, 5000);
|
|
|
//LOG_INFO("Request completed, handle:" << hPort);
|
|
|
+
|
|
|
+ //计算写入了多少字节的数据
|
|
|
DWORD numread;
|
|
|
rc = GetOverlappedResult(
|
|
|
hPort,
|
|
|
@@ -1097,15 +1095,14 @@ int CPosPrinter::WriteBuf(const char* buf, int len)
|
|
|
**/
|
|
|
bool CPosPrinter::PortTest(HANDLE hPort)
|
|
|
{
|
|
|
- char chInitCode[] = "\x1B\x40";
|
|
|
+ char chInitCode[3] = { 0x1D, 0x49, 0x42 };
|
|
|
|
|
|
DWORD dwWrite;
|
|
|
|
|
|
OVERLAPPED overlap;
|
|
|
memset(&overlap, 0, sizeof(overlap));
|
|
|
|
|
|
- BOOL rc = WriteFile(hPort, chInitCode, (DWORD)2L, &dwWrite, &overlap);
|
|
|
-
|
|
|
+ BOOL rc = WriteFile(hPort, chInitCode, 3, &dwWrite, &overlap);
|
|
|
if(rc)
|
|
|
{
|
|
|
LOG_INFO("writefile success immediately, handle:" << hPort);
|
|
|
@@ -1117,10 +1114,42 @@ bool CPosPrinter::PortTest(HANDLE hPort)
|
|
|
if(GetLastError() == ERROR_IO_PENDING)
|
|
|
{
|
|
|
DWORD ret = WaitForSingleObject(hPort, 500);
|
|
|
-
|
|
|
if(ret == 0)
|
|
|
{
|
|
|
LOG_INFO("printer is connect, handle:" << hPort);
|
|
|
+
|
|
|
+ char chBuffer[2];
|
|
|
+ memset(chBuffer, 0, 2);
|
|
|
+
|
|
|
+ OVERLAPPED overlap2 = { 0 };
|
|
|
+
|
|
|
+ overlap2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);;//创建时无信号的事件
|
|
|
+
|
|
|
+ DWORD dwReadSize = 0;
|
|
|
+ BOOL bResult = ReadFile(hPort, chBuffer, 1, &dwReadSize, &overlap2);
|
|
|
+ if (!bResult)
|
|
|
+ {
|
|
|
+ if (ERROR_IO_PENDING == GetLastError()) //函数返回ERROR_IO_PENDING,表明USB正在进行读操作
|
|
|
+ {
|
|
|
+ WaitForSingleObject(overlap2.hEvent, 2000);
|
|
|
+ DWORD numread;
|
|
|
+ BOOL rc = GetOverlappedResult(hPort, &overlap2, &numread, FALSE);
|
|
|
+
|
|
|
+ LOG_INFO("numread:" << numread);
|
|
|
+
|
|
|
+ LOG_INFO("buffer:" << chBuffer);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ int a = GetLastError();
|
|
|
+ int b = a;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ int a = 1;
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
else
|