#include "hgscanner.h" #include #include "form_maininterface.h" #include "form_burnmode.h" #include "dialog_inputserialnum.h" #include "dialog_userinput.h" #include 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) { if (data != nullptr) { emit m_interface->testDistortion(data); } } 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; }