code_production/app/HGProductionTool/hgscanner.cpp

160 lines
4.1 KiB
C++

#include "hgscanner.h"
#include <QMessageBox>
#include "form_maininterface.h"
#include "form_burnmode.h"
#include "dialog_inputserialnum.h"
#include "dialog_userinput.h"
#include <QDebug>
hgscanner::hgscanner(Form_mainInterface *form, Form_BurnMode *burnMode, Dialog_InputSerialNum *inputSnDlg, SANE_Handle h)
: m_interface(form)
, m_burnMode(burnMode)
, m_inputSnDlg(inputSnDlg)
, devHandle_(h)
{
cb_ = nullptr;
}
hgscanner::~hgscanner()
{
}
parameter* hgscanner::get_user_input(data_from from, value_type type, const wchar_t* title, const wchar_t* desc)
{
if (from == DATA_FROM_USER)
{
Dialog_UserInput dlg(type, QString::fromStdWString(title), desc, m_interface);
if (dlg.exec())
{
return dlg.getParam();
}
}
return nullptr;
}
void hgscanner::test_callback(const wchar_t* name, test_event ev, void* data, size_t flag)
{
if (ev == TEST_EVENT_TIPS)
{
}
else if (ev == TEST_EVENT_NOT_FIND_TEST)
{
QString info = QObject::tr("Not find test item");
if (m_interface != nullptr)
{
emit m_interface->testResult(info);
}
else if (m_burnMode != nullptr)
{
emit m_burnMode->testResult(flag);
}
}
else if (ev == TEST_EVENT_IO_FAIL)
{
QString info;
if (data != nullptr)
{
info = QObject::tr("failed: ") + QString::fromStdWString((const wchar_t*)data);
}
if (m_interface != nullptr)
{
emit m_interface->testResult(info);
}
else if (m_burnMode != nullptr)
{
emit m_burnMode->testResult(flag);
}
}
else if (ev == TEST_EVENT_MANUAL_CONFIRMATION)
{
if (data != nullptr)
{
if (m_inputSnDlg != nullptr)
emit m_inputSnDlg->testResult();
}
}
else if (ev == TEST_EVENT_RESULT)
{
QString info;
if (data != nullptr)
{
if (flag)
info = QObject::tr("success: ") + QString::fromStdWString((const wchar_t*)data);
else
info = QObject::tr("failed: ") + QString::fromStdWString((const wchar_t*)data);
}
if (m_interface != nullptr)
{
emit m_interface->testResult(info);
}
else if (m_burnMode != nullptr)
{
emit m_burnMode->testResult(flag);
}
}
else if (ev == TEST_EVENT_DISTORTION_VAL)
{
float fValue = *(float*)data;
emit m_interface->testDistortion(fValue);
}
else if (ev == TEST_EVENT_FALT_INFO)
{
QString info;
if (data != nullptr)
{
info = QString::fromStdWString((const wchar_t*)data);
emit m_interface->testCorrectInfo(info);
}
}
else if (ev == TEST_EVENT_HAVE_IMAGE)
{
SANE_Image *sane_img = (SANE_Image *)data;
HGUInt imgType = 0;
if (sane_img->header.format == SANE_FRAME_GRAY)
{
if (1 == sane_img->header.depth)
imgType = HGBASE_IMGTYPE_BINARY;
else if (8 == sane_img->header.depth)
imgType = HGBASE_IMGTYPE_GRAY;
}
else if (sane_img->header.format == SANE_FRAME_RGB)
{
imgType = HGBASE_IMGTYPE_RGB;
}
HGByte *imgData = sane_img->data;
HGImageInfo imgInfo = {(HGUInt)sane_img->header.pixels_per_line, (HGUInt)sane_img->header.lines,
imgType, (HGUInt)sane_img->header.bytes_per_line, HGBASE_IMGORIGIN_TOP};
HGImage img = nullptr;
HGBase_CreateImageFromData(imgData, &imgInfo, nullptr, imgType, HGBASE_IMGORIGIN_TOP, &img);
if (nullptr != img)
{
emit m_interface->testResultImg(img);
}
}
}
int hgscanner::register_sane_callback(sane_callback cb, void* param)
{
cb_ = cb;
return 0;
}
int hgscanner::unregister_sane_callback(sane_callback cb)
{
return 0;
}
int hgscanner::io_control(unsigned long code, void* data, unsigned* len)
{
sane_io_control(devHandle_, code, data, len);
return 0;
}