You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
430 lines
7.6 KiB
C++
430 lines
7.6 KiB
C++
|
1 year ago
|
#include "devprinterstr.h"
|
||
|
|
#include <QThread>
|
||
|
|
|
||
|
|
bool little_than(const myprinterPara& s1, myprinterPara& s2)
|
||
|
|
{
|
||
|
|
return (s1.line <= s2.line);
|
||
|
|
}
|
||
|
|
|
||
|
|
devprinterstr::devprinterstr()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
int devprinterstr::InitStr()
|
||
|
|
{
|
||
|
|
memset(m_printerPort,0,sizeof(m_printerPort));
|
||
|
|
|
||
|
|
m_printType = PRINTTYPE_OTHER;
|
||
|
|
m_SerBaud = 9600;
|
||
|
|
m_nPrnVer = 1;
|
||
|
|
|
||
|
|
m_MaxCol =0;
|
||
|
|
m_MaxLine =0;
|
||
|
|
m_HeigthAdj =12;
|
||
|
|
|
||
|
|
m_JsonAnalyStr.InitStr();
|
||
|
|
InitPrinterCutPara(&m_CutPaperPara);
|
||
|
|
|
||
|
|
m_SerialPort.InitStr();
|
||
|
|
m_lpt.InitStr();
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
int devprinterstr::PRN_CreatePrinter(int nPrnVer, char* sPrintPort,
|
||
|
|
int nColMax, int nLineMax, int nHeightAdj,
|
||
|
|
char* sPortAddr, char* sFormat, char *sCutPaper)
|
||
|
|
{
|
||
|
|
int iRet;
|
||
|
|
|
||
|
|
InitStr();
|
||
|
|
|
||
|
|
iRet = strlen(sPrintPort);
|
||
|
|
if ((iRet >60) || (iRet <4))
|
||
|
|
{
|
||
|
|
//Write_Log("sPrintPort 长度错误");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = strlen(sFormat);
|
||
|
|
if ((iRet >240) || (iRet <18))
|
||
|
|
{
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = strlen(sCutPaper);
|
||
|
|
if ((iRet >100) || (iRet <26))
|
||
|
|
{
|
||
|
|
return -3;
|
||
|
|
}
|
||
|
|
|
||
|
|
strcpy(m_printerPort,sPrintPort);
|
||
|
|
charToUpper(m_printerPort);
|
||
|
|
|
||
|
|
iRet = GetPrinterType();
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
return -4;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* if(PRINTTYPE_COM != m_printType)
|
||
|
|
{
|
||
|
|
return -100;
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
if(m_MaxCol >200)
|
||
|
|
{
|
||
|
|
return -100;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(m_MaxLine >500)
|
||
|
|
{
|
||
|
|
return -101;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(m_HeigthAdj >255)
|
||
|
|
{
|
||
|
|
return -102;
|
||
|
|
}
|
||
|
|
m_MaxCol = nColMax;
|
||
|
|
m_MaxLine = nLineMax;
|
||
|
|
|
||
|
|
m_HeigthAdj = nHeightAdj;
|
||
|
|
m_nPrnVer = nPrnVer;
|
||
|
|
|
||
|
|
if(PRINTTYPE_LPT == m_printType)
|
||
|
|
{
|
||
|
|
int iPort = GetStatePort(sPortAddr);
|
||
|
|
if(iPort <0)
|
||
|
|
{
|
||
|
|
return -5;
|
||
|
|
}
|
||
|
|
|
||
|
|
iPort++;
|
||
|
|
m_lpt.SetStatesPort(iPort);
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = m_JsonAnalyStr.GetPrinterPara(m_PrnParalist,sFormat,m_MaxLine);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
m_PrnParalist.clear();
|
||
|
|
|
||
|
|
return -7;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(m_PrnParalist.size() >=2)
|
||
|
|
{
|
||
|
|
std::sort(m_PrnParalist.begin(), m_PrnParalist.end(), little_than);
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = m_JsonAnalyStr.GetCutPaperPara(&m_CutPaperPara,sCutPaper);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
m_PrnParalist.clear();
|
||
|
|
return -8;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(PRINTTYPE_COM == m_printType)
|
||
|
|
{
|
||
|
|
iRet = m_SerialPort.OpenPort(m_printerPort,m_SerBaud);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
m_PrnParalist.clear();
|
||
|
|
return -9;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else if(PRINTTYPE_LPT == m_printType)
|
||
|
|
{
|
||
|
|
iRet = m_lpt.OpenPort(m_printerPort);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
m_PrnParalist.clear();
|
||
|
|
return -9;
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
int devprinterstr::GetPrinterType()
|
||
|
|
{
|
||
|
|
int iRet;
|
||
|
|
char * ptr = NULL;
|
||
|
|
int iFlag = 0;
|
||
|
|
int iFind = 0;
|
||
|
|
|
||
|
|
if (strstr(m_printerPort, "LPT"))
|
||
|
|
{
|
||
|
|
iFlag = 1;
|
||
|
|
}
|
||
|
|
else if (strstr(m_printerPort, "COM"))
|
||
|
|
{
|
||
|
|
iFlag = 2;
|
||
|
|
}
|
||
|
|
else if (strstr(m_printerPort, "USB"))
|
||
|
|
{
|
||
|
|
m_printType = PRINTTYPE_USBLPT;
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (1 == iFlag)
|
||
|
|
{
|
||
|
|
iRet = isLptPort(m_printerPort);
|
||
|
|
if (0 == iRet)
|
||
|
|
{
|
||
|
|
m_printType = PRINTTYPE_LPT;
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
else if(2== iFlag)
|
||
|
|
{
|
||
|
|
iRet = strlen(m_printerPort);
|
||
|
|
for (int i = 0; i < iRet; i++)
|
||
|
|
{
|
||
|
|
if (':' == m_printerPort[i])
|
||
|
|
{
|
||
|
|
iFind = 1;
|
||
|
|
m_printerPort[i] = 0;
|
||
|
|
ptr = m_printerPort + i + 1;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = isComPort(m_printerPort);
|
||
|
|
if (iRet<0)
|
||
|
|
{
|
||
|
|
return -3;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (1 == iFind)
|
||
|
|
{
|
||
|
|
iRet = GetBaud(ptr);
|
||
|
|
if (iRet < 0)
|
||
|
|
{
|
||
|
|
return -4;
|
||
|
|
}
|
||
|
|
m_SerBaud = iRet;
|
||
|
|
}
|
||
|
|
|
||
|
|
m_printType = PRINTTYPE_COM;
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return -5;
|
||
|
|
}
|
||
|
|
|
||
|
|
return -6;
|
||
|
|
}
|
||
|
|
|
||
|
|
int devprinterstr::GetStatePort(char* sPortAddr)
|
||
|
|
{
|
||
|
|
char * pData;
|
||
|
|
int iRet;
|
||
|
|
int base;
|
||
|
|
int iLen;
|
||
|
|
QString qstr;
|
||
|
|
bool ok;
|
||
|
|
iRet =0;
|
||
|
|
|
||
|
|
pData = sPortAddr;
|
||
|
|
iLen = strlen(sPortAddr);
|
||
|
|
if(iLen <=2)
|
||
|
|
{
|
||
|
|
iRet = isnumer(sPortAddr);
|
||
|
|
if(iRet<0)
|
||
|
|
{
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = QString(sPortAddr).toInt();
|
||
|
|
return iRet;
|
||
|
|
}
|
||
|
|
|
||
|
|
base =10;
|
||
|
|
//16 进制
|
||
|
|
if('0' ==sPortAddr[0])
|
||
|
|
{
|
||
|
|
if( ('x' ==sPortAddr[1] ) || ('X' ==sPortAddr[1]))
|
||
|
|
{
|
||
|
|
base =16;
|
||
|
|
pData +=2;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = isnumer(pData,base);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
|
||
|
|
qstr = pData;
|
||
|
|
qstr = qstr.toUpper();
|
||
|
|
|
||
|
|
iRet=qstr.toInt(&ok,base);
|
||
|
|
if(ok)
|
||
|
|
{
|
||
|
|
return iRet;
|
||
|
|
}
|
||
|
|
|
||
|
|
return -3;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
HRESULT devprinterstr::PRN_Close()
|
||
|
|
{
|
||
|
|
if(PRINTTYPE_COM == m_printType)
|
||
|
|
{
|
||
|
|
m_SerialPort.ClosePort();
|
||
|
|
}
|
||
|
|
else if(PRINTTYPE_LPT == m_printType)
|
||
|
|
{
|
||
|
|
m_lpt.ClosePort();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
m_PrnParalist.clear();
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
HRESULT devprinterstr::PRN_CheckPrinter(INT32 &iStatus)
|
||
|
|
{
|
||
|
|
if(PRINTTYPE_COM == m_printType)
|
||
|
|
{
|
||
|
|
return m_SerialPort.PRN_CheckPrinter(iStatus);
|
||
|
|
}
|
||
|
|
else if(PRINTTYPE_LPT == m_printType)
|
||
|
|
{
|
||
|
|
return m_lpt.PRN_CheckPrinter(iStatus);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
HRESULT devprinterstr::PRN_Print(char *pInfo)
|
||
|
|
{
|
||
|
|
QList<myprinterInfo>printerInfolist;
|
||
|
|
QList<myprinterData>printerdatalist;
|
||
|
|
int iRet;
|
||
|
|
|
||
|
|
if(! pInfo)
|
||
|
|
{
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(strlen(pInfo) <13)
|
||
|
|
{
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = m_JsonAnalyStr.GetPrinterInfo(printerInfolist,pInfo);
|
||
|
|
if(iRet<0)
|
||
|
|
{
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
iRet = CreatePrinterData(printerdatalist,printerInfolist);
|
||
|
|
if(iRet<0)
|
||
|
|
{
|
||
|
|
return -2;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(PRINTTYPE_COM == m_printType)
|
||
|
|
{
|
||
|
|
iRet =m_SerialPort.PrinterData(m_MaxCol,m_MaxLine,m_HeigthAdj,&m_CutPaperPara,printerdatalist);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
return -3;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(PRINTTYPE_LPT == m_printType)
|
||
|
|
{
|
||
|
|
iRet =m_lpt.PrinterData(m_MaxCol,m_MaxLine,m_HeigthAdj,&m_CutPaperPara,printerdatalist);
|
||
|
|
if(iRet <0)
|
||
|
|
{
|
||
|
|
return -3;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int devprinterstr::CreatePrinterData(QList<myprinterData> & Datalist,QList<myprinterInfo> & Infolist)
|
||
|
|
{
|
||
|
|
myprinterData tmpData;
|
||
|
|
myprinterPara tmpPara;
|
||
|
|
myprinterInfo tmpinfo;
|
||
|
|
tmpData.line = -1;
|
||
|
|
// int iFlag =0;
|
||
|
|
int iLen;
|
||
|
|
int iRet;
|
||
|
|
|
||
|
|
iLen = sizeof(tmpData.Data);
|
||
|
|
for(int i=0; i<m_PrnParalist.size(); i++)
|
||
|
|
{
|
||
|
|
tmpPara = m_PrnParalist.at(i);
|
||
|
|
if(tmpPara.line != tmpData.line)
|
||
|
|
{
|
||
|
|
if(0 != i)
|
||
|
|
{
|
||
|
|
Datalist.append(tmpData);
|
||
|
|
}
|
||
|
|
tmpData.line = tmpPara.line;
|
||
|
|
memset(tmpData.Data,0,iLen);
|
||
|
|
for(int j =0; j<(iLen-1); j++)
|
||
|
|
{
|
||
|
|
(tmpData.Data)[j] = ' ';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
for(int k =0; k<Infolist.size(); k++)
|
||
|
|
{
|
||
|
|
tmpinfo = Infolist.at(k);
|
||
|
|
iRet = strcmp(tmpPara.Name,tmpinfo.Name);
|
||
|
|
if(0 == iRet)
|
||
|
|
{
|
||
|
|
int itmpLen = strlen(tmpinfo.Value);
|
||
|
|
if( (itmpLen + tmpPara.col) >(iLen -1))
|
||
|
|
{
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
memcpy(tmpData.Data+tmpPara.col,tmpinfo.Value,itmpLen);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Datalist.append(tmpData);
|
||
|
|
return 0;
|
||
|
|
}
|