|
@@ -1,24 +1,23 @@
|
|
|
#include "stdafx.h"
|
|
|
#include "SpHelper.h"
|
|
|
#include "ThermalPrintFSM.h"
|
|
|
-#include "mod_Thermalprint.h"
|
|
|
+#include "mod_ThermalPrint.h"
|
|
|
#include "base64.h"
|
|
|
#include "GetDevInfoHelper.h"
|
|
|
+#include "SpUtility.h"
|
|
|
|
|
|
|
|
|
ErrorCodeEnum CThermalPrintFSM::OnInit()
|
|
|
{
|
|
|
- /*------2020-02-27------*/
|
|
|
- //modify by LZM
|
|
|
- VendorLogControler(this,"ThermalPrint");
|
|
|
- /*---------------------*/
|
|
|
- //获取配置文件root.ini
|
|
|
+ LOG_FUNCTION();
|
|
|
+ GET_DEV_ENTITY_BASE_POINTER()->InitializeVendorLogSwitch();
|
|
|
ErrorCodeEnum eErrDev = Error_Succeed;
|
|
|
CSimpleStringA csDllName(true);
|
|
|
- eErrDev = FetchVendorDllName(csDllName);
|
|
|
+ auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
|
|
|
+ eErrDev = pEntity->ExtractVendorLibFullPath(csDllName);
|
|
|
|
|
|
//root.ini文件未配置则置热敏打印机不可用,但是实体依然启动
|
|
|
- if(eErrDev==Error_Null){
|
|
|
+ if(eErrDev== Error_NotConfig) {
|
|
|
m_bSupportPrint=false;//表示不支持打印
|
|
|
m_bDevOpen=false;//表示dev打开失败
|
|
|
m_pCommandList=NULL;
|
|
@@ -31,10 +30,10 @@ ErrorCodeEnum CThermalPrintFSM::OnInit()
|
|
|
return eErrDev;
|
|
|
}
|
|
|
Dbg("VendorDllName: %s.", (LPCTSTR)csDllName);
|
|
|
- eErrDev = LoadDllAndGetAddress((const char*)csDllName);
|
|
|
+ eErrDev = m_hDevHelper.LoadUp(csDllName);
|
|
|
if(eErrDev!=Error_Succeed)
|
|
|
{
|
|
|
- Dbg("LoadDllAndGetAddress failed %s.", (LPCTSTR)csDllName);
|
|
|
+ Dbg("LoadUp failed %s.", (LPCTSTR)csDllName);
|
|
|
return eErrDev;
|
|
|
}
|
|
|
Dbg("Get functions' addresses succed.");
|
|
@@ -44,6 +43,7 @@ ErrorCodeEnum CThermalPrintFSM::OnInit()
|
|
|
if(eErrDev!=Error_Succeed)
|
|
|
{
|
|
|
Dbg("FetchOtherParam failed.");
|
|
|
+ m_hDevHelper.TearDown();
|
|
|
return eErrDev;
|
|
|
}
|
|
|
Dbg("m_port is %d,m_baudrate is %d",m_port,m_baudrate);
|
|
@@ -54,39 +54,11 @@ ErrorCodeEnum CThermalPrintFSM::OnInit()
|
|
|
int MilliSleepSec = 1000;
|
|
|
do
|
|
|
{
|
|
|
- if(!bCreateDevCom)
|
|
|
- {
|
|
|
- if(CreateDevComponent((DeviceBaseClass*&)m_pPrinter) != eErrDev)
|
|
|
- {
|
|
|
- LOG_TRACE("Create ThermalPrint module failed.");
|
|
|
- initCount++;
|
|
|
- m_pPrinter = NULL;
|
|
|
- if(initCount >= MilliSleepSec)
|
|
|
- {
|
|
|
- SafeFreeLibrary();
|
|
|
- return Error_DevConnFailed;
|
|
|
- }
|
|
|
- continue;
|
|
|
- }
|
|
|
- bCreateDevCom = true;
|
|
|
- LOG_TRACE("Create ThermalPrint module suc.");
|
|
|
- }
|
|
|
-
|
|
|
- eErrDev = m_pPrinter->DevOpen(m_port,m_baudrate);
|
|
|
+ eErrDev = m_hDevHelper->DevOpen(m_port,m_baudrate);
|
|
|
if(eErrDev!=Error_Succeed)
|
|
|
{
|
|
|
- LogWarn(Severity_Middle,Error_NotInit,LOG_ERR_THERMAL_PRINTER_DEV_OPEN_FAIL,"ThermalPrint open failed.");
|
|
|
- LOG_TRACE("Open device failed(%d)",eErrDev);
|
|
|
- DevErrorInfo devOpenErrInfo = {0};;
|
|
|
- if((m_pPrinter->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
- {
|
|
|
- Dbg("Open device failed : %s.", devOpenErrInfo.szErrMsg);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- Dbg("Open device failed : GetLastErr failed.");
|
|
|
- }
|
|
|
- SafeFreeLibrary();
|
|
|
+ LOG_THERMALPRINT_ERROR_MSG_MACRO(eErrDev, DevOpen);
|
|
|
+ m_hDevHelper.TearDown();
|
|
|
return Error_DevConnFailed;
|
|
|
}else{
|
|
|
m_bSupportPrint=true;//表示支持打印
|
|
@@ -96,111 +68,12 @@ ErrorCodeEnum CThermalPrintFSM::OnInit()
|
|
|
eErrDev = Error_Succeed;
|
|
|
}
|
|
|
} while (0);
|
|
|
-
|
|
|
|
|
|
return eErrDev;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum CThermalPrintFSM::FetchVendorDllName(CSimpleStringA& csDllPath)
|
|
|
+ErrorCodeEnum CThermalPrintFSM::FetchOtherParam()
|
|
|
{
|
|
|
- ErrorCodeEnum erroCode = Error_Unexpect;
|
|
|
- CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
|
|
|
- CSmartPointer<IConfigInfo> spRootConfig;
|
|
|
- erroCode = spEntityFunction->OpenConfig(Config_Root, spRootConfig);
|
|
|
- if(erroCode==Error_Succeed)
|
|
|
- {
|
|
|
- CSimpleStringA strSection = CSimpleStringA("Device.") + GetEntityBase()->GetEntityName();
|
|
|
-
|
|
|
- csDllPath = GetEntityBase()->GetEntityName();
|
|
|
- CSimpleStringA str;
|
|
|
- spRootConfig->ReadConfigValue(strSection, "Vendor", str);
|
|
|
- if(!str.IsNullOrEmpty())
|
|
|
- {
|
|
|
- csDllPath += ".";
|
|
|
- csDllPath += str;
|
|
|
- }else{
|
|
|
- //如果root未配置则Vendor未空
|
|
|
- erroCode=Error_Null;
|
|
|
- Dbg("root.ini ThermalPrint/Vendor is null");
|
|
|
- return erroCode;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- str.Clear();
|
|
|
- spRootConfig->ReadConfigValue(strSection, "Version", str);
|
|
|
- if(!str.IsNullOrEmpty())
|
|
|
- {
|
|
|
- csDllPath += ".";
|
|
|
- csDllPath += str;
|
|
|
- spRootConfig->ReadConfigValueInt(strSection, "Version", m_version);
|
|
|
- }
|
|
|
-
|
|
|
- str.Clear();
|
|
|
- spRootConfig->ReadConfigValue(strSection, "Batch", str);
|
|
|
- if(!str.IsNullOrEmpty())
|
|
|
- {
|
|
|
- csDllPath += ".";
|
|
|
- csDllPath += str;
|
|
|
- spRootConfig->ReadConfigValueInt(strSection, "Batch", m_batch);
|
|
|
- }
|
|
|
-
|
|
|
- CSimpleStringA strDepPath;
|
|
|
- GetEntityBase()->GetFunction()->GetPath("Dep", strDepPath);
|
|
|
- csDllPath = CSimpleStringA::Format("%s\\%s.dll", (LPCTSTR)strDepPath, (LPCTSTR)csDllPath);
|
|
|
-
|
|
|
- erroCode = Error_Succeed;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //TODO: SetCustLastErrorCode();
|
|
|
- }
|
|
|
- return erroCode;
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum CThermalPrintFSM::LoadDllAndGetAddress(const char* szDllName)
|
|
|
-{
|
|
|
- ErrorCodeEnum erroCode = Error_Unexpect;
|
|
|
- SafeFreeLibrary();
|
|
|
- m_hVendorDll = LoadLibraryA(szDllName);
|
|
|
- if (m_hVendorDll == NULL)
|
|
|
- {
|
|
|
- DWORD tmpError = GetLastError();
|
|
|
- Dbg("LoadLibraryA[%s] failed with error %u.", szDllName, tmpError);
|
|
|
- if(tmpError == 126)
|
|
|
- {
|
|
|
- Dbg("缺失某个DLL导致的错误。");
|
|
|
- }
|
|
|
-
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
- if ((CreateDevComponent = (lpCreateDevCom)GetProcAddress(m_hVendorDll,"CreateDevComponent")) == NULL)
|
|
|
- {
|
|
|
-
|
|
|
- Dbg("Get 'CreateDevComponent' Func address failed with code %d", GetLastError());
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
- if ((ReleaseDevComponent = (lpReleaseDevCom)GetProcAddress(m_hVendorDll,"ReleaseDevComponent")) == NULL)
|
|
|
- {
|
|
|
-
|
|
|
- Dbg("Get 'ReleaseDevComponent' Func address failed with code %d", GetLastError());
|
|
|
- return Error_DevLoadFileFailed;
|
|
|
- }
|
|
|
-
|
|
|
- return Error_Succeed;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum CThermalPrintFSM::SafeFreeLibrary()
|
|
|
-{
|
|
|
- if(m_hVendorDll){
|
|
|
- FreeLibrary(m_hVendorDll);
|
|
|
- m_hVendorDll=NULL;
|
|
|
- }
|
|
|
- return Error_Succeed;
|
|
|
-}
|
|
|
-
|
|
|
-ErrorCodeEnum CThermalPrintFSM::FetchOtherParam(){
|
|
|
ErrorCodeEnum erroCode = Error_Unexpect;
|
|
|
CSmartPointer<IEntityFunction> spEntityFunction = GetEntityBase()->GetFunction();
|
|
|
CSmartPointer<IConfigInfo> spRootConfig;
|
|
@@ -218,39 +91,14 @@ ErrorCodeEnum CThermalPrintFSM::FetchOtherParam(){
|
|
|
if(!str.IsNullOrEmpty()){
|
|
|
spRootConfig->ReadConfigValueInt(strSection, "Baudrate", m_baudrate);
|
|
|
}
|
|
|
- erroCode=Error_Succeed;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //TODO: SetCustLastErrorCode();
|
|
|
}
|
|
|
+
|
|
|
return erroCode;
|
|
|
}
|
|
|
|
|
|
ErrorCodeEnum CThermalPrintFSM::OnExit()
|
|
|
{
|
|
|
- //释放对象
|
|
|
- if(m_pPrinter)
|
|
|
- {
|
|
|
- ErrorCodeEnum erroCode = m_pPrinter->DevClose();
|
|
|
- LOG_TRACE("Close device returned %d(0x%x).", erroCode, erroCode);
|
|
|
- if(erroCode!=Error_Succeed){
|
|
|
- DevErrorInfo devOpenErrInfo = {0};
|
|
|
- if((m_pPrinter->GetLastErr(devOpenErrInfo))==Error_Succeed){
|
|
|
- Dbg("Close device failed : %s.", devOpenErrInfo.szErrMsg);
|
|
|
- }else{
|
|
|
- Dbg("Close device failed : GetLastErr failed.");
|
|
|
- }
|
|
|
- }else{
|
|
|
- m_bDevOpen=false;
|
|
|
- }
|
|
|
- erroCode = ReleaseDevComponent((DeviceBaseClass*&)m_pPrinter);
|
|
|
- LOG_TRACE("Get 'ReleaseDevComponent' Func returned %d(0x%x).", erroCode, erroCode);
|
|
|
- m_pPrinter = NULL;
|
|
|
- }
|
|
|
- //释放dll
|
|
|
- SafeFreeLibrary();
|
|
|
-
|
|
|
+ m_hDevHelper.TearDown();
|
|
|
//清理打印指令
|
|
|
if(m_pCommandList){
|
|
|
ClearPrintCMD();
|
|
@@ -263,7 +111,7 @@ ErrorCodeEnum CThermalPrintFSM::GetPrintState(int& state , CSimpleStringA& err_m
|
|
|
{
|
|
|
if(m_bDevOpen){
|
|
|
ThermalState thState;
|
|
|
- if(m_pPrinter->GetDevState(thState)==Error_Succeed){
|
|
|
+ if(m_hDevHelper->GetDevState(thState)==Error_Succeed){
|
|
|
Dbg("热敏检查:纸状态 %d , 硬件状态 %d",(int)thState.paperState,(int)thState.hardwareState);
|
|
|
if(thState.hardwareState==STATE_OK){
|
|
|
if(thState.paperState==PAPER_FULL){
|
|
@@ -283,7 +131,7 @@ ErrorCodeEnum CThermalPrintFSM::GetPrintState(int& state , CSimpleStringA& err_m
|
|
|
state=4;
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
ThermalState thermalState;
|
|
|
- if((m_pPrinter->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
err_msg = devOpenErrInfo.szErrMsg;
|
|
|
}
|
|
@@ -298,7 +146,7 @@ ErrorCodeEnum CThermalPrintFSM::GetPrintState(int& state , CSimpleStringA& err_m
|
|
|
return Error_Succeed;
|
|
|
}else{
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
- if((m_pPrinter->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
Dbg("device GetDevState failed : %s.", devOpenErrInfo.szErrMsg);
|
|
|
}
|
|
@@ -654,6 +502,8 @@ ErrorCodeEnum CThermalPrintFSM::ParsePrintXml( CSimpleStringA xml )
|
|
|
scew_parser *parser = NULL;
|
|
|
scew_tree *tree = NULL;
|
|
|
scew_element *root = NULL; //????这个如何delete
|
|
|
+ scew_list* lst = NULL;
|
|
|
+ int count = 0;
|
|
|
|
|
|
reader = scew_reader_buffer_create(xml.GetData(),xml.GetLength());
|
|
|
if (!reader) {
|
|
@@ -681,8 +531,8 @@ ErrorCodeEnum CThermalPrintFSM::ParsePrintXml( CSimpleStringA xml )
|
|
|
ret = Error_Exception;
|
|
|
goto on_error;
|
|
|
}
|
|
|
- scew_list *lst = scew_element_children(root);
|
|
|
- int count =scew_list_size(lst);
|
|
|
+ lst = scew_element_children(root);
|
|
|
+ count =scew_list_size(lst);
|
|
|
Dbg("共有%d行命令",count);
|
|
|
if (lst) {
|
|
|
for (scew_list *it = scew_list_first(lst); it; it = scew_list_next(it)) {
|
|
@@ -825,7 +675,7 @@ unsigned int CThermalPrintFSM::s2_on_event( FSMEvent* e )
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
ThermalState thermalState;
|
|
|
CSimpleStringA err_msg="";
|
|
|
- if((m_pPrinter->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
err_msg = devOpenErrInfo.szErrMsg;
|
|
|
Dbg("Print is fail :[%s],ThermalPaperState is %d ,ThermalHardwareState is %d ",err_msg.GetData(),thermalState.paperState,thermalState.hardwareState);
|
|
@@ -836,9 +686,9 @@ unsigned int CThermalPrintFSM::s2_on_event( FSMEvent* e )
|
|
|
}
|
|
|
|
|
|
//需要reset一次
|
|
|
- if(m_pPrinter->Reset()!=Error_Succeed){
|
|
|
+ if(m_hDevHelper->Reset()!=Error_Succeed){
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
- if((m_pPrinter->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
Dbg("Reset failed : [%s]", devOpenErrInfo.szErrMsg);
|
|
|
}
|
|
@@ -891,8 +741,8 @@ void CThermalPrintFSM::OnPrintSucc()
|
|
|
PrintResult evt;
|
|
|
evt.uuid = CSimpleStringA2W(m_PrintTaskUUID);
|
|
|
evt.print_Result=0;
|
|
|
- evt.error_code = CSimpleStringA2W("");
|
|
|
- evt.error_msg = CSimpleStringA2W("");
|
|
|
+ evt.error_code = L"";
|
|
|
+ evt.error_msg = L"";
|
|
|
SpSendBroadcast(m_pEntity->GetFunction(), SP_MSG_OF(PrintResult), SP_MSG_SIG_OF(PrintResult), evt);
|
|
|
}
|
|
|
|
|
@@ -903,7 +753,7 @@ int CThermalPrintFSM::PreCheckPrinter()
|
|
|
{
|
|
|
if(m_bDevOpen){
|
|
|
ThermalState thState;
|
|
|
- if(m_pPrinter->GetDevState(thState)==Error_Succeed){
|
|
|
+ if(m_hDevHelper->GetDevState(thState)==Error_Succeed){
|
|
|
Dbg("打印预检查:纸状态 %d , 硬件状态 %d",(int)thState.paperState,(int)thState.hardwareState);
|
|
|
if(thState.hardwareState==STATE_OK){
|
|
|
if(thState.paperState==PAPER_FULL){
|
|
@@ -934,7 +784,7 @@ int CThermalPrintFSM::PreCheckPrinter()
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
ThermalState thermalState;
|
|
|
CSimpleStringA err_msg="";
|
|
|
- if((m_pPrinter->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErrState(thermalState,devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
err_msg = devOpenErrInfo.szErrMsg;
|
|
|
}
|
|
@@ -955,7 +805,7 @@ int CThermalPrintFSM::PreCheckPrinter()
|
|
|
}
|
|
|
}else{
|
|
|
DevErrorInfo devOpenErrInfo = {0};
|
|
|
- if((m_pPrinter->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
+ if((m_hDevHelper->GetLastErr(devOpenErrInfo))==Error_Succeed)
|
|
|
{
|
|
|
Dbg("device GetDevState failed : %s.", devOpenErrInfo.szErrMsg);
|
|
|
}
|
|
@@ -980,7 +830,7 @@ int CThermalPrintFSM::Print()
|
|
|
{
|
|
|
if(m_bDevOpen){
|
|
|
//开始调用beginPrint
|
|
|
- if(m_pPrinter->BeginPrint(m_paperType,m_paperWidth)!=Error_Succeed){
|
|
|
+ if(m_hDevHelper->BeginPrint(m_paperType,m_paperWidth)!=Error_Succeed){
|
|
|
//失败
|
|
|
m_errCode=Error_Print;
|
|
|
m_errMsg="调用热敏适配器BeginPrint方法失败";
|
|
@@ -998,7 +848,7 @@ int CThermalPrintFSM::Print()
|
|
|
if(ExecutePrintCMD(cmd)!=Error_Succeed){
|
|
|
Dbg("执行%s命令失败",strCMD.GetData());
|
|
|
//尝试把可能执行了一半的错误纸张吐出来,以免影响后面的任务
|
|
|
- m_pPrinter->ControlAction(ACTION_CUT_ALL,1);
|
|
|
+ m_hDevHelper->ControlAction(ACTION_CUT_ALL,1);
|
|
|
isOK=false;
|
|
|
break;
|
|
|
}
|
|
@@ -1024,7 +874,8 @@ int CThermalPrintFSM::Print()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int CThermalPrintFSM::ExecutePrintCMD(PrintCommand* cmd){
|
|
|
+int CThermalPrintFSM::ExecutePrintCMD(PrintCommand* cmd)
|
|
|
+{
|
|
|
//针对不同的指令调不同的打印命令
|
|
|
if(cmd->eCommandType<10){
|
|
|
//CommandType
|
|
@@ -1046,23 +897,23 @@ int CThermalPrintFSM::ExecuteParamCMD(PrintCommand* cmd){
|
|
|
DWORD value2=0;
|
|
|
if(cmd->eCommandType==CMD_COMMON_ROW_SPACE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetParam(COMMON_ROW_SPACE,value1);
|
|
|
+ return m_hDevHelper->SetParam(COMMON_ROW_SPACE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_COMMON_ALIGN){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetParam(COMMON_ALIGN,value1);
|
|
|
+ return m_hDevHelper->SetParam(COMMON_ALIGN,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_COMMON_REVERSE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetParam(COMMON_REVERSE,value1);
|
|
|
+ return m_hDevHelper->SetParam(COMMON_REVERSE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_COMMON_LEFT_MARGIN){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetParam(COMMON_LEFT_MARGIN,value1);
|
|
|
+ return m_hDevHelper->SetParam(COMMON_LEFT_MARGIN,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_COMMON_PRINTABLE_AREA){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetParam(COMMON_PRINTABLE_AREA,value1);
|
|
|
+ return m_hDevHelper->SetParam(COMMON_PRINTABLE_AREA,value1);
|
|
|
|
|
|
}else {
|
|
|
Dbg("打印命令不存在");
|
|
@@ -1075,23 +926,23 @@ int CThermalPrintFSM::ExecuteFontCMD(PrintCommand* cmd){
|
|
|
DWORD value2=0;
|
|
|
if(cmd->eCommandType==CMD_FONT_UNDERLINE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_UNDERLINE,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_UNDERLINE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_BOLD){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_BOLD,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_BOLD,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_INVERSE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_INVERSE,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_INVERSE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_DOUBLEHEIGHT){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_DOUBLEHEIGHT,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_DOUBLEHEIGHT,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_DOUBLEWIDE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_DOUBLEWIDE,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_DOUBLEWIDE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_CUSTOM_SIZE){
|
|
|
//2个参数
|
|
@@ -1104,16 +955,16 @@ int CThermalPrintFSM::ExecuteFontCMD(PrintCommand* cmd){
|
|
|
value1 = (DWORD)atoi((LPCTSTR)valueArray[0]);
|
|
|
value2 = (DWORD)atoi((LPCTSTR)valueArray[1]);
|
|
|
|
|
|
- return m_pPrinter->SetFont(FONT_CUSTOM_SIZE,value1,value2);
|
|
|
+ return m_hDevHelper->SetFont(FONT_CUSTOM_SIZE,value1,value2);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_ROTATE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_ROTATE,value1);
|
|
|
+ return m_hDevHelper->SetFont(FONT_ROTATE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_FONT_LEFT_RIGHT_SPACE){
|
|
|
//暂时只支持一个参数,参数只有右边距
|
|
|
value2=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->SetFont(FONT_LEFT_RIGHT_SPACE,0,value2);
|
|
|
+ return m_hDevHelper->SetFont(FONT_LEFT_RIGHT_SPACE,0,value2);
|
|
|
|
|
|
}else {
|
|
|
Dbg("打印命令不存在");
|
|
@@ -1126,39 +977,39 @@ int CThermalPrintFSM::ExecuteActionCMD(PrintCommand* cmd){
|
|
|
DWORD value2=0;
|
|
|
if(cmd->eCommandType==CMD_ACTION_PRINT_ONE_LINE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_PRINT_ONE_LINE,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_PRINT_ONE_LINE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_PRINT_MOVEFORWRAD_LINES){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_PRINT_MOVEFORWRAD_LINES,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_PRINT_MOVEFORWRAD_LINES,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_PRINT_MOVEBACKWRAD_LINES){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_PRINT_MOVEBACKWRAD_LINES,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_PRINT_MOVEBACKWRAD_LINES,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_CUT_ALL){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_CUT_ALL,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_CUT_ALL,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_CUT_HALF){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_CUT_HALF,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_CUT_HALF,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_MOVE_TO_POSITION_RELATIVE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_MOVE_TO_POSITION_RELATIVE,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_MOVE_TO_POSITION_RELATIVE,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_MOVE_TO_FORWRAD_LENGTH){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_MOVE_TO_FORWRAD_LENGTH,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_MOVE_TO_FORWRAD_LENGTH,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_MOVE_TO_BLACKMARK){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_MOVE_TO_BLACKMARK,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_MOVE_TO_BLACKMARK,value1);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_ACTION_PRINT_MOVEBACK_TO_LINE){
|
|
|
value1=(DWORD)atoi(cmd->strCommand);
|
|
|
- return m_pPrinter->ControlAction(ACTION_PRINT_MOVEBACK_TO_LINE,value1);
|
|
|
+ return m_hDevHelper->ControlAction(ACTION_PRINT_MOVEBACK_TO_LINE,value1);
|
|
|
|
|
|
}else {
|
|
|
Dbg("打印命令不存在");
|
|
@@ -1184,7 +1035,7 @@ int CThermalPrintFSM::ExecuteImageCMD(PrintCommand* cmd){
|
|
|
//}
|
|
|
BYTE* data = (BYTE*)cmd->strCommand.GetData();
|
|
|
DWORD len = (DWORD)cmd->strCommand.GetLength();
|
|
|
- return m_pPrinter->PrintImage(data,len);
|
|
|
+ return m_hDevHelper->PrintImage(data,len);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_PRINT_TEXT){
|
|
|
//Dbg("要打印的文本长度:%d",cmd->strCommand.GetLength());
|
|
@@ -1192,7 +1043,7 @@ int CThermalPrintFSM::ExecuteImageCMD(PrintCommand* cmd){
|
|
|
|
|
|
BYTE* data = (BYTE*)cmd->strCommand.GetData();
|
|
|
DWORD len = (DWORD)cmd->strCommand.GetLength();
|
|
|
- return m_pPrinter->PrintText(data,len);
|
|
|
+ return m_hDevHelper->PrintText(data,len);
|
|
|
|
|
|
}else if(cmd->eCommandType==CMD_PRINT_BARCODE){
|
|
|
//3个参数
|
|
@@ -1209,7 +1060,7 @@ int CThermalPrintFSM::ExecuteImageCMD(PrintCommand* cmd){
|
|
|
//DWORD height =(DWORD)atoi((LPCTSTR)valueArray[1]);
|
|
|
//HriPosition position =(HriPosition)atoi((LPCTSTR)valueArray[2]);
|
|
|
|
|
|
- //return m_pPrinter->PrintBarCode(eType,data,len,unitWidth,height,position);
|
|
|
+ //return m_hDevHelper->PrintBarCode(eType,data,len,unitWidth,height,position);
|
|
|
Dbg("CMD_PRINT_BARCODE 打印命令暂不支持");
|
|
|
return Error_Exception;
|
|
|
}else if(cmd->eCommandType==CMD_PRINT_QR){
|
|
@@ -1237,16 +1088,25 @@ void CThermalPrintFSM::ClearPrintCMD()
|
|
|
|
|
|
char* CThermalPrintFSM::ConvertUtf8ToGBK(char* strUtf8)
|
|
|
{
|
|
|
- int len = MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, NULL, 0);
|
|
|
- WCHAR* wszGBK = new WCHAR[len + 1];
|
|
|
- memset(wszGBK, 0, len * 2 + 2);
|
|
|
- MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, wszGBK, len);
|
|
|
-
|
|
|
- len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
|
|
|
- char* szGBK = new char[len + 1];
|
|
|
- memset(szGBK, 0, len + 1);
|
|
|
- WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
|
|
|
- delete[] wszGBK;
|
|
|
-
|
|
|
+#if defined(RVC_OS_WIN)
|
|
|
+ int len = MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, NULL, 0);
|
|
|
+ WCHAR* wszGBK = new WCHAR[len + 1];
|
|
|
+ memset(wszGBK, 0, len * 2 + 2);
|
|
|
+ MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, wszGBK, len);
|
|
|
+
|
|
|
+ len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
|
|
|
+ char* szGBK = new char[len + 1];
|
|
|
+ memset(szGBK, 0, len + 1);
|
|
|
+ WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
|
|
|
+ delete[] wszGBK;
|
|
|
+ return szGBK;
|
|
|
+#else
|
|
|
+ std::string str(strUtf8);
|
|
|
+ std::string result = SP::Utility::UTF8ToGBK(str);
|
|
|
+ const int len = result.length();
|
|
|
+ char* szGBK = new char[len + 1];
|
|
|
+ memset(szGBK, 0, len + 1);
|
|
|
+ strcpy(szGBK, result.c_str());
|
|
|
return szGBK;
|
|
|
+#endif //RVC_OS_WIN
|
|
|
}
|