|
|
@@ -1,477 +0,0 @@
|
|
|
-#include "termalprintimpl.h"
|
|
|
-#include "SUcs.h"
|
|
|
-
|
|
|
-ThermalPrintClassImpl::ThermalPrintClassImpl()
|
|
|
-{
|
|
|
- m_pPrint = new ReceiptSnbc();
|
|
|
- m_bStartup = false;
|
|
|
-}
|
|
|
-
|
|
|
-ThermalPrintClassImpl::~ThermalPrintClassImpl()
|
|
|
-{
|
|
|
- delete m_pPrint;
|
|
|
-}
|
|
|
-
|
|
|
-// 打开打印机
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::DevOpen(BYTE btPort,DWORD dwBaudRate)
|
|
|
-{
|
|
|
- int iRet = m_pPrint->Open(0x154f, 0x154f);
|
|
|
- if (iRet != 0) return GetErrorInfo(iRet, "DevOpen");
|
|
|
-
|
|
|
- iRet = m_pPrint->GetState();
|
|
|
- return GetErrorInfo(iRet, "DevOpen");
|
|
|
-}
|
|
|
-
|
|
|
-int getFileVer(char* sFile, short& ch1, short& ch2)
|
|
|
-{
|
|
|
- ch1 = 0;
|
|
|
- ch2 = 0;
|
|
|
- char* pFind = strstr(sFile, ".so");
|
|
|
- char* pTemp = pFind;
|
|
|
- while (pTemp)
|
|
|
- {
|
|
|
- pFind = pTemp;
|
|
|
- pTemp = strstr(pFind + 3, ".so");
|
|
|
- }
|
|
|
- if (pFind == NULL) return 0;
|
|
|
-
|
|
|
- pTemp = pFind - 1;
|
|
|
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
- if (*pTemp == '.')
|
|
|
- ch2 = atoi(pTemp+1);
|
|
|
- pTemp--;
|
|
|
- while(isdigit(*pTemp) && pTemp > sFile) pTemp--;
|
|
|
- if (*pTemp == '.')
|
|
|
- ch1 = atoi(pTemp+1);
|
|
|
- return 1;
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "GetDevCategory");
|
|
|
-
|
|
|
- char sSVer[256];
|
|
|
- char szType[] = {"PVER=SNBC#MID=BT-NH80"};
|
|
|
- char szModel[] = "FWID=%s";
|
|
|
- strcpy(devCategory.szType, szType);
|
|
|
- if (m_pPrint->GetFirmware(sSVer) == 0)
|
|
|
- sprintf(devCategory.szModel, szModel, sSVer + 1);
|
|
|
- else
|
|
|
- sprintf(devCategory.szModel, szModel, "00000000");
|
|
|
- strcpy(devCategory.szVendor, "cw");
|
|
|
-
|
|
|
- char cFilePath[300] = {0};
|
|
|
- GetCurLibsPath(m_sLibPath, cFilePath);
|
|
|
- short v1,v2;
|
|
|
- getFileVer(cFilePath, v1, v2);
|
|
|
-
|
|
|
- devCategory.version.wMajor = v1;
|
|
|
- devCategory.version.wMinor = v2;
|
|
|
- devCategory.version.wRevision = 0xffff;
|
|
|
- devCategory.version.wBuild = FILE_VERSION;
|
|
|
- char szRet[512] = {0};
|
|
|
- sprintf(szRet, "szType:%s,szModel:%s,szVendor:%s,version.wMajor:%d,version.wMinor:%d,version.wBuild:%d,version.wRevision:%d,eState:%d(0:故障1:正常)",
|
|
|
- devCategory.szType,devCategory.szModel,devCategory.szVendor,devCategory.version.wMajor,devCategory.version.wMinor,devCategory.version.wBuild,devCategory.version.wRevision,devCategory.eState);
|
|
|
- LOG4VTM(INFO, szRet);
|
|
|
-
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::Reset()
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "Reset");
|
|
|
- m_pPrint->Init();
|
|
|
- int iRet = m_pPrint->GetState();
|
|
|
- return GetErrorInfo(iRet, "Reset");
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::DevClose()
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "DevClose");
|
|
|
- int iRet = m_pPrint->Close();
|
|
|
- return GetErrorInfo(iRet, "DevClose");
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
|
|
|
-{
|
|
|
- memcpy(&devErrInfo, &m_DevErrInfo, sizeof(DevErrorInfo));
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-// 获取打印机实时状态
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::GetDevState(ThermalState& devState)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "GetDevCategory");
|
|
|
-
|
|
|
- int iRet = m_pPrint->GetState();
|
|
|
- if (iRet < 0)
|
|
|
- return GetErrorInfo(iRet, "Reset");
|
|
|
- devState.hardwareState = STATE_OK;
|
|
|
- switch(iRet)
|
|
|
- {
|
|
|
- case RECEIPT_SUCCESS:
|
|
|
- devState.paperState = PAPER_FULL;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_NO_MEDIA:
|
|
|
- devState.paperState = PAPER_EMPTY;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_PAP_LOW:
|
|
|
- devState.paperState = PAPER_LOW;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_HEAD_UP:
|
|
|
- devState.hardwareState = STATE_OTHER_ERROR;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_JAMMED:
|
|
|
- devState.paperState = PAPER_JAMMED;
|
|
|
- break;
|
|
|
- }
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-//开始打印初始设置:paperWidth一般为80mm和57mm
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::BeginPrint(ThermalPaperType eType, int paperWidth)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "BeginPrint");
|
|
|
- int iRet = m_pPrint->Init();
|
|
|
- if (iRet != 0)
|
|
|
- return GetErrorInfo(iRet, "BeginPrint");
|
|
|
- m_bStartup = true;
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//打印控制指令函数:主要是打印,切纸和控制打印光标指令函数
|
|
|
-//第三个参数是预留参数 暂时无用到
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::ControlAction(PrintAction eAction, DWORD dwValue1, DWORD dwValue2)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "ControlAction");
|
|
|
- char sAnsi[256];
|
|
|
- sprintf(sAnsi, "ControlAction PrintAction=%d val=%d,%d", eAction, dwValue1, dwValue2);
|
|
|
- LOG4VTM(INFO, sAnsi);
|
|
|
- int iRet = 0;
|
|
|
- switch(eAction)
|
|
|
- {
|
|
|
- case ACTION_PRINT_ONE_LINE:
|
|
|
- iRet = m_pPrint->FeedLines(1);
|
|
|
- break;
|
|
|
- case ACTION_PRINT_MOVEFORWRAD_LINES:
|
|
|
- iRet = m_pPrint->FeedLines(dwValue1);
|
|
|
- break;
|
|
|
-// case ACTION_PRINT_MOVEBACKWRAD_LINES: //回纸n行(单位:字符行)
|
|
|
-// iRet = m_pPrint->FeedLines(-dwValue1);
|
|
|
-// break;
|
|
|
- case ACTION_CUT_ALL:
|
|
|
- iRet = m_pPrint->Cut(0);
|
|
|
- break;
|
|
|
- case ACTION_CUT_HALF:
|
|
|
- iRet = m_pPrint->Cut(1);
|
|
|
- break;
|
|
|
- case ACTION_MOVE_TO_POSITION_RELATIVE: //把打印光标移动相对当前位置一段距离(横向),单位mm
|
|
|
- iRet = m_pPrint->MoveX(dwValue1 * 8);
|
|
|
- break;
|
|
|
- case ACTION_MOVE_TO_FORWRAD_LENGTH:
|
|
|
- iRet = m_pPrint->FeedPaper(0, dwValue1 * 8);
|
|
|
- break;
|
|
|
-// case ACTION_MOVE_TO_BLACKMARK: //移动到黑标位置,把打印位置设置在行首(标记纸有效)
|
|
|
-// iRet = m_pPrint->mo
|
|
|
-// break;
|
|
|
-// case ACTION_PRINT_MOVEBACK_TO_LINE: //设置起始位置在行首,取值(0:打印内容返回行首,1:清空要打印的内容返回行首)
|
|
|
-// iRet = m_pPrint->FeedPaper(0, dwValue1 * 8);
|
|
|
-// break;
|
|
|
- }
|
|
|
- return GetErrorInfo(iRet, "ControlAction");
|
|
|
-}
|
|
|
-
|
|
|
-//打印参数指令函数:
|
|
|
-//第三个参数是预留参数 暂时无用到
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::SetParam(CommandType eType, DWORD dwValue1, DWORD dwValue2)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "SetParam");
|
|
|
- char sAnsi[1024];
|
|
|
- sprintf(sAnsi, "SetParam CommandType=%d val=%d,%d", eType, dwValue1, dwValue2);
|
|
|
- LOG4VTM(INFO, sAnsi);
|
|
|
-
|
|
|
- int iRet = 0;
|
|
|
- switch(eType)
|
|
|
- {
|
|
|
- case COMMON_ROW_SPACE:
|
|
|
- iRet = m_pPrint->SetRowDistance(dwValue1 * 8);
|
|
|
- break;
|
|
|
- case COMMON_ALIGN:
|
|
|
- iRet = m_pPrint->SetAlign(dwValue1);
|
|
|
- break;
|
|
|
-// case COMMON_REVERSE:
|
|
|
-// iRet = m_pPrint->SetInverse(dwValue1);
|
|
|
-// break;
|
|
|
- case COMMON_LEFT_MARGIN:
|
|
|
- iRet = m_pPrint->SetLeftDistance(dwValue1 * 8);
|
|
|
- break;
|
|
|
- case COMMON_PRINTABLE_AREA:
|
|
|
- iRet = m_pPrint->SetPrintArea(dwValue1 * 8);
|
|
|
- break;
|
|
|
- }
|
|
|
- return GetErrorInfo(iRet, "SetParam");
|
|
|
-}
|
|
|
-
|
|
|
-//打印字体指令函数:主要是字体相关饿指令函数
|
|
|
-//第三个参数是预留参数 设置FONT_CUSTOM_SIZE用到,dwValue1表示宽,dwValue2表示长
|
|
|
-// 设置FONT_LEFT_RIGHT_SPACE用到 dwValue1表示左边距 dwValue2表示右边距
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::SetFont(FontStyle eType, DWORD dwValue1, DWORD dwValue2)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "SetFont");
|
|
|
- char sAnsi[1024];
|
|
|
- sprintf(sAnsi, "SetFont FontStyle=%d val=%d,%d", eType, dwValue1, dwValue2);
|
|
|
- LOG4VTM(INFO, sAnsi);
|
|
|
-
|
|
|
- int iRet = 0;
|
|
|
- switch(eType)
|
|
|
- {
|
|
|
- case FONT_UNDERLINE:
|
|
|
- m_FontParam.bUL = dwValue1;
|
|
|
- m_bFontChanged = true;
|
|
|
- break;
|
|
|
- case FONT_BOLD:
|
|
|
- m_FontParam.bold = dwValue1;
|
|
|
- m_bFontChanged = true;
|
|
|
- break;
|
|
|
- case FONT_DOUBLEHEIGHT:
|
|
|
- m_FontParam.bDH = dwValue1;
|
|
|
- m_bFontChanged = true;
|
|
|
- break;
|
|
|
- case FONT_DOUBLEWIDE:
|
|
|
- m_FontParam.bDW = dwValue1;
|
|
|
- m_FontParam.iXScale = dwValue1 ? 2 : 1;
|
|
|
- m_bFontChanged = true;
|
|
|
- break;
|
|
|
- case FONT_INVERSE:
|
|
|
- iRet = m_pPrint->SetInverse(dwValue1);
|
|
|
- break;
|
|
|
- case FONT_CUSTOM_SIZE:
|
|
|
- m_FontParam.iXScale = dwValue1;
|
|
|
- iRet = m_pPrint->SetScale(dwValue1, dwValue2);
|
|
|
- break;
|
|
|
- case FONT_ROTATE:
|
|
|
- iRet = m_pPrint->SetRotate(dwValue1);
|
|
|
- break;
|
|
|
- case FONT_LEFT_RIGHT_SPACE:
|
|
|
- iRet = m_pPrint->SetCharSpace(dwValue1*8 / m_FontParam.iXScale, dwValue2*8 / m_FontParam.iXScale);
|
|
|
- break;
|
|
|
- }
|
|
|
- return GetErrorInfo(iRet, "SetParam");
|
|
|
-}
|
|
|
-
|
|
|
-//打印文本数据函数
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintText(BYTE* pData, DWORD dwDataLen)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintText");
|
|
|
- int iRet = 0;
|
|
|
-
|
|
|
- char sAnsi[64];
|
|
|
- sprintf(sAnsi, "send leng=%d", dwDataLen);
|
|
|
- LOG4VTM(INFO, sAnsi);
|
|
|
-
|
|
|
- if (m_bFontChanged)
|
|
|
- {
|
|
|
- iRet = m_pPrint->SetFont(m_FontParam.bDH, m_FontParam.bDW, m_FontParam.bold, m_FontParam.bUL, false);
|
|
|
- m_bFontChanged = false;
|
|
|
- if (iRet != 0)
|
|
|
- return GetErrorInfo(iRet, "PrintText");
|
|
|
- }
|
|
|
- int iLen = dwDataLen > 0 ? dwDataLen : strlen((char*)pData);
|
|
|
- char* pGB = new char[iLen+1];
|
|
|
- iLen = SUcs::UTF8ToGB18030((char*)pData, iLen, pGB);
|
|
|
- iRet = m_pPrint->GetState();
|
|
|
- if (iRet < 0)
|
|
|
- GetErrorInfo(iRet, "PrintText");
|
|
|
- iRet = m_pPrint->PrintData(pGB);
|
|
|
- if (iRet < 0)
|
|
|
- return GetErrorInfo(iRet, "PrintText");
|
|
|
- return GetErrorInfo(0, "PrintText");
|
|
|
-}
|
|
|
-
|
|
|
-//打印条形码函数
|
|
|
-//dwUnitWidth 条形码基本模块宽度 取值{2..6} 默认2
|
|
|
-//dwHeight 条形码高度 单位mm
|
|
|
-//iHRIPosition hri字符打印位置 见枚举类型HriPosition
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintBarCode(BarCodeType eType, BYTE* pData,
|
|
|
- DWORD dwDataLen, DWORD dwUnitWidth,
|
|
|
- DWORD dwHeight, HriPosition eHRIPosition)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintBarCode");
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-//打印二维码QRCode函数
|
|
|
-//dwUnitWidth 二维码基本元素宽度 取值{1..255} 默认3
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintQRCode(BYTE* pData, DWORD dwDataLen, DWORD dwUnitWidth)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintQRCode");
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-//打印二维码QRCode函数
|
|
|
-//dwWidth 二维码长度 ,单位mm
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintQRCodeByArea(BYTE* pData, DWORD dwDataLen, DWORD dwUnitWidth, DWORD dwWidth)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintQRCodeByArea");
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-//打印二维码PDF417函数
|
|
|
-//errorLevel pdf417纠错级别 取值{0..8}
|
|
|
-//dwUnitWidth 基本元素宽度 取值{3..90}
|
|
|
-//dwUnitHeight 基本元素长度 取值{1..30}
|
|
|
-//row pdf417 行数 取值{1..7}
|
|
|
-//lines pdf417 列数 取值{2..25}
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintPDF417code(BYTE* pData, DWORD dwDataLen, int errorLevel,
|
|
|
- DWORD dwUnitWidth, DWORD dwUnitHeight, int rows, int lines)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintPDF417code");
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//打印二维码PDF417函数
|
|
|
-//errorLevel pdf417纠错级别 取值{0..8}
|
|
|
-//dwWidth pdf417宽度 单位mm
|
|
|
-//dwHeight pdf417长度 单位mm
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintPDF417codeByArea(BYTE* pData, DWORD dwDataLen,
|
|
|
- int errorLevel, DWORD dwWidth, DWORD dwHeight)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintPDF417codeByArea");
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//打印图像函数:pData是base64编码的数据
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::PrintImage(BYTE* pData, DWORD dwDataLen)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "PrintImage");
|
|
|
- int iRet = m_pPrint->PrintMemBmp((char*)pData, true);
|
|
|
- return GetErrorInfo(iRet, "PrintImage");
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//获取打印失败后错误信息和错误状态
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::GetLastErrState(ThermalState& devState, DevErrorInfo& devErrInfo)
|
|
|
-{
|
|
|
- LOG4VTM_FUNCTION();
|
|
|
- if (!m_pPrint->Isopen())
|
|
|
- return GetErrorInfo(RECEIPT_ERR_NO_OPEN, "GetLastErrState");
|
|
|
-
|
|
|
- int iRet = m_pPrint->GetState();
|
|
|
- if (iRet < 0)
|
|
|
- return GetErrorInfo(iRet, "Reset");
|
|
|
- devState.hardwareState = STATE_OK;
|
|
|
- switch(iRet)
|
|
|
- {
|
|
|
- case RECEIPT_SUCCESS:
|
|
|
- devState.paperState = PAPER_FULL;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_NO_MEDIA:
|
|
|
- devState.paperState = PAPER_EMPTY;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_PAP_LOW:
|
|
|
- devState.paperState = PAPER_LOW;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_HEAD_UP:
|
|
|
- devState.hardwareState = STATE_OTHER_ERROR;
|
|
|
- break;
|
|
|
- case RECEIPT_WARN_JAMMED:
|
|
|
- devState.paperState = PAPER_JAMMED;
|
|
|
- break;
|
|
|
- }
|
|
|
- memcpy(&devErrInfo, &m_DevErrInfo, sizeof(DevErrorInfo));
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-/////////////////////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
-// DEC_SUCCESS DEC_HARDWARE DEC_TIMEOUT DEC_INVALID_PARAMETER DEC_INVALID_MASTER_KEY
|
|
|
-const static CmbErrorDef PrintErrInfo[] = {
|
|
|
- {RECEIPT_SUCCESS, "命令执行成功", Error_Succeed, DEC_SUCCESS},
|
|
|
- {RECEIPT_ERR_NO_FOND, "设备未找到", Error_Hardware, DEC_DEV_NOT_FOUND},
|
|
|
- {RECEIPT_ERR_NO_OPEN, "设备尚未打开", Error_Param, DEC_DEV_NOT_OPENED},
|
|
|
- {RECEIPT_ERR_RCV_ERR, "数据接收错误", Error_IO, DEC_COMMUNICATION_FAILED},
|
|
|
- {RECEIPT_ERR_IN_ERR, "输入参数错误", Error_Param, DEC_INVALID_PARAMETER},
|
|
|
- {RECEIPT_ERR_DEV_ERR, "设备硬件故障", Error_Hardware, DEC_HARDWARE},
|
|
|
-
|
|
|
- {RECEIPT_WARN_NO_MEDIA, "缺纸", Error_DevMedia, DEC_HARDWARE},
|
|
|
- {RECEIPT_WARN_HEAD_UP, "机头未闭合", Error_Hardware, DEC_HARDWARE},
|
|
|
- {RECEIPT_WARN_JAMMED, "卡纸", Error_Hardware, DEC_HARDWARE},
|
|
|
-
|
|
|
- {RECEIPT_WARN_PAP_LOW, "纸少", Error_Succeed, DEC_SUCCESS},
|
|
|
-};
|
|
|
-
|
|
|
-ErrorCodeEnum ThermalPrintClassImpl::GetErrorInfo(int iCode, char* sErr, ...)
|
|
|
-{
|
|
|
- size_t iLenOne = sizeof(CmbErrorDef);
|
|
|
- size_t iLenAll = sizeof(PrintErrInfo);
|
|
|
- int iCount = iLenAll / iLenOne;
|
|
|
- char sErrInfo[256]="";
|
|
|
- DWORD dSta = 0;
|
|
|
- int iErr = -1;
|
|
|
- for (int ia = 0; ia < iCount; ia++)
|
|
|
- {
|
|
|
- if (PrintErrInfo[ia].iCode == iCode)
|
|
|
- {
|
|
|
- dSta = PrintErrInfo[ia].iInf;
|
|
|
- strcpy(sErrInfo, PrintErrInfo[ia].sInf);
|
|
|
- iErr = PrintErrInfo[ia].iRet;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- char sErrAll[300];
|
|
|
- va_list arglist;
|
|
|
- va_start(arglist, sErr);
|
|
|
- _vsnprintf(sErrAll, 128, sErr, arglist);
|
|
|
- va_end(arglist);
|
|
|
-
|
|
|
- if (sErrInfo[0])
|
|
|
- {
|
|
|
- strcat(sErrAll, " ");
|
|
|
- strcat(sErrAll, sErrInfo);
|
|
|
- }
|
|
|
- sErrAll[200] = 0;
|
|
|
- iLenOne = strlen(sErrAll);
|
|
|
- sprintf(m_DevErrInfo.szErrMsg, "{\"ErrCode\":\"%04x\",\"Description\":\"%s\"}", iErr, sErrAll);
|
|
|
-// strcpy(m_DevErrInfo.szErrMsg, sErrAll);
|
|
|
- m_DevErrInfo.dwErrMsgLen = ((dSta << 16) & 0xffff0000) + iLenOne;
|
|
|
- if (iErr != Error_Succeed)
|
|
|
- LOG4VTM(WARN, m_DevErrInfo.szErrMsg);
|
|
|
- else
|
|
|
- LOG4VTM(INFO, m_DevErrInfo.szErrMsg);
|
|
|
- return (ErrorCodeEnum)iErr;
|
|
|
-}
|
|
|
-
|